| line |
true |
false |
branch |
|
129
|
39 |
25 |
while ((err = ERR_get_error()) != 0) { |
|
133
|
25 |
0 |
croak("%s:%d: OpenSSL error: %s", p_file, p_line, |
|
161
|
63 |
23 |
if (d) { |
|
178
|
0 |
86 |
CHECK_NEW(rsa, 1, rsaData); |
|
187
|
0 |
86 |
return sv_bless( |
|
278
|
298 |
0 |
if (padding != RSA_NO_PADDING && padding != RSA_PKCS1_PADDING) |
|
|
197 |
101 |
if (padding != RSA_NO_PADDING && padding != RSA_PKCS1_PADDING) |
|
281
|
0 |
298 |
if (EVP_PKEY_CTX_set_rsa_padding(ctx, effective_pad) <= 0) |
|
285
|
0 |
298 |
if (!md) |
|
288
|
0 |
298 |
if (EVP_PKEY_CTX_set_signature_md(ctx, md) <= 0) { |
|
293
|
197 |
101 |
if (effective_pad == RSA_PKCS1_PSS_PADDING) { |
|
318
|
298 |
0 |
return ok ? md : NULL; |
|
362
|
99 |
29 |
: &PL_sv_undef; |
|
372
|
0 |
60 |
THROW(BIO_flush(p_stringBio) == 1); |
|
375
|
0 |
60 |
THROW(datasize > 0); |
|
402
|
10 |
36 |
if (SvPOK(p_passphraseSv)) { |
|
406
|
0 |
46 |
CHECK_OPEN_SSL(stringBIO = BIO_new_mem_buf(keyString, keyStringLength)); |
|
410
|
0 |
46 |
CHECK_OPEN_SSL(BIO_set_close(stringBIO, BIO_CLOSE) == 1); |
|
413
|
6 |
40 |
CHECK_OPEN_SSL(rsa); |
|
421
|
4 |
36 |
if (EVP_PKEY_get_base_id(rsa) != EVP_PKEY_RSA) { |
|
436
|
32 |
30 |
if (p_rsa->padding == RSA_PKCS1_OAEP_PADDING) { |
|
439
|
12 |
18 |
} else if (p_rsa->padding == RSA_PKCS1_PADDING) { |
|
442
|
16 |
2 |
} else if (p_rsa->padding == RSA_NO_PADDING) { |
|
446
|
60 |
2 |
if (max_len >= 0 && from_length > (STRLEN) max_len) { |
|
|
9 |
51 |
if (max_len >= 0 && from_length > (STRLEN) max_len) { |
|
473
|
80 |
22 |
if(is_encrypt && p_rsa->padding == RSA_PKCS1_PADDING) { |
|
|
2 |
78 |
if(is_encrypt && p_rsa->padding == RSA_PKCS1_PADDING) { |
|
478
|
78 |
22 |
if(is_encrypt && p_rsa->padding == RSA_PKCS1_PSS_PADDING) { |
|
|
2 |
76 |
if(is_encrypt && p_rsa->padding == RSA_PKCS1_PSS_PADDING) { |
|
485
|
76 |
22 |
if (is_encrypt) { |
|
487
|
57 |
19 |
if (p_rsa->padding != RSA_NO_PADDING && p_rsa->padding != RSA_PKCS1_OAEP_PADDING) { |
|
|
0 |
57 |
if (p_rsa->padding != RSA_NO_PADDING && p_rsa->padding != RSA_PKCS1_OAEP_PADDING) { |
|
495
|
0 |
22 |
if (p_rsa->padding == RSA_PKCS1_OAEP_PADDING) { |
|
499
|
0 |
22 |
if (p_rsa->padding == RSA_PKCS1_PSS_PADDING) { |
|
507
|
0 |
98 |
THROW(ctx); |
|
509
|
0 |
98 |
THROW(init_crypt(ctx) == 1); |
|
510
|
0 |
98 |
THROW(EVP_PKEY_CTX_set_rsa_padding(ctx, p_rsa->padding) > 0); |
|
511
|
0 |
98 |
THROW(p_crypt(ctx, NULL, &to_length, from, from_length) == 1); |
|
513
|
0 |
98 |
THROW(to); |
|
514
|
13 |
85 |
THROW(p_crypt(ctx, to, &to_length, from, from_length) == 1); |
|
520
|
13 |
0 |
if (ctx) EVP_PKEY_CTX_free(ctx); |
|
595
|
0 |
2 |
CHECK_OPEN_SSL(bio = BIO_new_mem_buf(keyString, keyStringLength)); |
|
602
|
0 |
2 |
CHECK_OPEN_SSL(pkey); |
|
604
|
1 |
1 |
if (EVP_PKEY_get_base_id(pkey) != EVP_PKEY_RSA) { |
|
627
|
0 |
2 |
CHECK_OPEN_SSL(bio = BIO_new_mem_buf(keyString, keyStringLength)); |
|
633
|
0 |
2 |
if (!dctx) { |
|
637
|
1 |
1 |
if (!OSSL_DECODER_from_bio(dctx, bio)) { |
|
647
|
0 |
1 |
CHECK_OPEN_SSL(pkey); |
|
667
|
0 |
4 |
CHECK_OPEN_SSL(bio = BIO_new_mem_buf(keyString, keyStringLength)); |
|
673
|
0 |
4 |
if (!dctx) { |
|
677
|
2 |
2 |
if (SvPOK(passphrase_SV)) { |
|
680
|
0 |
2 |
if (!OSSL_DECODER_CTX_set_passphrase(dctx, pass, passlen)) { |
|
686
|
2 |
2 |
if (!OSSL_DECODER_from_bio(dctx, bio)) { |
|
701
|
0 |
2 |
CHECK_OPEN_SSL(pkey); |
|
723
|
26 |
0 |
const EVP_CIPHER* enc = NULL; |
|
725
|
1 |
25 |
if (!_is_private(p_rsa)) |
|
729
|
8 |
17 |
if (SvPOK(cipher_name_SV) && !SvPOK(passphrase_SV)) { |
|
|
1 |
7 |
if (SvPOK(cipher_name_SV) && !SvPOK(passphrase_SV)) { |
|
732
|
9 |
15 |
if (SvPOK(passphrase_SV)) { |
|
734
|
7 |
2 |
if (SvPOK(cipher_name_SV)) { |
|
741
|
1 |
8 |
if (enc == NULL) { |
|
746
|
0 |
23 |
CHECK_OPEN_SSL(stringBIO = BIO_new(BIO_s_mem())); |
|
747
|
0 |
23 |
CHECK_OPEN_SSL_BIO(PEM_write_bio_PrivateKey_traditional( |
|
764
|
6 |
0 |
const EVP_CIPHER* enc = NULL; |
|
766
|
4 |
2 |
if (SvPOK(cipher_name_SV) && !SvPOK(passphrase_SV)) { |
|
|
1 |
3 |
if (SvPOK(cipher_name_SV) && !SvPOK(passphrase_SV)) { |
|
769
|
3 |
2 |
if (SvPOK(passphrase_SV)) { |
|
771
|
3 |
0 |
if (SvPOK(cipher_name_SV)) { |
|
778
|
1 |
2 |
if (enc == NULL) { |
|
783
|
0 |
4 |
CHECK_OPEN_SSL(stringBIO = BIO_new(BIO_s_mem())); |
|
785
|
0 |
4 |
CHECK_OPEN_SSL_BIO(PEM_write_bio_PrivateKey( |
|
803
|
23 |
0 |
int error = 0; |
|
806
|
0 |
23 |
CHECK_OPEN_SSL(stringBIO = BIO_new(BIO_s_mem())); |
|
810
|
23 |
0 |
THROW(ctx != NULL && OSSL_ENCODER_CTX_get_num_encoders(ctx)); |
|
|
0 |
23 |
THROW(ctx != NULL && OSSL_ENCODER_CTX_get_num_encoders(ctx)); |
|
812
|
0 |
23 |
THROW(OSSL_ENCODER_to_bio(ctx, stringBIO) == 1); |
|
819
|
0 |
0 |
if (ctx) { OSSL_ENCODER_CTX_free(ctx); ctx = NULL; } |
|
837
|
0 |
10 |
CHECK_OPEN_SSL(stringBIO = BIO_new(BIO_s_mem())); |
|
838
|
0 |
10 |
CHECK_OPEN_SSL_BIO(PEM_write_bio_PUBKEY(stringBIO, p_rsa->rsa), stringBIO); |
|
854
|
29 |
13 |
int error = 0; |
|
857
|
4 |
38 |
if (SvIV(bitsSV) < 512) |
|
859
|
32 |
6 |
if (exponent < 3 || (exponent % 2) == 0) |
|
|
1 |
31 |
if (exponent < 3 || (exponent % 2) == 0) |
|
880
|
0 |
31 |
THROW(ctx); |
|
881
|
0 |
31 |
THROW(EVP_PKEY_keygen_init(ctx) == 1); |
|
882
|
0 |
31 |
THROW(EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, SvIV(bitsSV)) > 0); |
|
883
|
0 |
31 |
THROW(EVP_PKEY_CTX_set1_rsa_keygen_pubexp(ctx, e) > 0); |
|
884
|
31 |
0 |
THROW(EVP_PKEY_generate(ctx, &rsa) == 1); |
|
890
|
0 |
31 |
if (error) |
|
893
|
0 |
31 |
CHECK_OPEN_SSL(rsa); |
|
923
|
18 |
2 |
if (!(n && e)) |
|
|
0 |
18 |
if (!(n && e)) |
|
929
|
0 |
18 |
THROW(pctx != NULL); |
|
930
|
0 |
18 |
THROW(EVP_PKEY_fromdata_init(pctx) > 0); |
|
932
|
0 |
18 |
THROW(params_build); |
|
941
|
0 |
18 |
THROW(OSSL_PARAM_BLD_push_BN(params_build, OSSL_PKEY_PARAM_RSA_N, n)); |
|
942
|
0 |
18 |
THROW(OSSL_PARAM_BLD_push_BN(params_build, OSSL_PKEY_PARAM_RSA_E, e)); |
|
944
|
9 |
9 |
if (p || q) |
|
|
4 |
5 |
if (p || q) |
|
947
|
0 |
13 |
THROW(ctx = BN_CTX_new()); |
|
948
|
4 |
9 |
if (!p) |
|
950
|
0 |
4 |
THROW(p = BN_new()); |
|
951
|
0 |
4 |
THROW(BN_div(p, NULL, n, q, ctx)); |
|
953
|
3 |
6 |
else if (!q) |
|
955
|
0 |
3 |
THROW(q = BN_new()); |
|
956
|
0 |
3 |
THROW(BN_div(q, NULL, n, p, ctx)); |
|
967
|
0 |
13 |
THROW(p_minus_1 = BN_new()); |
|
968
|
0 |
13 |
THROW(BN_sub(p_minus_1, p, BN_value_one())); |
|
969
|
0 |
13 |
THROW(q_minus_1 = BN_new()); |
|
970
|
0 |
13 |
THROW(BN_sub(q_minus_1, q, BN_value_one())); |
|
971
|
2 |
11 |
if (!d) |
|
973
|
0 |
2 |
THROW(d = BN_new()); |
|
974
|
0 |
2 |
THROW(BN_mul(d, p_minus_1, q_minus_1, ctx)); |
|
975
|
0 |
2 |
THROW(BN_mod_inverse(d, e, d, ctx)); |
|
981
|
0 |
13 |
THROW(OSSL_PARAM_BLD_push_BN(params_build, OSSL_PKEY_PARAM_RSA_D, d)); |
|
982
|
0 |
13 |
THROW(OSSL_PARAM_BLD_push_BN(params_build, OSSL_PKEY_PARAM_RSA_FACTOR1, p)); |
|
983
|
0 |
13 |
THROW(OSSL_PARAM_BLD_push_BN(params_build, OSSL_PKEY_PARAM_RSA_FACTOR2, q)); |
|
988
|
0 |
13 |
THROW(dmp1 = BN_new()); |
|
989
|
0 |
13 |
THROW(BN_mod(dmp1, d, p_minus_1, ctx)); |
|
990
|
0 |
13 |
THROW(dmq1 = BN_new()); |
|
991
|
0 |
13 |
THROW(BN_mod(dmq1, d, q_minus_1, ctx)); |
|
992
|
0 |
13 |
THROW(iqmp = BN_new()); |
|
993
|
0 |
13 |
THROW(BN_mod_inverse(iqmp, q, p, ctx)); |
|
1000
|
0 |
13 |
THROW(OSSL_PARAM_BLD_push_BN(params_build, OSSL_PKEY_PARAM_RSA_EXPONENT1, dmp1)); |
|
1001
|
0 |
13 |
THROW(OSSL_PARAM_BLD_push_BN(params_build, OSSL_PKEY_PARAM_RSA_EXPONENT2, dmq1)); |
|
1002
|
0 |
13 |
THROW(OSSL_PARAM_BLD_push_BN(params_build, OSSL_PKEY_PARAM_RSA_COEFFICIENT1, iqmp)); |
|
1005
|
0 |
13 |
THROW(params != NULL); |
|
1008
|
13 |
0 |
THROW( status > 0 && rsa != NULL ); |
|
|
0 |
13 |
THROW( status > 0 && rsa != NULL ); |
|
1010
|
13 |
0 |
int check_ok = (test_ctx != NULL && EVP_PKEY_check(test_ctx) == 1); |
|
|
10 |
3 |
int check_ok = (test_ctx != NULL && EVP_PKEY_check(test_ctx) == 1); |
|
1012
|
3 |
10 |
THROW(check_ok); |
|
1055
|
2 |
3 |
if(d != NULL) |
|
1056
|
0 |
2 |
THROW(OSSL_PARAM_BLD_push_BN(params_build, OSSL_PKEY_PARAM_RSA_D, d)); |
|
1058
|
0 |
5 |
THROW(params != NULL); |
|
1065
|
5 |
0 |
THROW( status > 0 && rsa != NULL ); |
|
|
0 |
5 |
THROW( status > 0 && rsa != NULL ); |
|
1078
|
0 |
15 |
THROW(RETVAL = make_rsa_obj(proto, rsa)); |
|
1092
|
3 |
0 |
if (p_minus_1) BN_clear_free(p_minus_1); |
|
1093
|
3 |
0 |
if (q_minus_1) BN_clear_free(q_minus_1); |
|
1094
|
3 |
0 |
if (dmp1) BN_clear_free(dmp1); |
|
1095
|
3 |
0 |
if (dmq1) BN_clear_free(dmq1); |
|
1096
|
3 |
0 |
if (iqmp) BN_clear_free(iqmp); |
|
1097
|
3 |
0 |
if (ctx) BN_CTX_free(ctx); |
|
1099
|
3 |
0 |
if (pctx) { EVP_PKEY_CTX_free(pctx); pctx = NULL; } |
|
1100
|
3 |
0 |
if (params_build) { OSSL_PARAM_BLD_free(params_build); params_build = NULL; } |
|
1101
|
3 |
0 |
if (params) { OSSL_PARAM_free(params); params = NULL; } |
|
1103
|
0 |
3 |
if (error) |
|
1126
|
16 |
0 |
BIGNUM* iqmp = NULL; |
|
1153
|
0 |
16 |
if (!EVP_PKEY_get_bn_param(rsa, OSSL_PKEY_PARAM_RSA_N, &n)) |
|
1155
|
0 |
16 |
if (!EVP_PKEY_get_bn_param(rsa, OSSL_PKEY_PARAM_RSA_E, &e)) { |
|
1179
|
0 |
16 |
XPUSHs(cor_bn2sv(n)); |
|
1180
|
0 |
16 |
XPUSHs(cor_bn2sv(e)); |
|
1181
|
0 |
16 |
XPUSHs(cor_bn2sv(d)); |
|
1182
|
0 |
16 |
XPUSHs(cor_bn2sv(p)); |
|
1183
|
0 |
16 |
XPUSHs(cor_bn2sv(q)); |
|
1184
|
0 |
16 |
XPUSHs(cor_bn2sv(dmp1)); |
|
1185
|
0 |
16 |
XPUSHs(cor_bn2sv(dmq1)); |
|
1186
|
0 |
16 |
XPUSHs(cor_bn2sv(iqmp)); |
|
1221
|
2 |
39 |
if (!_is_private(p_rsa)) |
|
1238
|
4 |
21 |
if (!_is_private(p_rsa)) |
|
1242
|
4 |
17 |
if (p_rsa->padding == RSA_PKCS1_OAEP_PADDING) { |
|
1246
|
3 |
14 |
if (p_rsa->padding == RSA_PKCS1_PSS_PADDING) { |
|
1264
|
1 |
11 |
if (p_rsa->padding == RSA_PKCS1_OAEP_PADDING) { |
|
1268
|
1 |
10 |
if (p_rsa->padding == RSA_PKCS1_PSS_PADDING) { |
|
1292
|
2 |
15 |
if (!_is_private(p_rsa)) |
|
1298
|
0 |
15 |
CHECK_OPEN_SSL(pctx); |
|
1435
|
96 |
0 |
int error = 0; |
|
1439
|
3 |
93 |
if (!_is_private(p_rsa)) |
|
1445
|
0 |
93 |
CHECK_OPEN_SSL(digest = get_message_digest(text_SV, p_rsa->hashMode, digest_buf)); |
|
1448
|
0 |
93 |
THROW(ctx); |
|
1449
|
0 |
93 |
THROW(EVP_PKEY_sign_init(ctx)); |
|
1450
|
0 |
93 |
THROW(setup_pss_sign_ctx(ctx, p_rsa->padding, p_rsa->hashMode, &md)); |
|
1451
|
0 |
93 |
THROW(EVP_PKEY_sign(ctx, NULL, &signature_length, digest, get_digest_length(p_rsa->hashMode)) == 1); |
|
1454
|
0 |
93 |
THROW(signature); |
|
1456
|
0 |
93 |
THROW(EVP_PKEY_sign(ctx, signature, &signature_length, digest, get_digest_length(p_rsa->hashMode)) == 1); |
|
1464
|
0 |
0 |
if (md) EVP_MD_free(md); |
|
1465
|
0 |
0 |
if (ctx) EVP_PKEY_CTX_free(ctx); |
|
1499
|
206 |
0 |
EVP_MD *md = NULL; |
|
1508
|
1 |
205 |
if (EVP_PKEY_get_size(p_rsa->rsa) < sig_length) |
|
1514
|
0 |
205 |
CHECK_OPEN_SSL(digest = get_message_digest(text_SV, p_rsa->hashMode, digest_buf)); |
|
1517
|
0 |
205 |
THROW(ctx); |
|
1518
|
0 |
205 |
THROW(EVP_PKEY_verify_init(ctx) == 1); |
|
1519
|
0 |
205 |
THROW(setup_pss_sign_ctx(ctx, p_rsa->padding, p_rsa->hashMode, &md)); |
|
1527
|
0 |
0 |
if (md) EVP_MD_free(md); |
|
1528
|
0 |
0 |
if (ctx) EVP_PKEY_CTX_free(ctx); |
|
1558
|
1 |
12 |
RETVAL = _is_private(p_rsa); |