Exportable version of WizziLab's modem driver.

Dependents:   modem_ref_helper

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?

UserRevisionLine numberNew 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_