Untitled
unknown
plain_text
2 years ago
10 kB
15
Indexable
org 100H
.DATA
InputString db 0aH,0dH, "Enter Input State: $"
CipherString db 0aH,0dH, "Enter Cipher Key: $" ;-ah,0dh for new line
OutputString db 0aH,0dH, "Output: $"
SBOX DB 63H, 07cH, 77H, 7bH, 0f2H, 6bH, 6fH, 0c5H, 30H, 01H, 67H, 2bH, 0feH, 0d7H, 0abH, 76H
DB 0caH, 82H, 0c9H, 7dH, 0faH, 59H, 47H, 0f0H, 0adH, 0d4H, 0a2H, 0afH, 9cH, 0a4H, 72H, 0c0H
DB 0b7H, 0fdH, 93H, 26H, 36H, 3fH, 0f7H, 0ccH, 34H, 0a5H, 0e5H, 0f1H, 71H, 0d8H, 31H, 15H
DB 04H, 0c7H, 23H, 0c3H, 18H, 96H, 05H, 9aH, 07H, 12H, 80H, 0e2H, 0ebH, 27H, 0b2H, 75H
DB 09H, 83H, 2cH, 1aH, 1bH, 6eH, 5aH, 0a0H, 52H, 3bH, 0d6H, 0b3H, 29H, 0e3H, 2fH, 84H
DB 53H, 0d1H, 00H, 0edH, 20H, 0fcH, 0b1H, 5bH, 6aH, 0cbH, 0beH, 39H, 4aH, 4cH, 58H, 0cfH
DB 0d0H, 0efH, 0aaH, 0fbH, 43H, 4dH, 33H, 85H, 45H, 0f9H, 02H, 7fH, 50H, 3cH, 9fH, 0a8H
DB 51H, 0a3H, 40H, 8fH, 92H, 9dH, 38H, 0f5H, 0bcH, 0b6H, 0daH, 21H, 10H, 0ffH, 0f3H, 0d2H
DB 0cdH, 0cH, 13H, 0ecH, 5fH, 97H, 44H, 17H, 0c4H, 0a7H, 7eH, 3dH, 64H, 5dH, 19H, 73H
DB 60H, 81H, 4fH, 0dcH, 22H, 2aH, 90H, 88H, 46H, 0eeH, 0b8H, 14H, 0deH, 5eH, 0bH, 0dbH
DB 0e0H, 32H, 3aH, 0aH, 49H, 06H, 24H, 5cH, 0c2H, 0d3H, 0acH, 62H, 91H, 95H, 0e4H, 79H
DB 0e7H, 0c8H, 37H, 6dH, 8dH, 0d5H, 4eH, 0a9H, 6cH, 56H, 0f4H, 0eaH, 65H, 7aH, 0aeH, 08H
DB 0baH, 78H, 25H, 2eH, 1cH, 0a6H, 0b4H, 0c6H, 0e8H, 0ddH, 74H, 1fH, 4bH, 0bdH, 8bH, 8aH
DB 70H, 3eH, 0b5H, 66H, 48H, 03H, 0f6H, 0eH, 61H, 35H, 57H, 0b9H, 86H, 0c1H, 1dH, 9eH
DB 0e1H, 0f8H, 98H, 11H, 69H, 0d9H, 8eH, 94H, 9bH, 1eH, 87H, 0e9H, 0ceH, 55H, 28H, 0dfH
DB 8cH, 0a1H, 89H, 0dH, 0bfH, 0e6H, 42H, 68H, 41H, 99H, 2dH, 0fH, 0b0H, 54H, 0bbH, 16H
input DB 17
DB 00
DB 17 dup(?)
CipherInput DB 17
DB 00
DB 17 dup(?)
m DB 2H, 3H, 1H, 1H
DB 1H, 2H, 3H, 1H
DB 1H, 1H, 2H, 3H
DB 3H, 1H, 1H, 2H
rm DB 19H, 0a0H, 9aH, 0e9H
DB 3dH, 0f4H, 0c6H, 0f8H
DB 0e3H, 0e2H, 8dH, 48H
DB 0beH, 2bH, 2aH, 08H
RoundKey DB 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H
CipherKey DB 2bH, 28H, 0abH, 09H
DB 7eH, 0aeH, 0f7H, 0cfH
DB 15H, 0d2H, 15H, 4fH
DB 16H, 0a6H, 88H, 3cH
Rcon DB 01H, 02H, 04H, 08H, 10H, 20H, 40H, 80H, 1bH, 36H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
counterRcon DW 0H
i DB 32H, 88H, 31H, 0e0H
DB 43H, 5aH, 31H, 37H
DB 0f6H, 30H, 98H, 07H
DB 0a8H, 8dH, 0a2H, 34H
.CODE
;==================GETINPUT====================================
GETINPUT PROC
;Printing "Enter Input"
MOV DX,offset InputString
MOV AH,09H
INT 21H
;Taking Input from user till he presses ENTER
Mov DX, offset input
mov AH, 0ah
int 21h
;copying actual input
mov si, offset input+2
mov di, offset i
mov cx, 16
copy_input:
mov al, [si]
mov [di], al
inc si
inc di
loop copy_input
ENDP
;==================GETKEYINPUT=========================================
GETKEYINPUT PROC
;Printing "Enter Cipher Key"
MOV DX,offset CipherString
MOV AH,09H
INT 21H
;Cipher Key Input (has to be 16 bytes)
MOV DX, offset CipherInput
MOV AH,0ah
int 21h
mov si, offset CipherInput+2
mov di, offset CipherKey
mov cx, 16
copy_Cipher:
mov al, [si]
mov [di], al
inc si
inc di
loop copy_Cipher
ENDP
;=============================FIRST XOR==========================
FirstXOR PROC
MOV CX,16
MOV SI,0
firstXORING:
MOV AL,CipherKey[SI]
XOR i[SI],AL
INC SI
loop firstXORING
ENDP
;===================================SubBytes================================
SUBBYTESMACRO Macro
LOCAL SUBBYTES
MOV CX,16
MOV SI,0
SUBBYTES:
MOV AL,i[SI]
MOV Bl,Al
MOV AL,SBOX[BX]
MOV [i+SI],AL
INC SI
Loop SUBBYTES
ENDM
;===================================ShiftRows================================
SHIFTROWSMACRO MACRO
LOCAL SHIFT_ROWS
SHIFT_ROWS:
; Row 2
MOV AL, [i+4]
MOV BL, [i+5]
MOV CL, [i+6]
MOV DL, [i+7]
MOV [i+4], BL
MOV [i+5], CL
MOV [i+6], DL
MOV [i+7], AL
;Row 3
MOV AL, [i+8]
MOV BL, [i+9]
MOV CL, [i+10]
MOV DL, [i+11]
MOV [i+8], CL
MOV [i+9], DL
MOV [i+10], AL
MOV [i+11], BL
; Row 4
MOV AL, [i+12]
MOV BL, [i+13]
MOV CL, [i+14]
MOV DL, [i+15]
MOV [i+12], DL
MOV [i+13], AL
MOV [i+14], BL
MOV [i+15], CL
ENDM
;===================================MixColumns================================
;For 2 Multiplication
overflow: Macro
LOCAL overf, done
MOV BL,m[0]
Mul BL
JC overf
JMP done:
overf:
XOR AL,1BH
done:
ENDM
;for 3 Multiplication
Matri: Macro
overflow
MOV BX,DI
XOR AL,i[BX+SI]
INC SI
INC SI
INC SI
INC SI
ENDM
MIXCOLUMNSMACRO MACRO
LOCAL MixColumns
MOV CX,4
MOV SI,4
MOV DI,0
MixColumns:
;i[0][0]
Mov AL,i[DI]
overflow
MOV DL,AL
MOV AL,i[DI+4]
Matri
XOR DL,AL
XOR DL,i[DI+8]
XOR DL,i[DI+12]
MOV rm[DI],DL
;i[1,0]
MOV DL,i[DI]
Mov AL,i[DI+4]
overflow
XOR DL,AL
MOV AL,i[DI+8]
Matri
XOR DL,AL
XOR DL,i[DI+12]
MOV rm[DI+4],DL
;i[2,0]
MOV DL,i[DI]
XOR DL,i[DI+4]
MOV AL,i[DI+8]
overflow
XOR DL,AL
MOV AL,i[DI+12]
Matri
XOR DL,AL
MOV rm[DI+8],DL
;i[3,0]
MOV SI,0
MOV AL,i[DI]
Matri
MOV DL,AL
XOR DL,i[DI+4]
XOR DL,i[DI+8]
MOV AL,i[DI+12]
overflow
XOR DL,AL
MOV rm[DI+12],DL
INC DI
Loop MixColumns
COPYRMMACRO
ENDM
COPYMACRO MACRO
LOCAL COPYTHEI
MOV CX,16
MOV SI,0
COPYTHEI:
MOV AL,i[SI]
MOV rm[SI],AL
INC SI
Loop COPYTHEI
ENDM
COPYRMMACRO MACRO
LOCAL COPYTHERM
MOV CX,16
MOV SI,0
COPYTHERM:
MOV AL,rm[SI]
MOV i[SI],AL
INC SI
Loop COPYTHERM
ENDM
;===================================Bonus================================
BONUSMACRO MACRO
LOCAL CipherDecryption,SB,FCXOR,R1,R2,R3,R4,CopyFromKeytoCipher
CipherDecryption:
;First Column
MOV AL, CipherKey[3]
MOV BL, CipherKey[7]
MOV CL, CipherKey[11]
MOV DL, CipherKey[15]
MOV RoundKey[0],BL
MOV RoundKey[4],CL
MOV RoundKey[8],DL
MOV RoundKey[12],AL
MOV CX,4
MOV SI,0
MOV DI,3
SB:
MOV AL,RoundKey[SI]
MOV BL,AL
MOV AL,SBOX[BX]
MOV BL,AL
MOV RoundKey[SI],BL
INC SI
INC SI
INC SI
INC SI
INC DI
INC DI
INC DI
INC DI
INC DI
Loop SB
;XOR FIRST COL
MOV CX,4
MOV SI,0
FCXOR:
MOV AL,CipherKey[SI]
MOV BL,AL
XOR RoundKey[SI],BL
INC SI
INC SI
INC SI
INC SI
Loop FCXOR
;XOR RCON
MOV SI, counterRcon[0]
MOV AL,Rcon[SI]
MOV BL,AL
XOR RoundKey[0],BL
INC counterRcon
;First Row
MOV CX,3
MOV SI,1
R1:
MOV AL,CipherKey[SI]
MOV BL,AL
XOR BL,RoundKey[SI-1]
MOV RoundKey[SI],BL
INC SI
Loop R1
;Second Row
MOV CX,3
MOV SI,5
R2:
MOV AL,CipherKey[SI]
MOV BL,AL
XOR BL,RoundKey[SI-1]
MOV RoundKey[SI],BL
INC SI
Loop R2
;Third Row
MOV CX,3
MOV SI,9
R3:
MOV AL,CipherKey[SI]
MOV BL,AL
XOR BL,RoundKey[SI-1]
MOV RoundKey[SI],BL
INC SI
Loop R3
;Fourth Row
MOV CX,3
MOV SI,13
R4:
MOV AL,CipherKey[SI]
MOV BL,AL
XOR BL,RoundKey[SI-1]
MOV RoundKey[SI],BL
INC SI
Loop R4
MOV CX,16
MOV SI,0
CopyFromKeytoCipher:
MOV AL,RoundKey[SI]
MOV BL,AL
MOV CipherKey[SI],BL
INC SI
Loop CopyFromKeytoCipher
ENDM
;===================================RoundKey================================
ROUNDKEYMACRO MACRO
LOCAL Copy,AddRoundKey,CopyAgain,NotLastRound
MOV CX,16
MOV SI,0
Copy:
MOV AL,i[SI]
MOV rm[SI],AL
INC SI
Loop copy
NotLastRound:
MOV CX,16
MOV SI,0
AddRoundKey:
MOV AL,RoundKey[SI]
MOV BL,rm[SI]
XOR AL,BL
MOV rm[SI],AL
INC SI
Loop AddRoundKey
MOV CX,16
MOV SI,0
CopyAgain:
MOV AL,rm[SI]
MOV i[SI],AL
INC SI
Loop CopyAgain
ENDM
ENCRYPT PROC
MOV CX,9
AESENCRYPTION:
PUSH CX
SUBBYTESMACRO
SHIFTROWSMACRO
MIXCOLUMNSMACRO
BONUSMACRO
ROUNDKEYMACRO
POP CX
loop AESENCRYPTION
SUBBYTESMACRO
SHIFTROWSMACRO
COPYMACRO
BONUSMACRO
ROUNDKEYMACRO
ENDP
OUTPUTTHERESULT PROC
MOV DX,offset OutputString
MOV AH,09H
INT 21H
MOV SI, offset i
Mov CX,16
outputloop:
MOV AL,[si]
MOV DL,AL
MOV AH,02H
INC SI
int 21H
loop outputloop
;====================================================================
Editor is loading...
Leave a Comment