1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-11-12 18:49:07 +00:00
trezor-firmware/tests/test_trezor.crypto.curve.ed25519_cosi.py
2017-12-16 02:11:26 +01:00

48 lines
1.4 KiB
Python

from common import *
from trezor.crypto import random
from trezor.crypto.curve import ed25519
class TestCryptoEd25519Cosi(unittest.TestCase):
def test_cosi(self):
for N in range(1, 11):
# generate random message to be signed
msg = random.bytes(128)
# phase 0: create priv/pubkeys and combine pubkeys
keys = [None] * N
pubkeys = [None] * N
for j in range(N):
keys[j] = ed25519.generate_secret()
pubkeys[j] = ed25519.publickey(keys[j])
pubkey = ed25519.cosi_combine_publickeys(pubkeys)
# phase 1: create nonces, commitments (R values) and combine commitments
nonces = [None] * N
Rs = [None] * N
for j in range(N):
nonces[j] = ed25519.generate_secret()
Rs[j] = ed25519.publickey(nonces[j])
R = ed25519.cosi_combine_publickeys(Rs)
# phase 2: sign and combine signatures
sigs = [None] * N
for j in range(N):
sigs[j] = ed25519.cosi_sign(keys[j], msg, nonces[j], R, pubkey)
sig = ed25519.cosi_combine_signatures(R, sigs)
# check signature using normal ed25519.verify
res = ed25519.verify(pubkey, sig, msg)
self.assertTrue(res)
if __name__ == '__main__':
unittest.main()