Branch Coverage

RSA.xs
Criterion Covered Total %
branch 239 374 63.9


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);