|  | @@ -1,229 +0,0 @@
 | 
		
	
		
			
			| 1 |  | -/*
 | 
		
	
		
			
			| 2 |  | - * Copyright (c) 2007, Cameron Rich
 | 
		
	
		
			
			| 3 |  | - *
 | 
		
	
		
			
			| 4 |  | - * All rights reserved.
 | 
		
	
		
			
			| 5 |  | - *
 | 
		
	
		
			
			| 6 |  | - * Redistribution and use in source and binary forms, with or without
 | 
		
	
		
			
			| 7 |  | - * modification, are permitted provided that the following conditions are met:
 | 
		
	
		
			
			| 8 |  | - *
 | 
		
	
		
			
			| 9 |  | - * * Redistributions of source code must retain the above copyright notice,
 | 
		
	
		
			
			| 10 |  | - *   this list of conditions and the following disclaimer.
 | 
		
	
		
			
			| 11 |  | - * * Redistributions in binary form must reproduce the above copyright notice,
 | 
		
	
		
			
			| 12 |  | - *   this list of conditions and the following disclaimer in the documentation
 | 
		
	
		
			
			| 13 |  | - *   and/or other materials provided with the distribution.
 | 
		
	
		
			
			| 14 |  | - * * Neither the name of the axTLS project nor the names of its contributors
 | 
		
	
		
			
			| 15 |  | - *   may be used to endorse or promote products derived from this software
 | 
		
	
		
			
			| 16 |  | - *   without specific prior written permission.
 | 
		
	
		
			
			| 17 |  | - *
 | 
		
	
		
			
			| 18 |  | - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
		
	
		
			
			| 19 |  | - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
		
	
		
			
			| 20 |  | - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
		
	
		
			
			| 21 |  | - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 | 
		
	
		
			
			| 22 |  | - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 | 
		
	
		
			
			| 23 |  | - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 | 
		
	
		
			
			| 24 |  | - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 | 
		
	
		
			
			| 25 |  | - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
		
	
		
			
			| 26 |  | - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 | 
		
	
		
			
			| 27 |  | - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
		
	
		
			
			| 28 |  | - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
		
	
		
			
			| 29 |  | - */
 | 
		
	
		
			
			| 30 |  | -
 | 
		
	
		
			
			| 31 |  | -/**
 | 
		
	
		
			
			| 32 |  | - * @file crypto.h
 | 
		
	
		
			
			| 33 |  | - */
 | 
		
	
		
			
			| 34 |  | -
 | 
		
	
		
			
			| 35 |  | -#ifndef HEADER_CRYPTO_H
 | 
		
	
		
			
			| 36 |  | -#define HEADER_CRYPTO_H
 | 
		
	
		
			
			| 37 |  | -
 | 
		
	
		
			
			| 38 |  | -#ifdef __cplusplus
 | 
		
	
		
			
			| 39 |  | -extern "C" {
 | 
		
	
		
			
			| 40 |  | -#endif
 | 
		
	
		
			
			| 41 |  | -
 | 
		
	
		
			
			| 42 |  | -#include "config.h"
 | 
		
	
		
			
			| 43 |  | -#include "bigint_impl.h"
 | 
		
	
		
			
			| 44 |  | -#include "bigint.h"
 | 
		
	
		
			
			| 45 |  | -
 | 
		
	
		
			
			| 46 |  | -#ifndef STDCALL
 | 
		
	
		
			
			| 47 |  | -#define STDCALL
 | 
		
	
		
			
			| 48 |  | -#endif
 | 
		
	
		
			
			| 49 |  | -#ifndef EXP_FUNC
 | 
		
	
		
			
			| 50 |  | -#define EXP_FUNC
 | 
		
	
		
			
			| 51 |  | -#endif
 | 
		
	
		
			
			| 52 |  | -
 | 
		
	
		
			
			| 53 |  | -
 | 
		
	
		
			
			| 54 |  | -/* enable features based on a 'super-set' capbaility. */
 | 
		
	
		
			
			| 55 |  | -#if defined(CONFIG_SSL_FULL_MODE)
 | 
		
	
		
			
			| 56 |  | -#define CONFIG_SSL_ENABLE_CLIENT
 | 
		
	
		
			
			| 57 |  | -#define CONFIG_SSL_CERT_VERIFICATION
 | 
		
	
		
			
			| 58 |  | -#elif defined(CONFIG_SSL_ENABLE_CLIENT)
 | 
		
	
		
			
			| 59 |  | -#define CONFIG_SSL_CERT_VERIFICATION
 | 
		
	
		
			
			| 60 |  | -#endif
 | 
		
	
		
			
			| 61 |  | -
 | 
		
	
		
			
			| 62 |  | -/**************************************************************************
 | 
		
	
		
			
			| 63 |  | - * AES declarations 
 | 
		
	
		
			
			| 64 |  | - **************************************************************************/
 | 
		
	
		
			
			| 65 |  | -
 | 
		
	
		
			
			| 66 |  | -#define AES_MAXROUNDS			14
 | 
		
	
		
			
			| 67 |  | -#define AES_BLOCKSIZE           16
 | 
		
	
		
			
			| 68 |  | -#define AES_IV_SIZE             16
 | 
		
	
		
			
			| 69 |  | -
 | 
		
	
		
			
			| 70 |  | -typedef struct aes_key_st 
 | 
		
	
		
			
			| 71 |  | -{
 | 
		
	
		
			
			| 72 |  | -    uint16_t rounds;
 | 
		
	
		
			
			| 73 |  | -    uint16_t key_size;
 | 
		
	
		
			
			| 74 |  | -    uint32_t ks[(AES_MAXROUNDS+1)*8];
 | 
		
	
		
			
			| 75 |  | -    uint8_t iv[AES_IV_SIZE];
 | 
		
	
		
			
			| 76 |  | -} AES_CTX;
 | 
		
	
		
			
			| 77 |  | -
 | 
		
	
		
			
			| 78 |  | -typedef enum
 | 
		
	
		
			
			| 79 |  | -{
 | 
		
	
		
			
			| 80 |  | -    AES_MODE_128,
 | 
		
	
		
			
			| 81 |  | -    AES_MODE_256
 | 
		
	
		
			
			| 82 |  | -} AES_MODE;
 | 
		
	
		
			
			| 83 |  | -
 | 
		
	
		
			
			| 84 |  | -void AES_set_key(AES_CTX *ctx, const uint8_t *key, 
 | 
		
	
		
			
			| 85 |  | -        const uint8_t *iv, AES_MODE mode);
 | 
		
	
		
			
			| 86 |  | -void AES_cbc_encrypt(AES_CTX *ctx, const uint8_t *msg, 
 | 
		
	
		
			
			| 87 |  | -        uint8_t *out, int length);
 | 
		
	
		
			
			| 88 |  | -void AES_cbc_decrypt(AES_CTX *ks, const uint8_t *in, uint8_t *out, int length);
 | 
		
	
		
			
			| 89 |  | -void AES_convert_key(AES_CTX *ctx);
 | 
		
	
		
			
			| 90 |  | -
 | 
		
	
		
			
			| 91 |  | -/**************************************************************************
 | 
		
	
		
			
			| 92 |  | - * RC4 declarations 
 | 
		
	
		
			
			| 93 |  | - **************************************************************************/
 | 
		
	
		
			
			| 94 |  | -
 | 
		
	
		
			
			| 95 |  | -typedef struct 
 | 
		
	
		
			
			| 96 |  | -{
 | 
		
	
		
			
			| 97 |  | -    uint8_t x, y, m[256];
 | 
		
	
		
			
			| 98 |  | -} RC4_CTX;
 | 
		
	
		
			
			| 99 |  | -
 | 
		
	
		
			
			| 100 |  | -void RC4_setup(RC4_CTX *s, const uint8_t *key, int length);
 | 
		
	
		
			
			| 101 |  | -void RC4_crypt(RC4_CTX *s, const uint8_t *msg, uint8_t *data, int length);
 | 
		
	
		
			
			| 102 |  | -
 | 
		
	
		
			
			| 103 |  | -/**************************************************************************
 | 
		
	
		
			
			| 104 |  | - * SHA1 declarations 
 | 
		
	
		
			
			| 105 |  | - **************************************************************************/
 | 
		
	
		
			
			| 106 |  | -
 | 
		
	
		
			
			| 107 |  | -#define SHA1_SIZE   20
 | 
		
	
		
			
			| 108 |  | -
 | 
		
	
		
			
			| 109 |  | -/*
 | 
		
	
		
			
			| 110 |  | - *  This structure will hold context information for the SHA-1
 | 
		
	
		
			
			| 111 |  | - *  hashing operation
 | 
		
	
		
			
			| 112 |  | - */
 | 
		
	
		
			
			| 113 |  | -typedef struct 
 | 
		
	
		
			
			| 114 |  | -{
 | 
		
	
		
			
			| 115 |  | -    uint32_t Intermediate_Hash[SHA1_SIZE/4]; /* Message Digest */
 | 
		
	
		
			
			| 116 |  | -    uint32_t Length_Low;            /* Message length in bits */
 | 
		
	
		
			
			| 117 |  | -    uint32_t Length_High;           /* Message length in bits */
 | 
		
	
		
			
			| 118 |  | -    uint16_t Message_Block_Index;   /* Index into message block array   */
 | 
		
	
		
			
			| 119 |  | -    uint8_t Message_Block[64];      /* 512-bit message blocks */
 | 
		
	
		
			
			| 120 |  | -} SHA1_CTX;
 | 
		
	
		
			
			| 121 |  | -
 | 
		
	
		
			
			| 122 |  | -void SHA1_Init(SHA1_CTX *);
 | 
		
	
		
			
			| 123 |  | -void SHA1_Update(SHA1_CTX *, const uint8_t * msg, int len);
 | 
		
	
		
			
			| 124 |  | -void SHA1_Final(uint8_t *digest, SHA1_CTX *);
 | 
		
	
		
			
			| 125 |  | -
 | 
		
	
		
			
			| 126 |  | -/**************************************************************************
 | 
		
	
		
			
			| 127 |  | - * MD2 declarations
 | 
		
	
		
			
			| 128 |  | - **************************************************************************/
 | 
		
	
		
			
			| 129 |  | -
 | 
		
	
		
			
			| 130 |  | -#define MD2_SIZE 16
 | 
		
	
		
			
			| 131 |  | -
 | 
		
	
		
			
			| 132 |  | -typedef struct
 | 
		
	
		
			
			| 133 |  | -{
 | 
		
	
		
			
			| 134 |  | -    unsigned char cksum[16];    /* checksum of the data block */
 | 
		
	
		
			
			| 135 |  | -    unsigned char state[48];    /* intermediate digest state */
 | 
		
	
		
			
			| 136 |  | -    unsigned char buffer[16];   /* data block being processed */
 | 
		
	
		
			
			| 137 |  | -    int left;                   /* amount of data in buffer */
 | 
		
	
		
			
			| 138 |  | -} MD2_CTX;
 | 
		
	
		
			
			| 139 |  | -
 | 
		
	
		
			
			| 140 |  | -EXP_FUNC void STDCALL MD2_Init(MD2_CTX *ctx);
 | 
		
	
		
			
			| 141 |  | -EXP_FUNC void STDCALL MD2_Update(MD2_CTX *ctx, const uint8_t *input, int ilen);
 | 
		
	
		
			
			| 142 |  | -EXP_FUNC void STDCALL MD2_Final(uint8_t *digest, MD2_CTX *ctx);
 | 
		
	
		
			
			| 143 |  | -
 | 
		
	
		
			
			| 144 |  | -/**************************************************************************
 | 
		
	
		
			
			| 145 |  | - * MD5 declarations
 | 
		
	
		
			
			| 146 |  | - **************************************************************************/
 | 
		
	
		
			
			| 147 |  | -
 | 
		
	
		
			
			| 148 |  | -#define MD5_SIZE    16
 | 
		
	
		
			
			| 149 |  | -
 | 
		
	
		
			
			| 150 |  | -typedef struct 
 | 
		
	
		
			
			| 151 |  | -{
 | 
		
	
		
			
			| 152 |  | -  uint32_t state[4];        /* state (ABCD) */
 | 
		
	
		
			
			| 153 |  | -  uint32_t count[2];        /* number of bits, modulo 2^64 (lsb first) */
 | 
		
	
		
			
			| 154 |  | -  uint8_t buffer[64];       /* input buffer */
 | 
		
	
		
			
			| 155 |  | -} MD5_CTX;
 | 
		
	
		
			
			| 156 |  | -
 | 
		
	
		
			
			| 157 |  | -EXP_FUNC void STDCALL MD5_Init(MD5_CTX *);
 | 
		
	
		
			
			| 158 |  | -EXP_FUNC void STDCALL MD5_Update(MD5_CTX *, const uint8_t *msg, int len);
 | 
		
	
		
			
			| 159 |  | -EXP_FUNC void STDCALL MD5_Final(uint8_t *digest, MD5_CTX *);
 | 
		
	
		
			
			| 160 |  | -
 | 
		
	
		
			
			| 161 |  | -/**************************************************************************
 | 
		
	
		
			
			| 162 |  | - * HMAC declarations 
 | 
		
	
		
			
			| 163 |  | - **************************************************************************/
 | 
		
	
		
			
			| 164 |  | -void hmac_md5(const uint8_t *msg, int length, const uint8_t *key, 
 | 
		
	
		
			
			| 165 |  | -        int key_len, uint8_t *digest);
 | 
		
	
		
			
			| 166 |  | -void hmac_sha1(const uint8_t *msg, int length, const uint8_t *key, 
 | 
		
	
		
			
			| 167 |  | -        int key_len, uint8_t *digest);
 | 
		
	
		
			
			| 168 |  | -
 | 
		
	
		
			
			| 169 |  | -/**************************************************************************
 | 
		
	
		
			
			| 170 |  | - * RSA declarations 
 | 
		
	
		
			
			| 171 |  | - **************************************************************************/
 | 
		
	
		
			
			| 172 |  | -
 | 
		
	
		
			
			| 173 |  | -typedef struct 
 | 
		
	
		
			
			| 174 |  | -{
 | 
		
	
		
			
			| 175 |  | -    bigint *m;              /* modulus */
 | 
		
	
		
			
			| 176 |  | -    bigint *e;              /* public exponent */
 | 
		
	
		
			
			| 177 |  | -    bigint *d;              /* private exponent */
 | 
		
	
		
			
			| 178 |  | -#ifdef CONFIG_BIGINT_CRT
 | 
		
	
		
			
			| 179 |  | -    bigint *p;              /* p as in m = pq */
 | 
		
	
		
			
			| 180 |  | -    bigint *q;              /* q as in m = pq */
 | 
		
	
		
			
			| 181 |  | -    bigint *dP;             /* d mod (p-1) */
 | 
		
	
		
			
			| 182 |  | -    bigint *dQ;             /* d mod (q-1) */
 | 
		
	
		
			
			| 183 |  | -    bigint *qInv;           /* q^-1 mod p */
 | 
		
	
		
			
			| 184 |  | -#endif
 | 
		
	
		
			
			| 185 |  | -    int num_octets;
 | 
		
	
		
			
			| 186 |  | -    BI_CTX *bi_ctx;
 | 
		
	
		
			
			| 187 |  | -} RSA_CTX;
 | 
		
	
		
			
			| 188 |  | -
 | 
		
	
		
			
			| 189 |  | -void RSA_priv_key_new(RSA_CTX **rsa_ctx, 
 | 
		
	
		
			
			| 190 |  | -        const uint8_t *modulus, int mod_len,
 | 
		
	
		
			
			| 191 |  | -        const uint8_t *pub_exp, int pub_len,
 | 
		
	
		
			
			| 192 |  | -        const uint8_t *priv_exp, int priv_len
 | 
		
	
		
			
			| 193 |  | -#ifdef CONFIG_BIGINT_CRT
 | 
		
	
		
			
			| 194 |  | -      , const uint8_t *p, int p_len,
 | 
		
	
		
			
			| 195 |  | -        const uint8_t *q, int q_len,
 | 
		
	
		
			
			| 196 |  | -        const uint8_t *dP, int dP_len,
 | 
		
	
		
			
			| 197 |  | -        const uint8_t *dQ, int dQ_len,
 | 
		
	
		
			
			| 198 |  | -        const uint8_t *qInv, int qInv_len
 | 
		
	
		
			
			| 199 |  | -#endif
 | 
		
	
		
			
			| 200 |  | -        );
 | 
		
	
		
			
			| 201 |  | -void RSA_pub_key_new(RSA_CTX **rsa_ctx, 
 | 
		
	
		
			
			| 202 |  | -        const uint8_t *modulus, int mod_len,
 | 
		
	
		
			
			| 203 |  | -        const uint8_t *pub_exp, int pub_len);
 | 
		
	
		
			
			| 204 |  | -void RSA_free(RSA_CTX *ctx);
 | 
		
	
		
			
			| 205 |  | -int RSA_decrypt(const RSA_CTX *ctx, const uint8_t *in_data, uint8_t *out_data,
 | 
		
	
		
			
			| 206 |  | -        int is_decryption);
 | 
		
	
		
			
			| 207 |  | -bigint *RSA_private(const RSA_CTX *c, bigint *bi_msg);
 | 
		
	
		
			
			| 208 |  | -#if defined(CONFIG_SSL_CERT_VERIFICATION) || defined(CONFIG_SSL_GENERATE_X509_CERT)
 | 
		
	
		
			
			| 209 |  | -bigint *RSA_sign_verify(BI_CTX *ctx, const uint8_t *sig, int sig_len,
 | 
		
	
		
			
			| 210 |  | -        bigint *modulus, bigint *pub_exp);
 | 
		
	
		
			
			| 211 |  | -bigint *RSA_public(const RSA_CTX * c, bigint *bi_msg);
 | 
		
	
		
			
			| 212 |  | -int RSA_encrypt(const RSA_CTX *ctx, const uint8_t *in_data, uint16_t in_len, 
 | 
		
	
		
			
			| 213 |  | -        uint8_t *out_data, int is_signing);
 | 
		
	
		
			
			| 214 |  | -void RSA_print(const RSA_CTX *ctx);
 | 
		
	
		
			
			| 215 |  | -#endif
 | 
		
	
		
			
			| 216 |  | -
 | 
		
	
		
			
			| 217 |  | -/**************************************************************************
 | 
		
	
		
			
			| 218 |  | - * RNG declarations
 | 
		
	
		
			
			| 219 |  | - **************************************************************************/
 | 
		
	
		
			
			| 220 |  | -EXP_FUNC void STDCALL RNG_initialize(const uint8_t *seed_buf, int size);
 | 
		
	
		
			
			| 221 |  | -EXP_FUNC void STDCALL RNG_terminate(void);
 | 
		
	
		
			
			| 222 |  | -EXP_FUNC void STDCALL get_random(int num_rand_bytes, uint8_t *rand_data);
 | 
		
	
		
			
			| 223 |  | -void get_random_NZ(int num_rand_bytes, uint8_t *rand_data);
 | 
		
	
		
			
			| 224 |  | -
 | 
		
	
		
			
			| 225 |  | -#ifdef __cplusplus
 | 
		
	
		
			
			| 226 |  | -}
 | 
		
	
		
			
			| 227 |  | -#endif
 | 
		
	
		
			
			| 228 |  | -
 | 
		
	
		
			
			| 229 |  | -#endif 
 |