30 lines
751 B
Ruby
30 lines
751 B
Ruby
module Travis::API::V3
|
|
class Models::SSLKey < Model
|
|
belongs_to :repository
|
|
|
|
serialize :private_key, Travis::Settings::EncryptedColumn.new
|
|
|
|
def encoded_public_key
|
|
key = build_key.public_key
|
|
['ssh-rsa ', "\0\0\0\assh-rsa#{sized_bytes(key.e)}#{sized_bytes(key.n)}"].pack('a*m').gsub("\n", '')
|
|
end
|
|
|
|
private
|
|
|
|
def build_key
|
|
@build_key ||= OpenSSL::PKey::RSA.new(private_key)
|
|
end
|
|
|
|
def sized_bytes(value)
|
|
bytes = to_byte_array(value.to_i)
|
|
[bytes.size, *bytes].pack('NC*')
|
|
end
|
|
|
|
def to_byte_array(num, *significant)
|
|
return significant if num.between?(-1, 0) and significant[0][7] == num[7]
|
|
to_byte_array(*num.divmod(256)) + significant
|
|
end
|
|
|
|
end
|
|
end
|