diff options
author | Joel Sing <jsing@cvs.openbsd.org> | 2022-11-10 16:37:53 +0000 |
---|---|---|
committer | Joel Sing <jsing@cvs.openbsd.org> | 2022-11-10 16:37:53 +0000 |
commit | e392082edded0a81c75383b9ddc67d67b8395205 (patch) | |
tree | 80803c1ab0fc96c528f7c24a6abf5036731611a7 /lib/libcrypto/evp | |
parent | 58165d78cfdbed99dd775baa4c3f1e07dd73aa16 (diff) |
Implement EVP interfaces for Ed25519 and X25519.
ok beck@ tb@
Diffstat (limited to 'lib/libcrypto/evp')
-rw-r--r-- | lib/libcrypto/evp/evp.h | 11 | ||||
-rw-r--r-- | lib/libcrypto/evp/evp_locl.h | 12 | ||||
-rw-r--r-- | lib/libcrypto/evp/pmeth_lib.c | 6 |
3 files changed, 26 insertions, 3 deletions
diff --git a/lib/libcrypto/evp/evp.h b/lib/libcrypto/evp/evp.h index f4702ab4337..f8bab26b3f9 100644 --- a/lib/libcrypto/evp/evp.h +++ b/lib/libcrypto/evp/evp.h @@ -1,4 +1,4 @@ -/* $OpenBSD: evp.h,v 1.110 2022/11/10 15:17:30 jsing Exp $ */ +/* $OpenBSD: evp.h,v 1.111 2022/11/10 16:37:52 jsing Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * @@ -115,6 +115,10 @@ #define EVP_PKEY_HKDF NID_hkdf #define EVP_PKEY_GOSTR12_256 NID_id_tc26_gost3410_2012_256 #define EVP_PKEY_GOSTR12_512 NID_id_tc26_gost3410_2012_512 +#if defined(LIBRESSL_NEXT_API) || defined(LIBRESSL_INTERNAL) +#define EVP_PKEY_ED25519 NID_ED25519 +#define EVP_PKEY_X25519 NID_X25519 +#endif #ifdef __cplusplus extern "C" { @@ -297,6 +301,11 @@ extern "C" { /* Length of tag for TLS */ #define EVP_CHACHAPOLY_TLS_TAG_LEN 16 +#if defined(LIBRESSL_NEXT_API) || defined(LIBRESSL_INTERNAL) +#define ED25519_KEYLEN 32 +#define X25519_KEYLEN 32 +#endif + typedef struct evp_cipher_info_st { const EVP_CIPHER *cipher; unsigned char iv[EVP_MAX_IV_LENGTH]; diff --git a/lib/libcrypto/evp/evp_locl.h b/lib/libcrypto/evp/evp_locl.h index dd7d2522e61..37fc55eb9c6 100644 --- a/lib/libcrypto/evp/evp_locl.h +++ b/lib/libcrypto/evp/evp_locl.h @@ -1,4 +1,4 @@ -/* $OpenBSD: evp_locl.h,v 1.29 2022/11/10 15:17:30 jsing Exp $ */ +/* $OpenBSD: evp_locl.h,v 1.30 2022/11/10 16:37:52 jsing Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 2000. */ @@ -74,6 +74,15 @@ typedef int evp_verify_method(int type, const unsigned char *m, unsigned int m_length, const unsigned char *sigbuf, unsigned int siglen, void *key); +struct ecx_key_st { + int nid; + int key_len; + uint8_t *priv_key; + size_t priv_key_len; + uint8_t *pub_key; + size_t pub_key_len; +}; + /* Type needs to be a bit field * Sub-type needs to be for variations on the method, as in, can it do * arbitrary encryption.... */ @@ -96,6 +105,7 @@ struct evp_pkey_st { #endif #ifndef OPENSSL_NO_EC struct ec_key_st *ec; /* ECC */ + struct ecx_key_st *ecx; /* ECX */ #endif #ifndef OPENSSL_NO_GOST struct gost_key_st *gost; /* GOST */ diff --git a/lib/libcrypto/evp/pmeth_lib.c b/lib/libcrypto/evp/pmeth_lib.c index 0a0451fd92a..19610dfbad8 100644 --- a/lib/libcrypto/evp/pmeth_lib.c +++ b/lib/libcrypto/evp/pmeth_lib.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pmeth_lib.c,v 1.24 2022/11/09 18:25:36 jsing Exp $ */ +/* $OpenBSD: pmeth_lib.c,v 1.25 2022/11/10 16:37:52 jsing Exp $ */ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project 2006. */ @@ -82,24 +82,28 @@ extern const EVP_PKEY_METHOD cmac_pkey_meth; extern const EVP_PKEY_METHOD dh_pkey_meth; extern const EVP_PKEY_METHOD dsa_pkey_meth; extern const EVP_PKEY_METHOD ec_pkey_meth; +extern const EVP_PKEY_METHOD ed25519_pkey_meth; extern const EVP_PKEY_METHOD gostimit_pkey_meth; extern const EVP_PKEY_METHOD gostr01_pkey_meth; extern const EVP_PKEY_METHOD hkdf_pkey_meth; extern const EVP_PKEY_METHOD hmac_pkey_meth; extern const EVP_PKEY_METHOD rsa_pkey_meth; extern const EVP_PKEY_METHOD rsa_pss_pkey_meth; +extern const EVP_PKEY_METHOD x25519_pkey_meth; static const EVP_PKEY_METHOD *pkey_methods[] = { &cmac_pkey_meth, &dh_pkey_meth, &dsa_pkey_meth, &ec_pkey_meth, + &ed25519_pkey_meth, &gostimit_pkey_meth, &gostr01_pkey_meth, &hkdf_pkey_meth, &hmac_pkey_meth, &rsa_pkey_meth, &rsa_pss_pkey_meth, + &x25519_pkey_meth, }; static const size_t pkey_methods_count = |