Xuyi Wang / wolfSSL

Dependents:   OS

Committer:
wolfSSL
Date:
Sat Aug 18 22:20:43 2018 +0000
Revision:
15:117db924cf7c
wolfSSL 3.15.3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wolfSSL 15:117db924cf7c 1 /* ec.h
wolfSSL 15:117db924cf7c 2 *
wolfSSL 15:117db924cf7c 3 * Copyright (C) 2006-2017 wolfSSL Inc.
wolfSSL 15:117db924cf7c 4 *
wolfSSL 15:117db924cf7c 5 * This file is part of wolfSSL.
wolfSSL 15:117db924cf7c 6 *
wolfSSL 15:117db924cf7c 7 * wolfSSL is free software; you can redistribute it and/or modify
wolfSSL 15:117db924cf7c 8 * it under the terms of the GNU General Public License as published by
wolfSSL 15:117db924cf7c 9 * the Free Software Foundation; either version 2 of the License, or
wolfSSL 15:117db924cf7c 10 * (at your option) any later version.
wolfSSL 15:117db924cf7c 11 *
wolfSSL 15:117db924cf7c 12 * wolfSSL is distributed in the hope that it will be useful,
wolfSSL 15:117db924cf7c 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
wolfSSL 15:117db924cf7c 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
wolfSSL 15:117db924cf7c 15 * GNU General Public License for more details.
wolfSSL 15:117db924cf7c 16 *
wolfSSL 15:117db924cf7c 17 * You should have received a copy of the GNU General Public License
wolfSSL 15:117db924cf7c 18 * along with this program; if not, write to the Free Software
wolfSSL 15:117db924cf7c 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
wolfSSL 15:117db924cf7c 20 */
wolfSSL 15:117db924cf7c 21
wolfSSL 15:117db924cf7c 22 /* ec.h for openssl */
wolfSSL 15:117db924cf7c 23
wolfSSL 15:117db924cf7c 24 #ifndef WOLFSSL_EC_H_
wolfSSL 15:117db924cf7c 25 #define WOLFSSL_EC_H_
wolfSSL 15:117db924cf7c 26
wolfSSL 15:117db924cf7c 27 #include <wolfssl/openssl/bn.h>
wolfSSL 15:117db924cf7c 28 #include <wolfssl/wolfcrypt/ecc.h>
wolfSSL 15:117db924cf7c 29
wolfSSL 15:117db924cf7c 30 #ifdef __cplusplus
wolfSSL 15:117db924cf7c 31 extern "C" {
wolfSSL 15:117db924cf7c 32 #endif
wolfSSL 15:117db924cf7c 33
wolfSSL 15:117db924cf7c 34 /* Map OpenSSL NID value */
wolfSSL 15:117db924cf7c 35 enum {
wolfSSL 15:117db924cf7c 36 POINT_CONVERSION_UNCOMPRESSED = 4,
wolfSSL 15:117db924cf7c 37
wolfSSL 15:117db924cf7c 38 #ifdef HAVE_ECC
wolfSSL 15:117db924cf7c 39 /* Use ecc_curve_type enum values for NID */
wolfSSL 15:117db924cf7c 40 NID_X9_62_prime192v1 = ECC_SECP192R1,
wolfSSL 15:117db924cf7c 41 NID_X9_62_prime256v1 = ECC_SECP256R1,
wolfSSL 15:117db924cf7c 42 NID_secp112r1 = ECC_SECP112R1,
wolfSSL 15:117db924cf7c 43 NID_secp112r2 = ECC_SECP112R2,
wolfSSL 15:117db924cf7c 44 NID_secp128r1 = ECC_SECP128R1,
wolfSSL 15:117db924cf7c 45 NID_secp128r2 = ECC_SECP128R2,
wolfSSL 15:117db924cf7c 46 NID_secp160r1 = ECC_SECP160R1,
wolfSSL 15:117db924cf7c 47 NID_secp160r2 = ECC_SECP160R2,
wolfSSL 15:117db924cf7c 48 NID_secp224r1 = ECC_SECP224R1,
wolfSSL 15:117db924cf7c 49 NID_secp384r1 = ECC_SECP384R1,
wolfSSL 15:117db924cf7c 50 NID_secp521r1 = ECC_SECP521R1,
wolfSSL 15:117db924cf7c 51 NID_secp160k1 = ECC_SECP160K1,
wolfSSL 15:117db924cf7c 52 NID_secp192k1 = ECC_SECP192K1,
wolfSSL 15:117db924cf7c 53 NID_secp224k1 = ECC_SECP224K1,
wolfSSL 15:117db924cf7c 54 NID_secp256k1 = ECC_SECP256K1,
wolfSSL 15:117db924cf7c 55 NID_brainpoolP160r1 = ECC_BRAINPOOLP160R1,
wolfSSL 15:117db924cf7c 56 NID_brainpoolP192r1 = ECC_BRAINPOOLP192R1,
wolfSSL 15:117db924cf7c 57 NID_brainpoolP224r1 = ECC_BRAINPOOLP224R1,
wolfSSL 15:117db924cf7c 58 NID_brainpoolP256r1 = ECC_BRAINPOOLP256R1,
wolfSSL 15:117db924cf7c 59 NID_brainpoolP320r1 = ECC_BRAINPOOLP320R1,
wolfSSL 15:117db924cf7c 60 NID_brainpoolP384r1 = ECC_BRAINPOOLP384R1,
wolfSSL 15:117db924cf7c 61 NID_brainpoolP512r1 = ECC_BRAINPOOLP512R1,
wolfSSL 15:117db924cf7c 62 #endif
wolfSSL 15:117db924cf7c 63
wolfSSL 15:117db924cf7c 64 OPENSSL_EC_NAMED_CURVE = 0x001
wolfSSL 15:117db924cf7c 65 };
wolfSSL 15:117db924cf7c 66
wolfSSL 15:117db924cf7c 67 #ifndef WOLFSSL_EC_TYPE_DEFINED /* guard on redeclaration */
wolfSSL 15:117db924cf7c 68 typedef struct WOLFSSL_EC_KEY WOLFSSL_EC_KEY;
wolfSSL 15:117db924cf7c 69 typedef struct WOLFSSL_EC_POINT WOLFSSL_EC_POINT;
wolfSSL 15:117db924cf7c 70 typedef struct WOLFSSL_EC_GROUP WOLFSSL_EC_GROUP;
wolfSSL 15:117db924cf7c 71 #define WOLFSSL_EC_TYPE_DEFINED
wolfSSL 15:117db924cf7c 72 #endif
wolfSSL 15:117db924cf7c 73
wolfSSL 15:117db924cf7c 74 typedef WOLFSSL_EC_KEY EC_KEY;
wolfSSL 15:117db924cf7c 75 typedef WOLFSSL_EC_GROUP EC_GROUP;
wolfSSL 15:117db924cf7c 76 typedef WOLFSSL_EC_POINT EC_POINT;
wolfSSL 15:117db924cf7c 77
wolfSSL 15:117db924cf7c 78 struct WOLFSSL_EC_POINT {
wolfSSL 15:117db924cf7c 79 WOLFSSL_BIGNUM *X;
wolfSSL 15:117db924cf7c 80 WOLFSSL_BIGNUM *Y;
wolfSSL 15:117db924cf7c 81 WOLFSSL_BIGNUM *Z;
wolfSSL 15:117db924cf7c 82
wolfSSL 15:117db924cf7c 83 void* internal; /* our ECC point */
wolfSSL 15:117db924cf7c 84 char inSet; /* internal set from external ? */
wolfSSL 15:117db924cf7c 85 char exSet; /* external set from internal ? */
wolfSSL 15:117db924cf7c 86 };
wolfSSL 15:117db924cf7c 87
wolfSSL 15:117db924cf7c 88 struct WOLFSSL_EC_GROUP {
wolfSSL 15:117db924cf7c 89 int curve_idx; /* index of curve, used by WolfSSL as reference */
wolfSSL 15:117db924cf7c 90 int curve_nid; /* NID of curve, used by OpenSSL/OpenSSH as reference */
wolfSSL 15:117db924cf7c 91 int curve_oid; /* OID of curve, used by OpenSSL/OpenSSH as reference */
wolfSSL 15:117db924cf7c 92 };
wolfSSL 15:117db924cf7c 93
wolfSSL 15:117db924cf7c 94 struct WOLFSSL_EC_KEY {
wolfSSL 15:117db924cf7c 95 WOLFSSL_EC_GROUP *group;
wolfSSL 15:117db924cf7c 96 WOLFSSL_EC_POINT *pub_key;
wolfSSL 15:117db924cf7c 97 WOLFSSL_BIGNUM *priv_key;
wolfSSL 15:117db924cf7c 98
wolfSSL 15:117db924cf7c 99 void* internal; /* our ECC Key */
wolfSSL 15:117db924cf7c 100 char inSet; /* internal set from external ? */
wolfSSL 15:117db924cf7c 101 char exSet; /* external set from internal ? */
wolfSSL 15:117db924cf7c 102 };
wolfSSL 15:117db924cf7c 103
wolfSSL 15:117db924cf7c 104 WOLFSSL_API
wolfSSL 15:117db924cf7c 105 int wolfSSL_ECPoint_i2d(const WOLFSSL_EC_GROUP *curve,
wolfSSL 15:117db924cf7c 106 const WOLFSSL_EC_POINT *p,
wolfSSL 15:117db924cf7c 107 unsigned char *out, unsigned int *len);
wolfSSL 15:117db924cf7c 108 WOLFSSL_API
wolfSSL 15:117db924cf7c 109 int wolfSSL_ECPoint_d2i(unsigned char *in, unsigned int len,
wolfSSL 15:117db924cf7c 110 const WOLFSSL_EC_GROUP *curve, WOLFSSL_EC_POINT *p);
wolfSSL 15:117db924cf7c 111 WOLFSSL_API
wolfSSL 15:117db924cf7c 112 int wolfSSL_EC_KEY_LoadDer(WOLFSSL_EC_KEY* key,
wolfSSL 15:117db924cf7c 113 const unsigned char* der, int derSz);
wolfSSL 15:117db924cf7c 114 WOLFSSL_API
wolfSSL 15:117db924cf7c 115 void wolfSSL_EC_KEY_free(WOLFSSL_EC_KEY *key);
wolfSSL 15:117db924cf7c 116 WOLFSSL_API
wolfSSL 15:117db924cf7c 117 WOLFSSL_EC_POINT *wolfSSL_EC_KEY_get0_public_key(const WOLFSSL_EC_KEY *key);
wolfSSL 15:117db924cf7c 118 WOLFSSL_API
wolfSSL 15:117db924cf7c 119 const WOLFSSL_EC_GROUP *wolfSSL_EC_KEY_get0_group(const WOLFSSL_EC_KEY *key);
wolfSSL 15:117db924cf7c 120 WOLFSSL_API
wolfSSL 15:117db924cf7c 121 int wolfSSL_EC_KEY_set_private_key(WOLFSSL_EC_KEY *key,
wolfSSL 15:117db924cf7c 122 const WOLFSSL_BIGNUM *priv_key);
wolfSSL 15:117db924cf7c 123 WOLFSSL_API
wolfSSL 15:117db924cf7c 124 WOLFSSL_BIGNUM *wolfSSL_EC_KEY_get0_private_key(const WOLFSSL_EC_KEY *key);
wolfSSL 15:117db924cf7c 125 WOLFSSL_API
wolfSSL 15:117db924cf7c 126 WOLFSSL_EC_KEY *wolfSSL_EC_KEY_new_by_curve_name(int nid);
wolfSSL 15:117db924cf7c 127 WOLFSSL_API
wolfSSL 15:117db924cf7c 128 WOLFSSL_EC_KEY *wolfSSL_EC_KEY_new(void);
wolfSSL 15:117db924cf7c 129 WOLFSSL_API
wolfSSL 15:117db924cf7c 130 int wolfSSL_EC_KEY_set_group(WOLFSSL_EC_KEY *key, WOLFSSL_EC_GROUP *group);
wolfSSL 15:117db924cf7c 131 WOLFSSL_API
wolfSSL 15:117db924cf7c 132 int wolfSSL_EC_KEY_generate_key(WOLFSSL_EC_KEY *key);
wolfSSL 15:117db924cf7c 133 WOLFSSL_API
wolfSSL 15:117db924cf7c 134 void wolfSSL_EC_KEY_set_asn1_flag(WOLFSSL_EC_KEY *key, int asn1_flag);
wolfSSL 15:117db924cf7c 135 WOLFSSL_API
wolfSSL 15:117db924cf7c 136 int wolfSSL_EC_KEY_set_public_key(WOLFSSL_EC_KEY *key,
wolfSSL 15:117db924cf7c 137 const WOLFSSL_EC_POINT *pub);
wolfSSL 15:117db924cf7c 138 WOLFSSL_API
wolfSSL 15:117db924cf7c 139 void wolfSSL_EC_GROUP_set_asn1_flag(WOLFSSL_EC_GROUP *group, int flag);
wolfSSL 15:117db924cf7c 140 WOLFSSL_API
wolfSSL 15:117db924cf7c 141 WOLFSSL_EC_GROUP *wolfSSL_EC_GROUP_new_by_curve_name(int nid);
wolfSSL 15:117db924cf7c 142 WOLFSSL_API
wolfSSL 15:117db924cf7c 143 int wolfSSL_EC_GROUP_cmp(const WOLFSSL_EC_GROUP *a, const WOLFSSL_EC_GROUP *b,
wolfSSL 15:117db924cf7c 144 WOLFSSL_BN_CTX *ctx);
wolfSSL 15:117db924cf7c 145 WOLFSSL_API
wolfSSL 15:117db924cf7c 146 int wolfSSL_EC_GROUP_get_curve_name(const WOLFSSL_EC_GROUP *group);
wolfSSL 15:117db924cf7c 147 WOLFSSL_API
wolfSSL 15:117db924cf7c 148 int wolfSSL_EC_GROUP_get_degree(const WOLFSSL_EC_GROUP *group);
wolfSSL 15:117db924cf7c 149 WOLFSSL_API
wolfSSL 15:117db924cf7c 150 int wolfSSL_EC_GROUP_get_order(const WOLFSSL_EC_GROUP *group,
wolfSSL 15:117db924cf7c 151 WOLFSSL_BIGNUM *order, WOLFSSL_BN_CTX *ctx);
wolfSSL 15:117db924cf7c 152 WOLFSSL_API
wolfSSL 15:117db924cf7c 153 void wolfSSL_EC_GROUP_free(WOLFSSL_EC_GROUP *group);
wolfSSL 15:117db924cf7c 154 WOLFSSL_API
wolfSSL 15:117db924cf7c 155 WOLFSSL_EC_POINT *wolfSSL_EC_POINT_new(const WOLFSSL_EC_GROUP *group);
wolfSSL 15:117db924cf7c 156 WOLFSSL_API
wolfSSL 15:117db924cf7c 157 int wolfSSL_EC_POINT_get_affine_coordinates_GFp(const WOLFSSL_EC_GROUP *group,
wolfSSL 15:117db924cf7c 158 const WOLFSSL_EC_POINT *p,
wolfSSL 15:117db924cf7c 159 WOLFSSL_BIGNUM *x,
wolfSSL 15:117db924cf7c 160 WOLFSSL_BIGNUM *y,
wolfSSL 15:117db924cf7c 161 WOLFSSL_BN_CTX *ctx);
wolfSSL 15:117db924cf7c 162 WOLFSSL_API
wolfSSL 15:117db924cf7c 163 int wolfSSL_EC_POINT_mul(const WOLFSSL_EC_GROUP *group, WOLFSSL_EC_POINT *r,
wolfSSL 15:117db924cf7c 164 const WOLFSSL_BIGNUM *n,
wolfSSL 15:117db924cf7c 165 const WOLFSSL_EC_POINT *q, const WOLFSSL_BIGNUM *m,
wolfSSL 15:117db924cf7c 166 WOLFSSL_BN_CTX *ctx);
wolfSSL 15:117db924cf7c 167 WOLFSSL_API
wolfSSL 15:117db924cf7c 168 void wolfSSL_EC_POINT_clear_free(WOLFSSL_EC_POINT *point);
wolfSSL 15:117db924cf7c 169 WOLFSSL_API
wolfSSL 15:117db924cf7c 170 int wolfSSL_EC_POINT_cmp(const WOLFSSL_EC_GROUP *group,
wolfSSL 15:117db924cf7c 171 const WOLFSSL_EC_POINT *a, const WOLFSSL_EC_POINT *b,
wolfSSL 15:117db924cf7c 172 WOLFSSL_BN_CTX *ctx);
wolfSSL 15:117db924cf7c 173 WOLFSSL_API
wolfSSL 15:117db924cf7c 174 void wolfSSL_EC_POINT_free(WOLFSSL_EC_POINT *point);
wolfSSL 15:117db924cf7c 175 WOLFSSL_API
wolfSSL 15:117db924cf7c 176 int wolfSSL_EC_POINT_is_at_infinity(const WOLFSSL_EC_GROUP *group,
wolfSSL 15:117db924cf7c 177 const WOLFSSL_EC_POINT *a);
wolfSSL 15:117db924cf7c 178
wolfSSL 15:117db924cf7c 179 #define EC_KEY_free wolfSSL_EC_KEY_free
wolfSSL 15:117db924cf7c 180 #define EC_KEY_get0_public_key wolfSSL_EC_KEY_get0_public_key
wolfSSL 15:117db924cf7c 181 #define EC_KEY_get0_group wolfSSL_EC_KEY_get0_group
wolfSSL 15:117db924cf7c 182 #define EC_KEY_set_private_key wolfSSL_EC_KEY_set_private_key
wolfSSL 15:117db924cf7c 183 #define EC_KEY_get0_private_key wolfSSL_EC_KEY_get0_private_key
wolfSSL 15:117db924cf7c 184 #define EC_KEY_new_by_curve_name wolfSSL_EC_KEY_new_by_curve_name
wolfSSL 15:117db924cf7c 185 #define EC_KEY_set_group wolfSSL_EC_KEY_set_group
wolfSSL 15:117db924cf7c 186 #define EC_KEY_generate_key wolfSSL_EC_KEY_generate_key
wolfSSL 15:117db924cf7c 187 #define EC_KEY_set_asn1_flag wolfSSL_EC_KEY_set_asn1_flag
wolfSSL 15:117db924cf7c 188 #define EC_KEY_set_public_key wolfSSL_EC_KEY_set_public_key
wolfSSL 15:117db924cf7c 189 #define EC_KEY_new wolfSSL_EC_KEY_new
wolfSSL 15:117db924cf7c 190
wolfSSL 15:117db924cf7c 191 #define EC_GROUP_set_asn1_flag wolfSSL_EC_GROUP_set_asn1_flag
wolfSSL 15:117db924cf7c 192 #define EC_GROUP_new_by_curve_name wolfSSL_EC_GROUP_new_by_curve_name
wolfSSL 15:117db924cf7c 193 #define EC_GROUP_cmp wolfSSL_EC_GROUP_cmp
wolfSSL 15:117db924cf7c 194 #define EC_GROUP_get_curve_name wolfSSL_EC_GROUP_get_curve_name
wolfSSL 15:117db924cf7c 195 #define EC_GROUP_get_degree wolfSSL_EC_GROUP_get_degree
wolfSSL 15:117db924cf7c 196 #define EC_GROUP_get_order wolfSSL_EC_GROUP_get_order
wolfSSL 15:117db924cf7c 197 #define EC_GROUP_free wolfSSL_EC_GROUP_free
wolfSSL 15:117db924cf7c 198
wolfSSL 15:117db924cf7c 199 #define EC_POINT_new wolfSSL_EC_POINT_new
wolfSSL 15:117db924cf7c 200 #define EC_POINT_get_affine_coordinates_GFp \
wolfSSL 15:117db924cf7c 201 wolfSSL_EC_POINT_get_affine_coordinates_GFp
wolfSSL 15:117db924cf7c 202 #define EC_POINT_mul wolfSSL_EC_POINT_mul
wolfSSL 15:117db924cf7c 203 #define EC_POINT_clear_free wolfSSL_EC_POINT_clear_free
wolfSSL 15:117db924cf7c 204 #define EC_POINT_cmp wolfSSL_EC_POINT_cmp
wolfSSL 15:117db924cf7c 205 #define EC_POINT_free wolfSSL_EC_POINT_free
wolfSSL 15:117db924cf7c 206 #define EC_POINT_is_at_infinity wolfSSL_EC_POINT_is_at_infinity
wolfSSL 15:117db924cf7c 207
wolfSSL 15:117db924cf7c 208 #define EC_POINT_dump wolfSSL_EC_POINT_dump
wolfSSL 15:117db924cf7c 209
wolfSSL 15:117db924cf7c 210 #ifdef __cplusplus
wolfSSL 15:117db924cf7c 211 } /* extern "C" */
wolfSSL 15:117db924cf7c 212 #endif
wolfSSL 15:117db924cf7c 213
wolfSSL 15:117db924cf7c 214 #endif /* header */
wolfSSL 15:117db924cf7c 215