Blame SOURCES/libsodium-1.0.18/test/default/ed25519_convert.c

ca16be
ca16be
#define TEST_NAME "ed25519_convert"
ca16be
#include "cmptest.h"
ca16be
ca16be
static const unsigned char keypair_seed[crypto_sign_ed25519_SEEDBYTES] = {
ca16be
    0x42, 0x11, 0x51, 0xa4, 0x59, 0xfa, 0xea, 0xde, 0x3d, 0x24, 0x71,
ca16be
    0x15, 0xf9, 0x4a, 0xed, 0xae, 0x42, 0x31, 0x81, 0x24, 0x09, 0x5a,
ca16be
    0xfa, 0xbe, 0x4d, 0x14, 0x51, 0xa5, 0x59, 0xfa, 0xed, 0xee
ca16be
};
ca16be
ca16be
int
ca16be
main(void)
ca16be
{
ca16be
    unsigned char ed25519_pk[crypto_sign_ed25519_PUBLICKEYBYTES];
ca16be
    unsigned char ed25519_skpk[crypto_sign_ed25519_SECRETKEYBYTES];
ca16be
    unsigned char curve25519_pk[crypto_scalarmult_curve25519_BYTES];
ca16be
    unsigned char curve25519_pk2[crypto_scalarmult_curve25519_BYTES];
ca16be
    unsigned char curve25519_sk[crypto_scalarmult_curve25519_BYTES];
ca16be
    char          curve25519_pk_hex[crypto_scalarmult_curve25519_BYTES * 2 + 1];
ca16be
    char          curve25519_sk_hex[crypto_scalarmult_curve25519_BYTES * 2 + 1];
ca16be
    unsigned int  i;
ca16be
ca16be
    assert(crypto_sign_ed25519_SEEDBYTES <= crypto_hash_sha512_BYTES);
ca16be
    crypto_sign_ed25519_seed_keypair(ed25519_pk, ed25519_skpk, keypair_seed);
ca16be
ca16be
    if (crypto_sign_ed25519_pk_to_curve25519(curve25519_pk, ed25519_pk) != 0) {
ca16be
        printf("conversion failed\n");
ca16be
    }
ca16be
    crypto_sign_ed25519_sk_to_curve25519(curve25519_sk, ed25519_skpk);
ca16be
    sodium_bin2hex(curve25519_pk_hex, sizeof curve25519_pk_hex, curve25519_pk,
ca16be
                   sizeof curve25519_pk);
ca16be
    sodium_bin2hex(curve25519_sk_hex, sizeof curve25519_sk_hex, curve25519_sk,
ca16be
                   sizeof curve25519_sk);
ca16be
ca16be
    printf("curve25519 pk: [%s]\n", curve25519_pk_hex);
ca16be
    printf("curve25519 sk: [%s]\n", curve25519_sk_hex);
ca16be
ca16be
    for (i = 0U; i < 500U; i++) {
ca16be
        crypto_sign_ed25519_keypair(ed25519_pk, ed25519_skpk);
ca16be
        if (crypto_sign_ed25519_pk_to_curve25519(curve25519_pk, ed25519_pk) !=
ca16be
            0) {
ca16be
            printf("conversion failed\n");
ca16be
        }
ca16be
        crypto_sign_ed25519_sk_to_curve25519(curve25519_sk, ed25519_skpk);
ca16be
        crypto_scalarmult_curve25519_base(curve25519_pk2, curve25519_sk);
ca16be
        if (memcmp(curve25519_pk, curve25519_pk2, sizeof curve25519_pk) != 0) {
ca16be
            printf("conversion failed\n");
ca16be
        }
ca16be
    }
ca16be
ca16be
    sodium_hex2bin(ed25519_pk, crypto_sign_ed25519_PUBLICKEYBYTES,
ca16be
                   "0000000000000000000000000000000000000000000000000000000000000000"
ca16be
                   "0000000000000000000000000000000000000000000000000000000000000000",
ca16be
                   64, NULL, NULL, NULL);
ca16be
    assert(crypto_sign_ed25519_pk_to_curve25519(curve25519_pk, ed25519_pk) == -1);
ca16be
    sodium_hex2bin(ed25519_pk, crypto_sign_ed25519_PUBLICKEYBYTES,
ca16be
                   "0200000000000000000000000000000000000000000000000000000000000000"
ca16be
                   "0000000000000000000000000000000000000000000000000000000000000000",
ca16be
                   64, NULL, NULL, NULL);
ca16be
    assert(crypto_sign_ed25519_pk_to_curve25519(curve25519_pk, ed25519_pk) == -1);
ca16be
    sodium_hex2bin(ed25519_pk, crypto_sign_ed25519_PUBLICKEYBYTES,
ca16be
                   "0500000000000000000000000000000000000000000000000000000000000000"
ca16be
                   "0000000000000000000000000000000000000000000000000000000000000000",
ca16be
                   64, NULL, NULL, NULL);
ca16be
    assert(crypto_sign_ed25519_pk_to_curve25519(curve25519_pk, ed25519_pk) == -1);
ca16be
ca16be
    printf("ok\n");
ca16be
ca16be
    return 0;
ca16be
}