The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/libsodium/test/default/ed25519_convert.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 
    2 #define TEST_NAME "ed25519_convert"
    3 #include "cmptest.h"
    4 
    5 static const unsigned char keypair_seed[crypto_sign_ed25519_SEEDBYTES] = {
    6     0x42, 0x11, 0x51, 0xa4, 0x59, 0xfa, 0xea, 0xde, 0x3d, 0x24, 0x71,
    7     0x15, 0xf9, 0x4a, 0xed, 0xae, 0x42, 0x31, 0x81, 0x24, 0x09, 0x5a,
    8     0xfa, 0xbe, 0x4d, 0x14, 0x51, 0xa5, 0x59, 0xfa, 0xed, 0xee
    9 };
   10 
   11 int
   12 main(void)
   13 {
   14     unsigned char ed25519_pk[crypto_sign_ed25519_PUBLICKEYBYTES];
   15     unsigned char ed25519_skpk[crypto_sign_ed25519_SECRETKEYBYTES];
   16     unsigned char curve25519_pk[crypto_scalarmult_curve25519_BYTES];
   17     unsigned char curve25519_pk2[crypto_scalarmult_curve25519_BYTES];
   18     unsigned char curve25519_sk[crypto_scalarmult_curve25519_BYTES];
   19     char          curve25519_pk_hex[crypto_scalarmult_curve25519_BYTES * 2 + 1];
   20     char          curve25519_sk_hex[crypto_scalarmult_curve25519_BYTES * 2 + 1];
   21     unsigned char hseed[crypto_hash_sha512_BYTES];
   22     unsigned int  i;
   23 
   24     assert(crypto_sign_ed25519_SEEDBYTES <= crypto_hash_sha512_BYTES);
   25 #ifdef ED25519_NONDETERMINISTIC
   26     crypto_hash_sha512(hseed, keypair_seed, crypto_sign_ed25519_SEEDBYTES);
   27 #else
   28     memcpy(hseed, keypair_seed, crypto_sign_ed25519_SEEDBYTES);
   29 #endif
   30     crypto_sign_ed25519_seed_keypair(ed25519_pk, ed25519_skpk, hseed);
   31 
   32     if (crypto_sign_ed25519_pk_to_curve25519(curve25519_pk, ed25519_pk) != 0) {
   33         printf("conversion failed\n");
   34     }
   35     crypto_sign_ed25519_sk_to_curve25519(curve25519_sk, ed25519_skpk);
   36     sodium_bin2hex(curve25519_pk_hex, sizeof curve25519_pk_hex, curve25519_pk,
   37                    sizeof curve25519_pk);
   38     sodium_bin2hex(curve25519_sk_hex, sizeof curve25519_sk_hex, curve25519_sk,
   39                    sizeof curve25519_sk);
   40 
   41     printf("curve25519 pk: [%s]\n", curve25519_pk_hex);
   42     printf("curve25519 sk: [%s]\n", curve25519_sk_hex);
   43 
   44     for (i = 0U; i < 500U; i++) {
   45         crypto_sign_ed25519_keypair(ed25519_pk, ed25519_skpk);
   46         if (crypto_sign_ed25519_pk_to_curve25519(curve25519_pk, ed25519_pk) !=
   47             0) {
   48             printf("conversion failed\n");
   49         }
   50         crypto_sign_ed25519_sk_to_curve25519(curve25519_sk, ed25519_skpk);
   51         crypto_scalarmult_curve25519_base(curve25519_pk2, curve25519_sk);
   52         if (memcmp(curve25519_pk, curve25519_pk2, sizeof curve25519_pk) != 0) {
   53             printf("conversion failed\n");
   54         }
   55     }
   56 
   57     sodium_hex2bin(ed25519_pk, crypto_sign_ed25519_PUBLICKEYBYTES,
   58                    "0000000000000000000000000000000000000000000000000000000000000000"
   59                    "0000000000000000000000000000000000000000000000000000000000000000",
   60                    64, NULL, NULL, NULL);
   61     assert(crypto_sign_ed25519_pk_to_curve25519(curve25519_pk, ed25519_pk) == -1);
   62     sodium_hex2bin(ed25519_pk, crypto_sign_ed25519_PUBLICKEYBYTES,
   63                    "0200000000000000000000000000000000000000000000000000000000000000"
   64                    "0000000000000000000000000000000000000000000000000000000000000000",
   65                    64, NULL, NULL, NULL);
   66     assert(crypto_sign_ed25519_pk_to_curve25519(curve25519_pk, ed25519_pk) == -1);
   67     sodium_hex2bin(ed25519_pk, crypto_sign_ed25519_PUBLICKEYBYTES,
   68                    "0500000000000000000000000000000000000000000000000000000000000000"
   69                    "0000000000000000000000000000000000000000000000000000000000000000",
   70                    64, NULL, NULL, NULL);
   71     assert(crypto_sign_ed25519_pk_to_curve25519(curve25519_pk, ed25519_pk) == -1);
   72 
   73     printf("ok\n");
   74 
   75     return 0;
   76 }

Cache object: b03a9a958db9b22a1c4f2670b7992ac6


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.