Skip to content

Commit f31c49c

Browse files
committed
refactor AEAD's and MAC's to use ECB API
1 parent bc3a752 commit f31c49c

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
@@ -29,7 +29,7 @@ int ccm_add_aad(ccm_state *ccm,
2929
for (y = 0; y < adatalen; y++) {
3030
if (ccm->x == 16) {
3131
/* full block so let's encrypt it */
32-
if ((err = cipher_descriptor[ccm->cipher].ecb_encrypt(ccm->PAD, ccm->PAD, &ccm->K)) != CRYPT_OK) {
32+
if ((err = ecb_encrypt_block(ccm->PAD, ccm->PAD, &ccm->K)) != CRYPT_OK) {
3333
return err;
3434
}
3535
ccm->x = 0;
@@ -40,7 +40,7 @@ int ccm_add_aad(ccm_state *ccm,
4040
/* remainder? */
4141
if (ccm->aadlen == ccm->current_aadlen) {
4242
if (ccm->x != 0) {
43-
if ((err = cipher_descriptor[ccm->cipher].ecb_encrypt(ccm->PAD, ccm->PAD, &ccm->K)) != CRYPT_OK) {
43+
if ((err = ecb_encrypt_block(ccm->PAD, ccm->PAD, &ccm->K)) != CRYPT_OK) {
4444
return err;
4545
}
4646
}

src/encauth/ccm/ccm_add_nonce.c

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

6262
/* encrypt PAD */
63-
if ((err = cipher_descriptor[ccm->cipher].ecb_encrypt(ccm->PAD, ccm->PAD, &ccm->K)) != CRYPT_OK) {
63+
if ((err = ecb_encrypt_block(ccm->PAD, ccm->PAD, &ccm->K)) != CRYPT_OK) {
6464
return err;
6565
}
6666

src/encauth/ccm/ccm_done.c

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

3030
if (ccm->x != 0) {
31-
if ((err = cipher_descriptor[ccm->cipher].ecb_encrypt(ccm->PAD, ccm->PAD, &ccm->K)) != CRYPT_OK) {
31+
if ((err = ecb_encrypt_block(ccm->PAD, ccm->PAD, &ccm->K)) != CRYPT_OK) {
3232
return err;
3333
}
3434
}
@@ -37,11 +37,11 @@ int ccm_done(ccm_state *ccm,
3737
for (y = 15; y > 15 - ccm->L; y--) {
3838
ccm->ctr[y] = 0x00;
3939
}
40-
if ((err = cipher_descriptor[ccm->cipher].ecb_encrypt(ccm->ctr, ccm->CTRPAD, &ccm->K)) != CRYPT_OK) {
40+
if ((err = ecb_encrypt_block(ccm->ctr, ccm->CTRPAD, &ccm->K)) != CRYPT_OK) {
4141
return err;
4242
}
4343

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

4646
/* store the TAG */
4747
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
@@ -41,10 +41,9 @@ int ccm_init(ccm_state *ccm, int cipher,
4141
ccm->taglen = taglen;
4242

4343
/* schedule key */
44-
if ((err = cipher_descriptor[cipher].setup(key, keylen, 0, &ccm->K)) != CRYPT_OK) {
44+
if ((err = ecb_start(cipher, key, keylen, 0, &ccm->K)) != CRYPT_OK) {
4545
return err;
4646
}
47-
ccm->cipher = cipher;
4847

4948
/* let's get the L value */
5049
ccm->ptlen = ptlen;

src/encauth/ccm/ccm_memory.c

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
*/
3333
int ccm_memory(int cipher,
3434
const unsigned char *key, unsigned long keylen,
35-
symmetric_key *uskey,
35+
symmetric_ECB *uskey,
3636
const unsigned char *nonce, unsigned long noncelen,
3737
const unsigned char *header, unsigned long headerlen,
3838
unsigned char *pt, unsigned long ptlen,
@@ -42,7 +42,7 @@ int ccm_memory(int cipher,
4242
{
4343
unsigned char PAD[16], ctr[16], CTRPAD[16], ptTag[16], b, *pt_real;
4444
unsigned char *pt_work = NULL;
45-
symmetric_key *skey;
45+
symmetric_ECB *skey;
4646
int err;
4747
unsigned long len, L, x, y, z, CTRlen;
4848

@@ -83,7 +83,7 @@ int ccm_memory(int cipher,
8383
if (cipher_descriptor[cipher].accel_ccm_memory != NULL) {
8484
return cipher_descriptor[cipher].accel_ccm_memory(
8585
key, keylen,
86-
uskey,
86+
&uskey->key,
8787
nonce, noncelen,
8888
header, headerlen,
8989
pt, ptlen,
@@ -117,7 +117,7 @@ int ccm_memory(int cipher,
117117
}
118118

119119
/* initialize the cipher */
120-
if ((err = cipher_descriptor[cipher].setup(key, keylen, 0, skey)) != CRYPT_OK) {
120+
if ((err = ecb_start(cipher, key, keylen, 0, skey)) != CRYPT_OK) {
121121
XFREE(skey);
122122
return err;
123123
}
@@ -163,7 +163,7 @@ int ccm_memory(int cipher,
163163
}
164164

165165
/* encrypt PAD */
166-
if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) {
166+
if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) {
167167
goto error;
168168
}
169169

@@ -188,7 +188,7 @@ int ccm_memory(int cipher,
188188
for (y = 0; y < headerlen; y++) {
189189
if (x == 16) {
190190
/* full block so let's encrypt it */
191-
if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) {
191+
if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) {
192192
goto error;
193193
}
194194
x = 0;
@@ -197,7 +197,7 @@ int ccm_memory(int cipher,
197197
}
198198

199199
/* remainder */
200-
if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) {
200+
if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) {
201201
goto error;
202202
}
203203
}
@@ -232,7 +232,7 @@ int ccm_memory(int cipher,
232232
ctr[z] = (ctr[z] + 1) & 255;
233233
if (ctr[z]) break;
234234
}
235-
if ((err = cipher_descriptor[cipher].ecb_encrypt(ctr, CTRPAD, skey)) != CRYPT_OK) {
235+
if ((err = ecb_encrypt_block(ctr, CTRPAD, skey)) != CRYPT_OK) {
236236
goto error;
237237
}
238238

@@ -241,7 +241,7 @@ int ccm_memory(int cipher,
241241
*(LTC_FAST_TYPE_PTR_CAST(&PAD[z])) ^= *(LTC_FAST_TYPE_PTR_CAST(&pt[y+z]));
242242
*(LTC_FAST_TYPE_PTR_CAST(&ct[y+z])) = *(LTC_FAST_TYPE_PTR_CAST(&pt[y+z])) ^ *(LTC_FAST_TYPE_PTR_CAST(&CTRPAD[z]));
243243
}
244-
if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) {
244+
if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) {
245245
goto error;
246246
}
247247
}
@@ -252,7 +252,7 @@ int ccm_memory(int cipher,
252252
ctr[z] = (ctr[z] + 1) & 255;
253253
if (ctr[z]) break;
254254
}
255-
if ((err = cipher_descriptor[cipher].ecb_encrypt(ctr, CTRPAD, skey)) != CRYPT_OK) {
255+
if ((err = ecb_encrypt_block(ctr, CTRPAD, skey)) != CRYPT_OK) {
256256
goto error;
257257
}
258258

@@ -261,7 +261,7 @@ int ccm_memory(int cipher,
261261
*(LTC_FAST_TYPE_PTR_CAST(&pt[y+z])) = *(LTC_FAST_TYPE_PTR_CAST(&ct[y+z])) ^ *(LTC_FAST_TYPE_PTR_CAST(&CTRPAD[z]));
262262
*(LTC_FAST_TYPE_PTR_CAST(&PAD[z])) ^= *(LTC_FAST_TYPE_PTR_CAST(&pt[y+z]));
263263
}
264-
if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) {
264+
if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) {
265265
goto error;
266266
}
267267
}
@@ -276,7 +276,7 @@ int ccm_memory(int cipher,
276276
ctr[z] = (ctr[z] + 1) & 255;
277277
if (ctr[z]) break;
278278
}
279-
if ((err = cipher_descriptor[cipher].ecb_encrypt(ctr, CTRPAD, skey)) != CRYPT_OK) {
279+
if ((err = ecb_encrypt_block(ctr, CTRPAD, skey)) != CRYPT_OK) {
280280
goto error;
281281
}
282282
CTRlen = 0;
@@ -292,7 +292,7 @@ int ccm_memory(int cipher,
292292
}
293293

294294
if (x == 16) {
295-
if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) {
295+
if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) {
296296
goto error;
297297
}
298298
x = 0;
@@ -301,7 +301,7 @@ int ccm_memory(int cipher,
301301
}
302302

303303
if (x != 0) {
304-
if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) {
304+
if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) {
305305
goto error;
306306
}
307307
}
@@ -311,12 +311,12 @@ int ccm_memory(int cipher,
311311
for (y = 15; y > 15 - L; y--) {
312312
ctr[y] = 0x00;
313313
}
314-
if ((err = cipher_descriptor[cipher].ecb_encrypt(ctr, CTRPAD, skey)) != CRYPT_OK) {
314+
if ((err = ecb_encrypt_block(ctr, CTRPAD, skey)) != CRYPT_OK) {
315315
goto error;
316316
}
317317

318318
if (skey != uskey) {
319-
cipher_descriptor[cipher].done(skey);
319+
ecb_done(skey);
320320
#ifdef LTC_CLEAN_STACK
321321
zeromem(skey, sizeof(*skey));
322322
#endif

src/encauth/ccm/ccm_process.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ int ccm_process(ccm_state *ccm,
4747
ccm->ctr[z] = (ccm->ctr[z] + 1) & 255;
4848
if (ccm->ctr[z]) break;
4949
}
50-
if ((err = cipher_descriptor[ccm->cipher].ecb_encrypt(ccm->ctr, ccm->CTRPAD, &ccm->K)) != CRYPT_OK) {
50+
if ((err = ecb_encrypt_block(ccm->ctr, ccm->CTRPAD, &ccm->K)) != CRYPT_OK) {
5151
return err;
5252
}
5353
ccm->CTRlen = 0;
@@ -63,7 +63,7 @@ int ccm_process(ccm_state *ccm,
6363
}
6464

6565
if (ccm->x == 16) {
66-
if ((err = cipher_descriptor[ccm->cipher].ecb_encrypt(ccm->PAD, ccm->PAD, &ccm->K)) != CRYPT_OK) {
66+
if ((err = ecb_encrypt_block(ccm->PAD, ccm->PAD, &ccm->K)) != CRYPT_OK) {
6767
return err;
6868
}
6969
ccm->x = 0;

src/encauth/ccm/ccm_test.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ int ccm_test(void)
108108
unsigned long taglen, x, y;
109109
unsigned char buf[64], buf2[64], tag[16], tag2[16], tag3[16], zero[64];
110110
int err, idx;
111-
symmetric_key skey;
111+
symmetric_ECB skey;
112112
ccm_state ccm;
113113

114114
zeromem(zero, 64);
@@ -125,7 +125,7 @@ int ccm_test(void)
125125
for (y = 0; y < 2; y++) {
126126
taglen = tests[x].taglen;
127127
if (y == 0) {
128-
if ((err = cipher_descriptor[idx].setup(tests[x].key, 16, 0, &skey)) != CRYPT_OK) {
128+
if ((err = ecb_start(idx, tests[x].key, 16, 0, &skey)) != CRYPT_OK) {
129129
return err;
130130
}
131131

@@ -235,7 +235,7 @@ int ccm_test(void)
235235
}
236236

237237
if (y == 0) {
238-
cipher_descriptor[idx].done(&skey);
238+
ecb_done(&skey);
239239
}
240240
}
241241
}

src/encauth/gcm/gcm_add_aad.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ int gcm_add_aad(gcm_state *gcm,
2020
const unsigned char *adata, unsigned long adatalen)
2121
{
2222
unsigned long x;
23-
int err;
2423
#ifdef LTC_FAST
2524
unsigned long y;
2625
#endif
@@ -34,10 +33,6 @@ int gcm_add_aad(gcm_state *gcm,
3433
return CRYPT_INVALID_ARG;
3534
}
3635

37-
if ((err = cipher_is_valid(gcm->cipher)) != CRYPT_OK) {
38-
return err;
39-
}
40-
4136
/* in IV mode? */
4237
if (gcm->mode == LTC_GCM_MODE_IV) {
4338
/* 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
@@ -20,7 +20,6 @@ int gcm_add_iv(gcm_state *gcm,
2020
const unsigned char *IV, unsigned long IVlen)
2121
{
2222
unsigned long x, y;
23-
int err;
2423

2524
LTC_ARGCHK(gcm != NULL);
2625
if (IVlen > 0) {
@@ -36,11 +35,6 @@ int gcm_add_iv(gcm_state *gcm,
3635
return CRYPT_INVALID_ARG;
3736
}
3837

39-
if ((err = cipher_is_valid(gcm->cipher)) != CRYPT_OK) {
40-
return err;
41-
}
42-
43-
4438
/* trip the ivmode flag */
4539
if (IVlen + gcm->buflen > 12) {
4640
gcm->ivmode |= 1;

src/encauth/gcm/gcm_done.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,6 @@ int gcm_done(gcm_state *gcm,
3030
return CRYPT_INVALID_ARG;
3131
}
3232

33-
if ((err = cipher_is_valid(gcm->cipher)) != CRYPT_OK) {
34-
return err;
35-
}
36-
3733
if (gcm->mode == LTC_GCM_MODE_IV) {
3834
/* let's process the IV */
3935
if ((err = gcm_add_aad(gcm, NULL, 0)) != CRYPT_OK) return err;
@@ -63,15 +59,15 @@ int gcm_done(gcm_state *gcm,
6359
gcm_mult_h(gcm, gcm->X);
6460

6561
/* encrypt original counter */
66-
if ((err = cipher_descriptor[gcm->cipher].ecb_encrypt(gcm->Y_0, gcm->buf, &gcm->K)) != CRYPT_OK) {
62+
if ((err = ecb_encrypt_block(gcm->Y_0, gcm->buf, &gcm->K)) != CRYPT_OK) {
6763
return err;
6864
}
6965
for (x = 0; x < 16 && x < *taglen; x++) {
7066
tag[x] = gcm->buf[x] ^ gcm->X[x];
7167
}
7268
*taglen = x;
7369

74-
cipher_descriptor[gcm->cipher].done(&gcm->K);
70+
ecb_done(&gcm->K);
7571

7672
return CRYPT_OK;
7773
}

src/encauth/gcm/gcm_init.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,20 +44,19 @@ int gcm_init(gcm_state *gcm, int cipher,
4444
}
4545

4646
/* schedule key */
47-
if ((err = cipher_descriptor[cipher].setup(key, keylen, 0, &gcm->K)) != CRYPT_OK) {
47+
if ((err = ecb_start(cipher, key, keylen, 0, &gcm->K)) != CRYPT_OK) {
4848
return err;
4949
}
5050

5151
/* H = E(0) */
5252
zeromem(B, 16);
53-
if ((err = cipher_descriptor[cipher].ecb_encrypt(B, gcm->H, &gcm->K)) != CRYPT_OK) {
53+
if ((err = ecb_encrypt_block(B, gcm->H, &gcm->K)) != CRYPT_OK) {
5454
return err;
5555
}
5656

5757
/* setup state */
5858
zeromem(gcm->buf, sizeof(gcm->buf));
5959
zeromem(gcm->X, sizeof(gcm->X));
60-
gcm->cipher = cipher;
6160
gcm->mode = LTC_GCM_MODE_IV;
6261
gcm->ivmode = 0;
6362
gcm->buflen = 0;

src/encauth/gcm/gcm_process.c

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,6 @@ int gcm_process(gcm_state *gcm,
3737
return CRYPT_INVALID_ARG;
3838
}
3939

40-
if ((err = cipher_is_valid(gcm->cipher)) != CRYPT_OK) {
41-
return err;
42-
}
43-
4440
/* 0xFFFFFFFE0 = ((2^39)-256)/8 */
4541
if (gcm->pttotlen / 8 + (ulong64)gcm->buflen + (ulong64)ptlen >= CONST64(0xFFFFFFFE0)) {
4642
return CRYPT_INVALID_ARG;
@@ -64,7 +60,7 @@ int gcm_process(gcm_state *gcm,
6460
if (++gcm->Y[y] & 255) { break; }
6561
}
6662
/* encrypt the counter */
67-
if ((err = cipher_descriptor[gcm->cipher].ecb_encrypt(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) {
63+
if ((err = ecb_encrypt_block(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) {
6864
return err;
6965
}
7066

@@ -93,7 +89,7 @@ int gcm_process(gcm_state *gcm,
9389
for (y = 15; y >= 12; y--) {
9490
if (++gcm->Y[y] & 255) { break; }
9591
}
96-
if ((err = cipher_descriptor[gcm->cipher].ecb_encrypt(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) {
92+
if ((err = ecb_encrypt_block(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) {
9793
return err;
9894
}
9995
}
@@ -111,7 +107,7 @@ int gcm_process(gcm_state *gcm,
111107
for (y = 15; y >= 12; y--) {
112108
if (++gcm->Y[y] & 255) { break; }
113109
}
114-
if ((err = cipher_descriptor[gcm->cipher].ecb_encrypt(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) {
110+
if ((err = ecb_encrypt_block(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) {
115111
return err;
116112
}
117113
}
@@ -129,7 +125,7 @@ int gcm_process(gcm_state *gcm,
129125
for (y = 15; y >= 12; y--) {
130126
if (++gcm->Y[y] & 255) { break; }
131127
}
132-
if ((err = cipher_descriptor[gcm->cipher].ecb_encrypt(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) {
128+
if ((err = ecb_encrypt_block(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) {
133129
return err;
134130
}
135131
gcm->buflen = 0;

0 commit comments

Comments
 (0)