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)
 def test_sign_verify_random(self):
     for l in range(1, 300):
         sk = ed25519.generate_secret()
         pk = ed25519.publickey(sk)
         msg = random.bytes(l)
         sig = ed25519.sign(sk, msg)
         self.assertTrue(ed25519.verify(pk, sig, msg))
Exemplo n.º 3
0
 def public_key(self) -> bytes:
     if self.curve == common.COSE_CURVE_P256:
         pubkey = nist256p1.publickey(self._private_key(), False)
         return cbor.encode({
             common.COSE_KEY_ALG: self.algorithm,
             common.COSE_KEY_KTY: common.COSE_KEYTYPE_EC2,
             common.COSE_KEY_CRV: self.curve,
             common.COSE_KEY_X: pubkey[1:33],
             common.COSE_KEY_Y: pubkey[33:],
         })
     elif self.curve == common.COSE_CURVE_ED25519:
         pubkey = ed25519.publickey(self._private_key())
         return cbor.encode({
             common.COSE_KEY_ALG: self.algorithm,
             common.COSE_KEY_KTY: common.COSE_KEYTYPE_OKP,
             common.COSE_KEY_CRV: self.curve,
             common.COSE_KEY_X: pubkey,
         })
     raise TypeError
 def test_publickey(self):
     for sk, pk, _ in self.vectors:
         pk2 = ed25519.publickey(unhexlify(sk))
         self.assertEqual(pk2, unhexlify(pk))