Skip to content

Commit 06adf52

Browse files
committed
refactor AEAD's and MAC's to use ECB API
1 parent 661109f commit 06adf52

37 files changed

+123
-227
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
@@ -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
@@ -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,
@@ -120,7 +120,7 @@ int ccm_memory(int cipher,
120120
}
121121

122122
/* initialize the cipher */
123-
if ((err = cipher_descriptor[cipher].setup(key, keylen, 0, skey)) != CRYPT_OK) {
123+
if ((err = ecb_start(cipher, key, keylen, 0, skey)) != CRYPT_OK) {
124124
XFREE(skey);
125125
return err;
126126
}
@@ -170,7 +170,7 @@ int ccm_memory(int cipher,
170170
}
171171

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

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

206206
/* remainder */
207-
if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) {
207+
if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) {
208208
goto error;
209209
}
210210
}
@@ -239,7 +239,7 @@ int ccm_memory(int cipher,
239239
ctr[z] = (ctr[z] + 1) & 255;
240240
if (ctr[z]) break;
241241
}
242-
if ((err = cipher_descriptor[cipher].ecb_encrypt(ctr, CTRPAD, skey)) != CRYPT_OK) {
242+
if ((err = ecb_encrypt_block(ctr, CTRPAD, skey)) != CRYPT_OK) {
243243
goto error;
244244
}
245245

@@ -248,7 +248,7 @@ int ccm_memory(int cipher,
248248
*(LTC_FAST_TYPE_PTR_CAST(&PAD[z])) ^= *(LTC_FAST_TYPE_PTR_CAST(&pt[y+z]));
249249
*(LTC_FAST_TYPE_PTR_CAST(&ct[y+z])) = *(LTC_FAST_TYPE_PTR_CAST(&pt[y+z])) ^ *(LTC_FAST_TYPE_PTR_CAST(&CTRPAD[z]));
250250
}
251-
if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) {
251+
if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) {
252252
goto error;
253253
}
254254
}
@@ -259,7 +259,7 @@ int ccm_memory(int cipher,
259259
ctr[z] = (ctr[z] + 1) & 255;
260260
if (ctr[z]) break;
261261
}
262-
if ((err = cipher_descriptor[cipher].ecb_encrypt(ctr, CTRPAD, skey)) != CRYPT_OK) {
262+
if ((err = ecb_encrypt_block(ctr, CTRPAD, skey)) != CRYPT_OK) {
263263
goto error;
264264
}
265265

@@ -268,7 +268,7 @@ int ccm_memory(int cipher,
268268
*(LTC_FAST_TYPE_PTR_CAST(&pt[y+z])) = *(LTC_FAST_TYPE_PTR_CAST(&ct[y+z])) ^ *(LTC_FAST_TYPE_PTR_CAST(&CTRPAD[z]));
269269
*(LTC_FAST_TYPE_PTR_CAST(&PAD[z])) ^= *(LTC_FAST_TYPE_PTR_CAST(&pt[y+z]));
270270
}
271-
if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) {
271+
if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) {
272272
goto error;
273273
}
274274
}
@@ -283,7 +283,7 @@ int ccm_memory(int cipher,
283283
ctr[z] = (ctr[z] + 1) & 255;
284284
if (ctr[z]) break;
285285
}
286-
if ((err = cipher_descriptor[cipher].ecb_encrypt(ctr, CTRPAD, skey)) != CRYPT_OK) {
286+
if ((err = ecb_encrypt_block(ctr, CTRPAD, skey)) != CRYPT_OK) {
287287
goto error;
288288
}
289289
CTRlen = 0;
@@ -299,7 +299,7 @@ int ccm_memory(int cipher,
299299
}
300300

301301
if (x == 16) {
302-
if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) {
302+
if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) {
303303
goto error;
304304
}
305305
x = 0;
@@ -308,7 +308,7 @@ int ccm_memory(int cipher,
308308
}
309309

310310
if (x != 0) {
311-
if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) {
311+
if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) {
312312
goto error;
313313
}
314314
}
@@ -318,12 +318,12 @@ int ccm_memory(int cipher,
318318
for (y = 15; y > 15 - L; y--) {
319319
ctr[y] = 0x00;
320320
}
321-
if ((err = cipher_descriptor[cipher].ecb_encrypt(ctr, CTRPAD, skey)) != CRYPT_OK) {
321+
if ((err = ecb_encrypt_block(ctr, CTRPAD, skey)) != CRYPT_OK) {
322322
goto error;
323323
}
324324

325325
if (skey != uskey) {
326-
cipher_descriptor[cipher].done(skey);
326+
ecb_done(skey);
327327
#ifdef LTC_CLEAN_STACK
328328
zeromem(skey, sizeof(*skey));
329329
#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
}

0 commit comments

Comments
 (0)