Class: Cryptor::SymmetricEncryption::SecretKey
- Inherits:
-
Object
- Object
- Cryptor::SymmetricEncryption::SecretKey
- Defined in:
- lib/cryptor/symmetric_encryption/secret_key.rb
Overview
Secret key used to encrypt plaintexts
Instance Attribute Summary collapse
-
#cipher ⇒ Object
readonly
Returns the value of attribute cipher.
Class Method Summary collapse
-
.random_key(cipher) ⇒ Cryptor::SecretKey
Generate a random secret key.
Instance Method Summary collapse
-
#decrypt(ciphertext) ⇒ String
Decrypt ciphertext using this key.
-
#encrypt(plaintext) ⇒ String
Encrypt a plaintext under this key.
-
#fingerprint ⇒ String
Fingerprint of this key’s secret URI.
-
#initialize(uri_string) ⇒ Cryptor::SecretKey
constructor
Create a new SecretKey object from a URI.
-
#inspect ⇒ String
Inspect this key.
-
#to_secret_uri ⇒ String
Serialize SecretKey object to a URI.
Constructor Details
#initialize(uri_string) ⇒ Cryptor::SecretKey
Create a new SecretKey object from a URI
39 40 41 42 43 44 45 46 47 48 |
# File 'lib/cryptor/symmetric_encryption/secret_key.rb', line 39 def initialize(uri_string) uri = URI.parse(uri_string.to_s) fail ArgumentError, "invalid scheme: #{uri.scheme}" unless uri.scheme == 'secret.key' components = uri.path.match(/^\/([^;]+);(.+)$/) fail ArgumentError, "couldn't parse cipher name from secret URI" unless components @cipher = Cryptor::SymmetricEncryption::Cipher[components[1]] @secret_key = Cryptor::Encoding.decode(components[2]) end |
Instance Attribute Details
#cipher ⇒ Object (readonly)
Returns the value of attribute cipher.
10 11 12 |
# File 'lib/cryptor/symmetric_encryption/secret_key.rb', line 10 def cipher @cipher end |
Class Method Details
.random_key(cipher) ⇒ Cryptor::SecretKey
Generate a random secret key
17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/cryptor/symmetric_encryption/secret_key.rb', line 17 def self.random_key(cipher) case cipher when Cryptor::SymmetricEncryption::Cipher # we're good when Symbol cipher = Cryptor::SymmetricEncryption::Cipher[cipher] else fail ArgumentError, "invalid cipher: #{cipher}" end bytes = SecureRandom.random_bytes(cipher.key_bytes) base64 = Cryptor::Encoding.encode(bytes) new "secret.key:///#{cipher.algorithm};#{base64}" end |
Instance Method Details
#decrypt(ciphertext) ⇒ String
Decrypt ciphertext using this key
79 80 81 |
# File 'lib/cryptor/symmetric_encryption/secret_key.rb', line 79 def decrypt(ciphertext) @cipher.decrypt(@secret_key, ciphertext) end |
#encrypt(plaintext) ⇒ String
Encrypt a plaintext under this key
70 71 72 |
# File 'lib/cryptor/symmetric_encryption/secret_key.rb', line 70 def encrypt(plaintext) @cipher.encrypt(@secret_key, plaintext) end |
#fingerprint ⇒ String
Fingerprint of this key’s secret URI
60 61 62 63 |
# File 'lib/cryptor/symmetric_encryption/secret_key.rb', line 60 def fingerprint digest = Digest::SHA256.digest(to_secret_uri) "ni:///sha-256;#{Cryptor::Encoding.encode(digest)}" end |
#inspect ⇒ String
Inspect this key
86 87 88 89 90 |
# File 'lib/cryptor/symmetric_encryption/secret_key.rb', line 86 def inspect "#<#{self.class}:0x#{object_id.to_s(16)} " \ "cipher=#{cipher.algorithm} " \ "fingerprint=#{fingerprint}>" end |