Sha256: 7e434f52d7639e06efe8610ecc274e5e5a1940ea2c549e29d55ae02455642737

Contents?: true

Size: 966 Bytes

Versions: 1

Compression:

Stored size: 966 Bytes

Contents

module Keyring
  class Key
    attr_reader :id, :signing_key, :encryption_key

    def initialize(id, key, key_size)
      @id = Integer(id)
      @key_size = key_size
      @encryption_key, @signing_key = parse(key)
    end

    def to_s
      "#<AttrKeyring::Key id=#{id.inspect}>"
    end
    alias_method :inspect, :to_s

    private def parse(key)
      expected_key_size = @key_size * 2

      secret = if key.bytesize == expected_key_size
                 key
               else
                 begin
                   Base64.strict_decode64(key)
                 rescue ArgumentError
                   Base64.decode64(key)
                 end
               end

      raise InvalidSecret, "Secret must be #{expected_key_size} bytes, instead got #{secret.bytesize}" unless secret.bytesize == expected_key_size

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

      [encryption_key, signing_key]
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
attr_keyring-0.5.0 lib/keyring/key.rb