mirror of
https://github.com/urbit/shrub.git
synced 2024-12-20 09:21:42 +03:00
54 lines
1.1 KiB
C
54 lines
1.1 KiB
C
#include "urcrypt.h"
|
|
#include <string.h>
|
|
#include <ed25519.h>
|
|
|
|
void
|
|
urcrypt_ed_puck(const uint8_t seed[32],
|
|
uint8_t out[32])
|
|
{
|
|
uint8_t secret[64];
|
|
ed25519_create_keypair(out, secret, seed);
|
|
}
|
|
|
|
void
|
|
urcrypt_ed_shar(const uint8_t public[32],
|
|
const uint8_t seed[32],
|
|
uint8_t out[32])
|
|
{
|
|
uint8_t self[32], exp[64];
|
|
|
|
memset(self, 0, 32);
|
|
memset(exp, 0, 64);
|
|
memset(out, 0, 32);
|
|
|
|
ed25519_create_keypair(self, exp, seed);
|
|
ed25519_key_exchange(out, public, exp);
|
|
}
|
|
|
|
void
|
|
urcrypt_ed_sign(const uint8_t *message,
|
|
size_t length,
|
|
const uint8_t seed[32],
|
|
uint8_t out[64])
|
|
{
|
|
uint8_t public[64], secret[64];
|
|
|
|
memset(public, 0, 64);
|
|
memset(secret, 0, 64);
|
|
memset(out, 0, 64);
|
|
|
|
ed25519_create_keypair(public, secret, seed);
|
|
ed25519_sign(out, message, length, public, secret);
|
|
}
|
|
|
|
bool
|
|
urcrypt_ed_veri(const uint8_t *message,
|
|
size_t length,
|
|
const uint8_t public[32],
|
|
const uint8_t signature[64])
|
|
{
|
|
return ( ed25519_verify(signature, message, length, public) == 1 )
|
|
? true
|
|
: false;
|
|
}
|