summaryrefslogtreecommitdiffstats
path: root/crypto/ec/ec_lcl.h
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>2016-02-01 17:57:01 +0000
committerDr. Stephen Henson <steve@openssl.org>2016-02-28 22:54:53 +0000
commit474d84ec81d6926698d27a2cbbbbe2961ecf6541 (patch)
tree9bce6bb5e24a3f17d3d32820109adaf13db0df1c /crypto/ec/ec_lcl.h
parent899cf48f17ba95a7bd986bbeffeebf9a1d9fd3fb (diff)
EC_METHOD customisation operations.
Extend EC_METHOD to permit additional customisation of private key and ECDH operations. Reviewed-by: Rich Salz <rsalz@openssl.org> Reviewed-by: Emilia Käsper <emilia@openssl.org>
Diffstat (limited to 'crypto/ec/ec_lcl.h')
-rw-r--r--crypto/ec/ec_lcl.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/crypto/ec/ec_lcl.h b/crypto/ec/ec_lcl.h
index 5190b91109..e3b1c5d525 100644
--- a/crypto/ec/ec_lcl.h
+++ b/crypto/ec/ec_lcl.h
@@ -83,6 +83,9 @@
/* Use default functions for poin2oct, oct2point and compressed coordinates */
#define EC_FLAGS_DEFAULT_OCT 0x1
+/* Use custom formats for EC_GROUP, EC_POINT and EC_KEY */
+#define EC_FLAGS_CUSTOM_CURVE 0x2
+
/*
* Structure details are not part of the exported interface, so all this may
* change in future versions.
@@ -195,6 +198,20 @@ struct ec_method_st {
int (*field_decode) (const EC_GROUP *, BIGNUM *r, const BIGNUM *a,
BN_CTX *);
int (*field_set_to_one) (const EC_GROUP *, BIGNUM *r, BN_CTX *);
+ /* private key operations */
+ size_t (*priv2oct)(const EC_KEY *eckey, unsigned char *buf, size_t len);
+ int (*oct2priv)(EC_KEY *eckey, unsigned char *buf, size_t len);
+ int (*set_private)(EC_KEY *eckey, const BIGNUM *priv_key);
+ int (*keygen)(EC_KEY *eckey);
+ int (*keycheck)(const EC_KEY *eckey);
+ int (*keygenpub)(EC_KEY *eckey);
+ int (*keycopy)(EC_KEY *dst, const EC_KEY *src);
+ void (*keyfinish)(EC_KEY *eckey);
+ /* custom ECDH operation */
+ int (*ecdh_compute_key)(void *out, size_t outlen, const EC_POINT *pub_key,
+ const EC_KEY *ecdh,
+ void *(*KDF) (const void *in, size_t inlen,
+ void *out, size_t *outlen));
} /* EC_METHOD */ ;
/*