Sha256: 12c85b71d3cbe3d7bd74d25a655cc3ead7d3c0b0204f17ec8546eda5dfc47176

Contents?: true

Size: 1.87 KB

Versions: 3

Compression:

Stored size: 1.87 KB

Contents

# frozen_string_literal: true

require 'pathname'
require 'securerandom'

module Chamber
class  KeyPair
  attr_accessor :key_file_path,
                :namespace,
                :passphrase

  def initialize(options = {})
    self.namespace     = options[:namespace]
    self.passphrase    = options.fetch(:passphrase, SecureRandom.uuid)
    self.key_file_path = Pathname.new(options.fetch(:key_file_path))
  end

  def encrypted_private_key_passphrase_filepath
    key_file_path + "#{encrypted_private_key_filename}.pass"
  end

  def encrypted_private_key_filepath
    key_file_path + encrypted_private_key_filename
  end

  def unencrypted_private_key_filepath
    key_file_path + unencrypted_private_key_filename
  end

  def public_key_filepath
    key_file_path + public_key_filename
  end

  def encrypted_private_key_pem
    encrypted_private_key
  end

  def unencrypted_private_key_pem
    unencrypted_private_key.to_pem
  end

  def public_key_pem
    public_key.to_pem
  end

  def encrypted_private_key_filename
    "#{base_key_filename}.enc"
  end

  def unencrypted_private_key_filename
    "#{base_key_filename}.pem"
  end

  def public_key_filename
    "#{base_key_filename}.pub.pem"
  end

  private

  def encrypted_private_key
    @encrypted_private_key ||= \
      unencrypted_private_key.export(encryption_cipher, passphrase)
  end

  def unencrypted_private_key
    @unencrypted_private_key ||= OpenSSL::PKey::RSA.new(2048)
  end

  def public_key
    @public_key ||= unencrypted_private_key.public_key
  end

  def encryption_cipher
    @encryption_cipher ||= OpenSSL::Cipher.new('AES-128-CBC')
  end

  def base_key_filename
    @base_key_filename ||= [
                             '.chamber',
                             namespace ? namespace.tr('-.', '') : nil,
                           ].
                             compact.
                             join('.')
  end
end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
chamber-2.13.1 lib/chamber/key_pair.rb
chamber-2.13.0 lib/chamber/key_pair.rb
chamber-2.12.5 lib/chamber/key_pair.rb