Botan 3.12.0
Crypto and TLS for C&
sodium_25519.cpp
Go to the documentation of this file.
1/*
2* (C) 2019 Jack Lloyd
3*
4* Botan is released under the Simplified BSD License (see license.txt)
5*/
6
7#include <botan/sodium.h>
8
9#include <botan/ed25519.h>
10#include <botan/x25519.h>
11#include <botan/internal/ct_utils.h>
12
13namespace Botan {
14
15int Sodium::crypto_scalarmult_curve25519(uint8_t out[32], const uint8_t scalar[32], const uint8_t point[32]) {
16 curve25519_donna(out, scalar, point);
17 // Return -1 if the result is the identity
18 return -static_cast<int>(CT::all_zeros(out, 32).if_set_return(1));
19}
20
21int Sodium::crypto_scalarmult_curve25519_base(uint8_t out[32], const uint8_t scalar[32]) {
22 curve25519_basepoint(out, scalar);
23 return 0;
24}
25
27 uint8_t sig[], unsigned long long* sig_len, const uint8_t msg[], size_t msg_len, const uint8_t sk[64]) {
28 ed25519_sign(sig, msg, msg_len, sk, nullptr, 0);
29
30 if(sig_len != nullptr) {
31 *sig_len = 64;
32 }
33 return 0;
34}
35
37 const uint8_t msg[],
38 size_t msg_len,
39 const uint8_t pk[32]) {
40 const bool ok = ed25519_verify(msg, msg_len, sig, pk, nullptr, 0);
41 return ok ? 0 : -1;
42}
43
44int Sodium::crypto_sign_ed25519_keypair(uint8_t pk[32], uint8_t sk[64]) {
46 randombytes_buf(seed.data(), seed.size());
47 return crypto_sign_ed25519_seed_keypair(pk, sk, seed.data());
48}
49
50int Sodium::crypto_sign_ed25519_seed_keypair(uint8_t pk[], uint8_t sk[], const uint8_t seed[]) {
51 ed25519_gen_keypair(pk, sk, seed);
52 return 0;
53}
54
55} // namespace Botan
constexpr CT::Mask< T > all_zeros(const T elem[], size_t len)
Definition ct_utils.h:785
int crypto_sign_ed25519_verify_detached(const uint8_t sig[], const uint8_t msg[], size_t msg_len, const uint8_t pk[32])
int crypto_scalarmult_curve25519(uint8_t out[32], const uint8_t scalar[32], const uint8_t basepoint[32])
int crypto_scalarmult_curve25519_base(uint8_t out[32], const uint8_t scalar[32])
int crypto_sign_ed25519_keypair(uint8_t pk[32], uint8_t sk[64])
int crypto_sign_ed25519_seed_keypair(uint8_t pk[], uint8_t sk[], const uint8_t seed[])
int crypto_sign_ed25519_detached(uint8_t sig[], unsigned long long *sig_len, const uint8_t msg[], size_t msg_len, const uint8_t sk[64])
void randombytes_buf(void *buf, size_t size)
void ed25519_sign(uint8_t sig[64], const uint8_t m[], size_t mlen, const uint8_t sk[64], const uint8_t domain_sep[], size_t domain_sep_len)
Definition ed25519.cpp:34
void curve25519_donna(uint8_t mypublic[32], const uint8_t secret[32], const uint8_t basepoint[32])
Definition donna.cpp:453
void ed25519_gen_keypair(uint8_t pk[32], uint8_t sk[64], const uint8_t seed[32])
Definition ed25519.cpp:18
std::vector< T, secure_allocator< T > > secure_vector
Definition secmem.h:68
bool ed25519_verify(const uint8_t *m, size_t mlen, const uint8_t sig[64], const uint8_t *pk, const uint8_t domain_sep[], size_t domain_sep_len)
Definition ed25519.cpp:70
void curve25519_basepoint(uint8_t mypublic[32], const uint8_t secret[32])
Definition x25519.cpp:19