Mercurial > hg > ucis.core
diff NaCl/crypto_stream/xsalsa20.cs @ 20:c873e3dd73fe
Added NaCl cryptography code
author | Ivo Smits <Ivo@UCIS.nl> |
---|---|
date | Mon, 15 Apr 2013 00:43:48 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/NaCl/crypto_stream/xsalsa20.cs Mon Apr 15 00:43:48 2013 +0200 @@ -0,0 +1,32 @@ +using System; + +namespace UCIS.NaCl.crypto_stream { + static unsafe class xsalsa20 { + public const int KEYBYTES = 32; + public const int NONCEBYTES = 24; + + //Never written to + static Byte[] sigma = new Byte[16] {(Byte)'e', (Byte)'x', (Byte)'p', (Byte)'a', //[16] = "expand 32-byte k"; + (Byte)'n', (Byte)'d', (Byte)' ', (Byte)'3', + (Byte)'2', (Byte)'-', (Byte)'b', (Byte)'y', + (Byte)'t', (Byte)'e', (Byte)' ', (Byte)'k', }; + + public static void crypto_stream(Byte* c, int clen, Byte* n, Byte* k) { + Byte* subkey = stackalloc Byte[32]; + crypto_core.hsalsa20.crypto_core(subkey, n, k, sigma); + salsa20.crypto_stream(c, clen, n + 16, subkey); + } + + public static void crypto_stream_xor(Byte* c, Byte* m, UInt64 mlen, Byte* n, Byte* k) { + Byte* subkey = stackalloc Byte[32]; + crypto_core.hsalsa20.crypto_core(subkey, n, k, sigma); + salsa20.crypto_stream_xor(c, m, (int)mlen, n + 16, subkey); + } + + internal static void crypto_stream_xor_split(Byte* mcpad, int padbytes, Byte* c, Byte* m, UInt64 mlen, Byte* n, Byte* k) { + Byte* subkey = stackalloc Byte[32]; + crypto_core.hsalsa20.crypto_core(subkey, n, k, sigma); + salsa20.crypto_stream_xor_split(mcpad, padbytes, c, m, (int)mlen, n + 16, subkey); + } + } +} \ No newline at end of file