VirtualBox

source: vbox/trunk/src/libs/openssl-3.0.7/include/crypto/ecx.h@ 97371

Last change on this file since 97371 was 94320, checked in by vboxsync, 3 years ago

libs/openssl-3.0.1: Export to OSE and fix copyright headers in Makefiles, bugref:10128

File size: 5.0 KB
Line 
1/*
2 * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
3 *
4 * Licensed under the Apache License 2.0 (the "License"). You may not use
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
8 */
9
10/* Internal EC functions for other submodules: not for application use */
11
12#ifndef OSSL_CRYPTO_ECX_H
13# define OSSL_CRYPTO_ECX_H
14# pragma once
15
16# include <openssl/opensslconf.h>
17
18# ifndef OPENSSL_NO_EC
19
20# include <openssl/core.h>
21# include <openssl/e_os2.h>
22# include <openssl/crypto.h>
23# include "internal/refcount.h"
24# include "crypto/types.h"
25
26# define X25519_KEYLEN 32
27# define X448_KEYLEN 56
28# define ED25519_KEYLEN 32
29# define ED448_KEYLEN 57
30
31# define MAX_KEYLEN ED448_KEYLEN
32
33# define X25519_BITS 253
34# define X25519_SECURITY_BITS 128
35
36# define X448_BITS 448
37# define X448_SECURITY_BITS 224
38
39# define ED25519_BITS 256
40/* RFC8032 Section 8.5 */
41# define ED25519_SECURITY_BITS 128
42# define ED25519_SIGSIZE 64
43
44# define ED448_BITS 456
45/* RFC8032 Section 8.5 */
46# define ED448_SECURITY_BITS 224
47# define ED448_SIGSIZE 114
48
49
50typedef enum {
51 ECX_KEY_TYPE_X25519,
52 ECX_KEY_TYPE_X448,
53 ECX_KEY_TYPE_ED25519,
54 ECX_KEY_TYPE_ED448
55} ECX_KEY_TYPE;
56
57#define KEYTYPE2NID(type) \
58 ((type) == ECX_KEY_TYPE_X25519 \
59 ? EVP_PKEY_X25519 \
60 : ((type) == ECX_KEY_TYPE_X448 \
61 ? EVP_PKEY_X448 \
62 : ((type) == ECX_KEY_TYPE_ED25519 \
63 ? EVP_PKEY_ED25519 \
64 : EVP_PKEY_ED448)))
65
66struct ecx_key_st {
67 OSSL_LIB_CTX *libctx;
68 char *propq;
69 unsigned int haspubkey:1;
70 unsigned char pubkey[MAX_KEYLEN];
71 unsigned char *privkey;
72 size_t keylen;
73 ECX_KEY_TYPE type;
74 CRYPTO_REF_COUNT references;
75 CRYPTO_RWLOCK *lock;
76};
77
78size_t ossl_ecx_key_length(ECX_KEY_TYPE type);
79ECX_KEY *ossl_ecx_key_new(OSSL_LIB_CTX *libctx, ECX_KEY_TYPE type,
80 int haspubkey, const char *propq);
81void ossl_ecx_key_set0_libctx(ECX_KEY *key, OSSL_LIB_CTX *libctx);
82unsigned char *ossl_ecx_key_allocate_privkey(ECX_KEY *key);
83void ossl_ecx_key_free(ECX_KEY *key);
84int ossl_ecx_key_up_ref(ECX_KEY *key);
85ECX_KEY *ossl_ecx_key_dup(const ECX_KEY *key, int selection);
86
87int ossl_x25519(uint8_t out_shared_key[32], const uint8_t private_key[32],
88 const uint8_t peer_public_value[32]);
89void ossl_x25519_public_from_private(uint8_t out_public_value[32],
90 const uint8_t private_key[32]);
91
92int
93ossl_ed25519_public_from_private(OSSL_LIB_CTX *ctx, uint8_t out_public_key[32],
94 const uint8_t private_key[32],
95 const char *propq);
96int
97ossl_ed25519_sign(uint8_t *out_sig, const uint8_t *message, size_t message_len,
98 const uint8_t public_key[32], const uint8_t private_key[32],
99 OSSL_LIB_CTX *libctx, const char *propq);
100int
101ossl_ed25519_verify(const uint8_t *message, size_t message_len,
102 const uint8_t signature[64], const uint8_t public_key[32],
103 OSSL_LIB_CTX *libctx, const char *propq);
104
105int
106ossl_ed448_public_from_private(OSSL_LIB_CTX *ctx, uint8_t out_public_key[57],
107 const uint8_t private_key[57], const char *propq);
108int
109ossl_ed448_sign(OSSL_LIB_CTX *ctx, uint8_t *out_sig, const uint8_t *message,
110 size_t message_len, const uint8_t public_key[57],
111 const uint8_t private_key[57], const uint8_t *context,
112 size_t context_len, const char *propq);
113
114int
115ossl_ed448_verify(OSSL_LIB_CTX *ctx, const uint8_t *message, size_t message_len,
116 const uint8_t signature[114], const uint8_t public_key[57],
117 const uint8_t *context, size_t context_len, const char *propq);
118
119int
120ossl_x448(uint8_t out_shared_key[56], const uint8_t private_key[56],
121 const uint8_t peer_public_value[56]);
122void
123ossl_x448_public_from_private(uint8_t out_public_value[56],
124 const uint8_t private_key[56]);
125
126
127/* Backend support */
128typedef enum {
129 KEY_OP_PUBLIC,
130 KEY_OP_PRIVATE,
131 KEY_OP_KEYGEN
132} ecx_key_op_t;
133
134ECX_KEY *ossl_ecx_key_op(const X509_ALGOR *palg,
135 const unsigned char *p, int plen,
136 int pkey_id, ecx_key_op_t op,
137 OSSL_LIB_CTX *libctx, const char *propq);
138
139int ossl_ecx_public_from_private(ECX_KEY *key);
140int ossl_ecx_key_fromdata(ECX_KEY *ecx, const OSSL_PARAM params[],
141 int include_private);
142ECX_KEY *ossl_ecx_key_from_pkcs8(const PKCS8_PRIV_KEY_INFO *p8inf,
143 OSSL_LIB_CTX *libctx, const char *propq);
144
145ECX_KEY *ossl_evp_pkey_get1_X25519(EVP_PKEY *pkey);
146ECX_KEY *ossl_evp_pkey_get1_X448(EVP_PKEY *pkey);
147ECX_KEY *ossl_evp_pkey_get1_ED25519(EVP_PKEY *pkey);
148ECX_KEY *ossl_evp_pkey_get1_ED448(EVP_PKEY *pkey);
149# endif /* OPENSSL_NO_EC */
150#endif
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette