X-Git-Url: http://git.code-monkey.de/?p=umurmur.git;a=blobdiff_plain;f=src%2Fcrypt.h;h=631d6e6d63a299a3060474bbdeb09cd0e007889a;hp=0b35ac3b18d56c2f855e57b61eb54ed590d82bc0;hb=6fb422b7cbb94a2b8063c6df630b04184414b633;hpb=5191e1cb38d24ebf5c180ac7911893ca8bc4031f diff --git a/src/crypt.h b/src/crypt.h index 0b35ac3..631d6e6 100644 --- a/src/crypt.h +++ b/src/crypt.h @@ -1,5 +1,5 @@ -/* Copyright (C) 2010, Martin Johansson - Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2009-2014, Martin Johansson + Copyright (C) 2005-2014, Thorvald Natvig All rights reserved. @@ -28,11 +28,71 @@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef _CRYPTSTATE_H -#define _CRYPTSTATE_H +#ifndef CRYPTSTATE_H_34564356 +#define CRYPTSTATE_H_34564356 + +#include "byteorder.h" +#include "config.h" + +#if defined(USE_POLARSSL) + +#include +#include + +#define CRYPT_AES_KEY aes_context +#define AES_BLOCK_SIZE 16 + +#define CRYPT_RANDOM_BYTES(dest, size) RAND_bytes((unsigned char *)(dest), (size)) +#define CRYPT_SET_ENC_KEY(dest, source, size) aes_setkey_enc((dest), (source), (size)); +#define CRYPT_SET_DEC_KEY(dest, source, size) aes_setkey_dec((dest), (source), (size)); + +#define CRYPT_AES_ENCRYPT(src, dst, cryptstate) aes_crypt_ecb(&(cryptstate)->encrypt_key, AES_ENCRYPT, (unsigned char *)(src), (unsigned char *)(dst)); +#define CRYPT_AES_DECRYPT(src, dst, cryptstate) aes_crypt_ecb(&(cryptstate)->decrypt_key, AES_DECRYPT, (unsigned char *)(src), (unsigned char *)(dst)); + +#elif defined(USE_MBEDTLS) + +#include +#include + +#define CRYPT_AES_KEY mbedtls_aes_context +#define AES_BLOCK_SIZE 16 + +#define CRYPT_RANDOM_BYTES(dest, size) RAND_bytes((unsigned char *)(dest), (size)) +#define CRYPT_SET_ENC_KEY(dest, source, size) mbedtls_aes_setkey_enc((dest), (source), (size)); +#define CRYPT_SET_DEC_KEY(dest, source, size) mbedtls_aes_setkey_dec((dest), (source), (size)); + +#define CRYPT_AES_ENCRYPT(src, dst, cryptstate) mbedtls_aes_crypt_ecb(&(cryptstate)->encrypt_key, MBEDTLS_AES_ENCRYPT, (unsigned char *)(src), (unsigned char *)(dst)); +#define CRYPT_AES_DECRYPT(src, dst, cryptstate) mbedtls_aes_crypt_ecb(&(cryptstate)->decrypt_key, MBEDTLS_AES_DECRYPT, (unsigned char *)(src), (unsigned char *)(dst)); + +#elif defined(USE_GNUTLS) + +#include +#include +#include + +#define CRYPT_AES_KEY struct aes_ctx +#define CRYPT_RANDOM_BYTES(dest, size) gnutls_rnd(GNUTLS_RND_KEY, (dest), (size)) +#define CRYPT_SET_ENC_KEY(dest, source, size) aes_set_encrypt_key((dest), (size)/8, (source)); +#define CRYPT_SET_DEC_KEY(dest, source, size) aes_set_decrypt_key((dest), (size)/8, (source)); + +#define CRYPT_AES_ENCRYPT(src, dest, ctx) aes_encrypt(&(ctx)->encrypt_key, AES_BLOCK_SIZE, (uint8_t *)(dest), (uint8_t *)(src)) +#define CRYPT_AES_DECRYPT(src, dest, ctx) aes_decrypt(&(ctx)->decrypt_key, AES_BLOCK_SIZE, (uint8_t *)(dest), (uint8_t *)(src)) + +#else #include #include + +#define CRYPT_AES_KEY AES_KEY +#define CRYPT_RANDOM_BYTES(dest, size) RAND_bytes((unsigned char *)(dest), (size)) +#define CRYPT_SET_ENC_KEY(dest, source, size) AES_set_encrypt_key((source), (size), (dest)); +#define CRYPT_SET_DEC_KEY(dest, source, size) AES_set_decrypt_key((source), (size), (dest)); + +#define CRYPT_AES_ENCRYPT(src, dst, cryptstate) AES_encrypt((unsigned char *)(src), (unsigned char *)(dst), &(cryptstate)->encrypt_key); +#define CRYPT_AES_DECRYPT(src, dst, cryptstate) AES_decrypt((unsigned char *)(src), (unsigned char *)(dst), &(cryptstate)->decrypt_key); + +#endif + #include #include "timer.h" #include "types.h" @@ -42,22 +102,23 @@ typedef struct CryptState { uint8_t encrypt_iv[AES_BLOCK_SIZE]; uint8_t decrypt_iv[AES_BLOCK_SIZE]; uint8_t decrypt_history[0x100]; - + unsigned int uiGood; unsigned int uiLate; unsigned int uiLost; unsigned int uiResync; - + unsigned int uiRemoteGood; unsigned int uiRemoteLate; unsigned int uiRemoteLost; unsigned int uiRemoteResync; - - AES_KEY encrypt_key; - AES_KEY decrypt_key; + + CRYPT_AES_KEY encrypt_key; + CRYPT_AES_KEY decrypt_key; + etimer_t tLastGood; etimer_t tLastRequest; - bool_t bInit; + bool_t bInit; } cryptState_t; void CryptState_init(cryptState_t *cs); @@ -68,4 +129,5 @@ void CryptState_setDecryptIV(cryptState_t *cs, const unsigned char *iv); bool_t CryptState_decrypt(cryptState_t *cs, const unsigned char *source, unsigned char *dst, unsigned int crypted_length); void CryptState_encrypt(cryptState_t *cs, const unsigned char *source, unsigned char *dst, unsigned int plain_length); + #endif