mirror of
				https://github.com/0xFEEDC0DE64/arduino-esp32.git
				synced 2025-10-31 14:11:42 +01:00 
			
		
		
		
	* Add build time partitions compilation * Fix wrong definition of SS pin * Add support for core debug level selection * update idf libs
		
			
				
	
	
		
			163 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			163 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  ---------------------------------------------------------------------------
 | |
|  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 09/09/2006
 | |
| 
 | |
|  This is an AES implementation that uses only 8-bit byte operations on the
 | |
|  cipher state.
 | |
|  */
 | |
| 
 | |
| #ifndef AES_H
 | |
| #define AES_H
 | |
| 
 | |
| #if 1
 | |
| #  define AES_ENC_PREKEYED  /* AES encryption with a precomputed key schedule  */
 | |
| #endif
 | |
| #if 1
 | |
| #  define AES_DEC_PREKEYED  /* AES decryption with a precomputed key schedule  */
 | |
| #endif
 | |
| #if 1
 | |
| #  define AES_ENC_128_OTFK  /* AES encryption with 'on the fly' 128 bit keying */
 | |
| #endif
 | |
| #if 1
 | |
| #  define AES_DEC_128_OTFK  /* AES decryption with 'on the fly' 128 bit keying */
 | |
| #endif
 | |
| #if 1
 | |
| #  define AES_ENC_256_OTFK  /* AES encryption with 'on the fly' 256 bit keying */
 | |
| #endif
 | |
| #if 1
 | |
| #  define AES_DEC_256_OTFK  /* AES decryption with 'on the fly' 256 bit keying */
 | |
| #endif
 | |
| 
 | |
| #define N_ROW                   4
 | |
| #define N_COL                   4
 | |
| #define N_BLOCK   (N_ROW * N_COL)
 | |
| #define N_MAX_ROUNDS           14
 | |
| 
 | |
| typedef unsigned char uint_8t;
 | |
| 
 | |
| typedef uint_8t return_type;
 | |
| 
 | |
| /*  Warning: The key length for 256 bit keys overflows a byte
 | |
|     (see comment below)
 | |
| */
 | |
| 
 | |
| typedef uint_8t length_type;
 | |
| 
 | |
| typedef struct {
 | |
|     uint_8t ksch[(N_MAX_ROUNDS + 1) * N_BLOCK];
 | |
|     uint_8t rnd;
 | |
| } aes_context;
 | |
| 
 | |
| /*  The following calls are for a precomputed key schedule
 | |
| 
 | |
|     NOTE: If the length_type used for the key length is an
 | |
|     unsigned 8-bit character, a key length of 256 bits must
 | |
|     be entered as a length in bytes (valid inputs are hence
 | |
|     128, 192, 16, 24 and 32).
 | |
| */
 | |
| 
 | |
| #if defined( AES_ENC_PREKEYED ) || defined( AES_DEC_PREKEYED )
 | |
| 
 | |
| return_type aes_set_key( const unsigned char key[],
 | |
|                          length_type keylen,
 | |
|                          aes_context ctx[1] );
 | |
| #endif
 | |
| 
 | |
| #if defined( AES_ENC_PREKEYED )
 | |
| 
 | |
| return_type bluedroid_aes_encrypt( const unsigned char in[N_BLOCK],
 | |
|                                    unsigned char out[N_BLOCK],
 | |
|                                    const aes_context ctx[1] );
 | |
| 
 | |
| return_type aes_cbc_encrypt( const unsigned char *in,
 | |
|                              unsigned char *out,
 | |
|                              int n_block,
 | |
|                              unsigned char iv[N_BLOCK],
 | |
|                              const aes_context ctx[1] );
 | |
| #endif
 | |
| 
 | |
| #if defined( AES_DEC_PREKEYED )
 | |
| 
 | |
| return_type bluedroid_aes_decrypt( const unsigned char in[N_BLOCK],
 | |
|                                    unsigned char out[N_BLOCK],
 | |
|                                    const aes_context ctx[1] );
 | |
| 
 | |
| return_type aes_cbc_decrypt( const unsigned char *in,
 | |
|                              unsigned char *out,
 | |
|                              int n_block,
 | |
|                              unsigned char iv[N_BLOCK],
 | |
|                              const aes_context ctx[1] );
 | |
| #endif
 | |
| 
 | |
| /*  The following calls are for 'on the fly' keying.  In this case the
 | |
|     encryption and decryption keys are different.
 | |
| 
 | |
|     The encryption subroutines take a key in an array of bytes in
 | |
|     key[L] where L is 16, 24 or 32 bytes for key lengths of 128,
 | |
|     192, and 256 bits respectively.  They then encrypts the input
 | |
|     data, in[] with this key and put the reult in the output array
 | |
|     out[].  In addition, the second key array, o_key[L], is used
 | |
|     to output the key that is needed by the decryption subroutine
 | |
|     to reverse the encryption operation.  The two key arrays can
 | |
|     be the same array but in this case the original key will be
 | |
|     overwritten.
 | |
| 
 | |
|     In the same way, the decryption subroutines output keys that
 | |
|     can be used to reverse their effect when used for encryption.
 | |
| 
 | |
|     Only 128 and 256 bit keys are supported in these 'on the fly'
 | |
|     modes.
 | |
| */
 | |
| 
 | |
| #if defined( AES_ENC_128_OTFK )
 | |
| void bluedroid_aes_encrypt_128( const unsigned char in[N_BLOCK],
 | |
|                                 unsigned char out[N_BLOCK],
 | |
|                                 const unsigned char key[N_BLOCK],
 | |
|                                 uint_8t o_key[N_BLOCK] );
 | |
| #endif
 | |
| 
 | |
| #if defined( AES_DEC_128_OTFK )
 | |
| void bluedroid_aes_decrypt_128( const unsigned char in[N_BLOCK],
 | |
|                                 unsigned char out[N_BLOCK],
 | |
|                                 const unsigned char key[N_BLOCK],
 | |
|                                 unsigned char o_key[N_BLOCK] );
 | |
| #endif
 | |
| 
 | |
| #if defined( AES_ENC_256_OTFK )
 | |
| void bluedroid_aes_encrypt_256( const unsigned char in[N_BLOCK],
 | |
|                                 unsigned char out[N_BLOCK],
 | |
|                                 const unsigned char key[2 * N_BLOCK],
 | |
|                                 unsigned char o_key[2 * N_BLOCK] );
 | |
| #endif
 | |
| 
 | |
| #if defined( AES_DEC_256_OTFK )
 | |
| void bluedroid_aes_decrypt_256( const unsigned char in[N_BLOCK],
 | |
|                                 unsigned char out[N_BLOCK],
 | |
|                                 const unsigned char key[2 * N_BLOCK],
 | |
|                                 unsigned char o_key[2 * N_BLOCK] );
 | |
| #endif
 | |
| 
 | |
| #endif
 |