| Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/rsa/rsa_asn1.c |
| Source code | Switch to Preprocessed file |
| Line | Source | Count | ||||||
|---|---|---|---|---|---|---|---|---|
| 1 | /* | - | ||||||
| 2 | * Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved. | - | ||||||
| 3 | * | - | ||||||
| 4 | * Licensed under the OpenSSL license (the "License"). You may not use | - | ||||||
| 5 | * this file except in compliance with the License. You can obtain a copy | - | ||||||
| 6 | * in the file LICENSE in the source distribution or at | - | ||||||
| 7 | * https://www.openssl.org/source/license.html | - | ||||||
| 8 | */ | - | ||||||
| 9 | - | |||||||
| 10 | #include <stdio.h> | - | ||||||
| 11 | #include "internal/cryptlib.h" | - | ||||||
| 12 | #include <openssl/bn.h> | - | ||||||
| 13 | #include <openssl/x509.h> | - | ||||||
| 14 | #include <openssl/asn1t.h> | - | ||||||
| 15 | #include "rsa_locl.h" | - | ||||||
| 16 | - | |||||||
| 17 | /* | - | ||||||
| 18 | * Override the default free and new methods, | - | ||||||
| 19 | * and calculate helper products for multi-prime | - | ||||||
| 20 | * RSA keys. | - | ||||||
| 21 | */ | - | ||||||
| 22 | static int rsa_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, | - | ||||||
| 23 | void *exarg) | - | ||||||
| 24 | { | - | ||||||
| 25 | if (operation == ASN1_OP_NEW_PRE) {
| 25937-57888 | ||||||
| 26 | *pval = (ASN1_VALUE *)RSA_new(); | - | ||||||
| 27 | if (*pval != NULL)
| 0-25937 | ||||||
| 28 | return 2; executed 25937 times by 1 test: return 2;Executed by:
| 25937 | ||||||
| 29 | return 0; never executed: return 0; | 0 | ||||||
| 30 | } else if (operation == ASN1_OP_FREE_PRE) {
| 11115-46773 | ||||||
| 31 | RSA_free((RSA *)*pval); | - | ||||||
| 32 | *pval = NULL; | - | ||||||
| 33 | return 2; executed 11115 times by 1 test: return 2;Executed by:
| 11115 | ||||||
| 34 | } else if (operation == ASN1_OP_D2I_POST) {
| 14923-31850 | ||||||
| 35 | if (((RSA *)*pval)->version != RSA_ASN1_VERSION_MULTI) {
| 168-14755 | ||||||
| 36 | /* not a multi-prime key, skip */ | - | ||||||
| 37 | return 1; executed 14755 times by 1 test: return 1;Executed by:
| 14755 | ||||||
| 38 | } | - | ||||||
| 39 | return (rsa_multip_calc_product((RSA *)*pval) == 1) ? 2 : 0; executed 168 times by 1 test: return (rsa_multip_calc_product((RSA *)*pval) == 1) ? 2 : 0;Executed by:
| 2-168 | ||||||
| 40 | } | - | ||||||
| 41 | return 1; executed 31850 times by 1 test: return 1;Executed by:
| 31850 | ||||||
| 42 | } | - | ||||||
| 43 | - | |||||||
| 44 | /* Based on definitions in RFC 8017 appendix A.1.2 */ | - | ||||||
| 45 | ASN1_SEQUENCE(RSA_PRIME_INFO) = { | - | ||||||
| 46 | ASN1_SIMPLE(RSA_PRIME_INFO, r, CBIGNUM), | - | ||||||
| 47 | ASN1_SIMPLE(RSA_PRIME_INFO, d, CBIGNUM), | - | ||||||
| 48 | ASN1_SIMPLE(RSA_PRIME_INFO, t, CBIGNUM), | - | ||||||
| 49 | } ASN1_SEQUENCE_END(RSA_PRIME_INFO) | - | ||||||
| 50 | - | |||||||
| 51 | ASN1_SEQUENCE_cb(RSAPrivateKey, rsa_cb) = { | - | ||||||
| 52 | ASN1_EMBED(RSA, version, INT32), | - | ||||||
| 53 | ASN1_SIMPLE(RSA, n, BIGNUM), | - | ||||||
| 54 | ASN1_SIMPLE(RSA, e, BIGNUM), | - | ||||||
| 55 | ASN1_SIMPLE(RSA, d, CBIGNUM), | - | ||||||
| 56 | ASN1_SIMPLE(RSA, p, CBIGNUM), | - | ||||||
| 57 | ASN1_SIMPLE(RSA, q, CBIGNUM), | - | ||||||
| 58 | ASN1_SIMPLE(RSA, dmp1, CBIGNUM), | - | ||||||
| 59 | ASN1_SIMPLE(RSA, dmq1, CBIGNUM), | - | ||||||
| 60 | ASN1_SIMPLE(RSA, iqmp, CBIGNUM), | - | ||||||
| 61 | ASN1_SEQUENCE_OF_OPT(RSA, prime_infos, RSA_PRIME_INFO) | - | ||||||
| 62 | } ASN1_SEQUENCE_END_cb(RSA, RSAPrivateKey) | - | ||||||
| 63 | - | |||||||
| 64 | - | |||||||
| 65 | ASN1_SEQUENCE_cb(RSAPublicKey, rsa_cb) = { | - | ||||||
| 66 | ASN1_SIMPLE(RSA, n, BIGNUM), | - | ||||||
| 67 | ASN1_SIMPLE(RSA, e, BIGNUM), | - | ||||||
| 68 | } ASN1_SEQUENCE_END_cb(RSA, RSAPublicKey) | - | ||||||
| 69 | - | |||||||
| 70 | /* Free up maskHash */ | - | ||||||
| 71 | static int rsa_pss_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, | - | ||||||
| 72 | void *exarg) | - | ||||||
| 73 | { | - | ||||||
| 74 | if (operation == ASN1_OP_FREE_PRE) {
| 3158-12729 | ||||||
| 75 | RSA_PSS_PARAMS *pss = (RSA_PSS_PARAMS *)*pval; | - | ||||||
| 76 | X509_ALGOR_free(pss->maskHash); | - | ||||||
| 77 | } executed 3158 times by 1 test: end of blockExecuted by:
| 3158 | ||||||
| 78 | return 1; executed 15887 times by 1 test: return 1;Executed by:
| 15887 | ||||||
| 79 | } | - | ||||||
| 80 | - | |||||||
| 81 | ASN1_SEQUENCE_cb(RSA_PSS_PARAMS, rsa_pss_cb) = { | - | ||||||
| 82 | ASN1_EXP_OPT(RSA_PSS_PARAMS, hashAlgorithm, X509_ALGOR,0), | - | ||||||
| 83 | ASN1_EXP_OPT(RSA_PSS_PARAMS, maskGenAlgorithm, X509_ALGOR,1), | - | ||||||
| 84 | ASN1_EXP_OPT(RSA_PSS_PARAMS, saltLength, ASN1_INTEGER,2), | - | ||||||
| 85 | ASN1_EXP_OPT(RSA_PSS_PARAMS, trailerField, ASN1_INTEGER,3) | - | ||||||
| 86 | } ASN1_SEQUENCE_END_cb(RSA_PSS_PARAMS, RSA_PSS_PARAMS) | - | ||||||
| 87 | - | |||||||
| 88 | IMPLEMENT_ASN1_FUNCTIONS(RSA_PSS_PARAMS) executed 26233 times by 1 test: end of blockExecuted by:
never executed: return (RSA_PSS_PARAMS *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, (&(RSA_PSS_PARAMS_it)));never executed: return ASN1_item_i2d((ASN1_VALUE *)a, out, (&(RSA_PSS_PARAMS_it)));executed 4 times by 1 test: return (RSA_PSS_PARAMS *)ASN1_item_new((&(RSA_PSS_PARAMS_it)));Executed by:
| 0-26233 | ||||||
| 89 | - | |||||||
| 90 | /* Free up maskHash */ | - | ||||||
| 91 | static int rsa_oaep_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, | - | ||||||
| 92 | void *exarg) | - | ||||||
| 93 | { | - | ||||||
| 94 | if (operation == ASN1_OP_FREE_PRE) {
| 2966-11882 | ||||||
| 95 | RSA_OAEP_PARAMS *oaep = (RSA_OAEP_PARAMS *)*pval; | - | ||||||
| 96 | X509_ALGOR_free(oaep->maskHash); | - | ||||||
| 97 | } executed 2966 times by 1 test: end of blockExecuted by:
| 2966 | ||||||
| 98 | return 1; executed 14848 times by 1 test: return 1;Executed by:
| 14848 | ||||||
| 99 | } | - | ||||||
| 100 | - | |||||||
| 101 | ASN1_SEQUENCE_cb(RSA_OAEP_PARAMS, rsa_oaep_cb) = { | - | ||||||
| 102 | ASN1_EXP_OPT(RSA_OAEP_PARAMS, hashFunc, X509_ALGOR, 0), | - | ||||||
| 103 | ASN1_EXP_OPT(RSA_OAEP_PARAMS, maskGenFunc, X509_ALGOR, 1), | - | ||||||
| 104 | ASN1_EXP_OPT(RSA_OAEP_PARAMS, pSourceFunc, X509_ALGOR, 2), | - | ||||||
| 105 | } ASN1_SEQUENCE_END_cb(RSA_OAEP_PARAMS, RSA_OAEP_PARAMS) | - | ||||||
| 106 | - | |||||||
| 107 | IMPLEMENT_ASN1_FUNCTIONS(RSA_OAEP_PARAMS) executed 4 times by 1 test: end of blockExecuted by:
never executed: return (RSA_OAEP_PARAMS *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, (&(RSA_OAEP_PARAMS_it)));never executed: return ASN1_item_i2d((ASN1_VALUE *)a, out, (&(RSA_OAEP_PARAMS_it)));executed 2 times by 1 test: return (RSA_OAEP_PARAMS *)ASN1_item_new((&(RSA_OAEP_PARAMS_it)));Executed by:
| 0-4 | ||||||
| 108 | - | |||||||
| 109 | IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(RSA, RSAPrivateKey, RSAPrivateKey) executed 6512 times by 1 test: return (RSA *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, (&(RSAPrivateKey_it)));Executed by:
executed 129 times by 1 test: return ASN1_item_i2d((ASN1_VALUE *)a, out, (&(RSAPrivateKey_it)));Executed by:
| 129-6512 | ||||||
| 110 | - | |||||||
| 111 | IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(RSA, RSAPublicKey, RSAPublicKey) executed 14335 times by 1 test: return (RSA *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, (&(RSAPublicKey_it)));Executed by:
executed 1686 times by 1 test: return ASN1_item_i2d((ASN1_VALUE *)a, out, (&(RSAPublicKey_it)));Executed by:
| 1686-14335 | ||||||
| 112 | - | |||||||
| 113 | RSA *RSAPublicKey_dup(RSA *rsa) | - | ||||||
| 114 | { | - | ||||||
| 115 | return ASN1_item_dup(ASN1_ITEM_rptr(RSAPublicKey), rsa); never executed: return ASN1_item_dup((&(RSAPublicKey_it)), rsa); | 0 | ||||||
| 116 | } | - | ||||||
| 117 | - | |||||||
| 118 | RSA *RSAPrivateKey_dup(RSA *rsa) | - | ||||||
| 119 | { | - | ||||||
| 120 | return ASN1_item_dup(ASN1_ITEM_rptr(RSAPrivateKey), rsa); never executed: return ASN1_item_dup((&(RSAPrivateKey_it)), rsa); | 0 | ||||||
| 121 | } | - | ||||||
| Source code | Switch to Preprocessed file |