v / vlib / crypto / ed25519 / examples / example.v
41 lines · 30 sloc · 1.07 KB · 017ace6ea7402430a992aa0820d5e472ebca74c7
Raw
1module main
2
3import encoding.hex
4import encoding.base64
5import crypto.ed25519
6
7// adapted from https://asecuritysite.com/signatures/ed25519
8fn main() {
9 msg := 'Hello Girl'
10
11 publ, priv := ed25519.generate_key()!
12
13 m := msg.bytes()
14
15 sig := ed25519.sign(priv, m)!
16
17 println('=== Message ===')
18 println('Msg: ${msg} \nHash: ${m}')
19
20 println('=== Public key ===')
21 println('Public key (Hex): ${hex.encode(publ)}')
22 println(' Public key (Base64): ${base64.encode(publ)}')
23
24 println('=== Private key ===')
25 println('Private key: ${priv.seed().hex()}') // priv[0:32]
26 println(' Private key (Base64): ${base64.encode(priv.seed())}') // priv[0:32]
27 println(' Private key (Base64) Full key: ${base64.encode(priv)}')
28 println(' Private key (Full key in Hex): ${hex.encode(priv)}')
29
30 println('=== signature (R,s) ===')
31 println('signature: R=${sig[0..32].hex()} s=${sig[32..64].hex()}')
32 println(' signature (Base64)=${base64.encode(sig)}')
33
34 rtn := ed25519.verify(publ, m, sig)!
35
36 if rtn {
37 println('Signature verified :${rtn}')
38 } else {
39 println('signature does not verify :${!rtn}')
40 }
41}
42