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.
ec.h
00001 /* ec.h for openssl */ 00002 00003 #ifndef WOLFSSL_EC_H_ 00004 #define WOLFSSL_EC_H_ 00005 00006 #include <wolfssl/openssl/ssl.h> 00007 #include <wolfssl/openssl/bn.h> 00008 00009 #ifdef __cplusplus 00010 extern "C" { 00011 #endif 00012 00013 /* Map OpenSSL NID value */ 00014 enum { 00015 POINT_CONVERSION_UNCOMPRESSED = 4, 00016 NID_secp111r1 = 0, 00017 NID_secp128r1 = 1, 00018 NID_secp160r1 = 2, 00019 NID_cert192 = 3, 00020 NID_cert224 = 4, 00021 NID_X9_62_prime256v1 = 5, 00022 NID_secp384r1 = 6, 00023 NID_secp521r1 = 7, 00024 NID_X9_62_prime_field = 100, 00025 OPENSSL_EC_NAMED_CURVE = 0x001 00026 }; 00027 00028 struct WOLFSSL_EC_POINT { 00029 WOLFSSL_BIGNUM *X; 00030 WOLFSSL_BIGNUM *Y; 00031 WOLFSSL_BIGNUM *Z; 00032 00033 void* internal; /* our ECC point */ 00034 char inSet; /* internal set from external ? */ 00035 char exSet; /* external set from internal ? */ 00036 }; 00037 00038 struct WOLFSSL_EC_GROUP { 00039 int curve_idx; /* index of curve, used by WolfSSL as reference */ 00040 int curve_nid; /* NID of curve, used by OpenSSL/OpenSSH as reference */ 00041 }; 00042 00043 struct WOLFSSL_EC_KEY { 00044 WOLFSSL_EC_GROUP *group; 00045 WOLFSSL_EC_POINT *pub_key; 00046 WOLFSSL_BIGNUM *priv_key; 00047 00048 void* internal; /* our ECC Key */ 00049 char inSet; /* internal set from external ? */ 00050 char exSet; /* external set from internal ? */ 00051 }; 00052 00053 WOLFSSL_API 00054 int wolfSSL_ECPoint_i2d(const WOLFSSL_EC_GROUP *curve, 00055 const WOLFSSL_EC_POINT *p, 00056 unsigned char *out, unsigned int *len); 00057 WOLFSSL_API 00058 int wolfSSL_ECPoint_d2i(unsigned char *in, unsigned int len, 00059 const WOLFSSL_EC_GROUP *curve, WOLFSSL_EC_POINT *p); 00060 WOLFSSL_API 00061 int wolfSSL_EC_KEY_LoadDer(WOLFSSL_EC_KEY* key, 00062 const unsigned char* der, int derSz); 00063 WOLFSSL_API 00064 void wolfSSL_EC_KEY_free(WOLFSSL_EC_KEY *key); 00065 WOLFSSL_API 00066 WOLFSSL_EC_POINT *wolfSSL_EC_KEY_get0_public_key(const WOLFSSL_EC_KEY *key); 00067 WOLFSSL_API 00068 const WOLFSSL_EC_GROUP *wolfSSL_EC_KEY_get0_group(const WOLFSSL_EC_KEY *key); 00069 WOLFSSL_API 00070 int wolfSSL_EC_KEY_set_private_key(WOLFSSL_EC_KEY *key, 00071 const WOLFSSL_BIGNUM *priv_key); 00072 WOLFSSL_API 00073 WOLFSSL_BIGNUM *wolfSSL_EC_KEY_get0_private_key(const WOLFSSL_EC_KEY *key); 00074 WOLFSSL_API 00075 WOLFSSL_EC_KEY *wolfSSL_EC_KEY_new_by_curve_name(int nid); 00076 WOLFSSL_API 00077 WOLFSSL_EC_KEY *wolfSSL_EC_KEY_new(void); 00078 WOLFSSL_API 00079 int wolfSSL_EC_KEY_set_group(WOLFSSL_EC_KEY *key, WOLFSSL_EC_GROUP *group); 00080 WOLFSSL_API 00081 int wolfSSL_EC_KEY_generate_key(WOLFSSL_EC_KEY *key); 00082 WOLFSSL_API 00083 void wolfSSL_EC_KEY_set_asn1_flag(WOLFSSL_EC_KEY *key, int asn1_flag); 00084 WOLFSSL_API 00085 int wolfSSL_EC_KEY_set_public_key(WOLFSSL_EC_KEY *key, 00086 const WOLFSSL_EC_POINT *pub); 00087 WOLFSSL_API 00088 void wolfSSL_EC_GROUP_set_asn1_flag(WOLFSSL_EC_GROUP *group, int flag); 00089 WOLFSSL_API 00090 WOLFSSL_EC_GROUP *wolfSSL_EC_GROUP_new_by_curve_name(int nid); 00091 WOLFSSL_API 00092 int wolfSSL_EC_GROUP_cmp(const WOLFSSL_EC_GROUP *a, const WOLFSSL_EC_GROUP *b, 00093 WOLFSSL_BN_CTX *ctx); 00094 WOLFSSL_API 00095 int wolfSSL_EC_GROUP_get_curve_name(const WOLFSSL_EC_GROUP *group); 00096 WOLFSSL_API 00097 int wolfSSL_EC_GROUP_get_degree(const WOLFSSL_EC_GROUP *group); 00098 WOLFSSL_API 00099 int wolfSSL_EC_GROUP_get_order(const WOLFSSL_EC_GROUP *group, 00100 WOLFSSL_BIGNUM *order, WOLFSSL_BN_CTX *ctx); 00101 WOLFSSL_API 00102 void wolfSSL_EC_GROUP_free(WOLFSSL_EC_GROUP *group); 00103 #if defined(DEBUG_WOLFSSL) && !defined(NO_FILESYSTEM) 00104 WOLFSSL_API 00105 void wolfssl_EC_POINT_dump(const char *msg, const WOLFSSL_EC_POINT *p); 00106 #endif 00107 WOLFSSL_API 00108 WOLFSSL_EC_POINT *wolfSSL_EC_POINT_new(const WOLFSSL_EC_GROUP *group); 00109 WOLFSSL_API 00110 int wolfSSL_EC_POINT_get_affine_coordinates_GFp(const WOLFSSL_EC_GROUP *group, 00111 const WOLFSSL_EC_POINT *p, 00112 WOLFSSL_BIGNUM *x, 00113 WOLFSSL_BIGNUM *y, 00114 WOLFSSL_BN_CTX *ctx); 00115 WOLFSSL_API 00116 int wolfSSL_EC_POINT_mul(const WOLFSSL_EC_GROUP *group, WOLFSSL_EC_POINT *r, 00117 const WOLFSSL_BIGNUM *n, 00118 const WOLFSSL_EC_POINT *q, const WOLFSSL_BIGNUM *m, 00119 WOLFSSL_BN_CTX *ctx); 00120 WOLFSSL_API 00121 void wolfSSL_EC_POINT_clear_free(WOLFSSL_EC_POINT *point); 00122 WOLFSSL_API 00123 int wolfSSL_EC_POINT_cmp(const WOLFSSL_EC_GROUP *group, 00124 const WOLFSSL_EC_POINT *a, const WOLFSSL_EC_POINT *b, 00125 WOLFSSL_BN_CTX *ctx); 00126 WOLFSSL_API 00127 void wolfSSL_EC_POINT_free(WOLFSSL_EC_POINT *point); 00128 WOLFSSL_API 00129 int wolfSSL_EC_POINT_is_at_infinity(const WOLFSSL_EC_GROUP *group, 00130 const WOLFSSL_EC_POINT *a); 00131 00132 #define EC_KEY_free wolfSSL_EC_KEY_free 00133 #define EC_KEY_get0_public_key wolfSSL_EC_KEY_get0_public_key 00134 #define EC_KEY_get0_group wolfSSL_EC_KEY_get0_group 00135 #define EC_KEY_set_private_key wolfSSL_EC_KEY_set_private_key 00136 #define EC_KEY_get0_private_key wolfSSL_EC_KEY_get0_private_key 00137 #define EC_KEY_new_by_curve_name wolfSSL_EC_KEY_new_by_curve_name 00138 #define EC_KEY_set_group wolfSSL_EC_KEY_set_group 00139 #define EC_KEY_generate_key wolfSSL_EC_KEY_generate_key 00140 #define EC_KEY_set_asn1_flag wolfSSL_EC_KEY_set_asn1_flag 00141 #define EC_KEY_set_public_key wolfSSL_EC_KEY_set_public_key 00142 #define EC_KEY_new wolfSSL_EC_KEY_new 00143 00144 #define EC_GROUP_set_asn1_flag wolfSSL_EC_GROUP_set_asn1_flag 00145 #define EC_GROUP_new_by_curve_name wolfSSL_EC_GROUP_new_by_curve_name 00146 #define EC_GROUP_cmp wolfSSL_EC_GROUP_cmp 00147 #define EC_GROUP_get_curve_name wolfSSL_EC_GROUP_get_curve_name 00148 #define EC_GROUP_get_degree wolfSSL_EC_GROUP_get_degree 00149 #define EC_GROUP_get_order wolfSSL_EC_GROUP_get_order 00150 #define EC_GROUP_free wolfSSL_EC_GROUP_free 00151 00152 #define EC_POINT_new wolfSSL_EC_POINT_new 00153 #define EC_POINT_get_affine_coordinates_GFp \ 00154 wolfSSL_EC_POINT_get_affine_coordinates_GFp 00155 #define EC_POINT_mul wolfSSL_EC_POINT_mul 00156 #define EC_POINT_clear_free wolfSSL_EC_POINT_clear_free 00157 #define EC_POINT_cmp wolfSSL_EC_POINT_cmp 00158 #define EC_POINT_free wolfSSL_EC_POINT_free 00159 #define EC_POINT_is_at_infinity wolfSSL_EC_POINT_is_at_infinity 00160 00161 #ifdef __cplusplus 00162 } /* extern "C" */ 00163 #endif 00164 00165 #endif /* header */ 00166
Generated on Tue Jul 12 2022 15:55:18 by
1.7.2