print "#include <stdio.h>"
print '#include "mont.h"'
print ""
print "void mont_mult_internal(uint64_t *out, const uint64_t *a, const uint64_t *b, const uint64_t *n, uint64_t m0, uint64_t *t, size_t nw);"

p256 = 115792089210356248762697446949407573530086143415290314195533631308867097853951

make_test(2, 3, 255)
make_test(2, 240, 255)
make_test(189, 240, 255)
make_test(189, 240, 32984723984723984723847)
make_test(189000000, 7878787878, 32984723984723984723847)
make_test(
    1890000003439483948394839843434, 78787878780003984834673498384734,
    3298472398472398472384798743287438734875384758435834539400000033988787)

for x in range(100):
    modulus_len = x // 10 + 5  # 40 bit .. 112 bits
    modulus = bin2int(
        sha256(b"modulus" + struct.pack(">I", x)).digest()[:-modulus_len]) | 1
    a = bin2int(sha256(b"a" + struct.pack(">I", x)).digest()) % modulus
    b = bin2int(sha256(b"b" + struct.pack(">I", x)).digest()) % modulus
    make_test(a, b, modulus)

for x in range(100):
    a = bin2int(sha256(b"a" + struct.pack(">I", x)).digest()) % p256
    b = bin2int(sha256(b"b" + struct.pack(">I", x)).digest()) % p256
    make_test(a, b, p256)

make_main()
Exemplo n.º 2
0
def make_limb(seed):
    result = bin2int(sha256(struct.pack(">I", seed)).digest()) & ((2**255) - 1)
    return result