OpenCoverage

dsa_pmeth.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/dsa/dsa_pmeth.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/*-
2 * Copyright 2006-2018 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/asn1t.h>-
13#include <openssl/x509.h>-
14#include <openssl/evp.h>-
15#include <openssl/bn.h>-
16#include "internal/evp_int.h"-
17#include "dsa_locl.h"-
18-
19/* DSA pkey context structure */-
20-
21typedef struct {-
22 /* Parameter gen parameters */-
23 int nbits; /* size of p in bits (default: 1024) */-
24 int qbits; /* size of q in bits (default: 160) */-
25 const EVP_MD *pmd; /* MD for parameter generation */-
26 /* Keygen callback info */-
27 int gentmp[2];-
28 /* message digest */-
29 const EVP_MD *md; /* MD for the signature */-
30} DSA_PKEY_CTX;-
31-
32static int pkey_dsa_init(EVP_PKEY_CTX *ctx)-
33{-
34 DSA_PKEY_CTX *dctx = OPENSSL_malloc(sizeof(*dctx));-
35-
36 if (dctx == NULL)
dctx == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 658 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-658
37 return 0;
never executed: return 0;
0
38 dctx->nbits = 1024;-
39 dctx->qbits = 160;-
40 dctx->pmd = NULL;-
41 dctx->md = NULL;-
42-
43 ctx->data = dctx;-
44 ctx->keygen_info = dctx->gentmp;-
45 ctx->keygen_info_count = 2;-
46-
47 return 1;
executed 658 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
658
48}-
49-
50static int pkey_dsa_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src)-
51{-
52 DSA_PKEY_CTX *dctx, *sctx;-
53-
54 if (!pkey_dsa_init(dst))
!pkey_dsa_init(dst)Description
TRUEnever evaluated
FALSEevaluated 311 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-311
55 return 0;
never executed: return 0;
0
56 sctx = src->data;-
57 dctx = dst->data;-
58 dctx->nbits = sctx->nbits;-
59 dctx->qbits = sctx->qbits;-
60 dctx->pmd = sctx->pmd;-
61 dctx->md = sctx->md;-
62 return 1;
executed 311 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
311
63}-
64-
65static void pkey_dsa_cleanup(EVP_PKEY_CTX *ctx)-
66{-
67 DSA_PKEY_CTX *dctx = ctx->data;-
68 OPENSSL_free(dctx);-
69}
executed 658 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
658
70-
71static int pkey_dsa_sign(EVP_PKEY_CTX *ctx, unsigned char *sig,-
72 size_t *siglen, const unsigned char *tbs,-
73 size_t tbslen)-
74{-
75 int ret;-
76 unsigned int sltmp;-
77 DSA_PKEY_CTX *dctx = ctx->data;-
78 DSA *dsa = ctx->pkey->pkey.dsa;-
79-
80 if (dctx->md != NULL && tbslen != (size_t)EVP_MD_size(dctx->md))
dctx->md != ((void *)0)Description
TRUEevaluated 57 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
tbslen != (siz...size(dctx->md)Description
TRUEnever evaluated
FALSEevaluated 57 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-57
81 return 0;
never executed: return 0;
0
82-
83 ret = DSA_sign(0, tbs, tbslen, sig, &sltmp, dsa);-
84-
85 if (ret <= 0)
ret <= 0Description
TRUEnever evaluated
FALSEevaluated 63 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-63
86 return ret;
never executed: return ret;
0
87 *siglen = sltmp;-
88 return 1;
executed 63 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
63
89}-
90-
91static int pkey_dsa_verify(EVP_PKEY_CTX *ctx,-
92 const unsigned char *sig, size_t siglen,-
93 const unsigned char *tbs, size_t tbslen)-
94{-
95 int ret;-
96 DSA_PKEY_CTX *dctx = ctx->data;-
97 DSA *dsa = ctx->pkey->pkey.dsa;-
98-
99 if (dctx->md != NULL && tbslen != (size_t)EVP_MD_size(dctx->md))
dctx->md != ((void *)0)Description
TRUEevaluated 283 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 13 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
tbslen != (siz...size(dctx->md)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 281 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
2-283
100 return 0;
executed 2 times by 1 test: return 0;
Executed by:
  • libcrypto.so.1.1
2
101-
102 ret = DSA_verify(0, tbs, tbslen, sig, siglen, dsa);-
103-
104 return ret;
executed 294 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
294
105}-
106-
107static int pkey_dsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)-
108{-
109 DSA_PKEY_CTX *dctx = ctx->data;-
110-
111 switch (type) {-
112 case EVP_PKEY_CTRL_DSA_PARAMGEN_BITS:
never executed: case (0x1000 + 1):
0
113 if (p1 < 256)
p1 < 256Description
TRUEnever evaluated
FALSEnever evaluated
0
114 return -2;
never executed: return -2;
0
115 dctx->nbits = p1;-
116 return 1;
never executed: return 1;
0
117-
118 case EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS:
never executed: case (0x1000 + 2):
0
119 if (p1 != 160 && p1 != 224 && p1 && p1 != 256)
p1 != 160Description
TRUEnever evaluated
FALSEnever evaluated
p1 != 224Description
TRUEnever evaluated
FALSEnever evaluated
p1Description
TRUEnever evaluated
FALSEnever evaluated
p1 != 256Description
TRUEnever evaluated
FALSEnever evaluated
0
120 return -2;
never executed: return -2;
0
121 dctx->qbits = p1;-
122 return 1;
never executed: return 1;
0
123-
124 case EVP_PKEY_CTRL_DSA_PARAMGEN_MD:
never executed: case (0x1000 + 3):
0
125 if (EVP_MD_type((const EVP_MD *)p2) != NID_sha1 &&
EVP_MD_type((c...MD *)p2) != 64Description
TRUEnever evaluated
FALSEnever evaluated
0
126 EVP_MD_type((const EVP_MD *)p2) != NID_sha224 &&
EVP_MD_type((c...D *)p2) != 675Description
TRUEnever evaluated
FALSEnever evaluated
0
127 EVP_MD_type((const EVP_MD *)p2) != NID_sha256) {
EVP_MD_type((c...D *)p2) != 672Description
TRUEnever evaluated
FALSEnever evaluated
0
128 DSAerr(DSA_F_PKEY_DSA_CTRL, DSA_R_INVALID_DIGEST_TYPE);-
129 return 0;
never executed: return 0;
0
130 }-
131 dctx->pmd = p2;-
132 return 1;
never executed: return 1;
0
133-
134 case EVP_PKEY_CTRL_MD:
executed 340 times by 1 test: case 1:
Executed by:
  • libcrypto.so.1.1
340
135 if (EVP_MD_type((const EVP_MD *)p2) != NID_sha1 &&
EVP_MD_type((c...MD *)p2) != 64Description
TRUEevaluated 293 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 47 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
47-293
136 EVP_MD_type((const EVP_MD *)p2) != NID_dsa &&
EVP_MD_type((c...D *)p2) != 116Description
TRUEevaluated 293 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-293
137 EVP_MD_type((const EVP_MD *)p2) != NID_dsaWithSHA &&
EVP_MD_type((c...MD *)p2) != 66Description
TRUEevaluated 293 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-293
138 EVP_MD_type((const EVP_MD *)p2) != NID_sha224 &&
EVP_MD_type((c...D *)p2) != 675Description
TRUEevaluated 265 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 28 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
28-265
139 EVP_MD_type((const EVP_MD *)p2) != NID_sha256 &&
EVP_MD_type((c...D *)p2) != 672Description
TRUEevaluated 50 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 215 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
50-215
140 EVP_MD_type((const EVP_MD *)p2) != NID_sha384 &&
EVP_MD_type((c...D *)p2) != 673Description
TRUEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 38 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
12-38
141 EVP_MD_type((const EVP_MD *)p2) != NID_sha512) {
EVP_MD_type((c...D *)p2) != 674Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-12
142 DSAerr(DSA_F_PKEY_DSA_CTRL, DSA_R_INVALID_DIGEST_TYPE);-
143 return 0;
never executed: return 0;
0
144 }-
145 dctx->md = p2;-
146 return 1;
executed 340 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
340
147-
148 case EVP_PKEY_CTRL_GET_MD:
never executed: case 13:
0
149 *(const EVP_MD **)p2 = dctx->md;-
150 return 1;
never executed: return 1;
0
151-
152 case EVP_PKEY_CTRL_DIGESTINIT:
executed 311 times by 1 test: case 7:
Executed by:
  • libcrypto.so.1.1
311
153 case EVP_PKEY_CTRL_PKCS7_SIGN:
executed 18 times by 1 test: case 5:
Executed by:
  • libcrypto.so.1.1
18
154 case EVP_PKEY_CTRL_CMS_SIGN:
executed 44 times by 1 test: case 11:
Executed by:
  • libcrypto.so.1.1
44
155 return 1;
executed 373 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
373
156-
157 case EVP_PKEY_CTRL_PEER_KEY:
never executed: case 2:
0
158 DSAerr(DSA_F_PKEY_DSA_CTRL,-
159 EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);-
160 return -2;
never executed: return -2;
0
161 default:
never executed: default:
0
162 return -2;
never executed: return -2;
0
163-
164 }-
165}-
166-
167static int pkey_dsa_ctrl_str(EVP_PKEY_CTX *ctx,-
168 const char *type, const char *value)-
169{-
170 if (strcmp(type, "dsa_paramgen_bits") == 0) {
never executed: __result = (((const unsigned char *) (const char *) ( type ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "dsa_paramgen_bits" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
171 int nbits;-
172 nbits = atoi(value);-
173 return EVP_PKEY_CTX_set_dsa_paramgen_bits(ctx, nbits);
never executed: return EVP_PKEY_CTX_ctrl(ctx, 116, (1<<1), (0x1000 + 1), nbits, ((void *)0) );
0
174 }-
175 if (strcmp(type, "dsa_paramgen_q_bits") == 0) {
never executed: __result = (((const unsigned char *) (const char *) ( type ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "dsa_paramgen_q_bits" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
176 int qbits = atoi(value);-
177 return EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN,
never executed: return EVP_PKEY_CTX_ctrl(ctx, 116, (1<<1), (0x1000 + 2), qbits, ((void *)0) );
0
178 EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS, qbits,
never executed: return EVP_PKEY_CTX_ctrl(ctx, 116, (1<<1), (0x1000 + 2), qbits, ((void *)0) );
0
179 NULL);
never executed: return EVP_PKEY_CTX_ctrl(ctx, 116, (1<<1), (0x1000 + 2), qbits, ((void *)0) );
0
180 }-
181 if (strcmp(type, "dsa_paramgen_md") == 0) {
never executed: __result = (((const unsigned char *) (const char *) ( type ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "dsa_paramgen_md" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
182 const EVP_MD *md = EVP_get_digestbyname(value);-
183-
184 if (md == NULL) {
md == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
185 DSAerr(DSA_F_PKEY_DSA_CTRL_STR, DSA_R_INVALID_DIGEST_TYPE);-
186 return 0;
never executed: return 0;
0
187 }-
188 return EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN,
never executed: return EVP_PKEY_CTX_ctrl(ctx, 116, (1<<1), (0x1000 + 3), 0, (void *)md);
0
189 EVP_PKEY_CTRL_DSA_PARAMGEN_MD, 0,
never executed: return EVP_PKEY_CTX_ctrl(ctx, 116, (1<<1), (0x1000 + 3), 0, (void *)md);
0
190 (void *)md);
never executed: return EVP_PKEY_CTX_ctrl(ctx, 116, (1<<1), (0x1000 + 3), 0, (void *)md);
0
191 }-
192 return -2;
never executed: return -2;
0
193}-
194-
195static int pkey_dsa_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)-
196{-
197 DSA *dsa = NULL;-
198 DSA_PKEY_CTX *dctx = ctx->data;-
199 BN_GENCB *pcb;-
200 int ret;-
201-
202 if (ctx->pkey_gencb) {
ctx->pkey_gencbDescription
TRUEnever evaluated
FALSEnever evaluated
0
203 pcb = BN_GENCB_new();-
204 if (pcb == NULL)
pcb == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
205 return 0;
never executed: return 0;
0
206 evp_pkey_set_cb_translate(pcb, ctx);-
207 } else
never executed: end of block
0
208 pcb = NULL;
never executed: pcb = ((void *)0) ;
0
209 dsa = DSA_new();-
210 if (dsa == NULL) {
dsa == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
211 BN_GENCB_free(pcb);-
212 return 0;
never executed: return 0;
0
213 }-
214 ret = dsa_builtin_paramgen(dsa, dctx->nbits, dctx->qbits, dctx->pmd,-
215 NULL, 0, NULL, NULL, NULL, pcb);-
216 BN_GENCB_free(pcb);-
217 if (ret)
retDescription
TRUEnever evaluated
FALSEnever evaluated
0
218 EVP_PKEY_assign_DSA(pkey, dsa);
never executed: EVP_PKEY_assign((pkey),116, (char *)(dsa));
0
219 else-
220 DSA_free(dsa);
never executed: DSA_free(dsa);
0
221 return ret;
never executed: return ret;
0
222}-
223-
224static int pkey_dsa_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)-
225{-
226 DSA *dsa = NULL;-
227-
228 if (ctx->pkey == NULL) {
ctx->pkey == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
229 DSAerr(DSA_F_PKEY_DSA_KEYGEN, DSA_R_NO_PARAMETERS_SET);-
230 return 0;
never executed: return 0;
0
231 }-
232 dsa = DSA_new();-
233 if (dsa == NULL)
dsa == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
234 return 0;
never executed: return 0;
0
235 EVP_PKEY_assign_DSA(pkey, dsa);-
236 /* Note: if error return, pkey is freed by parent routine */-
237 if (!EVP_PKEY_copy_parameters(pkey, ctx->pkey))
!EVP_PKEY_copy...ey, ctx->pkey)Description
TRUEnever evaluated
FALSEnever evaluated
0
238 return 0;
never executed: return 0;
0
239 return DSA_generate_key(pkey->pkey.dsa);
never executed: return DSA_generate_key(pkey->pkey.dsa);
0
240}-
241-
242const EVP_PKEY_METHOD dsa_pkey_meth = {-
243 EVP_PKEY_DSA,-
244 EVP_PKEY_FLAG_AUTOARGLEN,-
245 pkey_dsa_init,-
246 pkey_dsa_copy,-
247 pkey_dsa_cleanup,-
248-
249 0,-
250 pkey_dsa_paramgen,-
251-
252 0,-
253 pkey_dsa_keygen,-
254-
255 0,-
256 pkey_dsa_sign,-
257-
258 0,-
259 pkey_dsa_verify,-
260-
261 0, 0,-
262-
263 0, 0, 0, 0,-
264-
265 0, 0,-
266-
267 0, 0,-
268-
269 0, 0,-
270-
271 pkey_dsa_ctrl,-
272 pkey_dsa_ctrl_str-
273};-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2