module Google::APIClient::KeyUtils

Helper for loading keys from the PKCS12 files downloaded when setting up service accounts at the APIs Console.

Public Class Methods

load_from_pem(keyfile, passphrase) click to toggle source

Loads a key from a PEM file.

@param [String] keyfile

Path of the PEM file to load. If not a path to an actual file,
assumes the string is the content of the file itself.

@param [String] passphrase

Passphrase for unlocking the private key

@return [OpenSSL::PKey] The private key for signing assertions.

# File lib/google/api_client/auth/key_utils.rb, line 51
def self.load_from_pem(keyfile, passphrase)
  load_key(keyfile, passphrase) do | content, pass_phrase|
    OpenSSL::PKey::RSA.new(content, pass_phrase)
  end
end
load_from_pkcs12(keyfile, passphrase) click to toggle source

Loads a key from PKCS12 file, assuming a single private key is present.

@param [String] keyfile

Path of the PKCS12 file to load. If not a path to an actual file,
assumes the string is the content of the file itself.

@param [String] passphrase

Passphrase for unlocking the private key

@return [OpenSSL::PKey] The private key for signing assertions.

# File lib/google/api_client/auth/key_utils.rb, line 33
def self.load_from_pkcs12(keyfile, passphrase)
  load_key(keyfile, passphrase) do |content, pass_phrase|
    OpenSSL::PKCS12.new(content, pass_phrase).key
  end
end

Private Class Methods

load_key(keyfile, passphrase, &block) click to toggle source

Helper for loading keys from file or memory. Accepts a block to handle the specific file format.

@param [String] keyfile

Path of thefile to load. If not a path to an actual file,
assumes the string is the content of the file itself.

@param [String] passphrase

Passphrase for unlocking the private key

@yield [String, String]

Key file & passphrase to extract key from

@yieldparam [String] keyfile

Contents of the file

@yieldparam [String] passphrase

Passphrase to unlock key

@yieldreturn [OpenSSL::PKey]

Private key

@return [OpenSSL::PKey] The private key for signing assertions.

# File lib/google/api_client/auth/key_utils.rb, line 79
def self.load_key(keyfile, passphrase, &block)
  begin
    begin
      content = File.open(keyfile, 'rb') { |io| io.read }
    rescue
      content = keyfile
    end
    block.call(content, passphrase)
  rescue OpenSSL::OpenSSLError
    raise ArgumentError.new("Invalid keyfile or passphrase")
  end
end