basic_tests.py 文件源码

python
阅读 18 收藏 0 点赞 0 评论 0

项目:py-prng 作者: czechnology 项目源码 文件源码
def poker_test(generator, n_bits, m=None, sig_level=None, misc=None):
    if m is not None:
        if n_bits // m < 5 * (2 ** m):
            raise ValueError("Value m must satisfy requirement [n/m]>=5*2^m")
    else:
        # find the highest suitable m value
        m = int(log2(n_bits / 5))
        while n_bits // m < 5 * (2 ** m):
            m -= 1

    k = n_bits // m

    # Divide the sequence into k non-overlapping parts each of length m
    # and let ni be the number of occurrences of the ith type of sequence of length m, 1 <= i <= 2m.
    ni = [0] * (2 ** m)
    for i in range(0, k * m, m):
        t = concat_chunks([generator.random_bit() for _ in range(m)], bits=1)
        ni[t] += 1

    x3 = (2 ** m) / k * sum(map(lambda x: x ** 2, ni)) - k

    if type(misc) is dict:
        misc.update(m=m, k=k, ni=ni)

    if sig_level is None:
        return x3
    else:
        limit = chi2.ppf(1 - sig_level, (2 ** m) - 1)
        if type(misc) is dict:
            misc.update(x=x3, limit=limit)
        return x3 <= limit
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号