1 // Written in the D programming language. 2 3 module wrapper.sodium.crypto_box_curve25519xsalsa20poly1305; 4 5 import wrapper.sodium.core; // assure sodium got initialized 6 7 public 8 import deimos.sodium.crypto_box_curve25519xsalsa20poly1305: crypto_box_curve25519xsalsa20poly1305_SEEDBYTES, 9 crypto_box_curve25519xsalsa20poly1305_seedbytes, 10 crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES, 11 crypto_box_curve25519xsalsa20poly1305_publickeybytes, 12 crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES, 13 crypto_box_curve25519xsalsa20poly1305_secretkeybytes, 14 crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES, 15 crypto_box_curve25519xsalsa20poly1305_beforenmbytes, 16 crypto_box_curve25519xsalsa20poly1305_NONCEBYTES, 17 crypto_box_curve25519xsalsa20poly1305_noncebytes, 18 crypto_box_curve25519xsalsa20poly1305_MACBYTES, 19 crypto_box_curve25519xsalsa20poly1305_macbytes; 20 /* crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES, 21 crypto_box_curve25519xsalsa20poly1305_boxzerobytes, 22 crypto_box_curve25519xsalsa20poly1305_ZEROBYTES, 23 crypto_box_curve25519xsalsa20poly1305_zerobytes, 24 crypto_box_curve25519xsalsa20poly1305, 25 crypto_box_curve25519xsalsa20poly1305_open, 26 crypto_box_curve25519xsalsa20poly1305_seed_keypair, 27 crypto_box_curve25519xsalsa20poly1305_keypair, 28 crypto_box_curve25519xsalsa20poly1305_beforenm, 29 crypto_box_curve25519xsalsa20poly1305_afternm, 30 crypto_box_curve25519xsalsa20poly1305_open_afternm; */ 31 32 import std.exception : assertThrown; 33 34 35 // overloading some functions between module deimos.sodium.crypto_box_curve25519xsalsa20poly1305 and this module 36 37 /* No overloads for -- NaCl compatibility interface ; Requires padding -- */ 38 39 40 alias crypto_box_curve25519xsalsa20poly1305_seed_keypair = deimos.sodium.crypto_box_curve25519xsalsa20poly1305.crypto_box_curve25519xsalsa20poly1305_seed_keypair; 41 42 pragma(inline, true) 43 bool crypto_box_curve25519xsalsa20poly1305_seed_keypair(out ubyte[crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES] pk, 44 out ubyte[crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES] sk, 45 const ubyte[crypto_box_curve25519xsalsa20poly1305_SEEDBYTES] seed) pure @nogc @trusted 46 { 47 return crypto_box_curve25519xsalsa20poly1305_seed_keypair(pk.ptr, sk.ptr, seed.ptr) == 0; // __attribute__ ((nonnull)); 48 } 49 50 alias crypto_box_curve25519xsalsa20poly1305_keypair = deimos.sodium.crypto_box_curve25519xsalsa20poly1305.crypto_box_curve25519xsalsa20poly1305_keypair; 51 52 pragma(inline, true) 53 bool crypto_box_curve25519xsalsa20poly1305_keypair(out ubyte[crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES] pk, 54 out ubyte[crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES] sk) nothrow @nogc @trusted 55 { 56 return crypto_box_curve25519xsalsa20poly1305_keypair(pk.ptr, sk.ptr) == 0; // __attribute__ ((nonnull)); 57 } 58 59 /* -- Precomputation interface -- */ 60 61 alias crypto_box_curve25519xsalsa20poly1305_beforenm = deimos.sodium.crypto_box_curve25519xsalsa20poly1305.crypto_box_curve25519xsalsa20poly1305_beforenm; 62 63 pragma(inline, true) 64 bool crypto_box_curve25519xsalsa20poly1305_beforenm(out ubyte[crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES] k, 65 const ubyte[crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES] pk, 66 const ubyte[crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES] sk) pure nothrow @nogc @trusted // __attribute__ ((warn_unused_result)); 67 { 68 return crypto_box_curve25519xsalsa20poly1305_beforenm(k.ptr, pk.ptr, sk.ptr) == 0;// __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); 69 } 70 71 72 @system 73 unittest 74 { 75 import std.stdio : writeln; 76 import wrapper.sodium.randombytes; 77 debug writeln("unittest block 1 from sodium.crypto_box_curve25519xsalsa20poly1305.d"); 78 79 ubyte[crypto_box_curve25519xsalsa20poly1305_SEEDBYTES] seed = void; 80 randombytes_buf(seed.ptr, seed.length); 81 ubyte[crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES] alice_publickey = void; 82 ubyte[crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES] alice_secretkey = void; 83 crypto_box_curve25519xsalsa20poly1305_seed_keypair(alice_publickey.ptr, alice_secretkey.ptr, seed.ptr); 84 85 ubyte[crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES] bob_publickey = void; 86 ubyte[crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES] bob_secretkey = void; 87 crypto_box_curve25519xsalsa20poly1305_keypair(bob_publickey.ptr, bob_secretkey.ptr); 88 89 ubyte[crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES] shared_k = void; 90 assert(crypto_box_curve25519xsalsa20poly1305_beforenm(shared_k.ptr, bob_publickey.ptr, alice_secretkey.ptr) == 0); 91 } 92 93 @safe 94 unittest 95 { 96 import std.stdio : writeln; 97 import wrapper.sodium.randombytes; 98 debug writeln("unittest block 2 from sodium.crypto_box_curve25519xsalsa20poly1305.d"); 99 100 ubyte[crypto_box_curve25519xsalsa20poly1305_SEEDBYTES] seed = void; 101 randombytes(seed); 102 ubyte[crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES] alice_publickey = void; 103 ubyte[crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES] alice_secretkey = void; 104 assert(crypto_box_curve25519xsalsa20poly1305_seed_keypair(alice_publickey, alice_secretkey, seed)); 105 106 ubyte[crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES] bob_publickey = void; 107 ubyte[crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES] bob_secretkey = void; 108 assert(crypto_box_curve25519xsalsa20poly1305_keypair(bob_publickey, bob_secretkey)); 109 110 ubyte[crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES] shared_k = void; 111 assert(crypto_box_curve25519xsalsa20poly1305_beforenm(shared_k, bob_publickey, alice_secretkey)); 112 }