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

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