Exportable version of WizziLab's modem driver.
include/kal_crypto.h@56:67e3d9608403, 2021-01-27 (annotated)
- Committer:
- Jeej
- Date:
- Wed Jan 27 14:45:28 2021 +0000
- Revision:
- 56:67e3d9608403
- Parent:
- 19:701d5669f2e9
Sanity commit. Do not use.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Jeej | 13:10589aaf8853 | 1 | /// @copyright |
Jeej | 13:10589aaf8853 | 2 | /// ========================================================================={{{ |
Jeej | 13:10589aaf8853 | 3 | /// Copyright (c) 20XX / |
Jeej | 13:10589aaf8853 | 4 | /// All rights reserved / |
Jeej | 13:10589aaf8853 | 5 | /// / |
Jeej | 13:10589aaf8853 | 6 | /// IMPORTANT: This Software may not be modified, copied or distributed unless / |
Jeej | 13:10589aaf8853 | 7 | /// embedded on a WizziLab product. Other than for the foregoing purpose, this / |
Jeej | 13:10589aaf8853 | 8 | /// Software and/or its documentation may not be used, reproduced, copied, / |
Jeej | 13:10589aaf8853 | 9 | /// prepared derivative works of, modified, performed, distributed, displayed / |
Jeej | 13:10589aaf8853 | 10 | /// or sold for any purpose. For the sole purpose of embedding this Software / |
Jeej | 13:10589aaf8853 | 11 | /// on a WizziLab product, copy, modification and distribution of this / |
Jeej | 13:10589aaf8853 | 12 | /// Software is granted provided that the following conditions are respected: / |
Jeej | 13:10589aaf8853 | 13 | /// / |
Jeej | 13:10589aaf8853 | 14 | /// * Redistributions of source code must retain the above copyright notice, / |
Jeej | 13:10589aaf8853 | 15 | /// this list of conditions and the following disclaimer / |
Jeej | 13:10589aaf8853 | 16 | /// / |
Jeej | 13:10589aaf8853 | 17 | /// * Redistributions in binary form must reproduce the above copyright / |
Jeej | 13:10589aaf8853 | 18 | /// notice, this list of conditions and the following disclaimer in the / |
Jeej | 13:10589aaf8853 | 19 | /// documentation and/or other materials provided with the distribution. / |
Jeej | 13:10589aaf8853 | 20 | /// / |
Jeej | 13:10589aaf8853 | 21 | /// * The name of WizziLab can not be used to endorse or promote products / |
Jeej | 13:10589aaf8853 | 22 | /// derived from this software without specific prior written permission. / |
Jeej | 13:10589aaf8853 | 23 | /// / |
Jeej | 13:10589aaf8853 | 24 | /// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS / |
Jeej | 13:10589aaf8853 | 25 | /// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED / |
Jeej | 13:10589aaf8853 | 26 | /// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR / |
Jeej | 13:10589aaf8853 | 27 | /// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR / |
Jeej | 13:10589aaf8853 | 28 | /// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, / |
Jeej | 13:10589aaf8853 | 29 | /// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, / |
Jeej | 13:10589aaf8853 | 30 | /// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, / |
Jeej | 13:10589aaf8853 | 31 | /// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY / |
Jeej | 13:10589aaf8853 | 32 | /// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING / |
Jeej | 13:10589aaf8853 | 33 | /// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS / |
Jeej | 13:10589aaf8853 | 34 | /// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. / |
Jeej | 13:10589aaf8853 | 35 | /// WIZZILAB HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, / |
Jeej | 13:10589aaf8853 | 36 | /// ENHANCEMENTS OR MODIFICATIONS. / |
Jeej | 13:10589aaf8853 | 37 | /// / |
Jeej | 13:10589aaf8853 | 38 | /// Should you have any questions regarding your right to use this Software, / |
Jeej | 13:10589aaf8853 | 39 | /// contact WizziLab at www.wizzilab.com. / |
Jeej | 13:10589aaf8853 | 40 | /// / |
Jeej | 13:10589aaf8853 | 41 | /// =========================================================================}}} |
Jeej | 13:10589aaf8853 | 42 | /// @endcopyright |
Jeej | 13:10589aaf8853 | 43 | |
Jeej | 13:10589aaf8853 | 44 | // ======================================================================= |
Jeej | 13:10589aaf8853 | 45 | /// @file kal_crypto.h |
Jeej | 13:10589aaf8853 | 46 | /// @brief KAL Crypto utilities |
Jeej | 13:10589aaf8853 | 47 | // ======================================================================= |
Jeej | 13:10589aaf8853 | 48 | |
Jeej | 13:10589aaf8853 | 49 | #ifndef _KAL_CRYPTO_H_ |
Jeej | 13:10589aaf8853 | 50 | #define _KAL_CRYPTO_H_ |
Jeej | 13:10589aaf8853 | 51 | |
Jeej | 13:10589aaf8853 | 52 | #include "hal_types.h" |
Jeej | 13:10589aaf8853 | 53 | |
Jeej | 13:10589aaf8853 | 54 | // ====================================================================== |
Jeej | 13:10589aaf8853 | 55 | // |
Jeej | 13:10589aaf8853 | 56 | // |
Jeej | 13:10589aaf8853 | 57 | // SHA-2 256 Tool-suite. |
Jeej | 13:10589aaf8853 | 58 | // (From Brad Conte's Licence-free implementation) |
Jeej | 13:10589aaf8853 | 59 | // |
Jeej | 13:10589aaf8853 | 60 | // |
Jeej | 13:10589aaf8853 | 61 | // ====================================================================== |
Jeej | 13:10589aaf8853 | 62 | |
Jeej | 13:10589aaf8853 | 63 | /// SHA256 digest output size in bytes |
Jeej | 13:10589aaf8853 | 64 | #define SHA256_BLOCK_SIZE 32 |
Jeej | 13:10589aaf8853 | 65 | |
Jeej | 13:10589aaf8853 | 66 | //====================================================================== |
Jeej | 13:10589aaf8853 | 67 | // kal_sha256_init |
Jeej | 13:10589aaf8853 | 68 | //---------------------------------------------------------------------- |
Jeej | 13:10589aaf8853 | 69 | /// @brief Initialize an SHA Hash generation. To be called before any |
Jeej | 13:10589aaf8853 | 70 | /// other kal_sha256_update/final functions. |
Jeej | 13:10589aaf8853 | 71 | //====================================================================== |
Jeej | 56:67e3d9608403 | 72 | _public void kal_sha256_init(void); |
Jeej | 13:10589aaf8853 | 73 | |
Jeej | 13:10589aaf8853 | 74 | //====================================================================== |
Jeej | 13:10589aaf8853 | 75 | // kal_sha256_update |
Jeej | 13:10589aaf8853 | 76 | //---------------------------------------------------------------------- |
Jeej | 13:10589aaf8853 | 77 | /// @brief Used to 'push' new data into the hash calculation. |
Jeej | 13:10589aaf8853 | 78 | /// @param data pointer to the (char) data stream to hash. |
Jeej | 13:10589aaf8853 | 79 | /// @param len data stream length in bytes |
Jeej | 13:10589aaf8853 | 80 | //====================================================================== |
Jeej | 56:67e3d9608403 | 81 | _public void kal_sha256_update(u8 data[], uint len); |
Jeej | 13:10589aaf8853 | 82 | |
Jeej | 13:10589aaf8853 | 83 | //====================================================================== |
Jeej | 13:10589aaf8853 | 84 | // kal_sha256_final |
Jeej | 13:10589aaf8853 | 85 | //---------------------------------------------------------------------- |
Jeej | 13:10589aaf8853 | 86 | /// @brief To be called when all data has been pushed into the hash |
Jeej | 13:10589aaf8853 | 87 | /// generator. Finalize and outputs resulting SHA hash. |
Jeej | 13:10589aaf8853 | 88 | /// @param hash Pointer to the Output (char) buffer. Fills 32-bytes. |
Jeej | 13:10589aaf8853 | 89 | //====================================================================== |
Jeej | 56:67e3d9608403 | 90 | _public void kal_sha256_final(u8 hash[]); |
Jeej | 56:67e3d9608403 | 91 | |
Jeej | 56:67e3d9608403 | 92 | // ====================================================================== |
Jeej | 56:67e3d9608403 | 93 | // |
Jeej | 56:67e3d9608403 | 94 | // |
Jeej | 56:67e3d9608403 | 95 | // CBC-MAC / CTR / CCM Tool-suite. |
Jeej | 56:67e3d9608403 | 96 | // |
Jeej | 56:67e3d9608403 | 97 | // |
Jeej | 56:67e3d9608403 | 98 | // ====================================================================== |
Jeej | 56:67e3d9608403 | 99 | |
Jeej | 56:67e3d9608403 | 100 | //====================================================================== |
Jeej | 56:67e3d9608403 | 101 | // kal_aes128_init |
Jeej | 56:67e3d9608403 | 102 | //---------------------------------------------------------------------- |
Jeej | 56:67e3d9608403 | 103 | /// @brief Perform Key expansion |
Jeej | 56:67e3d9608403 | 104 | /// @param key const u8* encryption key |
Jeej | 56:67e3d9608403 | 105 | /// @retval void |
Jeej | 56:67e3d9608403 | 106 | //====================================================================== |
Jeej | 56:67e3d9608403 | 107 | _public void kal_aes128_init(u8* key); |
Jeej | 56:67e3d9608403 | 108 | |
Jeej | 56:67e3d9608403 | 109 | //====================================================================== |
Jeej | 56:67e3d9608403 | 110 | // kal_aes128_ecb |
Jeej | 56:67e3d9608403 | 111 | //---------------------------------------------------------------------- |
Jeej | 56:67e3d9608403 | 112 | /// @brief Encrypt / decrypt in ECB mode (non chaining). |
Jeej | 56:67e3d9608403 | 113 | /// @param p u8* payload inout |
Jeej | 56:67e3d9608403 | 114 | /// p(i) = cipher(p(i), key) |
Jeej | 56:67e3d9608403 | 115 | /// @param len u16 payload length |
Jeej | 56:67e3d9608403 | 116 | /// @retval void |
Jeej | 56:67e3d9608403 | 117 | //====================================================================== |
Jeej | 56:67e3d9608403 | 118 | _public void kal_aes128_ecb(u8* p, u16 len); |
Jeej | 56:67e3d9608403 | 119 | |
Jeej | 56:67e3d9608403 | 120 | //====================================================================== |
Jeej | 56:67e3d9608403 | 121 | // kal_aes128_ctr |
Jeej | 56:67e3d9608403 | 122 | //---------------------------------------------------------------------- |
Jeej | 56:67e3d9608403 | 123 | /// @brief Encrypt / decrypt in CTR mode (non chaining). |
Jeej | 56:67e3d9608403 | 124 | /// Note : only 1 byte counter is supported. |
Jeej | 56:67e3d9608403 | 125 | /// @param p u8* payload inout |
Jeej | 56:67e3d9608403 | 126 | /// p(i) = cipher(iv+i, key) ^ p(i) |
Jeej | 56:67e3d9608403 | 127 | /// @param len u16 payload length |
Jeej | 56:67e3d9608403 | 128 | /// @param iv u8* counter IV (returns next value) |
Jeej | 56:67e3d9608403 | 129 | /// @param be u8 counter endianness (byte15 is lsb when TRUE, otherwise byte0) |
Jeej | 56:67e3d9608403 | 130 | /// @retval void |
Jeej | 56:67e3d9608403 | 131 | //====================================================================== |
Jeej | 56:67e3d9608403 | 132 | _public void kal_aes128_ctr(u8* p, u16 len, u8* iv, u8 be); |
Jeej | 13:10589aaf8853 | 133 | |
Jeej | 56:67e3d9608403 | 134 | //====================================================================== |
Jeej | 56:67e3d9608403 | 135 | // kal_aes128_cbc_mac |
Jeej | 56:67e3d9608403 | 136 | //---------------------------------------------------------------------- |
Jeej | 56:67e3d9608403 | 137 | /// @brief Generate MAC with block-chaining |
Jeej | 56:67e3d9608403 | 138 | /// @param mac u8* MAC 16-bytes inout |
Jeej | 56:67e3d9608403 | 139 | /// @param p u8* payload |
Jeej | 56:67e3d9608403 | 140 | /// @param len u16 payload length |
Jeej | 56:67e3d9608403 | 141 | /// @retval void |
Jeej | 56:67e3d9608403 | 142 | //====================================================================== |
Jeej | 56:67e3d9608403 | 143 | _public void kal_aes128_cbc_mac(u8* mac, u8* p, u16 len); |
Jeej | 56:67e3d9608403 | 144 | |
Jeej | 56:67e3d9608403 | 145 | //====================================================================== |
Jeej | 56:67e3d9608403 | 146 | // kal_aes128_cmac_next |
Jeej | 56:67e3d9608403 | 147 | //---------------------------------------------------------------------- |
Jeej | 56:67e3d9608403 | 148 | /// @brief Execute CMAC algorithm on a entire number of 16-byte blocks, |
Jeej | 56:67e3d9608403 | 149 | /// not including the last block. |
Jeej | 56:67e3d9608403 | 150 | /// @param mac u8* MAC 16-bytes inout |
Jeej | 56:67e3d9608403 | 151 | /// @param p u8* payload |
Jeej | 56:67e3d9608403 | 152 | /// @param len u16 payload length |
Jeej | 56:67e3d9608403 | 153 | /// @retval void |
Jeej | 56:67e3d9608403 | 154 | //====================================================================== |
Jeej | 56:67e3d9608403 | 155 | _public void kal_aes128_cmac_next(u8* mac, u8* p, u16 len); |
Jeej | 13:10589aaf8853 | 156 | |
Jeej | 56:67e3d9608403 | 157 | //====================================================================== |
Jeej | 56:67e3d9608403 | 158 | // kal_aes128_cmac_last |
Jeej | 56:67e3d9608403 | 159 | //---------------------------------------------------------------------- |
Jeej | 56:67e3d9608403 | 160 | /// @brief Execute CMAC algorithm on any size and finalize. |
Jeej | 56:67e3d9608403 | 161 | /// @param mac u8* MAC 16-bytes inout |
Jeej | 56:67e3d9608403 | 162 | /// @param p u8* payload |
Jeej | 56:67e3d9608403 | 163 | /// @param len u16 payload length |
Jeej | 56:67e3d9608403 | 164 | /// @retval void |
Jeej | 56:67e3d9608403 | 165 | //====================================================================== |
Jeej | 56:67e3d9608403 | 166 | _public void kal_aes128_cmac_last(u8* mac, u8* p, u16 len); |
Jeej | 56:67e3d9608403 | 167 | |
Jeej | 56:67e3d9608403 | 168 | // ====================================================================== |
Jeej | 56:67e3d9608403 | 169 | // |
Jeej | 56:67e3d9608403 | 170 | // |
Jeej | 56:67e3d9608403 | 171 | // SIPHASH-2-4 |
Jeej | 56:67e3d9608403 | 172 | // |
Jeej | 56:67e3d9608403 | 173 | // |
Jeej | 56:67e3d9608403 | 174 | // ====================================================================== |
Jeej | 56:67e3d9608403 | 175 | |
Jeej | 56:67e3d9608403 | 176 | //====================================================================== |
Jeej | 56:67e3d9608403 | 177 | // kal_siphash24 |
Jeej | 56:67e3d9608403 | 178 | //---------------------------------------------------------------------- |
Jeej | 56:67e3d9608403 | 179 | /// @brief Generate MAC of an input vector using SIPHASH-2-4 |
Jeej | 56:67e3d9608403 | 180 | /// @param out u8* 64-bit result |
Jeej | 56:67e3d9608403 | 181 | /// @param in u8* input buffer |
Jeej | 56:67e3d9608403 | 182 | /// @param len u8 input buffer length in bytes |
Jeej | 56:67e3d9608403 | 183 | /// @param key const u8* cipher key |
Jeej | 56:67e3d9608403 | 184 | /// @retval void |
Jeej | 56:67e3d9608403 | 185 | //====================================================================== |
Jeej | 56:67e3d9608403 | 186 | _public void kal_siphash24(u8 *out, u8* v, u8 len, const u8* key); |
Jeej | 56:67e3d9608403 | 187 | |
Jeej | 56:67e3d9608403 | 188 | #endif // _KAL_CRYPTO_H_ |