Class: ExoBasic::ECDSAKeys
- Inherits:
-
Object
- Object
- ExoBasic::ECDSAKeys
- Defined in:
- lib/exobasic/encrypt/ecdsa_keys.rb
Constant Summary collapse
- CURVE =
'secp256k1'
Class Method Summary collapse
- .digest(data) ⇒ Object
- .from_pem(key_pem) ⇒ Object
- .gen_key(curve = nil) ⇒ Object
- .get_key_details(private_key) ⇒ Object
- .private_from_hex(private_hex) ⇒ Object
- .private_pem_to_s(pem) ⇒ Object
- .public_from_hex(public_hex, curve = nil) ⇒ Object
- .public_pem_to_s(pem) ⇒ Object
- .s_to_private_pem(b64) ⇒ Object
- .s_to_public_pem(b64) ⇒ Object
- .sign_message(private_key_pem, data) ⇒ Object
- .to_pem(key) ⇒ Object
- .verify_digested_message(public_key_hex, signature_base64, encoded_digested_data, curve = nil) ⇒ Object
- .verify_message(public_key_pem, signature_base64, data) ⇒ Object
Class Method Details
.digest(data) ⇒ Object
91 92 93 |
# File 'lib/exobasic/encrypt/ecdsa_keys.rb', line 91 def self.digest(data) OpenSSL::Digest::SHA256.digest(data) end |
.from_pem(key_pem) ⇒ Object
59 60 61 |
# File 'lib/exobasic/encrypt/ecdsa_keys.rb', line 59 def self.from_pem(key_pem) OpenSSL::PKey::EC.new(key_pem) end |
.gen_key(curve = nil) ⇒ Object
85 86 87 88 89 |
# File 'lib/exobasic/encrypt/ecdsa_keys.rb', line 85 def self.gen_key(curve=nil) c = curve.nil? ? ECDSAKeys::CURVE : curve ECDSAKeys.get_key_details(OpenSSL::PKey::EC.new(c).generate_key!) end |
.get_key_details(private_key) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/exobasic/encrypt/ecdsa_keys.rb', line 37 def self.get_key_details(private_key) private_hex = private_key.to_der.unpack('H*').first private_pem = private_key.to_pem key2 = OpenSSL::PKey::EC.new(private_key.public_key.group) key2.public_key = private_key.public_key public_hex = private_key.public_key.to_bn.to_s(16).downcase public_pem = key2.to_pem { :private_hex => private_hex, :private_pem => private_pem, :public_hex => public_hex, :public_pem => public_pem } end |
.private_from_hex(private_hex) ⇒ Object
63 64 65 66 67 68 69 |
# File 'lib/exobasic/encrypt/ecdsa_keys.rb', line 63 def self.private_from_hex(private_hex) der = [private_hex].pack('H*') b64 = Base64.encode64(der) pem = ECDSAKeys.s_to_private_pem(b64) ECDSAKeys.from_pem(pem) end |
.private_pem_to_s(pem) ⇒ Object
17 18 19 20 21 |
# File 'lib/exobasic/encrypt/ecdsa_keys.rb', line 17 def self.private_pem_to_s(pem) pem.gsub("-----BEGIN EC PRIVATE KEY-----\n", '') .gsub("\n-----END EC PRIVATE KEY-----\n", '') .gsub("\n", '') end |
.public_from_hex(public_hex, curve = nil) ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/exobasic/encrypt/ecdsa_keys.rb', line 71 def self.public_from_hex(public_hex, curve=nil) # rebuild key c = curve.nil? ? ECDSAKeys::CURVE : curve group = OpenSSL::PKey::EC::Group.new(c) key = OpenSSL::PKey::EC.new(group) # create point from hex key public_key_bn = OpenSSL::BN.new(public_hex, 16) public_key = OpenSSL::PKey::EC::Point.new(group, public_key_bn) key.public_key = public_key key end |
.public_pem_to_s(pem) ⇒ Object
27 28 29 30 31 |
# File 'lib/exobasic/encrypt/ecdsa_keys.rb', line 27 def self.public_pem_to_s(pem) pem.gsub("-----BEGIN PUBLIC KEY-----\n", '') .gsub("\n-----END PUBLIC KEY-----\n", '') .gsub("\n", '') end |
.s_to_private_pem(b64) ⇒ Object
23 24 25 |
# File 'lib/exobasic/encrypt/ecdsa_keys.rb', line 23 def self.s_to_private_pem(b64) "-----BEGIN EC PRIVATE KEY-----\n#{b64}-----END EC PRIVATE KEY-----\n" end |
.s_to_public_pem(b64) ⇒ Object
33 34 35 |
# File 'lib/exobasic/encrypt/ecdsa_keys.rb', line 33 def self.s_to_public_pem(b64) "-----BEGIN PUBLIC KEY-----\n#{b64}-----END PUBLIC KEY-----\n" end |
.sign_message(private_key_pem, data) ⇒ Object
95 96 97 98 99 100 101 102 103 104 |
# File 'lib/exobasic/encrypt/ecdsa_keys.rb', line 95 def self.(private_key_pem, data) key = ECDSAKeys.from_pem(private_key_pem) digested = ECDSAKeys.digest(data) digested_base64 = Base64.encode64(digested).gsub("\n", '') signature = key.dsa_sign_asn1(digested) signature_base64 = Base64.encode64(signature).gsub("\n", '') signature_base64 end |
.to_pem(key) ⇒ Object
55 56 57 |
# File 'lib/exobasic/encrypt/ecdsa_keys.rb', line 55 def self.to_pem(key) key.to_pem end |
.verify_digested_message(public_key_hex, signature_base64, encoded_digested_data, curve = nil) ⇒ Object
114 115 116 117 118 119 120 121 122 |
# File 'lib/exobasic/encrypt/ecdsa_keys.rb', line 114 def self.(public_key_hex, signature_base64, encoded_digested_data, curve=nil) key = ECDSAKeys.public_from_hex(public_key_hex, curve) signature = Base64.decode64(signature_base64) digested_data = Base64.decode64(encoded_digested_data) key.dsa_verify_asn1(digested_data, signature) end |
.verify_message(public_key_pem, signature_base64, data) ⇒ Object
106 107 108 109 110 111 112 |
# File 'lib/exobasic/encrypt/ecdsa_keys.rb', line 106 def self.(public_key_pem, signature_base64, data) key = OpenSSL::PKey::EC.new(public_key_pem) signature = Base64.decode64(signature_base64) digested_data = ECDSAKeys.digest(data) key.dsa_verify_asn1(digested_data, signature) end |