| Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/rsa/rsa_oaep.c |
| Switch to Source code | Preprocessed file |
| Line | Source | Count | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | - | |||||||||||||
| 2 | - | |||||||||||||
| 3 | - | |||||||||||||
| 4 | - | |||||||||||||
| 5 | - | |||||||||||||
| 6 | static int MGF1(unsigned char *mask, long len, const unsigned char *seed, | - | ||||||||||||
| 7 | long seedlen); | - | ||||||||||||
| 8 | - | |||||||||||||
| 9 | int | - | ||||||||||||
| 10 | RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, | - | ||||||||||||
| 11 | const unsigned char *from, int flen, const unsigned char *param, int plen) | - | ||||||||||||
| 12 | { | - | ||||||||||||
| 13 | int i, emlen = tlen - 1; | - | ||||||||||||
| 14 | unsigned char *db, *seed; | - | ||||||||||||
| 15 | unsigned char *dbmask, seedmask[20]; | - | ||||||||||||
| 16 | - | |||||||||||||
| 17 | if (flen > emlen - 2 * 20 - 1
| 0-3 | ||||||||||||
| 18 | ERR_put_error(4,(0xfff),(110),__FILE__,47); | - | ||||||||||||
| 19 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 20 | } | - | ||||||||||||
| 21 | - | |||||||||||||
| 22 | if (emlen < 2 * 20 + 1
| 0-3 | ||||||||||||
| 23 | ERR_put_error(4,(0xfff),(120),__FILE__,52); | - | ||||||||||||
| 24 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 25 | } | - | ||||||||||||
| 26 | - | |||||||||||||
| 27 | to[0] = 0; | - | ||||||||||||
| 28 | seed = to + 1; | - | ||||||||||||
| 29 | db = to + 20 + 1; | - | ||||||||||||
| 30 | - | |||||||||||||
| 31 | if (!EVP_Digest((void *)param, plen, db,
| 0-3 | ||||||||||||
| 32 | ((void *)0)
| 0-3 | ||||||||||||
| 33 | , EVP_sha1(),
| 0-3 | ||||||||||||
| 34 | ((void *)0)
| 0-3 | ||||||||||||
| 35 | )
| 0-3 | ||||||||||||
| 36 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 37 | memset(db + 20, 0, | - | ||||||||||||
| 38 | emlen - flen - 2 * 20 - 1); | - | ||||||||||||
| 39 | db[emlen - flen - 20 - 1] = 0x01; | - | ||||||||||||
| 40 | memcpy(db + emlen - flen - 20, from, flen); | - | ||||||||||||
| 41 | arc4random_buf(seed, 20); | - | ||||||||||||
| 42 | - | |||||||||||||
| 43 | dbmask = malloc(emlen - 20); | - | ||||||||||||
| 44 | if (dbmask ==
| 0-3 | ||||||||||||
| 45 | ((void *)0)
| 0-3 | ||||||||||||
| 46 | ) { | - | ||||||||||||
| 47 | ERR_put_error(4,(0xfff),((1|64)),__FILE__,70); | - | ||||||||||||
| 48 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 49 | } | - | ||||||||||||
| 50 | - | |||||||||||||
| 51 | if (MGF1(dbmask, emlen - 20, seed,
| 0-3 | ||||||||||||
| 52 | 20) < 0
| 0-3 | ||||||||||||
| 53 | free(dbmask); | - | ||||||||||||
| 54 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 55 | } | - | ||||||||||||
| 56 | for (i = 0; i < emlen - 20
| 3-179 | ||||||||||||
| 57 | db[i] ^= dbmask[i]; executed 179 times by 1 test: db[i] ^= dbmask[i];Executed by:
| 179 | ||||||||||||
| 58 | - | |||||||||||||
| 59 | if (MGF1(seedmask, 20, db,
| 0-3 | ||||||||||||
| 60 | emlen - 20) < 0
| 0-3 | ||||||||||||
| 61 | free(dbmask); | - | ||||||||||||
| 62 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 63 | } | - | ||||||||||||
| 64 | for (i = 0; i < 20
| 3-60 | ||||||||||||
| 65 | seed[i] ^= seedmask[i]; executed 60 times by 1 test: seed[i] ^= seedmask[i];Executed by:
| 60 | ||||||||||||
| 66 | - | |||||||||||||
| 67 | free(dbmask); | - | ||||||||||||
| 68 | return executed 3 times by 1 test: 1;return 1;Executed by:
executed 3 times by 1 test: return 1;Executed by:
| 3 | ||||||||||||
| 69 | } | - | ||||||||||||
| 70 | - | |||||||||||||
| 71 | int | - | ||||||||||||
| 72 | RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen, | - | ||||||||||||
| 73 | const unsigned char *from, int flen, int num, const unsigned char *param, | - | ||||||||||||
| 74 | int plen) | - | ||||||||||||
| 75 | { | - | ||||||||||||
| 76 | int i, dblen, mlen = -1; | - | ||||||||||||
| 77 | const unsigned char *maskeddb; | - | ||||||||||||
| 78 | int lzero; | - | ||||||||||||
| 79 | unsigned char *db = | - | ||||||||||||
| 80 | ((void *)0) | - | ||||||||||||
| 81 | ; | - | ||||||||||||
| 82 | unsigned char seed[20], phash[20]; | - | ||||||||||||
| 83 | unsigned char *padded_from; | - | ||||||||||||
| 84 | int bad = 0; | - | ||||||||||||
| 85 | - | |||||||||||||
| 86 | if (--
| 0-490 | ||||||||||||
| 87 | - | |||||||||||||
| 88 | - | |||||||||||||
| 89 | - | |||||||||||||
| 90 | - | |||||||||||||
| 91 | goto never executed: decoding_err;goto decoding_err;never executed: goto decoding_err; | 0 | ||||||||||||
| 92 | - | |||||||||||||
| 93 | lzero = num - flen; | - | ||||||||||||
| 94 | if (lzero < 0
| 10-480 | ||||||||||||
| 95 | - | |||||||||||||
| 96 | - | |||||||||||||
| 97 | - | |||||||||||||
| 98 | - | |||||||||||||
| 99 | - | |||||||||||||
| 100 | - | |||||||||||||
| 101 | - | |||||||||||||
| 102 | bad = 1; | - | ||||||||||||
| 103 | lzero = 0; | - | ||||||||||||
| 104 | flen = num; | - | ||||||||||||
| 105 | } executed 480 times by 1 test: end of blockExecuted by:
| 480 | ||||||||||||
| 106 | - | |||||||||||||
| 107 | dblen = num - 20; | - | ||||||||||||
| 108 | if ((
| 0-490 | ||||||||||||
| 109 | ((void *)0)
| 0-490 | ||||||||||||
| 110 | ) { | - | ||||||||||||
| 111 | ERR_put_error(4,(0xfff),((1|64)),__FILE__,130); | - | ||||||||||||
| 112 | return never executed: -1;return -1;never executed: return -1; | 0 | ||||||||||||
| 113 | } | - | ||||||||||||
| 114 | - | |||||||||||||
| 115 | - | |||||||||||||
| 116 | - | |||||||||||||
| 117 | - | |||||||||||||
| 118 | - | |||||||||||||
| 119 | padded_from = db + dblen; | - | ||||||||||||
| 120 | memset(padded_from, 0, lzero); | - | ||||||||||||
| 121 | memcpy(padded_from + lzero, from, flen); | - | ||||||||||||
| 122 | - | |||||||||||||
| 123 | maskeddb = padded_from + 20; | - | ||||||||||||
| 124 | - | |||||||||||||
| 125 | if (MGF1(seed, 20, maskeddb, dblen)
| 0-490 | ||||||||||||
| 126 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 127 | for (i = 0; i < 20
| 490-9800 | ||||||||||||
| 128 | seed[i] ^= padded_from[i]; executed 9800 times by 1 test: seed[i] ^= padded_from[i];Executed by:
| 9800 | ||||||||||||
| 129 | - | |||||||||||||
| 130 | if (MGF1(db, dblen, seed, 20)
| 0-490 | ||||||||||||
| 131 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 132 | for (i = 0; i < dblen
| 490-36154 | ||||||||||||
| 133 | db[i] ^= maskeddb[i]; executed 36154 times by 1 test: db[i] ^= maskeddb[i];Executed by:
| 36154 | ||||||||||||
| 134 | - | |||||||||||||
| 135 | if (!EVP_Digest((void *)param, plen, phash,
| 0-490 | ||||||||||||
| 136 | ((void *)0)
| 0-490 | ||||||||||||
| 137 | , EVP_sha1(),
| 0-490 | ||||||||||||
| 138 | ((void *)0)
| 0-490 | ||||||||||||
| 139 | )
| 0-490 | ||||||||||||
| 140 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 141 | - | |||||||||||||
| 142 | if (timingsafe_memcmp(db, phash, 20) != 0
| 0-484 | ||||||||||||
| 143 | goto executed 484 times by 1 test: decoding_err;goto decoding_err;Executed by:
executed 484 times by 1 test: goto decoding_err;Executed by:
| 484 | ||||||||||||
| 144 | else { | - | ||||||||||||
| 145 | for (i = 20; i < dblen
| 0-190 | ||||||||||||
| 146 | if (db[i] != 0x00
| 6-184 | ||||||||||||
| 147 | break; executed 6 times by 1 test: break;Executed by:
| 6 | ||||||||||||
| 148 | if (i == dblen
| 0-6 | ||||||||||||
| 149 | goto never executed: decoding_err;goto decoding_err;never executed: goto decoding_err; | 0 | ||||||||||||
| 150 | else { | - | ||||||||||||
| 151 | - | |||||||||||||
| 152 | - | |||||||||||||
| 153 | mlen = dblen - ++i; | - | ||||||||||||
| 154 | if (tlen < mlen
| 0-6 | ||||||||||||
| 155 | ERR_put_error(4,(0xfff),(109),__FILE__,170); | - | ||||||||||||
| 156 | mlen = -1; | - | ||||||||||||
| 157 | } never executed: elseend of block | 0 | ||||||||||||
| 158 | memcpy(to, db + i, mlen); executed 6 times by 1 test: memcpy(to, db + i, mlen);Executed by:
| 6 | ||||||||||||
| 159 | } | - | ||||||||||||
| 160 | } | - | ||||||||||||
| 161 | free(db); | - | ||||||||||||
| 162 | return executed 6 times by 1 test: mlen;return mlen;Executed by:
executed 6 times by 1 test: return mlen;Executed by:
| 6 | ||||||||||||
| 163 | - | |||||||||||||
| 164 | decoding_err: | - | ||||||||||||
| 165 | - | |||||||||||||
| 166 | - | |||||||||||||
| 167 | - | |||||||||||||
| 168 | - | |||||||||||||
| 169 | ERR_put_error(4,(0xfff),(121),__FILE__,184); | - | ||||||||||||
| 170 | err: code before this statement executed 484 times by 1 test: err:Executed by:
| 484 | ||||||||||||
| 171 | free(db); | - | ||||||||||||
| 172 | return executed 484 times by 1 test: -1;return -1;Executed by:
executed 484 times by 1 test: return -1;Executed by:
| 484 | ||||||||||||
| 173 | } | - | ||||||||||||
| 174 | - | |||||||||||||
| 175 | int | - | ||||||||||||
| 176 | PKCS1_MGF1(unsigned char *mask, long len, const unsigned char *seed, | - | ||||||||||||
| 177 | long seedlen, const EVP_MD *dgst) | - | ||||||||||||
| 178 | { | - | ||||||||||||
| 179 | long i, outlen = 0; | - | ||||||||||||
| 180 | unsigned char cnt[4]; | - | ||||||||||||
| 181 | EVP_MD_CTX c; | - | ||||||||||||
| 182 | unsigned char md[64]; | - | ||||||||||||
| 183 | int mdlen; | - | ||||||||||||
| 184 | int rv = -1; | - | ||||||||||||
| 185 | - | |||||||||||||
| 186 | EVP_MD_CTX_init(&c); | - | ||||||||||||
| 187 | mdlen = EVP_MD_size(dgst); | - | ||||||||||||
| 188 | if (mdlen < 0
| 0-986 | ||||||||||||
| 189 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 190 | for (i = 0; outlen < len
| 986-2646 | ||||||||||||
| 191 | cnt[0] = (unsigned char)((i >> 24) & 255); | - | ||||||||||||
| 192 | cnt[1] = (unsigned char)((i >> 16) & 255); | - | ||||||||||||
| 193 | cnt[2] = (unsigned char)((i >> 8)) & 255; | - | ||||||||||||
| 194 | cnt[3] = (unsigned char)(i & 255); | - | ||||||||||||
| 195 | if (!EVP_DigestInit_ex(&c, dgst,
| 0-2646 | ||||||||||||
| 196 | ((void *)0)
| 0-2646 | ||||||||||||
| 197 | )
| 0-2646 | ||||||||||||
| 198 | !EVP_DigestUpdate(&c, seed, seedlen)
| 0-2646 | ||||||||||||
| 199 | !EVP_DigestUpdate(&c, cnt, 4)
| 0-2646 | ||||||||||||
| 200 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 201 | if (outlen + mdlen <= len
| 493-2153 | ||||||||||||
| 202 | if (!EVP_DigestFinal_ex(&c, mask + outlen,
| 0-2153 | ||||||||||||
| 203 | ((void *)0)
| 0-2153 | ||||||||||||
| 204 | )
| 0-2153 | ||||||||||||
| 205 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 206 | outlen += mdlen; | - | ||||||||||||
| 207 | } executed 2153 times by 1 test: else {end of blockExecuted by:
| 2153 | ||||||||||||
| 208 | if (!EVP_DigestFinal_ex(&c, md,
| 0-493 | ||||||||||||
| 209 | ((void *)0)
| 0-493 | ||||||||||||
| 210 | )
| 0-493 | ||||||||||||
| 211 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 212 | memcpy(mask + outlen, md, len - outlen); | - | ||||||||||||
| 213 | outlen = len; | - | ||||||||||||
| 214 | } executed 493 times by 1 test: end of blockExecuted by:
| 493 | ||||||||||||
| 215 | } | - | ||||||||||||
| 216 | rv = 0; | - | ||||||||||||
| 217 | err: code before this statement executed 986 times by 1 test: err:Executed by:
| 986 | ||||||||||||
| 218 | EVP_MD_CTX_cleanup(&c); | - | ||||||||||||
| 219 | return executed 986 times by 1 test: rv;return rv;Executed by:
executed 986 times by 1 test: return rv;Executed by:
| 986 | ||||||||||||
| 220 | } | - | ||||||||||||
| 221 | - | |||||||||||||
| 222 | static int | - | ||||||||||||
| 223 | MGF1(unsigned char *mask, long len, const unsigned char *seed, long seedlen) | - | ||||||||||||
| 224 | { | - | ||||||||||||
| 225 | return executed 986 times by 1 test: PKCS1_MGF1(mask, len, seed, seedlen, EVP_sha1());return PKCS1_MGF1(mask, len, seed, seedlen, EVP_sha1());Executed by:
executed 986 times by 1 test: return PKCS1_MGF1(mask, len, seed, seedlen, EVP_sha1());Executed by:
| 986 | ||||||||||||
| 226 | } | - | ||||||||||||
| Switch to Source code | Preprocessed file |