summaryrefslogtreecommitdiff
path: root/libtomcrypt/src/mac/pmac/pmac_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'libtomcrypt/src/mac/pmac/pmac_init.c')
-rw-r--r--libtomcrypt/src/mac/pmac/pmac_init.c71
1 files changed, 36 insertions, 35 deletions
diff --git a/libtomcrypt/src/mac/pmac/pmac_init.c b/libtomcrypt/src/mac/pmac/pmac_init.c
index e4cf571..b1bb400 100644
--- a/libtomcrypt/src/mac/pmac/pmac_init.c
+++ b/libtomcrypt/src/mac/pmac/pmac_init.c
@@ -5,21 +5,19 @@
*
* The library is free for all purposes without any express
* guarantee it works.
- *
- * Tom St Denis, tomstdenis@gmail.com, http://libtom.org
*/
#include "tomcrypt.h"
-/**
+/**
@file pmac_init.c
- PMAC implementation, initialize state, by Tom St Denis
+ PMAC implementation, initialize state, by Tom St Denis
*/
#ifdef LTC_PMAC
static const struct {
int len;
- unsigned char poly_div[MAXBLOCKSIZE],
+ unsigned char poly_div[MAXBLOCKSIZE],
poly_mul[MAXBLOCKSIZE];
} polys[] = {
{
@@ -27,7 +25,7 @@ static const struct {
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D },
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B }
}, {
- 16,
+ 16,
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43 },
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -39,7 +37,7 @@ static const struct {
Initialize a PMAC state
@param pmac The PMAC state to initialize
@param cipher The index of the desired cipher
- @param key The secret key
+ @param key The secret key
@param keylen The length of the secret key (octets)
@return CRYPT_OK if successful
*/
@@ -59,10 +57,13 @@ int pmac_init(pmac_state *pmac, int cipher, const unsigned char *key, unsigned l
/* determine which polys to use */
pmac->block_len = cipher_descriptor[cipher].block_length;
for (poly = 0; poly < (int)(sizeof(polys)/sizeof(polys[0])); poly++) {
- if (polys[poly].len == pmac->block_len) {
+ if (polys[poly].len == pmac->block_len) {
break;
}
}
+ if (poly >= (int)(sizeof(polys)/sizeof(polys[0]))) {
+ return CRYPT_INVALID_ARG;
+ }
if (polys[poly].len != pmac->block_len) {
return CRYPT_INVALID_ARG;
}
@@ -78,7 +79,7 @@ int pmac_init(pmac_state *pmac, int cipher, const unsigned char *key, unsigned l
if ((err = cipher_descriptor[cipher].setup(key, keylen, 0, &pmac->key)) != CRYPT_OK) {
return err;
}
-
+
/* allocate L */
L = XMALLOC(pmac->block_len);
if (L == NULL) {
@@ -107,41 +108,41 @@ int pmac_init(pmac_state *pmac, int cipher, const unsigned char *key, unsigned l
}
}
- /* find Lr = L / x */
- m = L[pmac->block_len-1] & 1;
+ /* find Lr = L / x */
+ m = L[pmac->block_len-1] & 1;
- /* shift right */
- for (x = pmac->block_len - 1; x > 0; x--) {
- pmac->Lr[x] = ((L[x] >> 1) | (L[x-1] << 7)) & 255;
- }
- pmac->Lr[0] = L[0] >> 1;
+ /* shift right */
+ for (x = pmac->block_len - 1; x > 0; x--) {
+ pmac->Lr[x] = ((L[x] >> 1) | (L[x-1] << 7)) & 255;
+ }
+ pmac->Lr[0] = L[0] >> 1;
- if (m == 1) {
- for (x = 0; x < pmac->block_len; x++) {
- pmac->Lr[x] ^= polys[poly].poly_div[x];
- }
- }
+ if (m == 1) {
+ for (x = 0; x < pmac->block_len; x++) {
+ pmac->Lr[x] ^= polys[poly].poly_div[x];
+ }
+ }
- /* zero buffer, counters, etc... */
- pmac->block_index = 1;
- pmac->cipher_idx = cipher;
- pmac->buflen = 0;
- zeromem(pmac->block, sizeof(pmac->block));
- zeromem(pmac->Li, sizeof(pmac->Li));
- zeromem(pmac->checksum, sizeof(pmac->checksum));
- err = CRYPT_OK;
+ /* zero buffer, counters, etc... */
+ pmac->block_index = 1;
+ pmac->cipher_idx = cipher;
+ pmac->buflen = 0;
+ zeromem(pmac->block, sizeof(pmac->block));
+ zeromem(pmac->Li, sizeof(pmac->Li));
+ zeromem(pmac->checksum, sizeof(pmac->checksum));
+ err = CRYPT_OK;
error:
#ifdef LTC_CLEAN_STACK
- zeromem(L, pmac->block_len);
+ zeromem(L, pmac->block_len);
#endif
- XFREE(L);
+ XFREE(L);
- return err;
+ return err;
}
#endif
-/* $Source$ */
-/* $Revision$ */
-/* $Date$ */
+/* ref: $Format:%D$ */
+/* git commit: $Format:%H$ */
+/* commit time: $Format:%ai$ */