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_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.º 3
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.º 4
0
def genKey(label, seed=None):
    prng = Prng(deterministic=True, seed=seed)
    prng.addEntropy(label.encode("utf-8"))
    prng.skip(64 * 100000)
    return prng.getRandomBytes(32)