Sha256: bb28bd292fddc15be745b98f493dc4bd5852651663ee1615780c2def6b894c22

Contents?: true

Size: 1.17 KB

Versions: 3

Compression:

Stored size: 1.17 KB

Contents

class CredStash::CipherKey
  DEFAULT_KMS_KEY_ID = "alias/credstash".freeze

  attr_reader :data_key, :hmac_key, :wrapped_key

  def self.generate(client: Aws::KMS::Client.new, kms_key_id: nil,
                    context: {})
    res = client.generate_data_key(
      key_id: kms_key_id || DEFAULT_KMS_KEY_ID,
      number_of_bytes: 64,
      encryption_context: context
    )
    new(
      data_key: res.plaintext[0...32],
      hmac_key: res.plaintext[32..-1],
      wrapped_key: res.ciphertext_blob
    )
  end

  def self.decrypt(wrapped_key, client: Aws::KMS::Client.new, context: {})
    res = client.decrypt(ciphertext_blob: wrapped_key, encryption_context: context)
    new(
      data_key: res.plaintext[0...32],
      hmac_key: res.plaintext[32..-1],
      wrapped_key: wrapped_key
    )
  end

  def initialize(data_key:, hmac_key:, wrapped_key:)
    @data_key = data_key
    @hmac_key = hmac_key
    @wrapped_key = wrapped_key
  end

  def hmac(message)
    OpenSSL::HMAC.hexdigest("SHA256", hmac_key, message)
  end

  def encrypt(message)
    CredStash::Cipher.new(data_key).encrypt(message)
  end

  def decrypt(message)
    CredStash::Cipher.new(data_key).decrypt(message)
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rcredstash-0.11.0 lib/cred_stash/cipher_key.rb
rcredstash-0.10.0 lib/cred_stash/cipher_key.rb
rcredstash-0.9.0 lib/cred_stash/cipher_key.rb