.section .ikea FLEN: db 65 paX: db 23 BLKSZ: db 12 b00ts: db 47 c5d: db 225,204,82,249,67,214,139,164,154,116,172,47,62,84,45,3,47,104,35,84,93,44,34,6,25,163,30,206,78,117,5,225,233,23,152,55,146,238,226,49,74,173,199,34,15,78,84,81,161,96,220,110,128,201,46,27,123,41,191,6,123,58,89,119,69 kallax: db 3,0,0,2,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,1,0,0 billy: db 166,241,180,132,190,47,251,88,10,46,127,195,92,216,151,226,103,173,3,218,0,14,199,119,228,111,214,104,131,252,134,152,225,52,39,60,56,179,4,144,24,203,233,156,167,91,146,254,73,27,187,123,113,40,83,41,1,81,22,202,201,176,100,158,87,50,128,182,84,209,55,240,20,62,51,184,75,220,175,192,12,172,5,204,61,186,30,154,255,101,213,208,67,145,23,36,170,141,108,212,181,193,82,37,74,211,109,155,168,221,138,207,121,130,198,9,188,164,124,249,217,157,110,139,210,229,8,116,93,6,178,29,70,2,129,53,183,197,99,95,38,244,65,125,85,49,194,94,11,219,148,215,115,223,26,140,44,245,19,15,248,86,7,205,253,171,160,169,246,105,191,54,243,239,238,79,13,242,143,72,68,25,227,97,34,31,161,196,32,147,126,78,71,57,159,137,114,42,230,250,117,106,59,17,133,98,16,177,136,90,232,174,80,206,185,234,107,76,35,162,237,58,200,163,89,77,222,142,102,21,189,122,48,224,165,69,64,247,149,66,18,236,153,135,96,33,28,235,231,150,120,118,112,63,45,43,177,88,7,134,38,179,127,126,41,20,25,233,37,141,82,124,215,206,128,237,239,19,227,180,83,248,249,165,57,228,232,161,94,6,192,142,64,200,77,42,132,4,221,153,65,48,238,135,89,27,70,122,13,210,16,155,160,119,17,240,242,188,251,51,107,22,208,162,197,230,39,229,146,157,168,76,67,105,49,213,96,241,109,104,87,125,68,44,66,140,26,136,143,203,245,211,183,10,193,43,100,172,171,28,85,98,226,151,73,236,91,40,198,110,219,114,117,111,23,60,101,244,62,0,47,186,175,174,191,167,52,148,189,173,61,194,250,231,130,54,50,187,93,185,9,218,255,214,149,106,32,145,71,31,209,202,29,154,118,190,201,56,12,204,84,5,115,246,58,14,166,103,235,170,147,247,53,196,2,99,3,92,199,150,97,46,30,131,35,176,81,78,222,133,59,18,178,253,79,182,123,75,217,163,137,113,223,95,21,252,63,195,158,121,36,34,205,184,224,129,102,11,8,243,225,159,254,33,181,112,90,74,216,138,120,80,24,1,220,156,139,72,55,207,164,86,69,234,169,144,108,15,212,152,116,45,58,14,250,180,0,171,247,215,46,166,50,118,73,231,33,7,223,79,242,113,61,88,177,2,147,202,18,15,167,152,101,27,183,220,158,30,224,128,153,198,187,6,178,22,34,232,210,5,191,219,110,226,244,9,117,45,248,245,8,71,161,124,205,105,69,92,241,132,246,81,51,142,20,37,172,208,160,75,62,53,42,13,236,193,80,144,181,151,155,235,170,141,59,189,41,148,87,233,197,109,123,253,206,19,86,126,188,254,195,182,133,100,130,55,116,201,4,112,131,225,96,125,114,60,176,194,149,21,211,156,200,134,216,240,111,28,243,140,68,255,237,3,102,10,64,207,238,12,67,32,29,99,239,162,164,174,120,115,90,190,230,184,89,228,78,221,36,107,52,157,95,17,108,74,234,145,185,54,154,229,76,251,94,23,218,137,204,26,136,70,222,186,165,91,39,179,173,163,85,66,24,168,150,72,47,199,139,119,217,169,122,82,40,214,213,175,252,56,209,146,63,57,11,138,127,104,31,1,159,97,83,249,196,106,48,43,227,143,98,16,212,135,121,84,44,35,203,129,93,38,25,192,103,77,65,49,255,148,204,174,252,10,233,164,253,76,113,9,187,33,51,20,87,196,59,193,27,221,116,40,107,37,69,38,172,129,56,72,194,119,142,203,168,224,120,133,156,247,195,166,143,70,241,126,118,90,191,186,235,234,104,100,210,34,207,152,246,208,229,109,64,57,190,160,44,140,132,139,28,62,79,92,182,167,19,202,238,60,111,228,213,163,189,237,14,135,13,58,15,150,81,48,42,226,93,211,236,21,157,217,250,231,24,185,68,7,198,225,138,219,192,249,171,105,242,26,106,77,197,95,200,245,180,201,179,43,88,244,136,147,6,121,39,153,223,36,146,232,144,89,161,251,218,178,181,215,12,78,22,230,176,159,169,99,80,17,206,35,114,66,212,173,85,53,52,222,127,31,125,103,82,243,71,8,155,83,29,0,108,254,18,154,84,177,115,94,214,101,46,188,102,73,1,170,97,5,151,134,98,45,4,131,91,65,54,32,16,205,141,49,220,158,137,124,112,23,2,209,130,67,199,122,227,41,11,184,96,47,183,149,239,110,25,175,145,123,50,30,240,165,74,55,3,216,128,117,63,248,162,86,75,61,144,192,167,72,80,203,160,78,18,82,208,212,222,235,228,84,161,12,5,73,132,239,89,252,56,21,233,102,187,231,36,2,74,246,39,85,1,130,110,0,97,226,240,156,254,151,47,31,205,137,150,224,64,79,206,123,75,159,202,111,214,183,193,220,67,140,55,3,182,93,136,200,135,127,117,145,17,8,204,34,38,115,100,255,114,26,43,249,68,46,25,186,44,19,91,210,42,32,185,81,7,52,165,90,71,178,147,27,195,98,124,134,216,163,177,45,103,62,170,173,108,139,146,232,10,229,121,131,16,191,94,237,190,181,245,171,230,57,172,247,122,107,154,168,169,213,217,209,238,241,201,194,225,95,158,20,133,86,40,128,125,179,50,157,242,142,243,129,174,218,223,116,54,37,175,118,99,24,13,104,23,164,120,184,119,66,180,87,77,253,244,251,101,88,83,215,29,248,152,59,198,166,92,69,48,4,143,138,76,30,176,250,65,49,211,199,221,109,227,22,162,113,41,11,219,148,96,58,197,149,61,15,196,141,70,35,9,188,153,105,33,6,234,207,155,126,51,28,236,189,112,106,63,60,53,14,133,211,196,173,138,240,254,105,34,251,116,151,242,225,122,106,127,120,33,36,40,56,130,156,252,207,29,219,227,100,149,46,186,176,70,51,200,101,230,136,109,67,243,21,234,134,93,50,150,64,74,19,24,141,155,168,241,25,18,16,171,175,121,201,245,255,187,115,82,3,226,107,43,154,124,42,145,52,32,182,91,157,62,237,76,75,220,1,45,85,218,193,54,2,35,253,90,163,58,113,28,203,167,98,4,162,152,189,87,217,146,123,49,89,0,41,192,13,214,61,9,47,205,222,147,38,231,246,199,174,39,129,232,114,135,92,83,55,14,185,238,224,102,161,78,53,216,159,190,65,131,165,139,80,158,81,212,63,140,79,30,26,143,233,248,71,249,22,247,77,180,166,179,197,236,223,244,66,6,125,183,170,137,213,160,86,250,195,119,27,12,208,210,37,177,169,97,48,228,215,112,110,84,59,5,209,221,10,229,144,103,11,153,72,198,164,118,69,7,191,132,104,23,172,148,96,17,202,194,184,88,20,188,126,73,235,204,108,60,31,15,8,178,128,94,44,206,111,95,68,239,181,142,117,99,57 .section .bss.shuffled IN: rb 65 CAND: rb 65 BLK: rb 12 RND: rb 12 SA: rb 97 SB: rb 89 SP: rb 97 KA: rb 2 KB: rb 2 PK: rb 2 DUMMY: rb 64 SF: rb 61 PASS: rb 1 .section .text mov PASS, 0 mov sumct, 0 mov term, 0 mov i, 0 precs_i: cmp i, FLEN jl tradfi jmp tradfine tradfi: load t0, c5d[i] add sumct, t0 add sumct, term add term, paX add i, 1 jmp precs_i tradfine: mod sumct, 256 mov chk, sumct xor chk, b00ts cmp 0, chk jl union_work jmp checkin union_work: mov i, 0 fw_init: mov t1, i mod t1, 61 store SF[i], t1 add i, 1 cmp i, 61 jl fw_init mov z, paX xor z, paX mov i, 0 fw_i: cmp i, 64 jl fw_do jmp checkin fw_do: load d, DUMMY[i] xor d, z store DUMMY[i], d add i, 1 jmp fw_i checkin: mov offset, 0 mov bidx, 0 blk_check: cmp offset, FLEN jl do_block jmp compare do_block: mov lenb, 0 mov i, 0 drucker0: cmp i, BLKSZ jl cc_check_flen jmp cc_done cc_check_flen: mov t1, offset add t1, i cmp t1, FLEN jl cc_copy jmp cc_done cc_copy: add lenb, 1 add i, 1 jmp drucker0 cc_done: mov i, 0 blk_copy: cmp i, lenb jl blk_copy_do jmp stackfault blk_copy_do: mov t1, offset add t1, i load t2, IN[t1] store BLK[i], t2 add i, 1 jmp blk_copy stackfault: mov flags, paX mov t3, bidx add t3, bidx add t3, bidx add flags, t3 add flags, 0x5A mov t4, flags mod t4, 2 mov use_billy, t4 mov t5, flags mod t5, 4 mov use_roll, 0 cmp 1, t5 jl set_roll jmp steuerfahndung set_roll: mov use_roll, 1 steuerfahndung: mov billy_id, paX mov t6, bidx add t6, bidx add t6, bidx add billy_id, t6 mod billy_id, 32 load billy_idx, kallax[billy_id] mov t0, 0 mov i7, 0 ka_i7: cmp i7, 7 jl selfservice jmp r8none7 selfservice: add t0, bidx add i7, 1 jmp ka_i7 r8none7: mov t0b, paX add t0b, t0 add t0b, 11 store KA[0], t0b mov t1b, paX xor t1b, 0xA5 store KA[1], t1b mov t2b, 0 mov i9, 0 kb_i9: cmp i9, 9 jl kb_add jmp kb_done9 kb_add: add t2b, bidx add i9, 1 jmp kb_i9 kb_done9: mov t2b2, paX add t2b2, t2b add t2b2, 23 store KB[0], t2b2 mov t3b, paX add t3b, paX add t3b, paX add t3b, paX add t3b, paX add t3b, 0x3D store KB[1], t3b mov b13, 0 mov i13, 0 pk_i13: cmp i13, 13 jl pk_add13 jmp pk_done13 pk_add13: add b13, bidx add i13, 1 jmp pk_i13 pk_done13: mov pk0, paX add pk0, b13 add pk0, 57 store PK[0], pk0 mov b17, 0 mov i17, 0 pk_i17: cmp i17, 17 jl pk_add17 jmp pk_done17 pk_add17: add b17, bidx add i17, 1 jmp pk_i17 pk_done17: mov pk1, paX add pk1, b17 add pk1, 91 store PK[1], pk1 mov i, 0 init_SA: mov t0, i store SA[i], t0 add i, 1 cmp i, 97 jl init_SA mov i, 0 mov j, 0 ksa_a: load t0, SA[i] load kbyte, KA[i] add j, t0 add j, kbyte mod j, 97 load t1, SA[j] store SA[j], t0 store SA[i], t1 add i, 1 cmp i, 97 jl ksa_a mov i, 0 init_SB: mov t0, i store SB[i], t0 add i, 1 cmp i, 89 jl init_SB mov i, 0 mov j, 0 cult: load t0, SB[i] load kbyte, KB[i] add j, t0 add j, kbyte mod j, 89 load t1, SB[j] store SB[j], t0 store SB[i], t1 add i, 1 cmp i, 89 jl cult mov i, 0 mov jA, 0 mov iB, 0 mov jB, 0 mov k, 0 prga_mask: cmp k, lenb jl nackt jmp stage_billy nackt: add i, 1 mod i, 97 load t0, SA[i] add jA, t0 mod jA, 97 load t1, SA[jA] store SA[jA], t0 store SA[i], t1 load t2, SA[i] load t3, SA[jA] add t2, t3 mod t2, 97 load kAbyte, SA[t2] add iB, 1 mod iB, 89 load u0, SB[iB] add jB, u0 mod jB, 89 load u1, SB[jB] store SB[jB], u0 store SB[iB], u1 load u2, SB[iB] load u3, SB[jB] add u2, u3 mod u2, 89 load kBbyte, SB[u2] load x, BLK[k] xor x, kAbyte xor x, kBbyte store BLK[k], x add k, 1 jmp prga_mask stage_billy: cmp 0, use_billy jl do_billy jmp tombola do_billy: mov base, 0 mov i, 0 knut: cmp i, billy_idx jl knut_add jmp billy_i knut_add: add base, 256 add i, 1 jmp knut billy_i: mov i, 0 billy_do: cmp i, lenb jl billy_apply jmp tombola billy_apply: load byte, BLK[i] mov t0, base add t0, byte load t1, billy[t0] store BLK[i], t1 add i, 1 jmp billy_do tombola: cmp 0, use_roll jl do_roll jmp stage_perm do_roll: mov acc, paX mov t0, bidx add t0, bidx add t0, bidx add acc, t0 add acc, 17 mov step, paX mov t5b, bidx add t5b, bidx add t5b, bidx add t5b, bidx add t5b, bidx add step, t5b add step, 1 mov i, 0 roll_i: cmp i, lenb jl imbus jmp stage_perm imbus: load x, BLK[i] mov y, x xor y, acc store BLK[i], y add acc, x add acc, step mod acc, 256 add i, 1 jmp roll_i stage_perm: mov i, 0 init_SP: mov t0, i store SP[i], t0 add i, 1 cmp i, 97 jl init_SP mov i, 0 mov j, 0 ksa_sp: load t0, SP[i] load kbyte, PK[i] add j, t0 add j, kbyte mod j, 97 load t1, SP[j] store SP[j], t0 store SP[i], t1 add i, 1 cmp i, 97 jl ksa_sp mov i, 0 mov j, 0 mov k, 0 prga_sp: cmp k, lenb jl prga_sp_do jmp permute prga_sp_do: add i, 1 mod i, 97 load t0, SP[i] add j, t0 mod j, 97 load t1, SP[j] store SP[j], t0 store SP[i], t1 load t2, SP[i] load t3, SP[j] add t2, t3 mod t2, 97 load t4, SP[t2] store RND[k], t4 add k, 1 jmp prga_sp permute: mov idx, lenb perm_i: add idx, -1 cmp 0, idx jl BADRING jmp store_block BADRING: load t0, RND[idx] mov t1, idx add t1, 1 mod t0, t1 load a, BLK[idx] load b, BLK[t0] store BLK[idx], b store BLK[t0], a jmp perm_i store_block: mov i, 0 wb_i: cmp i, lenb jl wb_do jmp hotdogs wb_do: mov t1, offset add t1, i load t2, BLK[i] store CAND[t1], t2 add i, 1 jmp wb_i hotdogs: add offset, lenb add bidx, 1 jmp blk_check compare: mov i, 0 cmp_i: cmp i, FLEN jl cmp_do jmp ingrid cmp_do: load a, CAND[i] load b, c5d[i] cmp a, b jl fail cmp b, a jl fail add i, 1 jmp cmp_i ingrid: mov PASS, 1 jmp done fail: mov PASS, 0 mov z2, paX xor z2, paX mov pass2, 0 pn_outer: cmp pass2, 2 jl pn_begin jmp done pn_begin: mov i, 0 pn_i: cmp i, FLEN jl pn_do add pass2, 1 jmp pn_outer pn_do: load v, CAND[i] xor v, z2 store CAND[i], v add i, 1 jmp pn_i done: halt