You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
150 lines
4.9 KiB
150 lines
4.9 KiB
/*
|
|
---------------------------------------------------------------------------
|
|
Copyright (c) 1998-2008, Brian Gladman, Worcester, UK. All rights reserved.
|
|
|
|
LICENSE TERMS
|
|
|
|
The redistribution and use of this software (with or without changes)
|
|
is allowed without the payment of fees or royalties provided that:
|
|
|
|
1. source code distributions include the above copyright notice, this
|
|
list of conditions and the following disclaimer;
|
|
|
|
2. binary distributions include the above copyright notice, this list
|
|
of conditions and the following disclaimer in their documentation;
|
|
|
|
3. the name of the copyright holder is not used to endorse products
|
|
built using this software without specific written permission.
|
|
|
|
DISCLAIMER
|
|
|
|
This software is provided 'as is' with no explicit or implied warranties
|
|
in respect of its properties, including, but not limited to, correctness
|
|
and/or fitness for purpose.
|
|
---------------------------------------------------------------------------
|
|
Issue Date: 20/12/2007
|
|
|
|
This file contains the definitions required to use AES (Rijndael) in C++.
|
|
*/
|
|
|
|
#ifndef _AESCPP_H
|
|
#define _AESCPP_H
|
|
|
|
#include "aes.h"
|
|
|
|
#if defined( AES_ENCRYPT )
|
|
|
|
class AESencrypt
|
|
{
|
|
public:
|
|
AESencrypt(void) { aes_init(); };
|
|
#if defined(AES_128)
|
|
AESencrypt(const unsigned char key[])
|
|
{ aes_encrypt_key128(key, cx); }
|
|
inline AES_RETURN key128(const unsigned char key[])
|
|
{ return aes_encrypt_key128(key, cx); }
|
|
#endif
|
|
#if defined(AES_192)
|
|
inline AES_RETURN key192(const unsigned char key[])
|
|
{ return aes_encrypt_key192(key, cx); }
|
|
#endif
|
|
#if defined(AES_256)
|
|
inline AES_RETURN key256(const unsigned char key[])
|
|
{ return aes_encrypt_key256(key, cx); }
|
|
#endif
|
|
#if defined(AES_VAR)
|
|
inline AES_RETURN key(const unsigned char key[], int key_len)
|
|
{ return aes_encrypt_key(key, key_len, cx); }
|
|
#endif
|
|
inline AES_RETURN encrypt(const unsigned char in[], unsigned char out[]) const
|
|
{ return aes_encrypt(in, out, cx); }
|
|
#ifndef AES_MODES
|
|
inline AES_RETURN ecb_encrypt(const unsigned char in[], unsigned char out[], int nb) const
|
|
{ while(nb--)
|
|
{ aes_encrypt(in, out, cx), in += AES_BLOCK_SIZE, out += AES_BLOCK_SIZE; }
|
|
}
|
|
#endif
|
|
#ifdef AES_MODES
|
|
inline AES_RETURN mode_reset(void) { return aes_mode_reset(cx); }
|
|
|
|
inline AES_RETURN ecb_encrypt(const unsigned char in[], unsigned char out[], int nb) const
|
|
{ return aes_ecb_encrypt(in, out, nb, cx); }
|
|
|
|
inline AES_RETURN cbc_encrypt(const unsigned char in[], unsigned char out[], int nb,
|
|
unsigned char iv[]) const
|
|
{ return aes_cbc_encrypt(in, out, nb, iv, cx); }
|
|
|
|
inline AES_RETURN cfb_encrypt(const unsigned char in[], unsigned char out[], int nb,
|
|
unsigned char iv[])
|
|
{ return aes_cfb_encrypt(in, out, nb, iv, cx); }
|
|
|
|
inline AES_RETURN cfb_decrypt(const unsigned char in[], unsigned char out[], int nb,
|
|
unsigned char iv[])
|
|
{ return aes_cfb_decrypt(in, out, nb, iv, cx); }
|
|
|
|
inline AES_RETURN ofb_crypt(const unsigned char in[], unsigned char out[], int nb,
|
|
unsigned char iv[])
|
|
{ return aes_ofb_crypt(in, out, nb, iv, cx); }
|
|
|
|
typedef void ctr_fn(unsigned char ctr[]);
|
|
|
|
inline AES_RETURN ctr_crypt(const unsigned char in[], unsigned char out[], int nb,
|
|
unsigned char iv[], ctr_fn cf)
|
|
{ return aes_ctr_crypt(in, out, nb, iv, cf, cx); }
|
|
|
|
#endif
|
|
|
|
private:
|
|
aes_encrypt_ctx cx[1];
|
|
};
|
|
|
|
#endif
|
|
|
|
#if defined( AES_DECRYPT )
|
|
|
|
class AESdecrypt
|
|
{
|
|
public:
|
|
AESdecrypt(void) { aes_init(); };
|
|
#if defined(AES_128)
|
|
AESdecrypt(const unsigned char key[])
|
|
{ aes_decrypt_key128(key, cx); }
|
|
inline AES_RETURN key128(const unsigned char key[])
|
|
{ return aes_decrypt_key128(key, cx); }
|
|
#endif
|
|
#if defined(AES_192)
|
|
inline AES_RETURN key192(const unsigned char key[])
|
|
{ return aes_decrypt_key192(key, cx); }
|
|
#endif
|
|
#if defined(AES_256)
|
|
inline AES_RETURN key256(const unsigned char key[])
|
|
{ return aes_decrypt_key256(key, cx); }
|
|
#endif
|
|
#if defined(AES_VAR)
|
|
inline AES_RETURN key(const unsigned char key[], int key_len)
|
|
{ return aes_decrypt_key(key, key_len, cx); }
|
|
#endif
|
|
inline AES_RETURN decrypt(const unsigned char in[], unsigned char out[]) const
|
|
{ return aes_decrypt(in, out, cx); }
|
|
#ifndef AES_MODES
|
|
inline AES_RETURN ecb_decrypt(const unsigned char in[], unsigned char out[], int nb) const
|
|
{ while(nb--)
|
|
{ aes_decrypt(in, out, cx), in += AES_BLOCK_SIZE, out += AES_BLOCK_SIZE; }
|
|
}
|
|
#endif
|
|
#ifdef AES_MODES
|
|
|
|
inline AES_RETURN ecb_decrypt(const unsigned char in[], unsigned char out[], int nb) const
|
|
{ return aes_ecb_decrypt(in, out, nb, cx); }
|
|
|
|
inline AES_RETURN cbc_decrypt(const unsigned char in[], unsigned char out[], int nb,
|
|
unsigned char iv[]) const
|
|
{ return aes_cbc_decrypt(in, out, nb, iv, cx); }
|
|
#endif
|
|
private:
|
|
aes_decrypt_ctx cx[1];
|
|
};
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|