Skip to content

Commit ce5b498

Browse files
committed
refactor AEAD's and MAC's to use ECB API
1 parent 9b78f52 commit ce5b498

37 files changed

+123
-225
lines changed

src/encauth/ccm/ccm_add_aad.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ int ccm_add_aad(ccm_state *ccm,
3535
for (y = 0; y < adatalen; y++) {
3636
if (ccm->x == 16) {
3737
/* full block so let's encrypt it */
38-
if ((err = cipher_descriptor[ccm->cipher].ecb_encrypt(ccm->PAD, ccm->PAD, &ccm->K)) != CRYPT_OK) {
38+
if ((err = ecb_encrypt_block(ccm->PAD, ccm->PAD, &ccm->K)) != CRYPT_OK) {
3939
return err;
4040
}
4141
ccm->x = 0;
@@ -46,7 +46,7 @@ int ccm_add_aad(ccm_state *ccm,
4646
/* remainder? */
4747
if (ccm->aadlen == ccm->current_aadlen) {
4848
if (ccm->x != 0) {
49-
if ((err = cipher_descriptor[ccm->cipher].ecb_encrypt(ccm->PAD, ccm->PAD, &ccm->K)) != CRYPT_OK) {
49+
if ((err = ecb_encrypt_block(ccm->PAD, ccm->PAD, &ccm->K)) != CRYPT_OK) {
5050
return err;
5151
}
5252
}

src/encauth/ccm/ccm_add_nonce.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ int ccm_add_nonce(ccm_state *ccm,
6666
}
6767

6868
/* encrypt PAD */
69-
if ((err = cipher_descriptor[ccm->cipher].ecb_encrypt(ccm->PAD, ccm->PAD, &ccm->K)) != CRYPT_OK) {
69+
if ((err = ecb_encrypt_block(ccm->PAD, ccm->PAD, &ccm->K)) != CRYPT_OK) {
7070
return err;
7171
}
7272

src/encauth/ccm/ccm_done.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ int ccm_done(ccm_state *ccm,
3434
LTC_ARGCHK(taglen != NULL);
3535

3636
if (ccm->x != 0) {
37-
if ((err = cipher_descriptor[ccm->cipher].ecb_encrypt(ccm->PAD, ccm->PAD, &ccm->K)) != CRYPT_OK) {
37+
if ((err = ecb_encrypt_block(ccm->PAD, ccm->PAD, &ccm->K)) != CRYPT_OK) {
3838
return err;
3939
}
4040
}
@@ -43,11 +43,11 @@ int ccm_done(ccm_state *ccm,
4343
for (y = 15; y > 15 - ccm->L; y--) {
4444
ccm->ctr[y] = 0x00;
4545
}
46-
if ((err = cipher_descriptor[ccm->cipher].ecb_encrypt(ccm->ctr, ccm->CTRPAD, &ccm->K)) != CRYPT_OK) {
46+
if ((err = ecb_encrypt_block(ccm->ctr, ccm->CTRPAD, &ccm->K)) != CRYPT_OK) {
4747
return err;
4848
}
4949

50-
cipher_descriptor[ccm->cipher].done(&ccm->K);
50+
ecb_done(&ccm->K);
5151

5252
/* store the TAG */
5353
for (x = 0; x < 16 && x < *taglen; x++) {

src/encauth/ccm/ccm_init.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,9 @@ int ccm_init(ccm_state *ccm, int cipher,
4747
ccm->taglen = taglen;
4848

4949
/* schedule key */
50-
if ((err = cipher_descriptor[cipher].setup(key, keylen, 0, &ccm->K)) != CRYPT_OK) {
50+
if ((err = ecb_start(cipher, key, keylen, 0, &ccm->K)) != CRYPT_OK) {
5151
return err;
5252
}
53-
ccm->cipher = cipher;
5453

5554
/* let's get the L value */
5655
ccm->ptlen = ptlen;

src/encauth/ccm/ccm_memory.c

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
*/
3939
int ccm_memory(int cipher,
4040
const unsigned char *key, unsigned long keylen,
41-
symmetric_key *uskey,
41+
symmetric_ECB *uskey,
4242
const unsigned char *nonce, unsigned long noncelen,
4343
const unsigned char *header, unsigned long headerlen,
4444
unsigned char *pt, unsigned long ptlen,
@@ -48,7 +48,7 @@ int ccm_memory(int cipher,
4848
{
4949
unsigned char PAD[16], ctr[16], CTRPAD[16], ptTag[16], b, *pt_real;
5050
unsigned char *pt_work = NULL;
51-
symmetric_key *skey;
51+
symmetric_ECB *skey;
5252
int err;
5353
unsigned long len, L, x, y, z, CTRlen;
5454

@@ -89,7 +89,7 @@ int ccm_memory(int cipher,
8989
if (cipher_descriptor[cipher].accel_ccm_memory != NULL) {
9090
return cipher_descriptor[cipher].accel_ccm_memory(
9191
key, keylen,
92-
uskey,
92+
&uskey->key,
9393
nonce, noncelen,
9494
header, headerlen,
9595
pt, ptlen,
@@ -123,7 +123,7 @@ int ccm_memory(int cipher,
123123
}
124124

125125
/* initialize the cipher */
126-
if ((err = cipher_descriptor[cipher].setup(key, keylen, 0, skey)) != CRYPT_OK) {
126+
if ((err = ecb_start(cipher, key, keylen, 0, skey)) != CRYPT_OK) {
127127
XFREE(skey);
128128
return err;
129129
}
@@ -169,7 +169,7 @@ int ccm_memory(int cipher,
169169
}
170170

171171
/* encrypt PAD */
172-
if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) {
172+
if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) {
173173
goto error;
174174
}
175175

@@ -194,7 +194,7 @@ int ccm_memory(int cipher,
194194
for (y = 0; y < headerlen; y++) {
195195
if (x == 16) {
196196
/* full block so let's encrypt it */
197-
if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) {
197+
if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) {
198198
goto error;
199199
}
200200
x = 0;
@@ -203,7 +203,7 @@ int ccm_memory(int cipher,
203203
}
204204

205205
/* remainder */
206-
if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) {
206+
if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) {
207207
goto error;
208208
}
209209
}
@@ -238,7 +238,7 @@ int ccm_memory(int cipher,
238238
ctr[z] = (ctr[z] + 1) & 255;
239239
if (ctr[z]) break;
240240
}
241-
if ((err = cipher_descriptor[cipher].ecb_encrypt(ctr, CTRPAD, skey)) != CRYPT_OK) {
241+
if ((err = ecb_encrypt_block(ctr, CTRPAD, skey)) != CRYPT_OK) {
242242
goto error;
243243
}
244244

@@ -247,7 +247,7 @@ int ccm_memory(int cipher,
247247
*(LTC_FAST_TYPE_PTR_CAST(&PAD[z])) ^= *(LTC_FAST_TYPE_PTR_CAST(&pt[y+z]));
248248
*(LTC_FAST_TYPE_PTR_CAST(&ct[y+z])) = *(LTC_FAST_TYPE_PTR_CAST(&pt[y+z])) ^ *(LTC_FAST_TYPE_PTR_CAST(&CTRPAD[z]));
249249
}
250-
if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) {
250+
if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) {
251251
goto error;
252252
}
253253
}
@@ -258,7 +258,7 @@ int ccm_memory(int cipher,
258258
ctr[z] = (ctr[z] + 1) & 255;
259259
if (ctr[z]) break;
260260
}
261-
if ((err = cipher_descriptor[cipher].ecb_encrypt(ctr, CTRPAD, skey)) != CRYPT_OK) {
261+
if ((err = ecb_encrypt_block(ctr, CTRPAD, skey)) != CRYPT_OK) {
262262
goto error;
263263
}
264264

@@ -267,7 +267,7 @@ int ccm_memory(int cipher,
267267
*(LTC_FAST_TYPE_PTR_CAST(&pt[y+z])) = *(LTC_FAST_TYPE_PTR_CAST(&ct[y+z])) ^ *(LTC_FAST_TYPE_PTR_CAST(&CTRPAD[z]));
268268
*(LTC_FAST_TYPE_PTR_CAST(&PAD[z])) ^= *(LTC_FAST_TYPE_PTR_CAST(&pt[y+z]));
269269
}
270-
if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) {
270+
if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) {
271271
goto error;
272272
}
273273
}
@@ -282,7 +282,7 @@ int ccm_memory(int cipher,
282282
ctr[z] = (ctr[z] + 1) & 255;
283283
if (ctr[z]) break;
284284
}
285-
if ((err = cipher_descriptor[cipher].ecb_encrypt(ctr, CTRPAD, skey)) != CRYPT_OK) {
285+
if ((err = ecb_encrypt_block(ctr, CTRPAD, skey)) != CRYPT_OK) {
286286
goto error;
287287
}
288288
CTRlen = 0;
@@ -298,7 +298,7 @@ int ccm_memory(int cipher,
298298
}
299299

300300
if (x == 16) {
301-
if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) {
301+
if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) {
302302
goto error;
303303
}
304304
x = 0;
@@ -307,7 +307,7 @@ int ccm_memory(int cipher,
307307
}
308308

309309
if (x != 0) {
310-
if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) {
310+
if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) {
311311
goto error;
312312
}
313313
}
@@ -317,12 +317,12 @@ int ccm_memory(int cipher,
317317
for (y = 15; y > 15 - L; y--) {
318318
ctr[y] = 0x00;
319319
}
320-
if ((err = cipher_descriptor[cipher].ecb_encrypt(ctr, CTRPAD, skey)) != CRYPT_OK) {
320+
if ((err = ecb_encrypt_block(ctr, CTRPAD, skey)) != CRYPT_OK) {
321321
goto error;
322322
}
323323

324324
if (skey != uskey) {
325-
cipher_descriptor[cipher].done(skey);
325+
ecb_done(skey);
326326
#ifdef LTC_CLEAN_STACK
327327
zeromem(skey, sizeof(*skey));
328328
#endif

src/encauth/ccm/ccm_process.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ int ccm_process(ccm_state *ccm,
5353
ccm->ctr[z] = (ccm->ctr[z] + 1) & 255;
5454
if (ccm->ctr[z]) break;
5555
}
56-
if ((err = cipher_descriptor[ccm->cipher].ecb_encrypt(ccm->ctr, ccm->CTRPAD, &ccm->K)) != CRYPT_OK) {
56+
if ((err = ecb_encrypt_block(ccm->ctr, ccm->CTRPAD, &ccm->K)) != CRYPT_OK) {
5757
return err;
5858
}
5959
ccm->CTRlen = 0;
@@ -69,7 +69,7 @@ int ccm_process(ccm_state *ccm,
6969
}
7070

7171
if (ccm->x == 16) {
72-
if ((err = cipher_descriptor[ccm->cipher].ecb_encrypt(ccm->PAD, ccm->PAD, &ccm->K)) != CRYPT_OK) {
72+
if ((err = ecb_encrypt_block(ccm->PAD, ccm->PAD, &ccm->K)) != CRYPT_OK) {
7373
return err;
7474
}
7575
ccm->x = 0;

src/encauth/ccm/ccm_test.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ int ccm_test(void)
114114
unsigned long taglen, x, y;
115115
unsigned char buf[64], buf2[64], tag[16], tag2[16], tag3[16], zero[64];
116116
int err, idx;
117-
symmetric_key skey;
117+
symmetric_ECB skey;
118118
ccm_state ccm;
119119

120120
zeromem(zero, 64);
@@ -131,7 +131,7 @@ int ccm_test(void)
131131
for (y = 0; y < 2; y++) {
132132
taglen = tests[x].taglen;
133133
if (y == 0) {
134-
if ((err = cipher_descriptor[idx].setup(tests[x].key, 16, 0, &skey)) != CRYPT_OK) {
134+
if ((err = ecb_start(idx, tests[x].key, 16, 0, &skey)) != CRYPT_OK) {
135135
return err;
136136
}
137137

@@ -241,7 +241,7 @@ int ccm_test(void)
241241
}
242242

243243
if (y == 0) {
244-
cipher_descriptor[idx].done(&skey);
244+
ecb_done(&skey);
245245
}
246246
}
247247
}

src/encauth/gcm/gcm_add_aad.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ int gcm_add_aad(gcm_state *gcm,
2626
const unsigned char *adata, unsigned long adatalen)
2727
{
2828
unsigned long x;
29-
int err;
3029
#ifdef LTC_FAST
3130
unsigned long y;
3231
#endif
@@ -40,10 +39,6 @@ int gcm_add_aad(gcm_state *gcm,
4039
return CRYPT_INVALID_ARG;
4140
}
4241

43-
if ((err = cipher_is_valid(gcm->cipher)) != CRYPT_OK) {
44-
return err;
45-
}
46-
4742
/* in IV mode? */
4843
if (gcm->mode == LTC_GCM_MODE_IV) {
4944
/* IV length must be > 0 */

src/encauth/gcm/gcm_add_iv.c

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ int gcm_add_iv(gcm_state *gcm,
2626
const unsigned char *IV, unsigned long IVlen)
2727
{
2828
unsigned long x, y;
29-
int err;
3029

3130
LTC_ARGCHK(gcm != NULL);
3231
if (IVlen > 0) {
@@ -42,11 +41,6 @@ int gcm_add_iv(gcm_state *gcm,
4241
return CRYPT_INVALID_ARG;
4342
}
4443

45-
if ((err = cipher_is_valid(gcm->cipher)) != CRYPT_OK) {
46-
return err;
47-
}
48-
49-
5044
/* trip the ivmode flag */
5145
if (IVlen + gcm->buflen > 12) {
5246
gcm->ivmode |= 1;

src/encauth/gcm/gcm_done.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,6 @@ int gcm_done(gcm_state *gcm,
3636
return CRYPT_INVALID_ARG;
3737
}
3838

39-
if ((err = cipher_is_valid(gcm->cipher)) != CRYPT_OK) {
40-
return err;
41-
}
42-
4339
if (gcm->mode == LTC_GCM_MODE_IV) {
4440
/* let's process the IV */
4541
if ((err = gcm_add_aad(gcm, NULL, 0)) != CRYPT_OK) return err;
@@ -69,15 +65,15 @@ int gcm_done(gcm_state *gcm,
6965
gcm_mult_h(gcm, gcm->X);
7066

7167
/* encrypt original counter */
72-
if ((err = cipher_descriptor[gcm->cipher].ecb_encrypt(gcm->Y_0, gcm->buf, &gcm->K)) != CRYPT_OK) {
68+
if ((err = ecb_encrypt_block(gcm->Y_0, gcm->buf, &gcm->K)) != CRYPT_OK) {
7369
return err;
7470
}
7571
for (x = 0; x < 16 && x < *taglen; x++) {
7672
tag[x] = gcm->buf[x] ^ gcm->X[x];
7773
}
7874
*taglen = x;
7975

80-
cipher_descriptor[gcm->cipher].done(&gcm->K);
76+
ecb_done(&gcm->K);
8177

8278
return CRYPT_OK;
8379
}

0 commit comments

Comments
 (0)