| Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/gost/gostr341001_key.c |
| Switch to Source code | Preprocessed file |
| Line | Source | Count | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | - | |||||||||||||
| 2 | - | |||||||||||||
| 3 | - | |||||||||||||
| 4 | - | |||||||||||||
| 5 | struct gost_key_st { | - | ||||||||||||
| 6 | EC_GROUP *group; | - | ||||||||||||
| 7 | - | |||||||||||||
| 8 | EC_POINT *pub_key; | - | ||||||||||||
| 9 | BIGNUM *priv_key; | - | ||||||||||||
| 10 | - | |||||||||||||
| 11 | int references; | - | ||||||||||||
| 12 | - | |||||||||||||
| 13 | int digest_nid; | - | ||||||||||||
| 14 | }; | - | ||||||||||||
| 15 | - | |||||||||||||
| 16 | GOST_KEY * | - | ||||||||||||
| 17 | GOST_KEY_new(void) | - | ||||||||||||
| 18 | { | - | ||||||||||||
| 19 | GOST_KEY *ret; | - | ||||||||||||
| 20 | - | |||||||||||||
| 21 | ret = malloc(sizeof(GOST_KEY)); | - | ||||||||||||
| 22 | if (ret ==
| 0 | ||||||||||||
| 23 | ((void *)0)
| 0 | ||||||||||||
| 24 | ) { | - | ||||||||||||
| 25 | ERR_put_error(50,(0xfff),((1|64)),__FILE__,81); | - | ||||||||||||
| 26 | return never executed: (return ( ((void *)0) );never executed: return ( ((void *)0) ); | 0 | ||||||||||||
| 27 | ((void *)0) never executed: return ( ((void *)0) ); | 0 | ||||||||||||
| 28 | ); never executed: return ( ((void *)0) ); | 0 | ||||||||||||
| 29 | } | - | ||||||||||||
| 30 | ret->group = | - | ||||||||||||
| 31 | ((void *)0) | - | ||||||||||||
| 32 | ; | - | ||||||||||||
| 33 | ret->pub_key = | - | ||||||||||||
| 34 | ((void *)0) | - | ||||||||||||
| 35 | ; | - | ||||||||||||
| 36 | ret->priv_key = | - | ||||||||||||
| 37 | ((void *)0) | - | ||||||||||||
| 38 | ; | - | ||||||||||||
| 39 | ret->references = 1; | - | ||||||||||||
| 40 | ret->digest_nid = 0; | - | ||||||||||||
| 41 | return never executed: (ret);return (ret);never executed: return (ret); | 0 | ||||||||||||
| 42 | } | - | ||||||||||||
| 43 | - | |||||||||||||
| 44 | void | - | ||||||||||||
| 45 | GOST_KEY_free(GOST_KEY *r) | - | ||||||||||||
| 46 | { | - | ||||||||||||
| 47 | int i; | - | ||||||||||||
| 48 | - | |||||||||||||
| 49 | if (r ==
| 0-1 | ||||||||||||
| 50 | ((void *)0)
| 0-1 | ||||||||||||
| 51 | ) | - | ||||||||||||
| 52 | return; executed 1 time by 1 test: return;Executed by:
| 1 | ||||||||||||
| 53 | - | |||||||||||||
| 54 | i = CRYPTO_add_lock(&r->references,-1,33,__FILE__,100); | - | ||||||||||||
| 55 | if (i > 0
| 0 | ||||||||||||
| 56 | return; never executed: return; | 0 | ||||||||||||
| 57 | - | |||||||||||||
| 58 | EC_GROUP_free(r->group); | - | ||||||||||||
| 59 | EC_POINT_free(r->pub_key); | - | ||||||||||||
| 60 | BN_clear_free(r->priv_key); | - | ||||||||||||
| 61 | - | |||||||||||||
| 62 | freezero(r, sizeof(GOST_KEY)); | - | ||||||||||||
| 63 | } never executed: end of block | 0 | ||||||||||||
| 64 | - | |||||||||||||
| 65 | int | - | ||||||||||||
| 66 | GOST_KEY_check_key(const GOST_KEY *key) | - | ||||||||||||
| 67 | { | - | ||||||||||||
| 68 | int ok = 0; | - | ||||||||||||
| 69 | BN_CTX *ctx = | - | ||||||||||||
| 70 | ((void *)0) | - | ||||||||||||
| 71 | ; | - | ||||||||||||
| 72 | BIGNUM *order = | - | ||||||||||||
| 73 | ((void *)0) | - | ||||||||||||
| 74 | ; | - | ||||||||||||
| 75 | EC_POINT *point = | - | ||||||||||||
| 76 | ((void *)0) | - | ||||||||||||
| 77 | ; | - | ||||||||||||
| 78 | - | |||||||||||||
| 79 | if (key ==
| 0 | ||||||||||||
| 80 | ((void *)0)
| 0 | ||||||||||||
| 81 | || key->group ==
| 0 | ||||||||||||
| 82 | ((void *)0)
| 0 | ||||||||||||
| 83 | || key->pub_key ==
| 0 | ||||||||||||
| 84 | ((void *)0)
| 0 | ||||||||||||
| 85 | ) { | - | ||||||||||||
| 86 | ERR_put_error(50,(0xfff),((3|64)),__FILE__,120); | - | ||||||||||||
| 87 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 88 | } | - | ||||||||||||
| 89 | if (EC_POINT_is_at_infinity(key->group, key->pub_key) != 0
| 0 | ||||||||||||
| 90 | ERR_put_error(50,(0xfff),(106),__FILE__,124); | - | ||||||||||||
| 91 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 92 | } | - | ||||||||||||
| 93 | if ((
| 0 | ||||||||||||
| 94 | ((void *)0)
| 0 | ||||||||||||
| 95 | ) | - | ||||||||||||
| 96 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 97 | if ((
| 0 | ||||||||||||
| 98 | ((void *)0)
| 0 | ||||||||||||
| 99 | ) | - | ||||||||||||
| 100 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 101 | - | |||||||||||||
| 102 | - | |||||||||||||
| 103 | if (EC_POINT_is_on_curve(key->group, key->pub_key, ctx) == 0
| 0 | ||||||||||||
| 104 | ERR_put_error(50,(0xfff),(107),__FILE__,134); | - | ||||||||||||
| 105 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 106 | } | - | ||||||||||||
| 107 | - | |||||||||||||
| 108 | if ((
| 0 | ||||||||||||
| 109 | ((void *)0)
| 0 | ||||||||||||
| 110 | ) | - | ||||||||||||
| 111 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 112 | if (EC_GROUP_get_order(key->group, order, ctx) == 0
| 0 | ||||||||||||
| 113 | ERR_put_error(50,(0xfff),(122),__FILE__,141); | - | ||||||||||||
| 114 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 115 | } | - | ||||||||||||
| 116 | if (EC_POINT_mul(key->group, point,
| 0 | ||||||||||||
| 117 | ((void *)0)
| 0 | ||||||||||||
| 118 | , key->pub_key, order,
| 0 | ||||||||||||
| 119 | ctx) == 0
| 0 | ||||||||||||
| 120 | ERR_put_error(50,(0xfff),(16),__FILE__,146); | - | ||||||||||||
| 121 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 122 | } | - | ||||||||||||
| 123 | if (EC_POINT_is_at_infinity(key->group, point) == 0
| 0 | ||||||||||||
| 124 | ERR_put_error(50,(0xfff),(130),__FILE__,150); | - | ||||||||||||
| 125 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 126 | } | - | ||||||||||||
| 127 | - | |||||||||||||
| 128 | - | |||||||||||||
| 129 | - | |||||||||||||
| 130 | - | |||||||||||||
| 131 | if (key->priv_key !=
| 0 | ||||||||||||
| 132 | ((void *)0)
| 0 | ||||||||||||
| 133 | ) { | - | ||||||||||||
| 134 | if (BN_cmp(key->priv_key, order) >= 0
| 0 | ||||||||||||
| 135 | ERR_put_error(50,(0xfff),(130),__FILE__,159); | - | ||||||||||||
| 136 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 137 | } | - | ||||||||||||
| 138 | if (EC_POINT_mul(key->group, point, key->priv_key,
| 0 | ||||||||||||
| 139 | ((void *)0)
| 0 | ||||||||||||
| 140 | ,
| 0 | ||||||||||||
| 141 | ((void *)0)
| 0 | ||||||||||||
| 142 | ,
| 0 | ||||||||||||
| 143 | ctx) == 0
| 0 | ||||||||||||
| 144 | ERR_put_error(50,(0xfff),(16),__FILE__,164); | - | ||||||||||||
| 145 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 146 | } | - | ||||||||||||
| 147 | if (EC_POINT_cmp(key->group, point, key->pub_key, ctx) != 0
| 0 | ||||||||||||
| 148 | ERR_put_error(50,(0xfff),(123),__FILE__,168); | - | ||||||||||||
| 149 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 150 | } | - | ||||||||||||
| 151 | } never executed: end of block | 0 | ||||||||||||
| 152 | ok = 1; | - | ||||||||||||
| 153 | err: code before this statement never executed: err: | 0 | ||||||||||||
| 154 | BN_free(order); | - | ||||||||||||
| 155 | BN_CTX_free(ctx); | - | ||||||||||||
| 156 | EC_POINT_free(point); | - | ||||||||||||
| 157 | return never executed: (ok);return (ok);never executed: return (ok); | 0 | ||||||||||||
| 158 | } | - | ||||||||||||
| 159 | - | |||||||||||||
| 160 | int | - | ||||||||||||
| 161 | GOST_KEY_set_public_key_affine_coordinates(GOST_KEY *key, BIGNUM *x, BIGNUM *y) | - | ||||||||||||
| 162 | { | - | ||||||||||||
| 163 | BN_CTX *ctx = | - | ||||||||||||
| 164 | ((void *)0) | - | ||||||||||||
| 165 | ; | - | ||||||||||||
| 166 | BIGNUM *tx, *ty; | - | ||||||||||||
| 167 | EC_POINT *point = | - | ||||||||||||
| 168 | ((void *)0) | - | ||||||||||||
| 169 | ; | - | ||||||||||||
| 170 | int ok = 0; | - | ||||||||||||
| 171 | - | |||||||||||||
| 172 | if (key ==
| 0 | ||||||||||||
| 173 | ((void *)0)
| 0 | ||||||||||||
| 174 | || key->group ==
| 0 | ||||||||||||
| 175 | ((void *)0)
| 0 | ||||||||||||
| 176 | || x ==
| 0 | ||||||||||||
| 177 | ((void *)0)
| 0 | ||||||||||||
| 178 | || y ==
| 0 | ||||||||||||
| 179 | ((void *)0)
| 0 | ||||||||||||
| 180 | ) { | - | ||||||||||||
| 181 | ERR_put_error(50,(0xfff),((3|64)),__FILE__,189); | - | ||||||||||||
| 182 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 183 | } | - | ||||||||||||
| 184 | ctx = BN_CTX_new(); | - | ||||||||||||
| 185 | if (ctx ==
| 0 | ||||||||||||
| 186 | ((void *)0)
| 0 | ||||||||||||
| 187 | ) | - | ||||||||||||
| 188 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 189 | - | |||||||||||||
| 190 | point = EC_POINT_new(key->group); | - | ||||||||||||
| 191 | if (point ==
| 0 | ||||||||||||
| 192 | ((void *)0)
| 0 | ||||||||||||
| 193 | ) | - | ||||||||||||
| 194 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 195 | - | |||||||||||||
| 196 | if ((
| 0 | ||||||||||||
| 197 | ((void *)0)
| 0 | ||||||||||||
| 198 | ) | - | ||||||||||||
| 199 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 200 | if ((
| 0 | ||||||||||||
| 201 | ((void *)0)
| 0 | ||||||||||||
| 202 | ) | - | ||||||||||||
| 203 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 204 | if (EC_POINT_set_affine_coordinates_GFp(key->group, point, x, y,
| 0 | ||||||||||||
| 205 | ctx) == 0
| 0 | ||||||||||||
| 206 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 207 | if (EC_POINT_get_affine_coordinates_GFp(key->group, point, tx, ty,
| 0 | ||||||||||||
| 208 | ctx) == 0
| 0 | ||||||||||||
| 209 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 210 | - | |||||||||||||
| 211 | - | |||||||||||||
| 212 | - | |||||||||||||
| 213 | - | |||||||||||||
| 214 | if (BN_cmp(x, tx) != 0
| 0 | ||||||||||||
| 215 | ERR_put_error(50,(0xfff),(146),__FILE__,215); | - | ||||||||||||
| 216 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 217 | } | - | ||||||||||||
| 218 | if (GOST_KEY_set_public_key(key, point) == 0
| 0 | ||||||||||||
| 219 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 220 | - | |||||||||||||
| 221 | if (GOST_KEY_check_key(key) == 0
| 0 | ||||||||||||
| 222 | goto never executed: err;goto err;never executed: goto err; | 0 | ||||||||||||
| 223 | - | |||||||||||||
| 224 | ok = 1; | - | ||||||||||||
| 225 | - | |||||||||||||
| 226 | err: code before this statement never executed: err: | 0 | ||||||||||||
| 227 | EC_POINT_free(point); | - | ||||||||||||
| 228 | BN_CTX_free(ctx); | - | ||||||||||||
| 229 | return never executed: ok;return ok;never executed: return ok; | 0 | ||||||||||||
| 230 | - | |||||||||||||
| 231 | } | - | ||||||||||||
| 232 | - | |||||||||||||
| 233 | const EC_GROUP * | - | ||||||||||||
| 234 | GOST_KEY_get0_group(const GOST_KEY *key) | - | ||||||||||||
| 235 | { | - | ||||||||||||
| 236 | return never executed: key->group;return key->group;never executed: return key->group; | 0 | ||||||||||||
| 237 | } | - | ||||||||||||
| 238 | - | |||||||||||||
| 239 | int | - | ||||||||||||
| 240 | GOST_KEY_set_group(GOST_KEY *key, const EC_GROUP *group) | - | ||||||||||||
| 241 | { | - | ||||||||||||
| 242 | EC_GROUP_free(key->group); | - | ||||||||||||
| 243 | key->group = EC_GROUP_dup(group); | - | ||||||||||||
| 244 | return never executed: (return (key->group == ((void *)0) ) ? 0 : 1;
never executed: return (key->group == ((void *)0) ) ? 0 : 1; | 0 | ||||||||||||
| 245 | ((void *)0)
never executed: return (key->group == ((void *)0) ) ? 0 : 1; | 0 | ||||||||||||
| 246 | )
never executed: return (key->group == ((void *)0) ) ? 0 : 1; | 0 | ||||||||||||
| 247 | } | - | ||||||||||||
| 248 | - | |||||||||||||
| 249 | const BIGNUM * | - | ||||||||||||
| 250 | GOST_KEY_get0_private_key(const GOST_KEY *key) | - | ||||||||||||
| 251 | { | - | ||||||||||||
| 252 | return never executed: key->priv_key;return key->priv_key;never executed: return key->priv_key; | 0 | ||||||||||||
| 253 | } | - | ||||||||||||
| 254 | - | |||||||||||||
| 255 | int | - | ||||||||||||
| 256 | GOST_KEY_set_private_key(GOST_KEY *key, const BIGNUM *priv_key) | - | ||||||||||||
| 257 | { | - | ||||||||||||
| 258 | BN_clear_free(key->priv_key); | - | ||||||||||||
| 259 | key->priv_key = BN_dup(priv_key); | - | ||||||||||||
| 260 | return never executed: (return (key->priv_key == ((void *)0) ) ? 0 : 1;
never executed: return (key->priv_key == ((void *)0) ) ? 0 : 1; | 0 | ||||||||||||
| 261 | ((void *)0)
never executed: return (key->priv_key == ((void *)0) ) ? 0 : 1; | 0 | ||||||||||||
| 262 | )
never executed: return (key->priv_key == ((void *)0) ) ? 0 : 1; | 0 | ||||||||||||
| 263 | } | - | ||||||||||||
| 264 | - | |||||||||||||
| 265 | const EC_POINT * | - | ||||||||||||
| 266 | GOST_KEY_get0_public_key(const GOST_KEY *key) | - | ||||||||||||
| 267 | { | - | ||||||||||||
| 268 | return never executed: key->pub_key;return key->pub_key;never executed: return key->pub_key; | 0 | ||||||||||||
| 269 | } | - | ||||||||||||
| 270 | - | |||||||||||||
| 271 | int | - | ||||||||||||
| 272 | GOST_KEY_set_public_key(GOST_KEY *key, const EC_POINT *pub_key) | - | ||||||||||||
| 273 | { | - | ||||||||||||
| 274 | EC_POINT_free(key->pub_key); | - | ||||||||||||
| 275 | key->pub_key = EC_POINT_dup(pub_key, key->group); | - | ||||||||||||
| 276 | return never executed: (return (key->pub_key == ((void *)0) ) ? 0 : 1;
never executed: return (key->pub_key == ((void *)0) ) ? 0 : 1; | 0 | ||||||||||||
| 277 | ((void *)0)
never executed: return (key->pub_key == ((void *)0) ) ? 0 : 1; | 0 | ||||||||||||
| 278 | )
never executed: return (key->pub_key == ((void *)0) ) ? 0 : 1; | 0 | ||||||||||||
| 279 | } | - | ||||||||||||
| 280 | - | |||||||||||||
| 281 | int | - | ||||||||||||
| 282 | GOST_KEY_get_digest(const GOST_KEY *key) | - | ||||||||||||
| 283 | { | - | ||||||||||||
| 284 | return never executed: key->digest_nid;return key->digest_nid;never executed: return key->digest_nid; | 0 | ||||||||||||
| 285 | } | - | ||||||||||||
| 286 | int | - | ||||||||||||
| 287 | GOST_KEY_set_digest(GOST_KEY *key, int digest_nid) | - | ||||||||||||
| 288 | { | - | ||||||||||||
| 289 | if (digest_nid == 822
| 0 | ||||||||||||
| 290 | digest_nid == 941
| 0 | ||||||||||||
| 291 | digest_nid == 942
| 0 | ||||||||||||
| 292 | key->digest_nid = digest_nid; | - | ||||||||||||
| 293 | return never executed: 1;return 1;never executed: return 1; | 0 | ||||||||||||
| 294 | } | - | ||||||||||||
| 295 | - | |||||||||||||
| 296 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 297 | } | - | ||||||||||||
| 298 | - | |||||||||||||
| 299 | size_t | - | ||||||||||||
| 300 | GOST_KEY_get_size(const GOST_KEY *r) | - | ||||||||||||
| 301 | { | - | ||||||||||||
| 302 | int i; | - | ||||||||||||
| 303 | BIGNUM *order = | - | ||||||||||||
| 304 | ((void *)0) | - | ||||||||||||
| 305 | ; | - | ||||||||||||
| 306 | const EC_GROUP *group; | - | ||||||||||||
| 307 | - | |||||||||||||
| 308 | if (r ==
| 0 | ||||||||||||
| 309 | ((void *)0)
| 0 | ||||||||||||
| 310 | ) | - | ||||||||||||
| 311 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 312 | group = GOST_KEY_get0_group(r); | - | ||||||||||||
| 313 | if (group ==
| 0 | ||||||||||||
| 314 | ((void *)0)
| 0 | ||||||||||||
| 315 | ) | - | ||||||||||||
| 316 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 317 | - | |||||||||||||
| 318 | if ((
| 0 | ||||||||||||
| 319 | ((void *)0)
| 0 | ||||||||||||
| 320 | ) | - | ||||||||||||
| 321 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 322 | - | |||||||||||||
| 323 | if (EC_GROUP_get_order(group, order,
| 0 | ||||||||||||
| 324 | ((void *)0)
| 0 | ||||||||||||
| 325 | ) == 0
| 0 | ||||||||||||
| 326 | BN_clear_free(order); | - | ||||||||||||
| 327 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 328 | } | - | ||||||||||||
| 329 | - | |||||||||||||
| 330 | i = ((BN_num_bits(order)+7)/8); | - | ||||||||||||
| 331 | BN_clear_free(order); | - | ||||||||||||
| 332 | return never executed: (i);return (i);never executed: return (i); | 0 | ||||||||||||
| 333 | } | - | ||||||||||||
| Switch to Source code | Preprocessed file |