T11396.pdf

Anuncio
ESCUELA POLITÉCNICA NACIONAL
FACULTAD DE INGENIERÍA ELÉCTRICA
TEMA
'DISEÑO DE UN SISTEMA DE ENCRIPTACION DE VOZ
UTILIZANDO EL MICROPROCESADOR ADSP-2181"
LISTADO DE PROGRAMAS
NOMBRE
MIGUEL E. VICUÑA MUÑOZ
Quito, Noviembre de 1.999
LISTADO DE LOS PROGRAMAS Y ALGORITMOS UTILIZADOS PARA EL
PROCESO DE ENCRIPTACIÓN Y DESENCRIPTACIÓN DJE LA SEÑAL DE VOZ.
Para la comprobación y ejecución de los programas principales de Encriptación y
Desencriptación con sus respectivos algoritmos, es necesario que en el computador se haya
instalado el siguiente sotfware, el cual viene incluido con el EZ-Kit Lite:
C:\ADIJDSP\N
(Assembler, Linker, Simulador, Prom Splitter)
21XX\LIB
(Archivos de Descripción de la Arquitectura)
21XX\EZfGTL
(Programa Host, y Programas Utilitarios)
Los archivos que contienen los utilitarios para ejecutar los programas en el EZ-LAB y
los programas de encriptación y desencriptación de la señal de voz, escritos en el lenguaje
ensamblador del ADSP-2181 son:
C:\ENCRIPTAC10N\P
(Programa de Inicialización)
IN1_KJK3.DSP
(Programa de Inicialización)
REG_CTRL.DSP
(Programa de Control de Registros)
FIN.DSP
(Programa de Finalización)
EZKIT_LT.ACH (Archivo de Descripción de la Arquitectura)
PERMUTA\p
(Algoritmo E/D N°l)
Tx_perm.dsp
Tx_perm.lin
Rx_perm.dsp
Rx__perm.lin
Tablapl.hex
Tablap2.hex
XOR\\\\p
dexor.dsp
Tx_xor.dsp
Tx_xor.lin
(Algoritmo E N° 2)
(Algoritmo D N° 2)
Rx_xor.dsp
Rx_xor.lin
pseu.dsp
(Algoritmo E/DN" 3)
Tx_pseu.dsp
Tx.__pseu.Iin
Rx_pseu.dsp
Rx_pseu.lin
pseu2l81.dsp
Tx_p2181.dsp
Tx_p2l81.1in
Rx_p2181.dsp
Rx_p2181.1in
(Algoritmo E/D N° 4)
dcs'2181.dsp
(Algoritmo E N° 5 )
(Algoritmo D N° 5)
idcs2181.dsp
gen_key.dsp
Tx_dcs.dsp
Tx_des.Iin
Rx_des.dsp
Rx des.lin
Todo los archivos indicados en cada una. de las carpetas anteriores (dentro de
C:\EncriptacionV.), son archivos de textos que contienen los algoritmos de cncriptación y
clesencriptación, así como los programas principales con los cuales se ejecutan en cada uno
de los bloques del sistema (Tx_*.dsp y Rx_*.dsp). Estos archivos de programa se
encuentran en lenguaje ensamblador, el cual puede ser editado utilizando cualquier editor
de texto, como por ejemplo el cdit de DOS, lo importante es que el archivo que contenga el
listado del programa sea de extensión .DSP.
Una vez escrito los programas en lenguaje ensamblador con extensión
.DSP, se
procede a Compilar y Enlazar, el archivo fuente utilizando los programas Assembler
(asm21.exe) y Linkcr (Id21.exe), mediante las siguientes intrucciones desde el DOS:
Assembler:
C:\Encriplacion\CARPETA\asm2t programa -2181
Con este paso se genera a partir del archivo fuente programa.dsp como respuesta tres
archivos, .CDE, .INT, .OBJ. El swítch -2T81 utilizado es aquel que le permite al Assembler
aceptar instrucciones especificas del ADSP-2181. Algo muy importante que hay que
indicar es que todos los archivos *.dsp deben ser previamente esamblados separadamente
para luego ser enlazados y formar así un programa ejecutable.
Linker;
C:\Encriptacion\CARPETA\ld21-i programa.lin-a ..\ezkil_lt -e programa -x -g
En es*ie paso el Linkcr crea un archivo ejecutable a partir de los módulos objeto
creados por el Assembler, dando como resultado el archivo programa.exe.
Los switchs utilizados en este proceso nos dan las posibilidades de:
-i programa.lin : Los archivos listados en el archivo indirecto programa.lin son
enlazados.
-a ..\: El archivo de arquitectura es leído por el Linker.
-e programa: El nombre del archivo dudo a los archivos de salida es programa.exe
-x: Genera un archivo del mapa de memoria -MAF.
-g: Genera un archivo de tabla de símbolos .SYM
E3 archivo programa.lin es un listado donde se encuentran todos los archivos que se
van a enlazar mediante el programa Linker (Id2l.exe) para generar un archivo ejecutable
programa.exe. A continuación se detalla el contenido de cada uno de los archivos, .lin que
se utilizaron en este trabajo de tesis.
C:\Encriptacion\Permuta\Tx_perm.lin\Tx_perm
permulG
C:\Encnptacion\Permuta\Rx_perm.lin\Rx_perm
permu!6
C:\Encriptacion\Xor\Txjsor.lin\Tx_xor
Xor
C:\Encriptacion\Xor\Rx_xorJin\Rx_xor
Dexor
C:\Encnptacion\Pseu\Tx_pseu.linYTx_pseu
pseu2!81
C:\En criptacion\Pseu\Rx_pseu.lm\Rx_pseu
pseu2181
C:\Encripiacion\Pseu2181\Txjp2181Jin\Tx_p2l81
. .\permuta\perrnul6
pseu2181
..\xor\xor
C:\Encriptacion\Pseu2181\Rx_p2181.Iin\Rx__p2181
..\permuta\permul6
pseu2181
..\xor\xor
C:\Encriptacion\Des\Tx_dcs.lin\Tx_des
..\permuta\permul6
des2181
..\xor\xor
C:\Encriptacion\Oes\Rx_desJhi\Rx__des
..\permuta\permul6
ides2181
..\xor\xor
gen key
Una vez obtenido el programa ejecutable programa.exe, este se almacena en el ADSP2181 utilizando el Programa Host proporcionado en el EZ-KIT Lite, para ejecutar los
procesos de encriptación (Tx_*.exe) y dcsencriptación (Rx_*.exe) en cada uno de los
bloques del sistema.
Algoritmos de Encriptación
N;^
^(Archivo ejecutable en el ADSP-2181)
Out
Esquema del Bloque de Encriptación.
f^'iuWitt.jpá'fti-^iC'w^í "K**iM?w-y-t9rrr/«*K'K-ií í.'- r^wííyHíy^í;^i'vs*ipy«í*'Jsaipiwtir£*tíSi*^Vví^M3a«
Out
Esquema del Bloque de Desencriptación
A continuación se encuentra el listado de todos los archivos fuentes en lenguaje
emsamblador que se utilizaron en la tesis: "DISEÑO DE UN SISTEMA DE
ENCRIPTACION DE VOZ, UTILIZANDO ELMICROPROCESADORADSP-2181"
Programa cié Tnici'aliznción ÍNI7.DSP:
Este programa incluye los archivos de inicialización del microprocesador ADSP-21S1
y del codee ADIS47. Se utiliza con los programas de Tx_*.DSP y Rx_*.DSP de los
algoritmos de encriplación y desencripLación respectivamente. Excepto en los del algoritmo
DES2181.DSPe IDES2181.DSP
{ ¡ni7.clsp - Programa de Inicializacion del ADSP-2181 y el CODEC
Miguel E. Vicuña Muñoz/ Encriptacíón de Voz/ Octubre 1999
Código lomado del programa mic2out.dsp de Analog Devices,
Modificado para utilizar i6,Í7,m7 para laTx. y Rx de datos del CODEC
Incluye siibrutina de atención a la Interrupción IRQ2
í
{
Variable and Buffer declarations
.var/dm/ram/circ rx_buf[3]; {Status + L data -f- R data, AD1847 rx buffcr}
.var/dm/ram/circ tx_buf[3]; {Cmd + L data + R data, AD1847 tx buffer)
.var/dm/ram/circ init_cmds[13];
.var/din
stat_flag;
.var/dm
fin_flag;
|
Variable and buffer initializaüon
.init tx_buf: OxcOOO, 0x0000, 0x0000;
{Initially set MCE}
.init ¡n¡t_cinds:
Oxc003,
{
Lcíl input control reg
b7-6: 0=Ieft Une 1
- l=left aux 1
2=leftline2
3=lefl Une 1 post-mixed loopback
b5-4:res
b3-0: lefl ¡nput gain x 1.5 dB
1
Oxcl03, {
Righí input control reg
b7-6: 0=nght Une 1
I=right aux 1
2=rigbt Une 2
3=right Une 1 post-mixed loopback
b5-4: res
b3-0: right input gain x 1.5 dB
Oxc2SS,
{
Icft aux 1 control reg
b7 : l=Ieft aux 1 mulé
b6-5: res
b4-0: gaín/atten x 1.5, 08= OdB, 00= 1 2dB
}
Oxc3SS, {
right aux 1 control reg
b7 : l=righí aux ! mulé
b6-5: res
Oxc4S8,
Oxc588,
OxcóSO,
Oxc780,
b4-0: gaín/attcn x 1.5, 08= OdB, 00= 12dB
}
{
Icft aux 2 control reg
b7 : l=lefl. aux 2 nnitc
b6-5: res
b4-0: gain/atlen x 1.5, 08= OdB, 00= 12dB
}
{
righí aux 2 control reg
b7 : I=right aux 2 mute
b6-5: res
b4-0: gain/atlen x 1.5, 08= OdB, 00= 12dB
}
{
leít DAC control reg
b? : I=!efl DAC mute
b6 : res
b5-Q; attenuatíon x 1.5 dB
}
{
right DAC control reg
b7 : l=right DAC mute
b6 : res
b5-0: attenuaíion x 1.5 dB
data forma t register
b7 : res
b5-6: 0=8-bit unsigned linear PCM
I=8-bÍt u-law companded
2=16-bitsigned linear PCM
3=8-bÍt A-Ia\ companded
b4 : 0=mono, l=stereo
bO-3: 0= 8,
1= 5.5125
2^ 16.
3=* 11.025
4= 27.42857
5= 18.9
6=32.
7= 22.05
8= .
9=37.8
}
c=48.
d= 33.075
e= 9.6
f= 6.615
(bO): 0=XTAL1 24.576 MHz; I=XTAL2 16.9344 MHz
Oxc909,
interface configuration reg
b7-4: res
b3 : l=autocalibratc
b2-1: res
bO : l=playback enablcd
OxcaOO,
pin
b7
b6
b5
control reg
logíc state of pin XCTL1
logic state of pin XCTLO
mastcr- l=lri-state CLKOUT
slave -x-tri-stalcCLKOUT
b4-0:res
0,xcc40,
miscellaneous information reg
b7 : 1=1 6 slots per frame, 0=32 slots per frame
b6 : I=2-wirc system, 0=1 -wire system
b5-0: res
OxcdOO;
_
digital mix control 'reg
b7-2: attenuation x 1,5 dB
b I : res
bO : l=digital mix enabled
Interrupt vector table -dis ints; jump start; rti; rti;
{00: reset}
jump irq2;
rti; rti; rti;
{04: IRQ2J
rli;
rti; rli; rti;
{08: IRQLI-}
rti;
rli; rti; rti;
{Oc: 1RQLOJ
ar = dm(slat_flag);
ar=passar; •
if eq rt!;
jump ncxt_cmd;
10: SportOtx}
jump Ínput_samp]es; rti; rti; rti;
{14:SportOrx}
jump irqe; rti; rl¡; rti;
{18: IRQE}
rti; rti; rti; rti;
{le: BOMA}
rti; rti; rti; rti;
{20: Sport 1 t x o r I R Q l }
rti; rti; rti; rti;
{24:Sportl rxorIRQO}
{28: timer}
rti; rti; rti; rti;
rti; rti; rti; rti;
{2c: power down}
{—:
ADSP 2181 intialization
stait:
¡ó = A r.x_buf;
ICÍ = %r,\_buf;
¡7 = A lx_buf;
I7 = %tx__buf;
¡3 = A inÍt__cmds;
13 =%in¡t_cmds;
mi = 1;
m i - I;
{poínl lo slart of buffcrj
{inilialíze lenglh rcgister}
Serial Port O (SportO) Sct Up
axO = OxOfef;
dm (SportO_Autobuf_CtrI) = axO;
axO = 0;
dm (SportO_Rfsdiv) = axO;
axO = 0;
dm (SportO_Sclkdiv) = axO;
axü - b# 100001100000 l i l i ; dm (SportO_Ctrí_Reg) = axO;
axO =* btfOOOOQOOOOQOOO 1 1 1 ; dm (SportO_Tx_WordsO) = axO;
axO = b#000000000000011 I ; dm (SporlO_Tx_WordsI) = axO;
axO = b//OOOOOOÜ0000001 11; dm (SportO_Rx_WordsO) = axO;
axO = b//0000000000000111; dm (S|iortO_Rx_Words 1) = axO;
Sportl Set Up
dm(Sporll__Auíobur_Ctrl) - axO;
dm(Sportl_Rrsdív) = axO;
dm(Sport l_Sc!kdiv) - axO;
dm(Sportl_Ctrl__Reg) = axO;
dni(Tscale_Reg) = axO;
dm(Tcount_Reg) == axO;
dm(Tper¡od__Reg) ~ axO;
{autobuffering disabled}
{Rfsdiv not used}
{Sclkdiv not used}
{control functions disabled}
{timer not used}
- Syslcm ancl Memory Set Up
axO = b#0000000000000000; dm (Dm_Wait_Reg) = axO;
axO = bflOOO1000000000000;
dm (Sys_CtrI_Reg) « axO;
ifc = bffOOOOOOl 1 l i l i l í ;
nop;
{clcar pending interrupt)
jenable SportO}
10
icnll = btfOQOOO;
mstat = bfí i 000000;
ADSP 1847 Codee intíalization
axO = I-;
dm(slat_riag} = axO;
ena inls;
imask = b#0001000000;
axO = din (i?, m7);
txO = :ixO;
check_Jnit:
axO-= din (slatjlag);
af = píiss axO;
if n c j u m p check_ínit;
ayO = 2;
check_aci I:
axO = din (rx_buf);
a r = axO and ayO;
i f c q jump chcck_ac¡l;
check_ací2:
axO = dm (rx_buQ;
ar = nxO and ayO;
If ncjump cheek_acÍ2;
¡dle;
{clear flag}
{cnable transmit inteniipt}
{start interrupt}
{wait for en tire Init}
{buffer to besent lo}
{the codee
}
{once initialized, wait for codee}
{to come out of autocalibration}
{wait for bit set}
[wait for bit clear}
ayO = OxbOf;
axO = dm (inít_cmds + 6);
ar=axO ANDayO;
dm (tx_buf) = ar;
id le;
{unmutc left DAC}
axO = din (iníl_cnids + 7);
ur = axO ANDayO;
dm (tx_buO = ar;
idle;
{unmute ríghlDAC}
axO = Oxc901;
{clear autocalibration request}
idle;
ax 1 = OxíJOOO;
dm(tx_bur) = a x l ;
{control word tó clear over-range flags}
ifc = b#Oüí)00011111
nop;
¡clear any pending interrupt}
iniask = OxO();
axO = 0;
din(fin_nag) = axO;
jenable rxO interrupt}
{Inicializa fin_flag}
11
Programa do Registros de Control REG_CTRL.DSP:
Esle es un programa donde constan los Registros de Control Mapcados en Memoria, Se
lo utiliza en los programas de Tx_* .DSP y Rx_*.DSP de los algoritmos de encriptación y
desencriplacíón respectivamente.
Excepto en los del algoritmo
DES2181.DSP
e
IDES21S1.DSP, ya que éste viene incluido en el programa INIJCIK3.DSP
{ rcg_ctrl.dsp - Registros de control del ADSP-2181
Miguel E. Vicuña Muño?,/ Encriplación de Voz/ Octubre 1999 }
.consl
.consl
.const
.const
.const
.const
.const
.const
.const
.consl
.const
.const
.const
.const
.const
.const
.const
.const
.const
.const
.const
.const
.const
.const
Sys_Ctrl_Reg=
Dm_Wait_Rcg=
Tperiod_Reg=
Tcount_Reg=
TscaIe_Reg=
SpürtOJlx_Wordsl=
SportO_Rx_WordsO=
SportO_Tx_Wordsl =
SportO_Tx_WordsO=
SportO_Ctrl_Reg=
''
SportO_Sclkdiv=
SportO_Rrsdiv=
B
SportO_Aiitobuf,Ctrl="
Sportl_Ctrl_Reg=
Sportl_Sclkdiv=
Sportl_Rfsdiv=
Sportl_Aiitobuf_Ctrl=
Prog_Flag_Type=
Prog_Plag__Datci=
BDMA_Word_Count=
BDMA_Control=
BDMA_I;xtcrnal_Addrcss=
BDMA_Intemíil_Address=
IDMA Conlrol=
0x3 fTf;
Ox3fie; •
0x3 íTd;
Ox3ffc;
0,x3ffb;
Ox3fTa;
Ox3ff9;
Ox3ff8;
Ox3ff7;
Ox3ff6;
Ox3ff5;
0x3 ff4;
Ox3ff3;
0x3 ff2;
Ox3fFl;
Ox3f¡Ü;
Ox3fcf;
Ox3fe6;
0x3 fc5;
Ox3M;
0x3 fe3;
0x3fe2;
0x3fe 1;
Ox3fcO;
(System Control Registcr)
{Data Memory Wait Control Rcgister}
{Timer Pcnod}
{Timcr Count)
{Timer Scalíng Factor}
{SportO Mullichannel Receivc}
{Word Enable Regísíer (32-bil)}
{SporLO Multichannel Transmit}
{Word Enable Regisicr (32-bit)}
{SportO Control Regíster}
{SportO Serial Clock Divide Modulus}
{SportO Rcv Frame Sync Divide Modulus}
{SporíO AutobuHer Control Register}
{Sportl Control Regisíer}
{Sportl Serial Clock Divide Modulus}
{Sportl Rcv Frame Sync Divide Modulus}
{Sportl Autobufler Control Register}
12
Programa Ue l n i d a l í z a c í ú n ns T JJ<IK3.DSP:
Al igual que en el programa JN17.DSP se incluye en este programa los archivos de
iniciíilización del inícroprocesador ADSP-2181 y del codee AD1847. Se lo utiliza en los
programas de T.x y R.x de ¡os algoritmos DES21SI.DSP e IDES.
{ ini_kik3.dsp-Proyrma de Inicinlíxücion del ADSP-2181 y el CODEC
Miguel E. Vicuña iMiiiloz/ Encripüicíón de Va1/. I Octubre 1999
Código tomado del programa mic2oul.dsp de Analog Devices,
Incluye stibrulina de atención a la Inlcrrtipcion 1RQ2
.modulc/RAM/ABS^O
Encriplacion_dc_voz;
{
C o n s t a n ! Declaralions
{inciiHiry mappcd ADSP-2181 c o n t r o l rcgistcr.s)
.const Sys_CtrI_Reg= Qx3fff;
.const Dm_W;iit_Reg=Ox3frc;
.const Tpcriod_Rcg= Ox3ffd;
{System Control Rcgísler}
{Data Memory Wail Control Register}
{Timcr Períod}
.const Tcount_Reg= 0x3 ÍTc;
{Tínicr Count}
.consl
.const
.const
.const
.const
.consl
.consl
.const
.consl
.const
.const
.const
.const
.const
.const
.consl
.const
.const
.const
{Timer Scaling Factor}
{SportO Multichanncl Rcccive}
{Word Enable Rcgislcr(32-bit)f
{SportO Multichanncl Transmití
{Word Enoble Regislcr (32-bit)}
{.SportO Control Rcgístcr}
¡SporlO Serial dock Divide Modultis) .
{SportO Rcv Frame Sync Divide Modulus}
{SporlO Autobuffer Control Regislcr)
{Sportl Control Register}
{Sport 1 Serial dock Divide Modulus}
{Sportl Rcv Frame Sync Divide Modulus}
{Sportl Autobuffer Control Register}
Tscale_Rcg- 0x3 fíb;
SporlÜ_Rx_Words 1=0x3fía;
SportO_Rx_WordsO= 0x3nV;
SporlO_Tx_Wordsl = Ox3ff8;
SporlO_Tx_\VordsO= Ox3ff7;
SporlO_ClrI_Rcg* Ox3fnS;
Sporlt)_Sclkdiv= Ox3ff5;
SportO_Rfsd¡v= 0x3ff4;
SportO_Aulobuf__Ctr[=Ox3rD;
Sportl_CLrI_Rcg==Ox3ff2;
Sport l_Sclkdiv= 0x3ffl;
Sportl_Rfsdiv= 0x3ffÜ;
SportI_Aulobuf_Círl=Ox3fcr;
Prog_Flag_Typc=Ox3fe6;
Prog Flag_Data=Ox3fe5;
I3DMA_Word_CouiU=* 0x3fc4;
I3DMA_Comrol= 0x3fe3;
!3DMA_E.xterna!_Addrcss= Ox31"e2;
I3DMA_Intenuil_Address= 0x3feI;
.consl IDMA Control= Ox3fcO;
Viii-íahic anü I3iiffcr dechirntions
.var/clm/ram/circ rxjniíp];
.var/dni/rani/circ txJ)iif[3J;
.VEir/dm/ram/circ Ínit_cmds[I3J;
.var/dm
staí_flag;
.var/dm
fi]iriiig;
{Status -I- L data+ R data, A D I 8 4 7 rx buffer}
¡Cnid -i- L data 4- R dala, AD1847 tx buffer}
13
Variable and buffcr iniüalization
.init tx_buf: OxcOOO, 0x0000, 0x0000;
,inií init_cmcls:
OxcOQO,
OxclOO,
{InHíalIy set MCE}
{
Lcft input control reg
b7-6: 0=leftlinc I
I=left aux I
2=lefi I i n e 2
3=left line 1 post-mixed loopback
b5-4: res
b3-0: l e f t i n p u L g a i n x I . S d B
}
{
Right input control reg
b7-6: 0-right line 1
l=riglit aux 1
2=r¡ghtlÍne2
3=right Une 1 post-mixed loopback
b5-4: res
b3-0: right input gain x 1.5 dB
}
Qxc2S8,
{
Icft aux 1 control reg
b? : l=Ieft aux 1 imite
b6-5: res
b4-0: gaín/attcn x 1.5, 08= OdB, 00= 12dB
}
Oxc388,
{
right aux 1 control reg
b7 : l=right aux 1 mu te
b6-5: res
b4-0: gíiin/atten x 1.5, 08= OdB, 00= 12dB
1
Oxc488, {
leñ aux 2 control reg
b7 : l=left aux 2 mute
b6-5: res
b4-0: güin/atten x 1.5, 08= OdB, 00= 12dB
}
Oxc5SS,
{
right aux 2 control reg
b? : l=right aux 2 imite
b6-5: res
b4-0: gain/atten x 1 .5, 08= OdB, 00= 12dB
\, {
left DAC control reg
b7 : M e f t D A C m u l c
b6 : res
b5-0: attenuation x 1.5 dB
OxcVSO,
{
right DAC control reg
14
b7 : I = r i g h l D A C m u t c
bG : res
b5-0: atlcnualion x 1.5 clB
fs,
daln forma t rcgisíer
b? :res
b5-6: 0=8-bil imsigned linear PCM
l=S-bit u-law coinpandcd
2= 16-bÍt signcd linear PCM
3=8-bH A-Ia\ conipanded
b'l : 0=1110110, I=sterco
bü-3:0= 8.
1= 5.5125
2= 16.
3=11.025 ,
4= 27.42857
5= 18.9
6= 32.
7= 22.05
8= .
9=37.8
a= .
b= 44.1
c=48.
d= 33.075
c= 9.6
f= 6.615
(bO): 0=XTAL1 24.576 MMz; 1^XTAL2 16.9344 MHz
Oxc909,
¡nlcrfacc configuration reg
b7-4:res
b3 : I=autocalibrate
b2-1: res
bO : l=playback enabled
OxcaOO,
pin
b7
b6
b5
control reg
: logic stale ofpin XCTL1
: logic slale o f p i n XCTLO
Miiastcr- l=lr¡-sUUe CLKOUT
slave -x-lri-slate CLKOUT
b4-0: res
niisccllancoiis ¡nformalion reg
b7 : 1 = 16 .slots per Trame, 0=32 slots per Trame
b6 : l=2-wirc system, Ü=I-wirc syslem
b5-0: res
OxcdOO;
digital niix control reg
b7-2: altciuiation x 1.5 clB .
b 1 : res
bu : l=dígital mix enabled }
15
l.nlerrupt vector tablc —
juiíip stiirl; rli; rlí; rlf;
junip Írq2;
rti; rlí; rlí;
rlí;
rli; rti; rti;
rli;
rt¡; rli; rli;
{00:
{04:
{OS:
{Oc:
ar= dm(slaHlag);
ar = pass ar;
ífcq rli;
jump ncxi_cmd;
{HhSporlOtx}
jimip inpul_sanip!es; rti; rli;
jump írqc; rti; rlí; ríi;
rli; r[¡; rti; rti;
rli: rli; rli; ríi;
rli; rli; rli; rli;
rli; rli; rti; rti;
rti; rli; rti; rti;
rli;
rescl)
1RQ2}
IRQL1)
IRQLOJ
{!4:SportOrx}
{ISMRQEJ
{le; BOMA)
¡20: Sport I txorIRQ!}
{24: Sport I r x o r I R Q O J
¡28: timer)
{2c: powcr downj
A D S P 2 I 8 J ¡nlializaliun
i
slarl:
ÍO = Arx buf;
!0 = %rjT_bur;
ÍI = A tx_buf;
II =%lx_buf;
¡3 = Ainil_cmds;
13 =%iníi_cmds;
ni 1 = I;
{poinf toslart of bufler}
(ínitializc Icngth regís [crj
{
scriiil I'ort O (Spoi'(O) Set Up
iixO = b//OOOOÜO!OIOOOOI I I; dm (SportO_Autobuf_C(rl) - axO;
axO = 0;
n,\ = 0;
din (SporlO^RTscliv) = axO;
clin (SporlO_Se¡kdiv) - axO;
axO = btflOOOOi 1000001111; din (SpoilO_CtrI__Rcg) = axO;
axO = bSOOOOOOOOOOOOO!
din (SporLO_T.\_WordsO) = axO;
iixO = b#00000000000001
din (SporlO_Tx_Wordsl) = axO;
axO*b/ÍOOOOOOOOOOOOOI
din (SporlO_Rx_WordsO) - axO;
axQ = b//OOOÜOOOÜOOOOOl
dm (SporlO_Rx_\Vordsl) = axO;
Sporí 1 Set Up
nxO « 0;
diu(SportI_AiilobLif_CtrI)«3xO;
dm(Sport l^Sclkdiv) = axO;
dmCSport l"Ctr]_Rcg) = axO;
{aulaburrcring disabled}
¡Rfídiv not uscd}
(Sclkdiv not tisedf
{control functions dísablcdj
16
axO = 0;
dni(Tscalc_Rcg) = axO;
dm(Tcount_Rcg) = axO;
{limcr not uscd}
dm(Tpcriod_J<cg) = axO;
{
--------------------------------
System and Memory Set Up
----------------
axO = b/íOGOOOÜOOOOQQOOOO; dm (Dm_Wait_Reg) = axO;
axO = b//OÜO!OOOOOOOOÜOOO; dm (Sys_CtrI_Rcg) = axO;
jenable SporiO}
i fe = bflÜOOOOO ! 1 1 ! 1 1 11 ;
nop;
{olear pending interrupt}
mstat = b# i 000000;
AOSP 1847 Codee intiaÜTiation
axO= 1;
dm(stat_flag) = axO;
{clear flag}
imosk = W/0001000000;
{enable transmit ¡nlerrupl}
axO - dm (i 1, m 1);
txO = axO;
{start interrupt}
}
checkjnil:
íixO = dm (statjlag);
{wail for eiUire Init}
af = p:iss axO;
{buffer lo be sent ío}
i f n c j u m p checkjnit;
{Ihe codee
}
ayO = 2;
check_acil:
axO = dm (rx_buf);
a r = axO and ayO;
if eq jump check_acil;
check_EicÍ2:
a.xO = dm (rx_buf);
ar= axO and ayO;
if ne jump check_aci2;
¡dle;
ayO = OxbGf;
axO = dm (inil_cmds + 6);
ar = axO ANDayO;
ti ni (lx_buQ = ar;
¡d le;
axO = dm (init_cmds + 7);
ar = axO A N D a y O ;
{once Initialízed, wait for codee}
{to come out of autocalibration}
{wait forbit set}
{wait for bit clearj
{unmute left DAC}
{unmute right DAC}
17
clin (Lxjnif) = ar;
¡ule;
axO«Oxc-yQl;
{clcar aulocalibration rcqucsl)
dm(U\_bnQ = axO;
idlc;
axl =0x3000;
clni(tx_biiQ = a.x I;
{control word to clear ovcr-range Hags)
iíc=bí/QQOOOOm
nop;
{clcarany pcnding interruplj
imaslc=0;
{cnnblc rxO inlcmipt}
axO = 0;
dni(fin_nag)=:ixQ;
rcsc! D I ;
18
P r u E i n i m n de Finalización IHN.ÜSP:
Este programa se lo u t i l i z a en todos los programas Tx_*.DSP y Rx_*.DSP, como parte
final del programa de mucslrco.
{Mn.dsp - T'nrlc final tlel pruyrinna de Mu es (re o
Migui-l 15. Vicuña M u ñ o z / E n c r i p t n c i ó n de VOY, I Octubre 1999 }
Rutina de l:i liitcrriipcifin de Recepcifín-
nc.\[_cnid:
ena sec_reg;
axO = dm (Í3, ni!);
(lm (lx_buf) = a.\0;
{Obtiene la palabra de comando del bnffcr ¡nit_cmds }
¡Coloca la palabra de comando en la primera localída de lx_buf}
nxO = Í3;
nyO = A init_cmt!s;
a r = axO -ayO;
i f g t rti;
axO = QxaflJÜ;
dm (lx_fauO-axO;
- axO = U;
dm (s!at_riag} = axO;
{Verifica hi existencia do palabras de comando adicionales}
{Retorna de la ¡memipcíiín si todav¡a existen palabras esperando}
{SÍ no es as¡ rcsetea la stat_flag y remueve MCE si
lia terminado la ¡niciaÜzacic'n }
{Rcsetea la bandera statjlag}
Arcliivo de Descripción de la A r q u i t e c t u r a EZK1T_LT.ACH:
Este archivo proporeionado con el EZ-K1.T Lite se especifica con el parámetro —a. Su
función es la de describir las características del hardware utilizado con el ADSP-21SI (en
este caso el EZ-LAB), Es u t i l i z a d o por el Linkcr y el Simulador para señalar inconsistencia
entre el software y y el hardware.
EZKIT_LT.ACH
$EZKIT
$ADSP2181
$ 0 0 0 0 37FF paxIWT_PM_USER t
$0000 3DFF dadINT_DM_USER t
$
19
PROGRAMAS DE ENCRIPTACION Y DESENCRIPTACION DE VOZ
UTILIZANDO EL ALGORITMO PERMU16.DSP Y PERMU16I.DSP
RESPECTIVAMENTE
Programa P r i n c i p a l de Encriptacióii:
{Tx_PERM.DSP-Programa Principa] de Encripi ación del Algoritmo P E R M U I 6 . D S P
Miguel E. Vicuña M u ñ o z / ttncriptaeión de Voz/ Octuhrc 1999
¡6
¡7
ni?
> Puntero para rx_buf
> Puntero para tx_buf
> Utilizado para el aulobufcrado: m7=l
1
.MODULE/RAM/ABS=0
|
Rx_mueslras_Tx_io;
Declaración de constantes utilizadas en el programa
.CONST
.INCLUDE
.EXTliKNAL
[s=0xc85l, num=1024 ! n¡vel_ru¡do=0x030r; { fs=5.5125 kl-Iz
<..\reg_ctrl.dsp>;
permutar;
Declaración de variables —
A'AR/DM/CIRC/ABS=Q
.VAR/DM/CIRC
' xin[num];
xcjx[ñum];
.VAR/DM
.1N1T
.INIT
.1NIT
.INIT
inicio, inijlenar, ncntr, tabla_per[32];
inicío:Ü;
iniJlcnanO;
ncnlniHim;
tnblajicr:<tahlapl.hcx>;
.INCLUDE
<..\ini7.dsp>;
{ Programa para la inicialización de! CODEC y el DSP }
mí)=l;
10-%x¡n;
iO=Axin;
ll=%xc_tx;
Íl= A xc_tx;
13=0;
axO=num;
dni(nciHi') = EixO;
axO=0;
dm(inicio)=axO;
dni(ini_llcnar)=a.xO;
resct fl I ;
sel flO;
set f!2;
icníl=b^OOIOO;
{Activa bandera flO }
{Acliva bandera H2 }
{ Activa la interrupción IRQ2 por flanco }
20
configurar:
imask=0;
• ifc=0xff;
. nop;
' •. ímnsk=0x230:
esperas
Elimina interrupciones pendientes }
Habiliia IRQB, IRQ2 y el puerto serial SPORTO }
{Lazo principal del programa }
idlc;
axO=dm(r¡n_nag);
ar=pass axO;
Í f u e rts;
jump espera;
¡
, S u b r u t i n a d o n d e se procesa las muestras de entrada en base al algoritmo PERMU16.DSP
Ínput_?amples:
ena sec_rcg;
ax0=dni(inicio);
ar=pass axG;
ifcqrti;
ayí)=dni(rx_bur+l);
{
}
{ Lee muestra de entrada por el canal izquierdo}
Rutina para eliminar ruido de fondo
}
axO-ayO;
ar=abs axt);
. - ay0=nivel_ruido;
' • none=ar-ayO:
if gt af=pass axO;
1 none=ar-ayO;
if le af=pass 0;
ar=pass af;
ayO=ar;
i3 =/1 tabia_pcr;
cali permutar;
dm(lx_buf+l)=ar;
dm(tx_buf+2)=ar;
reset HO;
nop;
io(0)=ar;
nop;
set nO;
{Llama a la subrutina de encriptación}
{ Transmite la muestra encriptada por el canal izquierdo }
{ Transmite la muestra encriptada por el canal derecho }
{ Resel de la bandera flü}
{Acíiva la bandera flO}
axO=dm(ini_llcnar);
none=pass axÜ;
i f e q rli;
dm(ÍO ! inO)=ayO;
dm(Ü,niO)=ar;
ar=dm(ncntr);
ar=ar-I;
dm(ncnlr)=ar;
if ne rii;
21
ax0=0xl;
din(nnjlag)=axü;
rl¡;
{
Siibruíiir.i que atiende l:i I n t e r r u p c i ó n IRQE
}
irqc:
ciin scc_rcg;
togglc H1;
;ixQ=din(mÍcio);
ar=nol axO;
clni(!nicio)=ar;
rti;
{
Suhriitina t|ue aíiendü l:i l i H c r r u p c í ñ n IKQ2
}
irq2:
cna scc_rcg;
togglc n i ;
nx 0=0x1;
dm(¡ni_llcnar)=axO;
rcsct ¡12;
rl¡;
'.INCLUDE
<Afi[i.ds|)>;
.ENDMOD;
22
Programa del Algoritmo PERMU16.DSP:
{ PERMU16.dsp.- Algorilmo tic cncriplacion de muestras r tal izando una permutación de bits
Miguel E. Vicuña M u ñ o z - E n c r i p t a e i ó n de Voz- Octubre/ 99
Entrada:
ayO = Palabra de 16 bits
13=0
¡3 —> apuntando inicio de tabla de permutación
¡2 —> apuntando inicio de tabla sin permutación
Salida:
a r = Palabra de 16 bits permutada
Registros alterados:
a,xQ,axl ! ayl,ar,ar,srl,sc,i2,m2,12,i3,13
Tiempo de ejecución:
106 Ciclos de Maquina
La labia de permutación debe ser llenada de acuerdo al siguiente criterio:
Tabla sin permutación
O—>OOOI
FFFE
1 _.__> 0002
FFFD
2 —-> 0004
FFFI3
3 -—> OOOS
FFF7
4_-._>0010
FFEF
5 —> 0020
FFDF
6 —> 0040
FFBF
7 —> Q080
FF7F
S -—> 0100
FBFF
9 -—> 0200
FDFF
10—- >0400
FI3FF
I I — - > 0800
F7FF
12-—> l ü O Ü
EFFF
13____>2000
DFFF
14-__->4000
BFFF
Í5_.._>3000
23
7F
.MODULE/KAM
pcnHilacioii_I6bils;
.VA1VDM
labla_bits[16j;
.INIT Uib!a_bHs: 0x0001,0x0002,0x0004,0x0008,0x0010,0x0020,0x0040,0x0080,
0x0100,0x0200,0x0400,0x0800,0x1000,0x2000,0x4000,0x8000;
.ENTRY
permutar;
permutar:
ayl=0;
m2=I;
12=0;
i2= A tabla_bíts;
srl=dm(¡2,m2);
axO=dm(i3,ni2);
axl=dm(i3,ni2);
cnír=15;
do \vord_a_bil u n t i l ce;
ar=srl and ayü;
sr!=clni(i2,m2);
i f n c af=axO or a y l ;
ifcq af=ax I and ay
ar=píiss af;
axO=clin(i3,m2);
Eixl=clm(i3,ni2);
\vord_a_bit:
ayl=ar;
ai-srl and ayO:
i ["ne af=axO orayl;
ifeq aí=ax I and ayl;
ai^pass af;
rts;
{Encera e! registro AY!
{Dclcrniinas! el bit n (O..I4) en el registro AYO es 0/1}
{Almacena el nuevo dato de la labia sin permutación}
{ SÍ n es 1 pone en I la nueva posieiún del bit permutado en A!7}
[ SÍ n es o pone en O la nueva posición del bit permutado en Al 7 }
{Almacena en AII el muestra permutada y guardada en AF}
{Almacena el nuevo dato de la tabla de pcrmiilíición}
{Almacena el siguiente dato de la tabla de permutación)
{Almacena en AY1 la muestra que se está permutando}
(para ser utilizada dentro del lazo}
{Determina si el bit 15 en el registro AYO es 0/1}
{ SÍ el bil 15 es 1 pone en 1 su nueva posición permutada en AF}
{ SÍ el bit 15 es O pone en O su nueva posición permutada en AF}
{Guarda la muestra del mensaje cifrado al registro AR}
.RNDMOD;
El archivo T A B L A P I . I I E X , es un ai-chivo que contiene los datos TABLAPER1 de la tabla
1 en base a los cuales se realiza la permutación de los bits de las muestras de entrada. En lo
que respecta al proceso de dcscncriplación, se utiliza el Algoritmo PERMU16I.DSP, que es
el mismo PERMU16.DSP, pero con los datos TABLAIPERIdc la tabla 1, con los cuales se
realiza el proceso de rcordcnamicnto cíe !os bits de las muestras encripíadas.
24
a PniicÍ|Kil de Dcjjcncrjrjjncíún:
{ RxJMEKM.DSI1- l'ruíjramn Principnl de ilcscneriplacmn del Algoritmo PISRMUlíjl.DSP
Miguel E. Víctina Muño/,/ l£iicnplac¡óii de Vox/ Ocluí) re 1999
¡(j ----- > Puntero para rx_bur
¡y ----- > puntero para txj.nil"
ni? ----- > Utilizado para el autobuferadu: m7-l
.MODULE/RAM/ABS=0
{
R,x_muestrasjo_Tx__CODEC;
Declaración de conslanles uíilixadas en el programa
.CONST
Ps=-0.xcS51, N=2, nuni=l024;
.INCLUD12
<Arcg_clrl.dsp>;
.EXTERNAL
permutar;
¡
Dcclarncion cíe varí:il)lcs
.VAR/DM/C!RC/ABS=Ü xc_r.x[rnmij;
.VAIVDM/C1RC
xout[nuin];
entrada [N];
.VAK/DM/CIRC
iiu_rx, inijlenar, nciilr, lablajicr[32];
.VAR/DM
.INIT
.INIT
.INIT
.1NIT
ini_rx:Ü;
¡iiMlcnnnO;
ncntnniJni;
critr;ida:0,0;
.INIT
lnblaj)er:<tnbliip2.hex>;
.INCLUDE
<..\iuÍ7.dsp>;
rcset fl I ;
icntl-bííOOlOO;
m4=l;
I4=N;
(Programa para Inicializacion del CODEC y el DSP }
(Rcsct de la bandera fl I}
{ Activa la interrupción IRQ2 por flanco }
i5=Aentrada;
mO=l:
10=%xc_i-x;
iO=Axc rx;
ll=%xoul;
ü=Axoul;
configurar:
¡ni¡isk=0;
ií!=Ae ni ráela;
¡5=Aei lirada;
axO=nuni;
25
dm(ncntr)=axO;
axO=0;
dm(ÍnÍj7í)=axO;
dm(ÍnÍJlenar)=axO;
ifc=Qxff;
nop;
imask=0x230;
espera:
{ Elimina interrupciones pendientes }
{ Habilita !RQ2, IRQE y el puerto serial SPORTO }
{ Lazo principal del programa }
id I e;
axO=drn(fm_riag);
ar=pass axO;
if nc rts;
junip espera;
{
Suhrutina que atiende a la Interrupción IRQ2
}
Írq2:
ena sec_rcg;
si=io(0)¡
dm(i4,rn4) 5:s sÍ;
axO=l;
dm(inÍj'X)=axO;
toggleTll;
{ Almacena muestras encriptaüas en el buffer entrada }
rti;
{
Subrutino donde se procesa las muestras encriptadas en base al algoriüno PERMU16I.DSP
}
inpul_samplcs:
cna scc_rcg;
axí)=dm(ini_ni);
ar=pass axO;
if eq rti;
ayü=dm(¡5,ni4);
Í3= A tabla_pcr;
cali permutar;
{ Lee muestras del buffer rcsul }
dm(lx_buf+¡)=ar;
dm(lx_buF+2)=ar;
{ Transmite muestra desencríptada por el canal izquierdo j
{ Transmite muestra dcscncriptadaporel canal derecho }
{ Llama a la subrutina de descncriptaclón}
axQ=dm(Qx3re5);
ar=lstbilOoraxO;
if ne rl¡;
dm(¡0,mO)=ayO;
dm(il,mO)=nr;
ar=dm(ncntr);
ai-=ar-l;
dm(ncnlr)=;¡r;
if nc rti;
axO=Ox.f;
dm(fin_nag)=axO;
rti;
26
¡N"
TABLASINPER
0
0001
FFFI-;
0002
FFFD
0004
FFFB
0008
FFF7
0010
FFEF
0020
FFDF
0040
FFBF
0080
FF7F
0100
FGFF
0200
FDFF
0400
FBFF
0800
F7FF
JOOO
EFFF
2000
OFFF
4000
BJT ir [T
8000
7FFF
1
2
3
4
5
6
7
8
9
10
.11
12
13
14
15
TABLAl'i
0020
FFDF
8000
7FFF
ÜOOS
FFP7
0040
FFIiF
0200
FDFF
: 1000
JEKITF
0004
FFFB
0100
FIÍFF
0010
FFEF
0400
FBFF
- 4000
BFI7F
0002
FFFD
0080
FF7F
2000
DFFF
0800
F7FF
0001
FFFF,
TABLAP2
8000
7FFF
0800
F7FF
0040
FFBF
0004
FFFB
0100
FIÍFF
0001
FFFF,
0008
FFF7
1000
EFFF
0080
FF7F
0010
FFIÍF
0200
FDFF
4000
BFFF
0020
FFDF
. 2000
-DFFF
0400
FBFF
0002
FFFD
Tablo 1.-.Tablas tic permutación para la Encriplacíún y la Descncriplíieioii
23
P R O G R A M A S PARA LA E N C R I P T A C I O N Y DESEINCRIPTACION DE VOZ
U T I L I Z A N D O EL A L G O R I T M O XOR.DSP Y OEXOR.DSP RESPECTIVAMENTE
Programa Principal de Encrintación:
{ Tx_XOK.DSP- Programa Principal de eneripíaeión del Algoritmo XOR.DSP
¡Miguel E. V i c u ñ a M u ñ o z / lüncriplación de Voz/ O e l u b r c 1999
\()
¡7
in7
> Puntero paca rx_biiC
> puntero para (x_biif
> Utilizado para el anlolni(erado: ni7=l
.MODUL£/RAM/AQS=0
{
Rx_imieslras_Tx_io;
Declaración de conslanícs nlilixadas en el programa —
.CONST
.INCLUDE
.EXTERNAL
ís-OxeS51, mim=!024, n¡vc!_niido=0x02ar; { fs=5.5I25 kHz
<..\rc'g_círl.dsp>;
xor_erip;
/
üecl:iración de variables
,VAR/DM/CIRC/AI3S=0
.VAR/DM/CIRC
xiii[num];
xc_lx[nii[]i];
.VAR/DM
inicio, ínMIcníir, ncnlr;
.INIT
.INIT
.INIT
inicio:Ü;
ÍnÍ_llcnar:0;
ncnlnmim;
.INCLUDE
<.\Íni7.dsp>;
Programa para !nlcialización del CODGC y el DSP }
mO=l;
10=%x¡n;
ÍO=Axin;
ll=%xc_!x;
il=Axc_t.x;
axO=[H!in;
dm(ncnír}":ixO;
axO=Ü;
dmCinicio)=!ixÜ;
rcsel H I ;
set no;
sel H2;
icnll=W/OOIOO;
{Aclivii Inbíindcm HOJ
{ Activa la bandera Í12}
{ Activa la interrupción IRQ2 (lüneo
configurar:
Ímask=0;
29
iíc=üxlT;
nop;
iinask=0.\230;
espera:
Elimina interrupciones pendientes }
Habilita IRQG, l R Q 2 y c l puerto serial SPORTO
Laxo principal del programa }
id le;
axO=dni(fin_Miig);
¡ir= pass axO;
i fue rls;
jump cspcni;
{
Subriitina donde se procesan las mueslrus de entrada en base :il algoritmo XOR.DSP
inpni_sí]inp]cs:
ena scc_rcg;
axO=dm(inicio);
tu—pass axO;
ifcq rti;
ar=dm(rx_bul'H);
{
axO=ar;
ar=abs a.\0;
ayü=n¡vcl_niído;
nonc=ar-ayQ;
¡fgt af=pass axO;
none=ar-ayO;
i f i e ar=pass 0;
ar=pass ai';
}
{ Lee muestra de entrada por cl canal izquierdo}
Uutina paríi eliminar ruido de fondo
mrO=ar;
cali xor_crip;
dm(lx_buPH)=ar;
dm(tx_bur-i-2)^ar;
Llama a la subnilina de Ilncriplación}
Transmile entrada cncriptada por el canal izquierdo
Transmite entrada cncriptada por el canal derecho }
rcscl nO;
Reselde la bandera HO}
j
nop;
io(0)=ar;
nop;
sel 00;
{Activa bandera 110}
nxO=dm(inÍJIcn¡)r);
none-pass axO;
ifeq rli;
tlm{i0,m0)=mrü;
dni(ÍI,mO)=ar;
ar=dni(nenlr);
ar=ar-l;
dm(ncnlrj=ar;
i fue rti;
axü=0xf;
30
IVnyruimi del Al^orilniu XOR.OSP:
{XOR.DSr - Algoritmo de eiicriplneiuii de mucslras rcalr/.umlu un XOR :i la secuencia de bits
Miguel I£. Vicuña Muño/, - E n c r i p l a c i ú n de V o z — Octubre/ 99
inri) = dalo original de entrada
Registros allenidos
ar,sr,axO,ayO,rnxO,mxl
S:ilidn
ar = dalo de salida cncriptado
Tiempo de ejecución
219 ciclos de maquina
sub_xor;
xor_er¡p;
.MODULE/llAM
J-NTRV
xor_cnp:
ai-tstbil Ü o r n i r Ü ;
axO=ar;
ar=tslbít I ofmrO;
s r = I s h Í Q a r b y - l (lo);
ayO=srO;
ar=axO xor ayÜ;
s r = I s h i r t m r O b y - l (lo);
mxO=srO;
s r = l s h m a r b y 15 (hi);
mxl=srl;
cntr=I4;
do lazo u n t i l ce;
{Determina si el bil O de la muestra del mensaje de entrada es O/1
{Alnuiceiia el bit O en el registro AXO}
{Determina si el bit I d c la muestra del mensaje de entrada es 0/1}
{Desplaza el bit I de la muestra una posición hacia la derecha }
{Almacena el bit I en AYO guardado en SRO}
{Se obtiene el bit Cu de la muestra del mensaje cncriptado}
(Desplaza la muestra del mensaje de entrada una}
{posición hacia la derecha y se almacena en MXO}
{Desplaza el bit C<j 15 posiciones a la izquierda y almacena}
{el bit aislado en el registro M X I }
ar=tslbit 1 ofsrO;
sr=ishin a r b y - I (lo);
ayQ=srO;
ai—axO xor ayO;
{Muestra del mensaje de entrada desplazado al registro SRO}
{Determina si el bit O (M¡) de la muestra desplazada es 0/1}
{Almacena el bit 0(M¡) en el registro AXÜ}
{Determina si el bit 1 (M¡ f l ) de la muestra desplazada es 0/1 ]
{Desplaza el bit I (M¡ ( [) una posición hacia la derecha }
{Almacena el bit l(M¡n) en el registro AYO}
{Se obtiene e! bit C¡,i de la muestra del mensaje encriptado}
sr=I;>hin srO by -i do);
mxO=srO;
{Se mueve la palabra del mensaje de entrada desplazado u n a )
{posición hacia la derecha y se guarda en el registro MXO}
srO=mxO;
ar=tstbil O ofsrO;
axO~:ir;
srl =mxl;
lazo:
sr=!shin srl by -I (hi);
{l;l bit C¡ se desplaza una posición hacia la derecha}
sr=sror I s h i f t a r b y 15 (hi); {Une el bit Q y el bit GUI y los
mx !=srl;
{almacena en el registro mx I ¡
ayO=mxO;
ar=tstbit 1 o f s r l ;
{Determina si el bit M !5 de la muestra de entrada es 0/1}
sr=lshiíl ar b y - I (hi);
ar=srl;
:ir=ar Nontyü;
{Se obtiene el bil C [5 de la muestra del mensaje encriptado}
srl=mxl;
sr=lshiR srl hy -1 (hi);
si=sr or Ishift ar by 15 (hí);
{ Une el bit Ci¡ con los bits CM.....CD de la muestra encriplada}
ai~srl;
{Asigna al registro AR la muestra de 16 bits del mensaje encriptado }
rts;
JiNDMOD;
32
Programa IVincipiil de Dcsencriptaciún:
Principal de Dcseiirnplación üel Algoritmo OEXOR.DSI'
¡Miguel E. Vicnn:i Muño/,/ iCncrípi ación de Voz/ OcUibre 1999
¡5 ----- > Puniera para rx_buf
¡7 ----- > Puntero para lx_buf
nl 7 ----- > Utilizado para el autobul'erado: m7=I
1
.MODULI¿/RAM/ABS=0
Rxjiiuestrasjo_Tx_CODEC;
¡-------------------------------Declaración fie c u n s l n n f e s ulilixadus en el progrnma ---------.CONST
fs-0.xc85l, N=2, num=l024;
.1NCLUDE
<.\rcg_clrl.dsp>;
.EXTEIINAL
xor_decrip;
Declarneion de varíublcs
.VAR/DM/CIRC/AI3S=0
.VAR/DM/CIIIC
.VAR/DM/CIRC
xc_rx[iuim];
xoiULiiurn];
enlrada[N];
.VAR/DM
ínij'x, Íni_llen:ir, ncntr;
.IN1T
.INIT
.INIT
.INIT
Ín¡_rx:0;
ÍnÍ_llenar:0;
[icntr:nuni;
cntnula:Ü,Ü;
.INCLUDE
<..\ini7.ds])>;
resé! H l ;
¡ciill-bffOOlOO;
im!=l;
I4=N;
{Programa de Inicialiwción del CODlíC y el DSP
{ Rcsel de la bandera II I }
{ Activa la interrupción IRQ2 por flanco j
Í5= A entrada;
mO=l;
I0=%xc_r.x;
iO= A xc_rx;
il= A xoul;
configurar:
i'l=AenIrada;
Í5= A cnlrada;
í].\0=[Uiin;
din(ni;[ifr)-axÜ;
33
axü-0;
dm(ini_llenar)~;ixO;
i!c=0.xlT;
nop;
Elimiriíi interrupciones pendiente:; }
Ímask-0x230;
I l a b i l i l a 1RQ2, IRQE y el puerto serial SPORTO
Lazo principal de programa }
espera:
idlc;
axO=dm(fin_riag);
ar=pass axO;
i f n e rts;
jump espera;
-- Siilti'iiliníi que : i t i e n d e la I n t e r r u p c i ó n 1RQ2 —
cna scc_rcg;
si=¡o(0);
dm(i4,m4)-s¡;
axÜ=¡;
Almacena muestra cncnptada en c! buffcr cntr:icla
logglc n i ;
ni;
j
Subrutina (londü se procesa las muestras encrípladas en base al algoritmo DIÍXOR.DSP
}
input_s:implcs:
cna see_rcg;
ar=píiss axO;
i f c q rti;
mrO=din(i5,m í l);
ayl=mrO;
Lee dato del bufTcr resul }
cali xor_dccrip;
Llama a la subrulina de deseneriplación}
dm((x_buPH)=ar;
dm(tx_buf-¡-2)-ar;
Transmite muestras descnci'iplachi por el canal izquierdo
Transmite muestra dcsencriptada por c! canal derecho }
axO=dm(Ox3fe5);
:ir=tstbitOoi"axü;
¡Tuc rti;
dm(il,mO)-¡ir;
ar=dm(ncnlr);
nr=ar-l;
tl]n(ncntr)=ar;
i f n c rti;
axO«=0.\r;
clin(nn_nag,)=a.\0;
rli:
34
{
-----------------------
S u l > r i i l i i i : i que aliciuli! hi hiícrrupciún IRQK -----
¡rqe:
cn¡i scc_reg;
logglc f l l ;
;ixO=ü; .
(lin(cntríiíla)-axO;
d[ii(Íní_rx)=axO;
rii;
.1NCLUDE
<..\nn.tls|»;
.I-NDMOD;
35
P r o t / m m a del A l g o r i t m o DICXOR.DSF:
¡DKXOU.DSP - A l ó n i m o tic di'.scncnp ración de miicsírns realizando un XOR n la .secuencia de bits
Miguel lí- Vicuña Muño?,- líncripiación de Voz- Oclubre/ 99
}£n Irada
inri) = dalo de en I rada cncriplado
Ki!»isln)S aderados
ar,sr,axO,ayO,mxO,mx 1
S:ilid:i
¡ir - dato de salida dcscncriptadü
'l'ieinpo de ejecución
30! ciclos de maquina
sub_dc.\or;
xor_dccrip;
.MODUU-/RAM
.I-NTRY
xor_decrip:
ar=lstb¡l O ofnirO;
(Determina si el bit O (Cu ) de la muestra del mensaje cncriplado es 0/1}
sr=lshifíarby 15 (hi);
{Desplaza el bit Cu ,15 posiciones a la izquierda y almacena)
ax0=srl;
{el bil ¡lisiado en el registro AxO}
{Determina si el bil C|3 de la muestra de! mensaje cncriptadof
iir=lstbil [ S o f i n r O ;
ayO=ar;
{es 0/1 y lo almacena en AYO}
{Se obiiene el bil M 1 3 de la muestra del mensaje dcscncriplado}
ar=axO xornyO;
{y lo almacena en AX1 j
a.x I=ar;
cnlr=!5;
do lazo I t i n l i l ce;
sr=lshin mrO by (lo);
{Desplaza la muestra de! mensaje encriptado 1 posición hacia}
{la ¡7(]i!Ícrda y lo almacena en M X 1 }
mxI-srO;
{Delei'inina si el bil C|.| ,¡ de la muestra del mensaje encri|)lado}
nr=tslbit ISofsrO;
{es 0/í y lo almacena en A X O }
axü-nr;
{Analiza sí el bit M U . ¡ es 0/1 y lo almacena en AYO}
ai-lstbil 15 o f a x l ;
ayudar;
ai~axO xor ayü;
srl=ax 1;
¡Se oblicué el bit M M . ¡ }
{Almacena el bit M^.j en SR! ¡
{Desplaza el bil M U - ¡ u n a posición hacia !a derecha}
{Une los bils M|.i.¡y el bil M I 5 . t y los almacena en A X I ]
sHshmsrl b y - l (ii¡);
sr=sror Isliiíl a r b y U (lii);
axl=srl;
ñu 0=mx];
lazo I :
la zo 2:
»r=tslbit 15 o f s r l ;
si=ar;
enli~15;
do Iazo2 unlil ce;
sr=lsliiü srl by 1
mxl=srl;
ar=ls(bit 15 ofsi
si=lsliifl si by -I
sr= sr or Ishift ar by O (hi);
si=srl;
srl=mxl;
¡ir=si;
rls;
{Almacena en mrO el mensaje cneríptado desplazado hacia la}
(izquierda para rcalimcntar el lazo}
{Analiza si el bít 15 (M,,) es 0/1)
{Guarda el bíl MO en el registro SI}
{Rcordena la muestra del mensaje descifrado M (l
M^}
{Desplaza la muestra dcsencriptada 1 posición hacia la }
{izquierda y la almacena en e! registro M X I }
{Analiza si el bít 15 de la muestra desplazada (M() n) es 0/1}
{Desplaza los bits inordenados 1 posición hacia la derecha}
{Une los bils rcodenados (M| 5
M(l) y los almacena en)
{el regislroSI}
{Almacena la mueslra desplazada en SR1 para realimenUir}
{el lazo)
{Almacena el mensaje descifrado y rcordenado en el regístroAR)
.RNDMOD;
36
P R O G R A M A S P A R A L A ENCRIPTACiON Y DESENCRII'TACION DE VOZ
UTILIZANDO EL ALGORITMO PSEU.DSP
Prugrnniii P r i n c i p a l do EncrípUiciún:
{ TxJ'SEU.DSI1- Proyrnmo Principal de Encrípíiu-ión del Algoritmo I'SEU.USP
¡Miguel E. Vicuña M u ñ o z / En eript ación de V o z / Octubre 1999
¡6
i?
111?
> puntero para rx^buf
> puntero para tx_buf
> ulilizado para el auíobiil'cniílü m7=l
í
.MO D U LG/RA M/A BS=0
{
Rx jn«estras_Tx Jo;
Doclai-ncion de consta ni es ulili^ndn.s en el programa
.CONST
kl \7. }
.INCLUDE
.EXTERNAL
fs=OxcS5l, !nim=Ox40Ü, kcy=üxiy7],n¡vel_ruido=0x030r, nummucs=32500; { fs=5.5I25
<..\rcg_clrl.dsp>;
pscu_cri;
D e c l a r a c i ó n de v:n-iabltis
.VAR/DM/CIR.C/A8S=0
.VAR/DM/C1RC
xiiil'iiiiin];
xcjxLnum];
.VAR/DM
inicio, ¡nÍ_llenar, psciitlo_\vo]'ci, ncntr, rcinicio, iii_c!Hr, grab_kcy, llave;
.INIT
.INIT
.INIT
.INIT
.INIT
.INIT
.INIT
.INIT
¡nicioiO;
reinicio:0;
¡iiiJIcnanO;
ncnlnnum;
ni_ciilr:ni]mmiics;
psetido_v/ord: kcy;
gnib_kcy:0;
Ilave.-O;
.GLOBAL
pseudu_\vord;
.1NCLUD1I
<..\iiiÍ7.dsp>;
{ Programa de lnicíaIÍ7.ación del C O D U C y e l DSP }
mÜ- 1;
KMfam;
_
¡I= A xc_tx;
:ixO=iHini;
{lin(ncnlr)=;ixO;
axü=kcy:
din(pseudo_wortl)~axO;
nxO-Ü;
dmCmicio)=axÜ;
37
dm(inÍ_llenar)=axO;
dm(grab_kcy)=axü;
rcsct H l ;
sel Mu;
sel 112;
icnll=b#OOIOO;
{Activa la bandera flO}
{Activa la bandera (12}
{ Activa Inlerrupción IRQ2 por naneo }
configurar:
iniíisk=0;
axOO;
dm(reinicio)=axO;
axO=key;
dm(pseudo_\vord)=axO;
axO=nummues;
dm(m_cnlr)~axO;
ifc=0xfr;
{ Elimina interrupciones pendientes }
nop;
¡mask=Qx230;
{ Habilita IRQE, 1RQ2 y el puerto serial SPORTO }
Idle;
axO=dm(n¡i_flag);
ar=pass axí);
i f u e rts;
axQ=dm(rcinicio);
ar=pass axO;
i f n c j u n i p configurar;
j u m p espera;
{ Lazo principal de programa }
espera:
{
S u b r u t i n a d o n d e se procesa las muestras de end'iida en base al algoritmo PSfíU.DSP
}
input_SEiinples:
ena sec_reg;
ax0=dni(inicio);
ar=píiss axO;
ífeq rti;
a.xO=dm(grab_key);
ai~pass axO;
i f c q junip siga;
ar=dm(pseu(lo_word);
dm(Ilave)=ar;
ai-=0;
dm(grab_key)=ar;
siga:
ayl=dm(rx__buPH);
{ Lee muestras del canal izquierdo}
cali pscu_cri;
{ Llama a la subrutina de Encriptación}
d¡n(íx_buri-I)-ar;
dm(tx_buR-2)=ar;
si=ar;
rcsct HO;
{ Transmite muestras cncriptadas por el canal izquierdo }
{ Transmite muestras cncriptadas por el canal derecho }
{Rcsct de la bandera flO}
nop;
Ío(0)=ar;
nop;
38
sel 00;
{Activa la bandera flO}
ar=dm(ni_cntr);
ar=ar- 1 ;
dm(m_enlr)=nr;
ir lie juinp llcmi^buffer;
axO=niiniiiuies;
dm(reínicio)=axO;
llcna_buflcr:
nxO=c!m(iniJIcnar);
none=pass axO;
If eq rlí;
t!m(iO,mQ)=ay[;
dni(Íl,m())=si;
dm(ncnlr)=ar;
i f u e rti;
axO=Oxf;
dm(fin_n:ig)=axO;
rti;
{
------------------------
Siibrutina ((lie atiende In Interrupción IRQE
----------------
}
irqc:
cna scc_rcg;
(oggle fl 1 ;
axO=dm(inicio);
ar=not axü;
dm(inicio)=ar;
axO-key;
dni(pscuclo_würd)=axO;
axO-numnuics;
dni(ni_culr)=axO;
axO=0;
dm(rcinÍeio)-axO;
axO=num;
dm(ncnlr)"axO;
rt¡;
{
Írq2:
Snbi'ulina que a t i e n d e la Inlerrupeión 1RQ2
, .
cna sec_rcg;
tog'gle (11;
axÜ=Üxr;
dni(ÍnÍ_!lcnar)=axO;
dm(grñb_key)~axO;
resct Í12;
rt¡;
.INCLUDE
.HNDMOD;
<..\Pm.dsp>;
39
r r n p i - n m n (Id /Vhjorilnio PSEU.OSP:
{1'tSlíU.DSl 1 — Algoritmo de Encnplación (Dcscncnpl-aciáii) de muestras con clave de generación
lciitofin.
Miguel lí. Vicuñíi Muño?. - Encripíación de Vox - Ocíubre/99
Entrada:
ayl = dato origina! de entrada
Registros alterados:
mrO, axO, ayO, ar, sr, mxl, inri,
Salida:
ar = Dato de salida cncriplado
Tiempo de ejecución:
449 Ciclos de máquina
subj)scu
pscu eri;
.MODULE/RAM
.BNTRY
.Víir/dm/ram
. var/dm/ram
.var/dm/ram
.var/dm/ram
.var/dm/ram
slikey;
mendcs;
cilr;
mcssl;
ciírj;
JZXTERNAL
pseudo_word;
pseti_cri:
mrO=dm(pscudo_\vord);
af=tstbit Oofmrü;
ar=istb¡l 1 ofnirO;
sr=Ishin ar by-l.(Io);
ai~srO xoraf;
dm(shkcy)-srl;
sr=lsh¡nmrüby-l (lo);
ai— srO;
srl^dmfshkey};
sr=sr or Ishift ar by O (hi);
mx 1= srl ;
mrl=ayl;
ar=LslbÍl O ofinrl;
dm(messl)=ar;
mrO=Eiyl;
sr=lsh¡n nirO by-l (lo);
a,xü=dm(mc.ssl);
ni~a.xO xor ¡if;
si-lsliillarby I5(hi);
dni(dír)=srl;
cnl!-=15;
do laxo unlil ce;
mrO=m.x 1;
{Almacena la llave pseudoalcatoría desplazada}
{Almacena la muestra del mensaje desplazada}
{Almacena mensaje cifrado)
{Asigna la Nave inicial pscudoaleatoría al registro MKO )
{Determina si el bit O de la llave pscudoaleatoría es 0/1}
{Determina si el bit I de la llave pseudoalcatona es 0/1}
{Desplaza el bif I una posición hacia la derecha y lo almacena}
{en SRO}
{Obtiene el nuevo bit Yo a realímcntarse a la secuencia)
{de la llave p<;cudoalealaria
{Desplaza el bit Yo 15 posiciones a la izquierda y¡
{lo almacena en e! buffcrslikey}
{Desplaza la llave Inicial pseudoalcaloria una posición hacia}
[derecha y la almacena en el registro A R }
¡Almacena el bit Yo desplazado en el registro SR I }
¡Une el bit Yo con la llave inicial pseudoalcatona desplazada}
{y lo almacena en el registro MX1}
{Asigna la muestra del mensaje de entrada al registro MRI}
{Determina si el bit O de la muestra del mensaje de entrada}
{es 0/1 y lo almacena en el bufTcr mcssl}
{Almacena la muestra del mensaje de entrada al registro MRO}
{Desplaza la muestra del mensaje de entrada ! posición)
{hacía I ¡i derecha y lo almacena en el bufTcr mondes}
¡Asigna el bit MO al registro AXO }
¡Obtiene el primer bit del mensaje cifrado CO=MO xor ICO}
{Cu lo desplaza 15 posiciones hacia la izquierda}
{y lo almacena en el bulTcr cifr)
¡Asigna ¡a palabra de la secuencia pscudoaleatoria rcaümentadaj
40
ar=lstbitOofmrO;
ni—tslbit 1 ofmrQ;
sr=]s!iiííarby-l (lo);
ar=srü xoraf;
{al registro MROJ
{Determina sí el bit O de la llave rcalinicntada (Ki) es 0/1 }
{Determina si el bit I de la llave rcalinientada (Ki-H) es 0/1 }
{Desplaza el bit ! (Ki-H) una posieión a dcreclia y lo almacena}
{enSRÜi
{Obtiene el nuevo bit Yi de la secuencia de palabra}
{pseudolaeatoria }
sr=Ishiriarby 15 (hi);
dm(shkcy)=srl;
mrO=mxl;
sr=lshiflmrO b y - I (lo);
ar=srO;
srO=dm(shkcy);
sr=sr or Isliiíl tir by O (lo);
mxl=srO;
iiirl=dii](inciulcs):
ni— istbit O o f m r l ;
dm(messl)=ar;
mrO=dm(mcndcs);
s i = I s h i f t m r ü b y - [ (¡o);
dm(mcnclcs)=srO;
ax0=dm(mcssl);
ar=axQ xor al";
{Asigna la muestra del mensaje desplazado a! registro MRl j
{Determina si el bit Ü de Mi de la muestra del mensaje despla-j
{zado es 0/1}
{Asigna cl bit Mi a! registro AYO }
{Obtiene cl nuevo bit Ci de la palabra del mensaje cifrado}
{Ci-M¡.xorKÍ)
sr=lshifl nr by 15 (Iii);
dm(cifr_I)=srl;
ar=dm(c¡fr);
s r = I s ! i i f t a r b y - l (lo);
ar=dm(cífr_l);
sr=sr or Ishin ar by O (lo);
dm(cifr)=srO;
lazo:
srl=din(cifr);
ar=pass srl;
dni(psci]do_\\'ord)=nix 1;
{Une el bit C¡ con los demás bits de la muestra del}
{mensaje cifrado desplazado y lo almacena en buffcr cifr}
{Almacena la muestra del mensaje cifrado en el registro M R l
(Asigna la muestra cifrada al registro AR}
{Almacena la nueva llave Pseudoalcaloria al }
{pscudo_\vord}
rts;
.I2NDMOD;
Noisi: Como se indico en la sección 3'.2, PSEU.DSI 1 es un algoritmo de ida y vuelta, es
dccii - que se utiliza el mismo algoritmo para e! proceso de dcscncriptación.
41
" P r i n c i p a l cíe Üesencriptación:
iMii l'rincipitl de Dcsciicriplnclón del A l g o r i t m o PSlSU.DSí*
K. Vicuñn M u ñ o z / línerip Ilición de Voz / Ocluí) re 1999
K x P S I £ U . D S l ' - IV
¡(j ----- > puntero par» rx_buC
¡7 ----- > puntero pañi tx_bnf
,n7 ----- > uiílizado pañi el autobtileriulo
.MODULE/RAM/ABS=0
|
R*jnuestrasjojrx_CODEC;
Declaración de constantes utilizadíis un el progríinia
.CONST
rs=0.xc85l, N=2, nuin=0.x400, kcy^Oxl97I, iHiminues=32500;
.INCLUDI-
<..\reg_clrl.dsp>;
.liXTI-RNAL
pscu_cri;
/
Declaración de varinhlcs
.VAR/DM/CIRCMBS=0
.VAR/DM/C1RC
.VAR/DM/CIRC
xc_rx[num];
,\oiil[ntim];
e!itrnda[N];
.VAR/DM
in¡_rx, ini_llcnar, ncntr, psciitlo_\vord, reinicio, m^cntr;
.INIT
.INIT
.INIT
.INIT
.INIT
.INIT
.INIT
ini_i-x:0;
reinlciorO;
ÍnÍ_Ilenar:Ü;
nentr:num;
ni^cnínninnimics;
enTrada:0,0;
psciiílo_word:key;
.GLOBAL
pscudo_word;
JNCLUDI!
<..\Íni7.íls|í>;
rose I n i ;
¡ciilMjffüÜIOO;
in4=l;
{ Prognuii» de Inícíulizaeión del CODEC y el DSP
(Resct de la bandera n i )
{ Activa Interrupción IRQ2 por flnnco ¡
H=N;
i4= A cntrada;
15-N;
!5= A cntrada;
niO=l;
I0=%.\c_rx;
\Q^*xz_rx;
ll=%xout:
¡!= A xout;
configurar:
íiníisk=Ü;
i'I= A entrada;
42
i5= A ciitrad¡i;
axO-key;
dni(psendo_\vord)=axO;
axO-mim;
dm(ncn!r)=axO;
axO=mimimies;
dm(m_cnlr)=axO;
nxO=0;
dm(in¡_rx)-axQ;
dm(mi_llcnar)=ax0;
dm(rcinicio)=a.xO;
¡Fc^OxIT;
nop;
imask=0x230;
espera:
Elimina inlen'upciones pendientes }
|-[¡ibilitíiIR.Q2, IRQB y pnerlo serial SPOUTO
L;i7o principal de jirogrania }
idlc;
axO=clm(fin_fhig);
ni—pass :ixÜ;
Í f u e ris;
ax0=din(reinicio);
ar=pass axO;
i r n e j u i n p configurar;
junip espera;
S u h r u í i n a que n l i c n d c la I t i t c r r u p c i n n IRQ2
irí|2:
en a sccj'cg;
si=¡o(0);
dm(Í4,in t l)=sÍ;
axO=l;
dm(ini_r.\)=axO;
logglc 111;
ar=dm(m_cntr);
ar=ar-1;
dm(m_cntr)=ar;
i f n c rti;
Almacena muestra en el buffer entrada
axO=niiinmiics;
dmCreÍiiicÍo)=axO;
dm(m_cinr)=:i.xO;
rti;
{
S u b r u l i n a donde se procesa las rmiL'Sd'as encripliidas cu base al algoridno f'SEU.DSI*
}
inpi)i_sí)mp!es:
ena scc_i1eg;
a.xO=dmCÍni_rx);
ar=piiss íixü;
íf cq rfi;
ayI~dni(Í5,in'1);
Lee nuicslras del bufrcrrcsul ¡
cali pscu_cri;
Llama a la subruUna de Dcsciicnplación}
dm(íx_buB-|)=ar;
Transmite muestras descncripladas por cl canal izquierdo
43
dm(lx_bi]R-2)=ar;
{ Tninsinile muestras dcsencriptnclas porcl canal derecho
n.\0-diii(0x3íc5);
íil'-tsíbit O o f a x O ;
ií'nc rti;
c¡m(¡0,inO)=ayi;
dm(il,niO)=ar;
ar=dni(ncntr);
;ir=ar-l;
dm(ncntrj=ar;
ifnc rti;
axO=Oxf;
dm(fin_fl¡ig)=axQ;
rli:
{ ------------------------------- S n h r n l i n a q u e a l l e n d e la Iiilerrupciiín IRQIÍ
----------------------
írqe:
cna sec_rcg;
logglelll;
axü=0;
din(cntrada-i-l)=axO;
din(inÍ_rx)=axO;
(¡m(rc¡nicíü)=axO;
¡ixO=key;"
din(psciido_word)=axO;
!ixO=nuniinncs;
dni(m_cnlr)=axO;
rti;
.INCLUDB
<..\fin.[lsp>;
.ÜNDMOD;
44
P R O G R A M A S PARA LA ENCRII'TACION V UESENCRIPTAC10N DE VOZ
U T I L I Z A N D O EL ALGORITMO PSEU2181.DSP
lVu*jnmi:i IVincipiíl tic iMicrip
< TNj'2 18 1. DS1'~ Programa Principal cíe Encriplación ttcl Algoritmo PSEU21 81.DSP
¡Miguel E. Vicuñn Muño?. / Encrip (ación de V o z / Ocí ubre 1999
16 ----- > puntero para rx_buf
¡7 ----- > puntero para Lx_buF
ni? ----- > utilizado pnra el Eiutobuíenulo m7=l
1
.MODULIi/KAM/ABSM)
R.x_niucstras_Tx_io;
{ ------------------------------- Declaración ile constiinles utilizadas en el programa
.CONST
.INCI.UDI.IIXTEIÍ.NAL
rs=0.xc85I, mim=0.x400, HaveO=Üxl í J99, Ilavcl=0x 1971, nununues=325ÜO; (fs=5.5125 kl-lz)
<..\rcg_cír].clsp>;
criptüjiscu, xor_crip, permular, kcyO, kcyi;
Declnracion tic variables
.VAK/DM/CIRC/ABS=G
.VAR/DM/C1RC
.VAR/DM
.1NIT
.IN1T
JN1T
.1N1T
.IN1T
.1NIT
.1NIT
xin[nnm];
xcjx[num];
inicio, ¡injlenar, pseudo_\vürd, ncntr, rcinício,
m_cntr, grab_kcy, Ilavc_0, IIave_I-, cnlradíi, salida;
Ibl_perl[32j;
inicio:0;
rcinic¡o:0;
iniJIenanO;
ncnlrriium;
in_ciitr:iHiiii[iuics;
gnib_key:ü;
tblj)cr[:<..\pcriim(a\(ablapl,liex>;
.GLOBAL
tbljicrl;
.INCLUDI5
<..\ini7.dsp>;
niO=l;
I0=%xin;
Í()=Axin;
ll-%xc_tx;
il= A ,xc_lx;
axü=nnm;
nxO=!lnvcO;
nxO=llíivcl;
din(kcyl)=axü;
axO=0;
{Prognimn de Inicmliwción del CODHCye! DSP
dni(Íniciu)=axO;
dm(ÍnÍ_Jlcnar)=axO;
ciin(gr:tb_kcy)-axO;
reset I I I f
sel 110;
sel H2;
iciUH>ffOOÍOO;
con fi gurai"
imask-Q;
axOO;
dm(rcinicio)=ax0;
axOHIavcü;
dm(kcyO)=axO;
axtHlavel;
dm(kcyl)=axO;
¡ixO-iiiimmues;
clm(in_cnlr)~axü;
Ífc=QxíT;
(Resé! de la bandera 111}
{Activa la bandera flO¡
(Activa la bandera 112}
{Activa hi Interrupción IKQ2 por flanco
{ Elimina inlcrrupcioncs pendientes }
nop;
iniask=0x23ü;
esperíi:
{ Habilito IRQli, IRQ2 y el puerto serial SPOIITO
{ Lazo principa! de programa }
idle;
:!xO=dm(fln_flag);
ni-pass axO;
Íl" na lis;
axO^dmfrcinieio};
ar=pass axO;
if Mcjuiiip configurar;
jiimp espera;
{ ---- S u h r u t i n a do tul e se procesa his mu es I ras de en I rada en base al algor! (mu F'Slí
inpiit_s:unples:
una secj-cg;
ax0=dni(inicio);
¡ir=pass axO;
if'cq rli:
axO=din{grab__kcy);
ai-pass axO;
i f c q j u m p siga;
dtn(l!ave_0)~ar;
ai— clm(kcyl);
dtn(llavc_l)-ar;
ni-Ü;
dm(grab_key)=ar;
siga:
axO=dni(]-x_bur-!-l);
dm(enlrada)~:iNO;
cali criplo_pseu;
a ("iixO;
dm(l.x_bur-i l)-ar;
{ Lee muestras de entrada por el canal izquierdo!
{ Llama a lasulmtlina de Encriptación}
{ Transmite mués tras ene-ripiadas porcl cana! izquierdo
46
Transtnile muestras encriptadas por el canal izquierdo }
tlm(lx_bur-l-2)=ni~
din(salii!a)-íir;
rcsct HO;
nop;
¡u(0)=ar;
nop;
.sel HÜ;
{Rescl de la bandera Í10}
¡Activa la bandera HO}
ai— dm(m_cnlr);
ar=ar-l;
din(in_cnlr)=ar;
if nc jump Ílcna_lnir!cr;
axO=miinmnes;
din(reimcio)=axü;
drn(m_c!ilr)~uxO;
llena_bulTcr:
axO=dm(in¡_llcnar);
ncmc=pnss nxü;
ifcq rli;
axÜ=dm(cnirada);
dni(i0.mü)=axÜ;
axO-dm(salida);
dni(Í!,mO)-axÜ;
at— (iin(ncntr);
:n— ar-1;
¡fnc rli;
axO=Oxf;
din(fin_nag)=axO;
rl i;
Subnifina que aticiulc la Internipcíón'IRQli
irqe:
cnn scc_rcg;
lügglc DI;
axü=dm(inic¡o);
ar=not axO;
din(inicio)=ar;
ax()=IlavcÜ;
dni(kcyO)=nxO;
axÜ=!l:ivc¡;
dni(kcyl)=íix0;
axO=niimnuics;
flinfm cnlr)=a,\0;
axO=üT
dni(rcinicio)~axü:
dni(ncnlr)~iixÜ;
rli:
47
Prtjuninuí del Ali'ürihno i > SEU218I.DSI > :
{l*SlíU21fll.I)SP.- A l g o r i t m o de Üjicriptación (Dcsencriplación) de muestras con clave de generación
l'5(Midoalealori:i
K. V i c u ñ a Muñox- lino rip I ación de Vo?, - O c í u h r c 99
En I rada:
axO - Doto original de entrada
Salida:
axQ = Dato cncriptado íle salida
Kegisíros alterados:
axO, ayO, i n r i , mrO, ar,
Tiempo de ejecución:
576 Ciclos de máquina
.MODULE
.ENTRY
J-XTIiRNAL
.EXTERNAL
cncriplac¡on_pseu;
criplo_pscu;
permutar, xor_crip;
tbljierl;
.VAR/DM
.INIT
.INIT
k c y l , kcyO, keyN, mcnen;
kcyl:Oxl971;
kcyO: 0x1999;
.GLOBAL
criptujíseu:
dinfinenenJ-axO;
ay()=dm{key!);
13=0;
i3- A tbl_perl;
cali peniuiliir;
{Guarda la niuestni de entrada en el bufTer menen
{Guaixiü la clave K l en el registro AYO}
nii'0=nirl;
c:ill xor_cnp;
mrl=nr;
{Almacena el dato Ll guardado en inri en el registro}
(tnrO y llama a la Subrutina XOR_CRIP y vuelve a}
{guardar este dalo en m r l }
ayO^dm(kcyO);
13=0;
¡3= A tbl_pcr!;
cali permutar;
mrO=ar;
{Guarda la clave KO en el registro AYO}
{Llama ¡i la Subruliim P E R M U T A R }
{Obtiene los 16 bils permutados de !a Í7,t¡i!Ícrd:i L l }
{de la clave y los guarda en el registro MK 1 j
¡Llama a la Subnitina P E R M U T A R }
{Obtiene los 16 bits permutados de la derecha LO}
{de la clave y los guarda en el registro M R O }
cali ,\or_c:np;
mrü=ar;
{Llama a la Subriilina XOR_CRIP y guarda cslcj
{ resultado en M R O }
si^ashifí i n r i by A {lii};
si=sr or Ishifl mrü by 4 (lo);
clm(kcyN}=srl;
{Obtención tic la clave Kn para e.sla etapa desplazando)
{Ll ctinlro posiciones hacia la izquierda}
49
sr=asiiill i n r i by 3 (lii);
sr=sr or IsIiiH n i i Ü by 3 (lo);
dm(I;ey l ) = s r l ;
nyíKsrí);
{Rotación de la clave (Ll y LO) I res posiciones a l
¡izquierda, |)ara ser utilizada en la .siguiente etapa}
sr=lshillinrl by-!3(Io);
a¡—srü or ayO;
dm(kcyO)=ar;
axO=ciin(mcnt:n)
ayÜ=dm(kcyN);
ar=axO xorayO;
axO=ar;
rls;
{Encuentra la muestra cncriplada realizando la
{xor entre e¡ dato de entrada y la clave Kn ¡
{y lo almacena en A R }
{El resultado es alniaccnndo en el registro AXÜ¡
.IZNDMOD;
Nula: Como se indico cu la sección 3.2, PSBU21SÍ.DSP es un algoritmo de ida y vuelta, es
decir que se utiliza cl mismo algoritmo para el proceso de desencriptación.
50
Programa P r i n c i p a l üe Dcsoiicríptaciun:
{ R.\_I'2I81.I)SP- Programa Principal de I)e.sencn|ítadón del A l g o r i t m o PSEU2181.DSP
M i g u e l E. V i c u ñ a M u ñ o / , / lí u cnp tildón de Vox/ O c t u b r e 1999
¡6
¡7
in7
> puntero parn rx_bu[*
> puntero para lx_buf
> utilizado para el autobiiferado ¡117=1
í
.MODULlI/RAM/AlíS-0
Rx_mucslmsjo_Tx_COD!íC;
¡
Dccliii'iicion ílc c o i i s l a i i l c s u l i l i x a d a s en e! progi':nn:i
.CONST
rs=0.xcS51, N=2, mmi=0x400, lliivcO=Üxl999, I l a v e l = 0 x l 9 7 1 , nummLies=325ÜO;
.INCLUDE
<..\rt'B_cirl.tlsp>;
.EXTfiKNAL
criplojiscu, xor_erip, pecnmíar, keyü, k c y l ;
{
D c c l n r a c i o n de variables
.VAR/OM/C1RC/ABS=0
.VAR/OM/CIRC
.VAIVDM/CIRC
xc_rx[numj;
xoullmim];
cnirada[N];
.VAR/DM
inijT:, ínijlciiar, ncnír, pscudo_\vord, rcinicio,
ni_cntr, tbljicrl [32], entra, salida;
JNMT
.1NIT
.1NIT
.INIT
.IN1T
.1N1T
.INIT
ini_rx:0;
rcinicio:ü;
ÍnÍ_!lenar:0;
ncntr:imni;
[ii_cntr:iniiii!iHics;
cntrada:0,0;
tbIjicrI:<..\pcrnHitn\Í!ihl!ipl.licx>;
.GLOBAL
Ibljicrl;
.1NCLUOE
<..\iiii7.ilsp>;
rcsct H l ;
icntl=b//001ÜÜ;
ni4= I;
|4=N;
{ Prograniíi de Iniciulización del COOEC y el DSP
{Rcsct de la bandera H l J
¡Activa la Intcmipción 1RQ2 por Hanco}
Í4= A entr:Kla;
I5=N;
¡5= A enlr;ula;
iiiO=-J:
ÍÜ= A xc_rx;
ll=%xotit;
il=Axout;
51
configurar:
miask=0;
i5=Acntr¡ul¡i;
axtHIavcO;
clm(kcy0)=»x0;
axOllavcl;
din(keyl)-axO;
:ixO=mim;
din(ncnlr)=a.\0;
nxO=iiiiniiiHics;
dm(m_cnlr)=axO;
axO=0;
dtn(ini_rx)=¡ixO;
(lm(iiiHIcnar)=axO;
ifcKJxlT;
nop;
imask=0x230;
{Hliniina interrupciones pendientes ¡
{llabililo IKQ2, IRQ!] y e! puerto seria! SPOR'I'Ü
espera:
{Ui/.o principal de programa }
Ídle;
axO=din(nn_flag);
ai"=pass axü;
¡fnc rts;
a,xO=dm(rcin¡cio);
ar=pass nxü;
ifncjump configurar;
jump espera;
{
--------------------------------
Subrulina que1 alietide l:i InloiTiipción IRQ2
--------------------------
}
irq2:
ena sec_reg;
sHo(O);
dm(i4,m4)=si;
axOl;
d[)i(ÍnÍ__rx)=axO;
loggleíl!;
ai-dni(iu_cntr);
ar=ar-I;
dni(ni_cnlr)=ar;
Í fue rti;
axO=nuinnu!Ch"
dni(rcin¡cÍa)=axO;
(|[ii(ni_ailr)=axÜ;
¡ Almaceno inneslra encripíadas en el bufiercnfrada }
ni;
{ ----- Subrulirui diunlesc [intccsa las miiesfrns c-iicnpdubis en base ;il al^nrilnio P.SICU2 I 8 I .I)Sl' ----- }
ena scc_rcg;
axO=dni(ini_rx);
ar=pass axO;
iTeq rlí;
52
¡i.NO=dm(i5,ni4);
(Im(cnlríi)-iixO;
cali criploj>seu;
{ Lee muestras encripladas del buffer resul ¡
i Llama a la subrutina de desencriplación}
iir=a.xü;
dm(sal¡da)-¡ir;
ilin(íx_bur-H)=:ir;
ílni((x_buf+2)=ar;
{Traiismile ¡nuestras deseiicriptadas por el canal izquierdo)
{Transinilc mucslras dcsencríplatlas por el canal derecho}
fi.\0=dm(0x3fc5);
aNslbitOofaxO;
ifnc rt¡;
axQ=dni(entríO;
din(ÍO,mü)-axÜ;
a.xO=din(saIÍ<la);
dm(i],mO)=a.xO;
ai—dni(ncnlr);
ai—ar-1;
dii!(ncnlr)=:ir;
¡ f u e rt¡;
axO=OxH
dm(íln_nag)=a.xO;
rli;
j
S u b r u í i n a q u e a t i e n d e In I n t c r i ' u p c i ó n I R Q E
Irqe:
cna sec_reg;
loggle f l l ;
a.xü=ü;
din(enlrada)=a.xü;
c!in(cnlríidn-)-l}=¡ixO;
dm(ini_rx)=tixü;
din(rcin¡ciü}=:ixO;
a.xO=IIavcü;
din(kcyU)=íix(J;
a,xÜ=llavc!;
dm(kcyl)=axO;
axü=ni]iiiniues;
ilni(!n_ciitr)-:ixO;
rti;
.INCLUDE
<..\ííri.<!,sp>;
.RNDMOD;
53
' R O C K A M A S I'ARA LA ÜNCRIPTAClOiN 1 Y D I C S Ü N C R I P T A C I Q N DE VOX
UTILIZANDO ULALCOmTMO OESIW.DSP'Y
RES I'ÉCTIV A M E N T É
j'PEjraMja l > riiici¡ni] cié E n c r i p U i c i ú n :
{ TxJMÜS.DSP- Programa P r i n c i p a l de Gncnplación del A l g o r i t m o DES2I81.DSP
¡Miguel E. V i c u ñ a M u ñ o ? , / Encrip (ación (le Voz/ Oclnhi'c 1999
1
Declaración de c o n s l a n l e s u t i l i z a d a s en el programa —
.CONST!s=ÜxcS5l;
{ Frecuencia de mneslrco = 5.5125kl I?, }
.CONSTIliivcl=Oxl97l;
.CONSTcl¡ipns=0,1111111= i 024;
.1NCLUDB <.Aini_kik.dsp>;
{Inicializncifín del ADSP-2181 y el AD-I847}
Declaración (le variables
.VAR/DM/CIRC/ABS-0
.VAll/DM/CiRC
xinfiiiini];
xc_lx[nuni];
.VAR/DM
Inicio, inijleiw, limpiar, ucntr, m_cntr, o i i l l , üiitO, lbl_per![32], grab_inÍ,
grab_key, IIavc_0, !l;n f e_l;
.INIT
.1NIT
.INIT
.INIT
.INIT
Ínicio:0;
m_cnlr:0;
oiitOrO;
oul 1:0;
lbl_pcrI:<.ApLM'mula\íab]ap].!iex>;
.IZXTIiIlNAL
.GLOBAL
cripto_tlcs s kcyO, k c y l ;
tljl_pc'i-l;
resol n I ;
15=%xin;
i5= A xin;
{Rcsct de la bandera fll
¡6=AxcJ.\
ni? 85 !;
sel nO;
sel (12;
{Activa la bandera (10}
¡Acllva la bandera I12¡
tliii(grab_kcy)-nxO:
(Ím(gi'iibJiiÍ)~;ixü;
dni(Í[]ÍJlcnar)-axü;
din(limpiar)=;!xO;
nxO=)unii;
54
dm(ncnlr)=nxü;
¡re=o,\rr;
nop;
¡ii]nsk=0.x230;
espera
{Lazo principal de programa
idle;
:ixO=dm(fin_nag);
ai— pass axO;
i f u e rls;
jump espera;
{ ----- S i i í ) r u l i n a d o n d e se proccsn t;is mucsínis de entrad u en base ni algoritmo DES2181.DSP ------ }
¡nput_samplcs:
cna scc_reg;
¡ixO=dm{Ín¡cio);
ar=pass axO;
Ifct] rlí;
a.\0=c!in(gnib_key);
ar=pass a.xü;
ífeq jump siga;
ar=din(keyO);
ih]i(llavc_Ü)=ar;
íii— dm(kcyl);
din(ll;ivc l)=ar;
nr=0;
(ini(gnib_kcy)=ar;
sga:
ai=dm(rx_btir-!-I);
mrl=ar;
ar=dm(m_cnlr);
aNslbil O ofar;
i f n e juinp primcrn_vcz:
axO~mrl;
cnlr=ctapíis;
do c!apa_des tinlil ce;
cali eriplo_dcs;
clnp:i_dcs:
nop;
mrl=dm((ni!Ü);
dni(oull)=a.\l;
dm(on!Ü}-axO;
jump transmitir;
primera_vez:
íixl=mrl;
mr!=dm(ont I):
transmitir:
dni(tx_bi)f-i l ) = - n i r ) ;
diii(t\_bur-t-2)-inrl;
rcscl flO;
nop;
io{0)=mr!;
nop;
Lee nnieslras de entrada por el eanal izquierdo)
Llama a la subruliii» de cncrip(aciún)
{'l'raiüanite unicslras cncripladas porcl cuñal izquierdo}
{Transmite muestras encripladas por el canal derecho}
{líese! de la bandera no}
55
sel flO;
{Activa la bandera HO)
axQ=dn](mÍ_llc¡mr);
ifcq rli;
mrO-dm(rxjHiPH);
(Iin(i5,in7)-nir0;
dm(Í6,ni7)=nirl;
ni^dnifncnlr);
ar=ar-l;
d!ii(ncntr)=ar;
if nc rli;
axO=0.\r;
dm(Ini_nag)=:ixO;
rli;
Subi-ulina i¡ue uíicmk hi ínlcrrupciún IRQIÍ
irqe:
cníi sec_reg;
axO=dm(ÍMÍcio);
ar=not a.xO;
din(iuicio)=iir;
tügglc fl 1;
axü=llaveO;
ilm(keyO)=axQ;
axO=Ilavcl;
din(keylh;ix();
axO=0;
diii(ni_cntr)=íixO;
ifc=0.\rr;
nop;
rti;
Subriilinn (juc nlicndc la IrileriMipciüii IRQ2
c
irt|2:
cna scc_rcg;
axO=0.\f;
(Íin(grali_kcy)-axü;
i-cscrn2;
rti;
.includc <..\rin.dsp>;
.IZNDMOD;
tlül AI»ün<moDIJ:S2181.DSP:
.- Eiimplnnon tic mneslrns par» im¡i i I oración del Algoritmo OES2I8 l.USP
[Miguel lí. Vicuña (Muñoz- Encnplai-ión tie Voz- Octubre 99
axl — Oíito anlerior
axO = Datu aclual
Siiluhi:
axl = Dato anterior
axO = Dato actual
Ucyislros nllerntlos:
ayü, inri , iniO, axO, ax
de ejecución:
1005 ciclos cíe máquina
encriptacion_tlcs;
cnpto_dcsx;
permutar, ,xor_crip;
Ibljjcrl;
.MODULE
.I-NTRY
.I-XTHRNAL
.EXTERN AL
.VAR/DM
.1NIT
.IN1T
keyl, keyO, keyN, incncnt, mcncnO;
keyl:Oxl97I;
kcyO:0x1999;
.GLOBAL
kcyl,keyO;
críplo ciesx:
dni(mcnenl J~ax!;
din(mcnenOJ~¡ixü;
¡Guarda c! dato anterior en mcncn I ¡
{Guarda el dato actual en mcncnO}
{Guárela la clave Kl en cl registro AYO}
13=0;
Í3=A!bl_pcrl;
cali permutar;
mrl=ar;
{Llama a la Subrulinn PERMUTAR)
{Oblienc las 16 bits permutados cíe la izquierda L l }
{de la clave y los guarda en cl rcgislro M R ! }
mr0=inrl;
cali ,xor_críp;
mrl=ar;
{Almacena el dato Ll guardado en inri en el registro}
{mrO y llama a la Subrulino XOR_CRIP y vuelve a}
{guardar este dalo en M R ) }
nyO-dm{keyO);
13=0;
Í3=Albljierl;
cali permutar;
mrO=ar;
{Guarda la clave KO en cl registro AYO}
cali xor_crip;
mrO=ar;
{Llama a la Suhrulum XOR_CRIP y guarda cslc|
{ resultado en MRO}
{Llama a ¡a Subruüna PERMUTAR}
{Obtiene los 16 bits permutados de la derecha LO}
{de la clave y los guarda en cl registro MROj
57
sr=ashíft m r l by 4 (hi);
si^sr or IsliiR nirO by 4 (lo);
dm(kcyN)=srI;
{Obtención de la clave Kn para esta etapa desplazando}
{Ll cuatro posiciones hacia la izquierda}.
sr=ashifl i n r i by 3 (!ii);
sr=sr or Isliill nirO by 3 (lo);
dm(key!)=srl;
ayO=srO;
sr=Ishiftmrl b y - ! 3 (lo);
ar=srO orayO;
¡Rotación cíe la clave (Ll y LO) tres posiciones a la]
{izquierda, para ser utilizada en la siguiente etapa}
dni(kcyO)=nr;
ayQ=dm(incnenl);
13=0;
Í3= A tbl_perI;
cali permutar;
inri—ar;
¡Dato anterior A ! se guarda en el registro AYO}
ayQ-dm(mcnenO);
13=0;
{Dato actual AO se guarda en el registro AYO}
¡3= ft lblj)crl;
cali permutar;
nirO=ar;
ayO=dm(kcyN);
ar=arxor ayO;
ayO=ar;
13=0;
i3= A lbl.j)crl;
cali permutar;
{Llama a la subrulma PERMUTAR}
{Se obtienen los 16 bits de entrada izquierda 131
{permutados y los almacena en M R 1 }
{Llama a la subrutina PERMUTAR y se obtienen los 16 bits de)
{entrada derecha BO permutados y los almacena en MRO}
{Encuentra C! realizando la función xor entre el ciato de
{entrada permutado BO y la clave Kn para esta etapa}
{ y lo almacena en AR: Cl = 130 xor Kn}
{El dato CI guardado en el registro AR ¡o almacena}
{AYO, ]iara luego llamar a la Subrutina PERMUTAR}
¡y encontrar el dato Fl y finalmente almacenarlo}
{en el registro AYO = F l }
ayO=ar;
ai-mrl xor ayü;
axO=ar;
¡1.x l-mrO
{Se encuentra el dalo DO, realizando una operación í
{xor a nivel de bit entre DI y F I y lo almacena en}
{AXO: DO = 131 xor Fl, y DI lo almacena en A X I }
rls;
.ENDMOD;
58
Proprama Principal tic Dcseucriptación:
Rx_I)RS. DSP -Programa Principal de Encriptación del Algoritmo DESI2Í81.DSP
E. Vicuña Muñoz / Encriplación de Voz/ Octubre 1999
( ------------------------------ Declaración de constantes ulili/.adas en el programa
.CONSTfs=Oxc851, Ilave0=0xl999, I l a v c l = 0 x l 9 7 i , ctapas=3, num=1024;
.¡NCLUDE<..\inÍ_kÍk3.dsp>; {Inicializacijín del ADSP-2I81 y el AD-1847}
( -------------------------------------------- Declaración de variables
.VAR/DM/C!RC/ABS=0 xc_rx[num];
.VAR/DM/CIRC
xoul[num];
.VAR/DM
par_entr, inicio, limpiar, ¡ni_rx, i n l , inO, o u t l , outO,
ncntr, tbljperl[32j, tbl_perl[32], llaves_N[etapas], daloin, puntj4;
bunbr[2];
.VAR/DM/CIRC
par_cntr:0;
¡iiicio:0;
inÍ_r,x:Ü;
bufrcr:0,Ü;
inl:0;
.1NIT
.INIT
.1NIT
.INIT
.INIT
.INIT
JN1T
.INIT
JN1T
.INIT
.INIT
inO: 0;
ouíl:0;
oulO:0;
ncntr: nuin;
tblJpci-l:<.Apeniinta\tablap2.hc,\>;
íbl_perl:<..\permutn\tablapl.hcx>;
.EXTERNAL
.GLOBAL
criptojdes, genjlave, kcyl, kcyQ;
Ibljperl.tbljierl;
• m7-l;
m4=l;
14=0;
12=0;
15=%xout;
i5= A xoul;
16=%burier;
¡6=Abiirfcr;
17=%burfcr;
i7==Abiifrcr;
rcscí fl 1;
sct f!2;
iinask=0;
ÍI.XÜ--G;
din(limpiar)~ax0;
{Rcset de la bandera f l l
(Activa la bandera (12}
axO=num;
dni(ncnlr)=axO;
axü=Axc_rx;
din(punlJ4J=axO;
ilc=0.sff;
Elimino interrupciones pendientes
59
nop;
imask=0x230;
espora:
{ Habilito IRQE, IRQ2 y el puerto serial SPOllTÜ
{Lazo principa! de programa }
idlc;
ax0-dm{finjlag);
at~piiss ¡i.xü;
¡fue rts;
jiimp espera;
{
S u b r u l i n a donde se procesa las muestras cíe entrada en base al algoritmo IDES2181.DSP
}
inpiit_síiinples:
ena sec_reg;
ax0=dm(inicio);
ar=pass axO;
Ifcq i'! Í;
Íix0=dni(i7,m7):
dm(dntoin)=íixO;
mrl=axU;
ar=din(par__cnír);
ai—ar¡-1;
dm(par_cntr)=ar;
af=tstbi!0orar;
if ne jump primera_vez;
dm(inO)-mrl;
•Í4= A lIaves_N;
cnlr=etapas;
do lazo_IIaves until ce;
cali genjlave;
lazojlaves:
dm(i4,m4)=si;
¡4= A l!aves_N-!-ctapas-1;
ni5=-l;
axl=dni(inl);
axO=dm(inÜ);
cnd"ctnpa.s;
do et;ipíi_ides n n t i l ce;
si~dm(i4,m5);
cnl! criptojdcs;
c(apa__!de.s:
nop;
nirl=dni(ou¡0);
dm(ontl)-ax I ;
dm(oul0)=axü;
j u m p tnmsniilir;
pi'iniera_vez:
dm(in l ) = n i r l ;
mrl=dm(üull);
Iransmilir:
dm(ix_buf-t-1)=mrl;
dm(tx_btiPf-2)=mi-l;
axU=dm(Üx3le5);
aíHslbii O o f a x O ;
il'ne i'li;
{Llama a la Snbrutina de generación de llavesj
(Llama ;t In Subrntina de desüiicnplaciónj
ÍTransmite muestras desencriptadas por el canal izquierdo}
iTransniilc muestras dcsencnpUuias por ei canal derecho}
60
ayO~dni(dak>iii);
i*!~t!m(pimt_M);
din(¡'l,in<])~ayü;
dm(puníj'l}=¡4;
dm(Í5,n]'I)-mrl;
¡ir= dm(ncnlr);
;ip=ar-l;
din(ncnlr)=ar;
if nc rtí;
axO=Oxf;
dni(rín_nng)=a.\0;
rli;
{ -------------------------------- Subriiíiiiii cjnc nliüiitk' In Inlcrrnpción 1RQ2
Írq2:
clin scc_rcg;
si=io(0):
axO=tlin(iiiÍ_r.x);
ayü=2;
ai-=nxO-ayO;
ifcq jumpsigtiej-xio;
iliníiní_rx)=íir;
rli;
sigue_rxio:
din(iC,m7)=s¡;
axO=¡;
dni(Í!iÍc¡o)=axO;
logglc fll;
j
rl¡;
-----------------------------
Suhriiiiiin (|iie aticiidL 1 In fntemipeión IRQIÍ
¡rqe:
lugglcni;
axü=0;
diii{Íni_rx}-¡!x();
dni(oiilO)=iixO;
din(mQ)-axO;
din(burfcr)=axt);
dni(buricr-M)-axÜ;
din(¡nícÍo)=axO;
axü=!laveü;
din(kcyO)=axü;
axO=l!avel;
dniCk-cyl)=iixÜ;
ifc-OxIT;
nop;
rti;
.include <Aíin.(lsp>;
.RNDMOD;
61
Programa del Alüorílmo DESI2181.DSP:
{ U E S I 2 1 8 1 . U S P . - Encriplacion de muestras para una iteración del Algoritmo OESI2181.DSP
Miguel E. Vicuña Muño?;- líncripíación de Voz - Octubre 99
Entrada:
axl = Dato anterior
axO = Dato actual
s¡ = Clave Kn
Salida:
a x l = Dato anterior
axO = Dato actual
Rcpistros alterados:
ax 1, axQ, a y l , ayü, sr, mr , ar, 13, Í3
Tiempo de ejecución:
564 ciclos de máquina
.MODULE
.ENTRY
.EXTERNAL
.EXTERN AL
dcsencriptacion_dcs;
criptojdesx;
permutar;
tbl_j>erl, tbMpcrl;
.VAR/DM
nienenl, mencnO;
cripto_idesx:
dni(mcnenl)=axl;
dm(mcncnO)=axO;
{Guarda el dato anterior cncriptado DI en mencn I }
(Guarda el dato actual cncriptado DO en mencnO}
ayO=dm(mcnenl);
13=0;
¡3= A tbl_ipcrI;
cali permutar;
mrO=ar;
(Guarda el dato anterior D I = BO en el }
{registro AYO y llama a la Subruüma PERMUTAR inversa}
(a la utilizada en la encriptación para obtener así el dato }
(de entrada AO}
{El dato actual desencriptado lo almacena en MRO = AO }
ayO=dm(mcncnl);
axO=si;
ar=axO xor ayO;
(Guarda el dato anterior DI en el registro AYO}
(Almacena la Llave Kn utilizada en esta etapa en AXO ]
(Encuentra el dato Cl y lo almacena en AR realizando un]
(XOR a nivel de bit entre D I y Kn }
{Cl es almacenado en AYO y se llama a la S u b r u t i n a )
{PERMUTAR utilizada en la encriplacíón}
(para encontrar el dato de Fl y almacenarlo en AR}
ayO=ar;
13=0;
Í3= rt lbl_perl;
cal! permutar;
ayO=dm(menenO);
ar=ar xor ayü;
ayO=ar;
13=0;
¡3= A tbMperl;
cali permutar;
ax! =ar;
ax()=mrO;
rts;
.ENDMOD;
(Almaceno el dato actual DO en AYO}
{ Se encuentra el dato B I realizando una operación Xor}
{a nivel de bit entre Fl y DO y lo almaceno en AR}
(Almacena el dato de B l en AYO}
(Luego se llama a la Subrutina PERMUTAR inversa}
(para encontrar el dato anterior desencriptado de entrada A
(AK-AI }
(Almacena el dato anterior desencriptado al registro AXI }
{ Almacena el dato actual desencriptado al registro AX I }
Programa del Algoritmo GEN KEY.DSP:
gcri_kcy.dsp - S u b r n l i n a para generar la clave de una iteración de la dcsciicriptacion DESI.2181
Miguel Eni-i(|ue Vicuña M u ñ o z / Encrip(ación de Voz/ Octubre 1999
Salida:
SÍ = llave N
Registros alterados:
ayO, mr, ar, sr, 13, i3
Tiempo de ejecución:
564 ciclos de máquina
Llamadas a subrutinas
permutar
xor_críp
.MODULE
.[•NTRY
.EXTERNAL
.EXTERNAL
Gcnerac¡on_Ilave;
gcn_llave;
pcnnutar, xor_crip;
tbl_pcrl;
.VAR/DM
.IN1T
.INIT
keyl,kcyO:
k e y l : 0x1971;
kcyO:Ox!999;
.GLOBAL
keyl, keyü;
gcn_llave:
ayO=dm(keyl);
13=0;
i3= A tbl_perl;
cali pcrmtiííir:
mrl=ar;
mrO=mrl;
cali xor_cnp;
mr!=ar;
{Almacena la clave [Cien el registro AYO}
(Llama a la subrutirm PERMUTAR}
{Obtiene los 16 bits permutados de la izquierda de la clave)
{ Ll y lo almacena en el registro MRO = LI}
¡Llama a la subrutína XOR_CR1P y se obtiene Ll.xor}
[y se lo almacena en el registro M R 1 = Ll xor }
ayO-dni(keyO);
13=0;
Í3= A lbl_peri;
cali permutar;
mrO=ar;
{Almacena la clave KO en el registro AYO}
cali xor_crip;
mrO=ar;
{Llama a la subrutina XOR_CRIP y se obtiene LOxor}
{ y lo almacena en el registro MRO= LO xor }
si-;ishift m r l by 4 (hi);
sr=sr or LshiA mrü by 4 (lo);
si=srl;
{Obtención de la clave Kn para esta etapa desplazando}
{LI cuatro posiciones hacia la izquierda!
sr=ashiñ mrl by 3 (hij;
sr=sr or Ishift mrO by 3 (lo);
dm(keyl)=srl;
{Rotación de la clave (LI y LO) tres posiciones a la}
(izquierda, para ser utilizada en In siguiente etapa}
{Almacena la clave K¡, ,, }
{Llama o la subrutina PERMUTAR}
{Obtiene los 16 bits permutados de la derecha de la clave}
{ LO y lo almacena en'el registro MRO = LO}
63
Descargar