diff --git a/builds/msvc/vs2010/libsodium/libsodium.vcxproj b/builds/msvc/vs2010/libsodium/libsodium.vcxproj index 1c91ec22..5495556c 100644 --- a/builds/msvc/vs2010/libsodium/libsodium.vcxproj +++ b/builds/msvc/vs2010/libsodium/libsodium.vcxproj @@ -93,7 +93,7 @@ - + diff --git a/builds/msvc/vs2010/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2010/libsodium/libsodium.vcxproj.filters index c650cb31..c4348161 100644 --- a/builds/msvc/vs2010/libsodium/libsodium.vcxproj.filters +++ b/builds/msvc/vs2010/libsodium/libsodium.vcxproj.filters @@ -961,7 +961,7 @@ src\crypto_scalarmult\curve25519\ref10 - + src\crypto_stream\chacha20 diff --git a/builds/msvc/vs2012/libsodium/libsodium.vcxproj b/builds/msvc/vs2012/libsodium/libsodium.vcxproj index 316bf6f4..eb5ee848 100644 --- a/builds/msvc/vs2012/libsodium/libsodium.vcxproj +++ b/builds/msvc/vs2012/libsodium/libsodium.vcxproj @@ -93,7 +93,7 @@ - + diff --git a/builds/msvc/vs2012/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2012/libsodium/libsodium.vcxproj.filters index dc3b222e..c48991eb 100644 --- a/builds/msvc/vs2012/libsodium/libsodium.vcxproj.filters +++ b/builds/msvc/vs2012/libsodium/libsodium.vcxproj.filters @@ -961,7 +961,7 @@ src\crypto_scalarmult\curve25519\ref10 - + src\crypto_stream\chacha20 diff --git a/builds/msvc/vs2013/libsodium/libsodium.vcxproj b/builds/msvc/vs2013/libsodium/libsodium.vcxproj index 76e3ea1f..19d9f3c0 100644 --- a/builds/msvc/vs2013/libsodium/libsodium.vcxproj +++ b/builds/msvc/vs2013/libsodium/libsodium.vcxproj @@ -93,7 +93,7 @@ - + diff --git a/builds/msvc/vs2013/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2013/libsodium/libsodium.vcxproj.filters index 81e42f23..c553cf26 100644 --- a/builds/msvc/vs2013/libsodium/libsodium.vcxproj.filters +++ b/builds/msvc/vs2013/libsodium/libsodium.vcxproj.filters @@ -961,7 +961,7 @@ src\crypto_scalarmult\curve25519\ref10 - + src\crypto_stream\chacha20 diff --git a/builds/msvc/vs2015/libsodium/libsodium.vcxproj b/builds/msvc/vs2015/libsodium/libsodium.vcxproj index 8635a8c4..10a9c6ad 100644 --- a/builds/msvc/vs2015/libsodium/libsodium.vcxproj +++ b/builds/msvc/vs2015/libsodium/libsodium.vcxproj @@ -93,7 +93,7 @@ - + @@ -325,4 +325,4 @@ - \ No newline at end of file + diff --git a/builds/msvc/vs2015/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2015/libsodium/libsodium.vcxproj.filters index 0fdaa73d..6ebfc22b 100644 --- a/builds/msvc/vs2015/libsodium/libsodium.vcxproj.filters +++ b/builds/msvc/vs2015/libsodium/libsodium.vcxproj.filters @@ -925,7 +925,7 @@ - + src\crypto_stream\chacha20 @@ -998,4 +998,4 @@ src\crypto_sign\ed25519\ref10 - \ No newline at end of file + diff --git a/libsodium.vcxproj b/libsodium.vcxproj index 4611ced2..7a9b6253 100644 --- a/libsodium.vcxproj +++ b/libsodium.vcxproj @@ -501,7 +501,7 @@ - + @@ -535,4 +535,4 @@ - \ No newline at end of file + diff --git a/libsodium.vcxproj.filters b/libsodium.vcxproj.filters index 6204163c..5ba55c9d 100644 --- a/libsodium.vcxproj.filters +++ b/libsodium.vcxproj.filters @@ -566,7 +566,7 @@ Source Files - + Source Files @@ -656,4 +656,4 @@ Source Files - \ No newline at end of file + diff --git a/src/libsodium/Makefile.am b/src/libsodium/Makefile.am index d2be0d8a..71725704 100644 --- a/src/libsodium/Makefile.am +++ b/src/libsodium/Makefile.am @@ -122,7 +122,8 @@ libsodium_la_SOURCES = \ crypto_sign/ed25519/ref10/sign.c \ crypto_sign/ed25519/ref10/sqrtm1.h \ crypto_stream/crypto_stream.c \ - crypto_stream/chacha20/stream_chacha20_api.c \ + crypto_stream/chacha20/stream_chacha20.c \ + crypto_stream/chacha20/stream_chacha20.h \ crypto_stream/chacha20/ref/stream_chacha20_ref.h \ crypto_stream/chacha20/ref/stream_chacha20_ref.c \ crypto_stream/salsa20/stream_salsa20_api.c \ diff --git a/src/libsodium/crypto_stream/chacha20/ref/stream_chacha20_ref.c b/src/libsodium/crypto_stream/chacha20/ref/stream_chacha20_ref.c index 848fdf73..f6fab60c 100644 --- a/src/libsodium/crypto_stream/chacha20/ref/stream_chacha20_ref.c +++ b/src/libsodium/crypto_stream/chacha20/ref/stream_chacha20_ref.c @@ -9,9 +9,10 @@ #include #include +#include "utils.h" #include "crypto_stream_chacha20.h" #include "stream_chacha20_ref.h" -#include "utils.h" +#include "../stream_chacha20.h" struct chacha_ctx { uint32_t input[16]; @@ -238,9 +239,9 @@ chacha_encrypt_bytes(chacha_ctx *x, const u8 *m, u8 *c, unsigned long long bytes } } -int -crypto_stream_chacha20_ref(unsigned char *c, unsigned long long clen, - const unsigned char *n, const unsigned char *k) +static int +stream_ref(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) { struct chacha_ctx ctx; @@ -257,9 +258,9 @@ crypto_stream_chacha20_ref(unsigned char *c, unsigned long long clen, return 0; } -int -crypto_stream_chacha20_ietf_ref(unsigned char *c, unsigned long long clen, - const unsigned char *n, const unsigned char *k) +static int +stream_ietf_ref(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) { struct chacha_ctx ctx; @@ -279,11 +280,11 @@ crypto_stream_chacha20_ietf_ref(unsigned char *c, unsigned long long clen, return 0; } -int -crypto_stream_chacha20_ref_xor_ic(unsigned char *c, const unsigned char *m, - unsigned long long mlen, - const unsigned char *n, uint64_t ic, - const unsigned char *k) +static int +stream_ref_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint64_t ic, + const unsigned char *k) { struct chacha_ctx ctx; uint8_t ic_bytes[8]; @@ -307,11 +308,11 @@ crypto_stream_chacha20_ref_xor_ic(unsigned char *c, const unsigned char *m, return 0; } -int -crypto_stream_chacha20_ietf_ref_xor_ic(unsigned char *c, const unsigned char *m, - unsigned long long mlen, - const unsigned char *n, uint32_t ic, - const unsigned char *k) +static int +stream_ietf_ref_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint32_t ic, + const unsigned char *k) { struct chacha_ctx ctx; uint8_t ic_bytes[4]; @@ -328,3 +329,11 @@ crypto_stream_chacha20_ietf_ref_xor_ic(unsigned char *c, const unsigned char *m, return 0; } + +struct crypto_stream_chacha20_implementation +crypto_stream_chacha20_ref_implementation = { + SODIUM_C99(.stream =) stream_ref, + SODIUM_C99(.stream_ietf =) stream_ietf_ref, + SODIUM_C99(.stream_xor_ic =) stream_ref_xor_ic, + SODIUM_C99(.stream_ietf_xor_ic =) stream_ietf_ref_xor_ic +}; diff --git a/src/libsodium/crypto_stream/chacha20/ref/stream_chacha20_ref.h b/src/libsodium/crypto_stream/chacha20/ref/stream_chacha20_ref.h index d7290815..bfd6b500 100644 --- a/src/libsodium/crypto_stream/chacha20/ref/stream_chacha20_ref.h +++ b/src/libsodium/crypto_stream/chacha20/ref/stream_chacha20_ref.h @@ -1,6 +1,9 @@ #include "crypto_stream_chacha20.h" +extern struct crypto_stream_chacha20_implementation + crypto_stream_chacha20_ref_implementation; + int crypto_stream_chacha20_ref(unsigned char *c, unsigned long long clen, const unsigned char *n, const unsigned char *k); diff --git a/src/libsodium/crypto_stream/chacha20/stream_chacha20_api.c b/src/libsodium/crypto_stream/chacha20/stream_chacha20.c similarity index 75% rename from src/libsodium/crypto_stream/chacha20/stream_chacha20_api.c rename to src/libsodium/crypto_stream/chacha20/stream_chacha20.c index 2d0a0669..97da45f1 100644 --- a/src/libsodium/crypto_stream/chacha20/stream_chacha20_api.c +++ b/src/libsodium/crypto_stream/chacha20/stream_chacha20.c @@ -1,6 +1,11 @@ #include "crypto_stream_chacha20.h" +#include "stream_chacha20.h" +#include "runtime.h" #include "ref/stream_chacha20_ref.h" +static const crypto_stream_chacha20_implementation *implementation = + &crypto_stream_chacha20_ref_implementation; + size_t crypto_stream_chacha20_keybytes(void) { return crypto_stream_chacha20_KEYBYTES; @@ -20,14 +25,14 @@ int crypto_stream_chacha20(unsigned char *c, unsigned long long clen, const unsigned char *n, const unsigned char *k) { - return crypto_stream_chacha20_ref(c, clen, n, k); + return implementation->stream(c, clen, n, k); } int crypto_stream_chacha20_ietf(unsigned char *c, unsigned long long clen, const unsigned char *n, const unsigned char *k) { - return crypto_stream_chacha20_ietf_ref(c, clen, n, k); + return implementation->stream_ietf(c, clen, n, k); } int @@ -36,7 +41,7 @@ crypto_stream_chacha20_xor_ic(unsigned char *c, const unsigned char *m, const unsigned char *n, uint64_t ic, const unsigned char *k) { - return crypto_stream_chacha20_ref_xor_ic(c, m, mlen, n, ic, k); + return implementation->stream_xor_ic(c, m, mlen, n, ic, k); } int @@ -45,7 +50,7 @@ crypto_stream_chacha20_ietf_xor_ic(unsigned char *c, const unsigned char *m, const unsigned char *n, uint32_t ic, const unsigned char *k) { - return crypto_stream_chacha20_ietf_ref_xor_ic(c, m, mlen, n, ic, k); + return implementation->stream_ietf_xor_ic(c, m, mlen, n, ic, k); } int @@ -53,7 +58,7 @@ crypto_stream_chacha20_xor(unsigned char *c, const unsigned char *m, unsigned long long mlen, const unsigned char *n, const unsigned char *k) { - return crypto_stream_chacha20_ref_xor_ic(c, m, mlen, n, 0U, k); + return implementation->stream_xor_ic(c, m, mlen, n, 0U, k); } int @@ -61,5 +66,5 @@ crypto_stream_chacha20_ietf_xor(unsigned char *c, const unsigned char *m, unsigned long long mlen, const unsigned char *n, const unsigned char *k) { - return crypto_stream_chacha20_ietf_ref_xor_ic(c, m, mlen, n, 0U, k); + return implementation->stream_ietf_xor_ic(c, m, mlen, n, 0U, k); } diff --git a/src/libsodium/crypto_stream/chacha20/stream_chacha20.h b/src/libsodium/crypto_stream/chacha20/stream_chacha20.h new file mode 100644 index 00000000..d6b71c5e --- /dev/null +++ b/src/libsodium/crypto_stream/chacha20/stream_chacha20.h @@ -0,0 +1,22 @@ + +#ifndef stream_chacha20_H +#define stream_chacha20_H + +#include + +typedef struct crypto_stream_chacha20_implementation { + int (*stream)(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k); + int (*stream_ietf)(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k); + int (*stream_xor_ic)(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint64_t ic, + const unsigned char *k); + int (*stream_ietf_xor_ic)(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint32_t ic, + const unsigned char *k); +} crypto_stream_chacha20_implementation; + +#endif