Data update
This commit is contained in:
parent
81fd053722
commit
52a6ef48dd
10248 changed files with 63654 additions and 6775 deletions
376
Task/Bifid-cipher/ARM-Assembly/bifid-cipher.arm
Normal file
376
Task/Bifid-cipher/ARM-Assembly/bifid-cipher.arm
Normal file
|
|
@ -0,0 +1,376 @@
|
|||
/* ARM assembly Raspberry PI */
|
||||
/* program bifid.s */
|
||||
/* REMARK 1 : this program use routines in a include file
|
||||
see task Include a file language arm assembly
|
||||
for the routine affichageMess conversion10
|
||||
see at end of this program the instruction include */
|
||||
|
||||
/*******************************************/
|
||||
/* Constantes */
|
||||
/*******************************************/
|
||||
.include "../constantes.inc"
|
||||
|
||||
.equ MESSSIZE, 2000
|
||||
.equ BUFFERSIZE, 2000
|
||||
/*******************************************/
|
||||
/* Macros */
|
||||
/*******************************************/
|
||||
//.include "../../ficmacros32.inc" @ for developer debugging
|
||||
|
||||
|
||||
/*******************************************/
|
||||
/* Initialized data */
|
||||
/*******************************************/
|
||||
.data
|
||||
szMessDebutPgm: .asciz "Program 32 bits start. \n"
|
||||
szCarriageReturn: .asciz "\n"
|
||||
szMessFinOK: .asciz "Program normal end. \n"
|
||||
szMessError: .asciz "\nError Buffer too small!!!\n"
|
||||
szMessString: .asciz "String :\n"
|
||||
szMessEncrip: .asciz "\nEncrypted :\n"
|
||||
szMessDecrip: .asciz "\nDecrypted :\n"
|
||||
//szString1: .asciz "ABCDEFGHIJKLMNOPQRSTUVWXYZ!.?abcdefghijklmnopqrstuvwxyz"
|
||||
//szString1: .asciz "attackatdawn"
|
||||
szString1: .asciz "ATTACKATDAWN"
|
||||
//szString1: .asciz "ABCD"
|
||||
szString2: .asciz "FLEEATONCE"
|
||||
szString3: .asciz "L'invasion commencera le premier janvier"
|
||||
|
||||
szPolybe1: .ascii "ABCDE"
|
||||
.ascii "FGHIK"
|
||||
.ascii "LMNOP"
|
||||
.ascii "QRSTU"
|
||||
.asciz "VWXYZ"
|
||||
|
||||
szPolybe2: .ascii "BGWKZ"
|
||||
.ascii "QPNDS"
|
||||
.ascii "IOAXE"
|
||||
.ascii "FCLUM"
|
||||
.asciz "THYVR"
|
||||
|
||||
/*******************************************/
|
||||
/* UnInitialized data */
|
||||
/*******************************************/
|
||||
.bss
|
||||
.align 4
|
||||
tabiposX: .skip 4 * MESSSIZE
|
||||
tabiposY: .skip 4 * MESSSIZE
|
||||
sBuffer1: .skip BUFFERSIZE
|
||||
sBuffer2: .skip BUFFERSIZE
|
||||
/*******************************************/
|
||||
/* code section */
|
||||
/*******************************************/
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
ldr r0,iAdrszMessDebutPgm
|
||||
bl affichageMess
|
||||
ldr r0,iAdrszMessString @ display message
|
||||
bl affichageMess
|
||||
ldr r0,iAdrszString1 @ display string
|
||||
bl affichageMess
|
||||
ldr r0,iAdrszString1 @ string address
|
||||
ldr r1,iAdrszPolybe1 @ Polybe key
|
||||
ldr r2,iAdrsBuffer1 @ encrypted buffer result
|
||||
bl encrypt
|
||||
cmp r0,#0
|
||||
ble 99f
|
||||
ldr r0,iAdrszMessEncrip
|
||||
bl affichageMess
|
||||
ldr r0,iAdrsBuffer1 @ display encrypted buffer
|
||||
bl affichageMess
|
||||
|
||||
|
||||
ldr r0,iAdrsBuffer1 @ encrypted buffer
|
||||
ldr r1,iAdrszPolybe1 @ Polybe key
|
||||
ldr r2,iAdrsBuffer2 @ decrypted buffer
|
||||
bl decrypt
|
||||
ldr r0,iAdrszMessDecrip
|
||||
bl affichageMess
|
||||
ldr r0,iAdrsBuffer2 @ display decrypted buffer
|
||||
bl affichageMess
|
||||
ldr r0,iAdrszCarriageReturn
|
||||
bl affichageMess
|
||||
|
||||
ldr r0,iAdrszMessString @ display message
|
||||
bl affichageMess
|
||||
ldr r0,iAdrszString2 @ display string
|
||||
bl affichageMess
|
||||
ldr r0,iAdrszString2 @ string address
|
||||
ldr r1,iAdrszPolybe2 @ Polybe key
|
||||
ldr r2,iAdrsBuffer1 @ encrypted buffer result
|
||||
bl encrypt
|
||||
cmp r0,#0
|
||||
ble 99f
|
||||
ldr r0,iAdrszMessEncrip
|
||||
bl affichageMess
|
||||
ldr r0,iAdrsBuffer1 @ display encrypted buffer
|
||||
bl affichageMess
|
||||
|
||||
|
||||
ldr r0,iAdrsBuffer1 @ encrypted buffer
|
||||
ldr r1,iAdrszPolybe2 @ Polybe key
|
||||
ldr r2,iAdrsBuffer2 @ decrypted buffer
|
||||
bl decrypt
|
||||
ldr r0,iAdrszMessDecrip
|
||||
bl affichageMess
|
||||
ldr r0,iAdrsBuffer2 @ display decrypted buffer
|
||||
bl affichageMess
|
||||
ldr r0,iAdrszCarriageReturn
|
||||
bl affichageMess
|
||||
|
||||
ldr r0,iAdrszMessString @ display message
|
||||
bl affichageMess
|
||||
ldr r0,iAdrszString1 @ display string
|
||||
bl affichageMess
|
||||
ldr r0,iAdrszString1 @ string address
|
||||
ldr r1,iAdrszPolybe2 @ Polybe key
|
||||
ldr r2,iAdrsBuffer1 @ encrypted buffer result
|
||||
bl encrypt
|
||||
cmp r0,#0
|
||||
ble 99f
|
||||
ldr r0,iAdrszMessEncrip
|
||||
bl affichageMess
|
||||
ldr r0,iAdrsBuffer1 @ display encrypted buffer
|
||||
bl affichageMess
|
||||
|
||||
|
||||
ldr r0,iAdrsBuffer1 @ encrypted buffer
|
||||
ldr r1,iAdrszPolybe2 @ Polybe key
|
||||
ldr r2,iAdrsBuffer2 @ decrypted buffer
|
||||
bl decrypt
|
||||
ldr r0,iAdrszMessDecrip
|
||||
bl affichageMess
|
||||
ldr r0,iAdrsBuffer2 @ display decrypted buffer
|
||||
bl affichageMess
|
||||
ldr r0,iAdrszCarriageReturn
|
||||
bl affichageMess
|
||||
|
||||
ldr r0,iAdrszMessString @ display message
|
||||
bl affichageMess
|
||||
ldr r0,iAdrszString3 @ display string
|
||||
bl affichageMess
|
||||
ldr r0,iAdrszString3 @ string address
|
||||
ldr r1,iAdrszPolybe1 @ Polybe key
|
||||
ldr r2,iAdrsBuffer1 @ encrypted buffer result
|
||||
bl encrypt
|
||||
cmp r0,#0
|
||||
ble 99f
|
||||
ldr r0,iAdrszMessEncrip
|
||||
bl affichageMess
|
||||
ldr r0,iAdrsBuffer1 @ display encrypted buffer
|
||||
bl affichageMess
|
||||
|
||||
|
||||
ldr r0,iAdrsBuffer1 @ encrypted buffer
|
||||
ldr r1,iAdrszPolybe1 @ Polybe key
|
||||
ldr r2,iAdrsBuffer2 @ decrypted buffer
|
||||
bl decrypt
|
||||
ldr r0,iAdrszMessDecrip
|
||||
bl affichageMess
|
||||
ldr r0,iAdrsBuffer2 @ display decrypted buffer
|
||||
bl affichageMess
|
||||
ldr r0,iAdrszCarriageReturn
|
||||
bl affichageMess
|
||||
|
||||
ldr r0,iAdrszMessFinOK
|
||||
bl affichageMess
|
||||
b 100f
|
||||
99:
|
||||
ldr r0,iAdrszMessError @ error
|
||||
bl affichageMess
|
||||
mov r0, #1
|
||||
100: @ standard end of the program
|
||||
mov r0, #0 @ return code
|
||||
mov r7, #EXIT @ request to exit program
|
||||
svc 0 @ perform system call
|
||||
iAdrszMessString: .int szMessString
|
||||
iAdrszMessDecrip: .int szMessDecrip
|
||||
iAdrszMessEncrip: .int szMessEncrip
|
||||
iAdrszString1: .int szString1
|
||||
iAdrszPolybe1: .int szPolybe1
|
||||
iAdrszString2: .int szString2
|
||||
iAdrszString3: .int szString3
|
||||
iAdrszPolybe2: .int szPolybe2
|
||||
iAdrsBuffer1: .int sBuffer1
|
||||
iAdrsBuffer2: .int sBuffer2
|
||||
iAdrszMessDebutPgm: .int szMessDebutPgm
|
||||
iAdrszMessFinOK: .int szMessFinOK
|
||||
iAdrszCarriageReturn: .int szCarriageReturn
|
||||
iAdrszMessError: .int szMessError
|
||||
/******************************************************************/
|
||||
/* encrypt strings */
|
||||
/******************************************************************/
|
||||
/* r0 contains the address of the string1 */
|
||||
/* r1 contains Polybe area address
|
||||
/* r2 contains the address of the encrypted string */
|
||||
/* r0 return buffer lenght */
|
||||
encrypt:
|
||||
push {r3-r12,lr} @ save registers
|
||||
mov r3,#0 @ counter byte string 1
|
||||
mov r5,#0 @ counter byte buffer
|
||||
|
||||
1:
|
||||
ldrb r7,[r0,r3] @ load byte string 1
|
||||
cmp r7,#0 @ zero final ?
|
||||
beq 4f
|
||||
cmp r7,#65 @ < A ?
|
||||
addlt r3,#1
|
||||
blt 1b
|
||||
cmp r7,#90 @ > Z
|
||||
ble 2f
|
||||
|
||||
cmp r7,#97 @ < a ?
|
||||
addlt r3,#1
|
||||
blt 1b
|
||||
cmp r7,#122 @> z
|
||||
addgt r3,#1
|
||||
bgt 1b
|
||||
sub r7,#32 @ convert minuscul to majuscule
|
||||
2:
|
||||
cmp r7,#'J' @ change J to I
|
||||
moveq r7,#'I'
|
||||
ldr r11,iAdrtabiposX
|
||||
ldr r12,iAdrtabiposY
|
||||
mov r6,#0
|
||||
mov r9,#5
|
||||
3: @ loop to search char in polybe square
|
||||
ldrb r8,[r1,r6] @ load byte polybe
|
||||
cmp r8,r7 @ equal ?
|
||||
addne r6,#1
|
||||
bne 3b
|
||||
udiv r10,r6,r9 @ compute coordonnés
|
||||
mls r8,r10,r9,r6
|
||||
|
||||
strb r10,[r11,r5] @ save X position
|
||||
strb r8,[r12,r5] @ save Y position
|
||||
add r5,r5,#1 @ increment indice
|
||||
add r3,r3,#1
|
||||
b 1b @ and loop
|
||||
|
||||
4:
|
||||
mov r6,#0
|
||||
mov r8,r5
|
||||
mov r5,#0
|
||||
mov r3,#5
|
||||
5: @ convert position line 1 in char
|
||||
ldrb r9,[r11,r6]
|
||||
add r6,r6,#1
|
||||
cmp r6,r8 @ first line end ?
|
||||
movge r6,#0
|
||||
bge 7f @ jmp for second line
|
||||
|
||||
ldrb r7,[r11,r6] @ compute rank with position X and Y
|
||||
mul r9,r3,r9
|
||||
add r9,r9,r7
|
||||
ldrb r9,[r1,r9] @ load polybe char
|
||||
strb r9,[r2,r5]
|
||||
add r5,r5,#1
|
||||
|
||||
add r6,r6,#1
|
||||
cmp r6,r8
|
||||
blt 5b
|
||||
|
||||
mov r6,#0
|
||||
6: @ convert position line 2 in char
|
||||
ldrb r9,[r12,r6]
|
||||
add r6,r6,#1
|
||||
7:
|
||||
ldrb r7,[r12,r6] @ compute rank with position X and Y
|
||||
mul r9,r3,r9
|
||||
add r9,r9,r7
|
||||
ldrb r9,[r1,r9] @ load polybe char
|
||||
strb r9,[r2,r5]
|
||||
add r5,r5,#1
|
||||
add r6,r6,#1
|
||||
cmp r6,r8
|
||||
blt 6b
|
||||
|
||||
mov r9,#0 @ zero final
|
||||
strb r9,[r2,r5]
|
||||
mov r0,r5
|
||||
100:
|
||||
pop {r3-r12,pc} @ restaur registers
|
||||
iAdrtabiposX: .int tabiposX
|
||||
iAdrtabiposY: .int tabiposY
|
||||
/******************************************************************/
|
||||
/* decrypt strings */
|
||||
/******************************************************************/
|
||||
/* r0 contains the address of the encrypted string1 */
|
||||
/* r1 contains Polybe area address
|
||||
/* r2 contains the address of the decrypted string */
|
||||
/* r0 return buffer lenght */
|
||||
decrypt:
|
||||
push {r3-r11,lr} @ save registers
|
||||
mov r3,#0 @ counter byte string 1
|
||||
mov r5,#0 @ counter byte result buffer
|
||||
1:
|
||||
ldrb r7,[r0,r3] @ load byte string 1
|
||||
cmp r7,#0 @ zero final ?
|
||||
moveq r0,r5
|
||||
beq 4f
|
||||
|
||||
cmp r7,#65 @ < A ?
|
||||
addlt r3,#1
|
||||
blt 1b
|
||||
cmp r7,#90 @ > Z
|
||||
ble 2f
|
||||
|
||||
cmp r7,#97 @ < a ?
|
||||
addlt r3,#1
|
||||
blt 1b
|
||||
cmp r7,#122 @> z
|
||||
addgt r3,#1
|
||||
bgt 1b
|
||||
sub r7,#32 @ convert minuscul to majuscule
|
||||
2:
|
||||
ldr r11,iAdrtabiposX
|
||||
mov r6,#0
|
||||
mov r9,#5
|
||||
3: @ loop to search char in polybe square
|
||||
ldrb r8,[r1,r6] @ load byte polybe
|
||||
cmp r8,r7
|
||||
addne r6,#1
|
||||
bne 3b
|
||||
|
||||
udiv r10,r6,r9
|
||||
mls r8,r10,r9,r6
|
||||
strb r10,[r11,r5]
|
||||
add r5,r5,#1
|
||||
strb r8,[r11,r5]
|
||||
add r5,r5,#1
|
||||
|
||||
add r3,#1
|
||||
b 1b
|
||||
|
||||
4:
|
||||
mov r6,#0 @ start indice first line
|
||||
lsr r8,r5,#1
|
||||
mov r10,r8 @ start indice second line
|
||||
mov r5,#0
|
||||
mov r3,#5
|
||||
|
||||
5:
|
||||
ldrb r9,[r11,r6] @ load position
|
||||
ldrb r7,[r11,r10]
|
||||
mul r9,r3,r9 @ compute rank
|
||||
add r9,r9,r7
|
||||
ldrb r9,[r1,r9] @ load polybe byte
|
||||
strb r9,[r2,r5] @ and store to result
|
||||
add r5,r5,#1
|
||||
add r10,r10,#1
|
||||
add r6,r6,#1
|
||||
cmp r6,r8 @ end ?
|
||||
blt 5b
|
||||
|
||||
mov r9,#0 @ 0 final
|
||||
strb r9,[r2,r5]
|
||||
mov r0,r5
|
||||
100:
|
||||
pop {r3-r11,pc} @ restaur registers
|
||||
|
||||
|
||||
/***************************************************/
|
||||
/* ROUTINES INCLUDE */
|
||||
/***************************************************/
|
||||
.include "../affichage.inc"
|
||||
Loading…
Add table
Add a link
Reference in a new issue