1 /* LTC_PKCS Header Info */
2 module tomcrypt.pkcs;
3
4 import core.stdc.config : c_ulong;
5
6 import tomcrypt.prng;
7
8 extern(C) nothrow:
9
10 /* ===> LTC_PKCS #1 -- RSA Cryptography <=== */
11 version(LTC_PKCS_1)
12 {
13
14 enum ltc_pkcs_1_v1_5_blocks
15 {
16 LTC_LTC_PKCS_1_EMSA = 1, /* Block type 1 (LTC_PKCS #1 v1.5 signature padding) */
17 LTC_LTC_PKCS_1_EME = 2 /* Block type 2 (LTC_PKCS #1 v1.5 encryption padding) */
18 }
19 enum LTC_LTC_PKCS_1_EMSA = ltc_pkcs_1_v1_5_blocks.LTC_LTC_PKCS_1_EMSA;
20 enum LTC_LTC_PKCS_1_EME = ltc_pkcs_1_v1_5_blocks.LTC_LTC_PKCS_1_EME;
21
22 enum ltc_pkcs_1_paddings
23 {
24 LTC_LTC_PKCS_1_V1_5 = 1, /* LTC_PKCS #1 v1.5 padding (\sa ltc_pkcs_1_v1_5_blocks) */
25 LTC_LTC_PKCS_1_OAEP = 2, /* LTC_PKCS #1 v2.0 encryption padding */
26 LTC_LTC_PKCS_1_PSS = 3 /* LTC_PKCS #1 v2.1 signature padding */
27 }
28 enum LTC_LTC_PKCS_1_V1_5 = ltc_pkcs_1_paddings.LTC_LTC_PKCS_1_V1_5;
29 enum LTC_LTC_PKCS_1_OAEP = ltc_pkcs_1_paddings.LTC_LTC_PKCS_1_OAEP;
30 enum LTC_LTC_PKCS_1_PSS = ltc_pkcs_1_paddings.LTC_LTC_PKCS_1_PSS;
31
32 int pkcs_1_mgf1( int hash_idx,
33 const ubyte* seed, c_ulong seedlen,
34 ubyte* mask, c_ulong masklen);
35
36 int pkcs_1_i2osp(void *n, c_ulong modulus_len, ubyte* _out);
37 int pkcs_1_os2ip(void *n, ubyte* _in, c_ulong inlen);
38
39 /* *** v1.5 padding */
40 int pkcs_1_v1_5_encode(const ubyte* msg,
41 c_ulong msglen,
42 int block_type,
43 c_ulong modulus_bitlen,
44 prng_state* prng,
45 int prng_idx,
46 ubyte* _out,
47 c_ulong* outlen);
48
49 int pkcs_1_v1_5_decode(const ubyte* msg,
50 c_ulong msglen,
51 int block_type,
52 c_ulong modulus_bitlen,
53 ubyte* _out,
54 c_ulong* outlen,
55 int* is_valid);
56
57 /* *** v2.1 padding */
58 int pkcs_1_oaep_encode(const ubyte* msg, c_ulong msglen,
59 const ubyte* lparam, c_ulong lparamlen,
60 c_ulong modulus_bitlen, prng_state* prng,
61 int prng_idx, int hash_idx,
62 ubyte* _out, c_ulong* outlen);
63
64 int pkcs_1_oaep_decode(const ubyte* msg, c_ulong msglen,
65 const ubyte* lparam, c_ulong lparamlen,
66 c_ulong modulus_bitlen, int hash_idx,
67 ubyte* _out, c_ulong* outlen,
68 int* res);
69
70 int pkcs_1_pss_encode(const ubyte* msghash, c_ulong msghashlen,
71 c_ulong saltlen, prng_state* prng,
72 int prng_idx, int hash_idx,
73 c_ulong modulus_bitlen,
74 ubyte* _out, c_ulong* outlen);
75
76 int pkcs_1_pss_decode(const ubyte* msghash, c_ulong msghashlen,
77 const ubyte* sig, c_ulong siglen,
78 c_ulong saltlen, int hash_idx,
79 c_ulong modulus_bitlen, int* res);
80
81 } /* LTC_PKCS_1 */
82
83 /* ===> LTC_PKCS #5 -- Password Based Cryptography <=== */
84 version(LTC_PKCS_5)
85 {
86
87 /* Algorithm #1 (old) */
88 int pkcs_5_alg1(const ubyte* password, c_ulong password_len,
89 const ubyte* salt,
90 int iteration_count, int hash_idx,
91 ubyte* _out, c_ulong* outlen);
92
93 /* Algorithm #2 (new) */
94 int pkcs_5_alg2(const ubyte* password, c_ulong password_len,
95 const ubyte* salt, c_ulong salt_len,
96 int iteration_count, int hash_idx,
97 ubyte* _out, c_ulong* outlen);
98
99 } /* LTC_PKCS_5 */
100
101 /* $Source: /cvs/libtom/libtomcrypt/src/headers/tomcrypt_pkcs.h,v $ */
102 /* $Revision: 1.8 $ */
103 /* $Date: 2007/05/12 14:32:35 $ */