@@ -70,7 +70,10 @@ typedef struct ltc_rsa_parameters {
7070 /** saltLength is only defined for PSS
7171 * If saltLength == 0 -> OAEP, else -> PSS */
7272 unsigned long saltlen ;
73- /** hash and MGF hash algorithms */
73+ /** lparam hash for OAEP
74+ * resp.
75+ * signature hash for PSS
76+ * and MGF hash algorithms */
7477 const char * hash_alg , * mgf1_hash_alg ;
7578} ltc_rsa_parameters ;
7679
@@ -109,51 +112,93 @@ int rsa_exptmod(const unsigned char *in, unsigned long inlen,
109112
110113void rsa_free (rsa_key * key );
111114
115+ typedef struct ltc_rsa_op_parameters {
116+ /* pss_oaep flag is unused */
117+ ltc_rsa_parameters params ;
118+ /* The padding type */
119+ int padding ;
120+ /* The PRNG to use.
121+ * Only required for signing and encryption. */
122+ int wprng ;
123+ prng_state * prng ;
124+ /* Operation-specific parameters */
125+ union {
126+ struct {
127+ const unsigned char * lparam ;
128+ unsigned long lparamlen ;
129+ } crypt ;
130+ /* let's make space for potential future extensions */
131+ ulong64 dummy [8 ];
132+ } u ;
133+ } ltc_rsa_op_parameters ;
134+
135+ int rsa_encrypt_key_v2 (const unsigned char * in , unsigned long inlen ,
136+ unsigned char * out , unsigned long * outlen ,
137+ ltc_rsa_op_parameters * opts ,
138+ const rsa_key * key );
139+
140+ int rsa_decrypt_key_v2 (const unsigned char * in , unsigned long inlen ,
141+ unsigned char * out , unsigned long * outlen ,
142+ ltc_rsa_op_parameters * opts ,
143+ int * stat ,
144+ const rsa_key * key );
145+
146+ int rsa_sign_hash_v2 (const unsigned char * hash , unsigned long hashlen ,
147+ unsigned char * sig , unsigned long * siglen ,
148+ ltc_rsa_op_parameters * opts ,
149+ const rsa_key * key );
150+
151+ int rsa_verify_hash_v2 (const unsigned char * sig , unsigned long siglen ,
152+ const unsigned char * hash , unsigned long hashlen ,
153+ ltc_rsa_op_parameters * opts ,
154+ int * stat ,
155+ const rsa_key * key );
156+
112157/* These use PKCS #1 v2.0 padding */
113158#define rsa_encrypt_key (in , inlen , out , outlen , lparam , lparamlen , prng , prng_idx , hash_idx , key ) \
114- rsa_encrypt_key_ex(in, inlen, out, outlen, lparam, lparamlen, prng, prng_idx, hash_idx, -1, LTC_PKCS_1_OAEP, key)
159+ rsa_encrypt_key_ex(in, inlen, out, outlen, lparam, lparamlen, prng, prng_idx, hash_idx, LTC_PKCS_1_OAEP, key)
115160
116161#define rsa_decrypt_key (in , inlen , out , outlen , lparam , lparamlen , hash_idx , stat , key ) \
117- rsa_decrypt_key_ex(in, inlen, out, outlen, lparam, lparamlen, hash_idx, -1, LTC_PKCS_1_OAEP, stat, key)
162+ rsa_decrypt_key_ex(in, inlen, out, outlen, lparam, lparamlen, hash_idx, LTC_PKCS_1_OAEP, stat, key)
118163
119164#define rsa_sign_hash (in , inlen , out , outlen , prng , prng_idx , hash_idx , saltlen , key ) \
120- rsa_sign_hash_ex(in, inlen, out, outlen, LTC_PKCS_1_PSS, prng, prng_idx, hash_idx, hash_idx, saltlen, key)
165+ rsa_sign_hash_ex(in, inlen, out, outlen, LTC_PKCS_1_PSS, prng, prng_idx, hash_idx, saltlen, key)
121166
122167#define rsa_verify_hash (sig , siglen , hash , hashlen , hash_idx , saltlen , stat , key ) \
123- rsa_verify_hash_ex(sig, siglen, hash, hashlen, LTC_PKCS_1_PSS, hash_idx, hash_idx, saltlen, stat, key)
168+ rsa_verify_hash_ex(sig, siglen, hash, hashlen, LTC_PKCS_1_PSS, hash_idx, saltlen, stat, key)
124169
125170#define rsa_sign_saltlen_get_max (hash_idx , key ) \
126171 rsa_sign_saltlen_get_max_ex(LTC_PKCS_1_PSS, hash_idx, key)
127172
128173/* These can be switched between PKCS #1 v2.x and PKCS #1 v1.5 paddings */
174+ LTC_DEPRECATED (rsa_encrypt_key_v2 )
129175int rsa_encrypt_key_ex (const unsigned char * in , unsigned long inlen ,
130176 unsigned char * out , unsigned long * outlen ,
131177 const unsigned char * lparam , unsigned long lparamlen ,
132178 prng_state * prng , int prng_idx ,
133- int mgf_hash , int lparam_hash ,
134- int padding ,
179+ int hash_idx , int padding ,
135180 const rsa_key * key );
136181
182+ LTC_DEPRECATED (rsa_decrypt_key_v2 )
137183int rsa_decrypt_key_ex (const unsigned char * in , unsigned long inlen ,
138184 unsigned char * out , unsigned long * outlen ,
139185 const unsigned char * lparam , unsigned long lparamlen ,
140- int mgf_hash , int lparam_hash ,
141- int padding ,
186+ int hash_idx , int padding ,
142187 int * stat , const rsa_key * key );
143188
189+ LTC_DEPRECATED (rsa_sign_hash_v2 )
144190int rsa_sign_hash_ex (const unsigned char * in , unsigned long inlen ,
145191 unsigned char * out , unsigned long * outlen ,
146192 int padding ,
147193 prng_state * prng , int prng_idx ,
148- int hash_idx , int mgf_hash_idx ,
149- unsigned long saltlen ,
194+ int hash_idx , unsigned long saltlen ,
150195 const rsa_key * key );
151196
197+ LTC_DEPRECATED (rsa_verify_hash_v2 )
152198int rsa_verify_hash_ex (const unsigned char * sig , unsigned long siglen ,
153199 const unsigned char * hash , unsigned long hashlen ,
154200 int padding ,
155- int hash_idx , int mgf_hash_idx ,
156- unsigned long saltlen ,
201+ int hash_idx , unsigned long saltlen ,
157202 int * stat , const rsa_key * key );
158203
159204int rsa_sign_saltlen_get_max_ex (int padding , int hash_idx , const rsa_key * key );
0 commit comments