diff options
Diffstat (limited to 'src/lib/libcrypto/ec/ec_kmeth.c')
-rw-r--r-- | src/lib/libcrypto/ec/ec_kmeth.c | 112 |
1 files changed, 87 insertions, 25 deletions
diff --git a/src/lib/libcrypto/ec/ec_kmeth.c b/src/lib/libcrypto/ec/ec_kmeth.c index b714c62236..158f542d40 100644 --- a/src/lib/libcrypto/ec/ec_kmeth.c +++ b/src/lib/libcrypto/ec/ec_kmeth.c | |||
@@ -72,9 +72,15 @@ static const EC_KEY_METHOD openssl_ec_key_method = { | |||
72 | .set_private = NULL, | 72 | .set_private = NULL, |
73 | .set_public = NULL, | 73 | .set_public = NULL, |
74 | 74 | ||
75 | .keygen = ossl_ec_key_gen, | ||
76 | .compute_key = ossl_ecdh_compute_key, | ||
77 | |||
75 | .sign = ossl_ecdsa_sign, | 78 | .sign = ossl_ecdsa_sign, |
76 | .sign_setup = ossl_ecdsa_sign_setup, | 79 | .sign_setup = ossl_ecdsa_sign_setup, |
77 | .sign_sig = ossl_ecdsa_sign_sig, | 80 | .sign_sig = ossl_ecdsa_sign_sig, |
81 | |||
82 | .verify = ossl_ecdsa_verify, | ||
83 | .verify_sig = ossl_ecdsa_verify_sig, | ||
78 | }; | 84 | }; |
79 | 85 | ||
80 | const EC_KEY_METHOD *default_ec_key_meth = &openssl_ec_key_method; | 86 | const EC_KEY_METHOD *default_ec_key_meth = &openssl_ec_key_method; |
@@ -197,6 +203,65 @@ EC_KEY_METHOD_free(EC_KEY_METHOD *meth) | |||
197 | } | 203 | } |
198 | 204 | ||
199 | void | 205 | void |
206 | EC_KEY_METHOD_set_init(EC_KEY_METHOD *meth, | ||
207 | int (*init)(EC_KEY *key), | ||
208 | void (*finish)(EC_KEY *key), | ||
209 | int (*copy)(EC_KEY *dest, const EC_KEY *src), | ||
210 | int (*set_group)(EC_KEY *key, const EC_GROUP *grp), | ||
211 | int (*set_private)(EC_KEY *key, const BIGNUM *priv_key), | ||
212 | int (*set_public)(EC_KEY *key, const EC_POINT *pub_key)) | ||
213 | { | ||
214 | meth->init = init; | ||
215 | meth->finish = finish; | ||
216 | meth->copy = copy; | ||
217 | meth->set_group = set_group; | ||
218 | meth->set_private = set_private; | ||
219 | meth->set_public = set_public; | ||
220 | } | ||
221 | |||
222 | void | ||
223 | EC_KEY_METHOD_set_keygen(EC_KEY_METHOD *meth, int (*keygen)(EC_KEY *key)) | ||
224 | { | ||
225 | meth->keygen = keygen; | ||
226 | } | ||
227 | |||
228 | void | ||
229 | EC_KEY_METHOD_set_compute_key(EC_KEY_METHOD *meth, | ||
230 | int (*ckey)(void *out, size_t outlen, const EC_POINT *pub_key, EC_KEY *ecdh, | ||
231 | void *(*KDF) (const void *in, size_t inlen, void *out, size_t *outlen))) | ||
232 | { | ||
233 | meth->compute_key = ckey; | ||
234 | } | ||
235 | |||
236 | void | ||
237 | EC_KEY_METHOD_set_sign(EC_KEY_METHOD *meth, | ||
238 | int (*sign)(int type, const unsigned char *dgst, | ||
239 | int dlen, unsigned char *sig, unsigned int *siglen, | ||
240 | const BIGNUM *kinv, const BIGNUM *r, EC_KEY *eckey), | ||
241 | int (*sign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, | ||
242 | BIGNUM **kinvp, BIGNUM **rp), | ||
243 | ECDSA_SIG *(*sign_sig)(const unsigned char *dgst, | ||
244 | int dgst_len, const BIGNUM *in_kinv, | ||
245 | const BIGNUM *in_r, EC_KEY *eckey)) | ||
246 | { | ||
247 | meth->sign = sign; | ||
248 | meth->sign_setup = sign_setup; | ||
249 | meth->sign_sig = sign_sig; | ||
250 | } | ||
251 | |||
252 | void | ||
253 | EC_KEY_METHOD_set_verify(EC_KEY_METHOD *meth, | ||
254 | int (*verify)(int type, const unsigned char *dgst, int dgst_len, | ||
255 | const unsigned char *sigbuf, int sig_len, EC_KEY *eckey), | ||
256 | int (*verify_sig)(const unsigned char *dgst, int dgst_len, | ||
257 | const ECDSA_SIG *sig, EC_KEY *eckey)) | ||
258 | { | ||
259 | meth->verify = verify; | ||
260 | meth->verify_sig = verify_sig; | ||
261 | } | ||
262 | |||
263 | |||
264 | void | ||
200 | EC_KEY_METHOD_get_init(EC_KEY_METHOD *meth, | 265 | EC_KEY_METHOD_get_init(EC_KEY_METHOD *meth, |
201 | int (**pinit)(EC_KEY *key), | 266 | int (**pinit)(EC_KEY *key), |
202 | void (**pfinish)(EC_KEY *key), | 267 | void (**pfinish)(EC_KEY *key), |
@@ -220,20 +285,20 @@ EC_KEY_METHOD_get_init(EC_KEY_METHOD *meth, | |||
220 | } | 285 | } |
221 | 286 | ||
222 | void | 287 | void |
223 | EC_KEY_METHOD_set_init(EC_KEY_METHOD *meth, | 288 | EC_KEY_METHOD_get_keygen(EC_KEY_METHOD *meth, |
224 | int (*init)(EC_KEY *key), | 289 | int (**pkeygen)(EC_KEY *key)) |
225 | void (*finish)(EC_KEY *key), | ||
226 | int (*copy)(EC_KEY *dest, const EC_KEY *src), | ||
227 | int (*set_group)(EC_KEY *key, const EC_GROUP *grp), | ||
228 | int (*set_private)(EC_KEY *key, const BIGNUM *priv_key), | ||
229 | int (*set_public)(EC_KEY *key, const EC_POINT *pub_key)) | ||
230 | { | 290 | { |
231 | meth->init = init; | 291 | if (pkeygen != NULL) |
232 | meth->finish = finish; | 292 | *pkeygen = meth->keygen; |
233 | meth->copy = copy; | 293 | } |
234 | meth->set_group = set_group; | 294 | |
235 | meth->set_private = set_private; | 295 | void |
236 | meth->set_public = set_public; | 296 | EC_KEY_METHOD_get_compute_key(EC_KEY_METHOD *meth, |
297 | int (**pck)(void *out, size_t outlen, const EC_POINT *pub_key, EC_KEY *ecdh, | ||
298 | void *(*KDF) (const void *in, size_t inlen, void *out, size_t *outlen))) | ||
299 | { | ||
300 | if (pck != NULL) | ||
301 | *pck = meth->compute_key; | ||
237 | } | 302 | } |
238 | 303 | ||
239 | void | 304 | void |
@@ -256,17 +321,14 @@ EC_KEY_METHOD_get_sign(EC_KEY_METHOD *meth, | |||
256 | } | 321 | } |
257 | 322 | ||
258 | void | 323 | void |
259 | EC_KEY_METHOD_set_sign(EC_KEY_METHOD *meth, | 324 | EC_KEY_METHOD_get_verify(EC_KEY_METHOD *meth, |
260 | int (*sign)(int type, const unsigned char *dgst, | 325 | int (**pverify)(int type, const unsigned char *dgst, int dgst_len, |
261 | int dlen, unsigned char *sig, unsigned int *siglen, | 326 | const unsigned char *sigbuf, int sig_len, EC_KEY *eckey), |
262 | const BIGNUM *kinv, const BIGNUM *r, EC_KEY *eckey), | 327 | int (**pverify_sig)(const unsigned char *dgst, int dgst_len, |
263 | int (*sign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, | 328 | const ECDSA_SIG *sig, EC_KEY *eckey)) |
264 | BIGNUM **kinvp, BIGNUM **rp), | ||
265 | ECDSA_SIG *(*sign_sig)(const unsigned char *dgst, | ||
266 | int dgst_len, const BIGNUM *in_kinv, | ||
267 | const BIGNUM *in_r, EC_KEY *eckey)) | ||
268 | { | 329 | { |
269 | meth->sign = sign; | 330 | if (pverify != NULL) |
270 | meth->sign_setup = sign_setup; | 331 | *pverify = meth->verify; |
271 | meth->sign_sig = sign_sig; | 332 | if (pverify_sig != NULL) |
333 | *pverify_sig = meth->verify_sig; | ||
272 | } | 334 | } |