p_ed25519.c
Go to the documentation of this file.
1 /* Copyright (c) 2017, Google Inc.
2  *
3  * Permission to use, copy, modify, and/or distribute this software for any
4  * purpose with or without fee is hereby granted, provided that the above
5  * copyright notice and this permission notice appear in all copies.
6  *
7  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10  * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14 
15 #include <openssl/evp.h>
16 
17 #include <openssl/curve25519.h>
18 #include <openssl/err.h>
19 #include <openssl/mem.h>
20 
21 #include "internal.h"
22 
23 
24 // Ed25519 has no parameters to copy.
25 static int pkey_ed25519_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src) { return 1; }
26 
29  if (key == NULL) {
31  return 0;
32  }
33 
34  if (!EVP_PKEY_set_type(pkey, EVP_PKEY_ED25519)) {
36  return 0;
37  }
38 
39  uint8_t pubkey_unused[32];
40  ED25519_keypair(pubkey_unused, key->key.priv);
41  key->has_private = 1;
42 
43  OPENSSL_free(pkey->pkey.ptr);
44  pkey->pkey.ptr = key;
45  return 1;
46 }
47 
49  size_t *siglen, const uint8_t *tbs,
50  size_t tbslen) {
51  ED25519_KEY *key = ctx->pkey->pkey.ptr;
52  if (!key->has_private) {
54  return 0;
55  }
56 
57  if (sig == NULL) {
58  *siglen = 64;
59  return 1;
60  }
61 
62  if (*siglen < 64) {
64  return 0;
65  }
66 
67  if (!ED25519_sign(sig, tbs, tbslen, key->key.priv)) {
68  return 0;
69  }
70 
71  *siglen = 64;
72  return 1;
73 }
74 
76  size_t siglen, const uint8_t *tbs,
77  size_t tbslen) {
78  ED25519_KEY *key = ctx->pkey->pkey.ptr;
79  if (siglen != 64 ||
80  !ED25519_verify(tbs, tbslen, sig, key->key.pub.value)) {
82  return 0;
83  }
84 
85  return 1;
86 }
87 
90  NULL /* init */,
92  NULL /* cleanup */,
94  NULL /* sign */,
96  NULL /* verify */,
98  NULL /* verify_recover */,
99  NULL /* encrypt */,
100  NULL /* decrypt */,
101  NULL /* derive */,
102  NULL /* paramgen */,
103  NULL /* ctrl */,
104 };
dst
static const char dst[]
Definition: test-fs-copyfile.c:37
ctx
Definition: benchmark-async.c:30
EVP_R_INVALID_SIGNATURE
#define EVP_R_INVALID_SIGNATURE
Definition: evp_errors.h:91
evp.h
OPENSSL_PUT_ERROR
#define OPENSSL_PUT_ERROR(library, reason)
Definition: err.h:423
ED25519_keypair
#define ED25519_keypair
Definition: boringssl_prefix_symbols.h:1395
pkey_ed25519_keygen
static int pkey_ed25519_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)
Definition: p_ed25519.c:27
ED25519_verify
#define ED25519_verify
Definition: boringssl_prefix_symbols.h:1398
evp_pkey_st::ptr
void * ptr
Definition: evp.h:1054
EVP_R_NOT_A_PRIVATE_KEY
#define EVP_R_NOT_A_PRIVATE_KEY
Definition: evp_errors.h:90
uint8_t
unsigned char uint8_t
Definition: stdint-msvc2008.h:78
ED25519_sign
#define ED25519_sign
Definition: boringssl_prefix_symbols.h:1397
EVP_PKEY_ED25519
#define EVP_PKEY_ED25519
Definition: evp.h:179
OPENSSL_malloc
#define OPENSSL_malloc
Definition: boringssl_prefix_symbols.h:1885
evp_pkey_ctx_st
Definition: third_party/boringssl-with-bazel/src/crypto/evp/internal.h:182
internal.h
evp_pkey_st
Definition: evp.h:1046
ed25519_pkey_meth
const EVP_PKEY_METHOD ed25519_pkey_meth
Definition: p_ed25519.c:88
EVP_PKEY_set_type
#define EVP_PKEY_set_type
Definition: boringssl_prefix_symbols.h:1655
err.h
evp_pkey_method_st
Definition: third_party/boringssl-with-bazel/src/crypto/evp/internal.h:197
pkey_ed25519_copy
static int pkey_ed25519_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src)
Definition: p_ed25519.c:25
evp_pkey_st::pkey
union evp_pkey_st::@364 pkey
key
const char * key
Definition: hpack_parser_table.cc:164
pkey_ed25519_sign_message
static int pkey_ed25519_sign_message(EVP_PKEY_CTX *ctx, uint8_t *sig, size_t *siglen, const uint8_t *tbs, size_t tbslen)
Definition: p_ed25519.c:48
EVP_R_BUFFER_TOO_SMALL
#define EVP_R_BUFFER_TOO_SMALL
Definition: evp_errors.h:60
curve25519.h
mem.h
OPENSSL_free
#define OPENSSL_free
Definition: boringssl_prefix_symbols.h:1869
ED25519_KEY
Definition: third_party/boringssl-with-bazel/src/crypto/evp/internal.h:234
ERR_R_MALLOC_FAILURE
#define ERR_R_MALLOC_FAILURE
Definition: err.h:371
pkey_ed25519_verify_message
static int pkey_ed25519_verify_message(EVP_PKEY_CTX *ctx, const uint8_t *sig, size_t siglen, const uint8_t *tbs, size_t tbslen)
Definition: p_ed25519.c:75


grpc
Author(s):
autogenerated on Fri May 16 2025 02:59:38