Class: Minisign::KeyPair
- Inherits:
-
Object
- Object
- Minisign::KeyPair
- Includes:
- Utils
- Defined in:
- lib/minisign/key_pair.rb
Overview
Generate a Minisign secret and public key
Instance Method Summary collapse
-
#initialize(password = nil) ⇒ KeyPair
constructor
Create a new key pair.
- #private_key ⇒ Minisign::PrivateKey
- #public_key ⇒ Minisign::PublicKey
Methods included from Utils
#blake2b256, #blake2b512, #derive_key, #xor
Constructor Details
#initialize(password = nil) ⇒ KeyPair
Create a new key pair
12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/minisign/key_pair.rb', line 12 def initialize(password = nil) @password = password @key_id = SecureRandom.bytes(8) @signing_key = Ed25519::SigningKey.generate @checksum = blake2b256("Ed#{key_data}") @keynum_sk = "#{key_data}#{@checksum}" @kdf_salt = SecureRandom.bytes(32) @keynum_sk = xor(kdf_output, @keynum_sk.bytes).pack('C*') if @password @kdf_algorithm = password.nil? ? [0, 0].pack('U*') : 'Sc' end |
Instance Method Details
#private_key ⇒ Minisign::PrivateKey
26 27 28 29 30 31 32 33 34 |
# File 'lib/minisign/key_pair.rb', line 26 def private_key @kdf_opslimit = kdf_opslimit_bytes.pack('C*') @kdf_memlimit = kdf_memlimit_bytes.pack('C*') data = "Ed#{@kdf_algorithm}B2#{@kdf_salt}#{@kdf_opslimit}#{@kdf_memlimit}#{@keynum_sk}" Minisign::PrivateKey.new( "untrusted comment: minisign secret key\n#{Base64.strict_encode64(data)}", @password ) end |
#public_key ⇒ Minisign::PublicKey
37 38 39 40 |
# File 'lib/minisign/key_pair.rb', line 37 def public_key data = Base64.strict_encode64("Ed#{@key_id}#{@signing_key.verify_key.to_bytes}") Minisign::PublicKey.new(data) end |