OpenCoverage

rsa_x931g.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/rsa/rsa_x931g.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/*-
2 * Copyright 1995-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 <string.h>-
12#include <time.h>-
13#include <openssl/err.h>-
14#include <openssl/bn.h>-
15#include "rsa_locl.h"-
16-
17/* X9.31 RSA key derivation and generation */-
18-
19int RSA_X931_derive_ex(RSA *rsa, BIGNUM *p1, BIGNUM *p2, BIGNUM *q1,-
20 BIGNUM *q2, const BIGNUM *Xp1, const BIGNUM *Xp2,-
21 const BIGNUM *Xp, const BIGNUM *Xq1, const BIGNUM *Xq2,-
22 const BIGNUM *Xq, const BIGNUM *e, BN_GENCB *cb)-
23{-
24 BIGNUM *r0 = NULL, *r1 = NULL, *r2 = NULL, *r3 = NULL;-
25 BN_CTX *ctx = NULL, *ctx2 = NULL;-
26 int ret = 0;-
27-
28 if (!rsa)
!rsaDescription
TRUEnever evaluated
FALSEnever evaluated
0
29 goto err;
never executed: goto err;
0
30-
31 ctx = BN_CTX_new();-
32 if (ctx == NULL)
ctx == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
33 goto err;
never executed: goto err;
0
34 BN_CTX_start(ctx);-
35-
36 r0 = BN_CTX_get(ctx);-
37 r1 = BN_CTX_get(ctx);-
38 r2 = BN_CTX_get(ctx);-
39 r3 = BN_CTX_get(ctx);-
40-
41 if (r3 == NULL)
r3 == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
42 goto err;
never executed: goto err;
0
43 if (!rsa->e) {
!rsa->eDescription
TRUEnever evaluated
FALSEnever evaluated
0
44 rsa->e = BN_dup(e);-
45 if (!rsa->e)
!rsa->eDescription
TRUEnever evaluated
FALSEnever evaluated
0
46 goto err;
never executed: goto err;
0
47 } else {
never executed: end of block
0
48 e = rsa->e;-
49 }
never executed: end of block
0
50-
51 /*-
52 * If not all parameters present only calculate what we can. This allows-
53 * test programs to output selective parameters.-
54 */-
55-
56 if (Xp && rsa->p == NULL) {
XpDescription
TRUEnever evaluated
FALSEnever evaluated
rsa->p == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
57 rsa->p = BN_new();-
58 if (rsa->p == NULL)
rsa->p == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
59 goto err;
never executed: goto err;
0
60-
61 if (!BN_X931_derive_prime_ex(rsa->p, p1, p2,
!BN_X931_deriv...2, e, ctx, cb)Description
TRUEnever evaluated
FALSEnever evaluated
0
62 Xp, Xp1, Xp2, e, ctx, cb))
!BN_X931_deriv...2, e, ctx, cb)Description
TRUEnever evaluated
FALSEnever evaluated
0
63 goto err;
never executed: goto err;
0
64 }
never executed: end of block
0
65-
66 if (Xq && rsa->q == NULL) {
XqDescription
TRUEnever evaluated
FALSEnever evaluated
rsa->q == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
67 rsa->q = BN_new();-
68 if (rsa->q == NULL)
rsa->q == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
69 goto err;
never executed: goto err;
0
70 if (!BN_X931_derive_prime_ex(rsa->q, q1, q2,
!BN_X931_deriv...2, e, ctx, cb)Description
TRUEnever evaluated
FALSEnever evaluated
0
71 Xq, Xq1, Xq2, e, ctx, cb))
!BN_X931_deriv...2, e, ctx, cb)Description
TRUEnever evaluated
FALSEnever evaluated
0
72 goto err;
never executed: goto err;
0
73 }
never executed: end of block
0
74-
75 if (rsa->p == NULL || rsa->q == NULL) {
rsa->p == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
rsa->q == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
76 BN_CTX_end(ctx);-
77 BN_CTX_free(ctx);-
78 return 2;
never executed: return 2;
0
79 }-
80-
81 /*-
82 * Since both primes are set we can now calculate all remaining-
83 * components.-
84 */-
85-
86 /* calculate n */-
87 rsa->n = BN_new();-
88 if (rsa->n == NULL)
rsa->n == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
89 goto err;
never executed: goto err;
0
90 if (!BN_mul(rsa->n, rsa->p, rsa->q, ctx))
!BN_mul(rsa->n..., rsa->q, ctx)Description
TRUEnever evaluated
FALSEnever evaluated
0
91 goto err;
never executed: goto err;
0
92-
93 /* calculate d */-
94 if (!BN_sub(r1, rsa->p, BN_value_one()))
!BN_sub(r1, rs...N_value_one())Description
TRUEnever evaluated
FALSEnever evaluated
0
95 goto err; /* p-1 */
never executed: goto err;
0
96 if (!BN_sub(r2, rsa->q, BN_value_one()))
!BN_sub(r2, rs...N_value_one())Description
TRUEnever evaluated
FALSEnever evaluated
0
97 goto err; /* q-1 */
never executed: goto err;
0
98 if (!BN_mul(r0, r1, r2, ctx))
!BN_mul(r0, r1, r2, ctx)Description
TRUEnever evaluated
FALSEnever evaluated
0
99 goto err; /* (p-1)(q-1) */
never executed: goto err;
0
100-
101 if (!BN_gcd(r3, r1, r2, ctx))
!BN_gcd(r3, r1, r2, ctx)Description
TRUEnever evaluated
FALSEnever evaluated
0
102 goto err;
never executed: goto err;
0
103-
104 if (!BN_div(r0, NULL, r0, r3, ctx))
!BN_div(r0, ((..., r0, r3, ctx)Description
TRUEnever evaluated
FALSEnever evaluated
0
105 goto err; /* LCM((p-1)(q-1)) */
never executed: goto err;
0
106-
107 ctx2 = BN_CTX_new();-
108 if (ctx2 == NULL)
ctx2 == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
109 goto err;
never executed: goto err;
0
110-
111 rsa->d = BN_mod_inverse(NULL, rsa->e, r0, ctx2); /* d */-
112 if (rsa->d == NULL)
rsa->d == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
113 goto err;
never executed: goto err;
0
114-
115 /* calculate d mod (p-1) */-
116 rsa->dmp1 = BN_new();-
117 if (rsa->dmp1 == NULL)
rsa->dmp1 == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
118 goto err;
never executed: goto err;
0
119 if (!BN_mod(rsa->dmp1, rsa->d, r1, ctx))
!BN_div( ((voi...d),(r1),(ctx))Description
TRUEnever evaluated
FALSEnever evaluated
0
120 goto err;
never executed: goto err;
0
121-
122 /* calculate d mod (q-1) */-
123 rsa->dmq1 = BN_new();-
124 if (rsa->dmq1 == NULL)
rsa->dmq1 == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
125 goto err;
never executed: goto err;
0
126 if (!BN_mod(rsa->dmq1, rsa->d, r2, ctx))
!BN_div( ((voi...d),(r2),(ctx))Description
TRUEnever evaluated
FALSEnever evaluated
0
127 goto err;
never executed: goto err;
0
128-
129 /* calculate inverse of q mod p */-
130 rsa->iqmp = BN_mod_inverse(NULL, rsa->q, rsa->p, ctx2);-
131-
132 ret = 1;-
133 err:
code before this statement never executed: err:
0
134 if (ctx)
ctxDescription
TRUEnever evaluated
FALSEnever evaluated
0
135 BN_CTX_end(ctx);
never executed: BN_CTX_end(ctx);
0
136 BN_CTX_free(ctx);-
137 BN_CTX_free(ctx2);-
138-
139 return ret;
never executed: return ret;
0
140-
141}-
142-
143int RSA_X931_generate_key_ex(RSA *rsa, int bits, const BIGNUM *e,-
144 BN_GENCB *cb)-
145{-
146 int ok = 0;-
147 BIGNUM *Xp = NULL, *Xq = NULL;-
148 BN_CTX *ctx = NULL;-
149-
150 ctx = BN_CTX_new();-
151 if (ctx == NULL)
ctx == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
152 goto error;
never executed: goto error;
0
153-
154 BN_CTX_start(ctx);-
155 Xp = BN_CTX_get(ctx);-
156 Xq = BN_CTX_get(ctx);-
157 if (Xq == NULL)
Xq == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
158 goto error;
never executed: goto error;
0
159 if (!BN_X931_generate_Xpq(Xp, Xq, bits, ctx))
!BN_X931_gener...Xq, bits, ctx)Description
TRUEnever evaluated
FALSEnever evaluated
0
160 goto error;
never executed: goto error;
0
161-
162 rsa->p = BN_new();-
163 rsa->q = BN_new();-
164 if (rsa->p == NULL || rsa->q == NULL)
rsa->p == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
rsa->q == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
165 goto error;
never executed: goto error;
0
166-
167 /* Generate two primes from Xp, Xq */-
168-
169 if (!BN_X931_generate_prime_ex(rsa->p, NULL, NULL, NULL, NULL, Xp,
!BN_X931_gener...p, e, ctx, cb)Description
TRUEnever evaluated
FALSEnever evaluated
0
170 e, ctx, cb))
!BN_X931_gener...p, e, ctx, cb)Description
TRUEnever evaluated
FALSEnever evaluated
0
171 goto error;
never executed: goto error;
0
172-
173 if (!BN_X931_generate_prime_ex(rsa->q, NULL, NULL, NULL, NULL, Xq,
!BN_X931_gener...q, e, ctx, cb)Description
TRUEnever evaluated
FALSEnever evaluated
0
174 e, ctx, cb))
!BN_X931_gener...q, e, ctx, cb)Description
TRUEnever evaluated
FALSEnever evaluated
0
175 goto error;
never executed: goto error;
0
176-
177 /*-
178 * Since rsa->p and rsa->q are valid this call will just derive remaining-
179 * RSA components.-
180 */-
181-
182 if (!RSA_X931_derive_ex(rsa, NULL, NULL, NULL, NULL,
!RSA_X931_deri... *)0) , e, cb)Description
TRUEnever evaluated
FALSEnever evaluated
0
183 NULL, NULL, NULL, NULL, NULL, NULL, e, cb))
!RSA_X931_deri... *)0) , e, cb)Description
TRUEnever evaluated
FALSEnever evaluated
0
184 goto error;
never executed: goto error;
0
185-
186 ok = 1;-
187-
188 error:
code before this statement never executed: error:
0
189 if (ctx)
ctxDescription
TRUEnever evaluated
FALSEnever evaluated
0
190 BN_CTX_end(ctx);
never executed: BN_CTX_end(ctx);
0
191 BN_CTX_free(ctx);-
192-
193 if (ok)
okDescription
TRUEnever evaluated
FALSEnever evaluated
0
194 return 1;
never executed: return 1;
0
195-
196 return 0;
never executed: return 0;
0
197-
198}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2