📄 blumshub.cpp
字号:
#include "blumshub.h"
BlumBlumShub::BlumBlumShub(const bignum &p, const bignum &q, const bignum &seed)
: phi((p-1)*(q-1)),
n(p*q),
x0(a_times_b_mod_c(seed, seed, n)),
maxBits(BitPrecision(n.BitCount())-1)
{
current = a_times_b_mod_c(x0, x0, n);
bitsLeft = maxBits;
}
int BlumBlumShub::GetBit()
{
if (bitsLeft==0)
{
current = a_times_b_mod_c(current, current, n);
bitsLeft = maxBits;
}
return current[--bitsLeft];
}
byte BlumBlumShub::GetByte()
{
byte b=0;
for (int i=0; i<8; i++)
b = (b << 1) | BlumBlumShub::GetBit();
return b;
}
void BlumBlumShub::Seek(unsigned long index)
{
bignum exp = a_exp_b_mod_c (2, ((index*8) / maxBits + 1), phi);
current = a_exp_b_mod_c (x0, exp, n);
bitsLeft = maxBits - int((index*8) % maxBits);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -