Subversion Repositories Kolibri OS

Rev

Rev 9071 | Rev 9112 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
6419 hidnplayr 1
;    ssh.asm - SSH client for KolibriOS
2
;
9070 hidnplayr 3
;    Copyright (C) 2015-2021 Jeffrey Amelynck
6419 hidnplayr 4
;
5
;    This program is free software: you can redistribute it and/or modify
6
;    it under the terms of the GNU General Public License as published by
7
;    the Free Software Foundation, either version 3 of the License, or
8
;    (at your option) any later version.
9
;
10
;    This program is distributed in the hope that it will be useful,
11
;    but WITHOUT ANY WARRANTY; without even the implied warranty of
12
;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
;    GNU General Public License for more details.
14
;
15
;    You should have received a copy of the GNU General Public License
16
;    along with this program.  If not, see .
17
 
18
format binary as ""
19
 
9106 hidnplayr 20
__DEBUG__               = 1
21
__DEBUG_LEVEL__         = 2             ; 1: Everything, including sensitive information, 2: Debugging, 3: Errors only
6419 hidnplayr 22
 
9106 hidnplayr 23
BUFFERSIZE              = 64*1024       ; Must be at least 32K according rfc4253#section-6.1
24
PACKETSIZE              = 32*1024       ; Must be at least 32K according rfc4253#section-6.1
25
MAX_BITS                = 8192
6419 hidnplayr 26
 
27
DH_PRIVATE_KEY_SIZE     = 256
9106 hidnplayr 28
MAX_INPUT_LENGTH        = 255 ;;; WHAT WAS THIS AGAIN ?!
29
MAX_USERNAME_LENGTH     = 256
30
MAX_PASSWORD_LENGTH     = 256
31
MAX_HOSTNAME_LENGTH     = 4096
32
MAX_PUBLIC_KEY_SIZE     = 4096
6419 hidnplayr 33
 
34
use32
35
 
36
        db      'MENUET01'      ; signature
37
        dd      1               ; header version
38
        dd      start           ; entry point
39
        dd      i_end           ; initialized size
6922 hidnplayr 40
        dd      mem+65536       ; required memory
41
        dd      mem+65536       ; stack pointer
6469 hidnplayr 42
        dd      params          ; parameters
6419 hidnplayr 43
        dd      0               ; path
44
 
45
include '../../macros.inc'
6469 hidnplayr 46
;include '../../struct.inc'
6419 hidnplayr 47
purge mov,add,sub
48
include '../../proc32.inc'
49
include '../../dll.inc'
50
include '../../debug-fdo.inc'
51
include '../../network.inc'
6469 hidnplayr 52
include '../../develop/libraries/libcrash/trunk/libcrash.inc'
6419 hidnplayr 53
 
54
; macros for network byte order
55
macro dd_n op {
56
   dd 0 or (((op) and 0FF000000h) shr 24) or \
57
           (((op) and 000FF0000h) shr  8) or \
58
           (((op) and 00000FF00h) shl  8) or \
59
           (((op) and 0000000FFh) shl 24)
60
}
61
 
62
macro dw_n op {
63
   dw 0 or (((op) and 0FF00h) shr 8) or \
64
           (((op) and 000FFh) shl 8)
65
}
66
 
9106 hidnplayr 67
macro str string {
68
    local .start, .stop
69
 
70
    dd_n (.stop-.start)
71
 
72
    .start db string
73
    .stop:
74
}
75
 
6469 hidnplayr 76
proc dump_hex _ptr, _length
77
if __DEBUG_LEVEL__ <= 1
78
        pushad
79
 
80
        mov     esi, [_ptr]
81
        mov     ecx, [_length]
82
  .next_dword:
83
        lodsd
84
        bswap   eax
9070 hidnplayr 85
        DEBUGF  1,'%x', eax
6469 hidnplayr 86
        loop    .next_dword
87
        DEBUGF  1,'\n'
88
 
89
        popad
9070 hidnplayr 90
end if
6469 hidnplayr 91
        ret
92
endp
93
 
9106 hidnplayr 94
macro DEBUGM l, s, m {
95
if __DEBUG__
96
        DEBUGF  l, s
97
  if l >=__DEBUG_LEVEL__
98
        stdcall mpint_print, m
99
  end if
100
end if
101
}
6469 hidnplayr 102
 
9106 hidnplayr 103
include 'mpint.inc'
104
include 'seed.inc'
105
include 'random.inc'
6469 hidnplayr 106
 
9106 hidnplayr 107
include 'aes256.inc'
108
include 'aes256-ctr.inc'
109
include 'aes256-cbc.inc'
6469 hidnplayr 110
 
9106 hidnplayr 111
include 'blowfish.inc'
112
include 'blowfish-ctr.inc'
113
include 'blowfish-cbc.inc'
6469 hidnplayr 114
 
9106 hidnplayr 115
include 'hmac_sha256.inc'
116
include 'hmac_sha1.inc'
117
include 'hmac_md5.inc'
6469 hidnplayr 118
 
9106 hidnplayr 119
include 'sshlib.inc'
6469 hidnplayr 120
 
9106 hidnplayr 121
include 'sshlib_mcodes.inc'
122
include 'sshlib_transport.inc'
123
include 'sshlib_connection.inc'
124
include 'sshlib_dh_gex.inc'
125
include 'sshlib_host.inc'
126
include 'sshlib_channel.inc'
127
include 'sshlib_userauth.inc'
6469 hidnplayr 128
 
9106 hidnplayr 129
include 'encodings.inc'         ; Unfortunately, we dont have UTF-8 capable console yet :(
9070 hidnplayr 130
 
6419 hidnplayr 131
start:
132
        mcall   68, 11          ; Init heap
133
 
6469 hidnplayr 134
        DEBUGF  2, "SSH: Loading libraries\n"
6419 hidnplayr 135
        stdcall dll.Load, @IMPORT
136
        test    eax, eax
9106 hidnplayr 137
        jnz     main.fail
6419 hidnplayr 138
 
6469 hidnplayr 139
        DEBUGF  2, "SSH: Init PRNG\n"
9071 hidnplayr 140
        call    create_seed
6419 hidnplayr 141
        call    init_random
142
 
6469 hidnplayr 143
        DEBUGF  2, "SSH: Init Console\n"
6419 hidnplayr 144
        invoke  con_start, 1
9106 hidnplayr 145
        invoke  con_init, 80, 25, 800, 250, title
6419 hidnplayr 146
 
9106 hidnplayr 147
        cmp     byte[params], 0
148
        jne     main.connect
6419 hidnplayr 149
 
150
main:
151
        invoke  con_cls
152
; Welcome user
9106 hidnplayr 153
        invoke  con_write_asciiz, str1a
154
  .prompt:
155
        invoke  con_write_asciiz, str1b
156
; Reset window title
157
        invoke  con_set_title, title
158
; Write prompt
6419 hidnplayr 159
        invoke  con_write_asciiz, str2
160
; read string
9106 hidnplayr 161
        mov     esi, params
162
        invoke  con_gets, esi, MAX_HOSTNAME_LENGTH
6419 hidnplayr 163
; check for exit
164
        test    eax, eax
9106 hidnplayr 165
        jz      .done
6419 hidnplayr 166
        cmp     byte[esi], 10
9106 hidnplayr 167
        jz      .done
6419 hidnplayr 168
 
9106 hidnplayr 169
  .connect:
170
        stdcall sshlib_connect, ssh_con, params
171
        cmp     eax, 0
172
        jg      .prompt
173
        jl      .error
6419 hidnplayr 174
 
9106 hidnplayr 175
  .login:
176
        mcall   68, 12, (MAX_USERNAME_LENGTH + MAX_PASSWORD_LENGTH)
6419 hidnplayr 177
        test    eax, eax
9106 hidnplayr 178
        jz      .done   ; ERR_NOMEM
179
        mov     esi, eax
180
        lea     edi, [eax + MAX_USERNAME_LENGTH]
6419 hidnplayr 181
 
9106 hidnplayr 182
; Get username
9070 hidnplayr 183
        invoke  con_write_asciiz, str12
9106 hidnplayr 184
        invoke  con_gets, esi, MAX_USERNAME_LENGTH
9070 hidnplayr 185
        test    eax, eax
9106 hidnplayr 186
;;        jz      .con_closed_must_clear
6469 hidnplayr 187
 
9106 hidnplayr 188
; Get password
189
        invoke  con_write_asciiz, str13a
190
        invoke  con_gets, edi, MAX_PASSWORD_LENGTH
9070 hidnplayr 191
        test    eax, eax
9106 hidnplayr 192
;;        jz      .con_closed_must_clear
193
        invoke  con_write_asciiz, str13b
9070 hidnplayr 194
 
9106 hidnplayr 195
; Authenticate
196
        stdcall sshlib_userauth_password, ssh_con, esi, edi
197
; Clear and free username and password
198
  .clear:
9070 hidnplayr 199
        push    eax
9106 hidnplayr 200
        mov     edx, edi
9070 hidnplayr 201
        xor     eax, eax
9106 hidnplayr 202
        mov     ecx, (MAX_USERNAME_LENGTH + MAX_PASSWORD_LENGTH)/4
203
        rep     stosd
9070 hidnplayr 204
        mcall   68, 13, edx
205
        pop     eax
206
 
9106 hidnplayr 207
        cmp     eax, 0
208
        jg      .login          ; Authentication failed
209
        jl      .error          ; An error occured
6469 hidnplayr 210
 
9106 hidnplayr 211
; Open a channel
212
        stdcall sshlib_chan_open, ssh_con
213
        cmp     eax, 0
214
        jg      .prompt         ; Authentication failed
215
        jl      .error          ; An error occured
9070 hidnplayr 216
 
9106 hidnplayr 217
; Start console input handler thread without deactivating the current window
218
; Get active window ID
6419 hidnplayr 219
        mcall   18, 7
220
        push    eax
9106 hidnplayr 221
; Create thread
222
        mcall   51, 1, con_in_thread, mem - 2048
223
; Activate window with given ID
6419 hidnplayr 224
        pop     ecx
225
        mcall   18, 3
226
 
9106 hidnplayr 227
  .loop:
228
        invoke  con_get_flags
229
        test    eax, 0x200                      ; console window closed?
230
        jnz     .con_closed
6419 hidnplayr 231
 
9106 hidnplayr 232
        stdcall sshlib_msg_handler, ssh_con, 0
6469 hidnplayr 233
        cmp     eax, 0
9106 hidnplayr 234
        jle     .check_err
6419 hidnplayr 235
 
9106 hidnplayr 236
        cmp     [ssh_con.rx_buffer.message_code], SSH_MSG_CHANNEL_DATA
6469 hidnplayr 237
        jne     .dump
238
 
9106 hidnplayr 239
        mov     eax, dword[ssh_con.rx_buffer.message_code+5]
6469 hidnplayr 240
        bswap   eax
6419 hidnplayr 241
        DEBUGF  1, 'SSH: got %u bytes of data !\n', eax
242
 
9106 hidnplayr 243
        lea     esi, [ssh_con.rx_buffer.message_code+5+4]
244
        lea     edx, [esi+eax]
245
        lea     edi, [ssh_con.rx_buffer]
246
  @@:
247
        call    get_byte_utf8
248
        stosb
249
        cmp     esi, edx
250
        jb      @r
251
        xor     al, al
252
        stosb
253
 
254
        lea     esi, [ssh_con.rx_buffer]
255
        DEBUGF  3, 'SSH msg: %s\n', esi
256
 
6469 hidnplayr 257
        invoke  con_write_asciiz, esi
9106 hidnplayr 258
        jmp     .loop
6469 hidnplayr 259
 
260
  .dump:
9106 hidnplayr 261
        DEBUGF  3, "SSH: Unsupported message: "
262
        lea     esi, [ssh_con.rx_buffer.message_code]
6469 hidnplayr 263
        mov     ecx, eax
6419 hidnplayr 264
        pusha
9106 hidnplayr 265
  @@:
6419 hidnplayr 266
        lodsb
9106 hidnplayr 267
        DEBUGF  3, "%x ", eax:2
6419 hidnplayr 268
        dec     ecx
269
        jnz     @r
270
        popa
9106 hidnplayr 271
        DEBUGF  3, "\n"
272
        jmp     .loop
6419 hidnplayr 273
 
9106 hidnplayr 274
  .check_err:
275
        jz      .err_conn_closed
276
        cmp     ebx, EWOULDBLOCK
277
        je      .loop
278
        jmp     .err_sock
6469 hidnplayr 279
 
9106 hidnplayr 280
  .con_closed:
281
        ; Send close message on the active channel
282
        stdcall sshlib_send_packet, ssh_con, ssh_msg_channel_close, ssh_msg_channel_close.length, 0
283
        jmp     .done
9070 hidnplayr 284
 
9106 hidnplayr 285
  .error:
286
 
287
; TODO: proper cleanup after error
288
 
289
        cmp     eax, SSHLIB_ERR_NOMEM
290
        je      .done
291
        cmp     eax, SSHLIB_ERR_SOCKET
292
        je      .err_sock
293
        cmp     eax, SSHLIB_ERR_PROTOCOL
294
        je      .err_proto
295
        cmp     eax, SSHLIB_ERR_HOSTNAME
296
        je      .err_hostname
297
        cmp     eax, SSHLIB_ERR_HKEY_VERIFY_FAIL
298
        je      .err_hostkey_fail
299
        cmp     eax, SSHLIB_ERR_HKEY_SIGNATURE
300
        je      .err_hostkey_signature
301
        cmp     eax, SSHLIB_ERR_HKEY_PUBLIC_KEY
302
        je      .err_hostkey
303
 
304
        jmp     .done
305
 
306
 
307
  .err_proto:
308
;        lea     eax, [ssh_con.rx_buffer]
309
;        int3
6419 hidnplayr 310
        invoke  con_write_asciiz, str7
9106 hidnplayr 311
        jmp     .prompt
6419 hidnplayr 312
 
9106 hidnplayr 313
  .err_sock:
6419 hidnplayr 314
        invoke  con_write_asciiz, str6
315
 
9106 hidnplayr 316
        mov     eax, str14
317
        cmp     ebx, ETIMEDOUT
318
        je      .err_sock_detail
319
        mov     eax, str15
320
        cmp     ebx, ECONNREFUSED
321
        je      .err_sock_detail
322
        mov     eax, str16
323
        cmp     ebx, ECONNRESET
324
        je      .err_sock_detail
325
        mov     eax, str17
326
  .err_sock_detail:
327
        invoke  con_write_asciiz, eax
328
        jmp     .prompt
6419 hidnplayr 329
 
9106 hidnplayr 330
  .err_hostname:
6419 hidnplayr 331
        invoke  con_write_asciiz, str10
9106 hidnplayr 332
        jmp     .prompt
6419 hidnplayr 333
 
9106 hidnplayr 334
  .err_conn_closed:
6419 hidnplayr 335
        invoke  con_write_asciiz, str11
9106 hidnplayr 336
        jmp     .prompt
6419 hidnplayr 337
 
9106 hidnplayr 338
  .err_hostkey:
339
        invoke  con_write_asciiz, str19
340
        jmp     .prompt
341
 
342
  .err_hostkey_signature:
343
        invoke  con_write_asciiz, str20
344
        jmp     .prompt
345
 
346
  .err_hostkey_fail:
347
        invoke  con_write_asciiz, str21
348
        jmp     .prompt
349
 
350
  .done:
6419 hidnplayr 351
        invoke  con_exit, 1
9106 hidnplayr 352
  .exit:
6469 hidnplayr 353
        DEBUGF  3, "SSH: Exiting\n"
9106 hidnplayr 354
        mcall   close, [ssh_con.socketnum]
355
  .fail:
6419 hidnplayr 356
        mcall   -1
357
 
358
 
9106 hidnplayr 359
proc sshlib_callback_connecting, con_ptr, connstring_sz
6419 hidnplayr 360
 
9106 hidnplayr 361
        invoke  con_write_asciiz, str3
362
        mov     eax, [con_ptr]
363
        lea     eax, [eax+sshlib_connection.hostname_sz]
364
        invoke  con_write_asciiz, eax
365
        invoke  con_write_asciiz, str8
366
        invoke  con_write_asciiz, [connstring_sz]
367
        invoke  con_write_asciiz, str9
6419 hidnplayr 368
 
9106 hidnplayr 369
        ret
370
endp
9070 hidnplayr 371
 
372
 
9106 hidnplayr 373
proc sshlib_callback_hostkey_problem, con_ptr, problem_type, hostkey_sz
9070 hidnplayr 374
 
9106 hidnplayr 375
        cmp     [problem_type], SSHLIB_HOSTKEY_PROBLEM_UNKNOWN
376
        je      .unknown
377
        cmp     [problem_type], SSHLIB_HOSTKEY_PROBLEM_MISMATCH
378
        je      .mismatch
9070 hidnplayr 379
 
380
        mov     eax, -1
381
        ret
382
 
9106 hidnplayr 383
  .unknown:
384
        invoke  con_write_asciiz, str22
385
        jmp     .ask
9070 hidnplayr 386
 
9106 hidnplayr 387
  .mismatch:
388
        invoke  con_write_asciiz, str23
389
;        jmp     .ask
390
  .ask:
391
  ;;; TODO: print hostkey
392
        invoke  con_write_asciiz, str24
393
  .getansw:
394
        invoke  con_getch2
395
        or      al, 0x20        ; convert to lowercase
396
        cmp     al, 'a'
397
        je      .accept
398
        cmp     al, 'c'
399
        je      .once
400
        cmp     al, 'x'
401
        je      .refuse
402
        jmp     .getansw
9070 hidnplayr 403
 
9106 hidnplayr 404
  .accept:
405
        mov     eax, SSHLIB_HOSTKEY_ACCEPT
406
        ret
407
  .once:
408
        mov     eax, SSHLIB_HOSTKEY_ONCE
409
        ret
410
  .refuse:
411
        mov     eax, SSHLIB_HOSTKEY_REFUSE
412
        ret
9070 hidnplayr 413
 
414
endp
415
 
9106 hidnplayr 416
 
417
 
418
align 16
419
con_in_thread:
420
 
421
  .loop:
422
; TODO: check if channel is still open somehow
423
 
424
        invoke  con_get_input, ssh_msg_channel_data.data, MAX_INPUT_LENGTH
425
        test    eax, eax
426
        jz      .no_input
427
 
428
        lea     ecx, [eax + ssh_msg_channel_data.data - ssh_msg_channel_data]
429
        bswap   eax
430
        mov     [ssh_msg_channel_data.len], eax
431
        stdcall sshlib_send_packet, ssh_con, ssh_msg_channel_data, ecx, 0
432
        cmp     eax, 0
433
        jle     .exit
434
 
435
  .no_input:
436
        invoke  con_get_flags
437
        test    eax, 0x200                      ; con window closed?
438
        jz      .loop
439
 
440
  .exit:
441
        mcall   -1
442
 
443
 
6419 hidnplayr 444
; data
9106 hidnplayr 445
title   db 'Secure Shell',0
446
str1a   db 'SSHv2 client for KolibriOS',10,0
447
str1b   db 10,'Please enter URL of SSH server (hostname:port)',10,0
448
str2    db '> ',0
449
str3    db 'Connecting to ',0
450
str4    db 10,0
451
str6    db 10, 27, '[2J',27,'[mA network error has occured.',10,0
452
str7    db 10, 27, '[2J',27,'[mAn SSH protocol error has occured.',10,0
453
str8    db ' (',0
454
str9    db ')',10,0
455
str10   db 'Host does not exist.',10,10,0
456
str11   db 10, 27, '[2J',27,'[mThe remote host closed the connection.',10,0
457
str12   db 'Login as: ',0
458
str13a  db 'Password: ', 27, '[?25l', 27, '[30;40m', 0
459
str13b  db 10, 27, '[?25h', 27, '[0m', 27, '[2J', 0
460
str14   db 'The connection timed out',10,0
461
str15   db 'The connection was refused',10,0
462
str16   db 'The connection was reset',10,0
463
str17   db 'No details available',10,0
464
;str18   db 'User authentication failed',10,0;;;;
465
str19   db "The remote host's public key is invalid.", 10, 0
466
str20   db "The remote host's signature is invalid.", 10, 0
467
str21   db "The remote host failed to verify it's own public key.", 10, 0
468
str22   db "The host key for the server was not found in the cache.", 10
469
        db "There is no guarantee to the servers identity !",10, 0
6419 hidnplayr 470
 
9106 hidnplayr 471
str23   db "The host key provided by the host does not match the cached one.", 10
472
        db "This may indicate that the remote server has been compromised!", 10, 0
473
 
474
str24   db 10, "If you trust this host, press A to accept and store the (new) key.", 10
475
        db "Press C to connect to the host but don't store the (new) key.", 10
476
        db "Press X to abort.", 10, 0
477
 
478
 
6419 hidnplayr 479
ssh_ident_ha:
9106 hidnplayr 480
        dd_n (ssh_msg_ident.length-2)
481
ssh_msg_ident:
482
        db "SSH-2.0-KolibriOS_SSH_0.05",13,10
483
  .length = $ - ssh_msg_ident
6419 hidnplayr 484
 
9106 hidnplayr 485
 
486
ssh_msg_kex:
6419 hidnplayr 487
        db SSH_MSG_KEXINIT
488
  .cookie:
489
        rd 4
490
  .kex_algorithms:
9106 hidnplayr 491
        str "diffie-hellman-group-exchange-sha256" ; diffie-hellman-group-exchange-sha1
6419 hidnplayr 492
  .server_host_key_algorithms:
9106 hidnplayr 493
        str "ssh-rsa"                    ;,ssh-dss
6419 hidnplayr 494
  .encryption_algorithms_client_to_server:
9106 hidnplayr 495
        str "aes256-ctr"                 ;,aes256-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,aes192-ctr,aes192-cbc,aes128-ctr,aes128-cbc,blowfish-ctr,blowfish-cbc,3des-ctr,3des-cbc,arcfour256,arcfour128"
6419 hidnplayr 496
  .encryption_algorithms_server_to_client:
9106 hidnplayr 497
        str "aes256-ctr"                 ;,aes256-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,aes192-ctr,aes192-cbc,aes128-ctr,aes128-cbc,blowfish-ctr,blowfish-cbc,3des-ctr,3des-cbc,arcfour256,arcfour128"
6419 hidnplayr 498
  .mac_algorithms_client_to_server:
9106 hidnplayr 499
        str "hmac-sha2-256"              ;,hmac-sha1,hmac-sha1-96,hmac-md5"
6419 hidnplayr 500
  .mac_algorithms_server_to_client:
9106 hidnplayr 501
        str "hmac-sha2-256"              ;,hmac-sha1,hmac-sha1-96,hmac-md5"
6419 hidnplayr 502
  .compression_algorithms_client_to_server:
9106 hidnplayr 503
        str "none"                       ;,zlib"
6419 hidnplayr 504
  .compression_algorithms_server_to_client:
9106 hidnplayr 505
        str "none"                       ;,zlib"
6419 hidnplayr 506
  .languages_client_to_server:
9106 hidnplayr 507
        str ""
6419 hidnplayr 508
  .languages_server_to_client:
9106 hidnplayr 509
        str ""
6419 hidnplayr 510
  .first_kex_packet_follows:
511
        db 0
512
  .reserved:
513
        dd_n 0
9106 hidnplayr 514
  .length = $ - ssh_msg_kex
6419 hidnplayr 515
 
516
 
9106 hidnplayr 517
ssh_msg_gex_req:
6419 hidnplayr 518
        db SSH_MSG_KEX_DH_GEX_REQUEST
9070 hidnplayr 519
        dd_n 4096/4                      ; DH GEX min
520
        dd_n 4096/2                      ; DH GEX number of bits
521
        dd_n 4096                        ; DH GEX Max
9106 hidnplayr 522
  .length = $ - ssh_msg_gex_req
6419 hidnplayr 523
 
524
 
9106 hidnplayr 525
ssh_msg_new_keys:
6419 hidnplayr 526
        db SSH_MSG_NEWKEYS
9106 hidnplayr 527
  .length = $ - ssh_msg_new_keys
6419 hidnplayr 528
 
529
 
9106 hidnplayr 530
ssh_msg_request_service:
6469 hidnplayr 531
        db SSH_MSG_SERVICE_REQUEST
9106 hidnplayr 532
        str "ssh-userauth"              ; Service name
533
  .length = $ - ssh_msg_request_service
6469 hidnplayr 534
 
535
 
9106 hidnplayr 536
ssh_msg_channel_open:
537
        db SSH_MSG_CHANNEL_OPEN
538
        str "session"
539
        dd_n 0                          ; Sender channel
540
        dd_n BUFFERSIZE                 ; Initial window size
541
        dd_n PACKETSIZE                 ; maximum packet size
542
  .length = $ - ssh_msg_channel_open
6469 hidnplayr 543
 
544
 
9106 hidnplayr 545
ssh_msg_channel_close:
546
        db SSH_MSG_CHANNEL_CLOSE
6469 hidnplayr 547
        dd_n 0                          ; Sender channel
9106 hidnplayr 548
  .length = $ - ssh_msg_channel_close
6469 hidnplayr 549
 
9106 hidnplayr 550
 
551
ssh_msg_channel_request:
6469 hidnplayr 552
        db SSH_MSG_CHANNEL_REQUEST
553
        dd_n 0                          ; Recipient channel
9106 hidnplayr 554
        str "pty-req"
6469 hidnplayr 555
        db 1                            ; Bool: want reply
9106 hidnplayr 556
        str "xterm"
6469 hidnplayr 557
        dd_n 80                         ; terminal width (rows)
558
        dd_n 25                         ; terminal height (rows)
9106 hidnplayr 559
        dd_n 80*8                       ; terminal width (pixels)
560
        dd_n 25*16                      ; terminal height (pixels)
6469 hidnplayr 561
 
562
        dd_n 0                          ; list of supported opcodes
9106 hidnplayr 563
  .length = $ - ssh_msg_channel_request
6469 hidnplayr 564
 
9106 hidnplayr 565
 
566
ssh_msg_shell_request:
6469 hidnplayr 567
        db SSH_MSG_CHANNEL_REQUEST
568
        dd_n 0                          ; Recipient channel
9106 hidnplayr 569
        str "shell"
6469 hidnplayr 570
        db 1                            ; Bool: want reply
9106 hidnplayr 571
  .length = $ - ssh_msg_shell_request
6469 hidnplayr 572
 
9106 hidnplayr 573
 
574
ssh_msg_channel_data:
6469 hidnplayr 575
        db SSH_MSG_CHANNEL_DATA
576
        dd_n 0                          ; Sender channel
9106 hidnplayr 577
  .len  dd ?
578
  .data rb MAX_INPUT_LENGTH + 1
6469 hidnplayr 579
 
580
 
9106 hidnplayr 581
ssh_msg_channel_window_adjust:
582
        db SSH_MSG_CHANNEL_WINDOW_ADJUST
583
        dd_n 0                          ; Sender channel
584
  .wnd  dd ?
585
  .length = $ - ssh_msg_channel_window_adjust
586
 
587
 
6419 hidnplayr 588
include_debug_strings
589
 
590
align 4
591
@IMPORT:
592
 
593
library network, 'network.obj', \
6469 hidnplayr 594
        console, 'console.obj', \
595
        libcrash, 'libcrash.obj'
6419 hidnplayr 596
 
597
import  network, \
598
        getaddrinfo, 'getaddrinfo', \
599
        freeaddrinfo, 'freeaddrinfo', \
600
        inet_ntoa, 'inet_ntoa'
601
 
602
import  console, \
603
        con_start, 'START', \
604
        con_init, 'con_init', \
605
        con_write_asciiz, 'con_write_asciiz', \
606
        con_exit, 'con_exit', \
607
        con_gets, 'con_gets', \
608
        con_cls, 'con_cls', \
609
        con_getch2, 'con_getch2', \
9106 hidnplayr 610
        con_get_flags, 'con_get_flags', \
611
        con_set_title, 'con_set_title', \
612
        con_get_input, 'con_get_input'
6419 hidnplayr 613
 
6469 hidnplayr 614
import  libcrash, \
615
        sha256_init, 'sha256_init', \
616
        sha256_update, 'sha256_update', \
6922 hidnplayr 617
        sha256_final, 'sha256_final',\
618
        sha1_init, 'sha1_init', \
619
        sha1_update, 'sha1_update', \
620
        sha1_final, 'sha1_final', \
621
        md5_init, 'md5_init', \
622
        md5_update, 'md5_update', \
623
        md5_final, 'md5_final'
6419 hidnplayr 624
 
625
IncludeIGlobals
626
 
627
i_end:
628
 
629
IncludeUGlobals
630
 
9106 hidnplayr 631
params          rb MAX_HOSTNAME_LENGTH
6419 hidnplayr 632
 
9106 hidnplayr 633
ssh_con         sshlib_connection
634
ssh_chan        sshlib_channel
6419 hidnplayr 635
 
636
mem: