A simple library to support serving https.
Dependents: oldheating gps motorhome heating
aes-gcm/aes.h
- Committer:
- andrewboyson
- Date:
- 2020-04-01
- Revision:
- 24:cb43290fc439
- Parent:
- 6:819c17738dc2
File content as of revision 24:cb43290fc439:
/****************************************************************************** * * THIS SOURCE CODE IS HEREBY PLACED INTO THE PUBLIC DOMAIN FOR THE GOOD OF ALL * * This is a simple and straightforward implementation of the AES Rijndael * 128-bit block cipher designed by Vincent Rijmen and Joan Daemen. The focus * of this work was correctness & accuracy. It is written in 'C' without any * particular focus upon optimization or speed. It should be endian (memory * byte order) neutral since the few places that care are handled explicitly. * * This implementation of Rijndael was created by Steven M. Gibson of GRC.com. * * It is intended for general purpose use, but was written in support of GRC's * reference implementation of the SQRL (Secure Quick Reliable Login) client. * * See: http://csrc.nist.gov/archive/aes/rijndael/wsdindex.html * * NO COPYRIGHT IS CLAIMED IN THIS WORK, HOWEVER, NEITHER IS ANY WARRANTY MADE * REGARDING ITS FITNESS FOR ANY PARTICULAR PURPOSE. USE IT AT YOUR OWN RISK. * *******************************************************************************/ #ifndef AES_HEADER #define AES_HEADER /******************************************************************************/ #define AES_DECRYPTION 0 // whether AES decryption is supported /******************************************************************************/ #include <string.h> #define ENCRYPT 1 // specify whether we're encrypting #define DECRYPT 0 // or decrypting #if defined(_MSC_VER) #include <basetsd.h> typedef UINT32 uint32_t; #else #include <inttypes.h> #endif typedef unsigned char uchar; // add some convienent shorter types typedef unsigned int uint; /****************************************************************************** * AES_INIT_KEYGEN_TABLES : MUST be called once before any AES use ******************************************************************************/ void aes_init_keygen_tables( void ); /****************************************************************************** * AES_CONTEXT : cipher context / holds inter-call data ******************************************************************************/ typedef struct { int mode; // 1 for Encryption, 0 for Decryption int rounds; // keysize-based rounds count uint32_t *rk; // pointer to current round key uint32_t buf[68]; // key expansion buffer } aes_context; /****************************************************************************** * AES_SETKEY : called to expand the key for encryption or decryption ******************************************************************************/ int aes_setkey( aes_context *ctx, // pointer to context int mode, // 1 or 0 for Encrypt/Decrypt const uchar *key, // AES input key uint keysize ); // 128, 192 or 256 bits // returns 0 for success /****************************************************************************** * AES_CIPHER : called to encrypt or decrypt ONE 128-bit block of data ******************************************************************************/ int aes_cipher( aes_context *ctx, // pointer to context const uchar input[16], // 128-bit block to en/decipher uchar output[16] ); // 128-bit output result block // returns 0 for success #endif /* AES_HEADER */