在从零到门罗的书中,我正在阅读Schnorr 签名。2.3.4 节引用了代码库random32_unbiased()
中的函数。我的理解是这个函数会生成一个介于和(包括两者)之间的随机整数,其中是一个大整数。src/crypto/crypto.cpp
1
l-1
l
该功能是:
void random32_unbiased(unsigned char *bytes)
{
// l = 2^252 + 27742317777372353535851937790883648493.
// l fits 15 times in 32 bytes (iow, 15 l is the highest multiple of l that fits in 32 bytes)
static const unsigned char limit[32] = { 0xe3, 0x6a, 0x67, 0x72, 0x8b, 0xce, 0x13, 0x29, 0x8f, 0x30, 0x82, 0x8c, 0x0b, 0xa4, 0x10, 0x39, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0 };
while(1)
{
generate_random_bytes_thread_safe(32, bytes);
if (!less32(bytes, limit))
continue;
sc_reduce32(bytes);
if (sc_isnonzero(bytes))
break;
}
}
线有什么用途static const unsigned char limit[32]
?
我的主要问题是上述问题,但总的来说,我并不深入了解函数的工作原理,因此也将不胜感激。