Sha256: 923fc7a78e257e1fbf4245256449c1947f59c1c15c5b5e6ed1dcbe29320889a2

Contents?: true

Size: 1.43 KB

Versions: 3

Compression:

Stored size: 1.43 KB

Contents

# encoding: utf-8

require 'openssl'
require 'hashie/mash'

module Inspec::Resources
  class RsaKey < Inspec.resource(1)
    name 'key_rsa'
    supports platform: 'unix'
    supports platform: 'windows'
    desc 'public/private RSA key pair test'
    example "
      describe key_rsa('/etc/pki/www.mywebsite.com.key') do
        its('public_key') { should match /BEGIN RSA PUBLIC KEY/ }
      end

      describe key_rsa('/etc/pki/www.mywebsite.com.key', 'passphrase') do
        it { should be_private }
        it { should be_public }
      end
    "

    def initialize(keypath, passphrase = nil)
      @key_path = keypath
      @key_file = inspec.file(@key_path)
      @key = nil
      @passphrase = passphrase

      return skip_resource "Unable to find key file #{@key_path}" unless @key_file.exist?

      begin
        @key = OpenSSL::PKey.read(@key_file.content, @passphrase)
      rescue OpenSSL::PKey::RSAError => _
        return skip_resource "Unable to load key file #{@key_path}"
      end
    end

    def public?
      return if @key.nil?
      @key.public?
    end

    def public_key
      return if @key.nil?
      @key.public_key.to_s
    end

    def private?
      return if @key.nil?
      @key.private?
    end

    def private_key
      return if @key.nil?
      @key.to_s
    end

    def key_length
      return if @key.nil?
      @key.public_key.n.num_bytes * 8
    end

    def to_s
      "rsa_key #{@key_path}"
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
inspec-2.1.0 lib/resources/key_rsa.rb
inspec-2.0.45 lib/resources/key_rsa.rb
inspec-2.0.16 lib/resources/key_rsa.rb