summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/lib3.c56
-rw-r--r--lib/lib3.h17
-rw-r--r--set3/task21.c14
3 files changed, 83 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);
+}
diff --git a/lib/lib3.h b/lib/lib3.h
index 3078cfe..8adbbb9 100644
--- a/lib/lib3.h
+++ b/lib/lib3.h
@@ -8,9 +8,26 @@
#define BLOCKSIZE 16
+#define MT_19937_N 624
+// needed for initialization
+#define MT_19937_F 0x6C078965
+// word size
+#define MT_19937_W 32
+#define MT_19937_UPPER_MASK 0x80000000
+#define MT_19937_LOWER_MASK 0x7fffffff
+
+struct mt_19937_state {
+ unsigned int mt[MT_19937_N];
+ unsigned int index;
+};
+
+struct mt_19937_state __global_mt_19937;
+
char *challenge17_encrypt(int *length);
int cbc_padding_oracle(char *encrypted, int length);
int aes_ctr(char *in, int length_in, char *out, char *string_key, char *nonce);
+void mt_19937_seed(unsigned int seed);
+int mt_19937();
#endif
diff --git a/set3/task21.c b/set3/task21.c
new file mode 100644
index 0000000..e8a48d1
--- /dev/null
+++ b/set3/task21.c
@@ -0,0 +1,14 @@
+#include "../lib/lib.h"
+#include "../lib/lib2.h"
+#include "../lib/lib3.h"
+#include <time.h>
+
+#define BLOCKSIZE 16
+int main()
+{
+ unsigned int seed = 111;
+ int i;
+ mt_19937_seed(seed);
+ for(i=0;i<10;i++)
+ printf("%u\n", mt_19937());
+}