Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 [ 85 ] 86 87 88

@орег

keyhndl, ах

Считаем данные в массив состояния

mov raov mov shl mov int

bx, ah, cx, cx, dx, 21h @rder

ax 3Fh nb 2

state

; Считаем данные в ключевой массив

mov bx, keyhndl

mov ah, 3Fh

mov cx, nk

shl cx, 2

raov dx, key

int 21h

jc Srder ; Закроем файл

raov bx, keyhndl

raov ah, 3Eh

int 21h

; Процедура открытия файла-источника @openin:

raov ax, 3D00h

raov dx, infile

int 21h

jc @oper

mov inhndl, ax

; Процедура создания файла-приемника Sopenout:

mov ah, 3Ch

xor cx, cx

mov dx, outfile

int 21h

jc @oper

raov outhndl, ax

@usage:

; Вывод сообщения об использовании программы

raov dx, OFFSET rasguse

call strout

jrap @exit

@invkey:

; Вывод сообщения о неправильной длине ключа

mov dx, OFFSET msgkey

call strout

jrap @exit

@invblk:

; Вывод сообщения о неправильной длине блока

mov dx, OFFSET msgblk

call strout

jrap @exit

@oper:

; Вывод сообщения об ошибке открытия

mov dx, OFFSET msgoper

call strout

@exit

вывод сообщения об ошибке чтения

° raov dx, OFFSET rasgrder

call strout

jrap Sexit

i3wrer:

вывод сообщения об ошибке записи

raov dx, OFFSET msgwrer call strout jrap @exit

Процедура применения преобразования замены байтов к массиву состояния bvtesub PROC NEAR

~- WORD PTR nb bx 2

gnbsub:

raov xor shl dec

bp, bx, bp, bp

raov raov raov dec jns ret

bytesub ENDP

; Процедура сдвига строк

shiftrow PROC NEAR

crap jnz

Ы, Ы,

state[bp] sbox[bx] state[bp], bl bp

@nbsub

WORD PTR nb, @snb6

@snb6:

raov al, BYTE PTR state[1]

xchg al, BYTE PTR state[13]

xchg al, BYTE PTR state[9]

xchg al, BYTE PTR state[5]

xchg al, BYTE PTR state[1]

xchg al, BYTE PTR state[10]

xchg al, BYTE PTR state[2]

raov al, BYTE PTR state[6]

xchg al, BYTE PTR state[14]

xchg al, BYTE PTR state[6]

raov al, BYTE PTR state[3]

xchg al, BYTE PTR state[7]

xchg al, BYTE PTR state[11]

xchg al, BYTE PTR state[15]

xchg al, BYTE PTR state[3]

cmp WORD PTR nb, 6

jnz @snb8

raov al, BYTE PTR state[l]

xchg al, BYTE PTR state[21]

xchg al, BYTE PTR state[17]

xchg al, BYTE PTR state[13]



@snb8:

xchg xchg xchg

raov

xchg

raov

xchg

xchg

raov

xchg

xchg

xchg

raov

xchg

xchg

raov

xchg

xchg

raov

xchg

xchg

raov

xchg

xchg

xchg

xchg

xchg

xchg

xchg

xchg

xchg xchg xchg xchg xchg xchg xchg xchg

raov

xchg

xchg

raov

xchg

xchg

raov

xchg

xchg

raov

xchg

xchg

al, BYTE PTR state[9] al, BYTE PTR state[5] al, BYTE PTR state[1]

shiftrow ENDP

; Процедура перемешивания столбцов

al, BYTE al, BYTE al, BYTE al, BYTE al, BYTE al, BYTE al, BYTE al, BYTE al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

PTR state[2] PTR state[18] PTR state[2] PTR state[10] PTR state[2] PTR state[6] PTR state[22] PTR state[14] PTR state[6]

PTR state[3] PTR state[15] PTR state[3] PTR state[7] PTR state[19] PTR state[7] PTR state[11] PTR state[23] PTR state[11]

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

al, BYTE

PTR state[1] PTR state[29] PTR state[25] PTR state[21] PTR state[17] PTR state[13] PTR state[9] PTR state[5] PTR state[1]

PTR state[2] PTR state[22] PTR state[10] PTR state[30] PTR state[18] PTR state[6] PTR state[26] PTR state[14] PTR state[2]

PTR state[3] PTR state[19] PTR state[3] PTR state[7] PTR state[23] PTR state[7] PTR state[ll] PTR state[27] PTR state[11] PTR state[15] PTR state[31] PTR state[15]

nixcolumn

9cols:

l?col:

I? row:

Unotc:

@szer:

tetate:

PROC NEAR

xor bx, bx

raov di, WORD PTR nb

dec di

raov cx, 4

raov si, di

shl si, 2

xor dx, dx

raov bp, 3

raov Ы, state [bp+si]

xor al, al

or Ы, Ы

jz @szer

raov al, pitbl[bx]

raov Ы, raixp[bp]

add al, pitbl[bxl

jnc @notc

inc al

raov Ы, al

raov al, ptbl[bx]

xor dl, al

dec bp

jns @row

raov bp, cx

dec bp

raov tstate[bp+si], dl

raov al, raixp[0]

xchg al, raixp[3]

xchg al, raixp[21

xchg al, raixp[l]

xchg al, raixp[0]

loop @col

dec di

jns @cols

raov bx, WORD PTR nb

shl bx, 2

dec bx

raov al, tstate[bx]

raov state [bx], al

dec bx

jns @mstate

Jiixcolumn ENDP

,Процедура сложения с раундовым ключом

aodroundkey PROC NEAR

raov si, WORD PTR к



shl mov add shl dec

si, 2

bx, WORD PTR nb WORD PTR k, bx bx, 2 bx

gaddk:

mov xor dec jns ret

addroundkey ENDP ; Процедура расширения ключа keyexpansion

al, key[bx+si] state[bx], al bx

@addk

@kouter: Skinner:

@fterap:

@proc8;

Bsbytex:

@procnk:

@sbyte:

PROC NEAR mov inc mul mov xor raov

WORD PTR nr

raov

raov dec shl raov

raov

crap

crap

jrap

xor raov

mov mov mov dec jns jrap

xchg

xchg

xchg

xchg

raov

raov raov

WORD PTR nb WORD PTR keylen, ax di, di

bp, WORD PTR nk cx, WORD PTR nk

bx, bx bx, si.

WORD PTR bp

al, key[bx+si] templsi], al si

@fterap

cx, WORD PTR nk Эргоспк

WORD PTR nk, 8

@exp

cx, 4

@proc8

@exp

bx, si,

Ы, Ы,

bx 3

terap[si] sboxibx] bl

temp[si si

.@8sbytex @exp

al, BYTE PTR temp[3]

al, BYTE PTR temp[2]

al, BYTE PTR terap[l]

al, BYTE PTR terap[0]

bx, bx

si, 3

bl, terap[si]

Ы, sbox[bx]

gexp: (Jcnext:

raov

terap[si], bl

@sbyte

raov

al, rcon[di]

BYTE PTR temp[0], al

raov

si, 3

raov

bx, bp

bx, WORD PTR nk

bx, 2

raov

al, key[bx+si]

al, BYTE PTR temp[si]

raov

bx, WORD PTR bp

bx, 2

raov

key[bx+si], al

@cnext

bx, bp

bx, 2

raov

si, 3

loop

@kinnerx

crap

bp, keylen

@kouterx

Skinner

jrap

Skouter

ENDP

ekinnerx: Skouterx:

keyexpansion ; Процедура генерации массива rcon genrcon PROC NEAR

Sgenr:

Snormod:

genrcon ENDP

Процедура генерации таблиц genptbl PROC NEAR

xor bx, bx xor cx, cx mov ax, 1

bx, bx

cx, cx

raov

ax, 1

BYTE PTR rcon[bx], al

al, 1

Snorraod

al, IBh

crap

bl, 30

Sgenr



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 [ 85 ] 86 87 88