From 0868222732a0f548f44801a196dfe71d33462e70 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 29 Feb 2016 12:04:34 +0100 Subject: [PATCH] Let core_salsa20* accept a default constant --- .../crypto_core/salsa20/ref/core_salsa20.c | 16 ++++++++++++---- .../crypto_core/salsa2012/ref/core_salsa2012.c | 16 ++++++++++++---- .../crypto_core/salsa208/ref/core_salsa208.c | 16 ++++++++++++---- 3 files changed, 36 insertions(+), 12 deletions(-) diff --git a/src/libsodium/crypto_core/salsa20/ref/core_salsa20.c b/src/libsodium/crypto_core/salsa20/ref/core_salsa20.c index 92541c21..d32bd5f9 100644 --- a/src/libsodium/crypto_core/salsa20/ref/core_salsa20.c +++ b/src/libsodium/crypto_core/salsa20/ref/core_salsa20.c @@ -11,6 +11,7 @@ Public domain. #include "../../sodium/common.h" #define ROUNDS 20 +#define U32C(v) (v##U) static uint32_t rotate(uint32_t u,int c) { @@ -28,22 +29,29 @@ int crypto_core_salsa20( uint32_t j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12, j13, j14, j15; int i; - j0 = x0 = LOAD32_LE(c + 0); + if (c == NULL) { + j0 = x0 = U32C(0x61707865); + j5 = x5 = U32C(0x3320646e); + j10 = x10 = U32C(0x79622d32); + j15 = x15 = U32C(0x6b206574); + } else { + j0 = x0 = LOAD32_LE(c + 0); + j5 = x5 = LOAD32_LE(c + 4); + j10 = x10 = LOAD32_LE(c + 8); + j15 = x15 = LOAD32_LE(c + 12); + } j1 = x1 = LOAD32_LE(k + 0); j2 = x2 = LOAD32_LE(k + 4); j3 = x3 = LOAD32_LE(k + 8); j4 = x4 = LOAD32_LE(k + 12); - j5 = x5 = LOAD32_LE(c + 4); j6 = x6 = LOAD32_LE(in + 0); j7 = x7 = LOAD32_LE(in + 4); j8 = x8 = LOAD32_LE(in + 8); j9 = x9 = LOAD32_LE(in + 12); - j10 = x10 = LOAD32_LE(c + 8); j11 = x11 = LOAD32_LE(k + 16); j12 = x12 = LOAD32_LE(k + 20); j13 = x13 = LOAD32_LE(k + 24); j14 = x14 = LOAD32_LE(k + 28); - j15 = x15 = LOAD32_LE(c + 12); for (i = ROUNDS;i > 0;i -= 2) { x4 ^= rotate( x0+x12, 7); diff --git a/src/libsodium/crypto_core/salsa2012/ref/core_salsa2012.c b/src/libsodium/crypto_core/salsa2012/ref/core_salsa2012.c index 1f7c57b5..147eca1f 100644 --- a/src/libsodium/crypto_core/salsa2012/ref/core_salsa2012.c +++ b/src/libsodium/crypto_core/salsa2012/ref/core_salsa2012.c @@ -11,6 +11,7 @@ Public domain. #include "../../sodium/common.h" #define ROUNDS 12 +#define U32C(v) (v##U) static uint32_t rotate(uint32_t u,int c) { @@ -28,22 +29,29 @@ int crypto_core_salsa2012( uint32_t j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12, j13, j14, j15; int i; - j0 = x0 = LOAD32_LE(c + 0); + if (c == NULL) { + j0 = x0 = U32C(0x61707865); + j5 = x5 = U32C(0x3320646e); + j10 = x10 = U32C(0x79622d32); + j15 = x15 = U32C(0x6b206574); + } else { + j0 = x0 = LOAD32_LE(c + 0); + j5 = x5 = LOAD32_LE(c + 4); + j10 = x10 = LOAD32_LE(c + 8); + j15 = x15 = LOAD32_LE(c + 12); + } j1 = x1 = LOAD32_LE(k + 0); j2 = x2 = LOAD32_LE(k + 4); j3 = x3 = LOAD32_LE(k + 8); j4 = x4 = LOAD32_LE(k + 12); - j5 = x5 = LOAD32_LE(c + 4); j6 = x6 = LOAD32_LE(in + 0); j7 = x7 = LOAD32_LE(in + 4); j8 = x8 = LOAD32_LE(in + 8); j9 = x9 = LOAD32_LE(in + 12); - j10 = x10 = LOAD32_LE(c + 8); j11 = x11 = LOAD32_LE(k + 16); j12 = x12 = LOAD32_LE(k + 20); j13 = x13 = LOAD32_LE(k + 24); j14 = x14 = LOAD32_LE(k + 28); - j15 = x15 = LOAD32_LE(c + 12); for (i = ROUNDS;i > 0;i -= 2) { x4 ^= rotate( x0+x12, 7); diff --git a/src/libsodium/crypto_core/salsa208/ref/core_salsa208.c b/src/libsodium/crypto_core/salsa208/ref/core_salsa208.c index 1aa409aa..b1c2eaf8 100644 --- a/src/libsodium/crypto_core/salsa208/ref/core_salsa208.c +++ b/src/libsodium/crypto_core/salsa208/ref/core_salsa208.c @@ -11,6 +11,7 @@ Public domain. #include "../../sodium/common.h" #define ROUNDS 8 +#define U32C(v) (v##U) static uint32_t rotate(uint32_t u,int c) { @@ -28,22 +29,29 @@ int crypto_core_salsa208( uint32_t j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12, j13, j14, j15; int i; - j0 = x0 = LOAD32_LE(c + 0); + if (c == NULL) { + j0 = x0 = U32C(0x61707865); + j5 = x5 = U32C(0x3320646e); + j10 = x10 = U32C(0x79622d32); + j15 = x15 = U32C(0x6b206574); + } else { + j0 = x0 = LOAD32_LE(c + 0); + j5 = x5 = LOAD32_LE(c + 4); + j10 = x10 = LOAD32_LE(c + 8); + j15 = x15 = LOAD32_LE(c + 12); + } j1 = x1 = LOAD32_LE(k + 0); j2 = x2 = LOAD32_LE(k + 4); j3 = x3 = LOAD32_LE(k + 8); j4 = x4 = LOAD32_LE(k + 12); - j5 = x5 = LOAD32_LE(c + 4); j6 = x6 = LOAD32_LE(in + 0); j7 = x7 = LOAD32_LE(in + 4); j8 = x8 = LOAD32_LE(in + 8); j9 = x9 = LOAD32_LE(in + 12); - j10 = x10 = LOAD32_LE(c + 8); j11 = x11 = LOAD32_LE(k + 16); j12 = x12 = LOAD32_LE(k + 20); j13 = x13 = LOAD32_LE(k + 24); j14 = x14 = LOAD32_LE(k + 28); - j15 = x15 = LOAD32_LE(c + 12); for (i = ROUNDS;i > 0;i -= 2) { x4 ^= rotate( x0+x12, 7);