Skip to content

Instantly share code, notes, and snippets.

@kannapoix
Created August 4, 2018 06:13
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kannapoix/c67b150beda43e518376bb3e34a6dd67 to your computer and use it in GitHub Desktop.
Save kannapoix/c67b150beda43e518376bb3e34a6dd67 to your computer and use it in GitHub Desktop.
ed25519 signature in ruby
require 'ed25519'
payload = 'plain text'
# generate key pair
signing_key = Ed25519::SigningKey.generate
verify_key = signing_key.verify_key
p signing_key
p verify_key
# sign
signature = signing_key.sign payload
puts "signature: #{signature.unpack 'H*'}"
#verify
result = verify_key.verify signature, payload
puts "verification result: #{result}"
wrong_payload = 'Different from original message'
begin
verify_key.verify signature, wrong_payload
rescue => e
puts e.class
puts e.message
end
# serialize keys
signing_key_bytes = signing_key.to_bytes
verify_key_bytes = verify_key.to_bytes
puts "signing_key_bytes: #{signing_key_bytes.unpack 'H*'}"
puts "verify_key_bytes: #{verify_key_bytes.unpack 'H*'}"
# You can make instance form both serialized keys
Ed25519::SigningKey.new signing_key_bytes
restored_verify_key = Ed25519::VerifyKey.new verify_key_bytes
second_result = restored_verify_key.verify signature, payload
puts "verification result: #{second_result}"
@okyanusoz
Copy link

thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment