42 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			V
		
	
	
module main
 | 
						|
 | 
						|
import encoding.hex
 | 
						|
import encoding.base64
 | 
						|
import crypto.ed25519
 | 
						|
 | 
						|
// adapted from https://asecuritysite.com/signatures/ed25519
 | 
						|
fn main() {
 | 
						|
	msg := 'Hello Girl'
 | 
						|
 | 
						|
	publ, priv := ed25519.generate_key()?
 | 
						|
 | 
						|
	m := msg.bytes()
 | 
						|
 | 
						|
	sig := ed25519.sign(priv, m)?
 | 
						|
 | 
						|
	println('=== Message ===')
 | 
						|
	println('Msg: $msg \nHash: $m')
 | 
						|
 | 
						|
	println('=== Public key ===')
 | 
						|
	println('Public key (Hex): ${hex.encode(publ)}')
 | 
						|
	println('   Public key (Base64): ${base64.encode(publ)}')
 | 
						|
 | 
						|
	println('=== Private key ===')
 | 
						|
	println('Private key: $priv.seed().hex()') // priv[0:32]
 | 
						|
	println('   Private key (Base64): ${base64.encode(priv.seed())}') // priv[0:32]
 | 
						|
	println('   Private key (Base64) Full key:  ${base64.encode(priv)}')
 | 
						|
	println('   Private key (Full key in Hex): ${hex.encode(priv)}')
 | 
						|
 | 
						|
	println('=== signature (R,s) ===')
 | 
						|
	println('signature: R=${sig[0..32].hex()} s=${sig[32..64].hex()}')
 | 
						|
	println('   signature (Base64)=${base64.encode(sig)}')
 | 
						|
 | 
						|
	rtn := ed25519.verify(publ, m, sig)?
 | 
						|
 | 
						|
	if rtn {
 | 
						|
		println('Signature verified :$rtn')
 | 
						|
	} else {
 | 
						|
		println('signature does not verify :${!rtn}')
 | 
						|
	}
 | 
						|
}
 |