-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcifrado.mac
234 lines (197 loc) · 3.61 KB
/
cifrado.mac
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
;macro cifrado
; rotores, refector
; plugboard
%macro rotoresOutM 3
push rbx
push rcx;!!!!!!1
push rax
push r8
push r9
xor r9, r9
;;;;;;;;;;;;;;;;;;; rotarDer %1
; mov rcx, %2
xor rbx, rbx
%%loop:
xor rcx, rcx
xor rax, rax
mov al, byte [textoCifrado]; + rbx ] ; rdx = buf mas desplazamientoa
dec rcx
%%find:
inc rcx
cmp al, byte[%1 + rcx]
jne %%find
%%continue:
xor rax, rax
mov rax, rcx
add al, 'A'
stosb ; al a [rdi++]
rotarM %2, %3
inc rbx
; cmp rbx, r8
; jne %%loop
pop r9
pop r8
pop rax
pop rcx
pop rbx
%endmacro
;******************
%macro rotoresM 2 ;entrada rotores
push rbx
push rcx;!!!!!!1
push rax
push r8
push r9
xor r9, r9
; mov rcx, %2
xor rbx, rbx
%%loop:
xor rax, rax
mov al, byte [textoCifrado]; + rbx ] ; rdx = buf mas desplazamiento
sub al, 'A' ;obtener pos en rotor next
mov ah, byte [%1+ rax]
mov al, ah ; en al para stosb
stosb ; al a [rdi++]
; rotarM %2
inc rbx
; cmp rbx, r8
; jne %%loop
pop r9
pop r8
pop rax
pop rcx
pop rbx
%endmacro
%macro rotarM 2
; push rcx
; inc r13 ;contador de letras
mov rcx, %1
cmp rcx, 1
je %%uno
cmp rcx, 2
je %%dos
cmp rcx, 3
je %%tres
jne %%fin
%%uno:
rotarBufIzq buffRotorUno, 1
jmp %%fin
%%dos:
; inc r9
cmp r13, 25
jne %%fin
inc r14
xor r13,r13
rotarBufIzq buffRotorDos, 1
jmp %%fin
%%tres:
inc r13
cmp r14, 25
jne %%fin
xor r14,r14
rotarBufIzq buffRotorDos, 1
%%fin:
; pop rcx
%endmacro
;****************************************
%macro rotarDerM 2
inc r13
mov r9, %2
; push rcx
mov rcx, %1
cmp rcx, 1
je %%uno
cmp rcx, 2
je %%dos
cmp rcx, 3
je %%tres
jne %%fin
%%uno:
rotarBufDer rotorUno
jmp %%fin
%%dos:
; inc r9
cmp r13, 25 ;gira cada 26 letras, 0 - > 25
jne %%fin
xor r13, r13
rotarBufDer rotorDos
jmp %%fin
%%tres:
cmp r9, 676
jne %%fin
xor r13, r13
rotarBufDer rotorTres
%%fin:
; pop rcx
%endmacro
;****************************************
%macro plugboardM 2 ; lenBuf, plugboard
push rax ;XF,PZ,SQ,GR,AJ,UO,CN,BV,TM,KI
push rcx ; cont Buf
push rbx ; cont de pb
push rdx
xor rcx, rcx
%%loopBuf:
xor rbx, rbx
xor rax, rax
;div rbx, divide el rax entre el rbx,
;deja el resultado en el rax y el residuo en el rdx
mov al, [textoCifrado+ rcx]
%%loopPb:
mov ah, [%2+ rbx]
cmp al, ah
je %%swap
inc rbx
cmp rbx, 29
jne %%loopPb
je %%continueLoop
%%swap:
cmp rbx, 0
je %%masUno
cmp rbx, 1
je %%menosUno
cmp rbx, 28
je %%menosUno
cmp byte [%2+ rbx - 1], ','
je %%masUno
jne %%menosUno
%%masUno: ;no dec rdi
mov ah, [%2 + rbx + 1 ]
mov [textoCifrado + rcx], ah
jmp %%continueLoop
%%menosUno:
mov ah, [%2 + rbx - 1]
mov byte[textoCifrado + rcx], ah
%%continueLoop:
inc rcx
cmp rcx, %1
jne %%loopBuf
%%endPB
pop rdx
pop rbx
pop rcx
pop rax
%endmacro
;**********************************
;**********************************
%macro NOrotarBuf 2; buffer (deTamaño rcx) , cantidad de rotaciones
push rcx
push r8
push rdi
push rsi
mov r8, rcx
movBuf bufTmp, %1
sub rcx, %2
lea rsi, [bufTmp + %2]
lea rdi, [%1]
rep movsb
lea rdi, [%1]
lea rsi, [bufTmp]
xor rcx, rcx
mov rcx, %2
rep movsb
pop rsi
pop rdi
pop r8
pop rcx
%endmacro