예제 #1
0
 def test_crypto_core_ristretto255_scalar_invert(self):
     if not pysodium.sodium_version_check(1, 0, 18): return
     s = pysodium.crypto_core_ristretto255_scalar_random()
     r = pysodium.crypto_core_ristretto255_scalar_invert(s)
     p = pysodium.crypto_scalarmult_ristretto255_base(pysodium.crypto_core_ristretto255_scalar_random())
     q = pysodium.crypto_scalarmult_ristretto255(s, p)
     p_ = pysodium.crypto_scalarmult_ristretto255(r, q)
     self.assertEqual(p,p_)
예제 #2
0
 def test_crypto_scalarmult_ristretto255(self):
     if not pysodium.sodium_version_check(1, 0, 18): return
     n = pysodium.crypto_scalarmult_ristretto255_base(
         pysodium.crypto_core_ristretto255_scalar_random())
     p = pysodium.crypto_scalarmult_ristretto255_base(
         pysodium.crypto_core_ristretto255_scalar_random())
     r = pysodium.crypto_scalarmult_ristretto255(n, p)
     pysodium.crypto_core_ristretto255_is_valid_point(r)
예제 #3
0
    def test_crypto_core_ristretto255_scalar_add_sub(self):
        if not pysodium.sodium_version_check(1, 0, 18): return

        x = pysodium.crypto_core_ristretto255_scalar_random()
        y = pysodium.crypto_core_ristretto255_scalar_random()
        x_y = pysodium.crypto_core_ristretto255_scalar_add(x,y)
        r = pysodium.crypto_core_ristretto255_scalar_sub(x_y,y)

        p1 = pysodium.crypto_scalarmult_ristretto255_base(x)
        p2 = pysodium.crypto_scalarmult_ristretto255_base(r)
        self.assertEqual(p1,p2)
예제 #4
0
 def test_crypto_core_ristretto255_scalar_complement(self):
     if not pysodium.sodium_version_check(1, 0, 18): return
     x = pysodium.crypto_core_ristretto255_scalar_random()
     x_ = pysodium.crypto_core_ristretto255_scalar_complement(x)
     # x + complement(x) = 1 mod L
     one = pysodium.crypto_core_ristretto255_scalar_add(x,x_)
     self.assertEqual(one,b'\x01'+b"\x00"*31)
예제 #5
0
 def test_crypto_core_ristretto255_scalar_negate(self):
     if not pysodium.sodium_version_check(1, 0, 18): return
     s = pysodium.crypto_core_ristretto255_scalar_random()
     r = pysodium.crypto_core_ristretto255_scalar_negate(s)
     # s + neg(s) = 0 mod L
     s_r = pysodium.crypto_core_ristretto255_scalar_add(s,r)
     self.assertEqual(s_r,b"\x00"*32)
예제 #6
0
    def test_crypto_core_ristretto255_scalar_mul(self):
        if not pysodium.sodium_version_check(1, 0, 18): return
        two = b'\x02' + b'\x00' * 31
        four_mul = pysodium.crypto_core_ristretto255_scalar_mul(two,two)
        four_add = pysodium.crypto_core_ristretto255_scalar_add(two,two)
        self.assertEqual(four_mul,four_add)

        x = pysodium.crypto_core_ristretto255_scalar_random()
        one = b'\x01' + b'\x00' * 31
        r = pysodium.crypto_core_ristretto255_scalar_mul(x,one)
        self.assertEqual(x,r)
예제 #7
0
 def test_crypto_core_ristretto255_scalar_random(self):
     if not pysodium.sodium_version_check(1, 0, 18): return
     a = pysodium.crypto_core_ristretto255_scalar_random()
     b = pysodium.crypto_core_ristretto255_scalar_random()
     # stupid check that random returns different values...
     self.assertNotEqual(a, b)