Module: Travis::Tools::SSLKey

Defined in:
lib/travis/tools/ssl_key.rb

Class Method Summary collapse

Class Method Details

.generate_rsa(size = 2048) ⇒ Object



11
12
13
# File 'lib/travis/tools/ssl_key.rb', line 11

def generate_rsa(size = 2048)
  OpenSSL::PKey::RSA.generate(size)
end

.has_passphrase?(key) ⇒ Boolean

Returns:

  • (Boolean)


22
23
24
25
26
27
# File 'lib/travis/tools/ssl_key.rb', line 22

def has_passphrase?(key)
  OpenSSL::PKey::RSA.new(key, key[0..1023])
  false
rescue OpenSSL::OpenSSLError
  true
end

.public_rsa_key(string) ⇒ Object



15
16
17
18
19
20
# File 'lib/travis/tools/ssl_key.rb', line 15

def public_rsa_key(string)
  @to_rsa ||= OpenSSL::PKey::RSA.new(string)
rescue OpenSSL::PKey::RSAError
  public_key = string.gsub('RSA PUBLIC KEY', 'PUBLIC KEY')
  @to_rsa = OpenSSL::PKey::RSA.new(public_key)
end

.remove_passphrase(key, passphrase) ⇒ Object



29
30
31
32
33
# File 'lib/travis/tools/ssl_key.rb', line 29

def remove_passphrase(key, passphrase)
  OpenSSL::PKey::RSA.new(key, passphrase).to_s
rescue OpenSSL::PKey::RSAError
  false
end

.rsa_ssh(key) ⇒ Object



35
36
37
# File 'lib/travis/tools/ssl_key.rb', line 35

def rsa_ssh(key)
  ['ssh-rsa ', "\0\0\0\assh-rsa#{sized_bytes(key.e)}#{sized_bytes(key.n)}"].pack('a*m').gsub("\n", '')
end

.sized_bytes(value) ⇒ Object



39
40
41
42
# File 'lib/travis/tools/ssl_key.rb', line 39

def sized_bytes(value)
  bytes = to_byte_array(value.to_i)
  [bytes.size, *bytes].pack('NC*')
end

.to_byte_array(num, *significant) ⇒ Object



44
45
46
47
48
# File 'lib/travis/tools/ssl_key.rb', line 44

def to_byte_array(num, *significant)
  return significant if num.between?(-1, 0) && (significant[0][7] == num[7])

  to_byte_array(*num.divmod(256)) + significant
end