Skip to content

Instantly share code, notes, and snippets.

@sabril
Last active January 2, 2016 09:29
Show Gist options
  • Save sabril/8283602 to your computer and use it in GitHub Desktop.
Save sabril/8283602 to your computer and use it in GitHub Desktop.
# derived from http://h2np.net/tips/wiki/index.php?RubyOpenSSLDigitalSignatureSample
require 'openssl'
require 'base64'
include OpenSSL
group_name = 'secp160k1'
message = 'test payload aa'
puts "=== Generate Key ==="
key = PKey::EC.new(group_name)
key = key.generate_key
#puts key.to_text
puts "Private Key: #{key.private_key.to_bn}"
puts "Public Key: #{key.public_key.to_bn}"
# payload set to base 64 format
digest = Digest::SHA512.digest(message)
# digest
puts "Base64 format of Payload: #{Base64.encode64 digest}"
signature = key.dsa_sign_asn1 digest
puts "Signature: #{Base64.encode64 signature}"
puts "\n\n\n=== Verification ==="
group = PKey::EC::Group.new(group_name)
# generate base on public key
point = PKey::EC::Point.new(group, key.public_key.to_bn)
verifier = PKey::EC.new(group)
#verifier = key
verifier.private_key = nil # we don't know the private key
verifier.public_key = point
#puts 'verify key'
puts "Verify using public key: #{verifier.public_key.to_bn}"
puts "Verify Result: #{verifier.dsa_verify_asn1(digest, signature).inspect}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment