Skip to content

Commit 2b23527

Browse files
committed
CHANGE: allow private RSA exponents optional (may be computed and are not in PPK files)
1 parent 4c07b7a commit 2b23527

File tree

2 files changed

+151
-117
lines changed

2 files changed

+151
-117
lines changed

src/core/n-crypt.c

+19-7
Original file line numberDiff line numberDiff line change
@@ -213,9 +213,9 @@
213213
// d [binary!] "Private exponent"
214214
// p [binary!] "Prime number 1"
215215
// q [binary!] "Prime number 2"
216-
// dP [binary!]
217-
// dQ [binary!]
218-
// qInv [binary!]
216+
// dP [binary! none!] "Exponent1: d mod (p-1)"
217+
// dQ [binary! none!] "Exponent2: d mod (q-1)"
218+
// qInv [binary!] "Coefficient: (inverse of q) mod p"
219219
// ]
220220
***********************************************************************/
221221
{
@@ -225,10 +225,15 @@
225225
REBSER *d = VAL_SERIES(D_ARG(4));
226226
REBSER *p = VAL_SERIES(D_ARG(5));
227227
REBSER *q = VAL_SERIES(D_ARG(6));
228-
REBSER *dP = VAL_SERIES(D_ARG(7));
229-
REBSER *dQ = VAL_SERIES(D_ARG(8));
228+
REBVAL *val_dp = D_ARG(7) ;
229+
REBVAL *val_dq = D_ARG(8) ;
230230
REBSER *qInv = VAL_SERIES(D_ARG(9));
231231

232+
REBYTE *dp = NULL;
233+
REBYTE *dq = NULL;
234+
REBCNT len_dp = 0;
235+
REBCNT len_dq = 0;
236+
232237
REBVAL *ret = D_RET;
233238
REBSER *ser = Make_Series(sizeof(RSA_CTX), 1, FALSE);
234239
SERIES_TAIL(ser) = sizeof(RSA_CTX);
@@ -239,15 +244,22 @@
239244
SET_HANDLE(ret, ser, SYM_RSA, HANDLE_SERIES);
240245

241246
if(ref_private) {
247+
if (IS_BINARY(val_dp)) {
248+
dp = BIN_DATA(VAL_SERIES(val_dp));
249+
len_dp = BIN_LEN(VAL_SERIES(val_dp));
250+
}
251+
if (IS_BINARY(val_dq)) {
252+
dq = BIN_DATA(VAL_SERIES(val_dq));
253+
len_dq = BIN_LEN(VAL_SERIES(val_dq));
254+
}
242255
RSA_priv_key_new(
243256
rsa_ctx,
244257
BIN_DATA(n), BIN_LEN(n),
245258
BIN_DATA(e), BIN_LEN(e),
246259
BIN_DATA(d), BIN_LEN(d),
247260
BIN_DATA(p), BIN_LEN(p),
248261
BIN_DATA(q), BIN_LEN(q),
249-
BIN_DATA(dP), BIN_LEN(dP),
250-
BIN_DATA(dQ), BIN_LEN(dQ),
262+
dp, len_dp, dq, len_dq,
251263
BIN_DATA(qInv), BIN_LEN(qInv)
252264
);
253265
} else {

0 commit comments

Comments
 (0)