OpenCoverage

hm_pmeth.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/hmac/hm_pmeth.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: hm_pmeth.c,v 1.10 2017/05/02 03:59:44 deraadt Exp $ */-
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL-
3 * project 2007.-
4 */-
5/* ====================================================================-
6 * Copyright (c) 2007 The OpenSSL Project. All rights reserved.-
7 *-
8 * Redistribution and use in source and binary forms, with or without-
9 * modification, are permitted provided that the following conditions-
10 * are met:-
11 *-
12 * 1. Redistributions of source code must retain the above copyright-
13 * notice, this list of conditions and the following disclaimer.-
14 *-
15 * 2. Redistributions in binary form must reproduce the above copyright-
16 * notice, this list of conditions and the following disclaimer in-
17 * the documentation and/or other materials provided with the-
18 * distribution.-
19 *-
20 * 3. All advertising materials mentioning features or use of this-
21 * software must display the following acknowledgment:-
22 * "This product includes software developed by the OpenSSL Project-
23 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"-
24 *-
25 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to-
26 * endorse or promote products derived from this software without-
27 * prior written permission. For written permission, please contact-
28 * licensing@OpenSSL.org.-
29 *-
30 * 5. Products derived from this software may not be called "OpenSSL"-
31 * nor may "OpenSSL" appear in their names without prior written-
32 * permission of the OpenSSL Project.-
33 *-
34 * 6. Redistributions of any form whatsoever must retain the following-
35 * acknowledgment:-
36 * "This product includes software developed by the OpenSSL Project-
37 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"-
38 *-
39 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY-
40 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-
41 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR-
42 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR-
43 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-
44 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT-
45 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-
46 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-
47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-
48 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)-
49 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED-
50 * OF THE POSSIBILITY OF SUCH DAMAGE.-
51 * ====================================================================-
52 *-
53 * This product includes cryptographic software written by Eric Young-
54 * (eay@cryptsoft.com). This product includes software written by Tim-
55 * Hudson (tjh@cryptsoft.com).-
56 *-
57 */-
58-
59#include <stdio.h>-
60#include <string.h>-
61-
62#include <openssl/evp.h>-
63#include <openssl/hmac.h>-
64#include <openssl/x509.h>-
65#include <openssl/x509v3.h>-
66-
67#include "evp_locl.h"-
68-
69/* HMAC pkey context structure */-
70-
71typedef struct {-
72 const EVP_MD *md; /* MD for HMAC use */-
73 ASN1_OCTET_STRING ktmp; /* Temp storage for key */-
74 HMAC_CTX ctx;-
75} HMAC_PKEY_CTX;-
76-
77static int-
78pkey_hmac_init(EVP_PKEY_CTX *ctx)-
79{-
80 HMAC_PKEY_CTX *hctx;-
81-
82 hctx = malloc(sizeof(HMAC_PKEY_CTX));-
83 if (!hctx)
!hctxDescription
TRUEnever evaluated
FALSEevaluated 13004 times by 3 tests
Evaluated by:
  • ssltest
  • tls_prf
  • tlstest
0-13004
84 return 0;
never executed: return 0;
0
85 hctx->md = NULL;-
86 hctx->ktmp.data = NULL;-
87 hctx->ktmp.length = 0;-
88 hctx->ktmp.flags = 0;-
89 hctx->ktmp.type = V_ASN1_OCTET_STRING;-
90 HMAC_CTX_init(&hctx->ctx);-
91-
92 ctx->data = hctx;-
93 ctx->keygen_info_count = 0;-
94-
95 return 1;
executed 13004 times by 3 tests: return 1;
Executed by:
  • ssltest
  • tls_prf
  • tlstest
13004
96}-
97-
98static int-
99pkey_hmac_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src)-
100{-
101 HMAC_PKEY_CTX *sctx, *dctx;-
102-
103 if (!pkey_hmac_init(dst))
!pkey_hmac_init(dst)Description
TRUEnever evaluated
FALSEevaluated 9396 times by 3 tests
Evaluated by:
  • ssltest
  • tls_prf
  • tlstest
0-9396
104 return 0;
never executed: return 0;
0
105 sctx = src->data;-
106 dctx = dst->data;-
107 dctx->md = sctx->md;-
108 HMAC_CTX_init(&dctx->ctx);-
109 if (!HMAC_CTX_copy(&dctx->ctx, &sctx->ctx))
!HMAC_CTX_copy...x, &sctx->ctx)Description
TRUEnever evaluated
FALSEevaluated 9396 times by 3 tests
Evaluated by:
  • ssltest
  • tls_prf
  • tlstest
0-9396
110 return 0;
never executed: return 0;
0
111 if (sctx->ktmp.data) {
sctx->ktmp.dataDescription
TRUEnever evaluated
FALSEevaluated 9396 times by 3 tests
Evaluated by:
  • ssltest
  • tls_prf
  • tlstest
0-9396
112 if (!ASN1_OCTET_STRING_set(&dctx->ktmp, sctx->ktmp.data,
!ASN1_OCTET_ST...->ktmp.length)Description
TRUEnever evaluated
FALSEnever evaluated
0
113 sctx->ktmp.length))
!ASN1_OCTET_ST...->ktmp.length)Description
TRUEnever evaluated
FALSEnever evaluated
0
114 return 0;
never executed: return 0;
0
115 }
never executed: end of block
0
116 return 1;
executed 9396 times by 3 tests: return 1;
Executed by:
  • ssltest
  • tls_prf
  • tlstest
9396
117}-
118-
119static void-
120pkey_hmac_cleanup(EVP_PKEY_CTX *ctx)-
121{-
122 HMAC_PKEY_CTX *hctx = ctx->data;-
123-
124 HMAC_CTX_cleanup(&hctx->ctx);-
125 freezero(hctx->ktmp.data, hctx->ktmp.length);-
126 free(hctx);-
127}
executed 13004 times by 3 tests: end of block
Executed by:
  • ssltest
  • tls_prf
  • tlstest
13004
128-
129static int-
130pkey_hmac_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)-
131{-
132 ASN1_OCTET_STRING *hkey = NULL;-
133 HMAC_PKEY_CTX *hctx = ctx->data;-
134-
135 if (!hctx->ktmp.data)
!hctx->ktmp.dataDescription
TRUEnever evaluated
FALSEevaluated 1804 times by 3 tests
Evaluated by:
  • ssltest
  • tls_prf
  • tlstest
0-1804
136 return 0;
never executed: return 0;
0
137 hkey = ASN1_OCTET_STRING_dup(&hctx->ktmp);-
138 if (!hkey)
!hkeyDescription
TRUEnever evaluated
FALSEevaluated 1804 times by 3 tests
Evaluated by:
  • ssltest
  • tls_prf
  • tlstest
0-1804
139 return 0;
never executed: return 0;
0
140 EVP_PKEY_assign(pkey, EVP_PKEY_HMAC, hkey);-
141-
142 return 1;
executed 1804 times by 3 tests: return 1;
Executed by:
  • ssltest
  • tls_prf
  • tlstest
1804
143}-
144-
145static int-
146int_update(EVP_MD_CTX *ctx, const void *data, size_t count)-
147{-
148 HMAC_PKEY_CTX *hctx = ctx->pctx->data;-
149-
150 if (!HMAC_Update(&hctx->ctx, data, count))
!HMAC_Update(&..., data, count)Description
TRUEnever evaluated
FALSEevaluated 30478 times by 3 tests
Evaluated by:
  • ssltest
  • tls_prf
  • tlstest
0-30478
151 return 0;
never executed: return 0;
0
152 return 1;
executed 30478 times by 3 tests: return 1;
Executed by:
  • ssltest
  • tls_prf
  • tlstest
30478
153}-
154-
155static int-
156hmac_signctx_init(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx)-
157{-
158 HMAC_PKEY_CTX *hctx = ctx->data;-
159-
160 HMAC_CTX_set_flags(&hctx->ctx, mctx->flags & ~EVP_MD_CTX_FLAG_NO_INIT);-
161 EVP_MD_CTX_set_flags(mctx, EVP_MD_CTX_FLAG_NO_INIT);-
162 mctx->update = int_update;-
163 return 1;
executed 8796 times by 3 tests: return 1;
Executed by:
  • ssltest
  • tls_prf
  • tlstest
8796
164}-
165-
166static int-
167hmac_signctx(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen,-
168 EVP_MD_CTX *mctx)-
169{-
170 unsigned int hlen;-
171 HMAC_PKEY_CTX *hctx = ctx->data;-
172 int l = EVP_MD_CTX_size(mctx);-
173-
174 if (l < 0)
l < 0Description
TRUEnever evaluated
FALSEevaluated 8924 times by 3 tests
Evaluated by:
  • ssltest
  • tls_prf
  • tlstest
0-8924
175 return 0;
never executed: return 0;
0
176 *siglen = l;-
177 if (!sig)
!sigDescription
TRUEnever evaluated
FALSEevaluated 8924 times by 3 tests
Evaluated by:
  • ssltest
  • tls_prf
  • tlstest
0-8924
178 return 1;
never executed: return 1;
0
179-
180 if (!HMAC_Final(&hctx->ctx, sig, &hlen))
!HMAC_Final(&h...x, sig, &hlen)Description
TRUEnever evaluated
FALSEevaluated 8924 times by 3 tests
Evaluated by:
  • ssltest
  • tls_prf
  • tlstest
0-8924
181 return 0;
never executed: return 0;
0
182 *siglen = (size_t)hlen;-
183 return 1;
executed 8924 times by 3 tests: return 1;
Executed by:
  • ssltest
  • tls_prf
  • tlstest
8924
184}-
185-
186static int-
187pkey_hmac_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)-
188{-
189 HMAC_PKEY_CTX *hctx = ctx->data;-
190 ASN1_OCTET_STRING *key;-
191-
192 switch (type) {-
193 case EVP_PKEY_CTRL_SET_MAC_KEY:
executed 1804 times by 3 tests: case 6:
Executed by:
  • ssltest
  • tls_prf
  • tlstest
1804
194 if ((!p2 && p1 > 0) || (p1 < -1))
!p2Description
TRUEnever evaluated
FALSEevaluated 1804 times by 3 tests
Evaluated by:
  • ssltest
  • tls_prf
  • tlstest
p1 > 0Description
TRUEnever evaluated
FALSEnever evaluated
(p1 < -1)Description
TRUEnever evaluated
FALSEevaluated 1804 times by 3 tests
Evaluated by:
  • ssltest
  • tls_prf
  • tlstest
0-1804
195 return 0;
never executed: return 0;
0
196 if (!ASN1_OCTET_STRING_set(&hctx->ktmp, p2, p1))
!ASN1_OCTET_ST...>ktmp, p2, p1)Description
TRUEnever evaluated
FALSEevaluated 1804 times by 3 tests
Evaluated by:
  • ssltest
  • tls_prf
  • tlstest
0-1804
197 return 0;
never executed: return 0;
0
198 break;
executed 1804 times by 3 tests: break;
Executed by:
  • ssltest
  • tls_prf
  • tlstest
1804
199-
200 case EVP_PKEY_CTRL_MD:
executed 8796 times by 3 tests: case 1:
Executed by:
  • ssltest
  • tls_prf
  • tlstest
8796
201 hctx->md = p2;-
202 break;
executed 8796 times by 3 tests: break;
Executed by:
  • ssltest
  • tls_prf
  • tlstest
8796
203-
204 case EVP_PKEY_CTRL_DIGESTINIT:
executed 8796 times by 3 tests: case 7:
Executed by:
  • ssltest
  • tls_prf
  • tlstest
8796
205 key = (ASN1_OCTET_STRING *)ctx->pkey->pkey.ptr;-
206 if (!HMAC_Init_ex(&hctx->ctx, key->data, key->length, hctx->md,
!HMAC_Init_ex(..., ctx->engine)Description
TRUEnever evaluated
FALSEevaluated 8796 times by 3 tests
Evaluated by:
  • ssltest
  • tls_prf
  • tlstest
0-8796
207 ctx->engine))
!HMAC_Init_ex(..., ctx->engine)Description
TRUEnever evaluated
FALSEevaluated 8796 times by 3 tests
Evaluated by:
  • ssltest
  • tls_prf
  • tlstest
0-8796
208 return 0;
never executed: return 0;
0
209 break;
executed 8796 times by 3 tests: break;
Executed by:
  • ssltest
  • tls_prf
  • tlstest
8796
210-
211 default:
never executed: default:
0
212 return -2;
never executed: return -2;
0
213 }-
214 return 1;
executed 19396 times by 3 tests: return 1;
Executed by:
  • ssltest
  • tls_prf
  • tlstest
19396
215}-
216-
217static int-
218pkey_hmac_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, const char *value)-
219{-
220 if (!value)
!valueDescription
TRUEnever evaluated
FALSEnever evaluated
0
221 return 0;
never executed: return 0;
0
222 if (!strcmp(type, "key")) {
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 *) ( "key" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
! __extension_..."key" )))); })Description
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
223 void *p = (void *)value;-
224 return pkey_hmac_ctrl(ctx, EVP_PKEY_CTRL_SET_MAC_KEY, -1, p);
never executed: return pkey_hmac_ctrl(ctx, 6, -1, p);
0
225 }-
226 if (!strcmp(type, "hexkey")) {
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 *) ( "hexkey" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
! __extension_...xkey" )))); })Description
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
227 unsigned char *key;-
228 int r;-
229 long keylen;-
230 key = string_to_hex(value, &keylen);-
231 if (!key)
!keyDescription
TRUEnever evaluated
FALSEnever evaluated
0
232 return 0;
never executed: return 0;
0
233 r = pkey_hmac_ctrl(ctx, EVP_PKEY_CTRL_SET_MAC_KEY, keylen, key);-
234 free(key);-
235 return r;
never executed: return r;
0
236 }-
237 return -2;
never executed: return -2;
0
238}-
239-
240const EVP_PKEY_METHOD hmac_pkey_meth = {-
241 .pkey_id = EVP_PKEY_HMAC,-
242-
243 .init = pkey_hmac_init,-
244 .copy = pkey_hmac_copy,-
245 .cleanup = pkey_hmac_cleanup,-
246-
247 .keygen = pkey_hmac_keygen,-
248-
249 .signctx_init = hmac_signctx_init,-
250 .signctx = hmac_signctx,-
251-
252 .ctrl = pkey_hmac_ctrl,-
253 .ctrl_str = pkey_hmac_ctrl_str-
254};-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2