cryptopals

Cryptopals Challenges
git clone https://git.pngu.org/cryptopals
Log | Files | Refs

mt19937.h (563B)


#pragma once

#include <stdint.h>
#include <string.h>

#define MT19937_N 624
#define MT19937_B 0x9D2C5680
#define MT19937_C 0xEFC60000

struct mt19937_state {
  uint32_t mt[MT19937_N];
  uint32_t idx;
};

struct mt19937_state mt19937_init(uint32_t seed);
void mt19937_regenerate(struct mt19937_state *obj);
uint32_t mt19937_temper(uint32_t y);
uint32_t mt19937_extract(struct mt19937_state *obj);
uint32_t unshift_right(uint32_t val, unsigned shift);
uint32_t unshift_left_mask(uint32_t val, unsigned shift, uint32_t mask);
uint32_t mt19937_untemper(uint32_t y);