Variable RSA key length

git-svn-id: svn://kolibrios.org@9126 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
hidnplayr 2021-08-08 14:03:26 +00:00
parent 73e2a25f84
commit fa01917d38

View File

@ -128,8 +128,7 @@ locals
mpint_s dd ? ; rsa_signature_blob mpint_s dd ? ; rsa_signature_blob
k dd ? ; Key length
; k dd ? ; length of RSA modulus n
endl endl
@ -173,12 +172,13 @@ endl
add esi, 4 add esi, 4
; mpint n ; mpint n
stdcall mpint_to_little_endian, [mpint_n], esi stdcall mpint_to_little_endian, [mpint_n], esi
; mov [k], eax ;; HMMMM FIXME, 0-byte.. and eax, not (32-1) ; CHECKME
mov [k], eax
; Signature ; Signature
mov esi, [str_signature] mov esi, [str_signature]
mov ecx, [esi] mov ecx, [esi]
bswap ecx ; TODO: check length bswap ecx ; TODO: check length
; Host key type (string) ; Host key type (string)
cmp dword[esi+4], 0x07000000 cmp dword[esi+4], 0x07000000
@ -218,9 +218,13 @@ endl
stosb stosb
mov al, 0x01 mov al, 0x01
stosb stosb
mov ecx, 256 - (rsa_sha1_T.len + 3 + SHA1_HASH_SIZE) mov ecx, [k]
sub ecx, (rsa_sha1_T.len + 3 + SHA1_HASH_SIZE)
jl .err_key
jz @f
mov al, 0xff mov al, 0xff
rep stosb rep stosb
@@:
mov al, 0x00 mov al, 0x00
stosb stosb
mov esi, rsa_sha1_T mov esi, rsa_sha1_T
@ -248,9 +252,13 @@ endl
stosb stosb
mov al, 0x01 mov al, 0x01
stosb stosb
mov ecx, 256 - (rsa_sha256_T.len + 3 + SHA256_HASH_SIZE) mov ecx, [k]
sub ecx, (rsa_sha256_T.len + 3 + SHA256_HASH_SIZE)
jl .err_key
jz @f
mov al, 0xff mov al, 0xff
rep stosb rep stosb
@@:
mov al, 0x00 mov al, 0x00
stosb stosb
mov esi, rsa_sha256_T mov esi, rsa_sha256_T
@ -278,9 +286,13 @@ endl
stosb stosb
mov al, 0x01 mov al, 0x01
stosb stosb
mov ecx, 256 - (rsa_sha512_T.len + 3 + SHA512_HASH_SIZE) mov ecx, [k]
sub ecx, (rsa_sha512_T.len + 3 + SHA512_HASH_SIZE)
jl .err_key
jz @f
mov al, 0xff mov al, 0xff
rep stosb rep stosb
@@:
mov al, 0x00 mov al, 0x00
stosb stosb
mov esi, rsa_sha512_T mov esi, rsa_sha512_T
@ -297,20 +309,21 @@ endl
; RSA signature blob ; RSA signature blob
stdcall mpint_to_little_endian, [mpint_s], esi stdcall mpint_to_little_endian, [mpint_s], esi
; cmp eax, [k] ; cmp eax, [k]
;;; jne .err_signature ; jne .err_signature
; RSAVP1 ; RSAVP1
stdcall mpint_modexp, [mpint_m], [mpint_s], [mpint_e], [mpint_n] stdcall mpint_modexp, [mpint_m], [mpint_s], [mpint_e], [mpint_n]
; I2OSP ; I2OSP
stdcall mpint_shrink, [mpint_m] stdcall mpint_shrink, [mpint_m]
stdcall mpint_grow, [mpint_m], 256 stdcall mpint_grow, [mpint_m], [k]
stdcall mpint_to_big_endian, [EM], [mpint_m] stdcall mpint_to_big_endian, [EM], [mpint_m]
; Compare EM with EM_accent ; Compare EM with EM_accent
mov esi, [EM] mov esi, [EM]
add esi, 4 add esi, 4
mov edi, [EM_accent] mov edi, [EM_accent]
mov ecx, 256/4 mov ecx, [k]
shr ecx, 2
xor eax, eax xor eax, eax
.ct_cmp_loop: .ct_cmp_loop:
mov ebx, [esi] mov ebx, [esi]