Annotation of embedaddon/axTLS/crypto/crypto.h, revision 1.1
1.1 ! misho 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(void);
! 221: EXP_FUNC void STDCALL RNG_custom_init(const uint8_t *seed_buf, int size);
! 222: EXP_FUNC void STDCALL RNG_terminate(void);
! 223: EXP_FUNC void STDCALL get_random(int num_rand_bytes, uint8_t *rand_data);
! 224: void get_random_NZ(int num_rand_bytes, uint8_t *rand_data);
! 225:
! 226: #ifdef __cplusplus
! 227: }
! 228: #endif
! 229:
! 230: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>