change some parameters in the library to meet the needs of the website httpbin.org

Fork of MiniTLS-GPL by Donatien Garnier

Committer:
shiyilei
Date:
Fri Feb 06 06:17:33 2015 +0000
Revision:
5:95f70ebfe61f
Parent:
2:527a66d0a1a9
change some parameters in the library to meet the needs of httpbin.org

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MiniTLS 2:527a66d0a1a9 1 /*
MiniTLS 2:527a66d0a1a9 2 MiniTLS - A super trimmed down TLS/SSL Library for embedded devices
MiniTLS 2:527a66d0a1a9 3 Author: Donatien Garnier
MiniTLS 2:527a66d0a1a9 4 Copyright (C) 2013-2014 AppNearMe Ltd
MiniTLS 2:527a66d0a1a9 5
MiniTLS 2:527a66d0a1a9 6 This program is free software; you can redistribute it and/or
MiniTLS 2:527a66d0a1a9 7 modify it under the terms of the GNU General Public License
MiniTLS 2:527a66d0a1a9 8 as published by the Free Software Foundation; either version 2
MiniTLS 2:527a66d0a1a9 9 of the License, or (at your option) any later version.
MiniTLS 2:527a66d0a1a9 10
MiniTLS 2:527a66d0a1a9 11 This program is distributed in the hope that it will be useful,
MiniTLS 2:527a66d0a1a9 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
MiniTLS 2:527a66d0a1a9 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
MiniTLS 2:527a66d0a1a9 14 GNU General Public License for more details.
MiniTLS 2:527a66d0a1a9 15
MiniTLS 2:527a66d0a1a9 16 You should have received a copy of the GNU General Public License
MiniTLS 2:527a66d0a1a9 17 along with this program; if not, write to the Free Software
MiniTLS 2:527a66d0a1a9 18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
MiniTLS 2:527a66d0a1a9 19 *//**
MiniTLS 2:527a66d0a1a9 20 * \file crypto_ecc.h
MiniTLS 2:527a66d0a1a9 21 * \copyright Copyright (c) AppNearMe Ltd 2013
MiniTLS 2:527a66d0a1a9 22 * \author Donatien Garnier
MiniTLS 2:527a66d0a1a9 23 */
MiniTLS 2:527a66d0a1a9 24
MiniTLS 2:527a66d0a1a9 25 //This module has been adapted from libtomcrypt (http://libtom.org/)
MiniTLS 2:527a66d0a1a9 26
MiniTLS 2:527a66d0a1a9 27 #ifndef CRYPTO_ECC_H_
MiniTLS 2:527a66d0a1a9 28 #define CRYPTO_ECC_H_
MiniTLS 2:527a66d0a1a9 29
MiniTLS 2:527a66d0a1a9 30 #ifdef __cplusplus
MiniTLS 2:527a66d0a1a9 31 extern "C" {
MiniTLS 2:527a66d0a1a9 32 #endif
MiniTLS 2:527a66d0a1a9 33
MiniTLS 2:527a66d0a1a9 34 #include "core/fwk.h"
MiniTLS 2:527a66d0a1a9 35 #include "inc/minitls_errors.h"
MiniTLS 2:527a66d0a1a9 36 #include "inc/minitls_config.h"
MiniTLS 2:527a66d0a1a9 37 #include "crypto_prng.h"
MiniTLS 2:527a66d0a1a9 38 #include "crypto_math.h"
MiniTLS 2:527a66d0a1a9 39
MiniTLS 2:527a66d0a1a9 40 typedef enum __crypto_ecc_curve_type
MiniTLS 2:527a66d0a1a9 41 {
MiniTLS 2:527a66d0a1a9 42 sect163k1 = 1, sect163r1 = 2, sect163r2 = 3,
MiniTLS 2:527a66d0a1a9 43 sect193r1 = 4, sect193r2 = 5, sect233k1 = 6,
MiniTLS 2:527a66d0a1a9 44 sect233r1 = 7, sect239k1 = 8, sect283k1 = 9,
MiniTLS 2:527a66d0a1a9 45 sect283r1 = 10, sect409k1 = 11, sect409r1 = 12,
MiniTLS 2:527a66d0a1a9 46 sect571k1 = 13, sect571r1 = 14, secp160k1 = 15,
MiniTLS 2:527a66d0a1a9 47 secp160r1 = 16, secp160r2 = 17, secp192k1 = 18,
MiniTLS 2:527a66d0a1a9 48 secp192r1 = 19, secp224k1 = 20, secp224r1 = 21,
MiniTLS 2:527a66d0a1a9 49 secp256k1 = 22, secp256r1 = 23, secp384r1 = 24,
MiniTLS 2:527a66d0a1a9 50 secp521r1 = 25,
MiniTLS 2:527a66d0a1a9 51 //reserved = 0xFE00..0xFEFF,
MiniTLS 2:527a66d0a1a9 52 arbitrary_explicit_prime_curves = 0xFF01,
MiniTLS 2:527a66d0a1a9 53 arbitrary_explicit_char2_curves = 0xFF02,
MiniTLS 2:527a66d0a1a9 54 __crypto_ecc = 0xFFFF
MiniTLS 2:527a66d0a1a9 55 } crypto_ecc_curve_type_t;
MiniTLS 2:527a66d0a1a9 56
MiniTLS 2:527a66d0a1a9 57 typedef struct __crypto_ecc_curve
MiniTLS 2:527a66d0a1a9 58 {
MiniTLS 2:527a66d0a1a9 59 /** The size of the curve in octets */
MiniTLS 2:527a66d0a1a9 60 int size;
MiniTLS 2:527a66d0a1a9 61
MiniTLS 2:527a66d0a1a9 62 /** Curve type */
MiniTLS 2:527a66d0a1a9 63 crypto_ecc_curve_type_t type;
MiniTLS 2:527a66d0a1a9 64
MiniTLS 2:527a66d0a1a9 65 /** The prime that defines the field the curve is in (encoded in hex) */
MiniTLS 2:527a66d0a1a9 66 char *prime;
MiniTLS 2:527a66d0a1a9 67
MiniTLS 2:527a66d0a1a9 68 /** The fields B param (hex) */
MiniTLS 2:527a66d0a1a9 69 char *B;
MiniTLS 2:527a66d0a1a9 70
MiniTLS 2:527a66d0a1a9 71 /** The order of the curve (hex) */
MiniTLS 2:527a66d0a1a9 72 char *order;
MiniTLS 2:527a66d0a1a9 73
MiniTLS 2:527a66d0a1a9 74 /** The x co-ordinate of the base point on the curve (hex) */
MiniTLS 2:527a66d0a1a9 75 char *Gx;
MiniTLS 2:527a66d0a1a9 76
MiniTLS 2:527a66d0a1a9 77 /** The y co-ordinate of the base point on the curve (hex) */
MiniTLS 2:527a66d0a1a9 78 char *Gy;
MiniTLS 2:527a66d0a1a9 79 } crypto_ecc_curve_t;
MiniTLS 2:527a66d0a1a9 80
MiniTLS 2:527a66d0a1a9 81 /** A point on a ECC curve, stored in Jacbobian format such that (x,y,z) => (x/z^2, y/z^3, 1) when interpretted as affine */
MiniTLS 2:527a66d0a1a9 82 typedef struct {
MiniTLS 2:527a66d0a1a9 83 /** The x co-ordinate */
MiniTLS 2:527a66d0a1a9 84 //void *x;
MiniTLS 2:527a66d0a1a9 85 fp_int x;
MiniTLS 2:527a66d0a1a9 86
MiniTLS 2:527a66d0a1a9 87 /** The y co-ordinate */
MiniTLS 2:527a66d0a1a9 88 //void *y;
MiniTLS 2:527a66d0a1a9 89 fp_int y;
MiniTLS 2:527a66d0a1a9 90
MiniTLS 2:527a66d0a1a9 91 /** The z co-ordinate */
MiniTLS 2:527a66d0a1a9 92 //void *z;
MiniTLS 2:527a66d0a1a9 93 fp_int z;
MiniTLS 2:527a66d0a1a9 94 } crypto_ecc_point_t;
MiniTLS 2:527a66d0a1a9 95
MiniTLS 2:527a66d0a1a9 96 typedef struct __crypto_ecc_public_key
MiniTLS 2:527a66d0a1a9 97 {
MiniTLS 2:527a66d0a1a9 98 const crypto_ecc_curve_t* curve;
MiniTLS 2:527a66d0a1a9 99
MiniTLS 2:527a66d0a1a9 100 crypto_ecc_point_t pubkey;
MiniTLS 2:527a66d0a1a9 101 } crypto_ecc_public_key_t;
MiniTLS 2:527a66d0a1a9 102
MiniTLS 2:527a66d0a1a9 103 typedef struct __crypto_ecc_private_key
MiniTLS 2:527a66d0a1a9 104 {
MiniTLS 2:527a66d0a1a9 105 crypto_ecc_public_key_t pub;
MiniTLS 2:527a66d0a1a9 106 fp_int privkey;
MiniTLS 2:527a66d0a1a9 107 } crypto_ecc_private_key_t;
MiniTLS 2:527a66d0a1a9 108
MiniTLS 2:527a66d0a1a9 109 minitls_err_t crypto_ecc_curve_get(const crypto_ecc_curve_t** curve, crypto_ecc_curve_type_t type);
MiniTLS 2:527a66d0a1a9 110 minitls_err_t crypto_ecc_ansi_x963_import(crypto_ecc_public_key_t* key, const crypto_ecc_curve_t* curve, const uint8_t* x963, size_t size);
MiniTLS 2:527a66d0a1a9 111 minitls_err_t crypto_ecc_ansi_x963_export(const crypto_ecc_public_key_t* key, /*const crypto_ecc_curve_t* curve,*/ uint8_t* x963, size_t max_size, size_t* size);
MiniTLS 2:527a66d0a1a9 112 minitls_err_t crypto_ecc_generate_key(crypto_ecc_private_key_t* key, const crypto_ecc_curve_t* curve, crypto_prng_t* prng);
MiniTLS 2:527a66d0a1a9 113 size_t crypto_ecc_get_key_size_for_curve(const crypto_ecc_curve_t* curve);
MiniTLS 2:527a66d0a1a9 114
MiniTLS 2:527a66d0a1a9 115 const crypto_ecc_public_key_t* crypto_ecc_get_public_key(const crypto_ecc_private_key_t* private_key);
MiniTLS 2:527a66d0a1a9 116
MiniTLS 2:527a66d0a1a9 117 minitls_err_t crypto_ecc_dsa_check(const crypto_ecc_public_key_t* key, const uint8_t* hash, size_t hash_size, const uint8_t* signature, size_t signature_size);
MiniTLS 2:527a66d0a1a9 118
MiniTLS 2:527a66d0a1a9 119 minitls_err_t crypto_ecc_dh_generate_shared_secret(const crypto_ecc_private_key_t* private_key, const crypto_ecc_public_key_t* public_key, uint8_t* secret, size_t max_secret_size, size_t* secret_size);
MiniTLS 2:527a66d0a1a9 120
MiniTLS 2:527a66d0a1a9 121 #ifdef __cplusplus
MiniTLS 2:527a66d0a1a9 122 }
MiniTLS 2:527a66d0a1a9 123 #endif
MiniTLS 2:527a66d0a1a9 124
MiniTLS 2:527a66d0a1a9 125 #endif /* CRYPTO_ECC_H_ */