def test_sign_test_key_conversion(): """ Taken from test vectors in libsodium """ keypair_seed = unhexlify(b"421151a459faeade3d247115f94aedae" b"42318124095afabe4d1451a559faedee") ed25519_pk, ed25519_sk = c.crypto_sign_seed_keypair(keypair_seed) assert c.crypto_sign_ed25519_sk_to_pk(ed25519_sk) == ed25519_pk with pytest.raises(ValueError): c.crypto_sign_ed25519_sk_to_pk(unhexlify(b"12")) assert c.crypto_sign_ed25519_sk_to_seed(ed25519_sk) == keypair_seed with pytest.raises(ValueError): c.crypto_sign_ed25519_sk_to_seed(unhexlify(b"12")) curve25519_pk = c.crypto_sign_ed25519_pk_to_curve25519(ed25519_pk) with pytest.raises(ValueError): c.crypto_sign_ed25519_pk_to_curve25519(unhexlify(b"12")) with pytest.raises(ValueError): c.crypto_sign_ed25519_sk_to_curve25519(unhexlify(b"12")) curve25519_sk = c.crypto_sign_ed25519_sk_to_curve25519(ed25519_sk) assert tohex(curve25519_pk) == ("f1814f0e8ff1043d8a44d25babff3ced" "cae6c22c3edaa48f857ae70de2baae50") assert tohex(curve25519_sk) == ("8052030376d47112be7f73ed7a019293" "dd12ad910b654455798b4667d73de166")
def test_sign(): seed = b"\x00" * c.crypto_sign_SEEDBYTES pubkey, secretkey = c.crypto_sign_seed_keypair(seed) assert len(pubkey) == c.crypto_sign_PUBLICKEYBYTES assert len(secretkey) == c.crypto_sign_SECRETKEYBYTES pubkey, secretkey = c.crypto_sign_keypair() assert len(pubkey) == c.crypto_sign_PUBLICKEYBYTES assert len(secretkey) == c.crypto_sign_SECRETKEYBYTES msg = b"message" sigmsg = c.crypto_sign(msg, secretkey) assert len(sigmsg) == len(msg) + c.crypto_sign_BYTES msg2 = c.crypto_sign_open(sigmsg, pubkey) assert msg2 == msg
def generate_serval_keys(name): node_hash = HexEncoder.decode(nacl.hash.sha256(name.encode("utf-8"))) sign_pk, sign_sk = crypto_sign_seed_keypair(node_hash) box_sk = crypto_sign_ed25519_sk_to_curve25519(sign_sk) box_pk = crypto_scalarmult_base(box_sk) rhiz_pk = HexEncoder.decode(nacl.hash.sha256(("rhizome"+name).encode("utf-8"))) keys = { "sign_pk": HexEncoder.encode(sign_pk).decode("ascii").upper(), "box_sk": HexEncoder.encode( box_sk).decode("ascii").upper(), "sign_sk": HexEncoder.encode(sign_sk).decode("ascii").upper(), "box_pk": HexEncoder.encode( box_pk).decode("ascii").upper(), "sid": HexEncoder.encode( box_pk).decode("ascii").upper(), "rhiz_pk": HexEncoder.encode(rhiz_pk).decode("ascii").upper(), } return keys
def gen_lisk_addr(): mnemo = Mnemonic('english') words = mnemo.generate() hash_object = hashlib.sha256(words) ed25519_pk, ed25519_sk = c.crypto_sign_seed_keypair(hash_object.digest()) #print hexlify(ed25519_sk) pk_sha256_dig=hashlib.sha256(ed25519_pk).hexdigest() n_letter=2 pk_sha256_dig_array = [pk_sha256_dig[i:i+n_letter] for i in range(0, len(pk_sha256_dig), n_letter)] #split into 2 letters array temp=[] for x in range(0, 8): temp.append(pk_sha256_dig_array[7-x]) addr_num="".join(temp) lisk_addr = str(int(addr_num, 16))+"L" return lisk_addr, words
def test_sign_ed25519ph_libsodium(): # _hsk, _hpk, hmsg, _hsig, _hsigmsg = ed25519_known_answers()[-1] msg = unhexlify(hmsg) seed = unhexlify(b"421151a459faeade3d247115f94aedae" b"42318124095afabe4d1451a559faedee") pk, sk = c.crypto_sign_seed_keypair(seed) exp_sig = unhexlify(b"10c5411e40bd10170fb890d4dfdb6d33" b"8c8cb11d2764a216ee54df10977dcdef" b"d8ff755b1eeb3f16fce80e40e7aafc99" b"083dbff43d5031baf04157b48423960d") edph = c.crypto_sign_ed25519ph_state() c.crypto_sign_ed25519ph_update(edph, msg) sig = c.crypto_sign_ed25519ph_final_create(edph, sk) assert sig == exp_sig edph_incr = c.crypto_sign_ed25519ph_state() c.crypto_sign_ed25519ph_update(edph_incr, b"") c.crypto_sign_ed25519ph_update(edph_incr, msg[0:len(msg) // 2]) c.crypto_sign_ed25519ph_update(edph_incr, msg[len(msg) // 2:]) assert c.crypto_sign_ed25519ph_final_verify(edph_incr, exp_sig, pk) is True with pytest.raises(BadSignatureError): wrng_sig = flip_byte(exp_sig, 0) c.crypto_sign_ed25519ph_final_verify(edph_incr, wrng_sig, pk) with pytest.raises(BadSignatureError): wrng_mesg = flip_byte(msg, 1022) edph_wrng = c.crypto_sign_ed25519ph_state() c.crypto_sign_ed25519ph_update(edph_wrng, wrng_mesg) c.crypto_sign_ed25519ph_final_verify(edph_wrng, exp_sig, pk)
def test_sign_ed25519ph_libsodium(): # _hsk, _hpk, hmsg, _hsig, _hsigmsg = ed25519_known_answers()[-1] msg = unhexlify(hmsg) seed = unhexlify(b'421151a459faeade3d247115f94aedae' b'42318124095afabe4d1451a559faedee') pk, sk = c.crypto_sign_seed_keypair(seed) exp_sig = unhexlify(b'10c5411e40bd10170fb890d4dfdb6d33' b'8c8cb11d2764a216ee54df10977dcdef' b'd8ff755b1eeb3f16fce80e40e7aafc99' b'083dbff43d5031baf04157b48423960d') edph = c.crypto_sign_ed25519ph_state() c.crypto_sign_ed25519ph_update(edph, msg) sig = c.crypto_sign_ed25519ph_final_create(edph, sk) assert sig == exp_sig edph_incr = c.crypto_sign_ed25519ph_state() c.crypto_sign_ed25519ph_update(edph_incr, b'') c.crypto_sign_ed25519ph_update(edph_incr, msg[0:len(msg) // 2]) c.crypto_sign_ed25519ph_update(edph_incr, msg[len(msg) // 2:]) assert c.crypto_sign_ed25519ph_final_verify(edph_incr, exp_sig, pk) is True with pytest.raises(BadSignatureError): wrng_sig = flip_byte(exp_sig, 0) c.crypto_sign_ed25519ph_final_verify(edph_incr, wrng_sig, pk) with pytest.raises(BadSignatureError): wrng_mesg = flip_byte(msg, 1022) edph_wrng = c.crypto_sign_ed25519ph_state() c.crypto_sign_ed25519ph_update(edph_wrng, wrng_mesg) c.crypto_sign_ed25519ph_final_verify(edph_wrng, exp_sig, pk)
def test_sign_wrong_lengths(): with pytest.raises(ValueError): c.crypto_sign_seed_keypair(b"")
def test_public_roundtrip(self, data, seed, f): pk, sk = sodium.crypto_sign_seed_keypair(seed) assert protocol.v2_verify(protocol.v2_sign(data, sk, f), pk, f) == ( data, f, )