Class: HrrRbSsh::Transport::ServerHostKeyAlgorithm::SshRsa

Inherits:
HrrRbSsh::Transport::ServerHostKeyAlgorithm show all
Defined in:
lib/hrr_rb_ssh/transport/server_host_key_algorithm/ssh_rsa.rb

Constant Summary collapse

NAME =
'ssh-rsa'
SECRET_KEY =
"-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEA71zHt9RvbXmxuOCWPKR65iBHO+a8M7Mfo4vRCs/dorZN7XL1\nlYwjclvo0X1T39BRX+qJ2m4HB+7Vlef9YF7spYKm6czuSCYmJjD5X+PW5QYSGED1\nfFSXwjTdDwJi1OKS4kL0Dd6zcSjlFxfjVLNCyUcix36XgDpoBLBFkDZd5P2ow3J6\nWNanBasXrckjCk4M3kFclvmxl1O56bbV9VZq51ZqLjv/ZhOrE3WIPfrJGdZssODa\nDnI6tM1puwZGVba9VaI8FfnuJcacJ3T9oEoXPY5W+kPZAw6dOARXnJTg+oZk/dBD\nBgej0aMO+1XM7HKz5BiqbhGGSXGas5zoefHbNwIDAQABAoIBAQDP2aQ/2EOuL8eI\n/9TV8goafRr+RB1XU4r8zHOIzPnryhyfPX1OEDPToUXpa8gCiPWwsYxlVbfbRqTH\nmHzoS2V5T5u7WE3t7tqfvVU+1C0OERhzYS0KeraRWLBA0VSbAeiEe5lL1f/CGr3c\nMM0iBsvO1mu4ChBqs80RjTPKx7r/FStpWtqWN4kn+Bhj06qCqhftnudZdYFTHa/G\nia4YWOUH6dSIZKpE7oG53Gm/2ZdK2YiAgMOdrTQkvRzxuIa/RHaETj21hKpetmI7\nTfS26RbU2t1Bf/fdFhtTqoAz+CrZEH7Z407ZO45fdc31zJAFIK2Zf3CDVnKwih3t\nO0bEVSSpAoGBAP/zEWaTivdQtcemMRhFQBySgnStov+dsxnGBnTkWxVIU7VoFgyg\nmgNRlWUxMf12mlfqBVRpx0/ALggHf5KFmbAZ+3qvKSLmfIVM5E9l5NKbZnCWtIqq\n1DN9kHPPOZn3uYvOs9Cpn7S6sa+rVZ82Mg8EZMsPesvFMOjrgNbMQxt7AoGBAO9o\n38VM0+M09sAgOhmqv+Esa2gUGw5n18o/fdmlZdnA+D2ntgr70AD6JUCSYrZgTJRq\nHNMuKrbD6HyaPjVaxYJVCFJIcfV+nViZdE8cHh9WXQ/JP/T6nvNajCC8StvoQg4I\nvAZFTzChoe2yrOsWXezn9QAecQ8L2WHDLImpayR1AoGADoc1jaUCVld2egas8ru7\nj+OhFA5nGitRZz0eULRFl0eruLhXyA+1rkqLOFs6gzCgQi0+cDQw5A38jugeDasX\nti9DXwtiQmDi4I4kx3z5KBs6DVoAlX5s3R9be7dfhaXSGmV5P3bhYdjXDSmkio0A\n+mk9b2lJhxeCVzZG8epWRNECgYB2KzGoVQ+Q6ieRFVcYLCuhnSc2rBXeumrMrSIV\nN4paPOFKrWkxarF0igOxJ5AJrOafqvCnW/ZBV9l9BzUFaNRsTERbON7m6aQIg1Xh\nZmOH3Dz6+b7T0JB8VYks70OT38Qa4TzNa5B21JD0nmizcMrTkHphoKT1ZEfb9VYa\nbMExsQKBgQDoSpo/ZP8+dwR1A/gcu2K5Ie47c3WgKw7qQMarxqzTeS8Xu6/KAn+J\nKa2zIvoHhxlhXFBRhp+FIaFlYRR38gHeNxCoUylpboCUyMkHOsOP43AiKsmbNK20\nvzTNM3SFzgt3bHkdEtDLc64aoBX+dHOot6u71XLZrshnHPtiZ0C/ZA==\n-----END RSA PRIVATE KEY-----\n"
KEY_FORMAT_DEFINITION =
[
  ['string', 'ssh-rsa'],
  ['mpint',  'e'],
  ['mpint',  'n'],
]
SIGN_DEFINITION =
[
  ['string', 'ssh-rsa'],
  ['string', 'rsa_signature_blob'],
]

Instance Method Summary collapse

Methods inherited from HrrRbSsh::Transport::ServerHostKeyAlgorithm

[], list, name_list

Constructor Details

#initializeSshRsa

Returns a new instance of SshRsa.



54
55
56
57
58
# File 'lib/hrr_rb_ssh/transport/server_host_key_algorithm/ssh_rsa.rb', line 54

def initialize
  super

  @rsa = OpenSSL::PKey::RSA.new SECRET_KEY
end

Instance Method Details

#decode(definition, payload) ⇒ Object



67
68
69
70
71
72
73
74
75
# File 'lib/hrr_rb_ssh/transport/server_host_key_algorithm/ssh_rsa.rb', line 67

def decode definition, payload
  payload_io = StringIO.new payload, 'r'
  definition.map{ |data_type, field_name|
    [
      field_name,
      HrrRbSsh::Transport::DataType[data_type].decode( payload_io )
    ]
  }.to_h
end

#encode(definition, payload) ⇒ Object



60
61
62
63
64
65
# File 'lib/hrr_rb_ssh/transport/server_host_key_algorithm/ssh_rsa.rb', line 60

def encode definition, payload
  definition.map{ |data_type, field_name|
    field_value = if payload[field_name].instance_of? ::Proc then payload[field_name].call else payload[field_name] end
    HrrRbSsh::Transport::DataType[data_type].encode( field_value )
  }.join
end

#server_public_host_keyObject



77
78
79
80
81
82
83
84
# File 'lib/hrr_rb_ssh/transport/server_host_key_algorithm/ssh_rsa.rb', line 77

def server_public_host_key
  payload = {
    'ssh-rsa' => 'ssh-rsa',
    'e'       => @rsa.e.to_i,
    'n'       => @rsa.n.to_i,
  }
  encode KEY_FORMAT_DEFINITION, payload
end

#sign(digest, data) ⇒ Object



86
87
88
89
90
91
92
# File 'lib/hrr_rb_ssh/transport/server_host_key_algorithm/ssh_rsa.rb', line 86

def sign digest, data
  payload = {
    'ssh-rsa'            => 'ssh-rsa',
    'rsa_signature_blob' => @rsa.sign(digest, data),
  }
  encode SIGN_DEFINITION, payload
end

#verify(digest, sign, data) ⇒ Object



94
95
96
97
# File 'lib/hrr_rb_ssh/transport/server_host_key_algorithm/ssh_rsa.rb', line 94

def verify digest, sign, data
  payload = decode SIGN_DEFINITION, sign
  payload['ssh-rsa'] == 'ssh-rsa' && @rsa.verify(digest, payload['rsa_signature_blob'], data)
end