Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of wolfSSL by
ec.h
00001 /* ec.h for openssl */ 00002 00003 #ifndef WOLFSSL_EC_H_ 00004 #define WOLFSSL_EC_H_ 00005 00006 #include <wolfssl/openssl/bn.h> 00007 #include <wolfssl/wolfcrypt/ecc.h> 00008 00009 #ifdef __cplusplus 00010 extern "C" { 00011 #endif 00012 00013 /* Map OpenSSL NID value */ 00014 enum { 00015 POINT_CONVERSION_UNCOMPRESSED = 4, 00016 00017 #ifdef HAVE_ECC 00018 /* Use ecc_curve_type enum values for NID */ 00019 NID_X9_62_prime192v1 = ECC_SECP192R1, 00020 NID_X9_62_prime256v1 = ECC_SECP256R1, 00021 NID_secp112r1 = ECC_SECP112R1, 00022 NID_secp112r2 = ECC_SECP112R2, 00023 NID_secp128r1 = ECC_SECP128R1, 00024 NID_secp128r2 = ECC_SECP128R2, 00025 NID_secp160r1 = ECC_SECP160R1, 00026 NID_secp160r2 = ECC_SECP160R2, 00027 NID_secp224r1 = ECC_SECP224R1, 00028 NID_secp384r1 = ECC_SECP384R1, 00029 NID_secp521r1 = ECC_SECP521R1, 00030 NID_secp160k1 = ECC_SECP160K1, 00031 NID_secp192k1 = ECC_SECP192K1, 00032 NID_secp224k1 = ECC_SECP224K1, 00033 NID_secp256k1 = ECC_SECP256K1, 00034 NID_brainpoolP160r1 = ECC_BRAINPOOLP160R1, 00035 NID_brainpoolP192r1 = ECC_BRAINPOOLP192R1, 00036 NID_brainpoolP224r1 = ECC_BRAINPOOLP224R1, 00037 NID_brainpoolP256r1 = ECC_BRAINPOOLP256R1, 00038 NID_brainpoolP320r1 = ECC_BRAINPOOLP320R1, 00039 NID_brainpoolP384r1 = ECC_BRAINPOOLP384R1, 00040 NID_brainpoolP512r1 = ECC_BRAINPOOLP512R1, 00041 #endif 00042 00043 OPENSSL_EC_NAMED_CURVE = 0x001 00044 }; 00045 00046 #ifndef WOLFSSL_EC_TYPE_DEFINED /* guard on redeclaration */ 00047 typedef struct WOLFSSL_EC_KEY WOLFSSL_EC_KEY; 00048 typedef struct WOLFSSL_EC_POINT WOLFSSL_EC_POINT; 00049 typedef struct WOLFSSL_EC_GROUP WOLFSSL_EC_GROUP; 00050 #define WOLFSSL_EC_TYPE_DEFINED 00051 #endif 00052 00053 typedef WOLFSSL_EC_KEY EC_KEY; 00054 typedef WOLFSSL_EC_GROUP EC_GROUP; 00055 typedef WOLFSSL_EC_POINT EC_POINT; 00056 00057 struct WOLFSSL_EC_POINT { 00058 WOLFSSL_BIGNUM *X; 00059 WOLFSSL_BIGNUM *Y; 00060 WOLFSSL_BIGNUM *Z; 00061 00062 void* internal; /* our ECC point */ 00063 char inSet; /* internal set from external ? */ 00064 char exSet; /* external set from internal ? */ 00065 }; 00066 00067 struct WOLFSSL_EC_GROUP { 00068 int curve_idx; /* index of curve, used by WolfSSL as reference */ 00069 int curve_nid; /* NID of curve, used by OpenSSL/OpenSSH as reference */ 00070 int curve_oid; /* OID of curve, used by OpenSSL/OpenSSH as reference */ 00071 }; 00072 00073 struct WOLFSSL_EC_KEY { 00074 WOLFSSL_EC_GROUP *group; 00075 WOLFSSL_EC_POINT *pub_key; 00076 WOLFSSL_BIGNUM *priv_key; 00077 00078 void* internal; /* our ECC Key */ 00079 char inSet; /* internal set from external ? */ 00080 char exSet; /* external set from internal ? */ 00081 }; 00082 00083 WOLFSSL_API 00084 int wolfSSL_ECPoint_i2d(const WOLFSSL_EC_GROUP *curve, 00085 const WOLFSSL_EC_POINT *p, 00086 unsigned char *out, unsigned int *len); 00087 WOLFSSL_API 00088 int wolfSSL_ECPoint_d2i(unsigned char *in, unsigned int len, 00089 const WOLFSSL_EC_GROUP *curve, WOLFSSL_EC_POINT *p); 00090 WOLFSSL_API 00091 int wolfSSL_EC_KEY_LoadDer(WOLFSSL_EC_KEY* key, 00092 const unsigned char* der, int derSz); 00093 WOLFSSL_API 00094 void wolfSSL_EC_KEY_free(WOLFSSL_EC_KEY *key); 00095 WOLFSSL_API 00096 WOLFSSL_EC_POINT *wolfSSL_EC_KEY_get0_public_key(const WOLFSSL_EC_KEY *key); 00097 WOLFSSL_API 00098 const WOLFSSL_EC_GROUP *wolfSSL_EC_KEY_get0_group(const WOLFSSL_EC_KEY *key); 00099 WOLFSSL_API 00100 int wolfSSL_EC_KEY_set_private_key(WOLFSSL_EC_KEY *key, 00101 const WOLFSSL_BIGNUM *priv_key); 00102 WOLFSSL_API 00103 WOLFSSL_BIGNUM *wolfSSL_EC_KEY_get0_private_key(const WOLFSSL_EC_KEY *key); 00104 WOLFSSL_API 00105 WOLFSSL_EC_KEY *wolfSSL_EC_KEY_new_by_curve_name(int nid); 00106 WOLFSSL_API 00107 WOLFSSL_EC_KEY *wolfSSL_EC_KEY_new(void); 00108 WOLFSSL_API 00109 int wolfSSL_EC_KEY_set_group(WOLFSSL_EC_KEY *key, WOLFSSL_EC_GROUP *group); 00110 WOLFSSL_API 00111 int wolfSSL_EC_KEY_generate_key(WOLFSSL_EC_KEY *key); 00112 WOLFSSL_API 00113 void wolfSSL_EC_KEY_set_asn1_flag(WOLFSSL_EC_KEY *key, int asn1_flag); 00114 WOLFSSL_API 00115 int wolfSSL_EC_KEY_set_public_key(WOLFSSL_EC_KEY *key, 00116 const WOLFSSL_EC_POINT *pub); 00117 WOLFSSL_API 00118 void wolfSSL_EC_GROUP_set_asn1_flag(WOLFSSL_EC_GROUP *group, int flag); 00119 WOLFSSL_API 00120 WOLFSSL_EC_GROUP *wolfSSL_EC_GROUP_new_by_curve_name(int nid); 00121 WOLFSSL_API 00122 int wolfSSL_EC_GROUP_cmp(const WOLFSSL_EC_GROUP *a, const WOLFSSL_EC_GROUP *b, 00123 WOLFSSL_BN_CTX *ctx); 00124 WOLFSSL_API 00125 int wolfSSL_EC_GROUP_get_curve_name(const WOLFSSL_EC_GROUP *group); 00126 WOLFSSL_API 00127 int wolfSSL_EC_GROUP_get_degree(const WOLFSSL_EC_GROUP *group); 00128 WOLFSSL_API 00129 int wolfSSL_EC_GROUP_get_order(const WOLFSSL_EC_GROUP *group, 00130 WOLFSSL_BIGNUM *order, WOLFSSL_BN_CTX *ctx); 00131 WOLFSSL_API 00132 void wolfSSL_EC_GROUP_free(WOLFSSL_EC_GROUP *group); 00133 #if defined(DEBUG_WOLFSSL) && !defined(NO_FILESYSTEM) 00134 WOLFSSL_API 00135 void wolfssl_EC_POINT_dump(const char *msg, const WOLFSSL_EC_POINT *p); 00136 #endif 00137 WOLFSSL_API 00138 WOLFSSL_EC_POINT *wolfSSL_EC_POINT_new(const WOLFSSL_EC_GROUP *group); 00139 WOLFSSL_API 00140 int wolfSSL_EC_POINT_get_affine_coordinates_GFp(const WOLFSSL_EC_GROUP *group, 00141 const WOLFSSL_EC_POINT *p, 00142 WOLFSSL_BIGNUM *x, 00143 WOLFSSL_BIGNUM *y, 00144 WOLFSSL_BN_CTX *ctx); 00145 WOLFSSL_API 00146 int wolfSSL_EC_POINT_mul(const WOLFSSL_EC_GROUP *group, WOLFSSL_EC_POINT *r, 00147 const WOLFSSL_BIGNUM *n, 00148 const WOLFSSL_EC_POINT *q, const WOLFSSL_BIGNUM *m, 00149 WOLFSSL_BN_CTX *ctx); 00150 WOLFSSL_API 00151 void wolfSSL_EC_POINT_clear_free(WOLFSSL_EC_POINT *point); 00152 WOLFSSL_API 00153 int wolfSSL_EC_POINT_cmp(const WOLFSSL_EC_GROUP *group, 00154 const WOLFSSL_EC_POINT *a, const WOLFSSL_EC_POINT *b, 00155 WOLFSSL_BN_CTX *ctx); 00156 WOLFSSL_API 00157 void wolfSSL_EC_POINT_free(WOLFSSL_EC_POINT *point); 00158 WOLFSSL_API 00159 int wolfSSL_EC_POINT_is_at_infinity(const WOLFSSL_EC_GROUP *group, 00160 const WOLFSSL_EC_POINT *a); 00161 00162 #define EC_KEY_free wolfSSL_EC_KEY_free 00163 #define EC_KEY_get0_public_key wolfSSL_EC_KEY_get0_public_key 00164 #define EC_KEY_get0_group wolfSSL_EC_KEY_get0_group 00165 #define EC_KEY_set_private_key wolfSSL_EC_KEY_set_private_key 00166 #define EC_KEY_get0_private_key wolfSSL_EC_KEY_get0_private_key 00167 #define EC_KEY_new_by_curve_name wolfSSL_EC_KEY_new_by_curve_name 00168 #define EC_KEY_set_group wolfSSL_EC_KEY_set_group 00169 #define EC_KEY_generate_key wolfSSL_EC_KEY_generate_key 00170 #define EC_KEY_set_asn1_flag wolfSSL_EC_KEY_set_asn1_flag 00171 #define EC_KEY_set_public_key wolfSSL_EC_KEY_set_public_key 00172 #define EC_KEY_new wolfSSL_EC_KEY_new 00173 00174 #define EC_GROUP_set_asn1_flag wolfSSL_EC_GROUP_set_asn1_flag 00175 #define EC_GROUP_new_by_curve_name wolfSSL_EC_GROUP_new_by_curve_name 00176 #define EC_GROUP_cmp wolfSSL_EC_GROUP_cmp 00177 #define EC_GROUP_get_curve_name wolfSSL_EC_GROUP_get_curve_name 00178 #define EC_GROUP_get_degree wolfSSL_EC_GROUP_get_degree 00179 #define EC_GROUP_get_order wolfSSL_EC_GROUP_get_order 00180 #define EC_GROUP_free wolfSSL_EC_GROUP_free 00181 00182 #define EC_POINT_new wolfSSL_EC_POINT_new 00183 #define EC_POINT_get_affine_coordinates_GFp \ 00184 wolfSSL_EC_POINT_get_affine_coordinates_GFp 00185 #define EC_POINT_mul wolfSSL_EC_POINT_mul 00186 #define EC_POINT_clear_free wolfSSL_EC_POINT_clear_free 00187 #define EC_POINT_cmp wolfSSL_EC_POINT_cmp 00188 #define EC_POINT_free wolfSSL_EC_POINT_free 00189 #define EC_POINT_is_at_infinity wolfSSL_EC_POINT_is_at_infinity 00190 00191 #ifdef __cplusplus 00192 } /* extern "C" */ 00193 #endif 00194 00195 #endif /* header */ 00196
Generated on Tue Jul 12 2022 23:30:55 by
1.7.2
