;(C)2005 wek http://www.efton.sk ;Free for personal use. ;For commercial use contact wek@efton.sk ;same speed as skipfast but less memory ;places all w1..w4 into registers ; ;see comments in skipfast.a51 ;788 cycles incl. ret ;474h=1140 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 0 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 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 033h,022h,011h,000h,0ddh,0cch,0bbh,0aah ; plaintext db 025h,087h,0cah,0e2h,07ah,012h,0d3h,000h ; ciphertext ; 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 01dh,0dfh,039h,0abh,0f5h,0cdh,071h,01eh ; plaintext db 0c9h,02dh,022h,032h,04ch,06bh,031h,0aeh ; ciphertext db 082h,076h,00ah,0c1h,037h,094h,088h,021h,0eeh,0e4h ; key db 0ddh,06ch,06ch,0ceh,08fh,083h,0e6h,09eh ; plaintext db 0e3h,028h,077h,0c1h,0d9h,052h,07fh,0ffh ; ciphertext db 084h,03ch,016h,087h,0d3h,0cdh,0cah,05fh,0c5h,0c3h ; key db 0beh,0aah,0cfh,017h,07fh,0a4h,01ah,011h ; plaintext db 047h,045h,078h,03fh,075h,0b8h,086h,01ah ; ciphertext db 0aeh,087h,00ch,0d7h,0ffh,033h,0a9h,095h,0f7h,0e5h ; key db 0c4h,0c0h,09fh,021h,06ch,01bh,0c6h,00ah ; plaintext db 05ch,010h,016h,036h,0b8h,0a5h,07ah,072h ; ciphertext db 05ch,0cbh,0d9h,013h,0eah,08bh,073h,0bdh,063h,091h ; key db 0d3h,0f8h,014h,0b0h,000h,024h,058h,056h ; plaintext db 0b4h,0fch,00fh,08eh,054h,072h,08fh,091h ; ciphertext db 0f6h,05eh,074h,0cdh,059h,09ch,068h,0a4h,00ch,0c7h ; key db 035h,06eh,0c7h,0d9h,038h,032h,032h,09ch ; plaintext db 093h,0b7h,050h,060h,08fh,057h,001h,0f8h ; ciphertext db 0aah,010h,06eh,046h,0d7h,008h,07ch,04eh,093h,0dch ; key db 020h,09eh,0cfh,01ch,053h,07ah,0d5h,06ch ; plaintext db 0d8h,023h,0d4h,055h,010h,009h,09eh,061h ; ciphertext db 0a9h,03fh,097h,089h,0a2h,00ch,03ch,0c3h,04fh,0eah ; key db 089h,02eh,0eah,09dh,064h,0e1h,07dh,066h ; plaintext db 009h,059h,0e2h,031h,0b2h,075h,0d9h,05fh ; ciphertext db 088h,0b1h,063h,0cbh,0d6h,016h,016h,088h,088h,099h ; key db 099h,013h,090h,0fdh,076h,00fh,0c9h,01bh ; plaintext db 0e7h,070h,002h,009h,088h,067h,067h,0aeh ; ciphertext db 0fbh,06ch,0d1h,0ffh,070h,048h,075h,061h,0dfh,010h ; key db 0dah,0ebh,0c9h,047h,0ddh,0cah,09ch,09eh ; plaintext db 0e7h,0cch,049h,0a5h,06bh,0d6h,0a3h,022h ; ciphertext db 05eh,0dch,01ah,0c0h,0c4h,0e7h,0efh,05fh,000h,02ch ; key db 064h,019h,0ddh,0efh,0e2h,0cdh,08fh,02eh ; plaintext db 0e4h,08ah,005h,0cfh,026h,0e2h,042h,0fdh ; ciphertext db 08eh,030h,090h,0c1h,09ah,0a3h,02fh,094h,049h,06ah ; key db 032h,029h,098h,0ech,0bdh,006h,081h,012h ; plaintext db 062h,0c0h,0e5h,037h,0b1h,04dh,0f2h,0c1h ; ciphertext db 0b9h,06eh,03fh,0d4h,06fh,0a4h,026h,03fh,090h,092h ; key db 03ah,0aeh,02ah,0eeh,020h,0dah,093h,0cch ; plaintext db 054h,0d1h,0e5h,08ah,06bh,062h,04dh,071h ; ciphertext db 09eh,066h,035h,0bah,0eeh,028h,0c5h,0bch,0e2h,0bch ; key db 014h,031h,011h,012h,0cah,011h,0f7h,027h ; plaintext db 05dh,00fh,023h,05ah,09dh,022h,01ch,0e0h ; ciphertext db 004h,012h,07ch,0e1h,06dh,0c1h,0b1h,072h,06ah,066h ; key db 030h,00eh,043h,013h,0e7h,0adh,067h,096h ; plaintext db 08eh,05bh,003h,052h,02eh,068h,0cbh,0ebh ; ciphertext db 0f0h,0b8h,09dh,075h,0e9h,079h,0cch,0c9h,0b1h,072h ; key db 009h,0cdh,01ch,01ah,0cch,0beh,077h,097h ; plaintext db 057h,02ch,09bh,040h,025h,0a9h,013h,04bh ; ciphertext db 0f9h,0bfh,0c7h,087h,098h,0cbh,0f1h,0bch,0d4h,0b5h ; key db 031h,0b3h,00ch,0a3h,054h,0afh,03ch,0d8h ; plaintext db 08ch,095h,09ch,090h,047h,089h,0fbh,0dah ; ciphertext db 0f4h,03ah,051h,0b4h,027h,03bh,0deh,027h,0d2h,0b0h ; key db 008h,0c5h,09bh,00dh,0b9h,09eh,0c2h,067h ; plaintext db 0b7h,0d7h,0f5h,0fah,034h,029h,088h,0fbh ; ciphertext db 0cdh,051h,0f0h,0a7h,05ah,0a7h,03ch,048h,0edh,0d2h ; key db 097h,084h,0b1h,0e3h,0e7h,0e6h,00eh,060h ; plaintext db 076h,03ah,0a8h,0eeh,010h,093h,097h,0b3h ; ciphertext db 0b3h,031h,09ah,03fh,066h,022h,0aah,072h,06bh,0b3h ; key db 0f6h,052h,016h,037h,03dh,04bh,043h,0c7h ; plaintext db 003h,025h,060h,003h,037h,0b8h,0adh,03ch ; ciphertext db 049h,032h,054h,0c9h,059h,06eh,099h,03fh,05fh,09ch ; key db 0cbh,0a4h,0c1h,021h,05dh,05dh,036h,0ceh ; plaintext db 068h,0e1h,0c5h,051h,0c5h,091h,008h,0c0h ; ciphertext db 076h,015h,00ch,02ch,03ch,0edh,01ch,07ch,0a0h,021h ; key db 082h,029h,048h,051h,028h,08eh,075h,0cbh ; plaintext db 07eh,0b6h,032h,05dh,082h,0a2h,009h,06ch ; ciphertext db 071h,040h,0d6h,0c5h,048h,063h,005h,087h,02dh,0f6h ; key db 0c3h,0a7h,0b7h,0e4h,0a5h,02eh,040h,07bh ; plaintext db 024h,083h,0f3h,085h,0a4h,02eh,0e3h,0c6h ; ciphertext db 03ch,02ch,039h,001h,0f0h,0eeh,09ah,03bh,02bh,00eh ; key db 01bh,0fdh,0e3h,02ah,0b5h,059h,0e1h,03ah ; plaintext db 0d6h,0fah,09dh,0b8h,068h,05fh,0d8h,08ah ; ciphertext db 060h,06ah,08bh,04bh,0dfh,0aah,0e8h,0a0h,0bah,051h ; key db 0d2h,005h,0f7h,048h,06ch,078h,028h,038h ; plaintext db 003h,030h,048h,091h,070h,0b8h,052h,093h ; ciphertext db 078h,047h,0a4h,07ah,00fh,0e7h,09ah,0b7h,070h,0ceh ; key db 0d9h,06fh,0f1h,0f7h,0c7h,0fch,060h,0e0h ; plaintext db 01fh,09bh,033h,001h,0c9h,0b2h,070h,08ch ; ciphertext db 073h,0b9h,0abh,00ch,036h,0c9h,09eh,091h,0a8h,091h ; key db 024h,01dh,04bh,0deh,019h,0a7h,05fh,08fh ; plaintext db 02bh,086h,0c5h,07fh,0feh,016h,088h,095h ; ciphertext db 0a3h,07fh,02ah,0d5h,0a8h,05eh,017h,007h,041h,0f5h ; key db 07bh,0e1h,0b8h,0d5h,083h,021h,0c6h,019h ; plaintext db 05ah,0f7h,0ceh,0b3h,0eeh,0d9h,0dch,0a1h ; ciphertext db 0f7h,0b0h,0c2h,0a8h,017h,00eh,03ch,04eh,048h,0b3h ; key db 0c9h,021h,04eh,0a0h,01eh,0c1h,049h,048h ; plaintext db 01bh,058h,077h,036h,0e1h,016h,0c0h,04bh ; ciphertext db 0a1h,0fch,067h,0e4h,04eh,0ach,0ach,0f4h,0a9h,002h ; key db 0e2h,0a3h,009h,01fh,0ebh,058h,015h,088h ; plaintext db 0f3h,0ech,0f0h,0f1h,078h,09ah,039h,023h ; ciphertext db 0f1h,044h,030h,0afh,0fch,05fh,0e8h,02ah,09ah,0e9h ; key db 03ch,0b4h,066h,0d3h,001h,0b6h,008h,054h ; plaintext db 0e8h,0d1h,014h,0c2h,00fh,0fah,01ch,079h ; ciphertext db 0fdh,026h,0dfh,050h,048h,06ah,04ch,0d9h,06dh,09bh ; key db 0b0h,068h,04fh,08ah,05eh,063h,0d9h,035h ; plaintext db 022h,029h,003h,099h,04dh,064h,0feh,03ah ; ciphertext db 0a6h,0d4h,06dh,046h,0cah,028h,07eh,01ah,033h,02ah ; key db 0bah,01fh,037h,0e8h,08eh,0deh,0c5h,05fh ; plaintext db 091h,0f2h,0bah,0adh,06fh,0a0h,0deh,055h ; ciphertext db 083h,0c3h,0f1h,0cbh,08dh,006h,0efh,0c6h,019h,06bh ; key db 0e9h,0feh,0d8h,050h,01bh,07ah,065h,079h ; plaintext db 083h,0f9h,0f0h,08fh,089h,0a8h,054h,0eeh ; ciphertext db 00eh,0dfh,0a4h,04ch,07dh,04ah,04eh,0f0h,072h,05eh ; key db 0ebh,05ch,0a8h,0b3h,0fah,01fh,0cdh,0bbh ; plaintext db 02bh,01bh,066h,070h,0a6h,0beh,003h,024h ; ciphertext db 0b8h,0edh,0cfh,016h,07dh,099h,0a7h,011h,0cch,0eeh ; key db 0b8h,0b5h,025h,0c6h,038h,02ah,0f2h,077h ; plaintext db 021h,01ah,069h,05dh,0a4h,073h,076h,06fh ; ciphertext db 04fh,063h,09eh,00dh,05ah,05dh,02ah,0d7h,0e9h,0a4h ; key db 091h,062h,0e7h,081h,0ffh,068h,038h,053h ; plaintext db 0ebh,029h,076h,037h,00dh,022h,0efh,022h ; ciphertext db 037h,0e0h,006h,025h,06ah,04ah,0e6h,0d3h,020h,0c4h ; key db 0c9h,0f2h,03ah,020h,0a3h,09dh,0edh,011h ; plaintext db 0dbh,0a4h,0c0h,0efh,00eh,0a0h,098h,0c0h ; ciphertext db 0e4h,01dh,00bh,0d2h,05fh,093h,01bh,0a1h,0d8h,05ch ; key db 05ah,06fh,012h,0f3h,02fh,07eh,0efh,0dfh ; plaintext db 092h,03dh,0aeh,0e8h,000h,007h,009h,0f9h ; ciphertext db 0fdh,0f6h,05bh,0bch,05fh,0e6h,000h,0f3h,0cdh,068h ; key db 0cah,0d5h,041h,04ch,01ch,064h,0f1h,094h ; plaintext db 0d5h,077h,01eh,078h,0b6h,0f1h,0feh,01eh ; ciphertext db 01ch,026h,09ah,0f2h,0ffh,016h,06ah,0cbh,027h,0efh ; key db 006h,03ah,058h,0a2h,00bh,045h,037h,08fh ; plaintext db 063h,04fh,07ah,038h,061h,0afh,097h,0a1h ; ciphertext db 011h,079h,0f6h,04ah,0cbh,061h,022h,0cch,0f6h,049h ; key db 008h,0fbh,0f4h,02bh,043h,013h,034h,07bh ; plaintext db 03ah,080h,03ah,04bh,0d0h,0e8h,0c3h,0e6h ; ciphertext db 007h,08ch,087h,026h,05eh,0b8h,0dah,032h,03eh,090h ; key db 06dh,04eh,0d0h,0e9h,093h,005h,032h,0d1h ; plaintext db 0f4h,0fah,037h,02eh,07eh,014h,041h,0a1h ; ciphertext db 02fh,0ffh,035h,0f8h,0ebh,077h,04ch,084h,03bh,0b0h ; key db 040h,0b6h,099h,081h,023h,045h,066h,01dh ; plaintext db 063h,0a9h,019h,07fh,07bh,075h,0f5h,03fh ; ciphertext db 009h,0f7h,073h,046h,0a4h,039h,03ch,0e9h,098h,056h ; key db 022h,0edh,054h,062h,06ah,051h,0e5h,005h ; plaintext db 0e9h,01ah,005h,00ah,074h,081h,0b3h,0ddh ; ciphertext db 05bh,087h,08eh,00bh,022h,0a7h,005h,0ach,0f8h,0fbh ; key db 00ch,048h,09bh,066h,0e2h,0dah,053h,01bh ; plaintext db 06eh,093h,070h,0a9h,01bh,099h,048h,078h ; ciphertext db 09dh,072h,0c1h,0abh,020h,092h,0c1h,0b1h,008h,077h ; key db 0c6h,04bh,010h,0f8h,0b1h,091h,0bch,02ch ; plaintext db 05bh,0deh,0cdh,0edh,096h,0d6h,056h,0c9h ; ciphertext db 072h,086h,05fh,028h,097h,025h,0e1h,0b5h,055h,002h ; key db 091h,0fdh,0f7h,023h,06fh,085h,0bdh,0d6h ; plaintext db 01ah,056h,080h,0e5h,017h,036h,002h,06fh ; ciphertext db 006h,0e3h,0c0h,0e5h,041h,0f4h,0aah,0e6h,0feh,093h ; key db 040h,000h,09fh,08ah,046h,05ah,09fh,0ebh ; plaintext db 00eh,07ah,0ach,0e4h,021h,0bch,079h,0d8h ; ciphertext db 02eh,0a0h,09fh,01ch,0c8h,09eh,006h,04fh,009h,0bch ; key db 054h,032h,008h,0b0h,05bh,0fah,038h,058h ; plaintext db 0a9h,05dh,087h,0fah,0d1h,02ch,035h,093h ; ciphertext TestVectorEnd: ;=============================== SKIPJACK =================================== SkipJack: mov dptr,#FTable ;start 8x with rule A mov a,r0 xrl a,key+0 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+2 movc a,@a+dptr xrl a,r1 mov r1,a xrl ar7,a xrl a,key+3 movc a,@a+dptr xrl a,r0 mov r0,a xrl a,r6 xrl a,#1 mov r6,a ; mov a,r6 ; r0 r2 r4 r6 xrl a,key+4 ;acts as r2 r4 r6 r0 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+6 movc a,@a+dptr xrl a,r7 mov r7,a xrl ar5,a xrl a,key+7 movc a,@a+dptr xrl a,r6 mov r6,a xrl a,r4 xrl a,#2 mov r4,a ; mov a,r4 ; r0 r2 r4 r6 xrl a,key+8 ;acts as r4 r6 r0 r2 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+0 movc a,@a+dptr xrl a,r5 mov r5,a xrl ar3,a xrl a,key+1 movc a,@a+dptr xrl a,r4 mov r4,a xrl a,r2 xrl a,#3 mov r2,a ; mov a,r2 ; r0 r2 r4 r6 xrl a,key+2 ;acts as r6 r0 r2 r4 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+4 movc a,@a+dptr xrl a,r3 mov r3,a xrl ar1,a xrl a,key+5 movc a,@a+dptr xrl a,r2 mov r2,a xrl a,r0 xrl a,#4 mov r0,a ; mov a,r0 xrl a,key+6 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+8 movc a,@a+dptr xrl a,r1 mov r1,a xrl ar7,a xrl a,key+9 movc a,@a+dptr xrl a,r0 mov r0,a xrl a,r6 xrl a,#5 mov r6,a ; mov a,r6 ; r0 r2 r4 r6 xrl a,key+0 ;acts as r2 r4 r6 r0 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+2 movc a,@a+dptr xrl a,r7 mov r7,a xrl ar5,a xrl a,key+3 movc a,@a+dptr xrl a,r6 mov r6,a xrl a,r4 xrl a,#6 mov r4,a ; mov a,r4 ; r0 r2 r4 r6 xrl a,key+4 ;acts as r4 r6 r0 r2 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+6 movc a,@a+dptr xrl a,r5 mov r5,a xrl ar3,a xrl a,key+7 movc a,@a+dptr xrl a,r4 mov r4,a xrl a,r2 xrl a,#7 mov r2,a ; mov a,r2 ; r0 r2 r4 r6 xrl a,key+8 ;acts as r6 r0 r2 r4 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+0 movc a,@a+dptr xrl a,r3 mov r3,a xrl ar1,a xrl a,key+1 movc a,@a+dptr xrl a,r2 mov r2,a xrl a,r0 xrl a,#8 mov r0,a ;now switch to B rule ; mov a,r0 xrl ar2,a xrl ar2,#9 xrl a,key+2 movc a,@a+dptr xch a,r1 xrl ar3,a xrl a,r1 mov r1,a xrl a,key+3 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+5 movc a,@a+dptr xrl ar0,a mov a,r6 xrl ar0,a xrl ar0,#10 xrl a,key+6 movc a,@a+dptr xch a,r7 xrl ar1,a xrl a,r7 mov r7,a xrl a,key+7 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+9 movc a,@a+dptr xrl ar6,a mov a,r4 xrl ar6,a xrl ar6,#11 xrl a,key+0 movc a,@a+dptr xch a,r5 xrl ar7,a xrl a,r5 mov r5,a xrl a,key+1 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+3 movc a,@a+dptr xrl ar4,a mov a,r2 xrl ar4,a xrl ar4,#12 xrl a,key+4 movc a,@a+dptr xch a,r3 xrl ar5,a xrl a,r3 mov r3,a xrl a,key+5 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+7 movc a,@a+dptr xrl ar2,a mov a,r0 xrl ar2,a xrl ar2,#13 xrl a,key+8 movc a,@a+dptr xch a,r1 xrl ar3,a xrl a,r1 mov r1,a xrl a,key+9 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+1 movc a,@a+dptr xrl ar0,a mov a,r6 xrl ar0,a xrl ar0,#14 xrl a,key+2 movc a,@a+dptr xch a,r7 xrl ar1,a xrl a,r7 mov r7,a xrl a,key+3 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+5 movc a,@a+dptr xrl ar6,a mov a,r4 xrl ar6,a xrl ar6,#15 xrl a,key+6 movc a,@a+dptr xch a,r5 xrl ar7,a xrl a,r5 mov r5,a xrl a,key+7 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+9 movc a,@a+dptr xrl ar4,a mov a,r2 xrl ar4,a xrl ar4,#16 xrl a,key+0 movc a,@a+dptr xch a,r3 xrl ar5,a xrl a,r3 mov r3,a xrl a,key+1 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+3 movc a,@a+dptr xrl ar2,a ;now back to rule A mov a,r0 xrl a,key+4 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+6 movc a,@a+dptr xrl a,r1 mov r1,a xrl ar7,a xrl a,key+7 movc a,@a+dptr xrl a,r0 mov r0,a xrl a,r6 xrl a,#17 mov r6,a ; mov a,r6 ; r0 r2 r4 r6 xrl a,key+8 ;acts as r2 r4 r6 r0 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+0 movc a,@a+dptr xrl a,r7 mov r7,a xrl ar5,a xrl a,key+1 movc a,@a+dptr xrl a,r6 mov r6,a xrl a,r4 xrl a,#18 mov r4,a ; mov a,r4 ; r0 r2 r4 r6 xrl a,key+2 ;acts as r4 r6 r0 r2 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+4 movc a,@a+dptr xrl a,r5 mov r5,a xrl ar3,a xrl a,key+5 movc a,@a+dptr xrl a,r4 mov r4,a xrl a,r2 xrl a,#19 mov r2,a ; mov a,r2 ; r0 r2 r4 r6 xrl a,key+6 ;acts as r6 r0 r2 r4 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+8 movc a,@a+dptr xrl a,r3 mov r3,a xrl ar1,a xrl a,key+9 movc a,@a+dptr xrl a,r2 mov r2,a xrl a,r0 xrl a,#20 mov r0,a ; mov a,r0 xrl a,key+0 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+2 movc a,@a+dptr xrl a,r1 mov r1,a xrl ar7,a xrl a,key+3 movc a,@a+dptr xrl a,r0 mov r0,a xrl a,r6 xrl a,#21 mov r6,a ; mov a,r6 ; r0 r2 r4 r6 xrl a,key+4 ;acts as r2 r4 r6 r0 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+6 movc a,@a+dptr xrl a,r7 mov r7,a xrl ar5,a xrl a,key+7 movc a,@a+dptr xrl a,r6 mov r6,a xrl a,r4 xrl a,#22 mov r4,a ; mov a,r4 ; r0 r2 r4 r6 xrl a,key+8 ;acts as r4 r6 r0 r2 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+0 movc a,@a+dptr xrl a,r5 mov r5,a xrl ar3,a xrl a,key+1 movc a,@a+dptr xrl a,r4 mov r4,a xrl a,r2 xrl a,#23 mov r2,a ; mov a,r2 ; r0 r2 r4 r6 xrl a,key+2 ;acts as r6 r0 r2 r4 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+4 movc a,@a+dptr xrl a,r3 mov r3,a xrl ar1,a xrl a,key+5 movc a,@a+dptr xrl a,r2 mov r2,a xrl a,r0 xrl a,#24 mov r0,a ;now switch to B rule ; mov a,r0 xrl ar2,a xrl ar2,#25 xrl a,key+6 movc a,@a+dptr xch a,r1 xrl ar3,a xrl a,r1 mov r1,a xrl a,key+7 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+9 movc a,@a+dptr xrl ar0,a mov a,r6 xrl ar0,a xrl ar0,#26 xrl a,key+0 movc a,@a+dptr xch a,r7 xrl ar1,a xrl a,r7 mov r7,a xrl a,key+1 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+3 movc a,@a+dptr xrl ar6,a mov a,r4 xrl ar6,a xrl ar6,#27 xrl a,key+4 movc a,@a+dptr xch a,r5 xrl ar7,a xrl a,r5 mov r5,a xrl a,key+5 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+7 movc a,@a+dptr xrl ar4,a mov a,r2 xrl ar4,a xrl ar4,#28 xrl a,key+8 movc a,@a+dptr xch a,r3 xrl ar5,a xrl a,r3 mov r3,a xrl a,key+9 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+1 movc a,@a+dptr xrl ar2,a mov a,r0 xrl ar2,a xrl ar2,#29 xrl a,key+2 movc a,@a+dptr xch a,r1 xrl ar3,a xrl a,r1 mov r1,a xrl a,key+3 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+5 movc a,@a+dptr xrl ar0,a mov a,r6 xrl ar0,a xrl ar0,#30 xrl a,key+6 movc a,@a+dptr xch a,r7 xrl ar1,a xrl a,r7 mov r7,a xrl a,key+7 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+9 movc a,@a+dptr xrl ar6,a mov a,r4 xrl ar6,a xrl ar6,#31 xrl a,key+0 movc a,@a+dptr xch a,r5 xrl ar7,a xrl a,r5 mov r5,a xrl a,key+1 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+3 movc a,@a+dptr xrl ar4,a mov a,r2 xrl ar4,a xrl ar4,#32 xrl a,key+4 movc a,@a+dptr xch a,r3 xrl ar5,a xrl a,r3 mov r3,a xrl a,key+5 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+7 movc a,@a+dptr xrl ar2,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