fota lib for mdot

Dependents:   UQ_LoraWAN

Committer:
Jenkins@KEILDM1.dc.multitech.prv
Date:
Fri Sep 14 15:39:09 2018 -0500
Revision:
3:63d10f2375ea
fota lib updates

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 1 /*
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 2 ---------------------------------------------------------------------------
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 3 Copyright (c) 1998-2008, Brian Gladman, Worcester, UK. All rights reserved.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 4
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 5 LICENSE TERMS
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 6
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 7 The redistribution and use of this software (with or without changes)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 8 is allowed without the payment of fees or royalties provided that:
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 9
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 10 1. source code distributions include the above copyright notice, this
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 11 list of conditions and the following disclaimer;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 12
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 13 2. binary distributions include the above copyright notice, this list
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 14 of conditions and the following disclaimer in their documentation;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 15
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 16 3. the name of the copyright holder is not used to endorse products
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 17 built using this software without specific written permission.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 18
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 19 DISCLAIMER
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 20
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 21 This software is provided 'as is' with no explicit or implied warranties
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 22 in respect of its properties, including, but not limited to, correctness
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 23 and/or fitness for purpose.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 24 ---------------------------------------------------------------------------
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 25 Issue 09/09/2006
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 26
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 27 This is an AES implementation that uses only 8-bit byte operations on the
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 28 cipher state.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 29 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 30
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 31 #ifndef AES_H
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 32 #define AES_H
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 33
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 34 #ifdef __cplusplus
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 35 extern "C" {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 36 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 37
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 38 #if 1
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 39 # define AES_ENC_PREKEYED /* AES encryption with a precomputed key schedule */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 40 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 41 #if 1
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 42 # define AES_DEC_PREKEYED /* AES decryption with a precomputed key schedule */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 43 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 44 #if 0
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 45 # define AES_ENC_128_OTFK /* AES encryption with 'on the fly' 128 bit keying */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 46 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 47 #if 0
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 48 # define AES_DEC_128_OTFK /* AES decryption with 'on the fly' 128 bit keying */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 49 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 50 #if 0
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 51 # define AES_ENC_256_OTFK /* AES encryption with 'on the fly' 256 bit keying */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 52 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 53 #if 0
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 54 # define AES_DEC_256_OTFK /* AES decryption with 'on the fly' 256 bit keying */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 55 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 56
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 57 #define N_ROW 4
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 58 #define N_COL 4
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 59 #define N_BLOCK (N_ROW * N_COL)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 60 #define N_MAX_ROUNDS 14
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 61
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 62 typedef unsigned char uint_8t;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 63
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 64 typedef uint_8t return_type;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 65
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 66 /* Warning: The key length for 256 bit keys overflows a byte
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 67 (see comment below)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 68 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 69
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 70 typedef uint_8t length_type;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 71
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 72 typedef struct
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 73 { uint_8t ksch[(N_MAX_ROUNDS + 1) * N_BLOCK];
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 74 uint_8t rnd;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 75 } aes_context;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 76
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 77 /* The following calls are for a precomputed key schedule
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 78
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 79 NOTE: If the length_type used for the key length is an
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 80 unsigned 8-bit character, a key length of 256 bits must
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 81 be entered as a length in bytes (valid inputs are hence
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 82 128, 192, 16, 24 and 32).
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 83 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 84
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 85 #if defined( AES_ENC_PREKEYED ) || defined( AES_DEC_PREKEYED )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 86
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 87 return_type aes_set_key( const unsigned char key[],
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 88 length_type keylen,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 89 aes_context ctx[1] );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 90 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 91
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 92 #if defined( AES_ENC_PREKEYED )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 93
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 94 return_type aes_encrypt( const unsigned char in[N_BLOCK],
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 95 unsigned char out[N_BLOCK],
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 96 const aes_context ctx[1] );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 97
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 98 return_type aes_cbc_encrypt( const unsigned char *in,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 99 unsigned char *out,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 100 int n_block,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 101 unsigned char iv[N_BLOCK],
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 102 const aes_context ctx[1] );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 103 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 104
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 105 #if defined( AES_DEC_PREKEYED )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 106
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 107 return_type aes_decrypt( const unsigned char in[N_BLOCK],
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 108 unsigned char out[N_BLOCK],
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 109 const aes_context ctx[1] );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 110
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 111 return_type aes_cbc_decrypt( const unsigned char *in,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 112 unsigned char *out,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 113 int n_block,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 114 unsigned char iv[N_BLOCK],
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 115 const aes_context ctx[1] );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 116 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 117
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 118 /* The following calls are for 'on the fly' keying. In this case the
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 119 encryption and decryption keys are different.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 120
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 121 The encryption subroutines take a key in an array of bytes in
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 122 key[L] where L is 16, 24 or 32 bytes for key lengths of 128,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 123 192, and 256 bits respectively. They then encrypts the input
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 124 data, in[] with this key and put the reult in the output array
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 125 out[]. In addition, the second key array, o_key[L], is used
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 126 to output the key that is needed by the decryption subroutine
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 127 to reverse the encryption operation. The two key arrays can
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 128 be the same array but in this case the original key will be
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 129 overwritten.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 130
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 131 In the same way, the decryption subroutines output keys that
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 132 can be used to reverse their effect when used for encryption.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 133
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 134 Only 128 and 256 bit keys are supported in these 'on the fly'
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 135 modes.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 136 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 137
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 138 #if defined( AES_ENC_128_OTFK )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 139 void aes_encrypt_128( const unsigned char in[N_BLOCK],
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 140 unsigned char out[N_BLOCK],
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 141 const unsigned char key[N_BLOCK],
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 142 uint_8t o_key[N_BLOCK] );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 143 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 144
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 145 #if defined( AES_DEC_128_OTFK )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 146 void aes_decrypt_128( const unsigned char in[N_BLOCK],
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 147 unsigned char out[N_BLOCK],
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 148 const unsigned char key[N_BLOCK],
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 149 unsigned char o_key[N_BLOCK] );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 150 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 151
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 152 #if defined( AES_ENC_256_OTFK )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 153 void aes_encrypt_256( const unsigned char in[N_BLOCK],
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 154 unsigned char out[N_BLOCK],
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 155 const unsigned char key[2 * N_BLOCK],
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 156 unsigned char o_key[2 * N_BLOCK] );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 157 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 158
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 159 #if defined( AES_DEC_256_OTFK )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 160 void aes_decrypt_256( const unsigned char in[N_BLOCK],
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 161 unsigned char out[N_BLOCK],
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 162 const unsigned char key[2 * N_BLOCK],
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 163 unsigned char o_key[2 * N_BLOCK] );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 164 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 165
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 166 #ifdef __cplusplus
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 167 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 168 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 169
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 170 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 171