Class: ActiveRecord::Encryption::KeyGenerator
- Inherits:
-
Object
- Object
- ActiveRecord::Encryption::KeyGenerator
- Defined in:
- lib/active_record/encryption/key_generator.rb
Overview
Utility for generating and deriving random keys.
Instance Attribute Summary collapse
-
#hash_digest_class ⇒ Object
readonly
Returns the value of attribute hash_digest_class.
Instance Method Summary collapse
-
#derive_key_from(password, length: key_length) ⇒ Object
Derives a key from the given password.
-
#generate_random_hex_key(length: key_length) ⇒ Object
Returns a random key in hexadecimal format.
-
#generate_random_key(length: key_length) ⇒ Object
Returns a random key.
-
#initialize(hash_digest_class: ActiveRecord::Encryption.config.hash_digest_class) ⇒ KeyGenerator
constructor
A new instance of KeyGenerator.
Constructor Details
#initialize(hash_digest_class: ActiveRecord::Encryption.config.hash_digest_class) ⇒ KeyGenerator
Returns a new instance of KeyGenerator.
11 12 13 |
# File 'lib/active_record/encryption/key_generator.rb', line 11 def initialize(hash_digest_class: ActiveRecord::Encryption.config.hash_digest_class) @hash_digest_class = hash_digest_class end |
Instance Attribute Details
#hash_digest_class ⇒ Object (readonly)
Returns the value of attribute hash_digest_class.
9 10 11 |
# File 'lib/active_record/encryption/key_generator.rb', line 9 def hash_digest_class @hash_digest_class end |
Instance Method Details
#derive_key_from(password, length: key_length) ⇒ Object
Derives a key from the given password. The key will have a size in bytes of :length
(configured Cipher
‘s length by default)
The generated key will be salted with the value of ActiveRecord::Encryption.key_derivation_salt
38 39 40 41 |
# File 'lib/active_record/encryption/key_generator.rb', line 38 def derive_key_from(password, length: key_length) ActiveSupport::KeyGenerator.new(password, hash_digest_class: hash_digest_class) .generate_key(key_derivation_salt, length) end |
#generate_random_hex_key(length: key_length) ⇒ Object
Returns a random key in hexadecimal format. The key will have a size in bytes of :length
(configured Cipher
‘s length by default)
Hexadecimal format is handy for representing keys as printable text. To maximize the space of characters used, it is good practice including not printable characters. Hexadecimal format ensures that generated keys are representable with plain text
To convert back to the original string with the desired length:
[ value ].pack("H*")
30 31 32 |
# File 'lib/active_record/encryption/key_generator.rb', line 30 def generate_random_hex_key(length: key_length) generate_random_key(length: length).unpack("H*")[0] end |
#generate_random_key(length: key_length) ⇒ Object
Returns a random key. The key will have a size in bytes of :length
(configured Cipher
‘s length by default)
16 17 18 |
# File 'lib/active_record/encryption/key_generator.rb', line 16 def generate_random_key(length: key_length) SecureRandom.random_bytes(length) end |