From 0e2319215998bcb009175a5e03c119749a83d791 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Fri, 15 Aug 2014 13:52:08 -0700 Subject: [PATCH] Add crypto_sign_ed25519_sk_to_seed() and crypto_sign_ed25519_sk_to_pk() --- .../crypto_sign/ed25519/sign_ed25519_api.c | 18 ++++++++++++++++++ .../include/sodium/crypto_sign_ed25519.h | 8 ++++++++ test/default/sign.c | 12 ++++++++++++ 3 files changed, 38 insertions(+) diff --git a/src/libsodium/crypto_sign/ed25519/sign_ed25519_api.c b/src/libsodium/crypto_sign/ed25519/sign_ed25519_api.c index 9f999d27..7ba6b4c3 100644 --- a/src/libsodium/crypto_sign/ed25519/sign_ed25519_api.c +++ b/src/libsodium/crypto_sign/ed25519/sign_ed25519_api.c @@ -1,3 +1,6 @@ + +#include + #include "crypto_sign_ed25519.h" size_t @@ -19,3 +22,18 @@ size_t crypto_sign_ed25519_secretkeybytes(void) { return crypto_sign_ed25519_SECRETKEYBYTES; } + +int +crypto_sign_ed25519_sk_to_seed(unsigned char *seed, const unsigned char *sk) +{ + memmove(seed, sk, crypto_sign_ed25519_SEEDBYTES); + return 0; +} + +int +crypto_sign_ed25519_sk_to_pk(unsigned char *pk, const unsigned char *sk) +{ + memmove(pk, sk + crypto_sign_ed25519_SEEDBYTES, + crypto_sign_ed25519_PUBLICKEYBYTES); + return 0; +} diff --git a/src/libsodium/include/sodium/crypto_sign_ed25519.h b/src/libsodium/include/sodium/crypto_sign_ed25519.h index e1f93aad..0194c39d 100644 --- a/src/libsodium/include/sodium/crypto_sign_ed25519.h +++ b/src/libsodium/include/sodium/crypto_sign_ed25519.h @@ -64,6 +64,14 @@ int crypto_sign_ed25519_pk_to_curve25519(unsigned char *curve25519_pk, SODIUM_EXPORT int crypto_sign_ed25519_sk_to_curve25519(unsigned char *curve25519_sk, const unsigned char *ed25519_sk); + +SODIUM_EXPORT +int crypto_sign_ed25519_sk_to_seed(unsigned char *seed, + const unsigned char *sk); + +SODIUM_EXPORT +int crypto_sign_ed25519_sk_to_pk(unsigned char *pk, const unsigned char *sk); + #ifdef __cplusplus } #endif diff --git a/test/default/sign.c b/test/default/sign.c index ac4ba23e..12b0f8d4 100644 --- a/test/default/sign.c +++ b/test/default/sign.c @@ -1052,6 +1052,8 @@ static TestData test_data[] = { int main(void) { + unsigned char extracted_seed[crypto_sign_ed25519_SEEDBYTES]; + unsigned char extracted_pk[crypto_sign_ed25519_PUBLICKEYBYTES]; unsigned char sig[crypto_sign_BYTES]; unsigned char sm[1024 + crypto_sign_BYTES]; unsigned char m[1024]; @@ -1127,6 +1129,16 @@ int main(void) printf("crypto_sign_seed_keypair() failure\n"); return -1; } + crypto_sign_ed25519_sk_to_seed(extracted_seed, sk); + if (memcmp(extracted_seed, keypair_seed, + crypto_sign_ed25519_SEEDBYTES) != 0) { + printf("crypto_sign_ed25519_sk_to_seed() failure\n"); + } + crypto_sign_ed25519_sk_to_pk(extracted_pk, sk); + if (memcmp(extracted_pk, pk, + crypto_sign_ed25519_PUBLICKEYBYTES) != 0) { + printf("crypto_sign_ed25519_sk_to_pk() failure\n"); + } sodium_bin2hex(pk_hex, sizeof pk_hex, pk, sizeof pk); sodium_bin2hex(sk_hex, sizeof sk_hex, sk, sizeof sk);