| Line | Source | Count |
| 1 | | - |
| 2 | | - |
| 3 | | - |
| 4 | | - |
| 5 | | - |
| 6 | | - |
| 7 | | - |
| 8 | | - |
| 9 | | - |
| 10 | | - |
| 11 | | - |
| 12 | | - |
| 13 | | - |
| 14 | | - |
| 15 | | - |
| 16 | | - |
| 17 | | - |
| 18 | | - |
| 19 | | - |
| 20 | | - |
| 21 | | - |
| 22 | | - |
| 23 | | - |
| 24 | | - |
| 25 | | - |
| 26 | | - |
| 27 | | - |
| 28 | | - |
| 29 | | - |
| 30 | | - |
| 31 | | - |
| 32 | | - |
| 33 | | - |
| 34 | | - |
| 35 | | - |
| 36 | | - |
| 37 | | - |
| 38 | | - |
| 39 | | - |
| 40 | | - |
| 41 | | - |
| 42 | | - |
| 43 | | - |
| 44 | | - |
| 45 | | - |
| 46 | | - |
| 47 | | - |
| 48 | | - |
| 49 | | - |
| 50 | | - |
| 51 | | - |
| 52 | | - |
| 53 | | - |
| 54 | | - |
| 55 | | - |
| 56 | | - |
| 57 | | - |
| 58 | | - |
| 59 | #include <stdio.h> | - |
| 60 | #include <string.h> | - |
| 61 | | - |
| 62 | #include <openssl/opensslconf.h> | - |
| 63 | | - |
| 64 | #include <openssl/buffer.h> | - |
| 65 | #include <openssl/err.h> | - |
| 66 | #include <openssl/evp.h> | - |
| 67 | #include <openssl/objects.h> | - |
| 68 | #include <openssl/pem.h> | - |
| 69 | #include <openssl/pkcs12.h> | - |
| 70 | #include <openssl/x509.h> | - |
| 71 | | - |
| 72 | #ifndef OPENSSL_NO_ENGINE | - |
| 73 | #include <openssl/engine.h> | - |
| 74 | #endif | - |
| 75 | | - |
| 76 | #include "asn1_locl.h" | - |
| 77 | | - |
| 78 | int pem_check_suffix(const char *pem_str, const char *suffix); | - |
| 79 | | - |
| 80 | EVP_PKEY * | - |
| 81 | PEM_read_bio_PrivateKey(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, void *u) | - |
| 82 | { | - |
| 83 | char *nm = NULL; | - |
| 84 | const unsigned char *p = NULL; | - |
| 85 | unsigned char *data = NULL; | - |
| 86 | long len; | - |
| 87 | int slen; | - |
| 88 | EVP_PKEY *ret = NULL; | - |
| 89 | | - |
| 90 | if (!PEM_bytes_read_bio(&data, &len, &nm, PEM_STRING_EVP_PKEY,| TRUE | never evaluated | | FALSE | evaluated 65 times by 5 testsEvaluated by:- libcrypto.so.44.0.1
- pkcs7test
- servertest
- ssltest
- tlstest
|
| 0-65 |
| 91 | bp, cb, u))| TRUE | never evaluated | | FALSE | evaluated 65 times by 5 testsEvaluated by:- libcrypto.so.44.0.1
- pkcs7test
- servertest
- ssltest
- tlstest
|
| 0-65 |
| 92 | return NULL; never executed: return ((void *)0) ; | 0 |
| 93 | p = data; | - |
| 94 | | - |
| 95 | if (strcmp(nm, PEM_STRING_PKCS8INF) == 0) { never executed: __result = (((const unsigned char *) (const char *) ( nm ))[3] - __s2[3]); never executed: end of block never executed: end of block never executed: __result = (((const unsigned char *) (const char *) ( "PRIVATE KEY" ))[3] - __s2[3]); never executed: end of block never executed: end of block | TRUE | never evaluated | | FALSE | evaluated 65 times by 5 testsEvaluated by:- libcrypto.so.44.0.1
- pkcs7test
- servertest
- ssltest
- tlstest
|
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| 0-65 |
| 96 | PKCS8_PRIV_KEY_INFO *p8inf; | - |
| 97 | p8inf = d2i_PKCS8_PRIV_KEY_INFO(NULL, &p, len); | - |
| 98 | if (!p8inf)| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 99 | goto p8err; never executed: goto p8err; | 0 |
| 100 | ret = EVP_PKCS82PKEY(p8inf); | - |
| 101 | if (x) {| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 102 | EVP_PKEY_free(*x); | - |
| 103 | *x = ret; | - |
| 104 | } never executed: end of block | 0 |
| 105 | PKCS8_PRIV_KEY_INFO_free(p8inf); | - |
| 106 | } else if (strcmp(nm, PEM_STRING_PKCS8) == 0) { never executed: end of block never executed: __result = (((const unsigned char *) (const char *) ( nm ))[3] - __s2[3]); never executed: end of block never executed: end of block never executed: __result = (((const unsigned char *) (const char *) ( "ENCRYPTED PRIVATE KEY" ))[3] - __s2[3]); never executed: end of block never executed: end of block | TRUE | never evaluated | | FALSE | evaluated 65 times by 5 testsEvaluated by:- libcrypto.so.44.0.1
- pkcs7test
- servertest
- ssltest
- tlstest
|
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| 0-65 |
| 107 | PKCS8_PRIV_KEY_INFO *p8inf; | - |
| 108 | X509_SIG *p8; | - |
| 109 | int klen; | - |
| 110 | char psbuf[PEM_BUFSIZE]; | - |
| 111 | p8 = d2i_X509_SIG(NULL, &p, len); | - |
| 112 | if (!p8)| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 113 | goto p8err; never executed: goto p8err; | 0 |
| 114 | if (cb)| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 115 | klen = cb(psbuf, PEM_BUFSIZE, 0, u); never executed: klen = cb(psbuf, 1024, 0, u); | 0 |
| 116 | else | - |
| 117 | klen = PEM_def_callback(psbuf, PEM_BUFSIZE, 0, u); never executed: klen = PEM_def_callback(psbuf, 1024, 0, u); | 0 |
| 118 | if (klen <= 0) {| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 119 | PEMerror(PEM_R_BAD_PASSWORD_READ); | - |
| 120 | X509_SIG_free(p8); | - |
| 121 | goto err; never executed: goto err; | 0 |
| 122 | } | - |
| 123 | p8inf = PKCS8_decrypt(p8, psbuf, klen); | - |
| 124 | X509_SIG_free(p8); | - |
| 125 | if (!p8inf)| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 126 | goto p8err; never executed: goto p8err; | 0 |
| 127 | ret = EVP_PKCS82PKEY(p8inf); | - |
| 128 | if (x) {| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 129 | EVP_PKEY_free(*x); | - |
| 130 | *x = ret; | - |
| 131 | } never executed: end of block | 0 |
| 132 | PKCS8_PRIV_KEY_INFO_free(p8inf); | - |
| 133 | } else if ((slen = pem_check_suffix(nm, "PRIVATE KEY")) > 0) { never executed: end of block | TRUE | evaluated 65 times by 5 testsEvaluated by:- libcrypto.so.44.0.1
- pkcs7test
- servertest
- ssltest
- tlstest
| | FALSE | never evaluated |
| 0-65 |
| 134 | const EVP_PKEY_ASN1_METHOD *ameth; | - |
| 135 | ameth = EVP_PKEY_asn1_find_str(NULL, nm, slen); | - |
| 136 | if (!ameth || !ameth->old_priv_decode)| TRUE | never evaluated | | FALSE | evaluated 65 times by 5 testsEvaluated by:- libcrypto.so.44.0.1
- pkcs7test
- servertest
- ssltest
- tlstest
|
| TRUE | never evaluated | | FALSE | evaluated 65 times by 5 testsEvaluated by:- libcrypto.so.44.0.1
- pkcs7test
- servertest
- ssltest
- tlstest
|
| 0-65 |
| 137 | goto p8err; never executed: goto p8err; | 0 |
| 138 | ret = d2i_PrivateKey(ameth->pkey_id, x, &p, len); | - |
| 139 | }executed 65 times by 5 tests: end of blockExecuted by:- libcrypto.so.44.0.1
- pkcs7test
- servertest
- ssltest
- tlstest
| 65 |
| 140 | | - |
| 141 | p8err:code before this statement executed 65 times by 5 tests: p8err:Executed by:- libcrypto.so.44.0.1
- pkcs7test
- servertest
- ssltest
- tlstest
| 65 |
| 142 | if (ret == NULL)| TRUE | never evaluated | | FALSE | evaluated 65 times by 5 testsEvaluated by:- libcrypto.so.44.0.1
- pkcs7test
- servertest
- ssltest
- tlstest
|
| 0-65 |
| 143 | PEMerror(ERR_R_ASN1_LIB); never executed: ERR_put_error(9,(0xfff),(13),__FILE__,143); | 0 |
| 144 | err:code before this statement executed 65 times by 5 tests: err:Executed by:- libcrypto.so.44.0.1
- pkcs7test
- servertest
- ssltest
- tlstest
| 65 |
| 145 | free(nm); | - |
| 146 | freezero(data, len); | - |
| 147 | return (ret);executed 65 times by 5 tests: return (ret);Executed by:- libcrypto.so.44.0.1
- pkcs7test
- servertest
- ssltest
- tlstest
| 65 |
| 148 | } | - |
| 149 | | - |
| 150 | int | - |
| 151 | PEM_write_bio_PrivateKey(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc, | - |
| 152 | unsigned char *kstr, int klen, pem_password_cb *cb, void *u) | - |
| 153 | { | - |
| 154 | char pem_str[80]; | - |
| 155 | | - |
| 156 | if (!x->ameth || x->ameth->priv_encode)| TRUE | never evaluated | | FALSE | evaluated 1 time by 1 test |
| TRUE | evaluated 1 time by 1 test | | FALSE | never evaluated |
| 0-1 |
| 157 | return PEM_write_bio_PKCS8PrivateKey(bp, x, enc,executed 1 time by 1 test: return PEM_write_bio_PKCS8PrivateKey(bp, x, enc, (char *)kstr, klen, cb, u); | 1 |
| 158 | (char *)kstr, klen, cb, u);executed 1 time by 1 test: return PEM_write_bio_PKCS8PrivateKey(bp, x, enc, (char *)kstr, klen, cb, u); | 1 |
| 159 | | - |
| 160 | (void) snprintf(pem_str, sizeof(pem_str), "%s PRIVATE KEY", | - |
| 161 | x->ameth->pem_str); | - |
| 162 | return PEM_ASN1_write_bio((i2d_of_void *)i2d_PrivateKey, never executed: return PEM_ASN1_write_bio((i2d_of_void *)i2d_PrivateKey, pem_str, bp, x, enc, kstr, klen, cb, u); | 0 |
| 163 | pem_str, bp, x, enc, kstr, klen, cb, u); never executed: return PEM_ASN1_write_bio((i2d_of_void *)i2d_PrivateKey, pem_str, bp, x, enc, kstr, klen, cb, u); | 0 |
| 164 | } | - |
| 165 | | - |
| 166 | EVP_PKEY * | - |
| 167 | PEM_read_bio_Parameters(BIO *bp, EVP_PKEY **x) | - |
| 168 | { | - |
| 169 | char *nm = NULL; | - |
| 170 | const unsigned char *p = NULL; | - |
| 171 | unsigned char *data = NULL; | - |
| 172 | long len; | - |
| 173 | int slen; | - |
| 174 | EVP_PKEY *ret = NULL; | - |
| 175 | | - |
| 176 | if (!PEM_bytes_read_bio(&data, &len, &nm, PEM_STRING_PARAMETERS,| TRUE | never evaluated | | FALSE | evaluated 1 time by 1 test |
| 0-1 |
| 177 | bp, 0, NULL))| TRUE | never evaluated | | FALSE | evaluated 1 time by 1 test |
| 0-1 |
| 178 | return NULL; never executed: return ((void *)0) ; | 0 |
| 179 | p = data; | - |
| 180 | | - |
| 181 | if ((slen = pem_check_suffix(nm, "PARAMETERS")) > 0) {| TRUE | evaluated 1 time by 1 test | | FALSE | never evaluated |
| 0-1 |
| 182 | ret = EVP_PKEY_new(); | - |
| 183 | if (!ret)| TRUE | never evaluated | | FALSE | evaluated 1 time by 1 test |
| 0-1 |
| 184 | goto err; never executed: goto err; | 0 |
| 185 | if (!EVP_PKEY_set_type_str(ret, nm, slen) ||| TRUE | never evaluated | | FALSE | evaluated 1 time by 1 test |
| 0-1 |
| 186 | !ret->ameth->param_decode ||| TRUE | never evaluated | | FALSE | evaluated 1 time by 1 test |
| 0-1 |
| 187 | !ret->ameth->param_decode(ret, &p, len)) {| TRUE | never evaluated | | FALSE | evaluated 1 time by 1 test |
| 0-1 |
| 188 | EVP_PKEY_free(ret); | - |
| 189 | ret = NULL; | - |
| 190 | goto err; never executed: goto err; | 0 |
| 191 | } | - |
| 192 | if (x) {| TRUE | never evaluated | | FALSE | evaluated 1 time by 1 test |
| 0-1 |
| 193 | EVP_PKEY_free(*x); | - |
| 194 | *x = ret; | - |
| 195 | } never executed: end of block | 0 |
| 196 | }executed 1 time by 1 test: end of block | 1 |
| 197 | | - |
| 198 | err:code before this statement executed 1 time by 1 test: err: | 1 |
| 199 | if (ret == NULL)| TRUE | never evaluated | | FALSE | evaluated 1 time by 1 test |
| 0-1 |
| 200 | PEMerror(ERR_R_ASN1_LIB); never executed: ERR_put_error(9,(0xfff),(13),__FILE__,200); | 0 |
| 201 | free(nm); | - |
| 202 | free(data); | - |
| 203 | return (ret);executed 1 time by 1 test: return (ret); | 1 |
| 204 | } | - |
| 205 | | - |
| 206 | int | - |
| 207 | PEM_write_bio_Parameters(BIO *bp, EVP_PKEY *x) | - |
| 208 | { | - |
| 209 | char pem_str[80]; | - |
| 210 | | - |
| 211 | if (!x->ameth || !x->ameth->param_encode)| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 212 | return 0; never executed: return 0; | 0 |
| 213 | | - |
| 214 | (void) snprintf(pem_str, sizeof(pem_str), "%s PARAMETERS", | - |
| 215 | x->ameth->pem_str); | - |
| 216 | return PEM_ASN1_write_bio((i2d_of_void *)x->ameth->param_encode, never executed: return PEM_ASN1_write_bio((i2d_of_void *)x->ameth->param_encode, pem_str, bp, x, ((void *)0) , ((void *)0) , 0, 0, ((void *)0) ); | 0 |
| 217 | pem_str, bp, x, NULL, NULL, 0, 0, NULL); never executed: return PEM_ASN1_write_bio((i2d_of_void *)x->ameth->param_encode, pem_str, bp, x, ((void *)0) , ((void *)0) , 0, 0, ((void *)0) ); | 0 |
| 218 | } | - |
| 219 | | - |
| 220 | EVP_PKEY * | - |
| 221 | PEM_read_PrivateKey(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, void *u) | - |
| 222 | { | - |
| 223 | BIO *b; | - |
| 224 | EVP_PKEY *ret; | - |
| 225 | | - |
| 226 | if ((b = BIO_new(BIO_s_file())) == NULL) {| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 227 | PEMerror(ERR_R_BUF_LIB); | - |
| 228 | return (0); never executed: return (0); | 0 |
| 229 | } | - |
| 230 | BIO_set_fp(b, fp, BIO_NOCLOSE); | - |
| 231 | ret = PEM_read_bio_PrivateKey(b, x, cb, u); | - |
| 232 | BIO_free(b); | - |
| 233 | return (ret); never executed: return (ret); | 0 |
| 234 | } | - |
| 235 | | - |
| 236 | int | - |
| 237 | PEM_write_PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, | - |
| 238 | unsigned char *kstr, int klen, pem_password_cb *cb, void *u) | - |
| 239 | { | - |
| 240 | BIO *b; | - |
| 241 | int ret; | - |
| 242 | | - |
| 243 | if ((b = BIO_new_fp(fp, BIO_NOCLOSE)) == NULL) {| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 244 | PEMerror(ERR_R_BUF_LIB); | - |
| 245 | return 0; never executed: return 0; | 0 |
| 246 | } | - |
| 247 | ret = PEM_write_bio_PrivateKey(b, x, enc, kstr, klen, cb, u); | - |
| 248 | BIO_free(b); | - |
| 249 | return ret; never executed: return ret; | 0 |
| 250 | } | - |
| 251 | | - |
| | |