class HrrRbSsh::Algorithm::Publickey::SshRsa

Constants

DIGEST
NAME

Public Class Methods

new(arg, logger: nil) click to toggle source
# File lib/hrr_rb_ssh/algorithm/publickey/ssh_rsa.rb, line 15
def initialize arg, logger: nil
  self.logger = logger
  begin
    new_by_key_str arg
  rescue OpenSSL::PKey::RSAError
    new_by_public_key_blob arg
  end
end

Public Instance Methods

new_by_key_str(key_str) click to toggle source
# File lib/hrr_rb_ssh/algorithm/publickey/ssh_rsa.rb, line 24
def new_by_key_str key_str
  @publickey = OpenSSL::PKey::RSA.new(key_str)
end
new_by_public_key_blob(public_key_blob) click to toggle source
# File lib/hrr_rb_ssh/algorithm/publickey/ssh_rsa.rb, line 28
def new_by_public_key_blob public_key_blob
  public_key_blob_h = PublicKeyBlob.new(logger: logger).decode public_key_blob
  @publickey = OpenSSL::PKey::RSA.new
  if @publickey.respond_to?(:set_key)
    @publickey.set_key public_key_blob_h[:'n'], public_key_blob_h[:'e'], nil
  else
    @publickey.n = public_key_blob_h[:'n']
    @publickey.e = public_key_blob_h[:'e']
  end
end
sign(signature_blob) click to toggle source
# File lib/hrr_rb_ssh/algorithm/publickey/ssh_rsa.rb, line 52
def sign signature_blob
  signature_h = {
    :'public key algorithm name' => self.class::NAME,
    :'signature blob'            => @publickey.sign(self.class::DIGEST, signature_blob),
  }
  Signature.new(logger: logger).encode signature_h
end
to_pem() click to toggle source
# File lib/hrr_rb_ssh/algorithm/publickey/ssh_rsa.rb, line 39
def to_pem
  @publickey.public_key.to_pem
end
to_public_key_blob() click to toggle source
# File lib/hrr_rb_ssh/algorithm/publickey/ssh_rsa.rb, line 43
def to_public_key_blob
  public_key_blob_h = {
    :'public key algorithm name' => self.class::NAME,
    :'e'                         => @publickey.e.to_i,
    :'n'                         => @publickey.n.to_i,
  }
  PublicKeyBlob.new(logger: logger).encode public_key_blob_h
end
verify(signature, signature_blob) click to toggle source
# File lib/hrr_rb_ssh/algorithm/publickey/ssh_rsa.rb, line 60
def verify signature, signature_blob
  signature_h = Signature.new(logger: logger).decode signature
  signature_h[:'public key algorithm name'] == self.class::NAME && @publickey.verify(self.class::DIGEST, signature_h[:'signature blob'], signature_blob)
end