Анимация
JavaScript
|
Главная Библионтека @орег 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:
ekinnerx: Skouterx: keyexpansion ; Процедура генерации массива rcon genrcon PROC NEAR Sgenr: Snormod: genrcon ENDP Процедура генерации таблиц genptbl PROC NEAR xor bx, bx xor cx, cx mov ax, 1
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 |