gnunet-android

GNUnet for Android
Log | Files | Refs | README

ec.h (21544B)


      1 /* ec.h
      2  *
      3  * Copyright (C) 2006-2025 wolfSSL Inc.
      4  *
      5  * This file is part of wolfSSL.
      6  *
      7  * wolfSSL is free software; you can redistribute it and/or modify
      8  * it under the terms of the GNU General Public License as published by
      9  * the Free Software Foundation; either version 3 of the License, or
     10  * (at your option) any later version.
     11  *
     12  * wolfSSL is distributed in the hope that it will be useful,
     13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15  * GNU General Public License for more details.
     16  *
     17  * You should have received a copy of the GNU General Public License
     18  * along with this program; if not, write to the Free Software
     19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
     20  */
     21 
     22 /* ec.h for openssl */
     23 
     24 #ifndef WOLFSSL_EC_H_
     25 #define WOLFSSL_EC_H_
     26 
     27 #include <wolfssl/wolfcrypt/types.h>
     28 #include <wolfssl/openssl/compat_types.h>
     29 #include <wolfssl/openssl/bn.h>
     30 #include <wolfssl/openssl/compat_types.h>
     31 #include <wolfssl/wolfcrypt/asn.h>
     32 #include <wolfssl/wolfcrypt/ecc.h>
     33 
     34 #ifdef __cplusplus
     35 extern "C" {
     36 #endif
     37 
     38 #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)
     39 
     40 /* Map OpenSSL NID value */
     41 enum {
     42     WC_POINT_CONVERSION_COMPRESSED = 2,
     43     WC_POINT_CONVERSION_UNCOMPRESSED = 4,
     44 
     45 #ifdef HAVE_ECC
     46     /* Use OpenSSL NIDs. NIDs can be mapped to ecc_curve_id enum values by
     47         calling NIDToEccEnum() in ssl.c */
     48     WC_NID_X9_62_prime192v1 = 409,
     49     WC_NID_X9_62_prime192v2 = 410,
     50     WC_NID_X9_62_prime192v3 = 411,
     51     WC_NID_X9_62_prime239v1 = 412,
     52     WC_NID_X9_62_prime239v2 = 413,
     53     WC_NID_X9_62_prime239v3 = 418, /* Previous value conflicted with AES128CBCb */
     54     WC_NID_X9_62_prime256v1 = 415,
     55     WC_NID_secp112r1 = 704,
     56     WC_NID_secp112r2 = 705,
     57     WC_NID_secp128r1 = 706,
     58     WC_NID_secp128r2 = 707,
     59     WC_NID_secp160r1 = 709,
     60     WC_NID_secp160r2 = 710,
     61     WC_NID_secp224r1 = 713,
     62     WC_NID_secp384r1 = 715,
     63     WC_NID_secp521r1 = 716,
     64     WC_NID_secp160k1 = 708,
     65     WC_NID_secp192k1 = 711,
     66     WC_NID_secp224k1 = 712,
     67     WC_NID_secp256k1 = 714,
     68     WC_NID_brainpoolP160r1 = 921,
     69     WC_NID_brainpoolP192r1 = 923,
     70     WC_NID_brainpoolP224r1 = 925,
     71     WC_NID_brainpoolP256r1 = 927,
     72     WC_NID_brainpoolP320r1 = 929,
     73     WC_NID_brainpoolP384r1 = 931,
     74     WC_NID_brainpoolP512r1 = 933,
     75 #endif
     76 
     77 #ifdef HAVE_ED448
     78     WC_NID_ED448 = ED448k,
     79 #endif
     80 #ifdef HAVE_CURVE448
     81     WC_NID_X448 = X448k,
     82 #endif
     83 #ifdef HAVE_ED25519
     84     WC_NID_ED25519 = ED25519k,
     85 #endif
     86 #ifdef HAVE_CURVE25519
     87     WC_NID_X25519 = X25519k,
     88 #endif
     89 
     90     WOLFSSL_EC_EXPLICIT_CURVE  = 0x000,
     91     WOLFSSL_EC_NAMED_CURVE  = 0x001
     92 };
     93 
     94 #ifndef OPENSSL_COEXIST
     95 
     96 #define POINT_CONVERSION_COMPRESSED WC_POINT_CONVERSION_COMPRESSED
     97 #define POINT_CONVERSION_UNCOMPRESSED WC_POINT_CONVERSION_UNCOMPRESSED
     98 
     99 #ifdef HAVE_ECC
    100 #define NID_X9_62_prime192v1 WC_NID_X9_62_prime192v1
    101 #define NID_X9_62_prime192v2 WC_NID_X9_62_prime192v2
    102 #define NID_X9_62_prime192v3 WC_NID_X9_62_prime192v3
    103 #define NID_X9_62_prime239v1 WC_NID_X9_62_prime239v1
    104 #define NID_X9_62_prime239v2 WC_NID_X9_62_prime239v2
    105 #define NID_X9_62_prime239v3 WC_NID_X9_62_prime239v3
    106 #define NID_X9_62_prime256v1 WC_NID_X9_62_prime256v1
    107 #define NID_secp112r1 WC_NID_secp112r1
    108 #define NID_secp112r2 WC_NID_secp112r2
    109 #define NID_secp128r1 WC_NID_secp128r1
    110 #define NID_secp128r2 WC_NID_secp128r2
    111 #define NID_secp160r1 WC_NID_secp160r1
    112 #define NID_secp160r2 WC_NID_secp160r2
    113 #define NID_secp224r1 WC_NID_secp224r1
    114 #define NID_secp384r1 WC_NID_secp384r1
    115 #define NID_secp521r1 WC_NID_secp521r1
    116 #define NID_secp160k1 WC_NID_secp160k1
    117 #define NID_secp192k1 WC_NID_secp192k1
    118 #define NID_secp224k1 WC_NID_secp224k1
    119 #define NID_secp256k1 WC_NID_secp256k1
    120 #define NID_brainpoolP160r1 WC_NID_brainpoolP160r1
    121 #define NID_brainpoolP192r1 WC_NID_brainpoolP192r1
    122 #define NID_brainpoolP224r1 WC_NID_brainpoolP224r1
    123 #define NID_brainpoolP256r1 WC_NID_brainpoolP256r1
    124 #define NID_brainpoolP320r1 WC_NID_brainpoolP320r1
    125 #define NID_brainpoolP384r1 WC_NID_brainpoolP384r1
    126 #define NID_brainpoolP512r1 WC_NID_brainpoolP512r1
    127 #endif
    128 
    129 #ifdef HAVE_ED448
    130 #define NID_ED448 WC_NID_ED448
    131 #endif
    132 #ifdef HAVE_CURVE448
    133 #define NID_X448 WC_NID_X448
    134 #endif
    135 #ifdef HAVE_ED25519
    136 #define NID_ED25519 WC_NID_ED25519
    137 #endif
    138 #ifdef HAVE_CURVE25519
    139 #define NID_X25519 WC_NID_X25519
    140 #endif
    141 
    142 #define OPENSSL_EC_EXPLICIT_CURVE WOLFSSL_EC_EXPLICIT_CURVE
    143 #define OPENSSL_EC_NAMED_CURVE WOLFSSL_EC_NAMED_CURVE
    144 
    145 #endif /* !OPENSSL_COEXIST */
    146 
    147 #endif /* OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL */
    148 
    149 #ifndef WOLFSSL_EC_TYPE_DEFINED /* guard on redeclaration */
    150     typedef struct WOLFSSL_EC_KEY           WOLFSSL_EC_KEY;
    151     typedef struct WOLFSSL_EC_POINT         WOLFSSL_EC_POINT;
    152     typedef struct WOLFSSL_EC_GROUP         WOLFSSL_EC_GROUP;
    153     typedef struct WOLFSSL_EC_BUILTIN_CURVE WOLFSSL_EC_BUILTIN_CURVE;
    154     /* WOLFSSL_EC_METHOD is just an alias of WOLFSSL_EC_GROUP for now */
    155     typedef struct WOLFSSL_EC_GROUP         WOLFSSL_EC_METHOD;
    156 
    157     #define WOLFSSL_EC_TYPE_DEFINED
    158 #endif
    159 
    160 struct WOLFSSL_EC_POINT {
    161     WOLFSSL_BIGNUM *X;
    162     WOLFSSL_BIGNUM *Y;
    163     WOLFSSL_BIGNUM *Z;
    164 
    165     void*          internal;     /* our ECC point */
    166     char           inSet;        /* internal set from external ? */
    167     char           exSet;        /* external set from internal ? */
    168 };
    169 
    170 struct WOLFSSL_EC_GROUP {
    171     int curve_idx; /* index of curve, used by WolfSSL as reference */
    172     int curve_nid; /* NID of curve, used by OpenSSL/OpenSSH as reference */
    173     int curve_oid; /* OID of curve, used by OpenSSL/OpenSSH as reference */
    174 };
    175 
    176 struct WOLFSSL_EC_KEY {
    177     WOLFSSL_EC_GROUP *group;
    178     WOLFSSL_EC_POINT *pub_key;
    179     WOLFSSL_BIGNUM *priv_key;
    180 
    181     void*          internal;     /* our ECC Key */
    182     void*          heap;
    183     unsigned char  form;         /* Either POINT_CONVERSION_UNCOMPRESSED or
    184                                   * POINT_CONVERSION_COMPRESSED */
    185     word16 pkcs8HeaderSz;
    186 
    187     /* option bits */
    188     WC_BITFIELD inSet:1;                /* internal set from external ? */
    189     WC_BITFIELD exSet:1;                /* external set from internal ? */
    190 
    191     wolfSSL_Ref ref;             /* Reference count information. */
    192 };
    193 
    194 struct WOLFSSL_EC_BUILTIN_CURVE {
    195     int nid;
    196     const char *comment;
    197 };
    198 
    199 #define WOLFSSL_EC_KEY_LOAD_PRIVATE 1
    200 #define WOLFSSL_EC_KEY_LOAD_PUBLIC  2
    201 
    202 typedef int wc_point_conversion_form_t;
    203 #ifndef OPENSSL_COEXIST
    204 #define point_conversion_form_t wc_point_conversion_form_t
    205 #endif
    206 
    207 typedef struct WOLFSSL_EC_KEY_METHOD {
    208     /* Not implemented */
    209     /* Just here so that some C compilers don't complain. To be removed. */
    210     void* dummy_member;
    211 } WOLFSSL_EC_KEY_METHOD;
    212 
    213 WOLFSSL_API
    214 size_t wolfSSL_EC_get_builtin_curves(WOLFSSL_EC_BUILTIN_CURVE *r,size_t nitems);
    215 
    216 WOLFSSL_API
    217 WOLFSSL_EC_KEY *wolfSSL_EC_KEY_dup(const WOLFSSL_EC_KEY *src);
    218 WOLFSSL_API
    219 int wolfSSL_EC_KEY_up_ref(WOLFSSL_EC_KEY* key);
    220 
    221 WOLFSSL_API
    222 int wolfSSL_ECPoint_i2d(const WOLFSSL_EC_GROUP *curve,
    223                         const WOLFSSL_EC_POINT *p,
    224                         unsigned char *out, unsigned int *len);
    225 WOLFSSL_API
    226 int wolfSSL_ECPoint_d2i(const unsigned char *in, unsigned int len,
    227                         const WOLFSSL_EC_GROUP *curve, WOLFSSL_EC_POINT *p);
    228 WOLFSSL_API
    229 size_t wolfSSL_EC_POINT_point2oct(const WOLFSSL_EC_GROUP *group,
    230                                   const WOLFSSL_EC_POINT *p,
    231                                   int form,
    232                                   byte *buf, size_t len, WOLFSSL_BN_CTX *ctx);
    233 WOLFSSL_API
    234 int wolfSSL_EC_POINT_oct2point(const WOLFSSL_EC_GROUP *group,
    235                                WOLFSSL_EC_POINT *p, const unsigned char *buf,
    236                                size_t len, WOLFSSL_BN_CTX *ctx);
    237 WOLFSSL_API
    238 WOLFSSL_EC_KEY *wolfSSL_o2i_ECPublicKey(WOLFSSL_EC_KEY **a, const unsigned char **in,
    239                                         long len);
    240 WOLFSSL_API
    241 int wolfSSL_i2o_ECPublicKey(const WOLFSSL_EC_KEY *in, unsigned char **out);
    242 WOLFSSL_API
    243 WOLFSSL_EC_KEY *wolfSSL_d2i_ECPrivateKey(WOLFSSL_EC_KEY **key, const unsigned char **in,
    244                                          long len);
    245 WOLFSSL_API
    246 int wolfSSL_i2d_ECPrivateKey(const WOLFSSL_EC_KEY *in, unsigned char **out);
    247 WOLFSSL_API
    248 void wolfSSL_EC_KEY_set_conv_form(WOLFSSL_EC_KEY *eckey, int form);
    249 WOLFSSL_API
    250 wc_point_conversion_form_t wolfSSL_EC_KEY_get_conv_form(const WOLFSSL_EC_KEY* key);
    251 WOLFSSL_API
    252 WOLFSSL_BIGNUM *wolfSSL_EC_POINT_point2bn(const WOLFSSL_EC_GROUP *group,
    253                                           const WOLFSSL_EC_POINT *p,
    254                                           int form,
    255                                           WOLFSSL_BIGNUM *in, WOLFSSL_BN_CTX *ctx);
    256 WOLFSSL_API
    257 int wolfSSL_EC_POINT_is_on_curve(const WOLFSSL_EC_GROUP *group,
    258                                  const WOLFSSL_EC_POINT *point,
    259                                  WOLFSSL_BN_CTX *ctx);
    260 
    261 WOLFSSL_API
    262 int wolfSSL_EC_KEY_LoadDer(WOLFSSL_EC_KEY* key,
    263                            const unsigned char* der, int derSz);
    264 WOLFSSL_API
    265 int wolfSSL_EC_KEY_LoadDer_ex(WOLFSSL_EC_KEY* key,
    266                               const unsigned char* der, int derSz, int opt);
    267 WOLFSSL_API
    268 WOLFSSL_EC_KEY *wolfSSL_d2i_EC_PUBKEY_bio(WOLFSSL_BIO *bio,
    269         WOLFSSL_EC_KEY **out);
    270 WOLFSSL_API
    271 void wolfSSL_EC_KEY_free(WOLFSSL_EC_KEY *key);
    272 WOLFSSL_API
    273 WOLFSSL_EC_POINT *wolfSSL_EC_KEY_get0_public_key(const WOLFSSL_EC_KEY *key);
    274 WOLFSSL_API
    275 const WOLFSSL_EC_GROUP *wolfSSL_EC_KEY_get0_group(const WOLFSSL_EC_KEY *key);
    276 WOLFSSL_API
    277 int wolfSSL_EC_KEY_set_private_key(WOLFSSL_EC_KEY *key,
    278                                    const WOLFSSL_BIGNUM *priv_key);
    279 WOLFSSL_API
    280 WOLFSSL_BIGNUM *wolfSSL_EC_KEY_get0_private_key(const WOLFSSL_EC_KEY *key);
    281 WOLFSSL_API
    282 WOLFSSL_EC_KEY *wolfSSL_EC_KEY_new_by_curve_name(int nid);
    283 WOLFSSL_API const char* wolfSSL_EC_curve_nid2nist(int nid);
    284 WOLFSSL_API int wolfSSL_EC_curve_nist2nid(const char* name);
    285 WOLFSSL_API
    286 WOLFSSL_EC_KEY *wolfSSL_EC_KEY_new_ex(void* heap, int devId);
    287 WOLFSSL_API
    288 WOLFSSL_EC_KEY *wolfSSL_EC_KEY_new(void);
    289 WOLFSSL_API
    290 int wolfSSL_EC_KEY_set_group(WOLFSSL_EC_KEY *key, WOLFSSL_EC_GROUP *group);
    291 WOLFSSL_API
    292 int wolfSSL_EC_KEY_generate_key(WOLFSSL_EC_KEY *key);
    293 WOLFSSL_API
    294 void wolfSSL_EC_KEY_set_asn1_flag(WOLFSSL_EC_KEY *key, int asn1_flag);
    295 WOLFSSL_API
    296 int wolfSSL_EC_KEY_set_public_key(WOLFSSL_EC_KEY *key,
    297                                   const WOLFSSL_EC_POINT *pub);
    298 WOLFSSL_API int wolfSSL_EC_KEY_check_key(const WOLFSSL_EC_KEY *key);
    299 #if !defined(NO_FILESYSTEM) && !defined(NO_STDIO_FILESYSTEM)
    300 WOLFSSL_API int wolfSSL_EC_KEY_print_fp(XFILE fp, WOLFSSL_EC_KEY* key,
    301                                          int indent);
    302 #endif /* !NO_FILESYSTEM && !NO_STDIO_FILESYSTEM */
    303 WOLFSSL_API int wolfSSL_ECDSA_size(const WOLFSSL_EC_KEY *key);
    304 WOLFSSL_API int wolfSSL_ECDSA_sign(int type, const unsigned char *digest,
    305                                    int digestSz, unsigned char *sig,
    306                                    unsigned int *sigSz, WOLFSSL_EC_KEY *key);
    307 WOLFSSL_API int wolfSSL_ECDSA_verify(int type, const unsigned char *digest,
    308                                    int digestSz, const unsigned char *sig,
    309                                    int sigSz, WOLFSSL_EC_KEY *key);
    310 
    311 
    312 #if defined HAVE_ECC && (defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL))
    313 WOLFSSL_API int EccEnumToNID(int n);
    314 #endif
    315 
    316 WOLFSSL_API
    317 void wolfSSL_EC_GROUP_set_asn1_flag(WOLFSSL_EC_GROUP *group, int flag);
    318 WOLFSSL_API
    319 WOLFSSL_EC_GROUP *wolfSSL_EC_GROUP_new_by_curve_name(int nid);
    320 WOLFSSL_API
    321 int wolfSSL_EC_GROUP_cmp(const WOLFSSL_EC_GROUP *a, const WOLFSSL_EC_GROUP *b,
    322                          WOLFSSL_BN_CTX *ctx);
    323 WOLFSSL_API
    324 WOLFSSL_EC_GROUP *wolfSSL_EC_GROUP_dup(const WOLFSSL_EC_GROUP *src);
    325 WOLFSSL_API
    326 int wolfSSL_EC_GROUP_get_curve_name(const WOLFSSL_EC_GROUP *group);
    327 WOLFSSL_API
    328 int wolfSSL_EC_GROUP_get_degree(const WOLFSSL_EC_GROUP *group);
    329 WOLFSSL_API
    330 int wolfSSL_EC_GROUP_get_order(const WOLFSSL_EC_GROUP *group,
    331                                WOLFSSL_BIGNUM *order, WOLFSSL_BN_CTX *ctx);
    332 WOLFSSL_API
    333 int wolfSSL_EC_GROUP_order_bits(const WOLFSSL_EC_GROUP *group);
    334 WOLFSSL_API
    335 void wolfSSL_EC_GROUP_free(WOLFSSL_EC_GROUP *group);
    336 WOLFSSL_API
    337 const WOLFSSL_EC_METHOD* wolfSSL_EC_GROUP_method_of(
    338                                                 const WOLFSSL_EC_GROUP *group);
    339 WOLFSSL_API
    340 int wolfSSL_EC_METHOD_get_field_type(const WOLFSSL_EC_METHOD *meth);
    341 WOLFSSL_API
    342 WOLFSSL_EC_POINT *wolfSSL_EC_POINT_new(const WOLFSSL_EC_GROUP *group);
    343 WOLFSSL_LOCAL
    344 int ec_point_convert_to_affine(const WOLFSSL_EC_GROUP *group,
    345     WOLFSSL_EC_POINT *point);
    346 WOLFSSL_API
    347 int wolfSSL_EC_POINT_get_affine_coordinates_GFp(const WOLFSSL_EC_GROUP *group,
    348                                                 const WOLFSSL_EC_POINT *p,
    349                                                 WOLFSSL_BIGNUM *x,
    350                                                 WOLFSSL_BIGNUM *y,
    351                                                 WOLFSSL_BN_CTX *ctx);
    352 WOLFSSL_API
    353 int wolfSSL_EC_POINT_set_affine_coordinates_GFp(const WOLFSSL_EC_GROUP *group,
    354                                                 WOLFSSL_EC_POINT *point,
    355                                                 const WOLFSSL_BIGNUM *x,
    356                                                 const WOLFSSL_BIGNUM *y,
    357                                                 WOLFSSL_BN_CTX *ctx);
    358 WOLFSSL_API
    359 int wolfSSL_EC_POINT_add(const WOLFSSL_EC_GROUP *group, WOLFSSL_EC_POINT *r,
    360                          const WOLFSSL_EC_POINT *p1,
    361                          const WOLFSSL_EC_POINT *p2, WOLFSSL_BN_CTX *ctx);
    362 WOLFSSL_API
    363 int wolfSSL_EC_POINT_mul(const WOLFSSL_EC_GROUP *group, WOLFSSL_EC_POINT *r,
    364                          const WOLFSSL_BIGNUM *n,
    365                          const WOLFSSL_EC_POINT *q, const WOLFSSL_BIGNUM *m,
    366                          WOLFSSL_BN_CTX *ctx);
    367 WOLFSSL_API
    368 int wolfSSL_EC_POINT_invert(const WOLFSSL_EC_GROUP *group, WOLFSSL_EC_POINT *a,
    369                             WOLFSSL_BN_CTX *ctx);
    370 WOLFSSL_API
    371 void wolfSSL_EC_POINT_clear_free(WOLFSSL_EC_POINT *point);
    372 WOLFSSL_API
    373 int wolfSSL_EC_POINT_cmp(const WOLFSSL_EC_GROUP *group,
    374                          const WOLFSSL_EC_POINT *a, const WOLFSSL_EC_POINT *b,
    375                          WOLFSSL_BN_CTX *ctx);
    376 WOLFSSL_API int wolfSSL_EC_POINT_copy(WOLFSSL_EC_POINT *dest,
    377                                       const WOLFSSL_EC_POINT *src);
    378 WOLFSSL_API
    379 void wolfSSL_EC_POINT_free(WOLFSSL_EC_POINT *point);
    380 WOLFSSL_API
    381 int wolfSSL_EC_POINT_is_at_infinity(const WOLFSSL_EC_GROUP *group,
    382                                     const WOLFSSL_EC_POINT *a);
    383 
    384 WOLFSSL_API
    385 char* wolfSSL_EC_POINT_point2hex(const WOLFSSL_EC_GROUP* group,
    386                                  const WOLFSSL_EC_POINT* point, int form,
    387                                  WOLFSSL_BN_CTX* ctx);
    388 WOLFSSL_API
    389 WOLFSSL_EC_POINT *wolfSSL_EC_POINT_hex2point
    390                                 (const WOLFSSL_EC_GROUP *group, const char *hex,
    391                                     WOLFSSL_EC_POINT *p, WOLFSSL_BN_CTX *ctx);
    392 
    393 WOLFSSL_API const WOLFSSL_EC_KEY_METHOD *wolfSSL_EC_KEY_OpenSSL(void);
    394 WOLFSSL_API WOLFSSL_EC_KEY_METHOD *wolfSSL_EC_KEY_METHOD_new(
    395         const WOLFSSL_EC_KEY_METHOD *meth);
    396 WOLFSSL_API void wolfSSL_EC_KEY_METHOD_free(WOLFSSL_EC_KEY_METHOD *meth);
    397 /* TODO when implementing change the types to the real callback signatures
    398  * and use real parameter names */
    399 WOLFSSL_API void wolfSSL_EC_KEY_METHOD_set_init(WOLFSSL_EC_KEY_METHOD *meth,
    400         void* a1, void* a2, void* a3, void* a4, void* a5, void* a6);
    401 WOLFSSL_API void wolfSSL_EC_KEY_METHOD_set_sign(WOLFSSL_EC_KEY_METHOD *meth,
    402         void* a1, void* a2, void* a3);
    403 WOLFSSL_API const WOLFSSL_EC_KEY_METHOD *wolfSSL_EC_KEY_get_method(
    404         const WOLFSSL_EC_KEY *key);
    405 WOLFSSL_API int wolfSSL_EC_KEY_set_method(WOLFSSL_EC_KEY *key,
    406         const WOLFSSL_EC_KEY_METHOD *meth);
    407 
    408 #if !defined(OPENSSL_COEXIST) && (defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL))
    409 
    410 typedef WOLFSSL_EC_KEY                EC_KEY;
    411 typedef WOLFSSL_EC_GROUP              EC_GROUP;
    412 typedef WOLFSSL_EC_GROUP              EC_METHOD;
    413 typedef WOLFSSL_EC_POINT              EC_POINT;
    414 typedef WOLFSSL_EC_BUILTIN_CURVE      EC_builtin_curve;
    415 typedef WOLFSSL_EC_KEY_METHOD         EC_KEY_METHOD;
    416 
    417 #ifndef HAVE_ECC
    418 #define OPENSSL_NO_EC
    419 #endif
    420 
    421 #define EC_KEY_new                      wolfSSL_EC_KEY_new
    422 #define EC_KEY_free                     wolfSSL_EC_KEY_free
    423 #define EC_KEY_up_ref                   wolfSSL_EC_KEY_up_ref
    424 #define EC_KEY_dup                      wolfSSL_EC_KEY_dup
    425 #define EC_KEY_get0_public_key          wolfSSL_EC_KEY_get0_public_key
    426 #define EC_KEY_get0_group               wolfSSL_EC_KEY_get0_group
    427 #define EC_KEY_set_private_key          wolfSSL_EC_KEY_set_private_key
    428 #define EC_KEY_get0_private_key         wolfSSL_EC_KEY_get0_private_key
    429 #define EC_KEY_new_by_curve_name        wolfSSL_EC_KEY_new_by_curve_name
    430 #define EC_KEY_set_group                wolfSSL_EC_KEY_set_group
    431 #define EC_KEY_generate_key             wolfSSL_EC_KEY_generate_key
    432 #define EC_KEY_set_asn1_flag            wolfSSL_EC_KEY_set_asn1_flag
    433 #define EC_KEY_set_public_key           wolfSSL_EC_KEY_set_public_key
    434 #define EC_KEY_check_key                wolfSSL_EC_KEY_check_key
    435 #define EC_KEY_print_fp                 wolfSSL_EC_KEY_print_fp
    436 
    437 #define d2i_EC_PUBKEY_bio               wolfSSL_d2i_EC_PUBKEY_bio
    438 
    439 #define ECDSA_size                      wolfSSL_ECDSA_size
    440 #define ECDSA_sign                      wolfSSL_ECDSA_sign
    441 #define ECDSA_verify                    wolfSSL_ECDSA_verify
    442 
    443 #define EC_GROUP_free                   wolfSSL_EC_GROUP_free
    444 #define EC_GROUP_set_asn1_flag          wolfSSL_EC_GROUP_set_asn1_flag
    445 #define EC_GROUP_new_by_curve_name      wolfSSL_EC_GROUP_new_by_curve_name
    446 #define EC_GROUP_cmp                    wolfSSL_EC_GROUP_cmp
    447 #define EC_GROUP_dup                    wolfSSL_EC_GROUP_dup
    448 #define EC_GROUP_get_curve_name         wolfSSL_EC_GROUP_get_curve_name
    449 #define EC_GROUP_get_degree             wolfSSL_EC_GROUP_get_degree
    450 #define EC_GROUP_get_order              wolfSSL_EC_GROUP_get_order
    451 #define EC_GROUP_order_bits             wolfSSL_EC_GROUP_order_bits
    452 #define EC_GROUP_method_of              wolfSSL_EC_GROUP_method_of
    453 #ifndef NO_WOLFSSL_STUB
    454 #ifdef WOLF_NO_VARIADIC_MACROS
    455     #define EC_GROUP_set_point_conversion_form() WC_DO_NOTHING
    456 #else
    457     #define EC_GROUP_set_point_conversion_form(...) WC_DO_NOTHING
    458 #endif
    459 #endif
    460 
    461 #define EC_METHOD_get_field_type        wolfSSL_EC_METHOD_get_field_type
    462 
    463 #define EC_POINT_new                    wolfSSL_EC_POINT_new
    464 #define EC_POINT_free                   wolfSSL_EC_POINT_free
    465 #define EC_POINT_get_affine_coordinates_GFp \
    466                                      wolfSSL_EC_POINT_get_affine_coordinates_GFp
    467 #define EC_POINT_get_affine_coordinates \
    468                                      wolfSSL_EC_POINT_get_affine_coordinates_GFp
    469 #define EC_POINT_set_affine_coordinates_GFp \
    470                                      wolfSSL_EC_POINT_set_affine_coordinates_GFp
    471 #define EC_POINT_set_affine_coordinates \
    472                                      wolfSSL_EC_POINT_set_affine_coordinates_GFp
    473 #define EC_POINT_add                    wolfSSL_EC_POINT_add
    474 #define EC_POINT_mul                    wolfSSL_EC_POINT_mul
    475 #define EC_POINT_invert                 wolfSSL_EC_POINT_invert
    476 #define EC_POINT_clear_free             wolfSSL_EC_POINT_clear_free
    477 #define EC_POINT_cmp                    wolfSSL_EC_POINT_cmp
    478 #define EC_POINT_copy                   wolfSSL_EC_POINT_copy
    479 #define EC_POINT_is_at_infinity         wolfSSL_EC_POINT_is_at_infinity
    480 
    481 #define EC_get_builtin_curves           wolfSSL_EC_get_builtin_curves
    482 
    483 #define ECPoint_i2d                     wolfSSL_ECPoint_i2d
    484 #define ECPoint_d2i                     wolfSSL_ECPoint_d2i
    485 #define EC_POINT_point2oct              wolfSSL_EC_POINT_point2oct
    486 #define EC_POINT_oct2point              wolfSSL_EC_POINT_oct2point
    487 #define EC_POINT_point2bn               wolfSSL_EC_POINT_point2bn
    488 #define EC_POINT_is_on_curve            wolfSSL_EC_POINT_is_on_curve
    489 #define o2i_ECPublicKey                 wolfSSL_o2i_ECPublicKey
    490 #define i2o_ECPublicKey                 wolfSSL_i2o_ECPublicKey
    491 #define i2d_EC_PUBKEY                   wolfSSL_i2o_ECPublicKey
    492 #define d2i_ECPrivateKey                wolfSSL_d2i_ECPrivateKey
    493 #define i2d_ECPrivateKey                wolfSSL_i2d_ECPrivateKey
    494 #define EC_KEY_set_conv_form            wolfSSL_EC_KEY_set_conv_form
    495 #define EC_KEY_get_conv_form            wolfSSL_EC_KEY_get_conv_form
    496 #define d2i_ECPKParameters              wolfSSL_d2i_ECPKParameters
    497 #define i2d_ECPKParameters              wolfSSL_i2d_ECPKParameters
    498 
    499 #define EC_POINT_point2hex              wolfSSL_EC_POINT_point2hex
    500 #define EC_POINT_hex2point              wolfSSL_EC_POINT_hex2point
    501 
    502 #define EC_POINT_dump                   wolfSSL_EC_POINT_dump
    503 #define EC_get_builtin_curves           wolfSSL_EC_get_builtin_curves
    504 
    505 #define EC_curve_nid2nist               wolfSSL_EC_curve_nid2nist
    506 #define EC_curve_nist2nid               wolfSSL_EC_curve_nist2nid
    507 
    508 #define EC_KEY_OpenSSL                  wolfSSL_EC_KEY_OpenSSL
    509 #define EC_KEY_METHOD_new               wolfSSL_EC_KEY_METHOD_new
    510 #define EC_KEY_METHOD_free              wolfSSL_EC_KEY_METHOD_free
    511 #define EC_KEY_METHOD_set_init          wolfSSL_EC_KEY_METHOD_set_init
    512 #define EC_KEY_METHOD_set_sign          wolfSSL_EC_KEY_METHOD_set_sign
    513 #define EC_KEY_get_method               wolfSSL_EC_KEY_get_method
    514 #define EC_KEY_set_method               wolfSSL_EC_KEY_set_method
    515 
    516 #endif /* !OPENSSL_COEXIST && (OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL) */
    517 
    518 #ifdef __cplusplus
    519 }  /* extern "C" */
    520 #endif
    521 
    522 #endif /* header */