mirror of
https://github.com/jedisct1/libsodium.git
synced 2024-12-19 01:55:02 -07:00
Reintroduce shorthash, this time with the key...
This commit is contained in:
parent
e5e2150919
commit
6774b47cd4
1
.gitignore
vendored
1
.gitignore
vendored
@ -71,6 +71,7 @@ test/default/secretbox
|
||||
test/default/secretbox2
|
||||
test/default/secretbox7
|
||||
test/default/secretbox8
|
||||
test/default/shorthash
|
||||
test/default/stream
|
||||
test/default/stream2
|
||||
test/default/stream3
|
||||
|
@ -22,6 +22,8 @@ libsodium_la_SOURCES = \
|
||||
crypto_hash/sha256/ref/hash_sha256.c \
|
||||
crypto_hash/sha512/ref/crypto_hash.h \
|
||||
crypto_hash/sha512/ref/hash_sha512.c \
|
||||
crypto_shorthash/siphash24/ref/crypto_shorthash.h \
|
||||
crypto_shorthash/siphash24/ref/shorthash_siphash24.c \
|
||||
crypto_verify/16/ref/crypto_verify.h \
|
||||
crypto_verify/16/ref/verify_16.c \
|
||||
crypto_verify/32/ref/crypto_verify.h \
|
||||
|
2
src/libsodium/crypto_shorthash/siphash24/ref/api.h
Normal file
2
src/libsodium/crypto_shorthash/siphash24/ref/api.h
Normal file
@ -0,0 +1,2 @@
|
||||
#define CRYPTO_BYTES 8
|
||||
#define CRYPTO_KEYBYTES 16
|
@ -0,0 +1,12 @@
|
||||
#ifndef crypto_shorthash_H
|
||||
#define crypto_shorthash_H
|
||||
|
||||
#include "crypto_shorthash_siphash24.h"
|
||||
|
||||
#define crypto_shorthash crypto_shorthash_siphash24
|
||||
#define crypto_shorthash_BYTES crypto_shorthash_siphash24_BYTES
|
||||
#define crypto_shorthash_PRIMITIVE "siphash24"
|
||||
#define crypto_shorthash_IMPLEMENTATION crypto_shorthash_siphash24_IMPLEMENTATION
|
||||
#define crypto_shorthash_VERSION crypto_shorthash_siphash24_VERSION
|
||||
|
||||
#endif
|
@ -0,0 +1,91 @@
|
||||
#include "crypto_shorthash.h"
|
||||
#include "crypto_uint64.h"
|
||||
#include "crypto_uint32.h"
|
||||
#include "crypto_uint8.h"
|
||||
|
||||
typedef crypto_uint64 u64;
|
||||
typedef crypto_uint32 u32;
|
||||
typedef crypto_uint8 u8;
|
||||
|
||||
#define ROTL(x,b) (u64)( ((x) << (b)) | ( (x) >> (64 - (b))) )
|
||||
|
||||
#define U32TO8_LE(p, v) \
|
||||
(p)[0] = (u8)((v) ); (p)[1] = (u8)((v) >> 8); \
|
||||
(p)[2] = (u8)((v) >> 16); (p)[3] = (u8)((v) >> 24);
|
||||
|
||||
#define U64TO8_LE(p, v) \
|
||||
U32TO8_LE((p), (u32)((v) )); \
|
||||
U32TO8_LE((p) + 4, (u32)((v) >> 32));
|
||||
|
||||
#define U8TO64_LE(p) \
|
||||
(((u64)((p)[0]) ) | \
|
||||
((u64)((p)[1]) << 8) | \
|
||||
((u64)((p)[2]) << 16) | \
|
||||
((u64)((p)[3]) << 24) | \
|
||||
((u64)((p)[4]) << 32) | \
|
||||
((u64)((p)[5]) << 40) | \
|
||||
((u64)((p)[6]) << 48) | \
|
||||
((u64)((p)[7]) << 56))
|
||||
|
||||
#define SIPROUND \
|
||||
do { \
|
||||
v0 += v1; v1=ROTL(v1,13); v1 ^= v0; v0=ROTL(v0,32); \
|
||||
v2 += v3; v3=ROTL(v3,16); v3 ^= v2; \
|
||||
v0 += v3; v3=ROTL(v3,21); v3 ^= v0; \
|
||||
v2 += v1; v1=ROTL(v1,17); v1 ^= v2; v2=ROTL(v2,32); \
|
||||
} while(0)
|
||||
|
||||
int crypto_shorthash(unsigned char *out,const unsigned char *in,unsigned long long inlen,const unsigned char *k)
|
||||
{
|
||||
/* "somepseudorandomlygeneratedbytes" */
|
||||
u64 v0 = 0x736f6d6570736575ULL;
|
||||
u64 v1 = 0x646f72616e646f6dULL;
|
||||
u64 v2 = 0x6c7967656e657261ULL;
|
||||
u64 v3 = 0x7465646279746573ULL;
|
||||
u64 b;
|
||||
u64 k0 = U8TO64_LE( k );
|
||||
u64 k1 = U8TO64_LE( k + 8 );
|
||||
u64 m;
|
||||
const u8 *end = in + inlen - ( inlen % sizeof( u64 ) );
|
||||
const int left = inlen & 7;
|
||||
b = ( ( u64 )inlen ) << 56;
|
||||
v3 ^= k1;
|
||||
v2 ^= k0;
|
||||
v1 ^= k1;
|
||||
v0 ^= k0;
|
||||
|
||||
for ( ; in != end; in += 8 )
|
||||
{
|
||||
m = U8TO64_LE( in );
|
||||
v3 ^= m;
|
||||
SIPROUND;
|
||||
SIPROUND;
|
||||
v0 ^= m;
|
||||
}
|
||||
|
||||
switch( left )
|
||||
{
|
||||
case 7: b |= ( ( u64 )in[ 6] ) << 48;
|
||||
case 6: b |= ( ( u64 )in[ 5] ) << 40;
|
||||
case 5: b |= ( ( u64 )in[ 4] ) << 32;
|
||||
case 4: b |= ( ( u64 )in[ 3] ) << 24;
|
||||
case 3: b |= ( ( u64 )in[ 2] ) << 16;
|
||||
case 2: b |= ( ( u64 )in[ 1] ) << 8;
|
||||
case 1: b |= ( ( u64 )in[ 0] ); break;
|
||||
case 0: break;
|
||||
}
|
||||
|
||||
v3 ^= b;
|
||||
SIPROUND;
|
||||
SIPROUND;
|
||||
v0 ^= b;
|
||||
v2 ^= 0xff;
|
||||
SIPROUND;
|
||||
SIPROUND;
|
||||
SIPROUND;
|
||||
SIPROUND;
|
||||
b = v0 ^ v1 ^ v2 ^ v3;
|
||||
U64TO8_LE( out, b );
|
||||
return 0;
|
||||
}
|
||||
|
@ -20,6 +20,8 @@ SODIUM_EXPORT = \
|
||||
sodium/crypto_scalarmult_curve25519.h \
|
||||
sodium/crypto_secretbox.h \
|
||||
sodium/crypto_secretbox_xsalsa20poly1305.h \
|
||||
sodium/crypto_shorthash.h \
|
||||
sodium/crypto_shorthash_siphash24.h \
|
||||
sodium/crypto_sign.h \
|
||||
sodium/crypto_sign_ed25519.h \
|
||||
sodium/crypto_sign_edwards25519sha512batch.h \
|
||||
|
13
src/libsodium/include/sodium/crypto_shorthash.h
Normal file
13
src/libsodium/include/sodium/crypto_shorthash.h
Normal file
@ -0,0 +1,13 @@
|
||||
#ifndef crypto_shorthash_H
|
||||
#define crypto_shorthash_H
|
||||
|
||||
#include "crypto_shorthash_siphash24.h"
|
||||
|
||||
#define crypto_shorthash crypto_shorthash_siphash24
|
||||
#define crypto_shorthash_BYTES crypto_shorthash_siphash24_BYTES
|
||||
#define crypto_shorthash_KEYBYTES crypto_shorthash_siphash24_KEYBYTES
|
||||
#define crypto_shorthash_PRIMITIVE "siphash24"
|
||||
#define crypto_shorthash_IMPLEMENTATION crypto_shorthash_siphash24_IMPLEMENTATION
|
||||
#define crypto_shorthash_VERSION crypto_shorthash_siphash24_VERSION
|
||||
|
||||
#endif
|
24
src/libsodium/include/sodium/crypto_shorthash_siphash24.h
Normal file
24
src/libsodium/include/sodium/crypto_shorthash_siphash24.h
Normal file
@ -0,0 +1,24 @@
|
||||
#ifndef crypto_shorthash_siphash24_H
|
||||
#define crypto_shorthash_siphash24_H
|
||||
|
||||
#define crypto_shorthash_siphash24_ref_BYTES 8
|
||||
#define crypto_shorthash_siphash24_ref_KEYBYTES 16
|
||||
#ifdef __cplusplus
|
||||
#include <string>
|
||||
extern "C" {
|
||||
#endif
|
||||
extern int crypto_shorthash_siphash24_ref(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#define crypto_shorthash_siphash24 crypto_shorthash_siphash24_ref
|
||||
#define crypto_shorthash_siphash24_BYTES crypto_shorthash_siphash24_ref_BYTES
|
||||
#define crypto_shorthash_siphash24_KEYBYTES crypto_shorthash_siphash24_ref_KEYBYTES
|
||||
#define crypto_shorthash_siphash24_IMPLEMENTATION
|
||||
#ifndef crypto_shorthash_siphash24_ref_VERSION
|
||||
#define crypto_shorthash_siphash24_ref_VERSION "-"
|
||||
#endif
|
||||
#define crypto_shorthash_siphash24_VERSION crypto_shorthash_siphash24_ref_VERSION
|
||||
|
||||
#endif
|
177
test/Makefile.am
177
test/Makefile.am
@ -3,180 +3,3 @@ SUBDIRS = \
|
||||
|
||||
EXTRA_DIST = \
|
||||
quirks/windows/windows-quirks.h
|
||||
cmptest.h \
|
||||
auth.exp \
|
||||
auth2.exp \
|
||||
auth3.exp \
|
||||
auth5.exp \
|
||||
box.exp \
|
||||
box2.exp \
|
||||
box7.exp \
|
||||
box8.exp \
|
||||
core1.exp \
|
||||
core2.exp \
|
||||
core3.exp \
|
||||
core4.exp \
|
||||
core5.exp \
|
||||
core6.exp \
|
||||
hash.exp \
|
||||
hash2.exp \
|
||||
hash3.exp \
|
||||
onetimeauth.exp \
|
||||
onetimeauth2.exp \
|
||||
onetimeauth7.exp \
|
||||
scalarmult.exp \
|
||||
scalarmult2.exp \
|
||||
scalarmult5.exp \
|
||||
scalarmult6.exp \
|
||||
secretbox.exp \
|
||||
secretbox2.exp \
|
||||
secretbox7.exp \
|
||||
secretbox8.exp \
|
||||
stream.exp \
|
||||
stream2.exp \
|
||||
stream3.exp \
|
||||
stream4.exp
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-I$(top_srcdir)/src/libsodium/include \
|
||||
-I$(top_srcdir)/src/libsodium/include/sodium
|
||||
|
||||
TESTS_TARGETS = \
|
||||
auth \
|
||||
auth2 \
|
||||
auth3 \
|
||||
auth5 \
|
||||
box \
|
||||
box2 \
|
||||
box7 \
|
||||
box8 \
|
||||
core1 \
|
||||
core2 \
|
||||
core3 \
|
||||
core4 \
|
||||
core5 \
|
||||
core6 \
|
||||
hash \
|
||||
hash3 \
|
||||
onetimeauth \
|
||||
onetimeauth2 \
|
||||
onetimeauth7 \
|
||||
randombytes \
|
||||
scalarmult \
|
||||
scalarmult2 \
|
||||
scalarmult5 \
|
||||
scalarmult6 \
|
||||
secretbox \
|
||||
secretbox2 \
|
||||
secretbox7 \
|
||||
secretbox8 \
|
||||
stream \
|
||||
stream2 \
|
||||
stream3 \
|
||||
stream4
|
||||
|
||||
check_PROGRAMS = $(TESTS_TARGETS)
|
||||
|
||||
TESTS = $(TESTS_TARGETS)
|
||||
|
||||
TESTS_LDADD = \
|
||||
${top_builddir}/src/libsodium/libsodium.la
|
||||
|
||||
auth_SOURCE = cmptest.h auth.c
|
||||
auth_LDADD = $(TESTS_LDADD)
|
||||
|
||||
auth2_SOURCE = cmptest.h auth2.c
|
||||
auth2_LDADD = $(TESTS_LDADD)
|
||||
|
||||
auth3_SOURCE = cmptest.h auth3.c
|
||||
auth3_LDADD = $(TESTS_LDADD)
|
||||
|
||||
auth5_SOURCE = cmptest.h auth5.c windows/windows-quirks.h
|
||||
auth5_LDADD = $(TESTS_LDADD)
|
||||
|
||||
box_SOURCE = cmptest.h box.c
|
||||
box_LDADD = $(TESTS_LDADD)
|
||||
|
||||
box2_SOURCE = cmptest.h box2.c
|
||||
box2_LDADD = $(TESTS_LDADD)
|
||||
|
||||
box7_SOURCE = cmptest.h box7.c
|
||||
box7_LDADD = $(TESTS_LDADD)
|
||||
|
||||
box8_SOURCE = cmptest.h box8.c
|
||||
box8_LDADD = $(TESTS_LDADD)
|
||||
|
||||
core1_SOURCE = cmptest.h core1.c
|
||||
core1_LDADD = $(TESTS_LDADD)
|
||||
|
||||
core2_SOURCE = cmptest.h core2.c
|
||||
core2_LDADD = $(TESTS_LDADD)
|
||||
|
||||
core3_SOURCE = cmptest.h core3.c
|
||||
core3_LDADD = $(TESTS_LDADD)
|
||||
|
||||
core4_SOURCE = cmptest.h core4.c
|
||||
core4_LDADD = $(TESTS_LDADD)
|
||||
|
||||
core5_SOURCE = cmptest.h core5.c
|
||||
core5_LDADD = $(TESTS_LDADD)
|
||||
|
||||
core6_SOURCE = cmptest.h core6.c
|
||||
core6_LDADD = $(TESTS_LDADD)
|
||||
|
||||
hash_SOURCE = cmptest.h hash.c
|
||||
hash_LDADD = $(TESTS_LDADD)
|
||||
|
||||
hash3_SOURCE = cmptest.h hash3.c
|
||||
hash3_LDADD = $(TESTS_LDADD)
|
||||
|
||||
onetimeauth_SOURCE = cmptest.h onetimeauth.c
|
||||
onetimeauth_LDADD = $(TESTS_LDADD)
|
||||
|
||||
onetimeauth2_SOURCE = cmptest.h onetimeauth2.c
|
||||
onetimeauth2_LDADD = $(TESTS_LDADD)
|
||||
|
||||
onetimeauth7_SOURCE = cmptest.h onetimeauth7.c
|
||||
onetimeauth7_LDADD = $(TESTS_LDADD)
|
||||
|
||||
randombytes_SOURCE = randombytes.c
|
||||
randombytes_LDADD = $(TESTS_LDADD)
|
||||
|
||||
scalarmult_SOURCE = cmptest.h scalarmult.c
|
||||
scalarmult_LDADD = $(TESTS_LDADD)
|
||||
|
||||
scalarmult2_SOURCE = cmptest.h scalarmult2.c
|
||||
scalarmult2_LDADD = $(TESTS_LDADD)
|
||||
|
||||
scalarmult5_SOURCE = cmptest.h scalarmult5.c
|
||||
scalarmult5_LDADD = $(TESTS_LDADD)
|
||||
|
||||
scalarmult6_SOURCE = cmptest.h scalarmult6.c
|
||||
scalarmult6_LDADD = $(TESTS_LDADD)
|
||||
|
||||
secretbox_SOURCE = cmptest.h secretbox.c
|
||||
secretbox_LDADD = $(TESTS_LDADD)
|
||||
|
||||
secretbox2_SOURCE = cmptest.h secretbox2.c
|
||||
secretbox2_LDADD = $(TESTS_LDADD)
|
||||
|
||||
secretbox7_SOURCE = cmptest.h secretbox7.c
|
||||
secretbox7_LDADD = $(TESTS_LDADD)
|
||||
|
||||
secretbox8_SOURCE = cmptest.h secretbox8.c
|
||||
secretbox8_LDADD = $(TESTS_LDADD)
|
||||
|
||||
stream_SOURCE = cmptest.h stream.c
|
||||
stream_LDADD = $(TESTS_LDADD)
|
||||
|
||||
stream2_SOURCE = cmptest.h stream2.c
|
||||
stream2_LDADD = $(TESTS_LDADD)
|
||||
|
||||
stream3_SOURCE = cmptest.h stream3.c
|
||||
stream3_LDADD = $(TESTS_LDADD)
|
||||
|
||||
stream4_SOURCE = cmptest.h stream4.c
|
||||
stream4_LDADD = $(TESTS_LDADD)
|
||||
|
||||
verify: check
|
||||
|
||||
|
23
test/default/shorthash.c
Normal file
23
test/default/shorthash.c
Normal file
@ -0,0 +1,23 @@
|
||||
#include <stdio.h>
|
||||
#include "crypto_uint8.h"
|
||||
#include "crypto_shorthash.h"
|
||||
|
||||
#define TEST_NAME "shorthash"
|
||||
#include "cmptest.h"
|
||||
|
||||
int main(void)
|
||||
{
|
||||
#define MAXLEN 64
|
||||
crypto_uint8 in[MAXLEN], out[crypto_shorthash_BYTES], k[crypto_shorthash_KEYBYTES];
|
||||
int i,j;
|
||||
|
||||
for( i = 0; i < crypto_shorthash_KEYBYTES; ++i ) k[i] = i;
|
||||
|
||||
for(i=0;i<MAXLEN;++i) {
|
||||
in[i]=i;
|
||||
crypto_shorthash( out, in, i, k );
|
||||
for (j = 0;j < crypto_shorthash_BYTES;++j) printf("%02x",(unsigned int) out[j]);
|
||||
printf("\n");
|
||||
}
|
||||
return 0;
|
||||
}
|
64
test/default/shorthash.exp
Normal file
64
test/default/shorthash.exp
Normal file
@ -0,0 +1,64 @@
|
||||
310e0edd47db6f72
|
||||
fd67dc93c539f874
|
||||
5a4fa9d909806c0d
|
||||
2d7efbd796666785
|
||||
b7877127e09427cf
|
||||
8da699cd64557618
|
||||
cee3fe586e46c9cb
|
||||
37d1018bf50002ab
|
||||
6224939a79f5f593
|
||||
b0e4a90bdf82009e
|
||||
f3b9dd94c5bb5d7a
|
||||
a7ad6b22462fb3f4
|
||||
fbe50e86bc8f1e75
|
||||
903d84c02756ea14
|
||||
eef27a8e90ca23f7
|
||||
e545be4961ca29a1
|
||||
db9bc2577fcc2a3f
|
||||
9447be2cf5e99a69
|
||||
9cd38d96f0b3c14b
|
||||
bd6179a71dc96dbb
|
||||
98eea21af25cd6be
|
||||
c7673b2eb0cbf2d0
|
||||
883ea3e395675393
|
||||
c8ce5ccd8c030ca8
|
||||
94af49f6c650adb8
|
||||
eab8858ade92e1bc
|
||||
f315bb5bb835d817
|
||||
adcf6b0763612e2f
|
||||
a5c91da7acaa4dde
|
||||
716595876650a2a6
|
||||
28ef495c53a387ad
|
||||
42c341d8fa92d832
|
||||
ce7cf2722f512771
|
||||
e37859f94623f3a7
|
||||
381205bb1ab0e012
|
||||
ae97a10fd434e015
|
||||
b4a31508beff4d31
|
||||
81396229f0907902
|
||||
4d0cf49ee5d4dcca
|
||||
5c73336a76d8bf9a
|
||||
d0a704536ba93e0e
|
||||
925958fcd6420cad
|
||||
a915c29bc8067318
|
||||
952b79f3bc0aa6d4
|
||||
f21df2e41d4535f9
|
||||
87577519048f53a9
|
||||
10a56cf5dfcd9adb
|
||||
eb75095ccd986cd0
|
||||
51a9cb9ecba312e6
|
||||
96afadfc2ce666c7
|
||||
72fe52975a4364ee
|
||||
5a1645b276d592a1
|
||||
b274cb8ebf87870a
|
||||
6f9bb4203de7b381
|
||||
eaecb2a30b22a87f
|
||||
9924a43cc1315724
|
||||
bd838d3aafbf8db7
|
||||
0b1a2a3265d51aea
|
||||
135079a3231ce660
|
||||
932b2846e4d70666
|
||||
e1915f5cb1eca46c
|
||||
f325965ca16d629f
|
||||
575ff28e60381be5
|
||||
724506eb4c328a95
|
Loading…
Reference in New Issue
Block a user