wolfSSL SSL/TLS library, support up to TLS1.3

Dependents:   CyaSSL-Twitter-OAuth4Tw Example-client-tls-cert TwitterReader TweetTest ... more

Committer:
wolfSSL
Date:
Thu Apr 28 00:56:55 2016 +0000
Revision:
3:6f956bdb3073
wolfSSL 3.9.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wolfSSL 3:6f956bdb3073 1 /* ec.h for openssl */
wolfSSL 3:6f956bdb3073 2
wolfSSL 3:6f956bdb3073 3 #ifndef WOLFSSL_EC_H_
wolfSSL 3:6f956bdb3073 4 #define WOLFSSL_EC_H_
wolfSSL 3:6f956bdb3073 5
wolfSSL 3:6f956bdb3073 6 #include <wolfssl/openssl/ssl.h>
wolfSSL 3:6f956bdb3073 7 #include <wolfssl/openssl/bn.h>
wolfSSL 3:6f956bdb3073 8
wolfSSL 3:6f956bdb3073 9 #ifdef __cplusplus
wolfSSL 3:6f956bdb3073 10 extern "C" {
wolfSSL 3:6f956bdb3073 11 #endif
wolfSSL 3:6f956bdb3073 12
wolfSSL 3:6f956bdb3073 13 /* Map OpenSSL NID value */
wolfSSL 3:6f956bdb3073 14 enum {
wolfSSL 3:6f956bdb3073 15 POINT_CONVERSION_UNCOMPRESSED = 4,
wolfSSL 3:6f956bdb3073 16 NID_secp111r1 = 0,
wolfSSL 3:6f956bdb3073 17 NID_secp128r1 = 1,
wolfSSL 3:6f956bdb3073 18 NID_secp160r1 = 2,
wolfSSL 3:6f956bdb3073 19 NID_cert192 = 3,
wolfSSL 3:6f956bdb3073 20 NID_cert224 = 4,
wolfSSL 3:6f956bdb3073 21 NID_X9_62_prime256v1 = 5,
wolfSSL 3:6f956bdb3073 22 NID_secp384r1 = 6,
wolfSSL 3:6f956bdb3073 23 NID_secp521r1 = 7,
wolfSSL 3:6f956bdb3073 24 NID_X9_62_prime_field = 100,
wolfSSL 3:6f956bdb3073 25 OPENSSL_EC_NAMED_CURVE = 0x001
wolfSSL 3:6f956bdb3073 26 };
wolfSSL 3:6f956bdb3073 27
wolfSSL 3:6f956bdb3073 28 struct WOLFSSL_EC_POINT {
wolfSSL 3:6f956bdb3073 29 WOLFSSL_BIGNUM *X;
wolfSSL 3:6f956bdb3073 30 WOLFSSL_BIGNUM *Y;
wolfSSL 3:6f956bdb3073 31 WOLFSSL_BIGNUM *Z;
wolfSSL 3:6f956bdb3073 32
wolfSSL 3:6f956bdb3073 33 void* internal; /* our ECC point */
wolfSSL 3:6f956bdb3073 34 char inSet; /* internal set from external ? */
wolfSSL 3:6f956bdb3073 35 char exSet; /* external set from internal ? */
wolfSSL 3:6f956bdb3073 36 };
wolfSSL 3:6f956bdb3073 37
wolfSSL 3:6f956bdb3073 38 struct WOLFSSL_EC_GROUP {
wolfSSL 3:6f956bdb3073 39 int curve_idx; /* index of curve, used by WolfSSL as reference */
wolfSSL 3:6f956bdb3073 40 int curve_nid; /* NID of curve, used by OpenSSL/OpenSSH as reference */
wolfSSL 3:6f956bdb3073 41 };
wolfSSL 3:6f956bdb3073 42
wolfSSL 3:6f956bdb3073 43 struct WOLFSSL_EC_KEY {
wolfSSL 3:6f956bdb3073 44 WOLFSSL_EC_GROUP *group;
wolfSSL 3:6f956bdb3073 45 WOLFSSL_EC_POINT *pub_key;
wolfSSL 3:6f956bdb3073 46 WOLFSSL_BIGNUM *priv_key;
wolfSSL 3:6f956bdb3073 47
wolfSSL 3:6f956bdb3073 48 void* internal; /* our ECC Key */
wolfSSL 3:6f956bdb3073 49 char inSet; /* internal set from external ? */
wolfSSL 3:6f956bdb3073 50 char exSet; /* external set from internal ? */
wolfSSL 3:6f956bdb3073 51 };
wolfSSL 3:6f956bdb3073 52
wolfSSL 3:6f956bdb3073 53 WOLFSSL_API
wolfSSL 3:6f956bdb3073 54 int wolfSSL_ECPoint_i2d(const WOLFSSL_EC_GROUP *curve,
wolfSSL 3:6f956bdb3073 55 const WOLFSSL_EC_POINT *p,
wolfSSL 3:6f956bdb3073 56 unsigned char *out, unsigned int *len);
wolfSSL 3:6f956bdb3073 57 WOLFSSL_API
wolfSSL 3:6f956bdb3073 58 int wolfSSL_ECPoint_d2i(unsigned char *in, unsigned int len,
wolfSSL 3:6f956bdb3073 59 const WOLFSSL_EC_GROUP *curve, WOLFSSL_EC_POINT *p);
wolfSSL 3:6f956bdb3073 60 WOLFSSL_API
wolfSSL 3:6f956bdb3073 61 int wolfSSL_EC_KEY_LoadDer(WOLFSSL_EC_KEY* key,
wolfSSL 3:6f956bdb3073 62 const unsigned char* der, int derSz);
wolfSSL 3:6f956bdb3073 63 WOLFSSL_API
wolfSSL 3:6f956bdb3073 64 void wolfSSL_EC_KEY_free(WOLFSSL_EC_KEY *key);
wolfSSL 3:6f956bdb3073 65 WOLFSSL_API
wolfSSL 3:6f956bdb3073 66 WOLFSSL_EC_POINT *wolfSSL_EC_KEY_get0_public_key(const WOLFSSL_EC_KEY *key);
wolfSSL 3:6f956bdb3073 67 WOLFSSL_API
wolfSSL 3:6f956bdb3073 68 const WOLFSSL_EC_GROUP *wolfSSL_EC_KEY_get0_group(const WOLFSSL_EC_KEY *key);
wolfSSL 3:6f956bdb3073 69 WOLFSSL_API
wolfSSL 3:6f956bdb3073 70 int wolfSSL_EC_KEY_set_private_key(WOLFSSL_EC_KEY *key,
wolfSSL 3:6f956bdb3073 71 const WOLFSSL_BIGNUM *priv_key);
wolfSSL 3:6f956bdb3073 72 WOLFSSL_API
wolfSSL 3:6f956bdb3073 73 WOLFSSL_BIGNUM *wolfSSL_EC_KEY_get0_private_key(const WOLFSSL_EC_KEY *key);
wolfSSL 3:6f956bdb3073 74 WOLFSSL_API
wolfSSL 3:6f956bdb3073 75 WOLFSSL_EC_KEY *wolfSSL_EC_KEY_new_by_curve_name(int nid);
wolfSSL 3:6f956bdb3073 76 WOLFSSL_API
wolfSSL 3:6f956bdb3073 77 WOLFSSL_EC_KEY *wolfSSL_EC_KEY_new(void);
wolfSSL 3:6f956bdb3073 78 WOLFSSL_API
wolfSSL 3:6f956bdb3073 79 int wolfSSL_EC_KEY_set_group(WOLFSSL_EC_KEY *key, WOLFSSL_EC_GROUP *group);
wolfSSL 3:6f956bdb3073 80 WOLFSSL_API
wolfSSL 3:6f956bdb3073 81 int wolfSSL_EC_KEY_generate_key(WOLFSSL_EC_KEY *key);
wolfSSL 3:6f956bdb3073 82 WOLFSSL_API
wolfSSL 3:6f956bdb3073 83 void wolfSSL_EC_KEY_set_asn1_flag(WOLFSSL_EC_KEY *key, int asn1_flag);
wolfSSL 3:6f956bdb3073 84 WOLFSSL_API
wolfSSL 3:6f956bdb3073 85 int wolfSSL_EC_KEY_set_public_key(WOLFSSL_EC_KEY *key,
wolfSSL 3:6f956bdb3073 86 const WOLFSSL_EC_POINT *pub);
wolfSSL 3:6f956bdb3073 87 WOLFSSL_API
wolfSSL 3:6f956bdb3073 88 void wolfSSL_EC_GROUP_set_asn1_flag(WOLFSSL_EC_GROUP *group, int flag);
wolfSSL 3:6f956bdb3073 89 WOLFSSL_API
wolfSSL 3:6f956bdb3073 90 WOLFSSL_EC_GROUP *wolfSSL_EC_GROUP_new_by_curve_name(int nid);
wolfSSL 3:6f956bdb3073 91 WOLFSSL_API
wolfSSL 3:6f956bdb3073 92 int wolfSSL_EC_GROUP_cmp(const WOLFSSL_EC_GROUP *a, const WOLFSSL_EC_GROUP *b,
wolfSSL 3:6f956bdb3073 93 WOLFSSL_BN_CTX *ctx);
wolfSSL 3:6f956bdb3073 94 WOLFSSL_API
wolfSSL 3:6f956bdb3073 95 int wolfSSL_EC_GROUP_get_curve_name(const WOLFSSL_EC_GROUP *group);
wolfSSL 3:6f956bdb3073 96 WOLFSSL_API
wolfSSL 3:6f956bdb3073 97 int wolfSSL_EC_GROUP_get_degree(const WOLFSSL_EC_GROUP *group);
wolfSSL 3:6f956bdb3073 98 WOLFSSL_API
wolfSSL 3:6f956bdb3073 99 int wolfSSL_EC_GROUP_get_order(const WOLFSSL_EC_GROUP *group,
wolfSSL 3:6f956bdb3073 100 WOLFSSL_BIGNUM *order, WOLFSSL_BN_CTX *ctx);
wolfSSL 3:6f956bdb3073 101 WOLFSSL_API
wolfSSL 3:6f956bdb3073 102 void wolfSSL_EC_GROUP_free(WOLFSSL_EC_GROUP *group);
wolfSSL 3:6f956bdb3073 103 #if defined(DEBUG_WOLFSSL) && !defined(NO_FILESYSTEM)
wolfSSL 3:6f956bdb3073 104 WOLFSSL_API
wolfSSL 3:6f956bdb3073 105 void wolfssl_EC_POINT_dump(const char *msg, const WOLFSSL_EC_POINT *p);
wolfSSL 3:6f956bdb3073 106 #endif
wolfSSL 3:6f956bdb3073 107 WOLFSSL_API
wolfSSL 3:6f956bdb3073 108 WOLFSSL_EC_POINT *wolfSSL_EC_POINT_new(const WOLFSSL_EC_GROUP *group);
wolfSSL 3:6f956bdb3073 109 WOLFSSL_API
wolfSSL 3:6f956bdb3073 110 int wolfSSL_EC_POINT_get_affine_coordinates_GFp(const WOLFSSL_EC_GROUP *group,
wolfSSL 3:6f956bdb3073 111 const WOLFSSL_EC_POINT *p,
wolfSSL 3:6f956bdb3073 112 WOLFSSL_BIGNUM *x,
wolfSSL 3:6f956bdb3073 113 WOLFSSL_BIGNUM *y,
wolfSSL 3:6f956bdb3073 114 WOLFSSL_BN_CTX *ctx);
wolfSSL 3:6f956bdb3073 115 WOLFSSL_API
wolfSSL 3:6f956bdb3073 116 int wolfSSL_EC_POINT_mul(const WOLFSSL_EC_GROUP *group, WOLFSSL_EC_POINT *r,
wolfSSL 3:6f956bdb3073 117 const WOLFSSL_BIGNUM *n,
wolfSSL 3:6f956bdb3073 118 const WOLFSSL_EC_POINT *q, const WOLFSSL_BIGNUM *m,
wolfSSL 3:6f956bdb3073 119 WOLFSSL_BN_CTX *ctx);
wolfSSL 3:6f956bdb3073 120 WOLFSSL_API
wolfSSL 3:6f956bdb3073 121 void wolfSSL_EC_POINT_clear_free(WOLFSSL_EC_POINT *point);
wolfSSL 3:6f956bdb3073 122 WOLFSSL_API
wolfSSL 3:6f956bdb3073 123 int wolfSSL_EC_POINT_cmp(const WOLFSSL_EC_GROUP *group,
wolfSSL 3:6f956bdb3073 124 const WOLFSSL_EC_POINT *a, const WOLFSSL_EC_POINT *b,
wolfSSL 3:6f956bdb3073 125 WOLFSSL_BN_CTX *ctx);
wolfSSL 3:6f956bdb3073 126 WOLFSSL_API
wolfSSL 3:6f956bdb3073 127 void wolfSSL_EC_POINT_free(WOLFSSL_EC_POINT *point);
wolfSSL 3:6f956bdb3073 128 WOLFSSL_API
wolfSSL 3:6f956bdb3073 129 int wolfSSL_EC_POINT_is_at_infinity(const WOLFSSL_EC_GROUP *group,
wolfSSL 3:6f956bdb3073 130 const WOLFSSL_EC_POINT *a);
wolfSSL 3:6f956bdb3073 131
wolfSSL 3:6f956bdb3073 132 #define EC_KEY_free wolfSSL_EC_KEY_free
wolfSSL 3:6f956bdb3073 133 #define EC_KEY_get0_public_key wolfSSL_EC_KEY_get0_public_key
wolfSSL 3:6f956bdb3073 134 #define EC_KEY_get0_group wolfSSL_EC_KEY_get0_group
wolfSSL 3:6f956bdb3073 135 #define EC_KEY_set_private_key wolfSSL_EC_KEY_set_private_key
wolfSSL 3:6f956bdb3073 136 #define EC_KEY_get0_private_key wolfSSL_EC_KEY_get0_private_key
wolfSSL 3:6f956bdb3073 137 #define EC_KEY_new_by_curve_name wolfSSL_EC_KEY_new_by_curve_name
wolfSSL 3:6f956bdb3073 138 #define EC_KEY_set_group wolfSSL_EC_KEY_set_group
wolfSSL 3:6f956bdb3073 139 #define EC_KEY_generate_key wolfSSL_EC_KEY_generate_key
wolfSSL 3:6f956bdb3073 140 #define EC_KEY_set_asn1_flag wolfSSL_EC_KEY_set_asn1_flag
wolfSSL 3:6f956bdb3073 141 #define EC_KEY_set_public_key wolfSSL_EC_KEY_set_public_key
wolfSSL 3:6f956bdb3073 142 #define EC_KEY_new wolfSSL_EC_KEY_new
wolfSSL 3:6f956bdb3073 143
wolfSSL 3:6f956bdb3073 144 #define EC_GROUP_set_asn1_flag wolfSSL_EC_GROUP_set_asn1_flag
wolfSSL 3:6f956bdb3073 145 #define EC_GROUP_new_by_curve_name wolfSSL_EC_GROUP_new_by_curve_name
wolfSSL 3:6f956bdb3073 146 #define EC_GROUP_cmp wolfSSL_EC_GROUP_cmp
wolfSSL 3:6f956bdb3073 147 #define EC_GROUP_get_curve_name wolfSSL_EC_GROUP_get_curve_name
wolfSSL 3:6f956bdb3073 148 #define EC_GROUP_get_degree wolfSSL_EC_GROUP_get_degree
wolfSSL 3:6f956bdb3073 149 #define EC_GROUP_get_order wolfSSL_EC_GROUP_get_order
wolfSSL 3:6f956bdb3073 150 #define EC_GROUP_free wolfSSL_EC_GROUP_free
wolfSSL 3:6f956bdb3073 151
wolfSSL 3:6f956bdb3073 152 #define EC_POINT_new wolfSSL_EC_POINT_new
wolfSSL 3:6f956bdb3073 153 #define EC_POINT_get_affine_coordinates_GFp \
wolfSSL 3:6f956bdb3073 154 wolfSSL_EC_POINT_get_affine_coordinates_GFp
wolfSSL 3:6f956bdb3073 155 #define EC_POINT_mul wolfSSL_EC_POINT_mul
wolfSSL 3:6f956bdb3073 156 #define EC_POINT_clear_free wolfSSL_EC_POINT_clear_free
wolfSSL 3:6f956bdb3073 157 #define EC_POINT_cmp wolfSSL_EC_POINT_cmp
wolfSSL 3:6f956bdb3073 158 #define EC_POINT_free wolfSSL_EC_POINT_free
wolfSSL 3:6f956bdb3073 159 #define EC_POINT_is_at_infinity wolfSSL_EC_POINT_is_at_infinity
wolfSSL 3:6f956bdb3073 160
wolfSSL 3:6f956bdb3073 161 #ifdef __cplusplus
wolfSSL 3:6f956bdb3073 162 } /* extern "C" */
wolfSSL 3:6f956bdb3073 163 #endif
wolfSSL 3:6f956bdb3073 164
wolfSSL 3:6f956bdb3073 165 #endif /* header */
wolfSSL 3:6f956bdb3073 166