;(C)2005 wek http://www.efton.sk ;Free for personal use. ;For commercial use contact wek@efton.sk ;for comment see skipregs.a51 ;804 cycles incl. ret ;484h=1156 bytes (including the 256-bytes F-table) ; DSEG AT 30h ;r0: ds 2 ;r2: ds 2 ;r4: ds 2 ;r6: ds 2 key: ds 10 CSEG USING 2 TestSkipJack: mov dptr,#TestVector TSJX1: mov r0,#key TSJX2: clr a movc a,@a+dptr inc dptr mov @r0,a inc r0 cjne r0,#key+10,TSJX2 setb rs1 ;as USING 2 clr a movc a,@a+dptr inc dptr mov r1,a clr a movc a,@a+dptr inc dptr mov r0,a clr a movc a,@a+dptr inc dptr mov r3,a clr a movc a,@a+dptr inc dptr mov r2,a clr a movc a,@a+dptr inc dptr mov r5,a clr a movc a,@a+dptr inc dptr mov r4,a clr a movc a,@a+dptr inc dptr mov r7,a clr a movc a,@a+dptr inc dptr mov r6,a push dph push dpl call SkipJack pop dpl pop dph clr a movc a,@a+dptr inc dptr cjne a,ar1,Error clr a movc a,@a+dptr inc dptr cjne a,ar0,Error clr a movc a,@a+dptr inc dptr cjne a,ar3,Error clr a movc a,@a+dptr inc dptr cjne a,ar2,Error clr a movc a,@a+dptr inc dptr cjne a,ar5,Error clr a movc a,@a+dptr inc dptr cjne a,ar4,Error clr a movc a,@a+dptr inc dptr cjne a,ar7,Error clr a movc a,@a+dptr inc dptr cjne a,ar6,Error mov a,dpl cjne a,#LOW(TestVectorEnd),TSJX1 mov a,dph cjne a,#HIGH(TestVectorEnd),TSJX1 StopOK: sjmp StopOK Error: StopNG: ljmp StopNG TestVector: ;This vector is from the SKIPJACK protocol specification: db 000h,099h,088h,077h,066h,055h,044h,033h,022h,011h ; key db 025h,087h,0cah,0e2h,07ah,012h,0d3h,000h ; ciphertext db 033h,022h,011h,000h,0ddh,0cch,0bbh,0aah ; plaintext ; Unfortunately that's the only "official" vector we have. It really ; sucks that the specification doesn't contain more vectorsh, as this one ; only covers 104 of the 256 entries of the F table. ; Here are some more that were posted to the Usenet newsgroup sci.crypt by ; Jason Stratos Papadopoulos on 27-Jun-1998 ; http://www.dejanews.com/getdoc.xp?AN=366465228 db 0f8h,0dah,002h,064h,077h,022h,0f7h,010h,03ah,0dfh ; key db 0c9h,02dh,022h,032h,04ch,06bh,031h,0aeh ; ciphertext db 01dh,0dfh,039h,0abh,0f5h,0cdh,071h,01eh ; plaintext db 082h,076h,00ah,0c1h,037h,094h,088h,021h,0eeh,0e4h ; key db 0e3h,028h,077h,0c1h,0d9h,052h,07fh,0ffh ; ciphertext db 0ddh,06ch,06ch,0ceh,08fh,083h,0e6h,09eh ; plaintext db 084h,03ch,016h,087h,0d3h,0cdh,0cah,05fh,0c5h,0c3h ; key db 047h,045h,078h,03fh,075h,0b8h,086h,01ah ; ciphertext db 0beh,0aah,0cfh,017h,07fh,0a4h,01ah,011h ; plaintext db 0aeh,087h,00ch,0d7h,0ffh,033h,0a9h,095h,0f7h,0e5h ; key db 05ch,010h,016h,036h,0b8h,0a5h,07ah,072h ; ciphertext db 0c4h,0c0h,09fh,021h,06ch,01bh,0c6h,00ah ; plaintext db 05ch,0cbh,0d9h,013h,0eah,08bh,073h,0bdh,063h,091h ; key db 0b4h,0fch,00fh,08eh,054h,072h,08fh,091h ; ciphertext db 0d3h,0f8h,014h,0b0h,000h,024h,058h,056h ; plaintext db 0f6h,05eh,074h,0cdh,059h,09ch,068h,0a4h,00ch,0c7h ; key db 093h,0b7h,050h,060h,08fh,057h,001h,0f8h ; ciphertext db 035h,06eh,0c7h,0d9h,038h,032h,032h,09ch ; plaintext db 0aah,010h,06eh,046h,0d7h,008h,07ch,04eh,093h,0dch ; key db 0d8h,023h,0d4h,055h,010h,009h,09eh,061h ; ciphertext db 020h,09eh,0cfh,01ch,053h,07ah,0d5h,06ch ; plaintext db 0a9h,03fh,097h,089h,0a2h,00ch,03ch,0c3h,04fh,0eah ; key db 009h,059h,0e2h,031h,0b2h,075h,0d9h,05fh ; ciphertext db 089h,02eh,0eah,09dh,064h,0e1h,07dh,066h ; plaintext db 088h,0b1h,063h,0cbh,0d6h,016h,016h,088h,088h,099h ; key db 0e7h,070h,002h,009h,088h,067h,067h,0aeh ; ciphertext db 099h,013h,090h,0fdh,076h,00fh,0c9h,01bh ; plaintext db 0fbh,06ch,0d1h,0ffh,070h,048h,075h,061h,0dfh,010h ; key db 0e7h,0cch,049h,0a5h,06bh,0d6h,0a3h,022h ; ciphertext db 0dah,0ebh,0c9h,047h,0ddh,0cah,09ch,09eh ; plaintext db 05eh,0dch,01ah,0c0h,0c4h,0e7h,0efh,05fh,000h,02ch ; key db 0e4h,08ah,005h,0cfh,026h,0e2h,042h,0fdh ; ciphertext db 064h,019h,0ddh,0efh,0e2h,0cdh,08fh,02eh ; plaintext db 08eh,030h,090h,0c1h,09ah,0a3h,02fh,094h,049h,06ah ; key db 062h,0c0h,0e5h,037h,0b1h,04dh,0f2h,0c1h ; ciphertext db 032h,029h,098h,0ech,0bdh,006h,081h,012h ; plaintext db 0b9h,06eh,03fh,0d4h,06fh,0a4h,026h,03fh,090h,092h ; key db 054h,0d1h,0e5h,08ah,06bh,062h,04dh,071h ; ciphertext db 03ah,0aeh,02ah,0eeh,020h,0dah,093h,0cch ; plaintext db 09eh,066h,035h,0bah,0eeh,028h,0c5h,0bch,0e2h,0bch ; key db 05dh,00fh,023h,05ah,09dh,022h,01ch,0e0h ; ciphertext db 014h,031h,011h,012h,0cah,011h,0f7h,027h ; plaintext db 004h,012h,07ch,0e1h,06dh,0c1h,0b1h,072h,06ah,066h ; key db 08eh,05bh,003h,052h,02eh,068h,0cbh,0ebh ; ciphertext db 030h,00eh,043h,013h,0e7h,0adh,067h,096h ; plaintext db 0f0h,0b8h,09dh,075h,0e9h,079h,0cch,0c9h,0b1h,072h ; key db 057h,02ch,09bh,040h,025h,0a9h,013h,04bh ; ciphertext db 009h,0cdh,01ch,01ah,0cch,0beh,077h,097h ; plaintext db 0f9h,0bfh,0c7h,087h,098h,0cbh,0f1h,0bch,0d4h,0b5h ; key db 08ch,095h,09ch,090h,047h,089h,0fbh,0dah ; ciphertext db 031h,0b3h,00ch,0a3h,054h,0afh,03ch,0d8h ; plaintext db 0f4h,03ah,051h,0b4h,027h,03bh,0deh,027h,0d2h,0b0h ; key db 0b7h,0d7h,0f5h,0fah,034h,029h,088h,0fbh ; ciphertext db 008h,0c5h,09bh,00dh,0b9h,09eh,0c2h,067h ; plaintext db 0cdh,051h,0f0h,0a7h,05ah,0a7h,03ch,048h,0edh,0d2h ; key db 076h,03ah,0a8h,0eeh,010h,093h,097h,0b3h ; ciphertext db 097h,084h,0b1h,0e3h,0e7h,0e6h,00eh,060h ; plaintext db 0b3h,031h,09ah,03fh,066h,022h,0aah,072h,06bh,0b3h ; key db 003h,025h,060h,003h,037h,0b8h,0adh,03ch ; ciphertext db 0f6h,052h,016h,037h,03dh,04bh,043h,0c7h ; plaintext db 049h,032h,054h,0c9h,059h,06eh,099h,03fh,05fh,09ch ; key db 068h,0e1h,0c5h,051h,0c5h,091h,008h,0c0h ; ciphertext db 0cbh,0a4h,0c1h,021h,05dh,05dh,036h,0ceh ; plaintext db 076h,015h,00ch,02ch,03ch,0edh,01ch,07ch,0a0h,021h ; key db 07eh,0b6h,032h,05dh,082h,0a2h,009h,06ch ; ciphertext db 082h,029h,048h,051h,028h,08eh,075h,0cbh ; plaintext db 071h,040h,0d6h,0c5h,048h,063h,005h,087h,02dh,0f6h ; key db 024h,083h,0f3h,085h,0a4h,02eh,0e3h,0c6h ; ciphertext db 0c3h,0a7h,0b7h,0e4h,0a5h,02eh,040h,07bh ; plaintext db 03ch,02ch,039h,001h,0f0h,0eeh,09ah,03bh,02bh,00eh ; key db 0d6h,0fah,09dh,0b8h,068h,05fh,0d8h,08ah ; ciphertext db 01bh,0fdh,0e3h,02ah,0b5h,059h,0e1h,03ah ; plaintext db 060h,06ah,08bh,04bh,0dfh,0aah,0e8h,0a0h,0bah,051h ; key db 003h,030h,048h,091h,070h,0b8h,052h,093h ; ciphertext db 0d2h,005h,0f7h,048h,06ch,078h,028h,038h ; plaintext db 078h,047h,0a4h,07ah,00fh,0e7h,09ah,0b7h,070h,0ceh ; key db 01fh,09bh,033h,001h,0c9h,0b2h,070h,08ch ; ciphertext db 0d9h,06fh,0f1h,0f7h,0c7h,0fch,060h,0e0h ; plaintext db 073h,0b9h,0abh,00ch,036h,0c9h,09eh,091h,0a8h,091h ; key db 02bh,086h,0c5h,07fh,0feh,016h,088h,095h ; ciphertext db 024h,01dh,04bh,0deh,019h,0a7h,05fh,08fh ; plaintext db 0a3h,07fh,02ah,0d5h,0a8h,05eh,017h,007h,041h,0f5h ; key db 05ah,0f7h,0ceh,0b3h,0eeh,0d9h,0dch,0a1h ; ciphertext db 07bh,0e1h,0b8h,0d5h,083h,021h,0c6h,019h ; plaintext db 0f7h,0b0h,0c2h,0a8h,017h,00eh,03ch,04eh,048h,0b3h ; key db 01bh,058h,077h,036h,0e1h,016h,0c0h,04bh ; ciphertext db 0c9h,021h,04eh,0a0h,01eh,0c1h,049h,048h ; plaintext db 0a1h,0fch,067h,0e4h,04eh,0ach,0ach,0f4h,0a9h,002h ; key db 0f3h,0ech,0f0h,0f1h,078h,09ah,039h,023h ; ciphertext db 0e2h,0a3h,009h,01fh,0ebh,058h,015h,088h ; plaintext db 0f1h,044h,030h,0afh,0fch,05fh,0e8h,02ah,09ah,0e9h ; key db 0e8h,0d1h,014h,0c2h,00fh,0fah,01ch,079h ; ciphertext db 03ch,0b4h,066h,0d3h,001h,0b6h,008h,054h ; plaintext db 0fdh,026h,0dfh,050h,048h,06ah,04ch,0d9h,06dh,09bh ; key db 022h,029h,003h,099h,04dh,064h,0feh,03ah ; ciphertext db 0b0h,068h,04fh,08ah,05eh,063h,0d9h,035h ; plaintext db 0a6h,0d4h,06dh,046h,0cah,028h,07eh,01ah,033h,02ah ; key db 091h,0f2h,0bah,0adh,06fh,0a0h,0deh,055h ; ciphertext db 0bah,01fh,037h,0e8h,08eh,0deh,0c5h,05fh ; plaintext db 083h,0c3h,0f1h,0cbh,08dh,006h,0efh,0c6h,019h,06bh ; key db 083h,0f9h,0f0h,08fh,089h,0a8h,054h,0eeh ; ciphertext db 0e9h,0feh,0d8h,050h,01bh,07ah,065h,079h ; plaintext db 00eh,0dfh,0a4h,04ch,07dh,04ah,04eh,0f0h,072h,05eh ; key db 02bh,01bh,066h,070h,0a6h,0beh,003h,024h ; ciphertext db 0ebh,05ch,0a8h,0b3h,0fah,01fh,0cdh,0bbh ; plaintext db 0b8h,0edh,0cfh,016h,07dh,099h,0a7h,011h,0cch,0eeh ; key db 021h,01ah,069h,05dh,0a4h,073h,076h,06fh ; ciphertext db 0b8h,0b5h,025h,0c6h,038h,02ah,0f2h,077h ; plaintext db 04fh,063h,09eh,00dh,05ah,05dh,02ah,0d7h,0e9h,0a4h ; key db 0ebh,029h,076h,037h,00dh,022h,0efh,022h ; ciphertext db 091h,062h,0e7h,081h,0ffh,068h,038h,053h ; plaintext db 037h,0e0h,006h,025h,06ah,04ah,0e6h,0d3h,020h,0c4h ; key db 0dbh,0a4h,0c0h,0efh,00eh,0a0h,098h,0c0h ; ciphertext db 0c9h,0f2h,03ah,020h,0a3h,09dh,0edh,011h ; plaintext db 0e4h,01dh,00bh,0d2h,05fh,093h,01bh,0a1h,0d8h,05ch ; key db 092h,03dh,0aeh,0e8h,000h,007h,009h,0f9h ; ciphertext db 05ah,06fh,012h,0f3h,02fh,07eh,0efh,0dfh ; plaintext db 0fdh,0f6h,05bh,0bch,05fh,0e6h,000h,0f3h,0cdh,068h ; key db 0d5h,077h,01eh,078h,0b6h,0f1h,0feh,01eh ; ciphertext db 0cah,0d5h,041h,04ch,01ch,064h,0f1h,094h ; plaintext db 01ch,026h,09ah,0f2h,0ffh,016h,06ah,0cbh,027h,0efh ; key db 063h,04fh,07ah,038h,061h,0afh,097h,0a1h ; ciphertext db 006h,03ah,058h,0a2h,00bh,045h,037h,08fh ; plaintext db 011h,079h,0f6h,04ah,0cbh,061h,022h,0cch,0f6h,049h ; key db 03ah,080h,03ah,04bh,0d0h,0e8h,0c3h,0e6h ; ciphertext db 008h,0fbh,0f4h,02bh,043h,013h,034h,07bh ; plaintext db 007h,08ch,087h,026h,05eh,0b8h,0dah,032h,03eh,090h ; key db 0f4h,0fah,037h,02eh,07eh,014h,041h,0a1h ; ciphertext db 06dh,04eh,0d0h,0e9h,093h,005h,032h,0d1h ; plaintext db 02fh,0ffh,035h,0f8h,0ebh,077h,04ch,084h,03bh,0b0h ; key db 063h,0a9h,019h,07fh,07bh,075h,0f5h,03fh ; ciphertext db 040h,0b6h,099h,081h,023h,045h,066h,01dh ; plaintext db 009h,0f7h,073h,046h,0a4h,039h,03ch,0e9h,098h,056h ; key db 0e9h,01ah,005h,00ah,074h,081h,0b3h,0ddh ; ciphertext db 022h,0edh,054h,062h,06ah,051h,0e5h,005h ; plaintext db 05bh,087h,08eh,00bh,022h,0a7h,005h,0ach,0f8h,0fbh ; key db 06eh,093h,070h,0a9h,01bh,099h,048h,078h ; ciphertext db 00ch,048h,09bh,066h,0e2h,0dah,053h,01bh ; plaintext db 09dh,072h,0c1h,0abh,020h,092h,0c1h,0b1h,008h,077h ; key db 05bh,0deh,0cdh,0edh,096h,0d6h,056h,0c9h ; ciphertext db 0c6h,04bh,010h,0f8h,0b1h,091h,0bch,02ch ; plaintext db 072h,086h,05fh,028h,097h,025h,0e1h,0b5h,055h,002h ; key db 01ah,056h,080h,0e5h,017h,036h,002h,06fh ; ciphertext db 091h,0fdh,0f7h,023h,06fh,085h,0bdh,0d6h ; plaintext db 006h,0e3h,0c0h,0e5h,041h,0f4h,0aah,0e6h,0feh,093h ; key db 00eh,07ah,0ach,0e4h,021h,0bch,079h,0d8h ; ciphertext db 040h,000h,09fh,08ah,046h,05ah,09fh,0ebh ; plaintext db 02eh,0a0h,09fh,01ch,0c8h,09eh,006h,04fh,009h,0bch ; key db 0a9h,05dh,087h,0fah,0d1h,02ch,035h,093h ; ciphertext db 054h,032h,008h,0b0h,05bh,0fah,038h,058h ; plaintext TestVectorEnd: ;=============================== SKIPJACK =================================== SkipJack: mov dptr,#FTable ;start 8x with inverse rule B mov a,r3 xrl a,key+7 movc a,@a+dptr xrl a,r2 mov r2,a xrl a,key+6 movc a,@a+dptr xrl a,r3 mov r3,a xrl a,key+5 movc a,@a+dptr xrl a,r2 mov r2,a xrl ar4,a xrl ar4,#32 xrl a,key+4 movc a,@a+dptr xrl a,r3 mov r3,a xrl a,r5 mov r5,a ; mov a,r5 ; r2 r4 r6 r0 xrl a,key+3 ;acts as r0 r2 r4 r6 movc a,@a+dptr xrl a,r4 mov r4,a xrl a,key+2 movc a,@a+dptr xrl a,r5 mov r5,a xrl a,key+1 movc a,@a+dptr xrl a,r4 mov r4,a xrl ar6,a xrl ar6,#31 xrl a,key+0 movc a,@a+dptr xrl a,r5 mov r5,a xrl a,r7 mov r7,a ; mov a,r7 ; r0 r2 r4 r6 xrl a,key+9 ;acts as r4 r6 r0 r2 movc a,@a+dptr xrl a,r6 mov r6,a xrl a,key+8 movc a,@a+dptr xrl a,r7 mov r7,a xrl a,key+7 movc a,@a+dptr xrl a,r6 mov r6,a xrl ar0,a xrl ar0,#30 xrl a,key+6 movc a,@a+dptr xrl a,r7 mov r7,a xrl a,r1 mov r1,a ; mov a,r1 ; r0 r2 r4 r6 xrl a,key+5 ;acts as r2 r4 r6 r0 movc a,@a+dptr xrl a,r0 mov r0,a xrl a,key+4 movc a,@a+dptr xrl a,r1 mov r1,a xrl a,key+3 movc a,@a+dptr xrl a,r0 mov r0,a xrl ar2,a xrl ar2,#29 xrl a,key+2 movc a,@a+dptr xrl a,r1 mov r1,a xrl a,r3 mov r3,a ; mov a,r3 xrl a,key+1 movc a,@a+dptr xrl a,r2 mov r2,a xrl a,key+0 movc a,@a+dptr xrl a,r3 mov r3,a xrl a,key+9 movc a,@a+dptr xrl a,r2 mov r2,a xrl ar4,a xrl ar4,#28 xrl a,key+8 movc a,@a+dptr xrl a,r3 mov r3,a xrl a,r5 mov r5,a ; mov a,r5 ; r2 r4 r6 r0 xrl a,key+7 ;acts as r0 r2 r4 r6 movc a,@a+dptr xrl a,r4 mov r4,a xrl a,key+6 movc a,@a+dptr xrl a,r5 mov r5,a xrl a,key+5 movc a,@a+dptr xrl a,r4 mov r4,a xrl ar6,a xrl ar6,#27 xrl a,key+4 movc a,@a+dptr xrl a,r5 mov r5,a xrl a,r7 mov r7,a ; mov a,r7 ; r0 r2 r4 r6 xrl a,key+3 ;acts as r4 r6 r0 r2 movc a,@a+dptr xrl a,r6 mov r6,a xrl a,key+2 movc a,@a+dptr xrl a,r7 mov r7,a xrl a,key+1 movc a,@a+dptr xrl a,r6 mov r6,a xrl ar0,a xrl ar0,#26 xrl a,key+0 movc a,@a+dptr xrl a,r7 mov r7,a xrl a,r1 mov r1,a ; mov a,r1 ; r0 r2 r4 r6 xrl a,key+9 ;acts as r2 r4 r6 r0 movc a,@a+dptr xrl a,r0 mov r0,a xrl a,key+8 movc a,@a+dptr xrl a,r1 mov r1,a xrl a,key+7 movc a,@a+dptr xrl a,r0 mov r0,a xrl ar2,a xrl ar2,#25 xrl a,key+6 movc a,@a+dptr xrl a,r1 mov r1,a xrl a,r3 mov r3,a ;now switch to inverse A rule ; mov a,r3 xrl ar1,a xrl a,key+5 movc a,@a+dptr xch a,r2 xrl ar0,a xrl ar0,#24 xrl a,r2 mov r2,a xrl a,key+4 movc a,@a+dptr xrl a,r3 mov r3,a xrl a,key+3 movc a,@a+dptr xrl a,r2 mov r2,a xrl a,key+2 movc a,@a+dptr xrl ar3,a mov a,r5 xrl ar3,a xrl a,key+1 movc a,@a+dptr xch a,r4 xrl ar2,a xrl ar2,#23 xrl a,r4 mov r4,a xrl a,key+0 movc a,@a+dptr xrl a,r5 mov r5,a xrl a,key+9 movc a,@a+dptr xrl a,r4 mov r4,a xrl a,key+8 movc a,@a+dptr xrl ar5,a mov a,r7 xrl ar5,a xrl a,key+7 movc a,@a+dptr xch a,r6 xrl ar4,a xrl ar4,#22 xrl a,r6 mov r6,a xrl a,key+6 movc a,@a+dptr xrl a,r7 mov r7,a xrl a,key+5 movc a,@a+dptr xrl a,r6 mov r6,a xrl a,key+4 movc a,@a+dptr xrl ar7,a mov a,r1 xrl ar7,a xrl a,key+3 movc a,@a+dptr xch a,r0 xrl ar6,a xrl ar6,#21 xrl a,r0 mov r0,a xrl a,key+2 movc a,@a+dptr xrl a,r1 mov r1,a xrl a,key+1 movc a,@a+dptr xrl a,r0 mov r0,a xrl a,key+0 movc a,@a+dptr xrl ar1,a mov a,r3 xrl ar1,a xrl a,key+9 movc a,@a+dptr xch a,r2 xrl ar0,a xrl ar0,#20 xrl a,r2 mov r2,a xrl a,key+8 movc a,@a+dptr xrl a,r3 mov r3,a xrl a,key+7 movc a,@a+dptr xrl a,r2 mov r2,a xrl a,key+6 movc a,@a+dptr xrl ar3,a mov a,r5 xrl ar3,a xrl a,key+5 movc a,@a+dptr xch a,r4 xrl ar2,a xrl ar2,#19 xrl a,r4 mov r4,a xrl a,key+4 movc a,@a+dptr xrl a,r5 mov r5,a xrl a,key+3 movc a,@a+dptr xrl a,r4 mov r4,a xrl a,key+2 movc a,@a+dptr xrl ar5,a mov a,r7 xrl ar5,a xrl a,key+1 movc a,@a+dptr xch a,r6 xrl ar4,a xrl ar4,#18 xrl a,r6 mov r6,a xrl a,key+0 movc a,@a+dptr xrl a,r7 mov r7,a xrl a,key+9 movc a,@a+dptr xrl a,r6 mov r6,a xrl a,key+8 movc a,@a+dptr xrl ar7,a mov a,r1 xrl ar7,a xrl a,key+7 movc a,@a+dptr xch a,r0 xrl ar6,a xrl ar6,#17 xrl a,r0 mov r0,a xrl a,key+6 movc a,@a+dptr xrl a,r1 mov r1,a xrl a,key+5 movc a,@a+dptr xrl a,r0 mov r0,a xrl a,key+4 movc a,@a+dptr xrl ar1,a ;now again with inverse rule B mov a,r3 xrl a,key+3 movc a,@a+dptr xrl a,r2 mov r2,a xrl a,key+2 movc a,@a+dptr xrl a,r3 mov r3,a xrl a,key+1 movc a,@a+dptr xrl a,r2 mov r2,a xrl ar4,a xrl ar4,#16 xrl a,key+0 movc a,@a+dptr xrl a,r3 mov r3,a xrl a,r5 mov r5,a ; mov a,r5 ; r2 r4 r6 r0 xrl a,key+9 ;acts as r0 r2 r4 r6 movc a,@a+dptr xrl a,r4 mov r4,a xrl a,key+8 movc a,@a+dptr xrl a,r5 mov r5,a xrl a,key+7 movc a,@a+dptr xrl a,r4 mov r4,a xrl ar6,a xrl ar6,#15 xrl a,key+6 movc a,@a+dptr xrl a,r5 mov r5,a xrl a,r7 mov r7,a ; mov a,r7 ; r0 r2 r4 r6 xrl a,key+5 ;acts as r4 r6 r0 r2 movc a,@a+dptr xrl a,r6 mov r6,a xrl a,key+4 movc a,@a+dptr xrl a,r7 mov r7,a xrl a,key+3 movc a,@a+dptr xrl a,r6 mov r6,a xrl ar0,a xrl ar0,#14 xrl a,key+2 movc a,@a+dptr xrl a,r7 mov r7,a xrl a,r1 mov r1,a ; mov a,r1 ; r0 r2 r4 r6 xrl a,key+1 ;acts as r2 r4 r6 r0 movc a,@a+dptr xrl a,r0 mov r0,a xrl a,key+0 movc a,@a+dptr xrl a,r1 mov r1,a xrl a,key+9 movc a,@a+dptr xrl a,r0 mov r0,a xrl ar2,a xrl ar2,#13 xrl a,key+8 movc a,@a+dptr xrl a,r1 mov r1,a xrl a,r3 mov r3,a ; mov a,r3 xrl a,key+7 movc a,@a+dptr xrl a,r2 mov r2,a xrl a,key+6 movc a,@a+dptr xrl a,r3 mov r3,a xrl a,key+5 movc a,@a+dptr xrl a,r2 mov r2,a xrl ar4,a xrl ar4,#12 xrl a,key+4 movc a,@a+dptr xrl a,r3 mov r3,a xrl a,r5 mov r5,a ; mov a,r5 ; r2 r4 r6 r0 xrl a,key+3 ;acts as r0 r2 r4 r6 movc a,@a+dptr xrl a,r4 mov r4,a xrl a,key+2 movc a,@a+dptr xrl a,r5 mov r5,a xrl a,key+1 movc a,@a+dptr xrl a,r4 mov r4,a xrl ar6,a xrl ar6,#11 xrl a,key+0 movc a,@a+dptr xrl a,r5 mov r5,a xrl a,r7 mov r7,a ; mov a,r7 ; r0 r2 r4 r6 xrl a,key+9 ;acts as r4 r6 r0 r2 movc a,@a+dptr xrl a,r6 mov r6,a xrl a,key+8 movc a,@a+dptr xrl a,r7 mov r7,a xrl a,key+7 movc a,@a+dptr xrl a,r6 mov r6,a xrl ar0,a xrl ar0,#10 xrl a,key+6 movc a,@a+dptr xrl a,r7 mov r7,a xrl a,r1 mov r1,a ; mov a,r1 ; r0 r2 r4 r6 xrl a,key+5 ;acts as r2 r4 r6 r0 movc a,@a+dptr xrl a,r0 mov r0,a xrl a,key+4 movc a,@a+dptr xrl a,r1 mov r1,a xrl a,key+3 movc a,@a+dptr xrl a,r0 mov r0,a xrl ar2,a xrl ar2,#9 xrl a,key+2 movc a,@a+dptr xrl a,r1 mov r1,a xrl a,r3 mov r3,a ;and the last batch of inverse A rule ; mov a,r3 xrl ar1,a xrl a,key+1 movc a,@a+dptr xch a,r2 xrl ar0,a xrl ar0,#8 xrl a,r2 mov r2,a xrl a,key+0 movc a,@a+dptr xrl a,r3 mov r3,a xrl a,key+9 movc a,@a+dptr xrl a,r2 mov r2,a xrl a,key+8 movc a,@a+dptr xrl ar3,a mov a,r5 xrl ar3,a xrl a,key+7 movc a,@a+dptr xch a,r4 xrl ar2,a xrl ar2,#7 xrl a,r4 mov r4,a xrl a,key+6 movc a,@a+dptr xrl a,r5 mov r5,a xrl a,key+5 movc a,@a+dptr xrl a,r4 mov r4,a xrl a,key+4 movc a,@a+dptr xrl ar5,a mov a,r7 xrl ar5,a xrl a,key+3 movc a,@a+dptr xch a,r6 xrl ar4,a xrl ar4,#6 xrl a,r6 mov r6,a xrl a,key+2 movc a,@a+dptr xrl a,r7 mov r7,a xrl a,key+1 movc a,@a+dptr xrl a,r6 mov r6,a xrl a,key+0 movc a,@a+dptr xrl ar7,a mov a,r1 xrl ar7,a xrl a,key+9 movc a,@a+dptr xch a,r0 xrl ar6,a xrl ar6,#5 xrl a,r0 mov r0,a xrl a,key+8 movc a,@a+dptr xrl a,r1 mov r1,a xrl a,key+7 movc a,@a+dptr xrl a,r0 mov r0,a xrl a,key+6 movc a,@a+dptr xrl ar1,a mov a,r3 xrl ar1,a xrl a,key+5 movc a,@a+dptr xch a,r2 xrl ar0,a xrl ar0,#4 xrl a,r2 mov r2,a xrl a,key+4 movc a,@a+dptr xrl a,r3 mov r3,a xrl a,key+3 movc a,@a+dptr xrl a,r2 mov r2,a xrl a,key+2 movc a,@a+dptr xrl ar3,a mov a,r5 xrl ar3,a xrl a,key+1 movc a,@a+dptr xch a,r4 xrl ar2,a xrl ar2,#3 xrl a,r4 mov r4,a xrl a,key+0 movc a,@a+dptr xrl a,r5 mov r5,a xrl a,key+9 movc a,@a+dptr xrl a,r4 mov r4,a xrl a,key+8 movc a,@a+dptr xrl ar5,a mov a,r7 xrl ar5,a xrl a,key+7 movc a,@a+dptr xch a,r6 xrl ar4,a xrl ar4,#2 xrl a,r6 mov r6,a xrl a,key+6 movc a,@a+dptr xrl a,r7 mov r7,a xrl a,key+5 movc a,@a+dptr xrl a,r6 mov r6,a xrl a,key+4 movc a,@a+dptr xrl ar7,a mov a,r1 xrl ar7,a xrl a,key+3 movc a,@a+dptr xch a,r0 xrl ar6,a xrl ar6,#1 xrl a,r0 mov r0,a xrl a,key+2 movc a,@a+dptr xrl a,r1 mov r1,a xrl a,key+1 movc a,@a+dptr xrl a,r0 mov r0,a xrl a,key+0 movc a,@a+dptr xrl ar1,a ;about finished ret FTable: db 0a3h,0d7h,009h,083h,0f8h,048h,0f6h,0f4h db 0b3h,021h,015h,078h,099h,0b1h,0afh,0f9h db 0e7h,02dh,04dh,08ah,0ceh,04ch,0cah,02eh db 052h,095h,0d9h,01eh,04eh,038h,044h,028h db 00ah,0dfh,002h,0a0h,017h,0f1h,060h,068h db 012h,0b7h,07ah,0c3h,0e9h,0fah,03dh,053h db 096h,084h,06bh,0bah,0f2h,063h,09ah,019h db 07ch,0aeh,0e5h,0f5h,0f7h,016h,06ah,0a2h db 039h,0b6h,07bh,00fh,0c1h,093h,081h,01bh db 0eeh,0b4h,01ah,0eah,0d0h,091h,02fh,0b8h db 055h,0b9h,0dah,085h,03fh,041h,0bfh,0e0h db 05ah,058h,080h,05fh,066h,00bh,0d8h,090h db 035h,0d5h,0c0h,0a7h,033h,006h,065h,069h db 045h,000h,094h,056h,06dh,098h,09bh,076h db 097h,0fch,0b2h,0c2h,0b0h,0feh,0dbh,020h db 0e1h,0ebh,0d6h,0e4h,0ddh,047h,04ah,01dh db 042h,0edh,09eh,06eh,049h,03ch,0cdh,043h db 027h,0d2h,007h,0d4h,0deh,0c7h,067h,018h db 089h,0cbh,030h,01fh,08dh,0c6h,08fh,0aah db 0c8h,074h,0dch,0c9h,05dh,05ch,031h,0a4h db 070h,088h,061h,02ch,09fh,00dh,02bh,087h db 050h,082h,054h,064h,026h,07dh,003h,040h db 034h,04bh,01ch,073h,0d1h,0c4h,0fdh,03bh db 0cch,0fbh,07fh,0abh,0e6h,03eh,05bh,0a5h db 0adh,004h,023h,09ch,014h,051h,022h,0f0h db 029h,079h,071h,07eh,0ffh,08ch,00eh,0e2h db 00ch,0efh,0bch,072h,075h,06fh,037h,0a1h db 0ech,0d3h,08eh,062h,08bh,086h,010h,0e8h db 008h,077h,011h,0beh,092h,04fh,024h,0c5h db 032h,036h,09dh,0cfh,0f3h,0a6h,0bbh,0ach db 05eh,06ch,0a9h,013h,057h,025h,0b5h,0e3h db 0bdh,0a8h,03ah,001h,005h,059h,02ah,046h ;============================ END OF SKIPJACK =============================== end