class Keyring::Key

Attributes

encryption_key[R]
id[R]
signing_key[R]

Public Class Methods

new(id, key, key_size) click to toggle source
# File lib/keyring/key.rb, line 7
def initialize(id, key, key_size)
  @id = Integer(id)
  @key_size = key_size
  @encryption_key, @signing_key = parse_key(key)
end

Public Instance Methods

inspect()
Alias for: to_s
to_s() click to toggle source
# File lib/keyring/key.rb, line 13
def to_s
  "#<Keyring::Key id=#{id.inspect}>"
end
Also aliased as: inspect

Private Instance Methods

decode_key(key, key_size) click to toggle source
# File lib/keyring/key.rb, line 32
        def decode_key(key, key_size)
  if key.bytesize == key_size
    key
  else
    begin
      Base64.strict_decode64(key)
    rescue ArgumentError
      Base64.decode64(key)
    end
  end
end
parse_key(key) click to toggle source
# File lib/keyring/key.rb, line 18
        def parse_key(key)
  expected_key_size = @key_size * 2
  secret = decode_key(key, expected_key_size)

  unless secret.bytesize == expected_key_size
    raise InvalidSecret, "Secret must be #{expected_key_size} bytes, instead got #{secret.bytesize}" # rubocop:disable Metrics/LineLength
  end

  signing_key = secret[0...@key_size]
  encryption_key = secret[@key_size..-1]

  [encryption_key, signing_key]
end