mirror of
https://github.com/clearml/dropbear
synced 2025-06-26 18:17:32 +00:00
propagate from branch 'au.asn.ucc.matt.ltc.dropbear' (head 2af22fb4e878750b88f80f90d439b316d229796f)
to branch 'au.asn.ucc.matt.dropbear' (head 02c413252c90e9de8e03d91e9939dde3029f5c0a) --HG-- extra : convert_revision : 52ccb0ad0587a62bc64aecb939adbb76546aac16
This commit is contained in:
77
libtomcrypt/src/mac/f9/f9_done.c
Normal file
77
libtomcrypt/src/mac/f9/f9_done.c
Normal file
@@ -0,0 +1,77 @@
|
||||
/* LibTomCrypt, modular cryptographic library -- Tom St Denis
|
||||
*
|
||||
* LibTomCrypt is a library that provides various cryptographic
|
||||
* algorithms in a highly modular and flexible manner.
|
||||
*
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
/**
|
||||
@file f9_done.c
|
||||
f9 Support, terminate the state
|
||||
*/
|
||||
|
||||
#ifdef LTC_F9_MODE
|
||||
|
||||
/** Terminate the f9-MAC state
|
||||
@param f9 f9 state to terminate
|
||||
@param out [out] Destination for the MAC tag
|
||||
@param outlen [in/out] Destination size and final tag size
|
||||
Return CRYPT_OK on success
|
||||
*/
|
||||
int f9_done(f9_state *f9, unsigned char *out, unsigned long *outlen)
|
||||
{
|
||||
int err, x;
|
||||
LTC_ARGCHK(f9 != NULL);
|
||||
LTC_ARGCHK(out != NULL);
|
||||
|
||||
/* check structure */
|
||||
if ((err = cipher_is_valid(f9->cipher)) != CRYPT_OK) {
|
||||
return err;
|
||||
}
|
||||
|
||||
if ((f9->blocksize > cipher_descriptor[f9->cipher].block_length) || (f9->blocksize < 0) ||
|
||||
(f9->buflen > f9->blocksize) || (f9->buflen < 0)) {
|
||||
return CRYPT_INVALID_ARG;
|
||||
}
|
||||
|
||||
if (f9->buflen != 0) {
|
||||
/* encrypt */
|
||||
cipher_descriptor[f9->cipher].ecb_encrypt(f9->IV, f9->IV, &f9->key);
|
||||
f9->buflen = 0;
|
||||
for (x = 0; x < f9->blocksize; x++) {
|
||||
f9->ACC[x] ^= f9->IV[x];
|
||||
}
|
||||
}
|
||||
|
||||
/* schedule modified key */
|
||||
if ((err = cipher_descriptor[f9->cipher].setup(f9->akey, f9->keylen, 0, &f9->key)) != CRYPT_OK) {
|
||||
return err;
|
||||
}
|
||||
|
||||
/* encrypt the ACC */
|
||||
cipher_descriptor[f9->cipher].ecb_encrypt(f9->ACC, f9->ACC, &f9->key);
|
||||
cipher_descriptor[f9->cipher].done(&f9->key);
|
||||
|
||||
/* extract tag */
|
||||
for (x = 0; x < f9->blocksize && (unsigned long)x < *outlen; x++) {
|
||||
out[x] = f9->ACC[x];
|
||||
}
|
||||
*outlen = x;
|
||||
|
||||
#ifdef LTC_CLEAN_STACK
|
||||
zeromem(f9, sizeof(*f9));
|
||||
#endif
|
||||
return CRYPT_OK;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/f9/f9_done.c,v $ */
|
||||
/* $Revision: 1.5 $ */
|
||||
/* $Date: 2006/11/09 01:53:32 $ */
|
||||
|
||||
83
libtomcrypt/src/mac/f9/f9_file.c
Normal file
83
libtomcrypt/src/mac/f9/f9_file.c
Normal file
@@ -0,0 +1,83 @@
|
||||
/* LibTomCrypt, modular cryptographic library -- Tom St Denis
|
||||
*
|
||||
* LibTomCrypt is a library that provides various cryptographic
|
||||
* algorithms in a highly modular and flexible manner.
|
||||
*
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
/**
|
||||
@file f9_file.c
|
||||
f9 support, process a file, Tom St Denis
|
||||
*/
|
||||
|
||||
#ifdef LTC_F9_MODE
|
||||
|
||||
/**
|
||||
f9 a file
|
||||
@param cipher The index of the cipher desired
|
||||
@param key The secret key
|
||||
@param keylen The length of the secret key (octets)
|
||||
@param filename The name of the file you wish to f9
|
||||
@param out [out] Where the authentication tag is to be stored
|
||||
@param outlen [in/out] The max size and resulting size of the authentication tag
|
||||
@return CRYPT_OK if successful, CRYPT_NOP if file support has been disabled
|
||||
*/
|
||||
int f9_file(int cipher,
|
||||
const unsigned char *key, unsigned long keylen,
|
||||
const char *filename,
|
||||
unsigned char *out, unsigned long *outlen)
|
||||
{
|
||||
#ifdef LTC_NO_FILE
|
||||
return CRYPT_NOP;
|
||||
#else
|
||||
int err, x;
|
||||
f9_state f9;
|
||||
FILE *in;
|
||||
unsigned char buf[512];
|
||||
|
||||
LTC_ARGCHK(key != NULL);
|
||||
LTC_ARGCHK(filename != NULL);
|
||||
LTC_ARGCHK(out != NULL);
|
||||
LTC_ARGCHK(outlen != NULL);
|
||||
|
||||
in = fopen(filename, "rb");
|
||||
if (in == NULL) {
|
||||
return CRYPT_FILE_NOTFOUND;
|
||||
}
|
||||
|
||||
if ((err = f9_init(&f9, cipher, key, keylen)) != CRYPT_OK) {
|
||||
fclose(in);
|
||||
return err;
|
||||
}
|
||||
|
||||
do {
|
||||
x = fread(buf, 1, sizeof(buf), in);
|
||||
if ((err = f9_process(&f9, buf, x)) != CRYPT_OK) {
|
||||
fclose(in);
|
||||
return err;
|
||||
}
|
||||
} while (x == sizeof(buf));
|
||||
fclose(in);
|
||||
|
||||
if ((err = f9_done(&f9, out, outlen)) != CRYPT_OK) {
|
||||
return err;
|
||||
}
|
||||
|
||||
#ifdef LTC_CLEAN_STACK
|
||||
zeromem(buf, sizeof(buf));
|
||||
#endif
|
||||
|
||||
return CRYPT_OK;
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/f9/f9_file.c,v $ */
|
||||
/* $Revision: 1.4 $ */
|
||||
/* $Date: 2006/11/21 00:18:23 $ */
|
||||
70
libtomcrypt/src/mac/f9/f9_init.c
Normal file
70
libtomcrypt/src/mac/f9/f9_init.c
Normal file
@@ -0,0 +1,70 @@
|
||||
/* LibTomCrypt, modular cryptographic library -- Tom St Denis
|
||||
*
|
||||
* LibTomCrypt is a library that provides various cryptographic
|
||||
* algorithms in a highly modular and flexible manner.
|
||||
*
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
/**
|
||||
@file f9_init.c
|
||||
F9 Support, start an F9 state
|
||||
*/
|
||||
|
||||
#ifdef LTC_F9_MODE
|
||||
|
||||
/** Initialize F9-MAC state
|
||||
@param f9 [out] f9 state to initialize
|
||||
@param cipher Index of cipher to use
|
||||
@param key [in] Secret key
|
||||
@param keylen Length of secret key in octets
|
||||
Return CRYPT_OK on success
|
||||
*/
|
||||
int f9_init(f9_state *f9, int cipher, const unsigned char *key, unsigned long keylen)
|
||||
{
|
||||
int x, err;
|
||||
|
||||
LTC_ARGCHK(f9 != NULL);
|
||||
LTC_ARGCHK(key != NULL);
|
||||
|
||||
/* schedule the key */
|
||||
if ((err = cipher_is_valid(cipher)) != CRYPT_OK) {
|
||||
return err;
|
||||
}
|
||||
|
||||
#ifdef LTC_FAST
|
||||
if (cipher_descriptor[cipher].block_length % sizeof(LTC_FAST_TYPE)) {
|
||||
return CRYPT_INVALID_ARG;
|
||||
}
|
||||
#endif
|
||||
|
||||
if ((err = cipher_descriptor[cipher].setup(key, keylen, 0, &f9->key)) != CRYPT_OK) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* make the second key */
|
||||
for (x = 0; (unsigned)x < keylen; x++) {
|
||||
f9->akey[x] = key[x] ^ 0xAA;
|
||||
}
|
||||
|
||||
/* setup struct */
|
||||
zeromem(f9->IV, cipher_descriptor[cipher].block_length);
|
||||
zeromem(f9->ACC, cipher_descriptor[cipher].block_length);
|
||||
f9->blocksize = cipher_descriptor[cipher].block_length;
|
||||
f9->cipher = cipher;
|
||||
f9->buflen = 0;
|
||||
f9->keylen = keylen;
|
||||
done:
|
||||
return err;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/f9/f9_init.c,v $ */
|
||||
/* $Revision: 1.4 $ */
|
||||
/* $Date: 2006/11/08 22:54:18 $ */
|
||||
|
||||
71
libtomcrypt/src/mac/f9/f9_memory.c
Normal file
71
libtomcrypt/src/mac/f9/f9_memory.c
Normal file
@@ -0,0 +1,71 @@
|
||||
/* LibTomCrypt, modular cryptographic library -- Tom St Denis
|
||||
*
|
||||
* LibTomCrypt is a library that provides various cryptographic
|
||||
* algorithms in a highly modular and flexible manner.
|
||||
*
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
/**
|
||||
@file f9_process.c
|
||||
f9 Support, Process a block through F9-MAC
|
||||
*/
|
||||
|
||||
#ifdef LTC_F9_MODE
|
||||
|
||||
/** f9-MAC a block of memory
|
||||
@param cipher Index of cipher to use
|
||||
@param key [in] Secret key
|
||||
@param keylen Length of key in octets
|
||||
@param in [in] Message to MAC
|
||||
@param inlen Length of input in octets
|
||||
@param out [out] Destination for the MAC tag
|
||||
@param outlen [in/out] Output size and final tag size
|
||||
Return CRYPT_OK on success.
|
||||
*/
|
||||
int f9_memory(int cipher,
|
||||
const unsigned char *key, unsigned long keylen,
|
||||
const unsigned char *in, unsigned long inlen,
|
||||
unsigned char *out, unsigned long *outlen)
|
||||
{
|
||||
f9_state *f9;
|
||||
int err;
|
||||
|
||||
/* is the cipher valid? */
|
||||
if ((err = cipher_is_valid(cipher)) != CRYPT_OK) {
|
||||
return err;
|
||||
}
|
||||
|
||||
/* Use accelerator if found */
|
||||
if (cipher_descriptor[cipher].f9_memory != NULL) {
|
||||
return cipher_descriptor[cipher].f9_memory(key, keylen, in, inlen, out, outlen);
|
||||
}
|
||||
|
||||
f9 = XCALLOC(1, sizeof(*f9));
|
||||
if (f9 == NULL) {
|
||||
return CRYPT_MEM;
|
||||
}
|
||||
|
||||
if ((err = f9_init(f9, cipher, key, keylen)) != CRYPT_OK) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
if ((err = f9_process(f9, in, inlen)) != CRYPT_OK) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
err = f9_done(f9, out, outlen);
|
||||
done:
|
||||
XFREE(f9);
|
||||
return err;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/f9/f9_memory.c,v $ */
|
||||
/* $Revision: 1.4 $ */
|
||||
/* $Date: 2006/11/21 23:02:42 $ */
|
||||
90
libtomcrypt/src/mac/f9/f9_memory_multi.c
Normal file
90
libtomcrypt/src/mac/f9/f9_memory_multi.c
Normal file
@@ -0,0 +1,90 @@
|
||||
/* LibTomCrypt, modular cryptographic library -- Tom St Denis
|
||||
*
|
||||
* LibTomCrypt is a library that provides various cryptographic
|
||||
* algorithms in a highly modular and flexible manner.
|
||||
*
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
#include <stdarg.h>
|
||||
|
||||
/**
|
||||
@file f9_memory_multi.c
|
||||
f9 support, process multiple blocks of memory, Tom St Denis
|
||||
*/
|
||||
|
||||
#ifdef LTC_F9_MODE
|
||||
|
||||
/**
|
||||
f9 multiple blocks of memory
|
||||
@param cipher The index of the desired cipher
|
||||
@param key The secret key
|
||||
@param keylen The length of the secret key (octets)
|
||||
@param out [out] The destination of the authentication tag
|
||||
@param outlen [in/out] The max size and resulting size of the authentication tag (octets)
|
||||
@param in The data to send through f9
|
||||
@param inlen The length of the data to send through f9 (octets)
|
||||
@param ... tuples of (data,len) pairs to f9, terminated with a (NULL,x) (x=don't care)
|
||||
@return CRYPT_OK if successful
|
||||
*/
|
||||
int f9_memory_multi(int cipher,
|
||||
const unsigned char *key, unsigned long keylen,
|
||||
unsigned char *out, unsigned long *outlen,
|
||||
const unsigned char *in, unsigned long inlen, ...)
|
||||
{
|
||||
int err;
|
||||
f9_state *f9;
|
||||
va_list args;
|
||||
const unsigned char *curptr;
|
||||
unsigned long curlen;
|
||||
|
||||
LTC_ARGCHK(key != NULL);
|
||||
LTC_ARGCHK(in != NULL);
|
||||
LTC_ARGCHK(out != NULL);
|
||||
LTC_ARGCHK(outlen != NULL);
|
||||
|
||||
/* allocate ram for f9 state */
|
||||
f9 = XMALLOC(sizeof(f9_state));
|
||||
if (f9 == NULL) {
|
||||
return CRYPT_MEM;
|
||||
}
|
||||
|
||||
/* f9 process the message */
|
||||
if ((err = f9_init(f9, cipher, key, keylen)) != CRYPT_OK) {
|
||||
goto LBL_ERR;
|
||||
}
|
||||
va_start(args, inlen);
|
||||
curptr = in;
|
||||
curlen = inlen;
|
||||
for (;;) {
|
||||
/* process buf */
|
||||
if ((err = f9_process(f9, curptr, curlen)) != CRYPT_OK) {
|
||||
goto LBL_ERR;
|
||||
}
|
||||
/* step to next */
|
||||
curptr = va_arg(args, const unsigned char*);
|
||||
if (curptr == NULL) {
|
||||
break;
|
||||
}
|
||||
curlen = va_arg(args, unsigned long);
|
||||
}
|
||||
if ((err = f9_done(f9, out, outlen)) != CRYPT_OK) {
|
||||
goto LBL_ERR;
|
||||
}
|
||||
LBL_ERR:
|
||||
#ifdef LTC_CLEAN_STACK
|
||||
zeromem(f9, sizeof(f9_state));
|
||||
#endif
|
||||
XFREE(f9);
|
||||
va_end(args);
|
||||
return err;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/f9/f9_memory_multi.c,v $ */
|
||||
/* $Revision: 1.2 $ */
|
||||
/* $Date: 2006/11/08 21:50:13 $ */
|
||||
78
libtomcrypt/src/mac/f9/f9_process.c
Normal file
78
libtomcrypt/src/mac/f9/f9_process.c
Normal file
@@ -0,0 +1,78 @@
|
||||
/* LibTomCrypt, modular cryptographic library -- Tom St Denis
|
||||
*
|
||||
* LibTomCrypt is a library that provides various cryptographic
|
||||
* algorithms in a highly modular and flexible manner.
|
||||
*
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
/**
|
||||
@file f9_process.c
|
||||
f9 Support, process blocks with f9
|
||||
*/
|
||||
|
||||
#ifdef LTC_F9_MODE
|
||||
|
||||
/** Process data through f9-MAC
|
||||
@param f9 The f9-MAC state
|
||||
@param in Input data to process
|
||||
@param inlen Length of input in octets
|
||||
Return CRYPT_OK on success
|
||||
*/
|
||||
int f9_process(f9_state *f9, const unsigned char *in, unsigned long inlen)
|
||||
{
|
||||
int err, x;
|
||||
|
||||
LTC_ARGCHK(f9 != NULL);
|
||||
LTC_ARGCHK(in != NULL);
|
||||
|
||||
/* check structure */
|
||||
if ((err = cipher_is_valid(f9->cipher)) != CRYPT_OK) {
|
||||
return err;
|
||||
}
|
||||
|
||||
if ((f9->blocksize > cipher_descriptor[f9->cipher].block_length) || (f9->blocksize < 0) ||
|
||||
(f9->buflen > f9->blocksize) || (f9->buflen < 0)) {
|
||||
return CRYPT_INVALID_ARG;
|
||||
}
|
||||
|
||||
#ifdef LTC_FAST
|
||||
if (f9->buflen == 0) {
|
||||
while (inlen >= (unsigned long)f9->blocksize) {
|
||||
for (x = 0; x < f9->blocksize; x += sizeof(LTC_FAST_TYPE)) {
|
||||
*((LTC_FAST_TYPE*)&(f9->IV[x])) ^= *((LTC_FAST_TYPE*)&(in[x]));
|
||||
}
|
||||
cipher_descriptor[f9->cipher].ecb_encrypt(f9->IV, f9->IV, &f9->key);
|
||||
for (x = 0; x < f9->blocksize; x += sizeof(LTC_FAST_TYPE)) {
|
||||
*((LTC_FAST_TYPE*)&(f9->ACC[x])) ^= *((LTC_FAST_TYPE*)&(f9->IV[x]));
|
||||
}
|
||||
in += f9->blocksize;
|
||||
inlen -= f9->blocksize;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
while (inlen) {
|
||||
if (f9->buflen == f9->blocksize) {
|
||||
cipher_descriptor[f9->cipher].ecb_encrypt(f9->IV, f9->IV, &f9->key);
|
||||
for (x = 0; x < f9->blocksize; x++) {
|
||||
f9->ACC[x] ^= f9->IV[x];
|
||||
}
|
||||
f9->buflen = 0;
|
||||
}
|
||||
f9->IV[f9->buflen++] ^= *in++;
|
||||
--inlen;
|
||||
}
|
||||
return CRYPT_OK;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/f9/f9_process.c,v $ */
|
||||
/* $Revision: 1.3 $ */
|
||||
/* $Date: 2006/12/16 17:41:21 $ */
|
||||
|
||||
78
libtomcrypt/src/mac/f9/f9_test.c
Normal file
78
libtomcrypt/src/mac/f9/f9_test.c
Normal file
@@ -0,0 +1,78 @@
|
||||
/* LibTomCrypt, modular cryptographic library -- Tom St Denis
|
||||
*
|
||||
* LibTomCrypt is a library that provides various cryptographic
|
||||
* algorithms in a highly modular and flexible manner.
|
||||
*
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
/**
|
||||
@file f9_test.c
|
||||
f9 Support, Test F9 mode
|
||||
*/
|
||||
|
||||
#ifdef LTC_F9_MODE
|
||||
|
||||
/** Test f9-MAC mode
|
||||
Return CRYPT_OK on succes
|
||||
*/
|
||||
int f9_test(void)
|
||||
{
|
||||
#ifdef LTC_NO_TEST
|
||||
return CRYPT_NOP;
|
||||
#else
|
||||
static const struct {
|
||||
int msglen;
|
||||
unsigned char K[16], M[128], T[4];
|
||||
} tests[] = {
|
||||
{
|
||||
20,
|
||||
{ 0x2B, 0xD6, 0x45, 0x9F, 0x82, 0xC5, 0xB3, 0x00, 0x95, 0x2C, 0x49, 0x10, 0x48, 0x81, 0xFF, 0x48 },
|
||||
{ 0x38, 0xA6, 0xF0, 0x56, 0xB8, 0xAE, 0xFD, 0xA9, 0x33, 0x32, 0x34, 0x62, 0x63, 0x39, 0x38, 0x61, 0x37, 0x34, 0x79, 0x40 },
|
||||
{ 0x46, 0xE0, 0x0D, 0x4B }
|
||||
},
|
||||
|
||||
{
|
||||
105,
|
||||
{ 0x83, 0xFD, 0x23, 0xA2, 0x44, 0xA7, 0x4C, 0xF3, 0x58, 0xDA, 0x30, 0x19, 0xF1, 0x72, 0x26, 0x35 },
|
||||
{ 0x36, 0xAF, 0x61, 0x44, 0x4F, 0x30, 0x2A, 0xD2,
|
||||
0x35, 0xC6, 0x87, 0x16, 0x63, 0x3C, 0x66, 0xFB, 0x75, 0x0C, 0x26, 0x68, 0x65, 0xD5, 0x3C, 0x11, 0xEA, 0x05, 0xB1, 0xE9, 0xFA, 0x49, 0xC8, 0x39, 0x8D, 0x48, 0xE1, 0xEF, 0xA5, 0x90, 0x9D, 0x39,
|
||||
0x47, 0x90, 0x28, 0x37, 0xF5, 0xAE, 0x96, 0xD5, 0xA0, 0x5B, 0xC8, 0xD6, 0x1C, 0xA8, 0xDB, 0xEF, 0x1B, 0x13, 0xA4, 0xB4, 0xAB, 0xFE, 0x4F, 0xB1, 0x00, 0x60, 0x45, 0xB6, 0x74, 0xBB, 0x54, 0x72,
|
||||
0x93, 0x04, 0xC3, 0x82, 0xBE, 0x53, 0xA5, 0xAF, 0x05, 0x55, 0x61, 0x76, 0xF6, 0xEA, 0xA2, 0xEF, 0x1D, 0x05, 0xE4, 0xB0, 0x83, 0x18, 0x1E, 0xE6, 0x74, 0xCD, 0xA5, 0xA4, 0x85, 0xF7, 0x4D, 0x7A,
|
||||
0x40|0x80 },
|
||||
{ 0x95, 0xAE, 0x41, 0xBA },
|
||||
}
|
||||
};
|
||||
unsigned char T[16];
|
||||
unsigned long taglen;
|
||||
int err, x, idx;
|
||||
|
||||
/* find kasumi */
|
||||
if ((idx = find_cipher("kasumi")) == -1) {
|
||||
return CRYPT_NOP;
|
||||
}
|
||||
|
||||
for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); x++) {
|
||||
taglen = 4;
|
||||
if ((err = f9_memory(idx, tests[x].K, 16, tests[x].M, tests[x].msglen, T, &taglen)) != CRYPT_OK) {
|
||||
return err;
|
||||
}
|
||||
if (taglen != 4 || XMEMCMP(T, tests[x].T, 4)) {
|
||||
return CRYPT_FAIL_TESTVECTOR;
|
||||
}
|
||||
}
|
||||
|
||||
return CRYPT_OK;
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/f9/f9_test.c,v $ */
|
||||
/* $Revision: 1.8 $ */
|
||||
/* $Date: 2006/11/21 23:02:42 $ */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
HMAC support, terminate stream, Tom St Denis/Dobes Vandermeer
|
||||
*/
|
||||
|
||||
#ifdef HMAC
|
||||
#ifdef LTC_HMAC
|
||||
|
||||
#define HMAC_BLOCKSIZE hash_descriptor[hash].blocksize
|
||||
|
||||
@@ -105,5 +105,5 @@ LBL_ERR:
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/hmac/hmac_done.c,v $ */
|
||||
/* $Revision: 1.3 $ */
|
||||
/* $Date: 2005/05/05 14:35:58 $ */
|
||||
/* $Revision: 1.5 $ */
|
||||
/* $Date: 2006/11/03 00:39:49 $ */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
HMAC support, process a file, Tom St Denis/Dobes Vandermeer
|
||||
*/
|
||||
|
||||
#ifdef HMAC
|
||||
#ifdef LTC_HMAC
|
||||
|
||||
/**
|
||||
HMAC a file
|
||||
@@ -89,5 +89,5 @@ int hmac_file(int hash, const char *fname,
|
||||
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/hmac/hmac_file.c,v $ */
|
||||
/* $Revision: 1.3 $ */
|
||||
/* $Date: 2005/05/05 14:35:58 $ */
|
||||
/* $Revision: 1.5 $ */
|
||||
/* $Date: 2006/11/03 00:39:49 $ */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
HMAC support, initialize state, Tom St Denis/Dobes Vandermeer
|
||||
*/
|
||||
|
||||
#ifdef HMAC
|
||||
#ifdef LTC_HMAC
|
||||
|
||||
#define HMAC_BLOCKSIZE hash_descriptor[hash].blocksize
|
||||
|
||||
@@ -108,5 +108,5 @@ done:
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/hmac/hmac_init.c,v $ */
|
||||
/* $Revision: 1.3 $ */
|
||||
/* $Date: 2005/05/05 14:35:58 $ */
|
||||
/* $Revision: 1.5 $ */
|
||||
/* $Date: 2006/11/03 00:39:49 $ */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
HMAC support, process a block of memory, Tom St Denis/Dobes Vandermeer
|
||||
*/
|
||||
|
||||
#ifdef HMAC
|
||||
#ifdef LTC_HMAC
|
||||
|
||||
/**
|
||||
HMAC a block of memory to produce the authentication tag
|
||||
@@ -34,13 +34,24 @@ int hmac_memory(int hash,
|
||||
unsigned char *out, unsigned long *outlen)
|
||||
{
|
||||
hmac_state *hmac;
|
||||
int err;
|
||||
int err;
|
||||
|
||||
LTC_ARGCHK(key != NULL);
|
||||
LTC_ARGCHK(in != NULL);
|
||||
LTC_ARGCHK(in != NULL);
|
||||
LTC_ARGCHK(out != NULL);
|
||||
LTC_ARGCHK(outlen != NULL);
|
||||
|
||||
/* make sure hash descriptor is valid */
|
||||
if ((err = hash_is_valid(hash)) != CRYPT_OK) {
|
||||
return err;
|
||||
}
|
||||
|
||||
/* is there a descriptor? */
|
||||
if (hash_descriptor[hash].hmac_block != NULL) {
|
||||
return hash_descriptor[hash].hmac_block(key, keylen, in, inlen, out, outlen);
|
||||
}
|
||||
|
||||
/* nope, so call the hmac functions */
|
||||
/* allocate ram for hmac state */
|
||||
hmac = XMALLOC(sizeof(hmac_state));
|
||||
if (hmac == NULL) {
|
||||
@@ -73,5 +84,5 @@ LBL_ERR:
|
||||
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/hmac/hmac_memory.c,v $ */
|
||||
/* $Revision: 1.3 $ */
|
||||
/* $Date: 2005/05/05 14:35:58 $ */
|
||||
/* $Revision: 1.6 $ */
|
||||
/* $Date: 2006/11/03 00:39:49 $ */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
#include <stdarg.h>
|
||||
@@ -16,7 +16,7 @@
|
||||
HMAC support, process multiple blocks of memory, Tom St Denis/Dobes Vandermeer
|
||||
*/
|
||||
|
||||
#ifdef HMAC
|
||||
#ifdef LTC_HMAC
|
||||
|
||||
/**
|
||||
HMAC multiple blocks of memory to produce the authentication tag
|
||||
@@ -88,5 +88,5 @@ LBL_ERR:
|
||||
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/hmac/hmac_memory_multi.c,v $ */
|
||||
/* $Revision: 1.3 $ */
|
||||
/* $Date: 2005/05/05 14:35:58 $ */
|
||||
/* $Revision: 1.5 $ */
|
||||
/* $Date: 2006/11/03 00:39:49 $ */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
HMAC support, process data, Tom St Denis/Dobes Vandermeer
|
||||
*/
|
||||
|
||||
#ifdef HMAC
|
||||
#ifdef LTC_HMAC
|
||||
|
||||
/**
|
||||
Process data through HMAC
|
||||
@@ -39,5 +39,5 @@ int hmac_process(hmac_state *hmac, const unsigned char *in, unsigned long inlen)
|
||||
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/hmac/hmac_process.c,v $ */
|
||||
/* $Revision: 1.3 $ */
|
||||
/* $Date: 2005/05/05 14:35:58 $ */
|
||||
/* $Revision: 1.5 $ */
|
||||
/* $Date: 2006/11/03 00:39:49 $ */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
HMAC support, self-test, Tom St Denis/Dobes Vandermeer
|
||||
*/
|
||||
|
||||
#ifdef HMAC
|
||||
#ifdef LTC_HMAC
|
||||
|
||||
#define HMAC_BLOCKSIZE hash_descriptor[hash].blocksize
|
||||
|
||||
@@ -55,7 +55,7 @@ int hmac_test(void)
|
||||
3. Test Cases for HMAC-SHA-1
|
||||
|
||||
test_case = 1
|
||||
key = 0x0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
|
||||
key = 0x0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c
|
||||
key_len = 20
|
||||
data = "Hi Ther 20
|
||||
digest = 0x4c1a03424b55e07fe7f27be1d58bb9324a9a5a04
|
||||
@@ -277,7 +277,7 @@ Key First"
|
||||
return err;
|
||||
}
|
||||
|
||||
if(memcmp(digest, cases[i].digest, (size_t)hash_descriptor[hash].hashsize) != 0) {
|
||||
if(XMEMCMP(digest, cases[i].digest, (size_t)hash_descriptor[hash].hashsize) != 0) {
|
||||
failed++;
|
||||
#if 0
|
||||
unsigned int j;
|
||||
@@ -312,5 +312,5 @@ Key First"
|
||||
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/hmac/hmac_test.c,v $ */
|
||||
/* $Revision: 1.3 $ */
|
||||
/* $Date: 2005/05/05 14:35:58 $ */
|
||||
/* $Revision: 1.7 $ */
|
||||
/* $Date: 2006/11/03 00:39:49 $ */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
OMAC1 support, terminate a stream, Tom St Denis
|
||||
*/
|
||||
|
||||
#ifdef OMAC
|
||||
#ifdef LTC_OMAC
|
||||
|
||||
/**
|
||||
Terminate an OMAC stream
|
||||
@@ -61,7 +61,9 @@ int omac_done(omac_state *omac, unsigned char *out, unsigned long *outlen)
|
||||
}
|
||||
|
||||
/* encrypt it */
|
||||
cipher_descriptor[omac->cipher_idx].ecb_encrypt(omac->block, omac->block, &omac->key);
|
||||
if ((err = cipher_descriptor[omac->cipher_idx].ecb_encrypt(omac->block, omac->block, &omac->key)) != CRYPT_OK) {
|
||||
return err;
|
||||
}
|
||||
cipher_descriptor[omac->cipher_idx].done(&omac->key);
|
||||
|
||||
/* output it */
|
||||
@@ -80,5 +82,5 @@ int omac_done(omac_state *omac, unsigned char *out, unsigned long *outlen)
|
||||
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/omac/omac_done.c,v $ */
|
||||
/* $Revision: 1.4 $ */
|
||||
/* $Date: 2005/05/05 14:35:58 $ */
|
||||
/* $Revision: 1.7 $ */
|
||||
/* $Date: 2006/11/03 00:39:49 $ */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
OMAC1 support, process a file, Tom St Denis
|
||||
*/
|
||||
|
||||
#ifdef OMAC
|
||||
#ifdef LTC_OMAC
|
||||
|
||||
/**
|
||||
OMAC a file
|
||||
@@ -79,5 +79,5 @@ int omac_file(int cipher,
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/omac/omac_file.c,v $ */
|
||||
/* $Revision: 1.3 $ */
|
||||
/* $Date: 2005/05/05 14:35:58 $ */
|
||||
/* $Revision: 1.5 $ */
|
||||
/* $Date: 2006/11/03 00:39:49 $ */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
|
||||
#ifdef OMAC
|
||||
#ifdef LTC_OMAC
|
||||
|
||||
/**
|
||||
Initialize an OMAC state
|
||||
@@ -63,7 +63,9 @@ int omac_init(omac_state *omac, int cipher, const unsigned char *key, unsigned l
|
||||
|
||||
/* first calc L which is Ek(0) */
|
||||
zeromem(omac->Lu[0], cipher_descriptor[cipher].block_length);
|
||||
cipher_descriptor[cipher].ecb_encrypt(omac->Lu[0], omac->Lu[0], &omac->key);
|
||||
if ((err = cipher_descriptor[cipher].ecb_encrypt(omac->Lu[0], omac->Lu[0], &omac->key)) != CRYPT_OK) {
|
||||
return err;
|
||||
}
|
||||
|
||||
/* now do the mults, whoopy! */
|
||||
for (x = 0; x < 2; x++) {
|
||||
@@ -95,5 +97,5 @@ int omac_init(omac_state *omac, int cipher, const unsigned char *key, unsigned l
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/omac/omac_init.c,v $ */
|
||||
/* $Revision: 1.5 $ */
|
||||
/* $Date: 2005/06/06 10:22:44 $ */
|
||||
/* $Revision: 1.10 $ */
|
||||
/* $Date: 2006/11/03 00:39:49 $ */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
OMAC1 support, process a block of memory, Tom St Denis
|
||||
*/
|
||||
|
||||
#ifdef OMAC
|
||||
#ifdef LTC_OMAC
|
||||
|
||||
/**
|
||||
OMAC a block of memory
|
||||
@@ -41,6 +41,16 @@ int omac_memory(int cipher,
|
||||
LTC_ARGCHK(out != NULL);
|
||||
LTC_ARGCHK(outlen != NULL);
|
||||
|
||||
/* is the cipher valid? */
|
||||
if ((err = cipher_is_valid(cipher)) != CRYPT_OK) {
|
||||
return err;
|
||||
}
|
||||
|
||||
/* Use accelerator if found */
|
||||
if (cipher_descriptor[cipher].omac_memory != NULL) {
|
||||
return cipher_descriptor[cipher].omac_memory(key, keylen, in, inlen, out, outlen);
|
||||
}
|
||||
|
||||
/* allocate ram for omac state */
|
||||
omac = XMALLOC(sizeof(omac_state));
|
||||
if (omac == NULL) {
|
||||
@@ -71,5 +81,5 @@ LBL_ERR:
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/omac/omac_memory.c,v $ */
|
||||
/* $Revision: 1.3 $ */
|
||||
/* $Date: 2005/05/05 14:35:58 $ */
|
||||
/* $Revision: 1.6 $ */
|
||||
/* $Date: 2006/11/08 23:01:06 $ */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
#include <stdarg.h>
|
||||
@@ -16,7 +16,7 @@
|
||||
OMAC1 support, process multiple blocks of memory, Tom St Denis
|
||||
*/
|
||||
|
||||
#ifdef OMAC
|
||||
#ifdef LTC_OMAC
|
||||
|
||||
/**
|
||||
OMAC multiple blocks of memory
|
||||
@@ -86,5 +86,5 @@ LBL_ERR:
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/omac/omac_memory_multi.c,v $ */
|
||||
/* $Revision: 1.3 $ */
|
||||
/* $Date: 2005/05/05 14:35:58 $ */
|
||||
/* $Revision: 1.5 $ */
|
||||
/* $Date: 2006/11/03 00:39:49 $ */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
|
||||
#ifdef OMAC
|
||||
#ifdef LTC_OMAC
|
||||
|
||||
/**
|
||||
Process data through OMAC
|
||||
@@ -49,7 +49,9 @@ int omac_process(omac_state *omac, const unsigned char *in, unsigned long inlen)
|
||||
*((LTC_FAST_TYPE*)(&omac->prev[y])) ^= *((LTC_FAST_TYPE*)(&in[y]));
|
||||
}
|
||||
in += 16;
|
||||
cipher_descriptor[omac->cipher_idx].ecb_encrypt(omac->prev, omac->prev, &omac->key);
|
||||
if ((err = cipher_descriptor[omac->cipher_idx].ecb_encrypt(omac->prev, omac->prev, &omac->key)) != CRYPT_OK) {
|
||||
return err;
|
||||
}
|
||||
}
|
||||
inlen -= x;
|
||||
}
|
||||
@@ -61,7 +63,9 @@ int omac_process(omac_state *omac, const unsigned char *in, unsigned long inlen)
|
||||
for (x = 0; x < (unsigned long)omac->blklen; x++) {
|
||||
omac->block[x] ^= omac->prev[x];
|
||||
}
|
||||
cipher_descriptor[omac->cipher_idx].ecb_encrypt(omac->block, omac->prev, &omac->key);
|
||||
if ((err = cipher_descriptor[omac->cipher_idx].ecb_encrypt(omac->block, omac->prev, &omac->key)) != CRYPT_OK) {
|
||||
return err;
|
||||
}
|
||||
omac->buflen = 0;
|
||||
}
|
||||
|
||||
@@ -80,5 +84,5 @@ int omac_process(omac_state *omac, const unsigned char *in, unsigned long inlen)
|
||||
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/omac/omac_process.c,v $ */
|
||||
/* $Revision: 1.6 $ */
|
||||
/* $Date: 2005/05/05 14:35:58 $ */
|
||||
/* $Revision: 1.9 $ */
|
||||
/* $Date: 2006/11/03 00:39:49 $ */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
OMAC1 support, self-test, by Tom St Denis
|
||||
*/
|
||||
|
||||
#ifdef OMAC
|
||||
#ifdef LTC_OMAC
|
||||
|
||||
/**
|
||||
Test the OMAC setup
|
||||
@@ -90,7 +90,7 @@ int omac_test(void)
|
||||
return err;
|
||||
}
|
||||
|
||||
if (memcmp(out, tests[x].tag, 16) != 0) {
|
||||
if (XMEMCMP(out, tests[x].tag, 16) != 0) {
|
||||
#if 0
|
||||
int y;
|
||||
printf("\n\nTag: ");
|
||||
@@ -106,5 +106,5 @@ int omac_test(void)
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/omac/omac_test.c,v $ */
|
||||
/* $Revision: 1.3 $ */
|
||||
/* $Date: 2005/05/05 14:35:59 $ */
|
||||
/* $Revision: 1.6 $ */
|
||||
/* $Date: 2006/11/03 00:39:49 $ */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
@@ -18,9 +18,9 @@
|
||||
#ifdef PELICAN
|
||||
|
||||
#define ENCRYPT_ONLY
|
||||
#define PELI_TAB
|
||||
#include "../../ciphers/aes/aes_tab.c"
|
||||
|
||||
|
||||
/**
|
||||
Initialize a Pelican state
|
||||
@param pelmac The Pelican state to initialize
|
||||
@@ -161,5 +161,5 @@ int pelican_done(pelican_state *pelmac, unsigned char *out)
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/pelican/pelican.c,v $ */
|
||||
/* $Revision: 1.16 $ */
|
||||
/* $Date: 2005/05/05 14:35:59 $ */
|
||||
/* $Revision: 1.18 $ */
|
||||
/* $Date: 2006/04/02 13:19:10 $ */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
@@ -55,5 +55,5 @@ int pelican_memory(const unsigned char *key, unsigned long keylen,
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/pelican/pelican_memory.c,v $ */
|
||||
/* $Revision: 1.5 $ */
|
||||
/* $Date: 2005/05/05 14:35:59 $ */
|
||||
/* $Revision: 1.6 $ */
|
||||
/* $Date: 2006/03/31 14:15:35 $ */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
@@ -24,7 +24,7 @@ int pelican_test(void)
|
||||
#else
|
||||
static const struct {
|
||||
unsigned char K[32], MSG[64], T[16];
|
||||
int keylen, ptlen;
|
||||
int keylen, ptlen;
|
||||
} tests[] = {
|
||||
/* K=16, M=0 */
|
||||
{
|
||||
@@ -99,7 +99,7 @@ int pelican_test(void)
|
||||
return err;
|
||||
}
|
||||
|
||||
if (memcmp(out, tests[x].T, 16)) {
|
||||
if (XMEMCMP(out, tests[x].T, 16)) {
|
||||
#if 0
|
||||
int y;
|
||||
printf("\nFailed test %d\n", x);
|
||||
@@ -116,5 +116,5 @@ int pelican_test(void)
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/pelican/pelican_test.c,v $ */
|
||||
/* $Revision: 1.9 $ */
|
||||
/* $Date: 2005/05/05 14:35:59 $ */
|
||||
/* $Revision: 1.12 $ */
|
||||
/* $Date: 2006/11/21 00:18:23 $ */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
PMAC implementation, terminate a session, by Tom St Denis
|
||||
*/
|
||||
|
||||
#ifdef PMAC
|
||||
#ifdef LTC_PMAC
|
||||
|
||||
int pmac_done(pmac_state *state, unsigned char *out, unsigned long *outlen)
|
||||
{
|
||||
@@ -49,11 +49,13 @@ int pmac_done(pmac_state *state, unsigned char *out, unsigned long *outlen)
|
||||
}
|
||||
|
||||
/* encrypt it */
|
||||
cipher_descriptor[state->cipher_idx].ecb_encrypt(state->checksum, state->checksum, &state->key);
|
||||
if ((err = cipher_descriptor[state->cipher_idx].ecb_encrypt(state->checksum, state->checksum, &state->key)) != CRYPT_OK) {
|
||||
return err;
|
||||
}
|
||||
cipher_descriptor[state->cipher_idx].done(&state->key);
|
||||
|
||||
/* store it */
|
||||
for (x = 0; x < state->block_len && x <= (int)*outlen; x++) {
|
||||
for (x = 0; x < state->block_len && x < (int)*outlen; x++) {
|
||||
out[x] = state->checksum[x];
|
||||
}
|
||||
*outlen = x;
|
||||
@@ -68,5 +70,5 @@ int pmac_done(pmac_state *state, unsigned char *out, unsigned long *outlen)
|
||||
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/pmac/pmac_done.c,v $ */
|
||||
/* $Revision: 1.4 $ */
|
||||
/* $Date: 2005/05/05 14:35:59 $ */
|
||||
/* $Revision: 1.8 $ */
|
||||
/* $Date: 2006/11/03 00:39:49 $ */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
PMAC implementation, process a file, by Tom St Denis
|
||||
*/
|
||||
|
||||
#ifdef PMAC
|
||||
#ifdef LTC_PMAC
|
||||
|
||||
/**
|
||||
PMAC a file
|
||||
@@ -80,5 +80,5 @@ int pmac_file(int cipher,
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/pmac/pmac_file.c,v $ */
|
||||
/* $Revision: 1.3 $ */
|
||||
/* $Date: 2005/05/05 14:35:59 $ */
|
||||
/* $Revision: 1.5 $ */
|
||||
/* $Date: 2006/11/03 00:39:49 $ */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
PMAC implementation, initialize state, by Tom St Denis
|
||||
*/
|
||||
|
||||
#ifdef PMAC
|
||||
#ifdef LTC_PMAC
|
||||
|
||||
static const struct {
|
||||
int len;
|
||||
@@ -87,7 +87,9 @@ int pmac_init(pmac_state *pmac, int cipher, const unsigned char *key, unsigned l
|
||||
|
||||
/* find L = E[0] */
|
||||
zeromem(L, pmac->block_len);
|
||||
cipher_descriptor[cipher].ecb_encrypt(L, L, &pmac->key);
|
||||
if ((err = cipher_descriptor[cipher].ecb_encrypt(L, L, &pmac->key)) != CRYPT_OK) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* find Ls[i] = L << i for i == 0..31 */
|
||||
XMEMCPY(pmac->Ls[0], L, pmac->block_len);
|
||||
@@ -127,18 +129,19 @@ int pmac_init(pmac_state *pmac, int cipher, const unsigned char *key, unsigned l
|
||||
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);
|
||||
#endif
|
||||
|
||||
XFREE(L);
|
||||
|
||||
return CRYPT_OK;
|
||||
return err;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/pmac/pmac_init.c,v $ */
|
||||
/* $Revision: 1.4 $ */
|
||||
/* $Date: 2005/05/05 14:35:59 $ */
|
||||
/* $Revision: 1.7 $ */
|
||||
/* $Date: 2006/11/03 00:39:49 $ */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
PMAC implementation, process a block of memory, by Tom St Denis
|
||||
*/
|
||||
|
||||
#ifdef PMAC
|
||||
#ifdef LTC_PMAC
|
||||
|
||||
/**
|
||||
PMAC a block of memory
|
||||
@@ -70,5 +70,5 @@ LBL_ERR:
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/pmac/pmac_memory.c,v $ */
|
||||
/* $Revision: 1.3 $ */
|
||||
/* $Date: 2005/05/05 14:35:59 $ */
|
||||
/* $Revision: 1.5 $ */
|
||||
/* $Date: 2006/11/03 00:39:49 $ */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
#include <stdarg.h>
|
||||
@@ -16,7 +16,7 @@
|
||||
PMAC implementation, process multiple blocks of memory, by Tom St Denis
|
||||
*/
|
||||
|
||||
#ifdef PMAC
|
||||
#ifdef LTC_PMAC
|
||||
|
||||
/**
|
||||
PMAC multiple blocks of memory
|
||||
@@ -85,5 +85,5 @@ LBL_ERR:
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/pmac/pmac_memory_multi.c,v $ */
|
||||
/* $Revision: 1.4 $ */
|
||||
/* $Date: 2005/05/05 14:35:59 $ */
|
||||
/* $Revision: 1.6 $ */
|
||||
/* $Date: 2006/11/03 00:39:49 $ */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
PMAC implementation, internal function, by Tom St Denis
|
||||
*/
|
||||
|
||||
#ifdef PMAC
|
||||
#ifdef LTC_PMAC
|
||||
|
||||
/**
|
||||
Internal PMAC function
|
||||
@@ -35,5 +35,5 @@ int pmac_ntz(unsigned long x)
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/pmac/pmac_ntz.c,v $ */
|
||||
/* $Revision: 1.3 $ */
|
||||
/* $Date: 2005/05/05 14:35:59 $ */
|
||||
/* $Revision: 1.5 $ */
|
||||
/* $Date: 2006/11/03 00:39:49 $ */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
|
||||
#ifdef PMAC
|
||||
#ifdef LTC_PMAC
|
||||
|
||||
/**
|
||||
Process data in a PMAC stream
|
||||
@@ -50,7 +50,9 @@ int pmac_process(pmac_state *pmac, const unsigned char *in, unsigned long inlen)
|
||||
for (y = 0; y < 16; y += sizeof(LTC_FAST_TYPE)) {
|
||||
*((LTC_FAST_TYPE*)(&Z[y])) = *((LTC_FAST_TYPE*)(&in[y])) ^ *((LTC_FAST_TYPE*)(&pmac->Li[y]));
|
||||
}
|
||||
cipher_descriptor[pmac->cipher_idx].ecb_encrypt(Z, Z, &pmac->key);
|
||||
if ((err = cipher_descriptor[pmac->cipher_idx].ecb_encrypt(Z, Z, &pmac->key)) != CRYPT_OK) {
|
||||
return err;
|
||||
}
|
||||
for (y = 0; y < 16; y += sizeof(LTC_FAST_TYPE)) {
|
||||
*((LTC_FAST_TYPE*)(&pmac->checksum[y])) ^= *((LTC_FAST_TYPE*)(&Z[y]));
|
||||
}
|
||||
@@ -67,7 +69,9 @@ int pmac_process(pmac_state *pmac, const unsigned char *in, unsigned long inlen)
|
||||
for (x = 0; x < (unsigned long)pmac->block_len; x++) {
|
||||
Z[x] = pmac->Li[x] ^ pmac->block[x];
|
||||
}
|
||||
cipher_descriptor[pmac->cipher_idx].ecb_encrypt(Z, Z, &pmac->key);
|
||||
if ((err = cipher_descriptor[pmac->cipher_idx].ecb_encrypt(Z, Z, &pmac->key)) != CRYPT_OK) {
|
||||
return err;
|
||||
}
|
||||
for (x = 0; x < (unsigned long)pmac->block_len; x++) {
|
||||
pmac->checksum[x] ^= Z[x];
|
||||
}
|
||||
@@ -92,5 +96,5 @@ int pmac_process(pmac_state *pmac, const unsigned char *in, unsigned long inlen)
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/pmac/pmac_process.c,v $ */
|
||||
/* $Revision: 1.5 $ */
|
||||
/* $Date: 2005/05/05 14:35:59 $ */
|
||||
/* $Revision: 1.8 $ */
|
||||
/* $Date: 2006/11/03 00:39:49 $ */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
PMAC implementation, internal function, by Tom St Denis
|
||||
*/
|
||||
|
||||
#ifdef PMAC
|
||||
#ifdef LTC_PMAC
|
||||
|
||||
/**
|
||||
Internal function. Performs the state update (adding correct multiple)
|
||||
@@ -40,5 +40,5 @@ void pmac_shift_xor(pmac_state *pmac)
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/pmac/pmac_shift_xor.c,v $ */
|
||||
/* $Revision: 1.4 $ */
|
||||
/* $Date: 2005/05/05 14:35:59 $ */
|
||||
/* $Revision: 1.6 $ */
|
||||
/* $Date: 2006/11/03 00:39:49 $ */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
|
||||
#ifdef PMAC
|
||||
#ifdef LTC_PMAC
|
||||
|
||||
/**
|
||||
Test the OMAC implementation
|
||||
@@ -138,7 +138,7 @@ int pmac_test(void)
|
||||
return err;
|
||||
}
|
||||
|
||||
if (memcmp(outtag, tests[x].tag, len)) {
|
||||
if (XMEMCMP(outtag, tests[x].tag, len)) {
|
||||
#if 0
|
||||
unsigned long y;
|
||||
printf("\nTAG:\n");
|
||||
@@ -161,5 +161,5 @@ int pmac_test(void)
|
||||
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/pmac/pmac_test.c,v $ */
|
||||
/* $Revision: 1.3 $ */
|
||||
/* $Date: 2005/05/05 14:35:59 $ */
|
||||
/* $Revision: 1.6 $ */
|
||||
/* $Date: 2006/11/03 00:39:49 $ */
|
||||
|
||||
77
libtomcrypt/src/mac/xcbc/xcbc_done.c
Normal file
77
libtomcrypt/src/mac/xcbc/xcbc_done.c
Normal file
@@ -0,0 +1,77 @@
|
||||
/* LibTomCrypt, modular cryptographic library -- Tom St Denis
|
||||
*
|
||||
* LibTomCrypt is a library that provides various cryptographic
|
||||
* algorithms in a highly modular and flexible manner.
|
||||
*
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
/**
|
||||
@file xcbc_done.c
|
||||
XCBC Support, terminate the state
|
||||
*/
|
||||
|
||||
#ifdef LTC_XCBC
|
||||
|
||||
/** Terminate the XCBC-MAC state
|
||||
@param xcbc XCBC state to terminate
|
||||
@param out [out] Destination for the MAC tag
|
||||
@param outlen [in/out] Destination size and final tag size
|
||||
Return CRYPT_OK on success
|
||||
*/
|
||||
int xcbc_done(xcbc_state *xcbc, unsigned char *out, unsigned long *outlen)
|
||||
{
|
||||
int err, x;
|
||||
LTC_ARGCHK(xcbc != NULL);
|
||||
LTC_ARGCHK(out != NULL);
|
||||
|
||||
/* check structure */
|
||||
if ((err = cipher_is_valid(xcbc->cipher)) != CRYPT_OK) {
|
||||
return err;
|
||||
}
|
||||
|
||||
if ((xcbc->blocksize > cipher_descriptor[xcbc->cipher].block_length) || (xcbc->blocksize < 0) ||
|
||||
(xcbc->buflen > xcbc->blocksize) || (xcbc->buflen < 0)) {
|
||||
return CRYPT_INVALID_ARG;
|
||||
}
|
||||
|
||||
/* which key do we use? */
|
||||
if (xcbc->buflen == xcbc->blocksize) {
|
||||
/* k2 */
|
||||
for (x = 0; x < xcbc->blocksize; x++) {
|
||||
xcbc->IV[x] ^= xcbc->K[1][x];
|
||||
}
|
||||
} else {
|
||||
xcbc->IV[xcbc->buflen] ^= 0x80;
|
||||
/* k3 */
|
||||
for (x = 0; x < xcbc->blocksize; x++) {
|
||||
xcbc->IV[x] ^= xcbc->K[2][x];
|
||||
}
|
||||
}
|
||||
|
||||
/* encrypt */
|
||||
cipher_descriptor[xcbc->cipher].ecb_encrypt(xcbc->IV, xcbc->IV, &xcbc->key);
|
||||
cipher_descriptor[xcbc->cipher].done(&xcbc->key);
|
||||
|
||||
/* extract tag */
|
||||
for (x = 0; x < xcbc->blocksize && (unsigned long)x < *outlen; x++) {
|
||||
out[x] = xcbc->IV[x];
|
||||
}
|
||||
*outlen = x;
|
||||
|
||||
#ifdef LTC_CLEAN_STACK
|
||||
zeromem(xcbc, sizeof(*xcbc));
|
||||
#endif
|
||||
return CRYPT_OK;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/xcbc/xcbc_done.c,v $ */
|
||||
/* $Revision: 1.4 $ */
|
||||
/* $Date: 2006/11/07 03:23:46 $ */
|
||||
|
||||
83
libtomcrypt/src/mac/xcbc/xcbc_file.c
Normal file
83
libtomcrypt/src/mac/xcbc/xcbc_file.c
Normal file
@@ -0,0 +1,83 @@
|
||||
/* LibTomCrypt, modular cryptographic library -- Tom St Denis
|
||||
*
|
||||
* LibTomCrypt is a library that provides various cryptographic
|
||||
* algorithms in a highly modular and flexible manner.
|
||||
*
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
/**
|
||||
@file xcbc_file.c
|
||||
XCBC support, process a file, Tom St Denis
|
||||
*/
|
||||
|
||||
#ifdef LTC_XCBC
|
||||
|
||||
/**
|
||||
XCBC a file
|
||||
@param cipher The index of the cipher desired
|
||||
@param key The secret key
|
||||
@param keylen The length of the secret key (octets)
|
||||
@param filename The name of the file you wish to XCBC
|
||||
@param out [out] Where the authentication tag is to be stored
|
||||
@param outlen [in/out] The max size and resulting size of the authentication tag
|
||||
@return CRYPT_OK if successful, CRYPT_NOP if file support has been disabled
|
||||
*/
|
||||
int xcbc_file(int cipher,
|
||||
const unsigned char *key, unsigned long keylen,
|
||||
const char *filename,
|
||||
unsigned char *out, unsigned long *outlen)
|
||||
{
|
||||
#ifdef LTC_NO_FILE
|
||||
return CRYPT_NOP;
|
||||
#else
|
||||
int err, x;
|
||||
xcbc_state xcbc;
|
||||
FILE *in;
|
||||
unsigned char buf[512];
|
||||
|
||||
LTC_ARGCHK(key != NULL);
|
||||
LTC_ARGCHK(filename != NULL);
|
||||
LTC_ARGCHK(out != NULL);
|
||||
LTC_ARGCHK(outlen != NULL);
|
||||
|
||||
in = fopen(filename, "rb");
|
||||
if (in == NULL) {
|
||||
return CRYPT_FILE_NOTFOUND;
|
||||
}
|
||||
|
||||
if ((err = xcbc_init(&xcbc, cipher, key, keylen)) != CRYPT_OK) {
|
||||
fclose(in);
|
||||
return err;
|
||||
}
|
||||
|
||||
do {
|
||||
x = fread(buf, 1, sizeof(buf), in);
|
||||
if ((err = xcbc_process(&xcbc, buf, x)) != CRYPT_OK) {
|
||||
fclose(in);
|
||||
return err;
|
||||
}
|
||||
} while (x == sizeof(buf));
|
||||
fclose(in);
|
||||
|
||||
if ((err = xcbc_done(&xcbc, out, outlen)) != CRYPT_OK) {
|
||||
return err;
|
||||
}
|
||||
|
||||
#ifdef LTC_CLEAN_STACK
|
||||
zeromem(buf, sizeof(buf));
|
||||
#endif
|
||||
|
||||
return CRYPT_OK;
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/xcbc/xcbc_file.c,v $ */
|
||||
/* $Revision: 1.1 $ */
|
||||
/* $Date: 2006/11/03 01:56:41 $ */
|
||||
86
libtomcrypt/src/mac/xcbc/xcbc_init.c
Normal file
86
libtomcrypt/src/mac/xcbc/xcbc_init.c
Normal file
@@ -0,0 +1,86 @@
|
||||
/* LibTomCrypt, modular cryptographic library -- Tom St Denis
|
||||
*
|
||||
* LibTomCrypt is a library that provides various cryptographic
|
||||
* algorithms in a highly modular and flexible manner.
|
||||
*
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
/**
|
||||
@file xcbc_init.c
|
||||
XCBC Support, start an XCBC state
|
||||
*/
|
||||
|
||||
#ifdef LTC_XCBC
|
||||
|
||||
/** Initialize XCBC-MAC state
|
||||
@param xcbc [out] XCBC state to initialize
|
||||
@param cipher Index of cipher to use
|
||||
@param key [in] Secret key
|
||||
@param keylen Length of secret key in octets
|
||||
Return CRYPT_OK on success
|
||||
*/
|
||||
int xcbc_init(xcbc_state *xcbc, int cipher, const unsigned char *key, unsigned long keylen)
|
||||
{
|
||||
int x, y, err;
|
||||
symmetric_key *skey;
|
||||
|
||||
LTC_ARGCHK(xcbc != NULL);
|
||||
LTC_ARGCHK(key != NULL);
|
||||
|
||||
/* schedule the key */
|
||||
if ((err = cipher_is_valid(cipher)) != CRYPT_OK) {
|
||||
return err;
|
||||
}
|
||||
|
||||
#ifdef LTC_FAST
|
||||
if (cipher_descriptor[cipher].block_length % sizeof(LTC_FAST_TYPE)) {
|
||||
return CRYPT_INVALID_ARG;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* schedule the user key */
|
||||
skey = XCALLOC(1, sizeof(*skey));
|
||||
if (skey == NULL) {
|
||||
return CRYPT_MEM;
|
||||
}
|
||||
|
||||
if ((err = cipher_descriptor[cipher].setup(key, keylen, 0, skey)) != CRYPT_OK) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* make the three keys */
|
||||
for (y = 0; y < 3; y++) {
|
||||
for (x = 0; x < cipher_descriptor[cipher].block_length; x++) {
|
||||
xcbc->K[y][x] = y + 1;
|
||||
}
|
||||
cipher_descriptor[cipher].ecb_encrypt(xcbc->K[y], xcbc->K[y], skey);
|
||||
}
|
||||
|
||||
/* setup K1 */
|
||||
err = cipher_descriptor[cipher].setup(xcbc->K[0], cipher_descriptor[cipher].block_length, 0, &xcbc->key);
|
||||
|
||||
/* setup struct */
|
||||
zeromem(xcbc->IV, cipher_descriptor[cipher].block_length);
|
||||
xcbc->blocksize = cipher_descriptor[cipher].block_length;
|
||||
xcbc->cipher = cipher;
|
||||
xcbc->buflen = 0;
|
||||
done:
|
||||
cipher_descriptor[cipher].done(skey);
|
||||
#ifdef LTC_CLEAN_STACK
|
||||
zeromem(skey, sizeof(*skey));
|
||||
#endif
|
||||
XFREE(skey);
|
||||
return err;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/xcbc/xcbc_init.c,v $ */
|
||||
/* $Revision: 1.4 $ */
|
||||
/* $Date: 2006/11/07 03:23:46 $ */
|
||||
|
||||
71
libtomcrypt/src/mac/xcbc/xcbc_memory.c
Normal file
71
libtomcrypt/src/mac/xcbc/xcbc_memory.c
Normal file
@@ -0,0 +1,71 @@
|
||||
/* LibTomCrypt, modular cryptographic library -- Tom St Denis
|
||||
*
|
||||
* LibTomCrypt is a library that provides various cryptographic
|
||||
* algorithms in a highly modular and flexible manner.
|
||||
*
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
/**
|
||||
@file xcbc_process.c
|
||||
XCBC Support, XCBC-MAC a block of memory
|
||||
*/
|
||||
|
||||
#ifdef LTC_XCBC
|
||||
|
||||
/** XCBC-MAC a block of memory
|
||||
@param cipher Index of cipher to use
|
||||
@param key [in] Secret key
|
||||
@param keylen Length of key in octets
|
||||
@param in [in] Message to MAC
|
||||
@param inlen Length of input in octets
|
||||
@param out [out] Destination for the MAC tag
|
||||
@param outlen [in/out] Output size and final tag size
|
||||
Return CRYPT_OK on success.
|
||||
*/
|
||||
int xcbc_memory(int cipher,
|
||||
const unsigned char *key, unsigned long keylen,
|
||||
const unsigned char *in, unsigned long inlen,
|
||||
unsigned char *out, unsigned long *outlen)
|
||||
{
|
||||
xcbc_state *xcbc;
|
||||
int err;
|
||||
|
||||
/* is the cipher valid? */
|
||||
if ((err = cipher_is_valid(cipher)) != CRYPT_OK) {
|
||||
return err;
|
||||
}
|
||||
|
||||
/* Use accelerator if found */
|
||||
if (cipher_descriptor[cipher].xcbc_memory != NULL) {
|
||||
return cipher_descriptor[cipher].xcbc_memory(key, keylen, in, inlen, out, outlen);
|
||||
}
|
||||
|
||||
xcbc = XCALLOC(1, sizeof(*xcbc));
|
||||
if (xcbc == NULL) {
|
||||
return CRYPT_MEM;
|
||||
}
|
||||
|
||||
if ((err = xcbc_init(xcbc, cipher, key, keylen)) != CRYPT_OK) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
if ((err = xcbc_process(xcbc, in, inlen)) != CRYPT_OK) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
err = xcbc_done(xcbc, out, outlen);
|
||||
done:
|
||||
XFREE(xcbc);
|
||||
return err;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/xcbc/xcbc_memory.c,v $ */
|
||||
/* $Revision: 1.4 $ */
|
||||
/* $Date: 2006/11/21 23:02:42 $ */
|
||||
90
libtomcrypt/src/mac/xcbc/xcbc_memory_multi.c
Normal file
90
libtomcrypt/src/mac/xcbc/xcbc_memory_multi.c
Normal file
@@ -0,0 +1,90 @@
|
||||
/* LibTomCrypt, modular cryptographic library -- Tom St Denis
|
||||
*
|
||||
* LibTomCrypt is a library that provides various cryptographic
|
||||
* algorithms in a highly modular and flexible manner.
|
||||
*
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
#include <stdarg.h>
|
||||
|
||||
/**
|
||||
@file xcbc_memory_multi.c
|
||||
XCBC support, process multiple blocks of memory, Tom St Denis
|
||||
*/
|
||||
|
||||
#ifdef LTC_XCBC
|
||||
|
||||
/**
|
||||
XCBC multiple blocks of memory
|
||||
@param cipher The index of the desired cipher
|
||||
@param key The secret key
|
||||
@param keylen The length of the secret key (octets)
|
||||
@param out [out] The destination of the authentication tag
|
||||
@param outlen [in/out] The max size and resulting size of the authentication tag (octets)
|
||||
@param in The data to send through XCBC
|
||||
@param inlen The length of the data to send through XCBC (octets)
|
||||
@param ... tuples of (data,len) pairs to XCBC, terminated with a (NULL,x) (x=don't care)
|
||||
@return CRYPT_OK if successful
|
||||
*/
|
||||
int xcbc_memory_multi(int cipher,
|
||||
const unsigned char *key, unsigned long keylen,
|
||||
unsigned char *out, unsigned long *outlen,
|
||||
const unsigned char *in, unsigned long inlen, ...)
|
||||
{
|
||||
int err;
|
||||
xcbc_state *xcbc;
|
||||
va_list args;
|
||||
const unsigned char *curptr;
|
||||
unsigned long curlen;
|
||||
|
||||
LTC_ARGCHK(key != NULL);
|
||||
LTC_ARGCHK(in != NULL);
|
||||
LTC_ARGCHK(out != NULL);
|
||||
LTC_ARGCHK(outlen != NULL);
|
||||
|
||||
/* allocate ram for xcbc state */
|
||||
xcbc = XMALLOC(sizeof(xcbc_state));
|
||||
if (xcbc == NULL) {
|
||||
return CRYPT_MEM;
|
||||
}
|
||||
|
||||
/* xcbc process the message */
|
||||
if ((err = xcbc_init(xcbc, cipher, key, keylen)) != CRYPT_OK) {
|
||||
goto LBL_ERR;
|
||||
}
|
||||
va_start(args, inlen);
|
||||
curptr = in;
|
||||
curlen = inlen;
|
||||
for (;;) {
|
||||
/* process buf */
|
||||
if ((err = xcbc_process(xcbc, curptr, curlen)) != CRYPT_OK) {
|
||||
goto LBL_ERR;
|
||||
}
|
||||
/* step to next */
|
||||
curptr = va_arg(args, const unsigned char*);
|
||||
if (curptr == NULL) {
|
||||
break;
|
||||
}
|
||||
curlen = va_arg(args, unsigned long);
|
||||
}
|
||||
if ((err = xcbc_done(xcbc, out, outlen)) != CRYPT_OK) {
|
||||
goto LBL_ERR;
|
||||
}
|
||||
LBL_ERR:
|
||||
#ifdef LTC_CLEAN_STACK
|
||||
zeromem(xcbc, sizeof(xcbc_state));
|
||||
#endif
|
||||
XFREE(xcbc);
|
||||
va_end(args);
|
||||
return err;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/xcbc/xcbc_memory_multi.c,v $ */
|
||||
/* $Revision: 1.1 $ */
|
||||
/* $Date: 2006/11/03 01:53:25 $ */
|
||||
75
libtomcrypt/src/mac/xcbc/xcbc_process.c
Normal file
75
libtomcrypt/src/mac/xcbc/xcbc_process.c
Normal file
@@ -0,0 +1,75 @@
|
||||
/* LibTomCrypt, modular cryptographic library -- Tom St Denis
|
||||
*
|
||||
* LibTomCrypt is a library that provides various cryptographic
|
||||
* algorithms in a highly modular and flexible manner.
|
||||
*
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
/**
|
||||
@file xcbc_process.c
|
||||
XCBC Support, process blocks with XCBC
|
||||
*/
|
||||
|
||||
#ifdef LTC_XCBC
|
||||
|
||||
/** Process data through XCBC-MAC
|
||||
@param xcbc The XCBC-MAC state
|
||||
@param in Input data to process
|
||||
@param inlen Length of input in octets
|
||||
Return CRYPT_OK on success
|
||||
*/
|
||||
int xcbc_process(xcbc_state *xcbc, const unsigned char *in, unsigned long inlen)
|
||||
{
|
||||
int err;
|
||||
#ifdef LTC_FAST
|
||||
int x;
|
||||
#endif
|
||||
|
||||
LTC_ARGCHK(xcbc != NULL);
|
||||
LTC_ARGCHK(in != NULL);
|
||||
|
||||
/* check structure */
|
||||
if ((err = cipher_is_valid(xcbc->cipher)) != CRYPT_OK) {
|
||||
return err;
|
||||
}
|
||||
|
||||
if ((xcbc->blocksize > cipher_descriptor[xcbc->cipher].block_length) || (xcbc->blocksize < 0) ||
|
||||
(xcbc->buflen > xcbc->blocksize) || (xcbc->buflen < 0)) {
|
||||
return CRYPT_INVALID_ARG;
|
||||
}
|
||||
|
||||
#ifdef LTC_FAST
|
||||
if (xcbc->buflen == 0) {
|
||||
while (inlen > (unsigned long)xcbc->blocksize) {
|
||||
for (x = 0; x < xcbc->blocksize; x += sizeof(LTC_FAST_TYPE)) {
|
||||
*((LTC_FAST_TYPE*)&(xcbc->IV[x])) ^= *((LTC_FAST_TYPE*)&(in[x]));
|
||||
}
|
||||
cipher_descriptor[xcbc->cipher].ecb_encrypt(xcbc->IV, xcbc->IV, &xcbc->key);
|
||||
in += xcbc->blocksize;
|
||||
inlen -= xcbc->blocksize;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
while (inlen) {
|
||||
if (xcbc->buflen == xcbc->blocksize) {
|
||||
cipher_descriptor[xcbc->cipher].ecb_encrypt(xcbc->IV, xcbc->IV, &xcbc->key);
|
||||
xcbc->buflen = 0;
|
||||
}
|
||||
xcbc->IV[xcbc->buflen++] ^= *in++;
|
||||
--inlen;
|
||||
}
|
||||
return CRYPT_OK;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/xcbc/xcbc_process.c,v $ */
|
||||
/* $Revision: 1.9 $ */
|
||||
/* $Date: 2006/11/09 22:43:52 $ */
|
||||
|
||||
128
libtomcrypt/src/mac/xcbc/xcbc_test.c
Normal file
128
libtomcrypt/src/mac/xcbc/xcbc_test.c
Normal file
@@ -0,0 +1,128 @@
|
||||
/* LibTomCrypt, modular cryptographic library -- Tom St Denis
|
||||
*
|
||||
* LibTomCrypt is a library that provides various cryptographic
|
||||
* algorithms in a highly modular and flexible manner.
|
||||
*
|
||||
* The library is free for all purposes without any express
|
||||
* guarantee it works.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
|
||||
*/
|
||||
#include "tomcrypt.h"
|
||||
|
||||
/**
|
||||
@file xcbc_test.c
|
||||
XCBC Support, Test XCBC-MAC mode
|
||||
*/
|
||||
|
||||
#ifdef LTC_XCBC
|
||||
|
||||
/** Test XCBC-MAC mode
|
||||
Return CRYPT_OK on succes
|
||||
*/
|
||||
int xcbc_test(void)
|
||||
{
|
||||
#ifdef LTC_NO_TEST
|
||||
return CRYPT_NOP;
|
||||
#else
|
||||
static const struct {
|
||||
int msglen;
|
||||
unsigned char K[16], M[34], T[16];
|
||||
} tests[] = {
|
||||
{
|
||||
0,
|
||||
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
|
||||
|
||||
{ 0 },
|
||||
|
||||
{ 0x75, 0xf0, 0x25, 0x1d, 0x52, 0x8a, 0xc0, 0x1c,
|
||||
0x45, 0x73, 0xdf, 0xd5, 0x84, 0xd7, 0x9f, 0x29 }
|
||||
},
|
||||
|
||||
{
|
||||
3,
|
||||
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
|
||||
|
||||
{ 0x00, 0x01, 0x02 },
|
||||
|
||||
{ 0x5b, 0x37, 0x65, 0x80, 0xae, 0x2f, 0x19, 0xaf,
|
||||
0xe7, 0x21, 0x9c, 0xee, 0xf1, 0x72, 0x75, 0x6f }
|
||||
},
|
||||
|
||||
{
|
||||
16,
|
||||
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
|
||||
|
||||
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
|
||||
|
||||
{ 0xd2, 0xa2, 0x46, 0xfa, 0x34, 0x9b, 0x68, 0xa7,
|
||||
0x99, 0x98, 0xa4, 0x39, 0x4f, 0xf7, 0xa2, 0x63 }
|
||||
},
|
||||
|
||||
{
|
||||
32,
|
||||
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
|
||||
|
||||
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
|
||||
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
|
||||
0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
|
||||
|
||||
{ 0xf5, 0x4f, 0x0e, 0xc8, 0xd2, 0xb9, 0xf3, 0xd3,
|
||||
0x68, 0x07, 0x73, 0x4b, 0xd5, 0x28, 0x3f, 0xd4 }
|
||||
},
|
||||
|
||||
{
|
||||
34,
|
||||
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
|
||||
|
||||
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
|
||||
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
|
||||
0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
|
||||
0x20, 0x21 },
|
||||
|
||||
{ 0xbe, 0xcb, 0xb3, 0xbc, 0xcd, 0xb5, 0x18, 0xa3,
|
||||
0x06, 0x77, 0xd5, 0x48, 0x1f, 0xb6, 0xb4, 0xd8 },
|
||||
},
|
||||
|
||||
|
||||
|
||||
};
|
||||
unsigned char T[16];
|
||||
unsigned long taglen;
|
||||
int err, x, idx;
|
||||
|
||||
/* AES can be under rijndael or aes... try to find it */
|
||||
if ((idx = find_cipher("aes")) == -1) {
|
||||
if ((idx = find_cipher("rijndael")) == -1) {
|
||||
return CRYPT_NOP;
|
||||
}
|
||||
}
|
||||
|
||||
for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); x++) {
|
||||
taglen = 16;
|
||||
if ((err = xcbc_memory(idx, tests[x].K, 16, tests[x].M, tests[x].msglen, T, &taglen)) != CRYPT_OK) {
|
||||
return err;
|
||||
}
|
||||
if (taglen != 16 || XMEMCMP(T, tests[x].T, 16)) {
|
||||
return CRYPT_FAIL_TESTVECTOR;
|
||||
}
|
||||
}
|
||||
|
||||
return CRYPT_OK;
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* $Source: /cvs/libtom/libtomcrypt/src/mac/xcbc/xcbc_test.c,v $ */
|
||||
/* $Revision: 1.5 $ */
|
||||
/* $Date: 2006/11/21 23:02:42 $ */
|
||||
|
||||
Reference in New Issue
Block a user