-
Notifications
You must be signed in to change notification settings - Fork 45
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
moved python modules in subdirectory, added scrypt (ltc) and jane (cach)
- Loading branch information
Showing
32 changed files
with
4,893 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
call "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" | ||
SET DISTUTILS_USE_SDK=1 | ||
SET MSSdk=1 | ||
python setup.py install | ||
pause |
132 changes: 132 additions & 0 deletions
132
py_modules/cach_scryptjane/scrypt-jane/code/scrypt-jane-chacha.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,132 @@ | ||
#define SCRYPT_MIX_BASE "ChaCha20/8" | ||
|
||
typedef uint32_t scrypt_mix_word_t; | ||
|
||
#define SCRYPT_WORDTO8_LE U32TO8_LE | ||
#define SCRYPT_WORD_ENDIAN_SWAP U32_SWAP | ||
|
||
#define SCRYPT_BLOCK_BYTES 64 | ||
#define SCRYPT_BLOCK_WORDS (SCRYPT_BLOCK_BYTES / sizeof(scrypt_mix_word_t)) | ||
|
||
/* must have these here in case block bytes is ever != 64 */ | ||
#include "scrypt-jane-romix-basic.h" | ||
|
||
#include "scrypt-jane-mix_chacha-avx.h" | ||
#include "scrypt-jane-mix_chacha-ssse3.h" | ||
#include "scrypt-jane-mix_chacha-sse2.h" | ||
#include "scrypt-jane-mix_chacha.h" | ||
|
||
#if defined(SCRYPT_CHACHA_AVX) | ||
#define SCRYPT_CHUNKMIX_FN scrypt_ChunkMix_avx | ||
#define SCRYPT_ROMIX_FN scrypt_ROMix_avx | ||
#define SCRYPT_MIX_FN chacha_core_avx | ||
#define SCRYPT_ROMIX_TANGLE_FN scrypt_romix_nop | ||
#define SCRYPT_ROMIX_UNTANGLE_FN scrypt_romix_nop | ||
#include "scrypt-jane-romix-template.h" | ||
#endif | ||
|
||
#if defined(SCRYPT_CHACHA_SSSE3) | ||
#define SCRYPT_CHUNKMIX_FN scrypt_ChunkMix_ssse3 | ||
#define SCRYPT_ROMIX_FN scrypt_ROMix_ssse3 | ||
#define SCRYPT_MIX_FN chacha_core_ssse3 | ||
#define SCRYPT_ROMIX_TANGLE_FN scrypt_romix_nop | ||
#define SCRYPT_ROMIX_UNTANGLE_FN scrypt_romix_nop | ||
#include "scrypt-jane-romix-template.h" | ||
#endif | ||
|
||
#if defined(SCRYPT_CHACHA_SSE2) | ||
#define SCRYPT_CHUNKMIX_FN scrypt_ChunkMix_sse2 | ||
#define SCRYPT_ROMIX_FN scrypt_ROMix_sse2 | ||
#define SCRYPT_MIX_FN chacha_core_sse2 | ||
#define SCRYPT_ROMIX_TANGLE_FN scrypt_romix_nop | ||
#define SCRYPT_ROMIX_UNTANGLE_FN scrypt_romix_nop | ||
#include "scrypt-jane-romix-template.h" | ||
#endif | ||
|
||
/* cpu agnostic */ | ||
#define SCRYPT_ROMIX_FN scrypt_ROMix_basic | ||
#define SCRYPT_MIX_FN chacha_core_basic | ||
#define SCRYPT_ROMIX_TANGLE_FN scrypt_romix_convert_endian | ||
#define SCRYPT_ROMIX_UNTANGLE_FN scrypt_romix_convert_endian | ||
#include "scrypt-jane-romix-template.h" | ||
|
||
#if !defined(SCRYPT_CHOOSE_COMPILETIME) | ||
static scrypt_ROMixfn | ||
scrypt_getROMix() { | ||
size_t cpuflags = detect_cpu(); | ||
|
||
#if defined(SCRYPT_CHACHA_AVX) | ||
if (cpuflags & cpu_avx) | ||
return scrypt_ROMix_avx; | ||
else | ||
#endif | ||
|
||
#if defined(SCRYPT_CHACHA_SSSE3) | ||
if (cpuflags & cpu_ssse3) | ||
return scrypt_ROMix_ssse3; | ||
else | ||
#endif | ||
|
||
#if defined(SCRYPT_CHACHA_SSE2) | ||
if (cpuflags & cpu_sse2) | ||
return scrypt_ROMix_sse2; | ||
else | ||
#endif | ||
|
||
return scrypt_ROMix_basic; | ||
} | ||
#endif | ||
|
||
|
||
#if defined(SCRYPT_TEST_SPEED) | ||
static size_t | ||
available_implementations() { | ||
size_t flags = 0; | ||
|
||
#if defined(SCRYPT_CHACHA_AVX) | ||
flags |= cpu_avx; | ||
#endif | ||
|
||
#if defined(SCRYPT_CHACHA_SSSE3) | ||
flags |= cpu_ssse3; | ||
#endif | ||
|
||
#if defined(SCRYPT_CHACHA_SSE2) | ||
flags |= cpu_sse2; | ||
#endif | ||
|
||
return flags; | ||
} | ||
#endif | ||
|
||
static int | ||
scrypt_test_mix() { | ||
static const uint8_t expected[16] = { | ||
0x48,0x2b,0x2d,0xb8,0xa1,0x33,0x22,0x73,0xcd,0x16,0xc4,0xb4,0xb0,0x7f,0xb1,0x8a, | ||
}; | ||
|
||
int ret = 1; | ||
size_t cpuflags = detect_cpu(); | ||
|
||
#if defined(SCRYPT_CHACHA_AVX) | ||
if (cpuflags & cpu_avx) | ||
ret &= scrypt_test_mix_instance(scrypt_ChunkMix_avx, scrypt_romix_nop, scrypt_romix_nop, expected); | ||
#endif | ||
|
||
#if defined(SCRYPT_CHACHA_SSSE3) | ||
if (cpuflags & cpu_ssse3) | ||
ret &= scrypt_test_mix_instance(scrypt_ChunkMix_ssse3, scrypt_romix_nop, scrypt_romix_nop, expected); | ||
#endif | ||
|
||
#if defined(SCRYPT_CHACHA_SSE2) | ||
if (cpuflags & cpu_sse2) | ||
ret &= scrypt_test_mix_instance(scrypt_ChunkMix_sse2, scrypt_romix_nop, scrypt_romix_nop, expected); | ||
#endif | ||
|
||
#if defined(SCRYPT_CHACHA_BASIC) | ||
ret &= scrypt_test_mix_instance(scrypt_ChunkMix_basic, scrypt_romix_convert_endian, scrypt_romix_convert_endian, expected); | ||
#endif | ||
|
||
return ret; | ||
} | ||
|
48 changes: 48 additions & 0 deletions
48
py_modules/cach_scryptjane/scrypt-jane/code/scrypt-jane-hash.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
#if defined(SCRYPT_BLAKE512) | ||
#include "scrypt-jane-hash_blake512.h" | ||
#elif defined(SCRYPT_BLAKE256) | ||
#include "scrypt-jane-hash_blake256.h" | ||
#elif defined(SCRYPT_SHA512) | ||
#include "scrypt-jane-hash_sha512.h" | ||
#elif defined(SCRYPT_SHA256) | ||
#include "scrypt-jane-hash_sha256.h" | ||
#elif defined(SCRYPT_SKEIN512) | ||
#include "scrypt-jane-hash_skein512.h" | ||
#elif defined(SCRYPT_KECCAK512) || defined(SCRYPT_KECCAK256) | ||
#include "scrypt-jane-hash_keccak.h" | ||
#else | ||
#define SCRYPT_HASH "ERROR" | ||
#define SCRYPT_HASH_BLOCK_SIZE 64 | ||
#define SCRYPT_HASH_DIGEST_SIZE 64 | ||
typedef struct scrypt_hash_state_t { size_t dummy; } scrypt_hash_state; | ||
typedef uint8_t scrypt_hash_digest[SCRYPT_HASH_DIGEST_SIZE]; | ||
static void scrypt_hash_init(scrypt_hash_state *S) {} | ||
static void scrypt_hash_update(scrypt_hash_state *S, const uint8_t *in, size_t inlen) {} | ||
static void scrypt_hash_finish(scrypt_hash_state *S, uint8_t *hash) {} | ||
static const uint8_t scrypt_test_hash_expected[SCRYPT_HASH_DIGEST_SIZE] = {0}; | ||
#error must define a hash function! | ||
#endif | ||
|
||
#include "scrypt-jane-pbkdf2.h" | ||
|
||
#define SCRYPT_TEST_HASH_LEN 257 /* (2 * largest block size) + 1 */ | ||
|
||
static int | ||
scrypt_test_hash() { | ||
scrypt_hash_state st; | ||
scrypt_hash_digest hash, final; | ||
uint8_t msg[SCRYPT_TEST_HASH_LEN]; | ||
size_t i; | ||
|
||
for (i = 0; i < SCRYPT_TEST_HASH_LEN; i++) | ||
msg[i] = (uint8_t)i; | ||
|
||
scrypt_hash_init(&st); | ||
for (i = 0; i < SCRYPT_TEST_HASH_LEN + 1; i++) { | ||
scrypt_hash(hash, msg, i); | ||
scrypt_hash_update(&st, hash, sizeof(hash)); | ||
} | ||
scrypt_hash_finish(&st, final); | ||
return scrypt_verify(final, scrypt_test_hash_expected, SCRYPT_HASH_DIGEST_SIZE); | ||
} | ||
|
168 changes: 168 additions & 0 deletions
168
py_modules/cach_scryptjane/scrypt-jane/code/scrypt-jane-hash_keccak.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,168 @@ | ||
#if defined(SCRYPT_KECCAK256) | ||
#define SCRYPT_HASH "Keccak-256" | ||
#define SCRYPT_HASH_DIGEST_SIZE 32 | ||
#else | ||
#define SCRYPT_HASH "Keccak-512" | ||
#define SCRYPT_HASH_DIGEST_SIZE 64 | ||
#endif | ||
#define SCRYPT_KECCAK_F 1600 | ||
#define SCRYPT_KECCAK_C (SCRYPT_HASH_DIGEST_SIZE * 8 * 2) /* 256=512, 512=1024 */ | ||
#define SCRYPT_KECCAK_R (SCRYPT_KECCAK_F - SCRYPT_KECCAK_C) /* 256=1088, 512=576 */ | ||
#define SCRYPT_HASH_BLOCK_SIZE (SCRYPT_KECCAK_R / 8) | ||
|
||
typedef uint8_t scrypt_hash_digest[SCRYPT_HASH_DIGEST_SIZE]; | ||
|
||
typedef struct scrypt_hash_state_t { | ||
uint64_t state[SCRYPT_KECCAK_F / 64]; | ||
uint32_t leftover; | ||
uint8_t buffer[SCRYPT_HASH_BLOCK_SIZE]; | ||
} scrypt_hash_state; | ||
|
||
static const uint64_t keccak_round_constants[24] = { | ||
0x0000000000000001ull, 0x0000000000008082ull, | ||
0x800000000000808aull, 0x8000000080008000ull, | ||
0x000000000000808bull, 0x0000000080000001ull, | ||
0x8000000080008081ull, 0x8000000000008009ull, | ||
0x000000000000008aull, 0x0000000000000088ull, | ||
0x0000000080008009ull, 0x000000008000000aull, | ||
0x000000008000808bull, 0x800000000000008bull, | ||
0x8000000000008089ull, 0x8000000000008003ull, | ||
0x8000000000008002ull, 0x8000000000000080ull, | ||
0x000000000000800aull, 0x800000008000000aull, | ||
0x8000000080008081ull, 0x8000000000008080ull, | ||
0x0000000080000001ull, 0x8000000080008008ull | ||
}; | ||
|
||
static void | ||
keccak_block(scrypt_hash_state *S, const uint8_t *in) { | ||
size_t i; | ||
uint64_t *s = S->state, t[5], u[5], v, w; | ||
|
||
/* absorb input */ | ||
for (i = 0; i < SCRYPT_HASH_BLOCK_SIZE / 8; i++, in += 8) | ||
s[i] ^= U8TO64_LE(in); | ||
|
||
for (i = 0; i < 24; i++) { | ||
/* theta: c = a[0,i] ^ a[1,i] ^ .. a[4,i] */ | ||
t[0] = s[0] ^ s[5] ^ s[10] ^ s[15] ^ s[20]; | ||
t[1] = s[1] ^ s[6] ^ s[11] ^ s[16] ^ s[21]; | ||
t[2] = s[2] ^ s[7] ^ s[12] ^ s[17] ^ s[22]; | ||
t[3] = s[3] ^ s[8] ^ s[13] ^ s[18] ^ s[23]; | ||
t[4] = s[4] ^ s[9] ^ s[14] ^ s[19] ^ s[24]; | ||
|
||
/* theta: d[i] = c[i+4] ^ rotl(c[i+1],1) */ | ||
u[0] = t[4] ^ ROTL64(t[1], 1); | ||
u[1] = t[0] ^ ROTL64(t[2], 1); | ||
u[2] = t[1] ^ ROTL64(t[3], 1); | ||
u[3] = t[2] ^ ROTL64(t[4], 1); | ||
u[4] = t[3] ^ ROTL64(t[0], 1); | ||
|
||
/* theta: a[0,i], a[1,i], .. a[4,i] ^= d[i] */ | ||
s[0] ^= u[0]; s[5] ^= u[0]; s[10] ^= u[0]; s[15] ^= u[0]; s[20] ^= u[0]; | ||
s[1] ^= u[1]; s[6] ^= u[1]; s[11] ^= u[1]; s[16] ^= u[1]; s[21] ^= u[1]; | ||
s[2] ^= u[2]; s[7] ^= u[2]; s[12] ^= u[2]; s[17] ^= u[2]; s[22] ^= u[2]; | ||
s[3] ^= u[3]; s[8] ^= u[3]; s[13] ^= u[3]; s[18] ^= u[3]; s[23] ^= u[3]; | ||
s[4] ^= u[4]; s[9] ^= u[4]; s[14] ^= u[4]; s[19] ^= u[4]; s[24] ^= u[4]; | ||
|
||
/* rho pi: b[..] = rotl(a[..], ..) */ | ||
v = s[ 1]; | ||
s[ 1] = ROTL64(s[ 6], 44); | ||
s[ 6] = ROTL64(s[ 9], 20); | ||
s[ 9] = ROTL64(s[22], 61); | ||
s[22] = ROTL64(s[14], 39); | ||
s[14] = ROTL64(s[20], 18); | ||
s[20] = ROTL64(s[ 2], 62); | ||
s[ 2] = ROTL64(s[12], 43); | ||
s[12] = ROTL64(s[13], 25); | ||
s[13] = ROTL64(s[19], 8); | ||
s[19] = ROTL64(s[23], 56); | ||
s[23] = ROTL64(s[15], 41); | ||
s[15] = ROTL64(s[ 4], 27); | ||
s[ 4] = ROTL64(s[24], 14); | ||
s[24] = ROTL64(s[21], 2); | ||
s[21] = ROTL64(s[ 8], 55); | ||
s[ 8] = ROTL64(s[16], 45); | ||
s[16] = ROTL64(s[ 5], 36); | ||
s[ 5] = ROTL64(s[ 3], 28); | ||
s[ 3] = ROTL64(s[18], 21); | ||
s[18] = ROTL64(s[17], 15); | ||
s[17] = ROTL64(s[11], 10); | ||
s[11] = ROTL64(s[ 7], 6); | ||
s[ 7] = ROTL64(s[10], 3); | ||
s[10] = ROTL64( v, 1); | ||
|
||
/* chi: a[i,j] ^= ~b[i,j+1] & b[i,j+2] */ | ||
v = s[ 0]; w = s[ 1]; s[ 0] ^= (~w) & s[ 2]; s[ 1] ^= (~s[ 2]) & s[ 3]; s[ 2] ^= (~s[ 3]) & s[ 4]; s[ 3] ^= (~s[ 4]) & v; s[ 4] ^= (~v) & w; | ||
v = s[ 5]; w = s[ 6]; s[ 5] ^= (~w) & s[ 7]; s[ 6] ^= (~s[ 7]) & s[ 8]; s[ 7] ^= (~s[ 8]) & s[ 9]; s[ 8] ^= (~s[ 9]) & v; s[ 9] ^= (~v) & w; | ||
v = s[10]; w = s[11]; s[10] ^= (~w) & s[12]; s[11] ^= (~s[12]) & s[13]; s[12] ^= (~s[13]) & s[14]; s[13] ^= (~s[14]) & v; s[14] ^= (~v) & w; | ||
v = s[15]; w = s[16]; s[15] ^= (~w) & s[17]; s[16] ^= (~s[17]) & s[18]; s[17] ^= (~s[18]) & s[19]; s[18] ^= (~s[19]) & v; s[19] ^= (~v) & w; | ||
v = s[20]; w = s[21]; s[20] ^= (~w) & s[22]; s[21] ^= (~s[22]) & s[23]; s[22] ^= (~s[23]) & s[24]; s[23] ^= (~s[24]) & v; s[24] ^= (~v) & w; | ||
|
||
/* iota: a[0,0] ^= round constant */ | ||
s[0] ^= keccak_round_constants[i]; | ||
} | ||
} | ||
|
||
static void | ||
scrypt_hash_init(scrypt_hash_state *S) { | ||
memset(S, 0, sizeof(*S)); | ||
} | ||
|
||
static void | ||
scrypt_hash_update(scrypt_hash_state *S, const uint8_t *in, size_t inlen) { | ||
size_t want; | ||
|
||
/* handle the previous data */ | ||
if (S->leftover) { | ||
want = (SCRYPT_HASH_BLOCK_SIZE - S->leftover); | ||
want = (want < inlen) ? want : inlen; | ||
memcpy(S->buffer + S->leftover, in, want); | ||
S->leftover += (uint32_t)want; | ||
if (S->leftover < SCRYPT_HASH_BLOCK_SIZE) | ||
return; | ||
in += want; | ||
inlen -= want; | ||
keccak_block(S, S->buffer); | ||
} | ||
|
||
/* handle the current data */ | ||
while (inlen >= SCRYPT_HASH_BLOCK_SIZE) { | ||
keccak_block(S, in); | ||
in += SCRYPT_HASH_BLOCK_SIZE; | ||
inlen -= SCRYPT_HASH_BLOCK_SIZE; | ||
} | ||
|
||
/* handle leftover data */ | ||
S->leftover = (uint32_t)inlen; | ||
if (S->leftover) | ||
memcpy(S->buffer, in, S->leftover); | ||
} | ||
|
||
static void | ||
scrypt_hash_finish(scrypt_hash_state *S, uint8_t *hash) { | ||
size_t i; | ||
|
||
S->buffer[S->leftover] = 0x01; | ||
memset(S->buffer + (S->leftover + 1), 0, SCRYPT_HASH_BLOCK_SIZE - (S->leftover + 1)); | ||
S->buffer[SCRYPT_HASH_BLOCK_SIZE - 1] |= 0x80; | ||
keccak_block(S, S->buffer); | ||
|
||
for (i = 0; i < SCRYPT_HASH_DIGEST_SIZE; i += 8) { | ||
U64TO8_LE(&hash[i], S->state[i / 8]); | ||
} | ||
} | ||
|
||
#if defined(SCRYPT_KECCAK256) | ||
static const uint8_t scrypt_test_hash_expected[SCRYPT_HASH_DIGEST_SIZE] = { | ||
0x26,0xb7,0x10,0xb3,0x66,0xb1,0xd1,0xb1,0x25,0xfc,0x3e,0xe3,0x1e,0x33,0x1d,0x19, | ||
0x94,0xaa,0x63,0x7a,0xd5,0x77,0x29,0xb4,0x27,0xe9,0xe0,0xf4,0x19,0xba,0x68,0xea, | ||
}; | ||
#else | ||
static const uint8_t scrypt_test_hash_expected[SCRYPT_HASH_DIGEST_SIZE] = { | ||
0x17,0xc7,0x8c,0xa0,0xd9,0x08,0x1d,0xba,0x8a,0xc8,0x3e,0x07,0x90,0xda,0x91,0x88, | ||
0x25,0xbd,0xd3,0xf8,0x78,0x4a,0x8d,0x5e,0xe4,0x96,0x9c,0x01,0xf3,0xeb,0xdc,0x12, | ||
0xea,0x35,0x57,0xba,0x94,0xb8,0xe9,0xb9,0x27,0x45,0x0a,0x48,0x5c,0x3d,0x69,0xf0, | ||
0xdb,0x22,0x38,0xb5,0x52,0x22,0x29,0xea,0x7a,0xb2,0xe6,0x07,0xaa,0x37,0x4d,0xe6, | ||
}; | ||
#endif | ||
|
Oops, something went wrong.