mirror of
https://github.com/jedisct1/libsodium.git
synced 2024-12-19 18:15:18 -07:00
Merge pull request #6 from tarcieri/crypto_sign_keypair
Add crypto_sign_publickey() API
This commit is contained in:
commit
02156fac27
@ -6,6 +6,7 @@
|
||||
#define crypto_sign crypto_sign_ed25519
|
||||
#define crypto_sign_open crypto_sign_ed25519_open
|
||||
#define crypto_sign_keypair crypto_sign_ed25519_keypair
|
||||
#define crypto_sign_publickey crypto_sign_ed25519_publickey
|
||||
#define crypto_sign_BYTES crypto_sign_ed25519_BYTES
|
||||
#define crypto_sign_PUBLICKEYBYTES crypto_sign_ed25519_PUBLICKEYBYTES
|
||||
#define crypto_sign_SECRETKEYBYTES crypto_sign_ed25519_SECRETKEYBYTES
|
||||
|
@ -24,24 +24,36 @@ int crypto_sign_keypair(
|
||||
unsigned char *pk,
|
||||
unsigned char *sk
|
||||
)
|
||||
{
|
||||
unsigned char seed[32];
|
||||
|
||||
randombytes(seed, 32);
|
||||
crypto_sign_publickey(pk, sk, seed);
|
||||
}
|
||||
|
||||
int crypto_sign_publickey(
|
||||
unsigned char *pk,
|
||||
unsigned char *sk,
|
||||
unsigned char *seed
|
||||
)
|
||||
{
|
||||
sc25519 scsk;
|
||||
ge25519 gepk;
|
||||
unsigned char extsk[64];
|
||||
int i;
|
||||
|
||||
randombytes(sk, 32);
|
||||
crypto_hash_sha512(extsk, sk, 32);
|
||||
extsk[0] &= 248;
|
||||
extsk[31] &= 127;
|
||||
extsk[31] |= 64;
|
||||
crypto_hash_sha512(sk, seed, 32);
|
||||
sk[0] &= 248;
|
||||
sk[31] &= 127;
|
||||
sk[31] |= 64;
|
||||
|
||||
sc25519_from32bytes(&scsk,extsk);
|
||||
sc25519_from32bytes(&scsk,sk);
|
||||
|
||||
ge25519_scalarmult_base(&gepk, &scsk);
|
||||
ge25519_pack(pk, &gepk);
|
||||
for(i=0;i<32;i++)
|
||||
sk[32 + i] = pk[i];
|
||||
for(i=0;i<32;i++)
|
||||
sk[i] = seed[i];
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -12,6 +12,7 @@ extern "C" {
|
||||
extern int crypto_sign_ed25519_ref(unsigned char *,unsigned long long *,const unsigned char *,unsigned long long,const unsigned char *);
|
||||
extern int crypto_sign_ed25519_ref_open(unsigned char *,unsigned long long *,const unsigned char *,unsigned long long,const unsigned char *);
|
||||
extern int crypto_sign_ed25519_ref_keypair(unsigned char *,unsigned char *);
|
||||
extern int crypto_sign_ed25519_ref_publickey(unsigned char *,unsigned char *,unsigned char *);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
@ -19,6 +20,7 @@ extern int crypto_sign_ed25519_ref_keypair(unsigned char *,unsigned char *);
|
||||
#define crypto_sign_ed25519 crypto_sign_ed25519_ref
|
||||
#define crypto_sign_ed25519_open crypto_sign_ed25519_ref_open
|
||||
#define crypto_sign_ed25519_keypair crypto_sign_ed25519_ref_keypair
|
||||
#define crypto_sign_ed25519_publickey crypto_sign_ed25519_ref_publickey
|
||||
#define crypto_sign_ed25519_BYTES crypto_sign_ed25519_ref_BYTES
|
||||
#define crypto_sign_ed25519_PUBLICKEYBYTES crypto_sign_ed25519_ref_PUBLICKEYBYTES
|
||||
#define crypto_sign_ed25519_SECRETKEYBYTES crypto_sign_ed25519_ref_SECRETKEYBYTES
|
||||
|
Loading…
Reference in New Issue
Block a user