This package includes the SharkSSL lite library and header files.
Dependents: WebSocket-Client-Example SharkMQ-LED-Demo
SharkSSL-Lite
Description: SharkSSL is an SSL v3.0 TLS v1.0/1.1/1.2 implementation of the TLS and SSL protocol standard. With its array of compile-time options and Raycrypto proprietary cryptographic algorithms, SharkSSL can be fine-tuned to a footprint that occupies less than 20 kB, while maintaining full x.509 authentication. The SharkSSL-Lite download includes a subset of SharkSSL and header files made for use in non-commercial and for evaluation purposes.
Features
- SSL|TLS v1.2
- Size: 21kB
- Encryption: Elliptic Curve Cryptography (ECC) | ChaCha20/Poly1305
- SharkSSL Online Documentation
- SMQ (Simple Message Queues) Client and SMQ Documentation
- Secure WebSocket Client
- Secure MQTT Client
Examples
- SharkMQ LED Demo: Secure control of LEDs on your mbed board using a browser.
- WebSocket Client: Connect to ELIZA the Psychotherapist
Limitations
SharkSSL-Lite includes a limited set of ciphers. To use SharkSSL-Lite, the peer side must support Elliptic Curve Cryptography (ECC) and you must use ECC certificates. The peer side must also support the new ChaCha20/Poly1305 cipher combination.
ChaCha20 and Poly1305 for TLS is published RFC 7905. The development of this new cipher was a response to many attacks discovered against other widely used TLS cipher suites. ChaCha20 is the cipher and Poly1305 is an authenticated encryption mode.
SharkSSL-Lite occupies less than 20kB, while maintaining full x.509 authentication. The ChaCha20/Poly1305 cipher software implementation is equally as fast as many hardware accelerated AES engines.
Creating ECC Certificates for SharkSSL-Lite
The following video shows how to create an Elliptic Curve Cryptography (ECC) certificate for a server, how to install the certificate in the server, and how to make the mbed clients connecting to the server trust this certificate. The server in this video is installed on a private/personal computer on a private network for test purposes. The video was produced for the embedded.com article How to run your own secure IoT cloud server.
inc/SharkSslCrypto.h@1:d5e0e1dcf0d6, 2016-05-23 (annotated)
- Committer:
- wini
- Date:
- Mon May 23 13:56:30 2016 +0000
- Revision:
- 1:d5e0e1dcf0d6
- Parent:
- 0:e0adec41ad6b
Type conflict fix (U8-U32) for latest mbed release.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wini | 0:e0adec41ad6b | 1 | /* |
wini | 0:e0adec41ad6b | 2 | * ____ _________ __ _ |
wini | 0:e0adec41ad6b | 3 | * / __ \___ ____ _/ /_ __(_)___ ___ ___ / / ____ ____ _(_)____ |
wini | 0:e0adec41ad6b | 4 | * / /_/ / _ \/ __ `/ / / / / / __ `__ \/ _ \/ / / __ \/ __ `/ / ___/ |
wini | 0:e0adec41ad6b | 5 | * / _, _/ __/ /_/ / / / / / / / / / / / __/ /___/ /_/ / /_/ / / /__ |
wini | 0:e0adec41ad6b | 6 | * /_/ |_|\___/\__,_/_/ /_/ /_/_/ /_/ /_/\___/_____/\____/\__, /_/\___/ |
wini | 0:e0adec41ad6b | 7 | * /____/ |
wini | 0:e0adec41ad6b | 8 | * |
wini | 0:e0adec41ad6b | 9 | * SharkSSL Embedded SSL/TLS Stack |
wini | 0:e0adec41ad6b | 10 | **************************************************************************** |
wini | 0:e0adec41ad6b | 11 | * PROGRAM MODULE |
wini | 0:e0adec41ad6b | 12 | * |
wini | 0:e0adec41ad6b | 13 | * $Id: SharkSslCrypto.h 3686 2015-04-27 06:35:45Z gianluca $ |
wini | 0:e0adec41ad6b | 14 | * |
wini | 0:e0adec41ad6b | 15 | * COPYRIGHT: Real Time Logic LLC, 2010 - 2013 |
wini | 0:e0adec41ad6b | 16 | * |
wini | 0:e0adec41ad6b | 17 | * This software is copyrighted by and is the sole property of Real |
wini | 0:e0adec41ad6b | 18 | * Time Logic LLC. All rights, title, ownership, or other interests in |
wini | 0:e0adec41ad6b | 19 | * the software remain the property of Real Time Logic LLC. This |
wini | 0:e0adec41ad6b | 20 | * software may only be used in accordance with the terms and |
wini | 0:e0adec41ad6b | 21 | * conditions stipulated in the corresponding license agreement under |
wini | 0:e0adec41ad6b | 22 | * which the software has been supplied. Any unauthorized use, |
wini | 0:e0adec41ad6b | 23 | * duplication, transmission, distribution, or disclosure of this |
wini | 0:e0adec41ad6b | 24 | * software is expressly forbidden. |
wini | 0:e0adec41ad6b | 25 | * |
wini | 0:e0adec41ad6b | 26 | * This Copyright notice may not be removed or modified without prior |
wini | 0:e0adec41ad6b | 27 | * written consent of Real Time Logic LLC. |
wini | 0:e0adec41ad6b | 28 | * |
wini | 0:e0adec41ad6b | 29 | * Real Time Logic LLC. reserves the right to modify this software |
wini | 0:e0adec41ad6b | 30 | * without notice. |
wini | 0:e0adec41ad6b | 31 | * |
wini | 0:e0adec41ad6b | 32 | * http://www.realtimelogic.com |
wini | 0:e0adec41ad6b | 33 | * http://www.sharkssl.com |
wini | 0:e0adec41ad6b | 34 | **************************************************************************** |
wini | 0:e0adec41ad6b | 35 | * |
wini | 0:e0adec41ad6b | 36 | */ |
wini | 0:e0adec41ad6b | 37 | #ifndef _SharkSslCrypto_h |
wini | 0:e0adec41ad6b | 38 | #define _SharkSslCrypto_h |
wini | 0:e0adec41ad6b | 39 | |
wini | 0:e0adec41ad6b | 40 | #define SHARKSSL_LIB 1 |
wini | 0:e0adec41ad6b | 41 | #include "SharkSSL.h" |
wini | 0:e0adec41ad6b | 42 | |
wini | 0:e0adec41ad6b | 43 | |
wini | 0:e0adec41ad6b | 44 | #define SHARKSSL_MD5_HASH_LEN 16 |
wini | 0:e0adec41ad6b | 45 | #define SHARKSSL_SHA1_HASH_LEN 20 |
wini | 0:e0adec41ad6b | 46 | #define SHARKSSL_SHA256_HASH_LEN 32 |
wini | 0:e0adec41ad6b | 47 | #define SHARKSSL_SHA384_HASH_LEN 48 |
wini | 0:e0adec41ad6b | 48 | #define SHARKSSL_SHA512_HASH_LEN 64 |
wini | 0:e0adec41ad6b | 49 | #define SHARKSSL_POLY1305_HASH_LEN 16 |
wini | 0:e0adec41ad6b | 50 | |
wini | 0:e0adec41ad6b | 51 | |
wini | 0:e0adec41ad6b | 52 | #if SHARKSSL_USE_MD5 |
wini | 0:e0adec41ad6b | 53 | /** MD5 |
wini | 0:e0adec41ad6b | 54 | \ingroup RayCryptoMD5 |
wini | 0:e0adec41ad6b | 55 | */ |
wini | 0:e0adec41ad6b | 56 | typedef struct SharkSslMd5Ctx |
wini | 0:e0adec41ad6b | 57 | { |
wini | 0:e0adec41ad6b | 58 | U32 total[2]; |
wini | 0:e0adec41ad6b | 59 | U32 state[4]; |
wini | 0:e0adec41ad6b | 60 | U8 buffer[64]; |
wini | 0:e0adec41ad6b | 61 | } SharkSslMd5Ctx; |
wini | 0:e0adec41ad6b | 62 | #endif |
wini | 0:e0adec41ad6b | 63 | |
wini | 0:e0adec41ad6b | 64 | |
wini | 0:e0adec41ad6b | 65 | #if SHARKSSL_USE_SHA1 |
wini | 0:e0adec41ad6b | 66 | /** SHA1 |
wini | 0:e0adec41ad6b | 67 | \ingroup RayCryptoSHA1 |
wini | 0:e0adec41ad6b | 68 | */ |
wini | 0:e0adec41ad6b | 69 | typedef struct SharkSslSha1Ctx |
wini | 0:e0adec41ad6b | 70 | { |
wini | 0:e0adec41ad6b | 71 | U32 total[2]; |
wini | 0:e0adec41ad6b | 72 | U32 state[5]; |
wini | 0:e0adec41ad6b | 73 | U8 buffer[64]; |
wini | 0:e0adec41ad6b | 74 | } SharkSslSha1Ctx; |
wini | 0:e0adec41ad6b | 75 | #endif |
wini | 0:e0adec41ad6b | 76 | |
wini | 0:e0adec41ad6b | 77 | |
wini | 0:e0adec41ad6b | 78 | #if SHARKSSL_USE_SHA_256 |
wini | 0:e0adec41ad6b | 79 | /** SHA256 |
wini | 0:e0adec41ad6b | 80 | \ingroup RayCryptoSHA256 |
wini | 0:e0adec41ad6b | 81 | */ |
wini | 0:e0adec41ad6b | 82 | typedef struct SharkSslSha256Ctx |
wini | 0:e0adec41ad6b | 83 | { |
wini | 0:e0adec41ad6b | 84 | U32 total[2]; |
wini | 0:e0adec41ad6b | 85 | U32 state[8]; |
wini | 0:e0adec41ad6b | 86 | U8 buffer[64]; |
wini | 0:e0adec41ad6b | 87 | } SharkSslSha256Ctx; |
wini | 0:e0adec41ad6b | 88 | #endif |
wini | 0:e0adec41ad6b | 89 | |
wini | 0:e0adec41ad6b | 90 | |
wini | 0:e0adec41ad6b | 91 | #if (SHARKSSL_USE_SHA_384 || SHARKSSL_USE_SHA_512) |
wini | 0:e0adec41ad6b | 92 | /** SHA384 |
wini | 0:e0adec41ad6b | 93 | \ingroup RayCryptoSHA384 |
wini | 0:e0adec41ad6b | 94 | */ |
wini | 0:e0adec41ad6b | 95 | typedef struct SharkSslSha384Ctx |
wini | 0:e0adec41ad6b | 96 | { |
wini | 0:e0adec41ad6b | 97 | U32 total[4]; |
wini | 0:e0adec41ad6b | 98 | U64 state[8]; |
wini | 0:e0adec41ad6b | 99 | U8 buffer[128]; |
wini | 0:e0adec41ad6b | 100 | } SharkSslSha384Ctx; |
wini | 0:e0adec41ad6b | 101 | #endif |
wini | 0:e0adec41ad6b | 102 | |
wini | 0:e0adec41ad6b | 103 | |
wini | 0:e0adec41ad6b | 104 | #if SHARKSSL_USE_SHA_512 |
wini | 0:e0adec41ad6b | 105 | /** SHA512 |
wini | 0:e0adec41ad6b | 106 | \ingroup RayCryptoSHA512 |
wini | 0:e0adec41ad6b | 107 | */ |
wini | 0:e0adec41ad6b | 108 | typedef struct SharkSslSha384Ctx SharkSslSha512Ctx; |
wini | 0:e0adec41ad6b | 109 | #endif |
wini | 0:e0adec41ad6b | 110 | |
wini | 0:e0adec41ad6b | 111 | |
wini | 0:e0adec41ad6b | 112 | #if SHARKSSL_USE_POLY1305 |
wini | 0:e0adec41ad6b | 113 | /** POLY1305 |
wini | 0:e0adec41ad6b | 114 | \ingroup RayCryptoPOLY1305 |
wini | 0:e0adec41ad6b | 115 | */ |
wini | 0:e0adec41ad6b | 116 | typedef struct SharkSslPoly1305Ctx |
wini | 0:e0adec41ad6b | 117 | { |
wini | 0:e0adec41ad6b | 118 | U32 r[5]; |
wini | 0:e0adec41ad6b | 119 | U32 key[4]; |
wini | 0:e0adec41ad6b | 120 | U32 nonce[4]; |
wini | 0:e0adec41ad6b | 121 | U8 buffer[16]; |
wini | 0:e0adec41ad6b | 122 | U8 flag, blen; |
wini | 0:e0adec41ad6b | 123 | } SharkSslPoly1305Ctx; |
wini | 0:e0adec41ad6b | 124 | #endif |
wini | 0:e0adec41ad6b | 125 | |
wini | 0:e0adec41ad6b | 126 | |
wini | 0:e0adec41ad6b | 127 | #if SHARKSSL_USE_CHACHA20 |
wini | 0:e0adec41ad6b | 128 | /** CHACHA20 |
wini | 0:e0adec41ad6b | 129 | \ingroup RayCryptoCHACHA20 |
wini | 0:e0adec41ad6b | 130 | */ |
wini | 0:e0adec41ad6b | 131 | typedef struct |
wini | 0:e0adec41ad6b | 132 | { |
wini | 0:e0adec41ad6b | 133 | U32 state[16]; |
wini | 0:e0adec41ad6b | 134 | } SharkSslChaChaCtx; |
wini | 0:e0adec41ad6b | 135 | #endif |
wini | 0:e0adec41ad6b | 136 | |
wini | 0:e0adec41ad6b | 137 | |
wini | 0:e0adec41ad6b | 138 | #if SHARKSSL_USE_ARC4 |
wini | 0:e0adec41ad6b | 139 | /** ARC4 |
wini | 0:e0adec41ad6b | 140 | \ingroup RayCryptoARC4 |
wini | 0:e0adec41ad6b | 141 | */ |
wini | 0:e0adec41ad6b | 142 | typedef struct SharkSslArc4Ctx |
wini | 0:e0adec41ad6b | 143 | { |
wini | 0:e0adec41ad6b | 144 | U8 x; |
wini | 0:e0adec41ad6b | 145 | U8 y; |
wini | 0:e0adec41ad6b | 146 | U8 b[256]; |
wini | 0:e0adec41ad6b | 147 | } SharkSslArc4Ctx; |
wini | 0:e0adec41ad6b | 148 | #endif |
wini | 0:e0adec41ad6b | 149 | |
wini | 0:e0adec41ad6b | 150 | |
wini | 0:e0adec41ad6b | 151 | #if (SHARKSSL_USE_DES || SHARKSSL_USE_3DES) |
wini | 0:e0adec41ad6b | 152 | /** DES |
wini | 0:e0adec41ad6b | 153 | \ingroup RayCryptoDES |
wini | 0:e0adec41ad6b | 154 | */ |
wini | 0:e0adec41ad6b | 155 | typedef struct SharkSslDesCtx |
wini | 0:e0adec41ad6b | 156 | { |
wini | 0:e0adec41ad6b | 157 | #if SHARKSSL_NOPACK |
wini | 0:e0adec41ad6b | 158 | U32 key[96]; /* Max size == 3DES */ |
wini | 0:e0adec41ad6b | 159 | U8 tdea; |
wini | 0:e0adec41ad6b | 160 | #else |
wini | 0:e0adec41ad6b | 161 | |
wini | 0:e0adec41ad6b | 162 | #if (SHARKSSL_USE_CAU || SHARKSSL_USE_MMCAU) |
wini | 0:e0adec41ad6b | 163 | #if SHARKSSL_USE_3DES |
wini | 0:e0adec41ad6b | 164 | U32 key[6]; |
wini | 0:e0adec41ad6b | 165 | #else |
wini | 0:e0adec41ad6b | 166 | U32 key[2]; |
wini | 0:e0adec41ad6b | 167 | #endif |
wini | 0:e0adec41ad6b | 168 | |
wini | 0:e0adec41ad6b | 169 | #else |
wini | 0:e0adec41ad6b | 170 | |
wini | 0:e0adec41ad6b | 171 | #if SHARKSSL_USE_3DES |
wini | 0:e0adec41ad6b | 172 | U32 key[96]; |
wini | 0:e0adec41ad6b | 173 | #else |
wini | 0:e0adec41ad6b | 174 | U32 key[32]; |
wini | 0:e0adec41ad6b | 175 | #endif |
wini | 0:e0adec41ad6b | 176 | #endif |
wini | 0:e0adec41ad6b | 177 | |
wini | 0:e0adec41ad6b | 178 | #if (SHARKSSL_USE_DES && SHARKSSL_USE_3DES) |
wini | 0:e0adec41ad6b | 179 | U8 tdea; |
wini | 0:e0adec41ad6b | 180 | #endif |
wini | 0:e0adec41ad6b | 181 | |
wini | 0:e0adec41ad6b | 182 | #endif |
wini | 0:e0adec41ad6b | 183 | } SharkSslDesCtx; |
wini | 0:e0adec41ad6b | 184 | |
wini | 0:e0adec41ad6b | 185 | |
wini | 0:e0adec41ad6b | 186 | /* Encrypt/decrypt type */ |
wini | 0:e0adec41ad6b | 187 | typedef enum |
wini | 0:e0adec41ad6b | 188 | { |
wini | 0:e0adec41ad6b | 189 | SharkSslDesCtx_Decrypt, /*!< Decrypt */ |
wini | 0:e0adec41ad6b | 190 | SharkSslDesCtx_Encrypt /*!< Encrypt */ |
wini | 0:e0adec41ad6b | 191 | } SharkSslDesCtx_Type; |
wini | 0:e0adec41ad6b | 192 | #endif |
wini | 0:e0adec41ad6b | 193 | |
wini | 0:e0adec41ad6b | 194 | |
wini | 0:e0adec41ad6b | 195 | #if (SHARKSSL_USE_AES_256 || SHARKSSL_USE_AES_192 || SHARKSSL_USE_AES_128) |
wini | 0:e0adec41ad6b | 196 | /** AES |
wini | 0:e0adec41ad6b | 197 | \ingroup RayCryptoAES |
wini | 0:e0adec41ad6b | 198 | */ |
wini | 0:e0adec41ad6b | 199 | typedef struct SharkSslAesCtx |
wini | 0:e0adec41ad6b | 200 | { |
wini | 0:e0adec41ad6b | 201 | #if (SHARKSSL_USE_AES_256 || SHARKSSL_NOPACK) |
wini | 0:e0adec41ad6b | 202 | U32 key[60]; |
wini | 0:e0adec41ad6b | 203 | #elif SHARKSSL_USE_AES_192 |
wini | 0:e0adec41ad6b | 204 | U32 key[52]; |
wini | 0:e0adec41ad6b | 205 | #else |
wini | 0:e0adec41ad6b | 206 | U32 key[44]; |
wini | 0:e0adec41ad6b | 207 | #endif |
wini | 0:e0adec41ad6b | 208 | U16 nr; |
wini | 0:e0adec41ad6b | 209 | } SharkSslAesCtx; |
wini | 0:e0adec41ad6b | 210 | |
wini | 0:e0adec41ad6b | 211 | typedef enum |
wini | 0:e0adec41ad6b | 212 | { |
wini | 0:e0adec41ad6b | 213 | SharkSslAesCtx_Decrypt, |
wini | 0:e0adec41ad6b | 214 | SharkSslAesCtx_Encrypt |
wini | 0:e0adec41ad6b | 215 | } SharkSslAesCtx_Type; |
wini | 0:e0adec41ad6b | 216 | |
wini | 0:e0adec41ad6b | 217 | #if SHARKSSL_ENABLE_AES_GCM |
wini | 0:e0adec41ad6b | 218 | /** AesGcmCtx |
wini | 0:e0adec41ad6b | 219 | \ingroup RayCryptoAesGcm |
wini | 0:e0adec41ad6b | 220 | */ |
wini | 0:e0adec41ad6b | 221 | typedef struct SharkSslAesGcmCtx |
wini | 0:e0adec41ad6b | 222 | { |
wini | 0:e0adec41ad6b | 223 | SharkSslAesCtx super; |
wini | 0:e0adec41ad6b | 224 | U8 M0[16][16]; |
wini | 0:e0adec41ad6b | 225 | } SharkSslAesGcmCtx; |
wini | 0:e0adec41ad6b | 226 | #endif |
wini | 0:e0adec41ad6b | 227 | |
wini | 0:e0adec41ad6b | 228 | #if SHARKSSL_ENABLE_AES_CCM |
wini | 0:e0adec41ad6b | 229 | /** AesCcmCtx |
wini | 0:e0adec41ad6b | 230 | \ingroup RayCryptoAesCcm |
wini | 0:e0adec41ad6b | 231 | */ |
wini | 0:e0adec41ad6b | 232 | typedef struct SharkSslAesCcmCtx |
wini | 0:e0adec41ad6b | 233 | { |
wini | 0:e0adec41ad6b | 234 | SharkSslAesCtx super; |
wini | 0:e0adec41ad6b | 235 | U8 tagLen; |
wini | 0:e0adec41ad6b | 236 | } SharkSslAesCcmCtx; |
wini | 0:e0adec41ad6b | 237 | #endif |
wini | 0:e0adec41ad6b | 238 | #endif /* SHARKSSL_USE_AES_256 || SHARKSSL_USE_AES_192 || SHARKSSL_USE_AES_128 */ |
wini | 0:e0adec41ad6b | 239 | |
wini | 0:e0adec41ad6b | 240 | |
wini | 0:e0adec41ad6b | 241 | #ifdef __cplusplus |
wini | 0:e0adec41ad6b | 242 | extern "C" { |
wini | 0:e0adec41ad6b | 243 | #endif |
wini | 0:e0adec41ad6b | 244 | |
wini | 0:e0adec41ad6b | 245 | /* SharkSslCrypto.c */ |
wini | 0:e0adec41ad6b | 246 | SHARKSSL_API int sharkssl_entropy(U32); |
wini | 0:e0adec41ad6b | 247 | SHARKSSL_API int sharkssl_rng(U8*, U16); |
wini | 0:e0adec41ad6b | 248 | SHARKSSL_API int sharkssl_kmemcmp(const void *a, const void *b, U32 n); |
wini | 0:e0adec41ad6b | 249 | |
wini | 0:e0adec41ad6b | 250 | |
wini | 0:e0adec41ad6b | 251 | #if SHARKSSL_USE_MD5 |
wini | 0:e0adec41ad6b | 252 | /** Initialize |
wini | 0:e0adec41ad6b | 253 | \ingroup RayCryptoMD5 |
wini | 0:e0adec41ad6b | 254 | |
wini | 0:e0adec41ad6b | 255 | \param ctx Uninitialized data of size sizeof(SharkSslMd5Ctx). |
wini | 0:e0adec41ad6b | 256 | */ |
wini | 0:e0adec41ad6b | 257 | SHARKSSL_API void SharkSslMd5Ctx_constructor(SharkSslMd5Ctx* ctx); |
wini | 0:e0adec41ad6b | 258 | |
wini | 0:e0adec41ad6b | 259 | /** append |
wini | 0:e0adec41ad6b | 260 | \ingroup RayCryptoMD5 |
wini | 0:e0adec41ad6b | 261 | */ |
wini | 0:e0adec41ad6b | 262 | SHARKSSL_API void SharkSslMd5Ctx_append(SharkSslMd5Ctx* ctx, const U8* data, U32 len); |
wini | 0:e0adec41ad6b | 263 | |
wini | 0:e0adec41ad6b | 264 | /** finish |
wini | 0:e0adec41ad6b | 265 | \ingroup RayCryptoMD5 |
wini | 0:e0adec41ad6b | 266 | */ |
wini | 0:e0adec41ad6b | 267 | SHARKSSL_API void SharkSslMd5Ctx_finish(SharkSslMd5Ctx* ctx, U8 digest[SHARKSSL_MD5_HASH_LEN]); |
wini | 0:e0adec41ad6b | 268 | |
wini | 0:e0adec41ad6b | 269 | /** md5 |
wini | 0:e0adec41ad6b | 270 | \ingroup RayCryptoMD5 |
wini | 0:e0adec41ad6b | 271 | */ |
wini | 0:e0adec41ad6b | 272 | SHARKSSL_API int sharkssl_md5(const U8*, U16, U8*); |
wini | 0:e0adec41ad6b | 273 | #endif |
wini | 0:e0adec41ad6b | 274 | |
wini | 0:e0adec41ad6b | 275 | #if SHARKSSL_USE_SHA1 |
wini | 0:e0adec41ad6b | 276 | /** Initialize |
wini | 0:e0adec41ad6b | 277 | \ingroup RayCryptoSHA1 |
wini | 0:e0adec41ad6b | 278 | |
wini | 0:e0adec41ad6b | 279 | \param ctx Uninitialized data of size sizeof(SharkSslSha1Ctx). |
wini | 0:e0adec41ad6b | 280 | */ |
wini | 0:e0adec41ad6b | 281 | SHARKSSL_API void SharkSslSha1Ctx_constructor(SharkSslSha1Ctx* ctx); |
wini | 0:e0adec41ad6b | 282 | |
wini | 0:e0adec41ad6b | 283 | /** append |
wini | 0:e0adec41ad6b | 284 | \ingroup RayCryptoSHA1 |
wini | 0:e0adec41ad6b | 285 | */ |
wini | 0:e0adec41ad6b | 286 | SHARKSSL_API void SharkSslSha1Ctx_append(SharkSslSha1Ctx* ctx, const U8* data, U32 len); |
wini | 0:e0adec41ad6b | 287 | |
wini | 0:e0adec41ad6b | 288 | /** finish |
wini | 0:e0adec41ad6b | 289 | \ingroup RayCryptoSHA1 |
wini | 0:e0adec41ad6b | 290 | */ |
wini | 0:e0adec41ad6b | 291 | SHARKSSL_API void SharkSslSha1Ctx_finish(SharkSslSha1Ctx*, U8 digest[SHARKSSL_SHA1_HASH_LEN]); |
wini | 0:e0adec41ad6b | 292 | |
wini | 0:e0adec41ad6b | 293 | /** sha1 |
wini | 0:e0adec41ad6b | 294 | \ingroup RayCryptoSHA1 |
wini | 0:e0adec41ad6b | 295 | */ |
wini | 0:e0adec41ad6b | 296 | SHARKSSL_API int sharkssl_sha1(const U8*, U16, U8*); |
wini | 0:e0adec41ad6b | 297 | #endif |
wini | 0:e0adec41ad6b | 298 | |
wini | 0:e0adec41ad6b | 299 | #if SHARKSSL_USE_SHA_256 |
wini | 0:e0adec41ad6b | 300 | /** Initialize |
wini | 0:e0adec41ad6b | 301 | \ingroup RayCryptoSHA256 |
wini | 0:e0adec41ad6b | 302 | |
wini | 0:e0adec41ad6b | 303 | \param ctx Uninitialized data of size sizeof(SharkSslSha256Ctx). |
wini | 0:e0adec41ad6b | 304 | */ |
wini | 0:e0adec41ad6b | 305 | SHARKSSL_API void SharkSslSha256Ctx_constructor(SharkSslSha256Ctx* ctx); |
wini | 0:e0adec41ad6b | 306 | |
wini | 0:e0adec41ad6b | 307 | /** append |
wini | 0:e0adec41ad6b | 308 | \ingroup RayCryptoSHA256 |
wini | 0:e0adec41ad6b | 309 | */ |
wini | 0:e0adec41ad6b | 310 | SHARKSSL_API void SharkSslSha256Ctx_append(SharkSslSha256Ctx*, const U8* data, U32 len); |
wini | 0:e0adec41ad6b | 311 | |
wini | 0:e0adec41ad6b | 312 | /** finish |
wini | 0:e0adec41ad6b | 313 | \ingroup RayCryptoSHA256 |
wini | 0:e0adec41ad6b | 314 | */ |
wini | 0:e0adec41ad6b | 315 | SHARKSSL_API void SharkSslSha256Ctx_finish(SharkSslSha256Ctx*, U8 digest[SHARKSSL_SHA256_HASH_LEN]); |
wini | 0:e0adec41ad6b | 316 | |
wini | 0:e0adec41ad6b | 317 | /** sha256 |
wini | 0:e0adec41ad6b | 318 | \ingroup RayCryptoSHA256 |
wini | 0:e0adec41ad6b | 319 | */ |
wini | 0:e0adec41ad6b | 320 | SHARKSSL_API int sharkssl_sha256(const U8*, U16, U8*); |
wini | 0:e0adec41ad6b | 321 | #endif |
wini | 0:e0adec41ad6b | 322 | |
wini | 0:e0adec41ad6b | 323 | #if SHARKSSL_USE_SHA_384 |
wini | 0:e0adec41ad6b | 324 | /** Initialize |
wini | 0:e0adec41ad6b | 325 | \ingroup RayCryptoSHA384 |
wini | 0:e0adec41ad6b | 326 | |
wini | 0:e0adec41ad6b | 327 | \param ctx Uninitialized data of size sizeof(SharkSslSha384Ctx). |
wini | 0:e0adec41ad6b | 328 | */ |
wini | 0:e0adec41ad6b | 329 | SHARKSSL_API void SharkSslSha384Ctx_constructor(SharkSslSha384Ctx* ctx); |
wini | 0:e0adec41ad6b | 330 | |
wini | 0:e0adec41ad6b | 331 | /** append |
wini | 0:e0adec41ad6b | 332 | \ingroup RayCryptoSHA384 |
wini | 0:e0adec41ad6b | 333 | */ |
wini | 0:e0adec41ad6b | 334 | SHARKSSL_API void SharkSslSha384Ctx_append(SharkSslSha384Ctx*, const U8* data, U32 len); |
wini | 0:e0adec41ad6b | 335 | |
wini | 0:e0adec41ad6b | 336 | /** finish |
wini | 0:e0adec41ad6b | 337 | \ingroup RayCryptoSHA384 |
wini | 0:e0adec41ad6b | 338 | */ |
wini | 0:e0adec41ad6b | 339 | SHARKSSL_API void SharkSslSha384Ctx_finish(SharkSslSha384Ctx*, U8 digest[SHARKSSL_SHA384_HASH_LEN]); |
wini | 0:e0adec41ad6b | 340 | |
wini | 0:e0adec41ad6b | 341 | /** sha384 |
wini | 0:e0adec41ad6b | 342 | \ingroup RayCryptoSHA384 |
wini | 0:e0adec41ad6b | 343 | */ |
wini | 0:e0adec41ad6b | 344 | SHARKSSL_API int sharkssl_sha384(const U8*, U16, U8*); |
wini | 0:e0adec41ad6b | 345 | #endif |
wini | 0:e0adec41ad6b | 346 | |
wini | 0:e0adec41ad6b | 347 | #if SHARKSSL_USE_SHA_512 |
wini | 0:e0adec41ad6b | 348 | /** Initialize |
wini | 0:e0adec41ad6b | 349 | \ingroup RayCryptoSHA512 |
wini | 0:e0adec41ad6b | 350 | |
wini | 0:e0adec41ad6b | 351 | \param ctx Uninitialized data of size sizeof(SharkSslSha512Ctx). |
wini | 0:e0adec41ad6b | 352 | */ |
wini | 0:e0adec41ad6b | 353 | SHARKSSL_API void SharkSslSha512Ctx_constructor(SharkSslSha512Ctx* ctx); |
wini | 0:e0adec41ad6b | 354 | |
wini | 0:e0adec41ad6b | 355 | /** append |
wini | 0:e0adec41ad6b | 356 | \ingroup RayCryptoSHA512 |
wini | 0:e0adec41ad6b | 357 | */ |
wini | 0:e0adec41ad6b | 358 | #define SharkSslSha512Ctx_append(ctx, d, l) \ |
wini | 0:e0adec41ad6b | 359 | SharkSslSha384Ctx_append((SharkSslSha384Ctx*)ctx, d, l) |
wini | 0:e0adec41ad6b | 360 | |
wini | 0:e0adec41ad6b | 361 | /** finish |
wini | 0:e0adec41ad6b | 362 | \ingroup RayCryptoSHA512 |
wini | 0:e0adec41ad6b | 363 | */ |
wini | 0:e0adec41ad6b | 364 | SHARKSSL_API void SharkSslSha512Ctx_finish(SharkSslSha512Ctx*, U8 digest[SHARKSSL_SHA512_HASH_LEN]); |
wini | 0:e0adec41ad6b | 365 | |
wini | 0:e0adec41ad6b | 366 | /** sha512 |
wini | 0:e0adec41ad6b | 367 | \ingroup RayCryptoSHA512 |
wini | 0:e0adec41ad6b | 368 | */ |
wini | 0:e0adec41ad6b | 369 | SHARKSSL_API int sharkssl_sha512(const U8*, U16, U8*); |
wini | 0:e0adec41ad6b | 370 | #endif |
wini | 0:e0adec41ad6b | 371 | |
wini | 0:e0adec41ad6b | 372 | #if SHARKSSL_USE_POLY1305 |
wini | 0:e0adec41ad6b | 373 | /** Initialize |
wini | 0:e0adec41ad6b | 374 | \ingroup RayCryptoPOLY1305 |
wini | 0:e0adec41ad6b | 375 | |
wini | 0:e0adec41ad6b | 376 | \param ctx Uninitialized data of size sizeof(SharkSslPoly1305Ctx). |
wini | 0:e0adec41ad6b | 377 | \param key 16-byte key + 16-byte nonce |
wini | 0:e0adec41ad6b | 378 | */ |
wini | 0:e0adec41ad6b | 379 | SHARKSSL_API void SharkSslPoly1305Ctx_constructor(SharkSslPoly1305Ctx *ctx, const U8 key[32]); |
wini | 0:e0adec41ad6b | 380 | |
wini | 0:e0adec41ad6b | 381 | #define SharkSslPoly1305Ctx_destructor(o) memset(o, 0, sizeof(SharkSslPoly1305Ctx)) |
wini | 0:e0adec41ad6b | 382 | |
wini | 0:e0adec41ad6b | 383 | /** append |
wini | 0:e0adec41ad6b | 384 | \ingroup RayCryptoPOLY1305 |
wini | 0:e0adec41ad6b | 385 | */ |
wini | 0:e0adec41ad6b | 386 | SHARKSSL_API void SharkSslPoly1305Ctx_append(SharkSslPoly1305Ctx *ctx, const U8 *in, U32 len); |
wini | 0:e0adec41ad6b | 387 | |
wini | 0:e0adec41ad6b | 388 | /** finish |
wini | 0:e0adec41ad6b | 389 | \ingroup RayCryptoPOLY1305 |
wini | 0:e0adec41ad6b | 390 | */ |
wini | 0:e0adec41ad6b | 391 | SHARKSSL_API void SharkSslPoly1305Ctx_finish(SharkSslPoly1305Ctx *ctx, U8 digest[SHARKSSL_POLY1305_HASH_LEN]); |
wini | 0:e0adec41ad6b | 392 | |
wini | 0:e0adec41ad6b | 393 | /** poly1305 |
wini | 0:e0adec41ad6b | 394 | \ingroup RayCryptoPOLY1305 |
wini | 0:e0adec41ad6b | 395 | */ |
wini | 0:e0adec41ad6b | 396 | SHARKSSL_API int sharkssl_poly1305(const U8 *data, U16 len, U8 *digest, const U8 key[32]); |
wini | 0:e0adec41ad6b | 397 | #endif |
wini | 0:e0adec41ad6b | 398 | |
wini | 0:e0adec41ad6b | 399 | #if SHARKSSL_USE_CHACHA20 |
wini | 0:e0adec41ad6b | 400 | /** Initialize |
wini | 0:e0adec41ad6b | 401 | \ingroup RayCryptoCHACHA20 |
wini | 0:e0adec41ad6b | 402 | |
wini | 0:e0adec41ad6b | 403 | \param ctx Uninitialized data of size sizeof(SharkSslChaChaCtx) |
wini | 0:e0adec41ad6b | 404 | \param key 16- or 32-byte key |
wini | 0:e0adec41ad6b | 405 | \param keyLen the key length in bytes (either 16 or 32) |
wini | 0:e0adec41ad6b | 406 | */ |
wini | 0:e0adec41ad6b | 407 | SHARKSSL_API void SharkSslChaChaCtx_constructor(SharkSslChaChaCtx *ctx, |
wini | 0:e0adec41ad6b | 408 | const U8 *key, U8 keyLen); |
wini | 0:e0adec41ad6b | 409 | |
wini | 0:e0adec41ad6b | 410 | #define SharkSslChaChaCtx_destructor(ctx) memset(ctx, 0, sizeof(SharkSslChaChaCtx)) |
wini | 0:e0adec41ad6b | 411 | |
wini | 0:e0adec41ad6b | 412 | /** Initialize |
wini | 0:e0adec41ad6b | 413 | \ingroup RayCryptoCHACHA20 |
wini | 0:e0adec41ad6b | 414 | |
wini | 0:e0adec41ad6b | 415 | \param ctx Initialized data of size sizeof(SharkSslChaChaCtx) |
wini | 0:e0adec41ad6b | 416 | \param IV 8-byte initialization vector |
wini | 0:e0adec41ad6b | 417 | */ |
wini | 0:e0adec41ad6b | 418 | SHARKSSL_API void SharkSslChaChaCtx_setIV(SharkSslChaChaCtx *ctx, const U8 IV[8]); |
wini | 0:e0adec41ad6b | 419 | |
wini | 0:e0adec41ad6b | 420 | /** Encrypt or decrypt |
wini | 0:e0adec41ad6b | 421 | \ingroup RayCryptoCHACHA20 |
wini | 0:e0adec41ad6b | 422 | */ |
wini | 0:e0adec41ad6b | 423 | SHARKSSL_API void SharkSslChaChaCtx_crypt( |
wini | 0:e0adec41ad6b | 424 | SharkSslChaChaCtx *ctx, const U8 *input, U8 *output, U32 len); |
wini | 0:e0adec41ad6b | 425 | #endif |
wini | 0:e0adec41ad6b | 426 | |
wini | 0:e0adec41ad6b | 427 | #if SHARKSSL_USE_ARC4 |
wini | 0:e0adec41ad6b | 428 | /** Initialize |
wini | 0:e0adec41ad6b | 429 | \ingroup RayCryptoARC4 |
wini | 0:e0adec41ad6b | 430 | |
wini | 0:e0adec41ad6b | 431 | */ |
wini | 0:e0adec41ad6b | 432 | SHARKSSL_API void SharkSslArc4Ctx_constructor(SharkSslArc4Ctx *ctx, |
wini | 0:e0adec41ad6b | 433 | const U8 *key, U8 keyLen); |
wini | 0:e0adec41ad6b | 434 | |
wini | 0:e0adec41ad6b | 435 | #define SharkSslArc4Ctx_destructor(ctx) memset(ctx, 0, sizeof(SharkSslArc4Ctx)) |
wini | 0:e0adec41ad6b | 436 | |
wini | 0:e0adec41ad6b | 437 | /** Encrypt or decrypt |
wini | 0:e0adec41ad6b | 438 | \ingroup RayCryptoARC4 |
wini | 0:e0adec41ad6b | 439 | */ |
wini | 0:e0adec41ad6b | 440 | SHARKSSL_API void SharkSslArc4Ctx_crypt( |
wini | 0:e0adec41ad6b | 441 | SharkSslArc4Ctx *ctx, U8 *input, U8 *output, U16 len); |
wini | 0:e0adec41ad6b | 442 | #endif |
wini | 0:e0adec41ad6b | 443 | |
wini | 0:e0adec41ad6b | 444 | #if (SHARKSSL_USE_DES || SHARKSSL_USE_3DES) |
wini | 0:e0adec41ad6b | 445 | /** Initialize |
wini | 0:e0adec41ad6b | 446 | \ingroup RayCryptoDES |
wini | 0:e0adec41ad6b | 447 | |
wini | 0:e0adec41ad6b | 448 | \param ctx Uninitialized data of size sizeof(SharkSslDesCtx) |
wini | 0:e0adec41ad6b | 449 | \param type encrypt/decrypt |
wini | 0:e0adec41ad6b | 450 | \param key the encryption/decryption key |
wini | 0:e0adec41ad6b | 451 | \param keyLen 'key' length |
wini | 0:e0adec41ad6b | 452 | */ |
wini | 0:e0adec41ad6b | 453 | SHARKSSL_API void SharkSslDesCtx_constructor(SharkSslDesCtx *ctx, |
wini | 0:e0adec41ad6b | 454 | SharkSslDesCtx_Type type, |
wini | 0:e0adec41ad6b | 455 | const U8 *key, U8 keyLen); |
wini | 0:e0adec41ad6b | 456 | #define SharkSslDesCtx_destructor(ctx) memset(ctx, 0, sizeof(SharkSslDesCtx)) |
wini | 0:e0adec41ad6b | 457 | |
wini | 0:e0adec41ad6b | 458 | /** Encrypt |
wini | 0:e0adec41ad6b | 459 | \ingroup RayCryptoDES |
wini | 0:e0adec41ad6b | 460 | */ |
wini | 0:e0adec41ad6b | 461 | SHARKSSL_API void SharkSslDesCtx_encrypt( |
wini | 0:e0adec41ad6b | 462 | SharkSslDesCtx *ctx, U8 input[8], U8 output[8]); |
wini | 0:e0adec41ad6b | 463 | #if (SHARKSSL_USE_CAU || SHARKSSL_USE_MMCAU) |
wini | 0:e0adec41ad6b | 464 | |
wini | 0:e0adec41ad6b | 465 | /** Decrypt |
wini | 0:e0adec41ad6b | 466 | \ingroup RayCryptoDES |
wini | 0:e0adec41ad6b | 467 | */ |
wini | 0:e0adec41ad6b | 468 | SHARKSSL_API void SharkSslDesCtx_decrypt( |
wini | 0:e0adec41ad6b | 469 | SharkSslDesCtx *ctx, U8 input[8], U8 output[8]); |
wini | 0:e0adec41ad6b | 470 | #else |
wini | 0:e0adec41ad6b | 471 | #define SharkSslDesCtx_decrypt(ctx,i,o) SharkSslDesCtx_encrypt((ctx),(i),(o)) |
wini | 0:e0adec41ad6b | 472 | #endif |
wini | 0:e0adec41ad6b | 473 | |
wini | 0:e0adec41ad6b | 474 | /** Encrypt |
wini | 0:e0adec41ad6b | 475 | \ingroup RayCryptoDES |
wini | 0:e0adec41ad6b | 476 | */ |
wini | 0:e0adec41ad6b | 477 | SHARKSSL_API void SharkSslDesCtx_cbc_encrypt(SharkSslDesCtx *ctx, U8 vect[8], |
wini | 0:e0adec41ad6b | 478 | U8 *input, U8 *output, U16 len); |
wini | 0:e0adec41ad6b | 479 | |
wini | 0:e0adec41ad6b | 480 | /** Decrypt |
wini | 0:e0adec41ad6b | 481 | \ingroup RayCryptoDES |
wini | 0:e0adec41ad6b | 482 | */ |
wini | 0:e0adec41ad6b | 483 | SHARKSSL_API void SharkSslDesCtx_cbc_decrypt(SharkSslDesCtx *ctx, U8 vect[8], |
wini | 0:e0adec41ad6b | 484 | U8 *input, U8 *output, U16 len); |
wini | 0:e0adec41ad6b | 485 | #endif |
wini | 0:e0adec41ad6b | 486 | |
wini | 0:e0adec41ad6b | 487 | #if (SHARKSSL_USE_AES_256 || SHARKSSL_USE_AES_192 || SHARKSSL_USE_AES_128) |
wini | 0:e0adec41ad6b | 488 | /** Initialize |
wini | 0:e0adec41ad6b | 489 | \ingroup RayCryptoAES |
wini | 0:e0adec41ad6b | 490 | |
wini | 0:e0adec41ad6b | 491 | \param ctx Uninitialized data of size sizeof(SharkSslAesCtx) |
wini | 0:e0adec41ad6b | 492 | \param type encrypt/decrypt |
wini | 0:e0adec41ad6b | 493 | \param key the encryption/decryption key |
wini | 0:e0adec41ad6b | 494 | \param keyLen 'key' length |
wini | 0:e0adec41ad6b | 495 | */ |
wini | 0:e0adec41ad6b | 496 | SHARKSSL_API void SharkSslAesCtx_constructor(SharkSslAesCtx *ctx, |
wini | 0:e0adec41ad6b | 497 | SharkSslAesCtx_Type type, |
wini | 0:e0adec41ad6b | 498 | const U8 *key, U8 keyLen); |
wini | 0:e0adec41ad6b | 499 | #define SharkSslAesCtx_destructor(ctx) memset(ctx, 0, sizeof(SharkSslAesCtx)) |
wini | 0:e0adec41ad6b | 500 | |
wini | 0:e0adec41ad6b | 501 | #if (!SHARKSSL_DISABLE_AES_ECB_DECRYPT) |
wini | 0:e0adec41ad6b | 502 | /** Decrypt |
wini | 0:e0adec41ad6b | 503 | \ingroup RayCryptoAES |
wini | 0:e0adec41ad6b | 504 | */ |
wini | 0:e0adec41ad6b | 505 | SHARKSSL_API void SharkSslAesCtx_decrypt(SharkSslAesCtx *ctx, U8 input[16], U8 output[16]); |
wini | 0:e0adec41ad6b | 506 | #endif |
wini | 0:e0adec41ad6b | 507 | |
wini | 0:e0adec41ad6b | 508 | /** Encrypt |
wini | 0:e0adec41ad6b | 509 | \ingroup RayCryptoAES |
wini | 0:e0adec41ad6b | 510 | */ |
wini | 0:e0adec41ad6b | 511 | SHARKSSL_API void SharkSslAesCtx_encrypt(SharkSslAesCtx *ctx, U8 input[16], U8 output[16]); |
wini | 0:e0adec41ad6b | 512 | |
wini | 0:e0adec41ad6b | 513 | #if (!SHARKSSL_DISABLE_AES_CBC_MODE) |
wini | 0:e0adec41ad6b | 514 | /** Encrypt |
wini | 0:e0adec41ad6b | 515 | \ingroup RayCryptoAES |
wini | 0:e0adec41ad6b | 516 | */ |
wini | 0:e0adec41ad6b | 517 | SHARKSSL_API void SharkSslAesCtx_cbc_encrypt(SharkSslAesCtx *ctx, U8 vect[16], |
wini | 0:e0adec41ad6b | 518 | U8 *input, U8 *output, U16 len); |
wini | 0:e0adec41ad6b | 519 | |
wini | 0:e0adec41ad6b | 520 | /** Decrypt |
wini | 0:e0adec41ad6b | 521 | \ingroup RayCryptoAES |
wini | 0:e0adec41ad6b | 522 | */ |
wini | 0:e0adec41ad6b | 523 | SHARKSSL_API void SharkSslAesCtx_cbc_decrypt(SharkSslAesCtx *ctx, U8 vect[16], |
wini | 0:e0adec41ad6b | 524 | U8 *input, U8 *output, U16 len); |
wini | 0:e0adec41ad6b | 525 | #endif |
wini | 0:e0adec41ad6b | 526 | #if SHARKSSL_ENABLE_AES_CTR_MODE |
wini | 0:e0adec41ad6b | 527 | |
wini | 0:e0adec41ad6b | 528 | /** |
wini | 0:e0adec41ad6b | 529 | \ingroup RayCryptoAES |
wini | 0:e0adec41ad6b | 530 | */ |
wini | 0:e0adec41ad6b | 531 | SHARKSSL_API void SharkSslAesCtx_ctr_mode(SharkSslAesCtx *ctx, U8 ctr[16], |
wini | 0:e0adec41ad6b | 532 | U8 *input, U8 *output, U16 len); |
wini | 0:e0adec41ad6b | 533 | #endif |
wini | 0:e0adec41ad6b | 534 | #if SHARKSSL_ENABLE_AES_GCM |
wini | 0:e0adec41ad6b | 535 | /** Initialize |
wini | 0:e0adec41ad6b | 536 | \ingroup RayCryptoAesGcm |
wini | 0:e0adec41ad6b | 537 | |
wini | 0:e0adec41ad6b | 538 | \param ctx Uninitialized data of size sizeof(SharkSslAesGcmCtx). |
wini | 0:e0adec41ad6b | 539 | \param key the encryption/decryption key |
wini | 0:e0adec41ad6b | 540 | \param keyLen 'key' length |
wini | 0:e0adec41ad6b | 541 | */ |
wini | 0:e0adec41ad6b | 542 | SHARKSSL_API void SharkSslAesGcmCtx_constructor(SharkSslAesGcmCtx *ctx, |
wini | 0:e0adec41ad6b | 543 | const U8 *key, U8 keyLen); |
wini | 0:e0adec41ad6b | 544 | |
wini | 0:e0adec41ad6b | 545 | #define SharkSslAesGcmCtx_destructor(ctx) \ |
wini | 0:e0adec41ad6b | 546 | memset(ctx, 0, sizeof(SharkSslAesGcmCtx)) |
wini | 0:e0adec41ad6b | 547 | |
wini | 0:e0adec41ad6b | 548 | /** Encrypt |
wini | 0:e0adec41ad6b | 549 | \ingroup RayCryptoAesGcm |
wini | 0:e0adec41ad6b | 550 | */ |
wini | 0:e0adec41ad6b | 551 | SHARKSSL_API int SharkSslAesGcmCtx_encrypt(SharkSslAesGcmCtx *ctx, |
wini | 0:e0adec41ad6b | 552 | const U8 vect[12], U8 tagout[16], |
wini | 0:e0adec41ad6b | 553 | const U8 *auth, U16 authlen, |
wini | 0:e0adec41ad6b | 554 | U8 *input, U8 *output, U16 len); |
wini | 0:e0adec41ad6b | 555 | |
wini | 0:e0adec41ad6b | 556 | |
wini | 0:e0adec41ad6b | 557 | /** Decrypt |
wini | 0:e0adec41ad6b | 558 | \ingroup RayCryptoAesGcm |
wini | 0:e0adec41ad6b | 559 | */ |
wini | 0:e0adec41ad6b | 560 | SHARKSSL_API int SharkSslAesGcmCtx_decrypt(SharkSslAesGcmCtx *ctx, |
wini | 0:e0adec41ad6b | 561 | const U8 vect[12], U8 tagin[16], |
wini | 0:e0adec41ad6b | 562 | const U8 *auth, U16 authlen, |
wini | 0:e0adec41ad6b | 563 | U8 *input, U8 *output, U16 len); |
wini | 0:e0adec41ad6b | 564 | #endif |
wini | 0:e0adec41ad6b | 565 | #if SHARKSSL_ENABLE_AES_CCM |
wini | 0:e0adec41ad6b | 566 | /** Initialize |
wini | 0:e0adec41ad6b | 567 | \ingroup RayCryptoAesCcm |
wini | 0:e0adec41ad6b | 568 | |
wini | 0:e0adec41ad6b | 569 | \param ctx Uninitialized data of size sizeof(SharkSslAesCcmCtx). |
wini | 0:e0adec41ad6b | 570 | */ |
wini | 0:e0adec41ad6b | 571 | SHARKSSL_API void SharkSslAesCcmCtx_constructor(SharkSslAesCcmCtx *ctx, |
wini | 0:e0adec41ad6b | 572 | const U8 *key, U8 keyLen, U8 tagLen); |
wini | 0:e0adec41ad6b | 573 | |
wini | 0:e0adec41ad6b | 574 | #define SharkSslAesCcmCtx_destructor(ctx) memset(ctx, 0, sizeof(SharkSslAesCcmCtx)) |
wini | 0:e0adec41ad6b | 575 | |
wini | 0:e0adec41ad6b | 576 | /** Encrypt |
wini | 0:e0adec41ad6b | 577 | \ingroup RayCryptoAesCcm |
wini | 0:e0adec41ad6b | 578 | */ |
wini | 0:e0adec41ad6b | 579 | SHARKSSL_API int SharkSslAesCcmCtx_encrypt(SharkSslAesCcmCtx *ctx, |
wini | 0:e0adec41ad6b | 580 | const U8 vect[12], U8 *tagout, |
wini | 0:e0adec41ad6b | 581 | const U8 *auth, U16 authlen, |
wini | 0:e0adec41ad6b | 582 | U8 *input, U8 *output, U16 len); |
wini | 0:e0adec41ad6b | 583 | |
wini | 0:e0adec41ad6b | 584 | |
wini | 0:e0adec41ad6b | 585 | /** Decrypt |
wini | 0:e0adec41ad6b | 586 | \ingroup RayCryptoAesCcm |
wini | 0:e0adec41ad6b | 587 | */ |
wini | 0:e0adec41ad6b | 588 | SHARKSSL_API int SharkSslAesCcmCtx_decrypt(SharkSslAesCcmCtx *ctx, |
wini | 0:e0adec41ad6b | 589 | const U8 vect[12], U8 *tagin, |
wini | 0:e0adec41ad6b | 590 | const U8 *auth, U16 authlen, |
wini | 0:e0adec41ad6b | 591 | U8 *input, U8 *output, U16 len); |
wini | 0:e0adec41ad6b | 592 | #endif |
wini | 0:e0adec41ad6b | 593 | #endif |
wini | 0:e0adec41ad6b | 594 | |
wini | 0:e0adec41ad6b | 595 | #ifdef __cplusplus |
wini | 0:e0adec41ad6b | 596 | } |
wini | 0:e0adec41ad6b | 597 | #endif |
wini | 0:e0adec41ad6b | 598 | |
wini | 0:e0adec41ad6b | 599 | |
wini | 0:e0adec41ad6b | 600 | #endif /* _SharkSslCrypto_h */ |