summaryrefslogtreecommitdiff
path: root/lib/lib3.c
diff options
context:
space:
mode:
authorBenedict <benedict@0xb8000.de>2016-08-11 17:55:46 +0200
committerBenedict <benedict@0xb8000.de>2017-02-21 13:00:25 +0100
commit62fa141050aa054183fb781fed8e782f99e6072f (patch)
tree0b3cd551675a835880f7f9d6665d2e0055818d7b /lib/lib3.c
parent7060b54d2385018fc5f7c081dfd0630db3b402e2 (diff)
set3, completed challenge 21
Diffstat (limited to 'lib/lib3.c')
-rw-r--r--lib/lib3.c56
1 files changed, 52 insertions, 4 deletions
diff --git a/lib/lib3.c b/lib/lib3.c
index 87865ed..43f3ec6 100644
--- a/lib/lib3.c
+++ b/lib/lib3.c
@@ -47,10 +47,6 @@ int cbc_padding_oracle(char *encrypted, int length)
}
-int convert_to_little_endian(char *string)
-{
-
-}
/**
* format is: 64 nonce concat with 64 bit counter
* calle has to make sure that nonce is at least 8 bytes
@@ -81,3 +77,55 @@ int aes_ctr(char *in, int length_in, char *out, char *string_key, char *nonce)
16, length_last_block);
}
+
+void mt_19937_seed(unsigned int seed)
+{
+ int i;
+
+ __global_mt_19937.index = MT_19937_N;
+ __global_mt_19937.mt[0] = seed;
+ memset(&__global_mt_19937.mt[1], 0, 623);
+ for(i=1;i<=MT_19937_N;i++) {
+ __global_mt_19937.mt[i] = (1812433253 * (__global_mt_19937.mt[i-1]
+ ^ (__global_mt_19937.mt[i-1] >> 30))) + i;
+ // only the last 32 bit
+ __global_mt_19937.mt[i] &= 0xFFFFFFFF;
+ }
+}
+
+void mt_19937_generate()
+{
+ unsigned int i, x;
+
+ for(i=0;i<=MT_19937_N;i++) {
+ x = (((__global_mt_19937.mt[i] & MT_19937_UPPER_MASK) +
+ (__global_mt_19937.mt[(i+1) % 624] & MT_19937_LOWER_MASK)
+ )& 0xFFFFFFFF);
+
+ __global_mt_19937.mt[i] = __global_mt_19937.mt[(i+397) % MT_19937_N] ^ x >> 1;
+
+ if (x % 2)
+ __global_mt_19937.mt[i] ^= 0x9908b0df;
+ }
+ __global_mt_19937.index = 0;
+}
+
+
+int mt_19937()
+{
+ unsigned int y = 0x0;
+
+ if(__global_mt_19937.index >= MT_19937_N)
+ mt_19937_generate();
+
+ y = __global_mt_19937.mt[__global_mt_19937.index];
+
+ y = y ^ (y >> 11);
+ y = y ^ ((y << 7) & 0x9D2C5680);
+ y = y ^ ((y << 15) & 0xEFC60000);
+ y = y ^ (y >> 18);
+
+ __global_mt_19937.index++;
+
+ return (y & 0xFFFFFFFF);
+}