20 lines
791 B
Plaintext
20 lines
791 B
Plaintext
#include <ed25519.cuh>
|
|
#include <edsign.cuh>
|
|
#include <sha512.cuh>
|
|
__device__ __forceinline__ void expand_key(unsigned char* __restrict__ expanded, const unsigned char* __restrict__ secret) {
|
|
struct sha512_state s;
|
|
memcpy(&s, &sha512_initial_state, sizeof(s));
|
|
sha512_final(&s, secret);
|
|
sha512_get(&s, expanded);
|
|
expanded[0] &= 0xf8;
|
|
expanded[31] = (expanded[31] & 0x7F) | 0x40;
|
|
}
|
|
__device__ void ed25519_create_keypair(unsigned char* __restrict__ private_key, unsigned char* __restrict__ public_key, unsigned char* __restrict__ seed) {
|
|
unsigned char expanded[64];
|
|
expand_key(expanded, seed);
|
|
ge_p3 A;
|
|
ge_scalarmult_base(A, expanded);
|
|
ge_p3_tobytes(public_key, A);
|
|
memcpy(private_key, seed, 32);
|
|
memcpy(private_key + 32, public_key, 32);
|
|
} |