OSDN Git Service

add ed25519 test data
[bytom/bytom-kit.git] / app / model / signature.py
1 import ed25519
2
3 # You can verify or get more test data from: https://gist.github.com/zcc0721/bfa5c34a49ddfcaf9fdc3374cecb1477
4 # test data 1:
5 #   private_key_str: 33c6e964cf64246fc37f26be46c7b783ef4364f9d4c69daa4ccd9d0fef5fcef1
6 #   public_key_str: b25690a0ccd290a3346fb412dfd342c5ce6134ef116e89b0642d7534e34df432
7 #   message_str: 68656c6c6f206279746f6d      # value is: 'hello bytom'
8 #   signature_str: dfb19c1892796ad9560eb61a065c016c82a7a81a42f2c3f69d20f44582262551b62fee6836c866e008c2cb37bba7e2045013f073ad7f69f5dd2a634929c3d406
9 # test data 2:
10 #   private_key_str: 0164f0d6bc1f063fc74f1010dc4c5393af40d215cc905884443ed0cfe2e2c1c4
11 #   public_key_str: 5faaee522735460654190609cab55f96edd44ea78e358d6a02ef769b0c9eb314
12 #   message_str: b435f948bd3748ede8f9d6f59728d669939e79c6c885667a5c138e05bbabde1de0dcfcbe0c6112022fbbf0da522f4e224a9c2381016380688b51886248b3156f
13 #   signature_str: 18d29864775ff4ec0c78a477f57c5d4dd03526d55ba33bd6768acf3ca0cf7e41fe9c241a7bc550f4fa14a745fbe0155cb896f9e4d88c87337e6dc3a313c8d80b
14 # test data 3:
15 #   private_key_str: 7eb40ebe8beee07dfbc645300f571948a9ce83191c28505e710b6900ec2531ed
16 #   public_key_str: 026b5e22e282d07051203fb0596be140cf17f2532a31407f3b177faa74237cbe
17 #   message_str: 48ec69c784c519b65d0e52badda3b7c25113a6b53b4c8e582abee3e2f9aab41514f15bd44c999f3d2ddae4bbab15baf9f4d82dde4f97aa5042cbcfdd8271530e
18 #   signature_str: 691fe6fc51603adbac0db2f71f383e7039b6a031a2242da8fd6203f9c71e3b526d0cdace626811ee06797de21afebe54d0293027eb6b22b10c63d4dd0ab8790c
19
20 def sign(private_key_str, message_str):
21     signing_key = ed25519.SigningKey(bytes.fromhex(private_key_str))
22     # signature = signing_key.sign(message_str.encode(), encoding='hex')
23     signature = signing_key.sign(bytes.fromhex(message_str), encoding='hex')
24
25     return signature.decode()
26
27 def verify(public_key_str, signature_str, message_str):
28     result = False
29     verifying_key = ed25519.VerifyingKey(public_key_str.encode(), encoding='hex')
30     try:
31         verifying_key.verify(signature_str.encode(), bytes.fromhex(message_str), encoding='hex')
32         result = True
33     except ed25519.BadSignatureError:
34         result = False
35     return result