OpenCoverage

cmac.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/cmac/cmac.c
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3struct CMAC_CTX_st {-
4-
5 EVP_CIPHER_CTX cctx;-
6-
7 unsigned char k1[32];-
8 unsigned char k2[32];-
9-
10 unsigned char tbl[32];-
11-
12 unsigned char last_block[32];-
13-
14 int nlast_block;-
15};-
16-
17-
18-
19-
20static void-
21make_kn(unsigned char *k1, unsigned char *l, int bl)-
22{-
23 int i;-
24-
25-
26 for (i = 0; i < bl
i < blDescription
TRUEnever evaluated
FALSEnever evaluated
; i++) {
0
27 k1[i] = l[i] << 1;-
28 if (i < bl - 1
i < bl - 1Description
TRUEnever evaluated
FALSEnever evaluated
&& l[i + 1] & 0x80
l[i + 1] & 0x80Description
TRUEnever evaluated
FALSEnever evaluated
)
0
29 k1[i] |= 1;
never executed: k1[i] |= 1;
0
30 }
never executed: end of block
0
31-
32 if (l[0] & 0x80
l[0] & 0x80Description
TRUEnever evaluated
FALSEnever evaluated
)
0
33 k1[bl - 1] ^= bl == 16
bl == 16Description
TRUEnever evaluated
FALSEnever evaluated
? 0x87 : 0x1b;
never executed: k1[bl - 1] ^= bl == 16 ? 0x87 : 0x1b;
0
34}
never executed: end of block
0
35-
36CMAC_CTX *-
37CMAC_CTX_new(void)-
38{-
39 CMAC_CTX *ctx;-
40-
41 ctx = malloc(sizeof(CMAC_CTX));-
42 if (!ctx
!ctxDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
43 return
never executed: return ((void *)0) ;
never executed: return ((void *)0) ;
0
44 ((void *)0)
never executed: return ((void *)0) ;
0
45 ;
never executed: return ((void *)0) ;
0
46 EVP_CIPHER_CTX_init(&ctx->cctx);-
47 ctx->nlast_block = -1;-
48 return
never executed: return ctx;
ctx;
never executed: return ctx;
0
49}-
50-
51void-
52CMAC_CTX_cleanup(CMAC_CTX *ctx)-
53{-
54 EVP_CIPHER_CTX_cleanup(&ctx->cctx);-
55 explicit_bzero(ctx->tbl, 32);-
56 explicit_bzero(ctx->k1, 32);-
57 explicit_bzero(ctx->k2, 32);-
58 explicit_bzero(ctx->last_block, 32);-
59 ctx->nlast_block = -1;-
60}
never executed: end of block
0
61-
62EVP_CIPHER_CTX *-
63CMAC_CTX_get0_cipher_ctx(CMAC_CTX *ctx)-
64{-
65 return
never executed: return &ctx->cctx;
&ctx->cctx;
never executed: return &ctx->cctx;
0
66}-
67-
68void-
69CMAC_CTX_free(CMAC_CTX *ctx)-
70{-
71 if (ctx ==
ctx == ((void *)0)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • freenull
FALSEnever evaluated
0-1
72 ((void *)0)
ctx == ((void *)0)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • freenull
FALSEnever evaluated
0-1
73 )-
74 return;
executed 1 time by 1 test: return;
Executed by:
  • freenull
1
75-
76 CMAC_CTX_cleanup(ctx);-
77 free(ctx);-
78}
never executed: end of block
0
79-
80int-
81CMAC_CTX_copy(CMAC_CTX *out, const CMAC_CTX *in)-
82{-
83 int bl;-
84-
85 if (in->nlast_block == -1
in->nlast_block == -1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
86 return
never executed: return 0;
0;
never executed: return 0;
0
87 if (!EVP_CIPHER_CTX_copy(&out->cctx, &in->cctx)
!EVP_CIPHER_CT...tx, &in->cctx)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
88 return
never executed: return 0;
0;
never executed: return 0;
0
89 bl = EVP_CIPHER_CTX_block_size(&in->cctx);-
90 memcpy(out->k1, in->k1, bl);-
91 memcpy(out->k2, in->k2, bl);-
92 memcpy(out->tbl, in->tbl, bl);-
93 memcpy(out->last_block, in->last_block, bl);-
94 out->nlast_block = in->nlast_block;-
95 return
never executed: return 1;
1;
never executed: return 1;
0
96}-
97-
98int-
99CMAC_Init(CMAC_CTX *ctx, const void *key, size_t keylen,-
100 const EVP_CIPHER *cipher, ENGINE *impl)-
101{-
102 static unsigned char zero_iv[32];-
103-
104-
105 if (!key
!keyDescription
TRUEnever evaluated
FALSEnever evaluated
&& !cipher
!cipherDescription
TRUEnever evaluated
FALSEnever evaluated
&& !impl
!implDescription
TRUEnever evaluated
FALSEnever evaluated
&& keylen == 0
keylen == 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
106-
107 if (ctx->nlast_block == -1
ctx->nlast_block == -1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
108 return
never executed: return 0;
0;
never executed: return 0;
0
109 if (!EVP_EncryptInit_ex(&ctx->cctx,
!EVP_EncryptIn...)0) , zero_iv)Description
TRUEnever evaluated
FALSEnever evaluated
0
110 ((void *)0)
!EVP_EncryptIn...)0) , zero_iv)Description
TRUEnever evaluated
FALSEnever evaluated
0
111 ,
!EVP_EncryptIn...)0) , zero_iv)Description
TRUEnever evaluated
FALSEnever evaluated
0
112 ((void *)0)
!EVP_EncryptIn...)0) , zero_iv)Description
TRUEnever evaluated
FALSEnever evaluated
0
113 ,
!EVP_EncryptIn...)0) , zero_iv)Description
TRUEnever evaluated
FALSEnever evaluated
0
114 ((void *)0)
!EVP_EncryptIn...)0) , zero_iv)Description
TRUEnever evaluated
FALSEnever evaluated
0
115 , zero_iv)
!EVP_EncryptIn...)0) , zero_iv)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
116 return
never executed: return 0;
0;
never executed: return 0;
0
117 memset(ctx->tbl, 0, EVP_CIPHER_CTX_block_size(&ctx->cctx));-
118 ctx->nlast_block = 0;-
119 return
never executed: return 1;
1;
never executed: return 1;
0
120 }-
121-
122 if (cipher
cipherDescription
TRUEnever evaluated
FALSEnever evaluated
&& !EVP_EncryptInit_ex(&ctx->cctx, cipher, impl,
!EVP_EncryptIn... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
123 ((void *)0)
!EVP_EncryptIn... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
124 ,
!EVP_EncryptIn... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
125 ((void *)0)
!EVP_EncryptIn... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
126 )
!EVP_EncryptIn... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
)
0
127 return
never executed: return 0;
0;
never executed: return 0;
0
128-
129 if (key
keyDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
130 int bl;-
131-
132 if (!EVP_CIPHER_CTX_cipher(&ctx->cctx)
!EVP_CIPHER_CT...er(&ctx->cctx)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
133 return
never executed: return 0;
0;
never executed: return 0;
0
134 if (!EVP_CIPHER_CTX_set_key_length(&ctx->cctx, keylen)
!EVP_CIPHER_CT...>cctx, keylen)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
135 return
never executed: return 0;
0;
never executed: return 0;
0
136 if (!EVP_EncryptInit_ex(&ctx->cctx,
!EVP_EncryptIn... key, zero_iv)Description
TRUEnever evaluated
FALSEnever evaluated
0
137 ((void *)0)
!EVP_EncryptIn... key, zero_iv)Description
TRUEnever evaluated
FALSEnever evaluated
0
138 ,
!EVP_EncryptIn... key, zero_iv)Description
TRUEnever evaluated
FALSEnever evaluated
0
139 ((void *)0)
!EVP_EncryptIn... key, zero_iv)Description
TRUEnever evaluated
FALSEnever evaluated
0
140 , key, zero_iv)
!EVP_EncryptIn... key, zero_iv)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
141 return
never executed: return 0;
0;
never executed: return 0;
0
142 bl = EVP_CIPHER_CTX_block_size(&ctx->cctx);-
143 if (!EVP_Cipher(&ctx->cctx, ctx->tbl, zero_iv, bl)
!EVP_Cipher(&c..., zero_iv, bl)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
144 return
never executed: return 0;
0;
never executed: return 0;
0
145 make_kn(ctx->k1, ctx->tbl, bl);-
146 make_kn(ctx->k2, ctx->k1, bl);-
147 explicit_bzero(ctx->tbl, bl);-
148-
149 if (!EVP_EncryptInit_ex(&ctx->cctx,
!EVP_EncryptIn...)0) , zero_iv)Description
TRUEnever evaluated
FALSEnever evaluated
0
150 ((void *)0)
!EVP_EncryptIn...)0) , zero_iv)Description
TRUEnever evaluated
FALSEnever evaluated
0
151 ,
!EVP_EncryptIn...)0) , zero_iv)Description
TRUEnever evaluated
FALSEnever evaluated
0
152 ((void *)0)
!EVP_EncryptIn...)0) , zero_iv)Description
TRUEnever evaluated
FALSEnever evaluated
0
153 ,
!EVP_EncryptIn...)0) , zero_iv)Description
TRUEnever evaluated
FALSEnever evaluated
0
154 ((void *)0)
!EVP_EncryptIn...)0) , zero_iv)Description
TRUEnever evaluated
FALSEnever evaluated
0
155 , zero_iv)
!EVP_EncryptIn...)0) , zero_iv)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
156 return
never executed: return 0;
0;
never executed: return 0;
0
157-
158 memset(ctx->tbl, 0, bl);-
159 ctx->nlast_block = 0;-
160 }
never executed: end of block
0
161 return
never executed: return 1;
1;
never executed: return 1;
0
162}-
163-
164int-
165CMAC_Update(CMAC_CTX *ctx, const void *in, size_t dlen)-
166{-
167 const unsigned char *data = in;-
168 size_t bl;-
169-
170 if (ctx->nlast_block == -1
ctx->nlast_block == -1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
171 return
never executed: return 0;
0;
never executed: return 0;
0
172 if (dlen == 0
dlen == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
173 return
never executed: return 1;
1;
never executed: return 1;
0
174 bl = EVP_CIPHER_CTX_block_size(&ctx->cctx);-
175-
176 if (ctx->nlast_block > 0
ctx->nlast_block > 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
177 size_t nleft;-
178-
179 nleft = bl - ctx->nlast_block;-
180 if (dlen < nleft
dlen < nleftDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
181 nleft = dlen;
never executed: nleft = dlen;
0
182 memcpy(ctx->last_block + ctx->nlast_block, data, nleft);-
183 dlen -= nleft;-
184 ctx->nlast_block += nleft;-
185-
186 if (dlen == 0
dlen == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
187 return
never executed: return 1;
1;
never executed: return 1;
0
188 data += nleft;-
189-
190 if (!EVP_Cipher(&ctx->cctx, ctx->tbl, ctx->last_block, bl)
!EVP_Cipher(&c...ast_block, bl)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
191 return
never executed: return 0;
0;
never executed: return 0;
0
192 }
never executed: end of block
0
193-
194 while (dlen > bl
dlen > blDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
195 if (!EVP_Cipher(&ctx->cctx, ctx->tbl, data, bl)
!EVP_Cipher(&c...tbl, data, bl)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
196 return
never executed: return 0;
0;
never executed: return 0;
0
197 dlen -= bl;-
198 data += bl;-
199 }
never executed: end of block
0
200-
201 memcpy(ctx->last_block, data, dlen);-
202 ctx->nlast_block = dlen;-
203 return
never executed: return 1;
1;
never executed: return 1;
0
204}-
205-
206int-
207CMAC_Final(CMAC_CTX *ctx, unsigned char *out, size_t *poutlen)-
208{-
209 int i, bl, lb;-
210-
211 if (ctx->nlast_block == -1
ctx->nlast_block == -1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
212 return
never executed: return 0;
0;
never executed: return 0;
0
213 bl = EVP_CIPHER_CTX_block_size(&ctx->cctx);-
214 *poutlen = (size_t)bl;-
215 if (!out
!outDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
216 return
never executed: return 1;
1;
never executed: return 1;
0
217 lb = ctx->nlast_block;-
218-
219 if (lb == bl
lb == blDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
220 for (i = 0; i < bl
i < blDescription
TRUEnever evaluated
FALSEnever evaluated
; i++)
0
221 out[i] = ctx->last_block[i] ^ ctx->k1[i];
never executed: out[i] = ctx->last_block[i] ^ ctx->k1[i];
0
222 }
never executed: end of block
else {
0
223 ctx->last_block[lb] = 0x80;-
224 if (bl - lb > 1
bl - lb > 1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
225 memset(ctx->last_block + lb + 1, 0, bl - lb - 1);
never executed: memset(ctx->last_block + lb + 1, 0, bl - lb - 1);
0
226 for (i = 0; i < bl
i < blDescription
TRUEnever evaluated
FALSEnever evaluated
; i++)
0
227 out[i] = ctx->last_block[i] ^ ctx->k2[i];
never executed: out[i] = ctx->last_block[i] ^ ctx->k2[i];
0
228 }
never executed: end of block
0
229 if (!EVP_Cipher(&ctx->cctx, out, out, bl)
!EVP_Cipher(&c... out, out, bl)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
230 explicit_bzero(out, bl);-
231 return
never executed: return 0;
0;
never executed: return 0;
0
232 }-
233 return
never executed: return 1;
1;
never executed: return 1;
0
234}-
235-
236int-
237CMAC_resume(CMAC_CTX *ctx)-
238{-
239 if (ctx->nlast_block == -1
ctx->nlast_block == -1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
240 return
never executed: return 0;
0;
never executed: return 0;
0
241-
242-
243-
244-
245-
246-
247 return
never executed: return EVP_EncryptInit_ex(&ctx->cctx, ((void *)0) , ((void *)0) , ((void *)0) , ctx->tbl);
EVP_EncryptInit_ex(&ctx->cctx,
never executed: return EVP_EncryptInit_ex(&ctx->cctx, ((void *)0) , ((void *)0) , ((void *)0) , ctx->tbl);
0
248 ((void *)0)
never executed: return EVP_EncryptInit_ex(&ctx->cctx, ((void *)0) , ((void *)0) , ((void *)0) , ctx->tbl);
0
249 ,
never executed: return EVP_EncryptInit_ex(&ctx->cctx, ((void *)0) , ((void *)0) , ((void *)0) , ctx->tbl);
0
250 ((void *)0)
never executed: return EVP_EncryptInit_ex(&ctx->cctx, ((void *)0) , ((void *)0) , ((void *)0) , ctx->tbl);
0
251 ,
never executed: return EVP_EncryptInit_ex(&ctx->cctx, ((void *)0) , ((void *)0) , ((void *)0) , ctx->tbl);
0
252 ((void *)0)
never executed: return EVP_EncryptInit_ex(&ctx->cctx, ((void *)0) , ((void *)0) , ((void *)0) , ctx->tbl);
0
253 , ctx->tbl);
never executed: return EVP_EncryptInit_ex(&ctx->cctx, ((void *)0) , ((void *)0) , ((void *)0) , ctx->tbl);
0
254}-
Switch to Source codePreprocessed file

Generated by Squish Coco 4.2.2