Exemplo n.º 1
0
    def split(self, secret, deterministic=True):

        if secret >= self.P:
            raise ValueError("secret must be smaller than P")

        prng = Prng(deterministic=deterministic)
        prng.addEntropy(secret.to_bytes(512, byteorder="big"))

        a = [0] * self.k

        a[0] = secret

        for i in range(1, self.k):
            a[i] = prng.getRandomLong(512) % self.P

        x = []

        for i in range(self.n):
            while True:
                r = int(prng.getRandomLong(16))
                if r != 0 and r not in x:
                    x += [r]
                    break

        y = [0] * self.n

        for i in range(self.n):
            y[i] = Shamir.fPoly(x[i], a, self.P)

        shares = []

        for i in range(self.n):
            shares += [(x[i], y[i])]

        return shares
Exemplo n.º 2
0
 def test_deterministic_Prng_2_1(self):
     prng = Prng(deterministic=True)
     value = prng.getRandomLong(32)
     expected = 3563776190
     self.assertEqual(
         value, expected, "Prng not deterministic (expected: %d, got: %d)" %
         (expected, value))
Exemplo n.º 3
0
 def test_deterministic_Prng_2_2(self):
     prng = Prng(deterministic=True)
     prng.addEntropy(b"entropy")
     value = prng.getRandomLong(32)
     expected = 1783747816
     self.assertEqual(
         value, expected, "Prng not deterministic (expected: %d, got: %d)" %
         (expected, value))
Exemplo n.º 4
0
 def encode(self, share):
     prng = Prng(deterministic=self.deterministic)
     prng.addEntropy(share[0].to_bytes(512, byteorder="big") +
                     share[1].to_bytes(512, byteorder="big"))
     result = b""
     result += bytes([prng.getRandomLong(8) & 0xF0 | self.version])
     result += bytes([prng.getRandomLong(8) & 0xF0 | self.k])
     result += rawFromLong(share[0], 16)
     result += rawFromLong(share[1], self.width)
     return result
Exemplo n.º 5
0
Use 5 D6 dice, loaded or not. After each roll of all dice:
- Put the dice in line without looking at them
- Starting from the right, remove any dice which have the same value as those on their left
- Roll the removed dice again
- Repeat until all dice have different values
- Enter the result and press return

eg:

5 1 2 1 5 : first throw
5 1 2 : remove 1 5 on the right
5 1 2 4 2 : second throw
5 1 2 4 : remove 2 on the right
5 1 2 4 6 : Ok! Enter 51246
         
    """)

    de = DiceEntropy()
    prng = Prng()

    while True:
        print("roll: ")
        roll = sys.stdin.readline()
        de.addRoll(roll)
        (dice_result, length) = de.getResult()
        rand_value = prng.getRandomLong(length)
        result = rand_value ^ dice_result
        # print("rv={:x}".format(rand_value))
        print("{} rolls, {} bits: {:x}".format(de.count_rolls, length, result))