Class: Epithet::Keygen
- Inherits:
-
Object
- Object
- Epithet::Keygen
- Defined in:
- lib/epithet.rb
Overview
Key derivation helper
Constant Summary collapse
- DEFAULT_SCRYPT_PARAMS =
Default parameters for scrypt.
DEFAULT_SCRYPT_PARAMS = { salt: 'epithet-default', N: 1 << 17, r: 8, p: 1, length: 32 }.freeze { salt: 'epithet-default', N: 1 << 17, r: 8, p: 1, length: 32 }.freeze
Instance Method Summary collapse
-
#generate(info, salt, length) ⇒ Object
Derive a key via HKDF.
-
#initialize(ikm: nil, passphrase: nil, digest: 'sha256', scrypt: {}) ⇒ Keygen
constructor
Create a new key generator from either high-entropy key material, or a supplied passphrase.
- #inspect ⇒ Object
Constructor Details
#initialize(ikm: nil, passphrase: nil, digest: 'sha256', scrypt: {}) ⇒ Keygen
Create a new key generator from either high-entropy key material, or a supplied passphrase. Supplied scrypt params are merged over DEFAULT_SCRYPT_PARAMS.
213 214 215 216 217 218 219 220 221 |
# File 'lib/epithet.rb', line 213 def initialize(ikm: nil, passphrase: nil, digest: 'sha256', scrypt: {}) if (passphrase.nil? && ikm.nil?) || (!passphrase.nil? && !ikm.nil?) raise ArgumentError, 'keygen requires either ikm or passphrase' end @ikm = (ikm ? ikm.b : OpenSSL::KDF.scrypt(passphrase, **DEFAULT_SCRYPT_PARAMS, **scrypt)).freeze @digest = -String(digest) freeze end |
Instance Method Details
#generate(info, salt, length) ⇒ Object
Derive a key via HKDF.
228 229 230 |
# File 'lib/epithet.rb', line 228 def generate(info, salt, length) OpenSSL::KDF.hkdf(@ikm, hash: @digest, info: info, salt: salt, length: length) end |
#inspect ⇒ Object
223 224 225 |
# File 'lib/epithet.rb', line 223 def inspect "#<#{self.class}:#{'%#016x' % (object_id << 1)} digest=#{@digest}>" end |