1 1.1.1.2 christos ! Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved. 2 1.1 christos ! 3 1.1.1.2 christos ! Licensed under the OpenSSL license (the "License"). You may not use 4 1.1.1.2 christos ! this file except in compliance with the License. You can obtain a copy 5 1.1.1.2 christos ! in the file LICENSE in the source distribution or at 6 1.1.1.2 christos ! https://www.openssl.org/source/license.html 7 1.1 christos ! 8 1.1 christos ! To expand the m4 macros: m4 -B 8192 des_enc.m4 > des_enc.S 9 1.1 christos ! 10 1.1 christos ! Global registers 1 to 5 are used. This is the same as done by the 11 1.1 christos ! cc compiler. The UltraSPARC load/store little endian feature is used. 12 1.1 christos ! 13 1.1 christos ! Instruction grouping often refers to one CPU cycle. 14 1.1 christos ! 15 1.1 christos ! Assemble through gcc: gcc -c -mcpu=ultrasparc -o des_enc.o des_enc.S 16 1.1 christos ! 17 1.1 christos ! Assemble through cc: cc -c -xarch=v8plusa -o des_enc.o des_enc.S 18 1.1 christos ! 19 1.1 christos ! Performance improvement according to './apps/openssl speed des' 20 1.1 christos ! 21 1.1 christos ! 32-bit build: 22 1.1 christos ! 23% faster than cc-5.2 -xarch=v8plus -xO5 23 1.1 christos ! 115% faster than gcc-3.2.1 -m32 -mcpu=ultrasparc -O5 24 1.1 christos ! 64-bit build: 25 1.1 christos ! 50% faster than cc-5.2 -xarch=v9 -xO5 26 1.1 christos ! 100% faster than gcc-3.2.1 -m64 -mcpu=ultrasparc -O5 27 1.1 christos ! 28 1.1 christos 29 1.1 christos .ident "des_enc.m4 2.1" 30 1.1 christos .file "des_enc-sparc.S" 31 1.1 christos 32 1.1 christos #include <openssl/opensslconf.h> 33 1.1 christos 34 1.1 christos #if defined(__SUNPRO_C) && defined(__sparcv9) 35 1.1 christos # define ABI64 /* They've said -xarch=v9 at command line */ 36 1.1 christos #elif defined(__GNUC__) && defined(__arch64__) 37 1.1 christos # define ABI64 /* They've said -m64 at command line */ 38 1.1 christos #endif 39 1.1 christos 40 1.1 christos #ifdef ABI64 41 1.1 christos .register %g2,#scratch 42 1.1 christos .register %g3,#scratch 43 1.1 christos # define FRAME -192 44 1.1 christos # define BIAS 2047 45 1.1 christos # define LDPTR ldx 46 1.1 christos # define STPTR stx 47 1.1 christos # define ARG0 128 48 1.1 christos # define ARGSZ 8 49 1.1 christos #else 50 1.1 christos # define FRAME -96 51 1.1 christos # define BIAS 0 52 1.1 christos # define LDPTR ld 53 1.1 christos # define STPTR st 54 1.1 christos # define ARG0 68 55 1.1 christos # define ARGSZ 4 56 1.1 christos #endif 57 1.1 christos 58 1.1 christos #define LOOPS 7 59 1.1 christos 60 1.1 christos #define global0 %g0 61 1.1 christos #define global1 %g1 62 1.1 christos #define global2 %g2 63 1.1 christos #define global3 %g3 64 1.1 christos #define global4 %g4 65 1.1 christos #define global5 %g5 66 1.1 christos 67 1.1 christos #define local0 %l0 68 1.1 christos #define local1 %l1 69 1.1 christos #define local2 %l2 70 1.1 christos #define local3 %l3 71 1.1 christos #define local4 %l4 72 1.1 christos #define local5 %l5 73 1.1 christos #define local7 %l6 74 1.1 christos #define local6 %l7 75 1.1 christos 76 1.1 christos #define in0 %i0 77 1.1 christos #define in1 %i1 78 1.1 christos #define in2 %i2 79 1.1 christos #define in3 %i3 80 1.1 christos #define in4 %i4 81 1.1 christos #define in5 %i5 82 1.1 christos #define in6 %i6 83 1.1 christos #define in7 %i7 84 1.1 christos 85 1.1 christos #define out0 %o0 86 1.1 christos #define out1 %o1 87 1.1 christos #define out2 %o2 88 1.1 christos #define out3 %o3 89 1.1 christos #define out4 %o4 90 1.1 christos #define out5 %o5 91 1.1 christos #define out6 %o6 92 1.1 christos #define out7 %o7 93 1.1 christos 94 1.1 christos #define stub stb 95 1.1 christos 96 1.1 christos 97 1.1 christos 98 1.1 christos 99 1.1 christos ! Macro definitions: 100 1.1 christos 101 1.1 christos 102 1.1 christos ! ip_macro 103 1.1 christos ! 104 1.1 christos ! The logic used in initial and final permutations is the same as in 105 1.1 christos ! the C code. The permutations are done with a clever , xor, and 106 1.1 christos ! technique. 107 1.1 christos ! 108 1.1 christos ! The macro also loads address sbox 1 to 5 to global 1 to 5, address 109 1.1.1.2 christos ! sbox 6 to local6, and address sbox 8 to out3. 110 1.1 christos ! 111 1.1.1.2 christos ! Rotates the halves 3 left to bring the sbox bits in convenient positions. 112 1.1 christos ! 113 1.1 christos ! Loads key first round from address in parameter 5 to out0, out1. 114 1.1 christos ! 115 1.1.1.2 christos ! After the original LibDES initial permutation, the resulting left 116 1.1 christos ! is in the variable initially used for right and vice versa. The macro 117 1.1.1.2 christos ! implements the possibility to keep the halves in the original registers. 118 1.1 christos ! 119 1.1 christos ! parameter 1 left 120 1.1 christos ! parameter 2 right 121 1.1 christos ! parameter 3 result left (modify in first round) 122 1.1 christos ! parameter 4 result right (use in first round) 123 1.1 christos ! parameter 5 key address 124 1.1 christos ! parameter 6 1/2 for include encryption/decryption 125 1.1 christos ! parameter 7 1 for move in1 to in3 126 1.1 christos ! parameter 8 1 for move in3 to in4, 2 for move in4 to in3 127 1.1 christos ! parameter 9 1 for load ks3 and ks2 to in4 and in3 128 1.1 christos 129 1.1 christos 130 1.1 christos 131 1.1 christos 132 1.1 christos ! rounds_macro 133 1.1 christos ! 134 1.1 christos ! The logic used in the DES rounds is the same as in the C code, 135 1.1 christos ! except that calculations for sbox 1 and sbox 5 begin before 136 1.1 christos ! the previous round is finished. 137 1.1 christos ! 138 1.1 christos ! In each round one half (work) is modified based on key and the 139 1.1 christos ! other half (use). 140 1.1 christos ! 141 1.1 christos ! In this version we do two rounds in a loop repeated 7 times 142 1.1.1.2 christos ! and two rounds separately. 143 1.1 christos ! 144 1.1 christos ! One half has the bits for the sboxes in the following positions: 145 1.1 christos ! 146 1.1 christos ! 777777xx555555xx333333xx111111xx 147 1.1 christos ! 148 1.1 christos ! 88xx666666xx444444xx222222xx8888 149 1.1 christos ! 150 1.1 christos ! The bits for each sbox are xor-ed with the key bits for that box. 151 1.1 christos ! The above xx bits are cleared, and the result used for lookup in 152 1.1 christos ! the sbox table. Each sbox entry contains the 4 output bits permuted 153 1.1 christos ! into 32 bits according to the P permutation. 154 1.1 christos ! 155 1.1 christos ! In the description of DES, left and right are switched after 156 1.1 christos ! each round, except after last round. In this code the original 157 1.1 christos ! left and right are kept in the same register in all rounds, meaning 158 1.1 christos ! that after the 16 rounds the result for right is in the register 159 1.1 christos ! originally used for left. 160 1.1 christos ! 161 1.1 christos ! parameter 1 first work (left in first round) 162 1.1 christos ! parameter 2 first use (right in first round) 163 1.1 christos ! parameter 3 enc/dec 1/-1 164 1.1 christos ! parameter 4 loop label 165 1.1 christos ! parameter 5 key address register 166 1.1 christos ! parameter 6 optional address for key next encryption/decryption 167 1.1 christos ! parameter 7 not empty for include retl 168 1.1 christos ! 169 1.1 christos ! also compares in2 to 8 170 1.1 christos 171 1.1 christos 172 1.1 christos 173 1.1 christos 174 1.1 christos ! fp_macro 175 1.1 christos ! 176 1.1 christos ! parameter 1 right (original left) 177 1.1 christos ! parameter 2 left (original right) 178 1.1 christos ! parameter 3 1 for optional store to [in0] 179 1.1 christos ! parameter 4 1 for load input/output address to local5/7 180 1.1 christos ! 181 1.1.1.2 christos ! The final permutation logic switches the halves, meaning that 182 1.1.1.2 christos ! left and right ends up the registers originally used. 183 1.1 christos 184 1.1 christos 185 1.1 christos 186 1.1 christos 187 1.1 christos ! fp_ip_macro 188 1.1 christos ! 189 1.1 christos ! Does initial permutation for next block mixed with 190 1.1 christos ! final permutation for current block. 191 1.1 christos ! 192 1.1 christos ! parameter 1 original left 193 1.1 christos ! parameter 2 original right 194 1.1 christos ! parameter 3 left ip 195 1.1 christos ! parameter 4 right ip 196 1.1 christos ! parameter 5 1: load ks1/ks2 to in3/in4, add 120 to in4 197 1.1 christos ! 2: mov in4 to in3 198 1.1 christos ! 199 1.1 christos ! also adds -8 to length in2 and loads loop counter to out4 200 1.1 christos 201 1.1 christos 202 1.1 christos 203 1.1 christos 204 1.1 christos 205 1.1 christos ! load_little_endian 206 1.1 christos ! 207 1.1 christos ! parameter 1 address 208 1.1 christos ! parameter 2 destination left 209 1.1 christos ! parameter 3 destination right 210 1.1.1.2 christos ! parameter 4 temporary 211 1.1 christos ! parameter 5 label 212 1.1 christos 213 1.1 christos 214 1.1 christos 215 1.1 christos 216 1.1 christos ! load_little_endian_inc 217 1.1 christos ! 218 1.1 christos ! parameter 1 address 219 1.1 christos ! parameter 2 destination left 220 1.1 christos ! parameter 3 destination right 221 1.1.1.2 christos ! parameter 4 temporary 222 1.1 christos ! parameter 4 label 223 1.1 christos ! 224 1.1 christos ! adds 8 to address 225 1.1 christos 226 1.1 christos 227 1.1 christos 228 1.1 christos 229 1.1 christos ! load_n_bytes 230 1.1 christos ! 231 1.1 christos ! Loads 1 to 7 bytes little endian 232 1.1 christos ! Remaining bytes are zeroed. 233 1.1 christos ! 234 1.1 christos ! parameter 1 address 235 1.1 christos ! parameter 2 length 236 1.1 christos ! parameter 3 destination register left 237 1.1 christos ! parameter 4 destination register right 238 1.1 christos ! parameter 5 temp 239 1.1 christos ! parameter 6 temp2 240 1.1 christos ! parameter 7 label 241 1.1 christos ! parameter 8 return label 242 1.1 christos 243 1.1 christos 244 1.1 christos 245 1.1 christos 246 1.1 christos ! store_little_endian 247 1.1 christos ! 248 1.1 christos ! parameter 1 address 249 1.1 christos ! parameter 2 source left 250 1.1 christos ! parameter 3 source right 251 1.1.1.2 christos ! parameter 4 temporary 252 1.1 christos 253 1.1 christos 254 1.1 christos 255 1.1 christos 256 1.1 christos ! store_n_bytes 257 1.1 christos ! 258 1.1 christos ! Stores 1 to 7 bytes little endian 259 1.1 christos ! 260 1.1 christos ! parameter 1 address 261 1.1 christos ! parameter 2 length 262 1.1 christos ! parameter 3 source register left 263 1.1 christos ! parameter 4 source register right 264 1.1 christos ! parameter 5 temp 265 1.1 christos ! parameter 6 temp2 266 1.1 christos ! parameter 7 label 267 1.1 christos ! parameter 8 return label 268 1.1 christos 269 1.1 christos 270 1.1 christos 271 1.1 christos 272 1.1 christos 273 1.1 christos 274 1.1 christos 275 1.1 christos 276 1.1 christos .section ".text" 277 1.1 christos 278 1.1 christos .align 32 279 1.1 christos 280 1.1 christos .des_enc: 281 1.1 christos 282 1.1 christos ! key address in3 283 1.1 christos ! loads key next encryption/decryption first round from [in4] 284 1.1 christos 285 1.1 christos 286 1.1 christos 287 1.1 christos ! rounds_macro 288 1.1 christos ! in5 out5 1 .des_enc.1 in3 in4 retl 289 1.1 christos 290 1.1 christos xor out5, out0, local1 291 1.1 christos 292 1.1 christos ld [out2+284], local5 ! 0x0000FC00 293 1.1 christos ba .des_enc.1 294 1.1 christos and local1, 252, local1 295 1.1 christos 296 1.1 christos .align 32 297 1.1 christos 298 1.1 christos .des_enc.1: 299 1.1 christos ! local6 is address sbox 6 300 1.1 christos ! out3 is address sbox 8 301 1.1 christos ! out4 is loop counter 302 1.1 christos 303 1.1 christos ld [global1+local1], local1 304 1.1 christos xor out5, out1, out1 ! 8642 305 1.1 christos xor out5, out0, out0 ! 7531 306 1.1 christos ! fmovs %f0, %f0 ! fxor used for alignment 307 1.1 christos 308 1.1 christos srl out1, 4, local0 ! rotate 4 right 309 1.1 christos and out0, local5, local3 ! 3 310 1.1 christos ! fmovs %f0, %f0 311 1.1 christos 312 1.1 christos ld [in3+1*8], local7 ! key 7531 next round 313 1.1 christos srl local3, 8, local3 ! 3 314 1.1 christos and local0, 252, local2 ! 2 315 1.1 christos ! fmovs %f0, %f0 316 1.1 christos 317 1.1 christos ld [global3+local3],local3 ! 3 318 1.1 christos sll out1, 28, out1 ! rotate 319 1.1 christos xor in5, local1, in5 ! 1 finished, local1 now sbox 7 320 1.1 christos 321 1.1.1.2 christos ld [global2+local2], local2 ! 2 322 1.1 christos srl out0, 24, local1 ! 7 323 1.1 christos or out1, local0, out1 ! rotate 324 1.1 christos 325 1.1 christos ldub [out2+local1], local1 ! 7 (and 0xFC) 326 1.1 christos srl out1, 24, local0 ! 8 327 1.1 christos and out1, local5, local4 ! 4 328 1.1 christos 329 1.1 christos ldub [out2+local0], local0 ! 8 (and 0xFC) 330 1.1 christos srl local4, 8, local4 ! 4 331 1.1 christos xor in5, local2, in5 ! 2 finished local2 now sbox 6 332 1.1 christos 333 1.1 christos ld [global4+local4],local4 ! 4 334 1.1 christos srl out1, 16, local2 ! 6 335 1.1 christos xor in5, local3, in5 ! 3 finished local3 now sbox 5 336 1.1 christos 337 1.1 christos ld [out3+local0],local0 ! 8 338 1.1 christos and local2, 252, local2 ! 6 339 1.1 christos add global1, 1536, local5 ! address sbox 7 340 1.1 christos 341 1.1 christos ld [local6+local2], local2 ! 6 342 1.1 christos srl out0, 16, local3 ! 5 343 1.1 christos xor in5, local4, in5 ! 4 finished 344 1.1 christos 345 1.1 christos ld [local5+local1],local1 ! 7 346 1.1 christos and local3, 252, local3 ! 5 347 1.1 christos xor in5, local0, in5 ! 8 finished 348 1.1 christos 349 1.1 christos ld [global5+local3],local3 ! 5 350 1.1 christos xor in5, local2, in5 ! 6 finished 351 1.1 christos subcc out4, 1, out4 352 1.1 christos 353 1.1 christos ld [in3+1*8+4], out0 ! key 8642 next round 354 1.1 christos xor in5, local7, local2 ! sbox 5 next round 355 1.1 christos xor in5, local1, in5 ! 7 finished 356 1.1 christos 357 1.1 christos srl local2, 16, local2 ! sbox 5 next round 358 1.1 christos xor in5, local3, in5 ! 5 finished 359 1.1 christos 360 1.1 christos ld [in3+1*16+4], out1 ! key 8642 next round again 361 1.1 christos and local2, 252, local2 ! sbox5 next round 362 1.1 christos ! next round 363 1.1 christos xor in5, local7, local7 ! 7531 364 1.1 christos 365 1.1 christos ld [global5+local2], local2 ! 5 366 1.1 christos srl local7, 24, local3 ! 7 367 1.1 christos xor in5, out0, out0 ! 8642 368 1.1 christos 369 1.1 christos ldub [out2+local3], local3 ! 7 (and 0xFC) 370 1.1 christos srl out0, 4, local0 ! rotate 4 right 371 1.1 christos and local7, 252, local1 ! 1 372 1.1 christos 373 1.1 christos sll out0, 28, out0 ! rotate 374 1.1 christos xor out5, local2, out5 ! 5 finished local2 used 375 1.1 christos 376 1.1 christos srl local0, 8, local4 ! 4 377 1.1 christos and local0, 252, local2 ! 2 378 1.1 christos ld [local5+local3], local3 ! 7 379 1.1 christos 380 1.1 christos srl local0, 16, local5 ! 6 381 1.1 christos or out0, local0, out0 ! rotate 382 1.1 christos ld [global2+local2], local2 ! 2 383 1.1 christos 384 1.1 christos srl out0, 24, local0 385 1.1 christos ld [in3+1*16], out0 ! key 7531 next round 386 1.1 christos and local4, 252, local4 ! 4 387 1.1 christos 388 1.1 christos and local5, 252, local5 ! 6 389 1.1 christos ld [global4+local4], local4 ! 4 390 1.1 christos xor out5, local3, out5 ! 7 finished local3 used 391 1.1 christos 392 1.1 christos and local0, 252, local0 ! 8 393 1.1 christos ld [local6+local5], local5 ! 6 394 1.1 christos xor out5, local2, out5 ! 2 finished local2 now sbox 3 395 1.1 christos 396 1.1 christos srl local7, 8, local2 ! 3 start 397 1.1 christos ld [out3+local0], local0 ! 8 398 1.1 christos xor out5, local4, out5 ! 4 finished 399 1.1 christos 400 1.1 christos and local2, 252, local2 ! 3 401 1.1 christos ld [global1+local1], local1 ! 1 402 1.1 christos xor out5, local5, out5 ! 6 finished local5 used 403 1.1 christos 404 1.1 christos ld [global3+local2], local2 ! 3 405 1.1 christos xor out5, local0, out5 ! 8 finished 406 1.1 christos add in3, 1*16, in3 ! enc add 8, dec add -8 to key pointer 407 1.1 christos 408 1.1 christos ld [out2+284], local5 ! 0x0000FC00 409 1.1 christos xor out5, out0, local4 ! sbox 1 next round 410 1.1 christos xor out5, local1, out5 ! 1 finished 411 1.1 christos 412 1.1 christos xor out5, local2, out5 ! 3 finished 413 1.1 christos bne .des_enc.1 414 1.1 christos and local4, 252, local1 ! sbox 1 next round 415 1.1 christos 416 1.1 christos ! two rounds more: 417 1.1 christos 418 1.1 christos ld [global1+local1], local1 419 1.1 christos xor out5, out1, out1 420 1.1 christos xor out5, out0, out0 421 1.1 christos 422 1.1 christos srl out1, 4, local0 ! rotate 423 1.1 christos and out0, local5, local3 424 1.1 christos 425 1.1 christos ld [in3+1*8], local7 ! key 7531 426 1.1 christos srl local3, 8, local3 427 1.1 christos and local0, 252, local2 428 1.1 christos 429 1.1 christos ld [global3+local3],local3 430 1.1 christos sll out1, 28, out1 ! rotate 431 1.1 christos xor in5, local1, in5 ! 1 finished, local1 now sbox 7 432 1.1 christos 433 1.1 christos ld [global2+local2], local2 434 1.1 christos srl out0, 24, local1 435 1.1 christos or out1, local0, out1 ! rotate 436 1.1 christos 437 1.1 christos ldub [out2+local1], local1 438 1.1 christos srl out1, 24, local0 439 1.1 christos and out1, local5, local4 440 1.1 christos 441 1.1 christos ldub [out2+local0], local0 442 1.1 christos srl local4, 8, local4 443 1.1 christos xor in5, local2, in5 ! 2 finished local2 now sbox 6 444 1.1 christos 445 1.1 christos ld [global4+local4],local4 446 1.1 christos srl out1, 16, local2 447 1.1 christos xor in5, local3, in5 ! 3 finished local3 now sbox 5 448 1.1 christos 449 1.1 christos ld [out3+local0],local0 450 1.1 christos and local2, 252, local2 451 1.1 christos add global1, 1536, local5 ! address sbox 7 452 1.1 christos 453 1.1 christos ld [local6+local2], local2 454 1.1 christos srl out0, 16, local3 455 1.1 christos xor in5, local4, in5 ! 4 finished 456 1.1 christos 457 1.1 christos ld [local5+local1],local1 458 1.1 christos and local3, 252, local3 459 1.1 christos xor in5, local0, in5 460 1.1 christos 461 1.1 christos ld [global5+local3],local3 462 1.1 christos xor in5, local2, in5 ! 6 finished 463 1.1 christos cmp in2, 8 464 1.1 christos 465 1.1 christos ld [out2+280], out4 ! loop counter 466 1.1 christos xor in5, local7, local2 ! sbox 5 next round 467 1.1 christos xor in5, local1, in5 ! 7 finished 468 1.1 christos 469 1.1 christos ld [in3+1*8+4], out0 470 1.1 christos srl local2, 16, local2 ! sbox 5 next round 471 1.1 christos xor in5, local3, in5 ! 5 finished 472 1.1 christos 473 1.1 christos and local2, 252, local2 474 1.1 christos ! next round (two rounds more) 475 1.1 christos xor in5, local7, local7 ! 7531 476 1.1 christos 477 1.1 christos ld [global5+local2], local2 478 1.1 christos srl local7, 24, local3 479 1.1 christos xor in5, out0, out0 ! 8642 480 1.1 christos 481 1.1 christos ldub [out2+local3], local3 482 1.1 christos srl out0, 4, local0 ! rotate 483 1.1 christos and local7, 252, local1 484 1.1 christos 485 1.1 christos sll out0, 28, out0 ! rotate 486 1.1 christos xor out5, local2, out5 ! 5 finished local2 used 487 1.1 christos 488 1.1 christos srl local0, 8, local4 489 1.1 christos and local0, 252, local2 490 1.1 christos ld [local5+local3], local3 491 1.1 christos 492 1.1 christos srl local0, 16, local5 493 1.1 christos or out0, local0, out0 ! rotate 494 1.1 christos ld [global2+local2], local2 495 1.1 christos 496 1.1 christos srl out0, 24, local0 497 1.1 christos ld [in4], out0 ! key next encryption/decryption 498 1.1 christos and local4, 252, local4 499 1.1 christos 500 1.1 christos and local5, 252, local5 501 1.1 christos ld [global4+local4], local4 502 1.1 christos xor out5, local3, out5 ! 7 finished local3 used 503 1.1 christos 504 1.1 christos and local0, 252, local0 505 1.1 christos ld [local6+local5], local5 506 1.1 christos xor out5, local2, out5 ! 2 finished local2 now sbox 3 507 1.1 christos 508 1.1 christos srl local7, 8, local2 ! 3 start 509 1.1 christos ld [out3+local0], local0 510 1.1 christos xor out5, local4, out5 511 1.1 christos 512 1.1 christos and local2, 252, local2 513 1.1 christos ld [global1+local1], local1 514 1.1 christos xor out5, local5, out5 ! 6 finished local5 used 515 1.1 christos 516 1.1 christos ld [global3+local2], local2 517 1.1 christos srl in5, 3, local3 518 1.1 christos xor out5, local0, out5 519 1.1 christos 520 1.1 christos ld [in4+4], out1 ! key next encryption/decryption 521 1.1 christos sll in5, 29, local4 522 1.1 christos xor out5, local1, out5 523 1.1 christos 524 1.1 christos retl 525 1.1 christos xor out5, local2, out5 526 1.1 christos 527 1.1 christos 528 1.1 christos 529 1.1 christos .align 32 530 1.1 christos 531 1.1 christos .des_dec: 532 1.1 christos 533 1.1 christos ! implemented with out5 as first parameter to avoid 534 1.1 christos ! register exchange in ede modes 535 1.1 christos 536 1.1 christos ! key address in4 537 1.1 christos ! loads key next encryption/decryption first round from [in3] 538 1.1 christos 539 1.1 christos 540 1.1 christos 541 1.1 christos ! rounds_macro 542 1.1 christos ! out5 in5 -1 .des_dec.1 in4 in3 retl 543 1.1 christos 544 1.1 christos xor in5, out0, local1 545 1.1 christos 546 1.1 christos ld [out2+284], local5 ! 0x0000FC00 547 1.1 christos ba .des_dec.1 548 1.1 christos and local1, 252, local1 549 1.1 christos 550 1.1 christos .align 32 551 1.1 christos 552 1.1 christos .des_dec.1: 553 1.1 christos ! local6 is address sbox 6 554 1.1 christos ! out3 is address sbox 8 555 1.1 christos ! out4 is loop counter 556 1.1 christos 557 1.1 christos ld [global1+local1], local1 558 1.1 christos xor in5, out1, out1 ! 8642 559 1.1 christos xor in5, out0, out0 ! 7531 560 1.1 christos ! fmovs %f0, %f0 ! fxor used for alignment 561 1.1 christos 562 1.1 christos srl out1, 4, local0 ! rotate 4 right 563 1.1 christos and out0, local5, local3 ! 3 564 1.1 christos ! fmovs %f0, %f0 565 1.1 christos 566 1.1 christos ld [in4+-1*8], local7 ! key 7531 next round 567 1.1 christos srl local3, 8, local3 ! 3 568 1.1 christos and local0, 252, local2 ! 2 569 1.1 christos ! fmovs %f0, %f0 570 1.1 christos 571 1.1 christos ld [global3+local3],local3 ! 3 572 1.1 christos sll out1, 28, out1 ! rotate 573 1.1 christos xor out5, local1, out5 ! 1 finished, local1 now sbox 7 574 1.1 christos 575 1.1.1.2 christos ld [global2+local2], local2 ! 2 576 1.1 christos srl out0, 24, local1 ! 7 577 1.1 christos or out1, local0, out1 ! rotate 578 1.1 christos 579 1.1 christos ldub [out2+local1], local1 ! 7 (and 0xFC) 580 1.1 christos srl out1, 24, local0 ! 8 581 1.1 christos and out1, local5, local4 ! 4 582 1.1 christos 583 1.1 christos ldub [out2+local0], local0 ! 8 (and 0xFC) 584 1.1 christos srl local4, 8, local4 ! 4 585 1.1 christos xor out5, local2, out5 ! 2 finished local2 now sbox 6 586 1.1 christos 587 1.1 christos ld [global4+local4],local4 ! 4 588 1.1 christos srl out1, 16, local2 ! 6 589 1.1 christos xor out5, local3, out5 ! 3 finished local3 now sbox 5 590 1.1 christos 591 1.1 christos ld [out3+local0],local0 ! 8 592 1.1 christos and local2, 252, local2 ! 6 593 1.1 christos add global1, 1536, local5 ! address sbox 7 594 1.1 christos 595 1.1 christos ld [local6+local2], local2 ! 6 596 1.1 christos srl out0, 16, local3 ! 5 597 1.1 christos xor out5, local4, out5 ! 4 finished 598 1.1 christos 599 1.1 christos ld [local5+local1],local1 ! 7 600 1.1 christos and local3, 252, local3 ! 5 601 1.1 christos xor out5, local0, out5 ! 8 finished 602 1.1 christos 603 1.1 christos ld [global5+local3],local3 ! 5 604 1.1 christos xor out5, local2, out5 ! 6 finished 605 1.1 christos subcc out4, 1, out4 606 1.1 christos 607 1.1 christos ld [in4+-1*8+4], out0 ! key 8642 next round 608 1.1 christos xor out5, local7, local2 ! sbox 5 next round 609 1.1 christos xor out5, local1, out5 ! 7 finished 610 1.1 christos 611 1.1 christos srl local2, 16, local2 ! sbox 5 next round 612 1.1 christos xor out5, local3, out5 ! 5 finished 613 1.1 christos 614 1.1 christos ld [in4+-1*16+4], out1 ! key 8642 next round again 615 1.1 christos and local2, 252, local2 ! sbox5 next round 616 1.1 christos ! next round 617 1.1 christos xor out5, local7, local7 ! 7531 618 1.1 christos 619 1.1 christos ld [global5+local2], local2 ! 5 620 1.1 christos srl local7, 24, local3 ! 7 621 1.1 christos xor out5, out0, out0 ! 8642 622 1.1 christos 623 1.1 christos ldub [out2+local3], local3 ! 7 (and 0xFC) 624 1.1 christos srl out0, 4, local0 ! rotate 4 right 625 1.1 christos and local7, 252, local1 ! 1 626 1.1 christos 627 1.1 christos sll out0, 28, out0 ! rotate 628 1.1 christos xor in5, local2, in5 ! 5 finished local2 used 629 1.1 christos 630 1.1 christos srl local0, 8, local4 ! 4 631 1.1 christos and local0, 252, local2 ! 2 632 1.1 christos ld [local5+local3], local3 ! 7 633 1.1 christos 634 1.1 christos srl local0, 16, local5 ! 6 635 1.1 christos or out0, local0, out0 ! rotate 636 1.1 christos ld [global2+local2], local2 ! 2 637 1.1 christos 638 1.1 christos srl out0, 24, local0 639 1.1 christos ld [in4+-1*16], out0 ! key 7531 next round 640 1.1 christos and local4, 252, local4 ! 4 641 1.1 christos 642 1.1 christos and local5, 252, local5 ! 6 643 1.1 christos ld [global4+local4], local4 ! 4 644 1.1 christos xor in5, local3, in5 ! 7 finished local3 used 645 1.1 christos 646 1.1 christos and local0, 252, local0 ! 8 647 1.1 christos ld [local6+local5], local5 ! 6 648 1.1 christos xor in5, local2, in5 ! 2 finished local2 now sbox 3 649 1.1 christos 650 1.1 christos srl local7, 8, local2 ! 3 start 651 1.1 christos ld [out3+local0], local0 ! 8 652 1.1 christos xor in5, local4, in5 ! 4 finished 653 1.1 christos 654 1.1 christos and local2, 252, local2 ! 3 655 1.1 christos ld [global1+local1], local1 ! 1 656 1.1 christos xor in5, local5, in5 ! 6 finished local5 used 657 1.1 christos 658 1.1 christos ld [global3+local2], local2 ! 3 659 1.1 christos xor in5, local0, in5 ! 8 finished 660 1.1 christos add in4, -1*16, in4 ! enc add 8, dec add -8 to key pointer 661 1.1 christos 662 1.1 christos ld [out2+284], local5 ! 0x0000FC00 663 1.1 christos xor in5, out0, local4 ! sbox 1 next round 664 1.1 christos xor in5, local1, in5 ! 1 finished 665 1.1 christos 666 1.1 christos xor in5, local2, in5 ! 3 finished 667 1.1 christos bne .des_dec.1 668 1.1 christos and local4, 252, local1 ! sbox 1 next round 669 1.1 christos 670 1.1 christos ! two rounds more: 671 1.1 christos 672 1.1 christos ld [global1+local1], local1 673 1.1 christos xor in5, out1, out1 674 1.1 christos xor in5, out0, out0 675 1.1 christos 676 1.1 christos srl out1, 4, local0 ! rotate 677 1.1 christos and out0, local5, local3 678 1.1 christos 679 1.1 christos ld [in4+-1*8], local7 ! key 7531 680 1.1 christos srl local3, 8, local3 681 1.1 christos and local0, 252, local2 682 1.1 christos 683 1.1 christos ld [global3+local3],local3 684 1.1 christos sll out1, 28, out1 ! rotate 685 1.1 christos xor out5, local1, out5 ! 1 finished, local1 now sbox 7 686 1.1 christos 687 1.1 christos ld [global2+local2], local2 688 1.1 christos srl out0, 24, local1 689 1.1 christos or out1, local0, out1 ! rotate 690 1.1 christos 691 1.1 christos ldub [out2+local1], local1 692 1.1 christos srl out1, 24, local0 693 1.1 christos and out1, local5, local4 694 1.1 christos 695 1.1 christos ldub [out2+local0], local0 696 1.1 christos srl local4, 8, local4 697 1.1 christos xor out5, local2, out5 ! 2 finished local2 now sbox 6 698 1.1 christos 699 1.1 christos ld [global4+local4],local4 700 1.1 christos srl out1, 16, local2 701 1.1 christos xor out5, local3, out5 ! 3 finished local3 now sbox 5 702 1.1 christos 703 1.1 christos ld [out3+local0],local0 704 1.1 christos and local2, 252, local2 705 1.1 christos add global1, 1536, local5 ! address sbox 7 706 1.1 christos 707 1.1 christos ld [local6+local2], local2 708 1.1 christos srl out0, 16, local3 709 1.1 christos xor out5, local4, out5 ! 4 finished 710 1.1 christos 711 1.1 christos ld [local5+local1],local1 712 1.1 christos and local3, 252, local3 713 1.1 christos xor out5, local0, out5 714 1.1 christos 715 1.1 christos ld [global5+local3],local3 716 1.1 christos xor out5, local2, out5 ! 6 finished 717 1.1 christos cmp in2, 8 718 1.1 christos 719 1.1 christos ld [out2+280], out4 ! loop counter 720 1.1 christos xor out5, local7, local2 ! sbox 5 next round 721 1.1 christos xor out5, local1, out5 ! 7 finished 722 1.1 christos 723 1.1 christos ld [in4+-1*8+4], out0 724 1.1 christos srl local2, 16, local2 ! sbox 5 next round 725 1.1 christos xor out5, local3, out5 ! 5 finished 726 1.1 christos 727 1.1 christos and local2, 252, local2 728 1.1 christos ! next round (two rounds more) 729 1.1 christos xor out5, local7, local7 ! 7531 730 1.1 christos 731 1.1 christos ld [global5+local2], local2 732 1.1 christos srl local7, 24, local3 733 1.1 christos xor out5, out0, out0 ! 8642 734 1.1 christos 735 1.1 christos ldub [out2+local3], local3 736 1.1 christos srl out0, 4, local0 ! rotate 737 1.1 christos and local7, 252, local1 738 1.1 christos 739 1.1 christos sll out0, 28, out0 ! rotate 740 1.1 christos xor in5, local2, in5 ! 5 finished local2 used 741 1.1 christos 742 1.1 christos srl local0, 8, local4 743 1.1 christos and local0, 252, local2 744 1.1 christos ld [local5+local3], local3 745 1.1 christos 746 1.1 christos srl local0, 16, local5 747 1.1 christos or out0, local0, out0 ! rotate 748 1.1 christos ld [global2+local2], local2 749 1.1 christos 750 1.1 christos srl out0, 24, local0 751 1.1 christos ld [in3], out0 ! key next encryption/decryption 752 1.1 christos and local4, 252, local4 753 1.1 christos 754 1.1 christos and local5, 252, local5 755 1.1 christos ld [global4+local4], local4 756 1.1 christos xor in5, local3, in5 ! 7 finished local3 used 757 1.1 christos 758 1.1 christos and local0, 252, local0 759 1.1 christos ld [local6+local5], local5 760 1.1 christos xor in5, local2, in5 ! 2 finished local2 now sbox 3 761 1.1 christos 762 1.1 christos srl local7, 8, local2 ! 3 start 763 1.1 christos ld [out3+local0], local0 764 1.1 christos xor in5, local4, in5 765 1.1 christos 766 1.1 christos and local2, 252, local2 767 1.1 christos ld [global1+local1], local1 768 1.1 christos xor in5, local5, in5 ! 6 finished local5 used 769 1.1 christos 770 1.1 christos ld [global3+local2], local2 771 1.1 christos srl out5, 3, local3 772 1.1 christos xor in5, local0, in5 773 1.1 christos 774 1.1 christos ld [in3+4], out1 ! key next encryption/decryption 775 1.1 christos sll out5, 29, local4 776 1.1 christos xor in5, local1, in5 777 1.1 christos 778 1.1 christos retl 779 1.1 christos xor in5, local2, in5 780 1.1 christos 781 1.1 christos 782 1.1 christos 783 1.1 christos 784 1.1 christos ! void DES_encrypt1(data, ks, enc) 785 1.1 christos ! ******************************* 786 1.1 christos 787 1.1 christos .align 32 788 1.1 christos .global DES_encrypt1 789 1.1 christos .type DES_encrypt1,#function 790 1.1 christos 791 1.1 christos DES_encrypt1: 792 1.1 christos 793 1.1 christos save %sp, FRAME, %sp 794 1.1 christos 795 1.1 christos sethi %hi(_PIC_DES_SPtrans-1f),global1 796 1.1 christos or global1,%lo(_PIC_DES_SPtrans-1f),global1 797 1.1 christos 1: call .+8 798 1.1 christos add %o7,global1,global1 799 1.1 christos sub global1,_PIC_DES_SPtrans-.des_and,out2 800 1.1 christos 801 1.1 christos ld [in0], in5 ! left 802 1.1 christos cmp in2, 0 ! enc 803 1.1 christos 804 1.1 christos be .encrypt.dec 805 1.1 christos ld [in0+4], out5 ! right 806 1.1 christos 807 1.1 christos ! parameter 6 1/2 for include encryption/decryption 808 1.1 christos ! parameter 7 1 for move in1 to in3 809 1.1 christos ! parameter 8 1 for move in3 to in4, 2 for move in4 to in3 810 1.1 christos 811 1.1 christos 812 1.1 christos 813 1.1 christos ! ip_macro 814 1.1 christos ! in5 out5 out5 in5 in3 0 1 1 815 1.1 christos 816 1.1 christos ld [out2+256], local1 817 1.1 christos srl out5, 4, local4 818 1.1 christos 819 1.1 christos xor local4, in5, local4 820 1.1 christos mov in1, in3 821 1.1 christos 822 1.1 christos ld [out2+260], local2 823 1.1 christos and local4, local1, local4 824 1.1 christos mov in3, in4 825 1.1 christos 826 1.1 christos 827 1.1 christos ld [out2+280], out4 ! loop counter 828 1.1 christos sll local4, 4, local1 829 1.1 christos xor in5, local4, in5 830 1.1 christos 831 1.1 christos ld [out2+264], local3 832 1.1 christos srl in5, 16, local4 833 1.1 christos xor out5, local1, out5 834 1.1 christos 835 1.1 christos 836 1.1 christos xor local4, out5, local4 837 1.1 christos nop !sethi %hi(DES_SPtrans), global1 ! sbox addr 838 1.1 christos 839 1.1 christos 840 1.1 christos and local4, local2, local4 841 1.1 christos nop !or global1, %lo(DES_SPtrans), global1 ! sbox addr 842 1.1 christos 843 1.1 christos sll local4, 16, local1 844 1.1 christos xor out5, local4, out5 845 1.1 christos 846 1.1 christos srl out5, 2, local4 847 1.1 christos xor in5, local1, in5 848 1.1 christos 849 1.1 christos sethi %hi(16711680), local5 850 1.1 christos xor local4, in5, local4 851 1.1 christos 852 1.1 christos and local4, local3, local4 853 1.1 christos or local5, 255, local5 854 1.1 christos 855 1.1 christos sll local4, 2, local2 856 1.1 christos xor in5, local4, in5 857 1.1 christos 858 1.1 christos srl in5, 8, local4 859 1.1 christos xor out5, local2, out5 860 1.1 christos 861 1.1 christos xor local4, out5, local4 862 1.1 christos add global1, 768, global4 863 1.1 christos 864 1.1 christos and local4, local5, local4 865 1.1 christos add global1, 1024, global5 866 1.1 christos 867 1.1 christos ld [out2+272], local7 868 1.1 christos sll local4, 8, local1 869 1.1 christos xor out5, local4, out5 870 1.1 christos 871 1.1 christos srl out5, 1, local4 872 1.1 christos xor in5, local1, in5 873 1.1 christos 874 1.1 christos ld [in3], out0 ! key 7531 875 1.1 christos xor local4, in5, local4 876 1.1 christos add global1, 256, global2 877 1.1 christos 878 1.1 christos ld [in3+4], out1 ! key 8642 879 1.1 christos and local4, local7, local4 880 1.1 christos add global1, 512, global3 881 1.1 christos 882 1.1 christos sll local4, 1, local1 883 1.1 christos xor in5, local4, in5 884 1.1 christos 885 1.1 christos sll in5, 3, local3 886 1.1 christos xor out5, local1, out5 887 1.1 christos 888 1.1 christos sll out5, 3, local2 889 1.1 christos add global1, 1280, local6 ! address sbox 8 890 1.1 christos 891 1.1 christos srl in5, 29, local4 892 1.1 christos add global1, 1792, out3 ! address sbox 8 893 1.1 christos 894 1.1 christos srl out5, 29, local1 895 1.1 christos or local4, local3, out5 896 1.1 christos 897 1.1 christos or local2, local1, in5 898 1.1 christos 899 1.1 christos 900 1.1 christos 901 1.1 christos 902 1.1 christos 903 1.1 christos 904 1.1 christos 905 1.1 christos 906 1.1 christos ! rounds_macro 907 1.1 christos ! in5 out5 1 .des_encrypt1.1 in3 in4 908 1.1 christos 909 1.1 christos xor out5, out0, local1 910 1.1 christos 911 1.1 christos ld [out2+284], local5 ! 0x0000FC00 912 1.1 christos ba .des_encrypt1.1 913 1.1 christos and local1, 252, local1 914 1.1 christos 915 1.1 christos .align 32 916 1.1 christos 917 1.1 christos .des_encrypt1.1: 918 1.1 christos ! local6 is address sbox 6 919 1.1 christos ! out3 is address sbox 8 920 1.1 christos ! out4 is loop counter 921 1.1 christos 922 1.1 christos ld [global1+local1], local1 923 1.1 christos xor out5, out1, out1 ! 8642 924 1.1 christos xor out5, out0, out0 ! 7531 925 1.1 christos ! fmovs %f0, %f0 ! fxor used for alignment 926 1.1 christos 927 1.1 christos srl out1, 4, local0 ! rotate 4 right 928 1.1 christos and out0, local5, local3 ! 3 929 1.1 christos ! fmovs %f0, %f0 930 1.1 christos 931 1.1 christos ld [in3+1*8], local7 ! key 7531 next round 932 1.1 christos srl local3, 8, local3 ! 3 933 1.1 christos and local0, 252, local2 ! 2 934 1.1 christos ! fmovs %f0, %f0 935 1.1 christos 936 1.1 christos ld [global3+local3],local3 ! 3 937 1.1 christos sll out1, 28, out1 ! rotate 938 1.1 christos xor in5, local1, in5 ! 1 finished, local1 now sbox 7 939 1.1 christos 940 1.1.1.2 christos ld [global2+local2], local2 ! 2 941 1.1 christos srl out0, 24, local1 ! 7 942 1.1 christos or out1, local0, out1 ! rotate 943 1.1 christos 944 1.1 christos ldub [out2+local1], local1 ! 7 (and 0xFC) 945 1.1 christos srl out1, 24, local0 ! 8 946 1.1 christos and out1, local5, local4 ! 4 947 1.1 christos 948 1.1 christos ldub [out2+local0], local0 ! 8 (and 0xFC) 949 1.1 christos srl local4, 8, local4 ! 4 950 1.1 christos xor in5, local2, in5 ! 2 finished local2 now sbox 6 951 1.1 christos 952 1.1 christos ld [global4+local4],local4 ! 4 953 1.1 christos srl out1, 16, local2 ! 6 954 1.1 christos xor in5, local3, in5 ! 3 finished local3 now sbox 5 955 1.1 christos 956 1.1 christos ld [out3+local0],local0 ! 8 957 1.1 christos and local2, 252, local2 ! 6 958 1.1 christos add global1, 1536, local5 ! address sbox 7 959 1.1 christos 960 1.1 christos ld [local6+local2], local2 ! 6 961 1.1 christos srl out0, 16, local3 ! 5 962 1.1 christos xor in5, local4, in5 ! 4 finished 963 1.1 christos 964 1.1 christos ld [local5+local1],local1 ! 7 965 1.1 christos and local3, 252, local3 ! 5 966 1.1 christos xor in5, local0, in5 ! 8 finished 967 1.1 christos 968 1.1 christos ld [global5+local3],local3 ! 5 969 1.1 christos xor in5, local2, in5 ! 6 finished 970 1.1 christos subcc out4, 1, out4 971 1.1 christos 972 1.1 christos ld [in3+1*8+4], out0 ! key 8642 next round 973 1.1 christos xor in5, local7, local2 ! sbox 5 next round 974 1.1 christos xor in5, local1, in5 ! 7 finished 975 1.1 christos 976 1.1 christos srl local2, 16, local2 ! sbox 5 next round 977 1.1 christos xor in5, local3, in5 ! 5 finished 978 1.1 christos 979 1.1 christos ld [in3+1*16+4], out1 ! key 8642 next round again 980 1.1 christos and local2, 252, local2 ! sbox5 next round 981 1.1 christos ! next round 982 1.1 christos xor in5, local7, local7 ! 7531 983 1.1 christos 984 1.1 christos ld [global5+local2], local2 ! 5 985 1.1 christos srl local7, 24, local3 ! 7 986 1.1 christos xor in5, out0, out0 ! 8642 987 1.1 christos 988 1.1 christos ldub [out2+local3], local3 ! 7 (and 0xFC) 989 1.1 christos srl out0, 4, local0 ! rotate 4 right 990 1.1 christos and local7, 252, local1 ! 1 991 1.1 christos 992 1.1 christos sll out0, 28, out0 ! rotate 993 1.1 christos xor out5, local2, out5 ! 5 finished local2 used 994 1.1 christos 995 1.1 christos srl local0, 8, local4 ! 4 996 1.1 christos and local0, 252, local2 ! 2 997 1.1 christos ld [local5+local3], local3 ! 7 998 1.1 christos 999 1.1 christos srl local0, 16, local5 ! 6 1000 1.1 christos or out0, local0, out0 ! rotate 1001 1.1 christos ld [global2+local2], local2 ! 2 1002 1.1 christos 1003 1.1 christos srl out0, 24, local0 1004 1.1 christos ld [in3+1*16], out0 ! key 7531 next round 1005 1.1 christos and local4, 252, local4 ! 4 1006 1.1 christos 1007 1.1 christos and local5, 252, local5 ! 6 1008 1.1 christos ld [global4+local4], local4 ! 4 1009 1.1 christos xor out5, local3, out5 ! 7 finished local3 used 1010 1.1 christos 1011 1.1 christos and local0, 252, local0 ! 8 1012 1.1 christos ld [local6+local5], local5 ! 6 1013 1.1 christos xor out5, local2, out5 ! 2 finished local2 now sbox 3 1014 1.1 christos 1015 1.1 christos srl local7, 8, local2 ! 3 start 1016 1.1 christos ld [out3+local0], local0 ! 8 1017 1.1 christos xor out5, local4, out5 ! 4 finished 1018 1.1 christos 1019 1.1 christos and local2, 252, local2 ! 3 1020 1.1 christos ld [global1+local1], local1 ! 1 1021 1.1 christos xor out5, local5, out5 ! 6 finished local5 used 1022 1.1 christos 1023 1.1 christos ld [global3+local2], local2 ! 3 1024 1.1 christos xor out5, local0, out5 ! 8 finished 1025 1.1 christos add in3, 1*16, in3 ! enc add 8, dec add -8 to key pointer 1026 1.1 christos 1027 1.1 christos ld [out2+284], local5 ! 0x0000FC00 1028 1.1 christos xor out5, out0, local4 ! sbox 1 next round 1029 1.1 christos xor out5, local1, out5 ! 1 finished 1030 1.1 christos 1031 1.1 christos xor out5, local2, out5 ! 3 finished 1032 1.1 christos bne .des_encrypt1.1 1033 1.1 christos and local4, 252, local1 ! sbox 1 next round 1034 1.1 christos 1035 1.1 christos ! two rounds more: 1036 1.1 christos 1037 1.1 christos ld [global1+local1], local1 1038 1.1 christos xor out5, out1, out1 1039 1.1 christos xor out5, out0, out0 1040 1.1 christos 1041 1.1 christos srl out1, 4, local0 ! rotate 1042 1.1 christos and out0, local5, local3 1043 1.1 christos 1044 1.1 christos ld [in3+1*8], local7 ! key 7531 1045 1.1 christos srl local3, 8, local3 1046 1.1 christos and local0, 252, local2 1047 1.1 christos 1048 1.1 christos ld [global3+local3],local3 1049 1.1 christos sll out1, 28, out1 ! rotate 1050 1.1 christos xor in5, local1, in5 ! 1 finished, local1 now sbox 7 1051 1.1 christos 1052 1.1 christos ld [global2+local2], local2 1053 1.1 christos srl out0, 24, local1 1054 1.1 christos or out1, local0, out1 ! rotate 1055 1.1 christos 1056 1.1 christos ldub [out2+local1], local1 1057 1.1 christos srl out1, 24, local0 1058 1.1 christos and out1, local5, local4 1059 1.1 christos 1060 1.1 christos ldub [out2+local0], local0 1061 1.1 christos srl local4, 8, local4 1062 1.1 christos xor in5, local2, in5 ! 2 finished local2 now sbox 6 1063 1.1 christos 1064 1.1 christos ld [global4+local4],local4 1065 1.1 christos srl out1, 16, local2 1066 1.1 christos xor in5, local3, in5 ! 3 finished local3 now sbox 5 1067 1.1 christos 1068 1.1 christos ld [out3+local0],local0 1069 1.1 christos and local2, 252, local2 1070 1.1 christos add global1, 1536, local5 ! address sbox 7 1071 1.1 christos 1072 1.1 christos ld [local6+local2], local2 1073 1.1 christos srl out0, 16, local3 1074 1.1 christos xor in5, local4, in5 ! 4 finished 1075 1.1 christos 1076 1.1 christos ld [local5+local1],local1 1077 1.1 christos and local3, 252, local3 1078 1.1 christos xor in5, local0, in5 1079 1.1 christos 1080 1.1 christos ld [global5+local3],local3 1081 1.1 christos xor in5, local2, in5 ! 6 finished 1082 1.1 christos cmp in2, 8 1083 1.1 christos 1084 1.1 christos ld [out2+280], out4 ! loop counter 1085 1.1 christos xor in5, local7, local2 ! sbox 5 next round 1086 1.1 christos xor in5, local1, in5 ! 7 finished 1087 1.1 christos 1088 1.1 christos ld [in3+1*8+4], out0 1089 1.1 christos srl local2, 16, local2 ! sbox 5 next round 1090 1.1 christos xor in5, local3, in5 ! 5 finished 1091 1.1 christos 1092 1.1 christos and local2, 252, local2 1093 1.1 christos ! next round (two rounds more) 1094 1.1 christos xor in5, local7, local7 ! 7531 1095 1.1 christos 1096 1.1 christos ld [global5+local2], local2 1097 1.1 christos srl local7, 24, local3 1098 1.1 christos xor in5, out0, out0 ! 8642 1099 1.1 christos 1100 1.1 christos ldub [out2+local3], local3 1101 1.1 christos srl out0, 4, local0 ! rotate 1102 1.1 christos and local7, 252, local1 1103 1.1 christos 1104 1.1 christos sll out0, 28, out0 ! rotate 1105 1.1 christos xor out5, local2, out5 ! 5 finished local2 used 1106 1.1 christos 1107 1.1 christos srl local0, 8, local4 1108 1.1 christos and local0, 252, local2 1109 1.1 christos ld [local5+local3], local3 1110 1.1 christos 1111 1.1 christos srl local0, 16, local5 1112 1.1 christos or out0, local0, out0 ! rotate 1113 1.1 christos ld [global2+local2], local2 1114 1.1 christos 1115 1.1 christos srl out0, 24, local0 1116 1.1 christos ld [in4], out0 ! key next encryption/decryption 1117 1.1 christos and local4, 252, local4 1118 1.1 christos 1119 1.1 christos and local5, 252, local5 1120 1.1 christos ld [global4+local4], local4 1121 1.1 christos xor out5, local3, out5 ! 7 finished local3 used 1122 1.1 christos 1123 1.1 christos and local0, 252, local0 1124 1.1 christos ld [local6+local5], local5 1125 1.1 christos xor out5, local2, out5 ! 2 finished local2 now sbox 3 1126 1.1 christos 1127 1.1 christos srl local7, 8, local2 ! 3 start 1128 1.1 christos ld [out3+local0], local0 1129 1.1 christos xor out5, local4, out5 1130 1.1 christos 1131 1.1 christos and local2, 252, local2 1132 1.1 christos ld [global1+local1], local1 1133 1.1 christos xor out5, local5, out5 ! 6 finished local5 used 1134 1.1 christos 1135 1.1 christos ld [global3+local2], local2 1136 1.1 christos srl in5, 3, local3 1137 1.1 christos xor out5, local0, out5 1138 1.1 christos 1139 1.1 christos ld [in4+4], out1 ! key next encryption/decryption 1140 1.1 christos sll in5, 29, local4 1141 1.1 christos xor out5, local1, out5 1142 1.1 christos 1143 1.1 christos 1144 1.1 christos xor out5, local2, out5 1145 1.1 christos ! in4 not used 1146 1.1 christos 1147 1.1 christos 1148 1.1 christos 1149 1.1 christos ! fp_macro 1150 1.1 christos ! in5 out5 1 1151 1.1 christos 1152 1.1 christos ! initially undo the rotate 3 left done after initial permutation 1153 1.1 christos ! original left is received shifted 3 right and 29 left in local3/4 1154 1.1 christos 1155 1.1 christos sll out5, 29, local1 1156 1.1 christos or local3, local4, in5 1157 1.1 christos 1158 1.1 christos srl out5, 3, out5 1159 1.1 christos sethi %hi(0x55555555), local2 1160 1.1 christos 1161 1.1 christos or out5, local1, out5 1162 1.1 christos or local2, %lo(0x55555555), local2 1163 1.1 christos 1164 1.1 christos srl out5, 1, local3 1165 1.1 christos sethi %hi(0x00ff00ff), local1 1166 1.1 christos xor local3, in5, local3 1167 1.1 christos or local1, %lo(0x00ff00ff), local1 1168 1.1 christos and local3, local2, local3 1169 1.1 christos sethi %hi(0x33333333), local4 1170 1.1 christos sll local3, 1, local2 1171 1.1 christos 1172 1.1 christos xor in5, local3, in5 1173 1.1 christos 1174 1.1 christos srl in5, 8, local3 1175 1.1 christos xor out5, local2, out5 1176 1.1 christos xor local3, out5, local3 1177 1.1 christos or local4, %lo(0x33333333), local4 1178 1.1 christos and local3, local1, local3 1179 1.1 christos sethi %hi(0x0000ffff), local1 1180 1.1 christos sll local3, 8, local2 1181 1.1 christos 1182 1.1 christos xor out5, local3, out5 1183 1.1 christos 1184 1.1 christos srl out5, 2, local3 1185 1.1 christos xor in5, local2, in5 1186 1.1 christos xor local3, in5, local3 1187 1.1 christos or local1, %lo(0x0000ffff), local1 1188 1.1 christos and local3, local4, local3 1189 1.1 christos sethi %hi(0x0f0f0f0f), local4 1190 1.1 christos sll local3, 2, local2 1191 1.1 christos 1192 1.1 christos 1193 1.1 christos xor in5, local3, in5 1194 1.1 christos 1195 1.1 christos 1196 1.1 christos srl in5, 16, local3 1197 1.1 christos xor out5, local2, out5 1198 1.1 christos xor local3, out5, local3 1199 1.1 christos or local4, %lo(0x0f0f0f0f), local4 1200 1.1 christos and local3, local1, local3 1201 1.1 christos sll local3, 16, local2 1202 1.1 christos 1203 1.1 christos xor out5, local3, local1 1204 1.1 christos 1205 1.1 christos srl local1, 4, local3 1206 1.1 christos xor in5, local2, in5 1207 1.1 christos xor local3, in5, local3 1208 1.1 christos and local3, local4, local3 1209 1.1 christos sll local3, 4, local2 1210 1.1 christos 1211 1.1 christos xor in5, local3, in5 1212 1.1 christos 1213 1.1 christos ! optional store: 1214 1.1 christos 1215 1.1 christos st in5, [in0] 1216 1.1 christos 1217 1.1 christos xor local1, local2, out5 1218 1.1 christos 1219 1.1 christos st out5, [in0+4] 1220 1.1 christos 1221 1.1 christos ! 1 for store to [in0] 1222 1.1 christos 1223 1.1 christos ret 1224 1.1 christos restore 1225 1.1 christos 1226 1.1 christos .encrypt.dec: 1227 1.1 christos 1228 1.1 christos add in1, 120, in3 ! use last subkey for first round 1229 1.1 christos 1230 1.1 christos ! parameter 6 1/2 for include encryption/decryption 1231 1.1 christos ! parameter 7 1 for move in1 to in3 1232 1.1 christos ! parameter 8 1 for move in3 to in4, 2 for move in4 to in3 1233 1.1 christos 1234 1.1 christos 1235 1.1 christos 1236 1.1 christos ! ip_macro 1237 1.1 christos ! in5 out5 in5 out5 in4 2 0 1 1238 1.1 christos 1239 1.1 christos ld [out2+256], local1 1240 1.1 christos srl out5, 4, local4 1241 1.1 christos 1242 1.1 christos xor local4, in5, local4 1243 1.1 christos nop 1244 1.1 christos 1245 1.1 christos ld [out2+260], local2 1246 1.1 christos and local4, local1, local4 1247 1.1 christos mov in3, in4 1248 1.1 christos 1249 1.1 christos 1250 1.1 christos ld [out2+280], out4 ! loop counter 1251 1.1 christos sll local4, 4, local1 1252 1.1 christos xor in5, local4, in5 1253 1.1 christos 1254 1.1 christos ld [out2+264], local3 1255 1.1 christos srl in5, 16, local4 1256 1.1 christos xor out5, local1, out5 1257 1.1 christos 1258 1.1 christos 1259 1.1 christos xor local4, out5, local4 1260 1.1 christos nop !sethi %hi(DES_SPtrans), global1 ! sbox addr 1261 1.1 christos 1262 1.1 christos 1263 1.1 christos and local4, local2, local4 1264 1.1 christos nop !or global1, %lo(DES_SPtrans), global1 ! sbox addr 1265 1.1 christos 1266 1.1 christos sll local4, 16, local1 1267 1.1 christos xor out5, local4, out5 1268 1.1 christos 1269 1.1 christos srl out5, 2, local4 1270 1.1 christos xor in5, local1, in5 1271 1.1 christos 1272 1.1 christos sethi %hi(16711680), local5 1273 1.1 christos xor local4, in5, local4 1274 1.1 christos 1275 1.1 christos and local4, local3, local4 1276 1.1 christos or local5, 255, local5 1277 1.1 christos 1278 1.1 christos sll local4, 2, local2 1279 1.1 christos xor in5, local4, in5 1280 1.1 christos 1281 1.1 christos srl in5, 8, local4 1282 1.1 christos xor out5, local2, out5 1283 1.1 christos 1284 1.1 christos xor local4, out5, local4 1285 1.1 christos add global1, 768, global4 1286 1.1 christos 1287 1.1 christos and local4, local5, local4 1288 1.1 christos add global1, 1024, global5 1289 1.1 christos 1290 1.1 christos ld [out2+272], local7 1291 1.1 christos sll local4, 8, local1 1292 1.1 christos xor out5, local4, out5 1293 1.1 christos 1294 1.1 christos srl out5, 1, local4 1295 1.1 christos xor in5, local1, in5 1296 1.1 christos 1297 1.1 christos ld [in4], out0 ! key 7531 1298 1.1 christos xor local4, in5, local4 1299 1.1 christos add global1, 256, global2 1300 1.1 christos 1301 1.1 christos ld [in4+4], out1 ! key 8642 1302 1.1 christos and local4, local7, local4 1303 1.1 christos add global1, 512, global3 1304 1.1 christos 1305 1.1 christos sll local4, 1, local1 1306 1.1 christos xor in5, local4, in5 1307 1.1 christos 1308 1.1 christos sll in5, 3, local3 1309 1.1 christos xor out5, local1, out5 1310 1.1 christos 1311 1.1 christos sll out5, 3, local2 1312 1.1 christos add global1, 1280, local6 ! address sbox 8 1313 1.1 christos 1314 1.1 christos srl in5, 29, local4 1315 1.1 christos add global1, 1792, out3 ! address sbox 8 1316 1.1 christos 1317 1.1 christos srl out5, 29, local1 1318 1.1 christos or local4, local3, in5 1319 1.1 christos 1320 1.1 christos or local2, local1, out5 1321 1.1 christos 1322 1.1 christos 1323 1.1 christos 1324 1.1 christos 1325 1.1 christos 1326 1.1 christos ld [out2+284], local5 ! 0x0000FC00 used in the rounds 1327 1.1 christos or local2, local1, out5 1328 1.1 christos xor in5, out0, local1 1329 1.1 christos 1330 1.1 christos call .des_dec.1 1331 1.1 christos and local1, 252, local1 1332 1.1 christos 1333 1.1 christos 1334 1.1 christos ! include dec, ks in4 1335 1.1 christos 1336 1.1 christos 1337 1.1 christos 1338 1.1 christos ! fp_macro 1339 1.1 christos ! out5 in5 1 1340 1.1 christos 1341 1.1 christos ! initially undo the rotate 3 left done after initial permutation 1342 1.1 christos ! original left is received shifted 3 right and 29 left in local3/4 1343 1.1 christos 1344 1.1 christos sll in5, 29, local1 1345 1.1 christos or local3, local4, out5 1346 1.1 christos 1347 1.1 christos srl in5, 3, in5 1348 1.1 christos sethi %hi(0x55555555), local2 1349 1.1 christos 1350 1.1 christos or in5, local1, in5 1351 1.1 christos or local2, %lo(0x55555555), local2 1352 1.1 christos 1353 1.1 christos srl in5, 1, local3 1354 1.1 christos sethi %hi(0x00ff00ff), local1 1355 1.1 christos xor local3, out5, local3 1356 1.1 christos or local1, %lo(0x00ff00ff), local1 1357 1.1 christos and local3, local2, local3 1358 1.1 christos sethi %hi(0x33333333), local4 1359 1.1 christos sll local3, 1, local2 1360 1.1 christos 1361 1.1 christos xor out5, local3, out5 1362 1.1 christos 1363 1.1 christos srl out5, 8, local3 1364 1.1 christos xor in5, local2, in5 1365 1.1 christos xor local3, in5, local3 1366 1.1 christos or local4, %lo(0x33333333), local4 1367 1.1 christos and local3, local1, local3 1368 1.1 christos sethi %hi(0x0000ffff), local1 1369 1.1 christos sll local3, 8, local2 1370 1.1 christos 1371 1.1 christos xor in5, local3, in5 1372 1.1 christos 1373 1.1 christos srl in5, 2, local3 1374 1.1 christos xor out5, local2, out5 1375 1.1 christos xor local3, out5, local3 1376 1.1 christos or local1, %lo(0x0000ffff), local1 1377 1.1 christos and local3, local4, local3 1378 1.1 christos sethi %hi(0x0f0f0f0f), local4 1379 1.1 christos sll local3, 2, local2 1380 1.1 christos 1381 1.1 christos 1382 1.1 christos xor out5, local3, out5 1383 1.1 christos 1384 1.1 christos 1385 1.1 christos srl out5, 16, local3 1386 1.1 christos xor in5, local2, in5 1387 1.1 christos xor local3, in5, local3 1388 1.1 christos or local4, %lo(0x0f0f0f0f), local4 1389 1.1 christos and local3, local1, local3 1390 1.1 christos sll local3, 16, local2 1391 1.1 christos 1392 1.1 christos xor in5, local3, local1 1393 1.1 christos 1394 1.1 christos srl local1, 4, local3 1395 1.1 christos xor out5, local2, out5 1396 1.1 christos xor local3, out5, local3 1397 1.1 christos and local3, local4, local3 1398 1.1 christos sll local3, 4, local2 1399 1.1 christos 1400 1.1 christos xor out5, local3, out5 1401 1.1 christos 1402 1.1 christos ! optional store: 1403 1.1 christos 1404 1.1 christos st out5, [in0] 1405 1.1 christos 1406 1.1 christos xor local1, local2, in5 1407 1.1 christos 1408 1.1 christos st in5, [in0+4] 1409 1.1 christos 1410 1.1 christos ! 1 for store to [in0] 1411 1.1 christos 1412 1.1 christos ret 1413 1.1 christos restore 1414 1.1 christos 1415 1.1 christos .DES_encrypt1.end: 1416 1.1 christos .size DES_encrypt1,.DES_encrypt1.end-DES_encrypt1 1417 1.1 christos 1418 1.1 christos 1419 1.1 christos ! void DES_encrypt2(data, ks, enc) 1420 1.1 christos !********************************* 1421 1.1 christos 1422 1.1 christos ! encrypts/decrypts without initial/final permutation 1423 1.1 christos 1424 1.1 christos .align 32 1425 1.1 christos .global DES_encrypt2 1426 1.1 christos .type DES_encrypt2,#function 1427 1.1 christos 1428 1.1 christos DES_encrypt2: 1429 1.1 christos 1430 1.1 christos save %sp, FRAME, %sp 1431 1.1 christos 1432 1.1 christos sethi %hi(_PIC_DES_SPtrans-1f),global1 1433 1.1 christos or global1,%lo(_PIC_DES_SPtrans-1f),global1 1434 1.1 christos 1: call .+8 1435 1.1 christos add %o7,global1,global1 1436 1.1 christos sub global1,_PIC_DES_SPtrans-.des_and,out2 1437 1.1 christos 1438 1.1.1.2 christos ! Set sbox address 1 to 6 and rotate halves 3 left 1439 1.1 christos ! Errors caught by destest? Yes. Still? *NO* 1440 1.1 christos 1441 1.1 christos !sethi %hi(DES_SPtrans), global1 ! address sbox 1 1442 1.1 christos 1443 1.1 christos !or global1, %lo(DES_SPtrans), global1 ! sbox 1 1444 1.1 christos 1445 1.1 christos add global1, 256, global2 ! sbox 2 1446 1.1 christos add global1, 512, global3 ! sbox 3 1447 1.1 christos 1448 1.1 christos ld [in0], out5 ! right 1449 1.1 christos add global1, 768, global4 ! sbox 4 1450 1.1 christos add global1, 1024, global5 ! sbox 5 1451 1.1 christos 1452 1.1 christos ld [in0+4], in5 ! left 1453 1.1 christos add global1, 1280, local6 ! sbox 6 1454 1.1 christos add global1, 1792, out3 ! sbox 8 1455 1.1 christos 1456 1.1 christos ! rotate 1457 1.1 christos 1458 1.1 christos sll in5, 3, local5 1459 1.1 christos mov in1, in3 ! key address to in3 1460 1.1 christos 1461 1.1 christos sll out5, 3, local7 1462 1.1 christos srl in5, 29, in5 1463 1.1 christos 1464 1.1 christos srl out5, 29, out5 1465 1.1 christos add in5, local5, in5 1466 1.1 christos 1467 1.1 christos add out5, local7, out5 1468 1.1 christos cmp in2, 0 1469 1.1 christos 1470 1.1 christos ! we use our own stackframe 1471 1.1 christos 1472 1.1 christos be .encrypt2.dec 1473 1.1 christos STPTR in0, [%sp+BIAS+ARG0+0*ARGSZ] 1474 1.1 christos 1475 1.1 christos ld [in3], out0 ! key 7531 first round 1476 1.1 christos mov LOOPS, out4 ! loop counter 1477 1.1 christos 1478 1.1 christos ld [in3+4], out1 ! key 8642 first round 1479 1.1 christos sethi %hi(0x0000FC00), local5 1480 1.1 christos 1481 1.1 christos call .des_enc 1482 1.1 christos mov in3, in4 1483 1.1 christos 1484 1.1 christos ! rotate 1485 1.1 christos sll in5, 29, in0 1486 1.1 christos srl in5, 3, in5 1487 1.1 christos sll out5, 29, in1 1488 1.1 christos add in5, in0, in5 1489 1.1 christos srl out5, 3, out5 1490 1.1 christos LDPTR [%sp+BIAS+ARG0+0*ARGSZ], in0 1491 1.1 christos add out5, in1, out5 1492 1.1 christos st in5, [in0] 1493 1.1 christos st out5, [in0+4] 1494 1.1 christos 1495 1.1 christos ret 1496 1.1 christos restore 1497 1.1 christos 1498 1.1 christos 1499 1.1 christos .encrypt2.dec: 1500 1.1 christos 1501 1.1 christos add in3, 120, in4 1502 1.1 christos 1503 1.1 christos ld [in4], out0 ! key 7531 first round 1504 1.1 christos mov LOOPS, out4 ! loop counter 1505 1.1 christos 1506 1.1 christos ld [in4+4], out1 ! key 8642 first round 1507 1.1 christos sethi %hi(0x0000FC00), local5 1508 1.1 christos 1509 1.1 christos mov in5, local1 ! left expected in out5 1510 1.1 christos mov out5, in5 1511 1.1 christos 1512 1.1 christos call .des_dec 1513 1.1 christos mov local1, out5 1514 1.1 christos 1515 1.1 christos .encrypt2.finish: 1516 1.1 christos 1517 1.1 christos ! rotate 1518 1.1 christos sll in5, 29, in0 1519 1.1 christos srl in5, 3, in5 1520 1.1 christos sll out5, 29, in1 1521 1.1 christos add in5, in0, in5 1522 1.1 christos srl out5, 3, out5 1523 1.1 christos LDPTR [%sp+BIAS+ARG0+0*ARGSZ], in0 1524 1.1 christos add out5, in1, out5 1525 1.1 christos st out5, [in0] 1526 1.1 christos st in5, [in0+4] 1527 1.1 christos 1528 1.1 christos ret 1529 1.1 christos restore 1530 1.1 christos 1531 1.1 christos .DES_encrypt2.end: 1532 1.1 christos .size DES_encrypt2, .DES_encrypt2.end-DES_encrypt2 1533 1.1 christos 1534 1.1 christos 1535 1.1 christos ! void DES_encrypt3(data, ks1, ks2, ks3) 1536 1.1 christos ! ************************************** 1537 1.1 christos 1538 1.1 christos .align 32 1539 1.1 christos .global DES_encrypt3 1540 1.1 christos .type DES_encrypt3,#function 1541 1.1 christos 1542 1.1 christos DES_encrypt3: 1543 1.1 christos 1544 1.1 christos save %sp, FRAME, %sp 1545 1.1 christos 1546 1.1 christos sethi %hi(_PIC_DES_SPtrans-1f),global1 1547 1.1 christos or global1,%lo(_PIC_DES_SPtrans-1f),global1 1548 1.1 christos 1: call .+8 1549 1.1 christos add %o7,global1,global1 1550 1.1 christos sub global1,_PIC_DES_SPtrans-.des_and,out2 1551 1.1 christos 1552 1.1 christos ld [in0], in5 ! left 1553 1.1 christos add in2, 120, in4 ! ks2 1554 1.1 christos 1555 1.1 christos ld [in0+4], out5 ! right 1556 1.1 christos mov in3, in2 ! save ks3 1557 1.1 christos 1558 1.1 christos ! parameter 6 1/2 for include encryption/decryption 1559 1.1 christos ! parameter 7 1 for mov in1 to in3 1560 1.1 christos ! parameter 8 1 for mov in3 to in4 1561 1.1 christos ! parameter 9 1 for load ks3 and ks2 to in4 and in3 1562 1.1 christos 1563 1.1 christos 1564 1.1 christos 1565 1.1 christos ! ip_macro 1566 1.1 christos ! in5 out5 out5 in5 in3 1 1 0 0 1567 1.1 christos 1568 1.1 christos ld [out2+256], local1 1569 1.1 christos srl out5, 4, local4 1570 1.1 christos 1571 1.1 christos xor local4, in5, local4 1572 1.1 christos mov in1, in3 1573 1.1 christos 1574 1.1 christos ld [out2+260], local2 1575 1.1 christos and local4, local1, local4 1576 1.1 christos 1577 1.1 christos 1578 1.1 christos 1579 1.1 christos ld [out2+280], out4 ! loop counter 1580 1.1 christos sll local4, 4, local1 1581 1.1 christos xor in5, local4, in5 1582 1.1 christos 1583 1.1 christos ld [out2+264], local3 1584 1.1 christos srl in5, 16, local4 1585 1.1 christos xor out5, local1, out5 1586 1.1 christos 1587 1.1 christos 1588 1.1 christos xor local4, out5, local4 1589 1.1 christos nop !sethi %hi(DES_SPtrans), global1 ! sbox addr 1590 1.1 christos 1591 1.1 christos 1592 1.1 christos and local4, local2, local4 1593 1.1 christos nop !or global1, %lo(DES_SPtrans), global1 ! sbox addr 1594 1.1 christos 1595 1.1 christos sll local4, 16, local1 1596 1.1 christos xor out5, local4, out5 1597 1.1 christos 1598 1.1 christos srl out5, 2, local4 1599 1.1 christos xor in5, local1, in5 1600 1.1 christos 1601 1.1 christos sethi %hi(16711680), local5 1602 1.1 christos xor local4, in5, local4 1603 1.1 christos 1604 1.1 christos and local4, local3, local4 1605 1.1 christos or local5, 255, local5 1606 1.1 christos 1607 1.1 christos sll local4, 2, local2 1608 1.1 christos xor in5, local4, in5 1609 1.1 christos 1610 1.1 christos srl in5, 8, local4 1611 1.1 christos xor out5, local2, out5 1612 1.1 christos 1613 1.1 christos xor local4, out5, local4 1614 1.1 christos add global1, 768, global4 1615 1.1 christos 1616 1.1 christos and local4, local5, local4 1617 1.1 christos add global1, 1024, global5 1618 1.1 christos 1619 1.1 christos ld [out2+272], local7 1620 1.1 christos sll local4, 8, local1 1621 1.1 christos xor out5, local4, out5 1622 1.1 christos 1623 1.1 christos srl out5, 1, local4 1624 1.1 christos xor in5, local1, in5 1625 1.1 christos 1626 1.1 christos ld [in3], out0 ! key 7531 1627 1.1 christos xor local4, in5, local4 1628 1.1 christos add global1, 256, global2 1629 1.1 christos 1630 1.1 christos ld [in3+4], out1 ! key 8642 1631 1.1 christos and local4, local7, local4 1632 1.1 christos add global1, 512, global3 1633 1.1 christos 1634 1.1 christos sll local4, 1, local1 1635 1.1 christos xor in5, local4, in5 1636 1.1 christos 1637 1.1 christos sll in5, 3, local3 1638 1.1 christos xor out5, local1, out5 1639 1.1 christos 1640 1.1 christos sll out5, 3, local2 1641 1.1 christos add global1, 1280, local6 ! address sbox 8 1642 1.1 christos 1643 1.1 christos srl in5, 29, local4 1644 1.1 christos add global1, 1792, out3 ! address sbox 8 1645 1.1 christos 1646 1.1 christos srl out5, 29, local1 1647 1.1 christos or local4, local3, out5 1648 1.1 christos 1649 1.1 christos or local2, local1, in5 1650 1.1 christos 1651 1.1 christos 1652 1.1 christos 1653 1.1 christos ld [out2+284], local5 ! 0x0000FC00 used in the rounds 1654 1.1 christos or local2, local1, in5 1655 1.1 christos xor out5, out0, local1 1656 1.1 christos 1657 1.1 christos call .des_enc.1 1658 1.1 christos and local1, 252, local1 1659 1.1 christos 1660 1.1 christos 1661 1.1 christos 1662 1.1 christos 1663 1.1 christos 1664 1.1 christos 1665 1.1 christos call .des_dec 1666 1.1 christos mov in2, in3 ! preload ks3 1667 1.1 christos 1668 1.1 christos call .des_enc 1669 1.1 christos nop 1670 1.1 christos 1671 1.1 christos 1672 1.1 christos 1673 1.1 christos ! fp_macro 1674 1.1 christos ! in5 out5 1 1675 1.1 christos 1676 1.1 christos ! initially undo the rotate 3 left done after initial permutation 1677 1.1 christos ! original left is received shifted 3 right and 29 left in local3/4 1678 1.1 christos 1679 1.1 christos sll out5, 29, local1 1680 1.1 christos or local3, local4, in5 1681 1.1 christos 1682 1.1 christos srl out5, 3, out5 1683 1.1 christos sethi %hi(0x55555555), local2 1684 1.1 christos 1685 1.1 christos or out5, local1, out5 1686 1.1 christos or local2, %lo(0x55555555), local2 1687 1.1 christos 1688 1.1 christos srl out5, 1, local3 1689 1.1 christos sethi %hi(0x00ff00ff), local1 1690 1.1 christos xor local3, in5, local3 1691 1.1 christos or local1, %lo(0x00ff00ff), local1 1692 1.1 christos and local3, local2, local3 1693 1.1 christos sethi %hi(0x33333333), local4 1694 1.1 christos sll local3, 1, local2 1695 1.1 christos 1696 1.1 christos xor in5, local3, in5 1697 1.1 christos 1698 1.1 christos srl in5, 8, local3 1699 1.1 christos xor out5, local2, out5 1700 1.1 christos xor local3, out5, local3 1701 1.1 christos or local4, %lo(0x33333333), local4 1702 1.1 christos and local3, local1, local3 1703 1.1 christos sethi %hi(0x0000ffff), local1 1704 1.1 christos sll local3, 8, local2 1705 1.1 christos 1706 1.1 christos xor out5, local3, out5 1707 1.1 christos 1708 1.1 christos srl out5, 2, local3 1709 1.1 christos xor in5, local2, in5 1710 1.1 christos xor local3, in5, local3 1711 1.1 christos or local1, %lo(0x0000ffff), local1 1712 1.1 christos and local3, local4, local3 1713 1.1 christos sethi %hi(0x0f0f0f0f), local4 1714 1.1 christos sll local3, 2, local2 1715 1.1 christos 1716 1.1 christos 1717 1.1 christos xor in5, local3, in5 1718 1.1 christos 1719 1.1 christos 1720 1.1 christos srl in5, 16, local3 1721 1.1 christos xor out5, local2, out5 1722 1.1 christos xor local3, out5, local3 1723 1.1 christos or local4, %lo(0x0f0f0f0f), local4 1724 1.1 christos and local3, local1, local3 1725 1.1 christos sll local3, 16, local2 1726 1.1 christos 1727 1.1 christos xor out5, local3, local1 1728 1.1 christos 1729 1.1 christos srl local1, 4, local3 1730 1.1 christos xor in5, local2, in5 1731 1.1 christos xor local3, in5, local3 1732 1.1 christos and local3, local4, local3 1733 1.1 christos sll local3, 4, local2 1734 1.1 christos 1735 1.1 christos xor in5, local3, in5 1736 1.1 christos 1737 1.1 christos ! optional store: 1738 1.1 christos 1739 1.1 christos st in5, [in0] 1740 1.1 christos 1741 1.1 christos xor local1, local2, out5 1742 1.1 christos 1743 1.1 christos st out5, [in0+4] 1744 1.1 christos 1745 1.1 christos 1746 1.1 christos 1747 1.1 christos ret 1748 1.1 christos restore 1749 1.1 christos 1750 1.1 christos .DES_encrypt3.end: 1751 1.1 christos .size DES_encrypt3,.DES_encrypt3.end-DES_encrypt3 1752 1.1 christos 1753 1.1 christos 1754 1.1 christos ! void DES_decrypt3(data, ks1, ks2, ks3) 1755 1.1 christos ! ************************************** 1756 1.1 christos 1757 1.1 christos .align 32 1758 1.1 christos .global DES_decrypt3 1759 1.1 christos .type DES_decrypt3,#function 1760 1.1 christos 1761 1.1 christos DES_decrypt3: 1762 1.1 christos 1763 1.1 christos save %sp, FRAME, %sp 1764 1.1 christos 1765 1.1 christos sethi %hi(_PIC_DES_SPtrans-1f),global1 1766 1.1 christos or global1,%lo(_PIC_DES_SPtrans-1f),global1 1767 1.1 christos 1: call .+8 1768 1.1 christos add %o7,global1,global1 1769 1.1 christos sub global1,_PIC_DES_SPtrans-.des_and,out2 1770 1.1 christos 1771 1.1 christos ld [in0], in5 ! left 1772 1.1 christos add in3, 120, in4 ! ks3 1773 1.1 christos 1774 1.1 christos ld [in0+4], out5 ! right 1775 1.1 christos mov in2, in3 ! ks2 1776 1.1 christos 1777 1.1 christos ! parameter 6 1/2 for include encryption/decryption 1778 1.1 christos ! parameter 7 1 for mov in1 to in3 1779 1.1 christos ! parameter 8 1 for mov in3 to in4 1780 1.1 christos ! parameter 9 1 for load ks3 and ks2 to in4 and in3 1781 1.1 christos 1782 1.1 christos 1783 1.1 christos 1784 1.1 christos ! ip_macro 1785 1.1 christos ! in5 out5 in5 out5 in4 2 0 0 0 1786 1.1 christos 1787 1.1 christos ld [out2+256], local1 1788 1.1 christos srl out5, 4, local4 1789 1.1 christos 1790 1.1 christos xor local4, in5, local4 1791 1.1 christos nop 1792 1.1 christos 1793 1.1 christos ld [out2+260], local2 1794 1.1 christos and local4, local1, local4 1795 1.1 christos 1796 1.1 christos 1797 1.1 christos 1798 1.1 christos ld [out2+280], out4 ! loop counter 1799 1.1 christos sll local4, 4, local1 1800 1.1 christos xor in5, local4, in5 1801 1.1 christos 1802 1.1 christos ld [out2+264], local3 1803 1.1 christos srl in5, 16, local4 1804 1.1 christos xor out5, local1, out5 1805 1.1 christos 1806 1.1 christos 1807 1.1 christos xor local4, out5, local4 1808 1.1 christos nop !sethi %hi(DES_SPtrans), global1 ! sbox addr 1809 1.1 christos 1810 1.1 christos 1811 1.1 christos and local4, local2, local4 1812 1.1 christos nop !or global1, %lo(DES_SPtrans), global1 ! sbox addr 1813 1.1 christos 1814 1.1 christos sll local4, 16, local1 1815 1.1 christos xor out5, local4, out5 1816 1.1 christos 1817 1.1 christos srl out5, 2, local4 1818 1.1 christos xor in5, local1, in5 1819 1.1 christos 1820 1.1 christos sethi %hi(16711680), local5 1821 1.1 christos xor local4, in5, local4 1822 1.1 christos 1823 1.1 christos and local4, local3, local4 1824 1.1 christos or local5, 255, local5 1825 1.1 christos 1826 1.1 christos sll local4, 2, local2 1827 1.1 christos xor in5, local4, in5 1828 1.1 christos 1829 1.1 christos srl in5, 8, local4 1830 1.1 christos xor out5, local2, out5 1831 1.1 christos 1832 1.1 christos xor local4, out5, local4 1833 1.1 christos add global1, 768, global4 1834 1.1 christos 1835 1.1 christos and local4, local5, local4 1836 1.1 christos add global1, 1024, global5 1837 1.1 christos 1838 1.1 christos ld [out2+272], local7 1839 1.1 christos sll local4, 8, local1 1840 1.1 christos xor out5, local4, out5 1841 1.1 christos 1842 1.1 christos srl out5, 1, local4 1843 1.1 christos xor in5, local1, in5 1844 1.1 christos 1845 1.1 christos ld [in4], out0 ! key 7531 1846 1.1 christos xor local4, in5, local4 1847 1.1 christos add global1, 256, global2 1848 1.1 christos 1849 1.1 christos ld [in4+4], out1 ! key 8642 1850 1.1 christos and local4, local7, local4 1851 1.1 christos add global1, 512, global3 1852 1.1 christos 1853 1.1 christos sll local4, 1, local1 1854 1.1 christos xor in5, local4, in5 1855 1.1 christos 1856 1.1 christos sll in5, 3, local3 1857 1.1 christos xor out5, local1, out5 1858 1.1 christos 1859 1.1 christos sll out5, 3, local2 1860 1.1 christos add global1, 1280, local6 ! address sbox 8 1861 1.1 christos 1862 1.1 christos srl in5, 29, local4 1863 1.1 christos add global1, 1792, out3 ! address sbox 8 1864 1.1 christos 1865 1.1 christos srl out5, 29, local1 1866 1.1 christos or local4, local3, in5 1867 1.1 christos 1868 1.1 christos or local2, local1, out5 1869 1.1 christos 1870 1.1 christos 1871 1.1 christos 1872 1.1 christos 1873 1.1 christos 1874 1.1 christos ld [out2+284], local5 ! 0x0000FC00 used in the rounds 1875 1.1 christos or local2, local1, out5 1876 1.1 christos xor in5, out0, local1 1877 1.1 christos 1878 1.1 christos call .des_dec.1 1879 1.1 christos and local1, 252, local1 1880 1.1 christos 1881 1.1 christos 1882 1.1 christos 1883 1.1 christos 1884 1.1 christos call .des_enc 1885 1.1 christos add in1, 120, in4 ! preload ks1 1886 1.1 christos 1887 1.1 christos call .des_dec 1888 1.1 christos nop 1889 1.1 christos 1890 1.1 christos 1891 1.1 christos 1892 1.1 christos ! fp_macro 1893 1.1 christos ! out5 in5 1 1894 1.1 christos 1895 1.1 christos ! initially undo the rotate 3 left done after initial permutation 1896 1.1 christos ! original left is received shifted 3 right and 29 left in local3/4 1897 1.1 christos 1898 1.1 christos sll in5, 29, local1 1899 1.1 christos or local3, local4, out5 1900 1.1 christos 1901 1.1 christos srl in5, 3, in5 1902 1.1 christos sethi %hi(0x55555555), local2 1903 1.1 christos 1904 1.1 christos or in5, local1, in5 1905 1.1 christos or local2, %lo(0x55555555), local2 1906 1.1 christos 1907 1.1 christos srl in5, 1, local3 1908 1.1 christos sethi %hi(0x00ff00ff), local1 1909 1.1 christos xor local3, out5, local3 1910 1.1 christos or local1, %lo(0x00ff00ff), local1 1911 1.1 christos and local3, local2, local3 1912 1.1 christos sethi %hi(0x33333333), local4 1913 1.1 christos sll local3, 1, local2 1914 1.1 christos 1915 1.1 christos xor out5, local3, out5 1916 1.1 christos 1917 1.1 christos srl out5, 8, local3 1918 1.1 christos xor in5, local2, in5 1919 1.1 christos xor local3, in5, local3 1920 1.1 christos or local4, %lo(0x33333333), local4 1921 1.1 christos and local3, local1, local3 1922 1.1 christos sethi %hi(0x0000ffff), local1 1923 1.1 christos sll local3, 8, local2 1924 1.1 christos 1925 1.1 christos xor in5, local3, in5 1926 1.1 christos 1927 1.1 christos srl in5, 2, local3 1928 1.1 christos xor out5, local2, out5 1929 1.1 christos xor local3, out5, local3 1930 1.1 christos or local1, %lo(0x0000ffff), local1 1931 1.1 christos and local3, local4, local3 1932 1.1 christos sethi %hi(0x0f0f0f0f), local4 1933 1.1 christos sll local3, 2, local2 1934 1.1 christos 1935 1.1 christos 1936 1.1 christos xor out5, local3, out5 1937 1.1 christos 1938 1.1 christos 1939 1.1 christos srl out5, 16, local3 1940 1.1 christos xor in5, local2, in5 1941 1.1 christos xor local3, in5, local3 1942 1.1 christos or local4, %lo(0x0f0f0f0f), local4 1943 1.1 christos and local3, local1, local3 1944 1.1 christos sll local3, 16, local2 1945 1.1 christos 1946 1.1 christos xor in5, local3, local1 1947 1.1 christos 1948 1.1 christos srl local1, 4, local3 1949 1.1 christos xor out5, local2, out5 1950 1.1 christos xor local3, out5, local3 1951 1.1 christos and local3, local4, local3 1952 1.1 christos sll local3, 4, local2 1953 1.1 christos 1954 1.1 christos xor out5, local3, out5 1955 1.1 christos 1956 1.1 christos ! optional store: 1957 1.1 christos 1958 1.1 christos st out5, [in0] 1959 1.1 christos 1960 1.1 christos xor local1, local2, in5 1961 1.1 christos 1962 1.1 christos st in5, [in0+4] 1963 1.1 christos 1964 1.1 christos 1965 1.1 christos 1966 1.1 christos ret 1967 1.1 christos restore 1968 1.1 christos 1969 1.1 christos .DES_decrypt3.end: 1970 1.1 christos .size DES_decrypt3,.DES_decrypt3.end-DES_decrypt3 1971 1.1 christos 1972 1.1 christos ! void DES_ncbc_encrypt(input, output, length, schedule, ivec, enc) 1973 1.1 christos ! ***************************************************************** 1974 1.1 christos 1975 1.1 christos 1976 1.1 christos .align 32 1977 1.1 christos .global DES_ncbc_encrypt 1978 1.1 christos .type DES_ncbc_encrypt,#function 1979 1.1 christos 1980 1.1 christos DES_ncbc_encrypt: 1981 1.1 christos 1982 1.1 christos save %sp, FRAME, %sp 1983 1.1 christos 1984 1.1 christos 1985 1.1 christos 1986 1.1 christos 1987 1.1 christos 1988 1.1 christos sethi %hi(_PIC_DES_SPtrans-1f),global1 1989 1.1 christos or global1,%lo(_PIC_DES_SPtrans-1f),global1 1990 1.1 christos 1: call .+8 1991 1.1 christos add %o7,global1,global1 1992 1.1 christos sub global1,_PIC_DES_SPtrans-.des_and,out2 1993 1.1 christos 1994 1.1.1.2 christos cmp in5, 0 ! enc 1995 1.1 christos 1996 1.1 christos be .ncbc.dec 1997 1.1 christos STPTR in4, [%sp+BIAS+ARG0+4*ARGSZ] 1998 1.1 christos 1999 1.1 christos ! addr left right temp label 2000 1.1 christos 2001 1.1 christos 2002 1.1 christos ! load_little_endian 2003 1.1 christos ! in4 in5 out5 local3 .LLE1 2004 1.1 christos 2005 1.1 christos ! first in memory to rightmost in register 2006 1.1 christos 2007 1.1 christos .LLE1: 2008 1.1 christos ldub [in4+3], in5 2009 1.1 christos 2010 1.1 christos ldub [in4+2], local3 2011 1.1 christos sll in5, 8, in5 2012 1.1 christos or in5, local3, in5 2013 1.1 christos 2014 1.1 christos ldub [in4+1], local3 2015 1.1 christos sll in5, 8, in5 2016 1.1 christos or in5, local3, in5 2017 1.1 christos 2018 1.1 christos ldub [in4+0], local3 2019 1.1 christos sll in5, 8, in5 2020 1.1 christos or in5, local3, in5 2021 1.1 christos 2022 1.1 christos 2023 1.1 christos ldub [in4+3+4], out5 2024 1.1 christos 2025 1.1 christos ldub [in4+2+4], local3 2026 1.1 christos sll out5, 8, out5 2027 1.1 christos or out5, local3, out5 2028 1.1 christos 2029 1.1 christos ldub [in4+1+4], local3 2030 1.1 christos sll out5, 8, out5 2031 1.1 christos or out5, local3, out5 2032 1.1 christos 2033 1.1 christos ldub [in4+0+4], local3 2034 1.1 christos sll out5, 8, out5 2035 1.1 christos or out5, local3, out5 2036 1.1 christos .LLE1a: 2037 1.1 christos 2038 1.1 christos ! iv 2039 1.1 christos 2040 1.1 christos addcc in2, -8, in2 ! bytes missing when first block done 2041 1.1 christos 2042 1.1 christos bl .ncbc.enc.seven.or.less 2043 1.1 christos mov in3, in4 ! schedule 2044 1.1 christos 2045 1.1 christos .ncbc.enc.next.block: 2046 1.1 christos 2047 1.1 christos 2048 1.1 christos 2049 1.1 christos ! load_little_endian 2050 1.1 christos ! in0 out4 global4 local3 .LLE2 2051 1.1 christos 2052 1.1 christos ! first in memory to rightmost in register 2053 1.1 christos 2054 1.1 christos .LLE2: 2055 1.1 christos ldub [in0+3], out4 2056 1.1 christos 2057 1.1 christos ldub [in0+2], local3 2058 1.1 christos sll out4, 8, out4 2059 1.1 christos or out4, local3, out4 2060 1.1 christos 2061 1.1 christos ldub [in0+1], local3 2062 1.1 christos sll out4, 8, out4 2063 1.1 christos or out4, local3, out4 2064 1.1 christos 2065 1.1 christos ldub [in0+0], local3 2066 1.1 christos sll out4, 8, out4 2067 1.1 christos or out4, local3, out4 2068 1.1 christos 2069 1.1 christos 2070 1.1 christos ldub [in0+3+4], global4 2071 1.1 christos 2072 1.1 christos ldub [in0+2+4], local3 2073 1.1 christos sll global4, 8, global4 2074 1.1 christos or global4, local3, global4 2075 1.1 christos 2076 1.1 christos ldub [in0+1+4], local3 2077 1.1 christos sll global4, 8, global4 2078 1.1 christos or global4, local3, global4 2079 1.1 christos 2080 1.1 christos ldub [in0+0+4], local3 2081 1.1 christos sll global4, 8, global4 2082 1.1 christos or global4, local3, global4 2083 1.1 christos .LLE2a: 2084 1.1 christos 2085 1.1 christos ! block 2086 1.1 christos 2087 1.1 christos .ncbc.enc.next.block_1: 2088 1.1 christos 2089 1.1 christos xor in5, out4, in5 ! iv xor 2090 1.1 christos xor out5, global4, out5 ! iv xor 2091 1.1 christos 2092 1.1 christos ! parameter 8 1 for move in3 to in4, 2 for move in4 to in3 2093 1.1 christos 2094 1.1 christos 2095 1.1 christos ! ip_macro 2096 1.1 christos ! in5 out5 out5 in5 in3 0 0 2 2097 1.1 christos 2098 1.1 christos ld [out2+256], local1 2099 1.1 christos srl out5, 4, local4 2100 1.1 christos 2101 1.1 christos xor local4, in5, local4 2102 1.1 christos nop 2103 1.1 christos 2104 1.1 christos ld [out2+260], local2 2105 1.1 christos and local4, local1, local4 2106 1.1 christos 2107 1.1 christos mov in4, in3 2108 1.1 christos 2109 1.1 christos ld [out2+280], out4 ! loop counter 2110 1.1 christos sll local4, 4, local1 2111 1.1 christos xor in5, local4, in5 2112 1.1 christos 2113 1.1 christos ld [out2+264], local3 2114 1.1 christos srl in5, 16, local4 2115 1.1 christos xor out5, local1, out5 2116 1.1 christos 2117 1.1 christos 2118 1.1 christos xor local4, out5, local4 2119 1.1 christos nop !sethi %hi(DES_SPtrans), global1 ! sbox addr 2120 1.1 christos 2121 1.1 christos 2122 1.1 christos and local4, local2, local4 2123 1.1 christos nop !or global1, %lo(DES_SPtrans), global1 ! sbox addr 2124 1.1 christos 2125 1.1 christos sll local4, 16, local1 2126 1.1 christos xor out5, local4, out5 2127 1.1 christos 2128 1.1 christos srl out5, 2, local4 2129 1.1 christos xor in5, local1, in5 2130 1.1 christos 2131 1.1 christos sethi %hi(16711680), local5 2132 1.1 christos xor local4, in5, local4 2133 1.1 christos 2134 1.1 christos and local4, local3, local4 2135 1.1 christos or local5, 255, local5 2136 1.1 christos 2137 1.1 christos sll local4, 2, local2 2138 1.1 christos xor in5, local4, in5 2139 1.1 christos 2140 1.1 christos srl in5, 8, local4 2141 1.1 christos xor out5, local2, out5 2142 1.1 christos 2143 1.1 christos xor local4, out5, local4 2144 1.1 christos add global1, 768, global4 2145 1.1 christos 2146 1.1 christos and local4, local5, local4 2147 1.1 christos add global1, 1024, global5 2148 1.1 christos 2149 1.1 christos ld [out2+272], local7 2150 1.1 christos sll local4, 8, local1 2151 1.1 christos xor out5, local4, out5 2152 1.1 christos 2153 1.1 christos srl out5, 1, local4 2154 1.1 christos xor in5, local1, in5 2155 1.1 christos 2156 1.1 christos ld [in3], out0 ! key 7531 2157 1.1 christos xor local4, in5, local4 2158 1.1 christos add global1, 256, global2 2159 1.1 christos 2160 1.1 christos ld [in3+4], out1 ! key 8642 2161 1.1 christos and local4, local7, local4 2162 1.1 christos add global1, 512, global3 2163 1.1 christos 2164 1.1 christos sll local4, 1, local1 2165 1.1 christos xor in5, local4, in5 2166 1.1 christos 2167 1.1 christos sll in5, 3, local3 2168 1.1 christos xor out5, local1, out5 2169 1.1 christos 2170 1.1 christos sll out5, 3, local2 2171 1.1 christos add global1, 1280, local6 ! address sbox 8 2172 1.1 christos 2173 1.1 christos srl in5, 29, local4 2174 1.1 christos add global1, 1792, out3 ! address sbox 8 2175 1.1 christos 2176 1.1 christos srl out5, 29, local1 2177 1.1 christos or local4, local3, out5 2178 1.1 christos 2179 1.1 christos or local2, local1, in5 2180 1.1 christos 2181 1.1 christos 2182 1.1 christos 2183 1.1 christos 2184 1.1 christos 2185 1.1 christos 2186 1.1 christos .ncbc.enc.next.block_2: 2187 1.1 christos 2188 1.1 christos !// call .des_enc ! compares in2 to 8 2189 1.1 christos ! rounds inlined for alignment purposes 2190 1.1 christos 2191 1.1 christos add global1, 768, global4 ! address sbox 4 since register used below 2192 1.1 christos 2193 1.1 christos 2194 1.1 christos 2195 1.1 christos ! rounds_macro 2196 1.1 christos ! in5 out5 1 .ncbc.enc.1 in3 in4 2197 1.1 christos 2198 1.1 christos xor out5, out0, local1 2199 1.1 christos 2200 1.1 christos ld [out2+284], local5 ! 0x0000FC00 2201 1.1 christos ba .ncbc.enc.1 2202 1.1 christos and local1, 252, local1 2203 1.1 christos 2204 1.1 christos .align 32 2205 1.1 christos 2206 1.1 christos .ncbc.enc.1: 2207 1.1 christos ! local6 is address sbox 6 2208 1.1 christos ! out3 is address sbox 8 2209 1.1 christos ! out4 is loop counter 2210 1.1 christos 2211 1.1 christos ld [global1+local1], local1 2212 1.1 christos xor out5, out1, out1 ! 8642 2213 1.1 christos xor out5, out0, out0 ! 7531 2214 1.1 christos ! fmovs %f0, %f0 ! fxor used for alignment 2215 1.1 christos 2216 1.1 christos srl out1, 4, local0 ! rotate 4 right 2217 1.1 christos and out0, local5, local3 ! 3 2218 1.1 christos ! fmovs %f0, %f0 2219 1.1 christos 2220 1.1 christos ld [in3+1*8], local7 ! key 7531 next round 2221 1.1 christos srl local3, 8, local3 ! 3 2222 1.1 christos and local0, 252, local2 ! 2 2223 1.1 christos ! fmovs %f0, %f0 2224 1.1 christos 2225 1.1 christos ld [global3+local3],local3 ! 3 2226 1.1 christos sll out1, 28, out1 ! rotate 2227 1.1 christos xor in5, local1, in5 ! 1 finished, local1 now sbox 7 2228 1.1 christos 2229 1.1.1.2 christos ld [global2+local2], local2 ! 2 2230 1.1 christos srl out0, 24, local1 ! 7 2231 1.1 christos or out1, local0, out1 ! rotate 2232 1.1 christos 2233 1.1 christos ldub [out2+local1], local1 ! 7 (and 0xFC) 2234 1.1 christos srl out1, 24, local0 ! 8 2235 1.1 christos and out1, local5, local4 ! 4 2236 1.1 christos 2237 1.1 christos ldub [out2+local0], local0 ! 8 (and 0xFC) 2238 1.1 christos srl local4, 8, local4 ! 4 2239 1.1 christos xor in5, local2, in5 ! 2 finished local2 now sbox 6 2240 1.1 christos 2241 1.1 christos ld [global4+local4],local4 ! 4 2242 1.1 christos srl out1, 16, local2 ! 6 2243 1.1 christos xor in5, local3, in5 ! 3 finished local3 now sbox 5 2244 1.1 christos 2245 1.1 christos ld [out3+local0],local0 ! 8 2246 1.1 christos and local2, 252, local2 ! 6 2247 1.1 christos add global1, 1536, local5 ! address sbox 7 2248 1.1 christos 2249 1.1 christos ld [local6+local2], local2 ! 6 2250 1.1 christos srl out0, 16, local3 ! 5 2251 1.1 christos xor in5, local4, in5 ! 4 finished 2252 1.1 christos 2253 1.1 christos ld [local5+local1],local1 ! 7 2254 1.1 christos and local3, 252, local3 ! 5 2255 1.1 christos xor in5, local0, in5 ! 8 finished 2256 1.1 christos 2257 1.1 christos ld [global5+local3],local3 ! 5 2258 1.1 christos xor in5, local2, in5 ! 6 finished 2259 1.1 christos subcc out4, 1, out4 2260 1.1 christos 2261 1.1 christos ld [in3+1*8+4], out0 ! key 8642 next round 2262 1.1 christos xor in5, local7, local2 ! sbox 5 next round 2263 1.1 christos xor in5, local1, in5 ! 7 finished 2264 1.1 christos 2265 1.1 christos srl local2, 16, local2 ! sbox 5 next round 2266 1.1 christos xor in5, local3, in5 ! 5 finished 2267 1.1 christos 2268 1.1 christos ld [in3+1*16+4], out1 ! key 8642 next round again 2269 1.1 christos and local2, 252, local2 ! sbox5 next round 2270 1.1 christos ! next round 2271 1.1 christos xor in5, local7, local7 ! 7531 2272 1.1 christos 2273 1.1 christos ld [global5+local2], local2 ! 5 2274 1.1 christos srl local7, 24, local3 ! 7 2275 1.1 christos xor in5, out0, out0 ! 8642 2276 1.1 christos 2277 1.1 christos ldub [out2+local3], local3 ! 7 (and 0xFC) 2278 1.1 christos srl out0, 4, local0 ! rotate 4 right 2279 1.1 christos and local7, 252, local1 ! 1 2280 1.1 christos 2281 1.1 christos sll out0, 28, out0 ! rotate 2282 1.1 christos xor out5, local2, out5 ! 5 finished local2 used 2283 1.1 christos 2284 1.1 christos srl local0, 8, local4 ! 4 2285 1.1 christos and local0, 252, local2 ! 2 2286 1.1 christos ld [local5+local3], local3 ! 7 2287 1.1 christos 2288 1.1 christos srl local0, 16, local5 ! 6 2289 1.1 christos or out0, local0, out0 ! rotate 2290 1.1 christos ld [global2+local2], local2 ! 2 2291 1.1 christos 2292 1.1 christos srl out0, 24, local0 2293 1.1 christos ld [in3+1*16], out0 ! key 7531 next round 2294 1.1 christos and local4, 252, local4 ! 4 2295 1.1 christos 2296 1.1 christos and local5, 252, local5 ! 6 2297 1.1 christos ld [global4+local4], local4 ! 4 2298 1.1 christos xor out5, local3, out5 ! 7 finished local3 used 2299 1.1 christos 2300 1.1 christos and local0, 252, local0 ! 8 2301 1.1 christos ld [local6+local5], local5 ! 6 2302 1.1 christos xor out5, local2, out5 ! 2 finished local2 now sbox 3 2303 1.1 christos 2304 1.1 christos srl local7, 8, local2 ! 3 start 2305 1.1 christos ld [out3+local0], local0 ! 8 2306 1.1 christos xor out5, local4, out5 ! 4 finished 2307 1.1 christos 2308 1.1 christos and local2, 252, local2 ! 3 2309 1.1 christos ld [global1+local1], local1 ! 1 2310 1.1 christos xor out5, local5, out5 ! 6 finished local5 used 2311 1.1 christos 2312 1.1 christos ld [global3+local2], local2 ! 3 2313 1.1 christos xor out5, local0, out5 ! 8 finished 2314 1.1 christos add in3, 1*16, in3 ! enc add 8, dec add -8 to key pointer 2315 1.1 christos 2316 1.1 christos ld [out2+284], local5 ! 0x0000FC00 2317 1.1 christos xor out5, out0, local4 ! sbox 1 next round 2318 1.1 christos xor out5, local1, out5 ! 1 finished 2319 1.1 christos 2320 1.1 christos xor out5, local2, out5 ! 3 finished 2321 1.1 christos bne .ncbc.enc.1 2322 1.1 christos and local4, 252, local1 ! sbox 1 next round 2323 1.1 christos 2324 1.1 christos ! two rounds more: 2325 1.1 christos 2326 1.1 christos ld [global1+local1], local1 2327 1.1 christos xor out5, out1, out1 2328 1.1 christos xor out5, out0, out0 2329 1.1 christos 2330 1.1 christos srl out1, 4, local0 ! rotate 2331 1.1 christos and out0, local5, local3 2332 1.1 christos 2333 1.1 christos ld [in3+1*8], local7 ! key 7531 2334 1.1 christos srl local3, 8, local3 2335 1.1 christos and local0, 252, local2 2336 1.1 christos 2337 1.1 christos ld [global3+local3],local3 2338 1.1 christos sll out1, 28, out1 ! rotate 2339 1.1 christos xor in5, local1, in5 ! 1 finished, local1 now sbox 7 2340 1.1 christos 2341 1.1 christos ld [global2+local2], local2 2342 1.1 christos srl out0, 24, local1 2343 1.1 christos or out1, local0, out1 ! rotate 2344 1.1 christos 2345 1.1 christos ldub [out2+local1], local1 2346 1.1 christos srl out1, 24, local0 2347 1.1 christos and out1, local5, local4 2348 1.1 christos 2349 1.1 christos ldub [out2+local0], local0 2350 1.1 christos srl local4, 8, local4 2351 1.1 christos xor in5, local2, in5 ! 2 finished local2 now sbox 6 2352 1.1 christos 2353 1.1 christos ld [global4+local4],local4 2354 1.1 christos srl out1, 16, local2 2355 1.1 christos xor in5, local3, in5 ! 3 finished local3 now sbox 5 2356 1.1 christos 2357 1.1 christos ld [out3+local0],local0 2358 1.1 christos and local2, 252, local2 2359 1.1 christos add global1, 1536, local5 ! address sbox 7 2360 1.1 christos 2361 1.1 christos ld [local6+local2], local2 2362 1.1 christos srl out0, 16, local3 2363 1.1 christos xor in5, local4, in5 ! 4 finished 2364 1.1 christos 2365 1.1 christos ld [local5+local1],local1 2366 1.1 christos and local3, 252, local3 2367 1.1 christos xor in5, local0, in5 2368 1.1 christos 2369 1.1 christos ld [global5+local3],local3 2370 1.1 christos xor in5, local2, in5 ! 6 finished 2371 1.1 christos cmp in2, 8 2372 1.1 christos 2373 1.1 christos ld [out2+280], out4 ! loop counter 2374 1.1 christos xor in5, local7, local2 ! sbox 5 next round 2375 1.1 christos xor in5, local1, in5 ! 7 finished 2376 1.1 christos 2377 1.1 christos ld [in3+1*8+4], out0 2378 1.1 christos srl local2, 16, local2 ! sbox 5 next round 2379 1.1 christos xor in5, local3, in5 ! 5 finished 2380 1.1 christos 2381 1.1 christos and local2, 252, local2 2382 1.1 christos ! next round (two rounds more) 2383 1.1 christos xor in5, local7, local7 ! 7531 2384 1.1 christos 2385 1.1 christos ld [global5+local2], local2 2386 1.1 christos srl local7, 24, local3 2387 1.1 christos xor in5, out0, out0 ! 8642 2388 1.1 christos 2389 1.1 christos ldub [out2+local3], local3 2390 1.1 christos srl out0, 4, local0 ! rotate 2391 1.1 christos and local7, 252, local1 2392 1.1 christos 2393 1.1 christos sll out0, 28, out0 ! rotate 2394 1.1 christos xor out5, local2, out5 ! 5 finished local2 used 2395 1.1 christos 2396 1.1 christos srl local0, 8, local4 2397 1.1 christos and local0, 252, local2 2398 1.1 christos ld [local5+local3], local3 2399 1.1 christos 2400 1.1 christos srl local0, 16, local5 2401 1.1 christos or out0, local0, out0 ! rotate 2402 1.1 christos ld [global2+local2], local2 2403 1.1 christos 2404 1.1 christos srl out0, 24, local0 2405 1.1 christos ld [in4], out0 ! key next encryption/decryption 2406 1.1 christos and local4, 252, local4 2407 1.1 christos 2408 1.1 christos and local5, 252, local5 2409 1.1 christos ld [global4+local4], local4 2410 1.1 christos xor out5, local3, out5 ! 7 finished local3 used 2411 1.1 christos 2412 1.1 christos and local0, 252, local0 2413 1.1 christos ld [local6+local5], local5 2414 1.1 christos xor out5, local2, out5 ! 2 finished local2 now sbox 3 2415 1.1 christos 2416 1.1 christos srl local7, 8, local2 ! 3 start 2417 1.1 christos ld [out3+local0], local0 2418 1.1 christos xor out5, local4, out5 2419 1.1 christos 2420 1.1 christos and local2, 252, local2 2421 1.1 christos ld [global1+local1], local1 2422 1.1 christos xor out5, local5, out5 ! 6 finished local5 used 2423 1.1 christos 2424 1.1 christos ld [global3+local2], local2 2425 1.1 christos srl in5, 3, local3 2426 1.1 christos xor out5, local0, out5 2427 1.1 christos 2428 1.1 christos ld [in4+4], out1 ! key next encryption/decryption 2429 1.1 christos sll in5, 29, local4 2430 1.1 christos xor out5, local1, out5 2431 1.1 christos 2432 1.1 christos 2433 1.1 christos xor out5, local2, out5 2434 1.1 christos ! include encryption ks in3 2435 1.1 christos 2436 1.1 christos bl .ncbc.enc.next.block_fp 2437 1.1 christos add in0, 8, in0 ! input address 2438 1.1 christos 2439 1.1 christos ! If 8 or more bytes are to be encrypted after this block, 2440 1.1 christos ! we combine final permutation for this block with initial 2441 1.1 christos ! permutation for next block. Load next block: 2442 1.1 christos 2443 1.1 christos 2444 1.1 christos 2445 1.1 christos ! load_little_endian 2446 1.1 christos ! in0 global3 global4 local5 .LLE12 2447 1.1 christos 2448 1.1 christos ! first in memory to rightmost in register 2449 1.1 christos 2450 1.1 christos .LLE12: 2451 1.1 christos ldub [in0+3], global3 2452 1.1 christos 2453 1.1 christos ldub [in0+2], local5 2454 1.1 christos sll global3, 8, global3 2455 1.1 christos or global3, local5, global3 2456 1.1 christos 2457 1.1 christos ldub [in0+1], local5 2458 1.1 christos sll global3, 8, global3 2459 1.1 christos or global3, local5, global3 2460 1.1 christos 2461 1.1 christos ldub [in0+0], local5 2462 1.1 christos sll global3, 8, global3 2463 1.1 christos or global3, local5, global3 2464 1.1 christos 2465 1.1 christos 2466 1.1 christos ldub [in0+3+4], global4 2467 1.1 christos 2468 1.1 christos ldub [in0+2+4], local5 2469 1.1 christos sll global4, 8, global4 2470 1.1 christos or global4, local5, global4 2471 1.1 christos 2472 1.1 christos ldub [in0+1+4], local5 2473 1.1 christos sll global4, 8, global4 2474 1.1 christos or global4, local5, global4 2475 1.1 christos 2476 1.1 christos ldub [in0+0+4], local5 2477 1.1 christos sll global4, 8, global4 2478 1.1 christos or global4, local5, global4 2479 1.1 christos .LLE12a: 2480 1.1 christos 2481 1.1 christos 2482 1.1 christos 2483 1.1 christos ! parameter 1 original left 2484 1.1 christos ! parameter 2 original right 2485 1.1 christos ! parameter 3 left ip 2486 1.1 christos ! parameter 4 right ip 2487 1.1 christos ! parameter 5 1: load ks1/ks2 to in3/in4, add 120 to in4 2488 1.1 christos ! 2: mov in4 to in3 2489 1.1 christos ! 2490 1.1 christos ! also adds -8 to length in2 and loads loop counter to out4 2491 1.1 christos 2492 1.1 christos 2493 1.1 christos 2494 1.1 christos ! fp_ip_macro 2495 1.1 christos ! out0 out1 global3 global4 2 2496 1.1 christos 2497 1.1 christos 2498 1.1 christos 2499 1.1 christos 2500 1.1 christos 2501 1.1 christos 2502 1.1 christos 2503 1.1 christos 2504 1.1 christos 2505 1.1 christos ! out0 in local3, local4 2506 1.1 christos 2507 1.1 christos ld [out2+256], local1 2508 1.1 christos sll out5, 29, out4 2509 1.1 christos or local3, local4, out0 2510 1.1 christos 2511 1.1 christos srl out5, 3, out1 2512 1.1 christos mov in4, in3 2513 1.1 christos 2514 1.1 christos ld [out2+272], local5 2515 1.1 christos srl global4, 4, local0 2516 1.1 christos or out1, out4, out1 2517 1.1 christos 2518 1.1 christos srl out1, 1, out4 2519 1.1 christos xor out4, out0, out4 2520 1.1 christos 2521 1.1 christos and out4, local5, out4 2522 1.1 christos xor local0, global3, local0 2523 1.1 christos 2524 1.1 christos sll out4, 1, local3 2525 1.1 christos xor out0, out4, out0 2526 1.1 christos 2527 1.1 christos and local0, local1, local0 2528 1.1 christos add in2, -8, in2 2529 1.1 christos 2530 1.1 christos sll local0, 4, local7 2531 1.1 christos xor global3, local0, global3 2532 1.1 christos 2533 1.1 christos ld [out2+268], local4 2534 1.1 christos srl out0, 8, out4 2535 1.1 christos xor out1, local3, out1 2536 1.1 christos ld [out2+260], local2 2537 1.1 christos srl global3, 16, local0 2538 1.1 christos xor global4, local7, global4 2539 1.1 christos xor out4, out1, out4 2540 1.1 christos xor local0, global4, local0 2541 1.1 christos and out4, local4, out4 2542 1.1 christos and local0, local2, local0 2543 1.1 christos sll out4, 8, local3 2544 1.1 christos xor out1, out4, out1 2545 1.1 christos sll local0, 16, local7 2546 1.1 christos xor global4, local0, global4 2547 1.1 christos 2548 1.1 christos srl out1, 2, out4 2549 1.1 christos xor out0, local3, out0 2550 1.1 christos 2551 1.1 christos ld [out2+264], local3 ! ip3 2552 1.1 christos srl global4, 2, local0 2553 1.1 christos xor global3, local7, global3 2554 1.1 christos xor out4, out0, out4 2555 1.1 christos xor local0, global3, local0 2556 1.1 christos and out4, local3, out4 2557 1.1 christos and local0, local3, local0 2558 1.1 christos sll out4, 2, local3 2559 1.1 christos xor out0, out4, out0 2560 1.1 christos sll local0, 2, local7 2561 1.1 christos xor global3, local0, global3 2562 1.1 christos 2563 1.1 christos srl out0, 16, out4 2564 1.1 christos xor out1, local3, out1 2565 1.1 christos srl global3, 8, local0 2566 1.1 christos xor global4, local7, global4 2567 1.1 christos xor out4, out1, out4 2568 1.1 christos xor local0, global4, local0 2569 1.1 christos and out4, local2, out4 2570 1.1 christos and local0, local4, local0 2571 1.1 christos sll out4, 16, local3 2572 1.1 christos xor out1, out4, local4 2573 1.1 christos sll local0, 8, local7 2574 1.1 christos xor global4, local0, global4 2575 1.1 christos 2576 1.1 christos srl global4, 1, local0 2577 1.1 christos xor global3, local7, global3 2578 1.1 christos 2579 1.1 christos srl local4, 4, out4 2580 1.1 christos xor local0, global3, local0 2581 1.1 christos 2582 1.1 christos xor out0, local3, out0 2583 1.1 christos and local0, local5, local0 2584 1.1 christos 2585 1.1 christos sll local0, 1, local7 2586 1.1 christos xor out4, out0, out4 2587 1.1 christos 2588 1.1 christos xor global3, local0, global3 2589 1.1 christos xor global4, local7, global4 2590 1.1 christos 2591 1.1 christos sll global3, 3, local5 2592 1.1 christos and out4, local1, out4 2593 1.1 christos 2594 1.1 christos sll out4, 4, local3 2595 1.1 christos xor out0, out4, out0 2596 1.1 christos 2597 1.1 christos 2598 1.1 christos sll global4, 3, local2 2599 1.1 christos xor local4, local3, out1 2600 1.1 christos 2601 1.1.1.2 christos ! reload since used as temporary: 2602 1.1 christos 2603 1.1 christos ld [out2+280], out4 ! loop counter 2604 1.1 christos 2605 1.1 christos srl global3, 29, local0 2606 1.1 christos 2607 1.1 christos 2608 1.1 christos 2609 1.1 christos srl global4, 29, local7 2610 1.1 christos 2611 1.1 christos or local0, local5, global4 2612 1.1 christos or local2, local7, global3 2613 1.1 christos 2614 1.1 christos 2615 1.1 christos 2616 1.1 christos 2617 1.1 christos 2618 1.1 christos ! store_little_endian 2619 1.1 christos ! in1 out0 out1 local3 .SLE10 2620 1.1 christos 2621 1.1 christos ! rightmost in register to first in memory 2622 1.1 christos 2623 1.1 christos .SLE10: 2624 1.1 christos and out0, 255, local3 2625 1.1 christos stub local3, [in1+0] 2626 1.1 christos 2627 1.1 christos srl out0, 8, local3 2628 1.1 christos and local3, 255, local3 2629 1.1 christos stub local3, [in1+1] 2630 1.1 christos 2631 1.1 christos srl out0, 16, local3 2632 1.1 christos and local3, 255, local3 2633 1.1 christos stub local3, [in1+2] 2634 1.1 christos 2635 1.1 christos srl out0, 24, local3 2636 1.1 christos stub local3, [in1+3] 2637 1.1 christos 2638 1.1 christos 2639 1.1 christos and out1, 255, local3 2640 1.1 christos stub local3, [in1+0+4] 2641 1.1 christos 2642 1.1 christos srl out1, 8, local3 2643 1.1 christos and local3, 255, local3 2644 1.1 christos stub local3, [in1+1+4] 2645 1.1 christos 2646 1.1 christos srl out1, 16, local3 2647 1.1 christos and local3, 255, local3 2648 1.1 christos stub local3, [in1+2+4] 2649 1.1 christos 2650 1.1 christos srl out1, 24, local3 2651 1.1 christos stub local3, [in1+3+4] 2652 1.1 christos 2653 1.1 christos .SLE10a: 2654 1.1 christos 2655 1.1 christos ! block 2656 1.1 christos 2657 1.1 christos ld [in3], out0 ! key 7531 first round next block 2658 1.1 christos mov in5, local1 2659 1.1 christos xor global3, out5, in5 ! iv xor next block 2660 1.1 christos 2661 1.1 christos ld [in3+4], out1 ! key 8642 2662 1.1 christos add global1, 512, global3 ! address sbox 3 since register used 2663 1.1 christos xor global4, local1, out5 ! iv xor next block 2664 1.1 christos 2665 1.1 christos ba .ncbc.enc.next.block_2 2666 1.1.1.2 christos add in1, 8, in1 ! output address 2667 1.1 christos 2668 1.1 christos .ncbc.enc.next.block_fp: 2669 1.1 christos 2670 1.1 christos 2671 1.1 christos 2672 1.1 christos ! fp_macro 2673 1.1 christos ! in5 out5 2674 1.1 christos 2675 1.1 christos ! initially undo the rotate 3 left done after initial permutation 2676 1.1 christos ! original left is received shifted 3 right and 29 left in local3/4 2677 1.1 christos 2678 1.1 christos sll out5, 29, local1 2679 1.1 christos or local3, local4, in5 2680 1.1 christos 2681 1.1 christos srl out5, 3, out5 2682 1.1 christos sethi %hi(0x55555555), local2 2683 1.1 christos 2684 1.1 christos or out5, local1, out5 2685 1.1 christos or local2, %lo(0x55555555), local2 2686 1.1 christos 2687 1.1 christos srl out5, 1, local3 2688 1.1 christos sethi %hi(0x00ff00ff), local1 2689 1.1 christos xor local3, in5, local3 2690 1.1 christos or local1, %lo(0x00ff00ff), local1 2691 1.1 christos and local3, local2, local3 2692 1.1 christos sethi %hi(0x33333333), local4 2693 1.1 christos sll local3, 1, local2 2694 1.1 christos 2695 1.1 christos xor in5, local3, in5 2696 1.1 christos 2697 1.1 christos srl in5, 8, local3 2698 1.1 christos xor out5, local2, out5 2699 1.1 christos xor local3, out5, local3 2700 1.1 christos or local4, %lo(0x33333333), local4 2701 1.1 christos and local3, local1, local3 2702 1.1 christos sethi %hi(0x0000ffff), local1 2703 1.1 christos sll local3, 8, local2 2704 1.1 christos 2705 1.1 christos xor out5, local3, out5 2706 1.1 christos 2707 1.1 christos srl out5, 2, local3 2708 1.1 christos xor in5, local2, in5 2709 1.1 christos xor local3, in5, local3 2710 1.1 christos or local1, %lo(0x0000ffff), local1 2711 1.1 christos and local3, local4, local3 2712 1.1 christos sethi %hi(0x0f0f0f0f), local4 2713 1.1 christos sll local3, 2, local2 2714 1.1 christos 2715 1.1 christos 2716 1.1 christos xor in5, local3, in5 2717 1.1 christos 2718 1.1 christos 2719 1.1 christos srl in5, 16, local3 2720 1.1 christos xor out5, local2, out5 2721 1.1 christos xor local3, out5, local3 2722 1.1 christos or local4, %lo(0x0f0f0f0f), local4 2723 1.1 christos and local3, local1, local3 2724 1.1 christos sll local3, 16, local2 2725 1.1 christos 2726 1.1 christos xor out5, local3, local1 2727 1.1 christos 2728 1.1 christos srl local1, 4, local3 2729 1.1 christos xor in5, local2, in5 2730 1.1 christos xor local3, in5, local3 2731 1.1 christos and local3, local4, local3 2732 1.1 christos sll local3, 4, local2 2733 1.1 christos 2734 1.1 christos xor in5, local3, in5 2735 1.1 christos 2736 1.1 christos ! optional store: 2737 1.1 christos 2738 1.1 christos 2739 1.1 christos 2740 1.1 christos xor local1, local2, out5 2741 1.1 christos 2742 1.1 christos 2743 1.1 christos 2744 1.1 christos 2745 1.1 christos 2746 1.1 christos 2747 1.1 christos 2748 1.1 christos ! store_little_endian 2749 1.1 christos ! in1 in5 out5 local3 .SLE1 2750 1.1 christos 2751 1.1 christos ! rightmost in register to first in memory 2752 1.1 christos 2753 1.1 christos .SLE1: 2754 1.1 christos and in5, 255, local3 2755 1.1 christos stub local3, [in1+0] 2756 1.1 christos 2757 1.1 christos srl in5, 8, local3 2758 1.1 christos and local3, 255, local3 2759 1.1 christos stub local3, [in1+1] 2760 1.1 christos 2761 1.1 christos srl in5, 16, local3 2762 1.1 christos and local3, 255, local3 2763 1.1 christos stub local3, [in1+2] 2764 1.1 christos 2765 1.1 christos srl in5, 24, local3 2766 1.1 christos stub local3, [in1+3] 2767 1.1 christos 2768 1.1 christos 2769 1.1 christos and out5, 255, local3 2770 1.1 christos stub local3, [in1+0+4] 2771 1.1 christos 2772 1.1 christos srl out5, 8, local3 2773 1.1 christos and local3, 255, local3 2774 1.1 christos stub local3, [in1+1+4] 2775 1.1 christos 2776 1.1 christos srl out5, 16, local3 2777 1.1 christos and local3, 255, local3 2778 1.1 christos stub local3, [in1+2+4] 2779 1.1 christos 2780 1.1 christos srl out5, 24, local3 2781 1.1 christos stub local3, [in1+3+4] 2782 1.1 christos 2783 1.1 christos .SLE1a: 2784 1.1 christos 2785 1.1 christos ! block 2786 1.1 christos 2787 1.1 christos addcc in2, -8, in2 ! bytes missing when next block done 2788 1.1 christos 2789 1.1 christos bpos .ncbc.enc.next.block 2790 1.1 christos add in1, 8, in1 2791 1.1 christos 2792 1.1 christos .ncbc.enc.seven.or.less: 2793 1.1 christos 2794 1.1 christos cmp in2, -8 2795 1.1 christos 2796 1.1 christos ble .ncbc.enc.finish 2797 1.1 christos nop 2798 1.1 christos 2799 1.1 christos add in2, 8, local1 ! bytes to load 2800 1.1 christos 2801 1.1 christos ! addr, length, dest left, dest right, temp, local3, label, ret label 2802 1.1 christos 2803 1.1 christos 2804 1.1 christos ! load_n_bytes 2805 1.1 christos ! in0 local1 local2 local3 .LNB1 .ncbc.enc.next.block_1 .LNB1 .ncbc.enc.next.block_1 2806 1.1 christos 2807 1.1 christos .LNB1.0: call .+8 2808 1.1 christos sll local1, 2, local3 2809 1.1 christos 2810 1.1 christos add %o7,.LNB1.jmp.table-.LNB1.0,local2 2811 1.1 christos 2812 1.1 christos add local2, local3, local2 2813 1.1 christos mov 0, out4 2814 1.1 christos 2815 1.1 christos ld [local2], local2 2816 1.1 christos 2817 1.1 christos jmp %o7+local2 2818 1.1 christos mov 0, global4 2819 1.1 christos 2820 1.1 christos .LNB1.7: 2821 1.1 christos ldub [in0+6], local2 2822 1.1 christos sll local2, 16, local2 2823 1.1 christos or global4, local2, global4 2824 1.1 christos .LNB1.6: 2825 1.1 christos ldub [in0+5], local2 2826 1.1 christos sll local2, 8, local2 2827 1.1 christos or global4, local2, global4 2828 1.1 christos .LNB1.5: 2829 1.1 christos ldub [in0+4], local2 2830 1.1 christos or global4, local2, global4 2831 1.1 christos .LNB1.4: 2832 1.1 christos ldub [in0+3], local2 2833 1.1 christos sll local2, 24, local2 2834 1.1 christos or out4, local2, out4 2835 1.1 christos .LNB1.3: 2836 1.1 christos ldub [in0+2], local2 2837 1.1 christos sll local2, 16, local2 2838 1.1 christos or out4, local2, out4 2839 1.1 christos .LNB1.2: 2840 1.1 christos ldub [in0+1], local2 2841 1.1 christos sll local2, 8, local2 2842 1.1 christos or out4, local2, out4 2843 1.1 christos .LNB1.1: 2844 1.1 christos ldub [in0+0], local2 2845 1.1 christos ba .ncbc.enc.next.block_1 2846 1.1 christos or out4, local2, out4 2847 1.1 christos 2848 1.1 christos .align 4 2849 1.1 christos 2850 1.1 christos .LNB1.jmp.table: 2851 1.1 christos .word 0 2852 1.1 christos .word .LNB1.1-.LNB1.0 2853 1.1 christos .word .LNB1.2-.LNB1.0 2854 1.1 christos .word .LNB1.3-.LNB1.0 2855 1.1 christos .word .LNB1.4-.LNB1.0 2856 1.1 christos .word .LNB1.5-.LNB1.0 2857 1.1 christos .word .LNB1.6-.LNB1.0 2858 1.1 christos .word .LNB1.7-.LNB1.0 2859 1.1 christos 2860 1.1 christos 2861 1.1 christos ! Loads 1 to 7 bytes little endian to global4, out4 2862 1.1 christos 2863 1.1 christos 2864 1.1 christos .ncbc.enc.finish: 2865 1.1 christos 2866 1.1 christos LDPTR [%sp+BIAS+ARG0+4*ARGSZ] , local4 2867 1.1 christos 2868 1.1 christos 2869 1.1 christos ! store_little_endian 2870 1.1 christos ! local4 in5 out5 local5 .SLE2 2871 1.1 christos 2872 1.1 christos ! rightmost in register to first in memory 2873 1.1 christos 2874 1.1 christos .SLE2: 2875 1.1 christos and in5, 255, local5 2876 1.1 christos stub local5, [local4+0] 2877 1.1 christos 2878 1.1 christos srl in5, 8, local5 2879 1.1 christos and local5, 255, local5 2880 1.1 christos stub local5, [local4+1] 2881 1.1 christos 2882 1.1 christos srl in5, 16, local5 2883 1.1 christos and local5, 255, local5 2884 1.1 christos stub local5, [local4+2] 2885 1.1 christos 2886 1.1 christos srl in5, 24, local5 2887 1.1 christos stub local5, [local4+3] 2888 1.1 christos 2889 1.1 christos 2890 1.1 christos and out5, 255, local5 2891 1.1 christos stub local5, [local4+0+4] 2892 1.1 christos 2893 1.1 christos srl out5, 8, local5 2894 1.1 christos and local5, 255, local5 2895 1.1 christos stub local5, [local4+1+4] 2896 1.1 christos 2897 1.1 christos srl out5, 16, local5 2898 1.1 christos and local5, 255, local5 2899 1.1 christos stub local5, [local4+2+4] 2900 1.1 christos 2901 1.1 christos srl out5, 24, local5 2902 1.1 christos stub local5, [local4+3+4] 2903 1.1 christos 2904 1.1 christos .SLE2a: 2905 1.1 christos 2906 1.1 christos ! ivec 2907 1.1 christos 2908 1.1 christos ret 2909 1.1 christos restore 2910 1.1 christos 2911 1.1 christos 2912 1.1 christos .ncbc.dec: 2913 1.1 christos 2914 1.1 christos STPTR in0, [%sp+BIAS+ARG0+0*ARGSZ] 2915 1.1 christos cmp in2, 0 ! length 2916 1.1 christos add in3, 120, in3 2917 1.1 christos 2918 1.1 christos LDPTR [%sp+BIAS+ARG0+4*ARGSZ] , local7 ! ivec 2919 1.1 christos ble .ncbc.dec.finish 2920 1.1 christos mov in3, in4 ! schedule 2921 1.1 christos 2922 1.1 christos STPTR in1, [%sp+BIAS+ARG0+1*ARGSZ] 2923 1.1 christos mov in0, local5 ! input 2924 1.1 christos 2925 1.1 christos 2926 1.1 christos 2927 1.1 christos ! load_little_endian 2928 1.1 christos ! local7 in0 in1 local3 .LLE3 2929 1.1 christos 2930 1.1 christos ! first in memory to rightmost in register 2931 1.1 christos 2932 1.1 christos .LLE3: 2933 1.1 christos ldub [local7+3], in0 2934 1.1 christos 2935 1.1 christos ldub [local7+2], local3 2936 1.1 christos sll in0, 8, in0 2937 1.1 christos or in0, local3, in0 2938 1.1 christos 2939 1.1 christos ldub [local7+1], local3 2940 1.1 christos sll in0, 8, in0 2941 1.1 christos or in0, local3, in0 2942 1.1 christos 2943 1.1 christos ldub [local7+0], local3 2944 1.1 christos sll in0, 8, in0 2945 1.1 christos or in0, local3, in0 2946 1.1 christos 2947 1.1 christos 2948 1.1 christos ldub [local7+3+4], in1 2949 1.1 christos 2950 1.1 christos ldub [local7+2+4], local3 2951 1.1 christos sll in1, 8, in1 2952 1.1 christos or in1, local3, in1 2953 1.1 christos 2954 1.1 christos ldub [local7+1+4], local3 2955 1.1 christos sll in1, 8, in1 2956 1.1 christos or in1, local3, in1 2957 1.1 christos 2958 1.1 christos ldub [local7+0+4], local3 2959 1.1 christos sll in1, 8, in1 2960 1.1 christos or in1, local3, in1 2961 1.1 christos .LLE3a: 2962 1.1 christos 2963 1.1 christos ! ivec 2964 1.1 christos 2965 1.1 christos .ncbc.dec.next.block: 2966 1.1 christos 2967 1.1 christos 2968 1.1 christos 2969 1.1 christos ! load_little_endian 2970 1.1 christos ! local5 in5 out5 local3 .LLE4 2971 1.1 christos 2972 1.1 christos ! first in memory to rightmost in register 2973 1.1 christos 2974 1.1 christos .LLE4: 2975 1.1 christos ldub [local5+3], in5 2976 1.1 christos 2977 1.1 christos ldub [local5+2], local3 2978 1.1 christos sll in5, 8, in5 2979 1.1 christos or in5, local3, in5 2980 1.1 christos 2981 1.1 christos ldub [local5+1], local3 2982 1.1 christos sll in5, 8, in5 2983 1.1 christos or in5, local3, in5 2984 1.1 christos 2985 1.1 christos ldub [local5+0], local3 2986 1.1 christos sll in5, 8, in5 2987 1.1 christos or in5, local3, in5 2988 1.1 christos 2989 1.1 christos 2990 1.1 christos ldub [local5+3+4], out5 2991 1.1 christos 2992 1.1 christos ldub [local5+2+4], local3 2993 1.1 christos sll out5, 8, out5 2994 1.1 christos or out5, local3, out5 2995 1.1 christos 2996 1.1 christos ldub [local5+1+4], local3 2997 1.1 christos sll out5, 8, out5 2998 1.1 christos or out5, local3, out5 2999 1.1 christos 3000 1.1 christos ldub [local5+0+4], local3 3001 1.1 christos sll out5, 8, out5 3002 1.1 christos or out5, local3, out5 3003 1.1 christos .LLE4a: 3004 1.1 christos 3005 1.1 christos ! block 3006 1.1 christos 3007 1.1 christos ! parameter 6 1/2 for include encryption/decryption 3008 1.1 christos ! parameter 7 1 for mov in1 to in3 3009 1.1 christos ! parameter 8 1 for mov in3 to in4 3010 1.1 christos 3011 1.1 christos 3012 1.1 christos 3013 1.1 christos ! ip_macro 3014 1.1 christos ! in5 out5 in5 out5 in4 2 0 1 3015 1.1 christos 3016 1.1 christos ld [out2+256], local1 3017 1.1 christos srl out5, 4, local4 3018 1.1 christos 3019 1.1 christos xor local4, in5, local4 3020 1.1 christos nop 3021 1.1 christos 3022 1.1 christos ld [out2+260], local2 3023 1.1 christos and local4, local1, local4 3024 1.1 christos mov in3, in4 3025 1.1 christos 3026 1.1 christos 3027 1.1 christos ld [out2+280], out4 ! loop counter 3028 1.1 christos sll local4, 4, local1 3029 1.1 christos xor in5, local4, in5 3030 1.1 christos 3031 1.1 christos ld [out2+264], local3 3032 1.1 christos srl in5, 16, local4 3033 1.1 christos xor out5, local1, out5 3034 1.1 christos 3035 1.1 christos 3036 1.1 christos xor local4, out5, local4 3037 1.1 christos nop !sethi %hi(DES_SPtrans), global1 ! sbox addr 3038 1.1 christos 3039 1.1 christos 3040 1.1 christos and local4, local2, local4 3041 1.1 christos nop !or global1, %lo(DES_SPtrans), global1 ! sbox addr 3042 1.1 christos 3043 1.1 christos sll local4, 16, local1 3044 1.1 christos xor out5, local4, out5 3045 1.1 christos 3046 1.1 christos srl out5, 2, local4 3047 1.1 christos xor in5, local1, in5 3048 1.1 christos 3049 1.1 christos sethi %hi(16711680), local5 3050 1.1 christos xor local4, in5, local4 3051 1.1 christos 3052 1.1 christos and local4, local3, local4 3053 1.1 christos or local5, 255, local5 3054 1.1 christos 3055 1.1 christos sll local4, 2, local2 3056 1.1 christos xor in5, local4, in5 3057 1.1 christos 3058 1.1 christos srl in5, 8, local4 3059 1.1 christos xor out5, local2, out5 3060 1.1 christos 3061 1.1 christos xor local4, out5, local4 3062 1.1 christos add global1, 768, global4 3063 1.1 christos 3064 1.1 christos and local4, local5, local4 3065 1.1 christos add global1, 1024, global5 3066 1.1 christos 3067 1.1 christos ld [out2+272], local7 3068 1.1 christos sll local4, 8, local1 3069 1.1 christos xor out5, local4, out5 3070 1.1 christos 3071 1.1 christos srl out5, 1, local4 3072 1.1 christos xor in5, local1, in5 3073 1.1 christos 3074 1.1 christos ld [in4], out0 ! key 7531 3075 1.1 christos xor local4, in5, local4 3076 1.1 christos add global1, 256, global2 3077 1.1 christos 3078 1.1 christos ld [in4+4], out1 ! key 8642 3079 1.1 christos and local4, local7, local4 3080 1.1 christos add global1, 512, global3 3081 1.1 christos 3082 1.1 christos sll local4, 1, local1 3083 1.1 christos xor in5, local4, in5 3084 1.1 christos 3085 1.1 christos sll in5, 3, local3 3086 1.1 christos xor out5, local1, out5 3087 1.1 christos 3088 1.1 christos sll out5, 3, local2 3089 1.1 christos add global1, 1280, local6 ! address sbox 8 3090 1.1 christos 3091 1.1 christos srl in5, 29, local4 3092 1.1 christos add global1, 1792, out3 ! address sbox 8 3093 1.1 christos 3094 1.1 christos srl out5, 29, local1 3095 1.1 christos or local4, local3, in5 3096 1.1 christos 3097 1.1 christos or local2, local1, out5 3098 1.1 christos 3099 1.1 christos 3100 1.1 christos 3101 1.1 christos 3102 1.1 christos 3103 1.1 christos ld [out2+284], local5 ! 0x0000FC00 used in the rounds 3104 1.1 christos or local2, local1, out5 3105 1.1 christos xor in5, out0, local1 3106 1.1 christos 3107 1.1 christos call .des_dec.1 3108 1.1 christos and local1, 252, local1 3109 1.1 christos 3110 1.1 christos 3111 1.1.1.2 christos ! include decryption ks in4 3112 1.1 christos 3113 1.1 christos 3114 1.1 christos 3115 1.1 christos ! fp_macro 3116 1.1 christos ! out5 in5 0 1 3117 1.1 christos 3118 1.1 christos ! initially undo the rotate 3 left done after initial permutation 3119 1.1 christos ! original left is received shifted 3 right and 29 left in local3/4 3120 1.1 christos 3121 1.1 christos sll in5, 29, local1 3122 1.1 christos or local3, local4, out5 3123 1.1 christos 3124 1.1 christos srl in5, 3, in5 3125 1.1 christos sethi %hi(0x55555555), local2 3126 1.1 christos 3127 1.1 christos or in5, local1, in5 3128 1.1 christos or local2, %lo(0x55555555), local2 3129 1.1 christos 3130 1.1 christos srl in5, 1, local3 3131 1.1 christos sethi %hi(0x00ff00ff), local1 3132 1.1 christos xor local3, out5, local3 3133 1.1 christos or local1, %lo(0x00ff00ff), local1 3134 1.1 christos and local3, local2, local3 3135 1.1 christos sethi %hi(0x33333333), local4 3136 1.1 christos sll local3, 1, local2 3137 1.1 christos 3138 1.1 christos xor out5, local3, out5 3139 1.1 christos 3140 1.1 christos srl out5, 8, local3 3141 1.1 christos xor in5, local2, in5 3142 1.1 christos xor local3, in5, local3 3143 1.1 christos or local4, %lo(0x33333333), local4 3144 1.1 christos and local3, local1, local3 3145 1.1 christos sethi %hi(0x0000ffff), local1 3146 1.1 christos sll local3, 8, local2 3147 1.1 christos 3148 1.1 christos xor in5, local3, in5 3149 1.1 christos 3150 1.1 christos srl in5, 2, local3 3151 1.1 christos xor out5, local2, out5 3152 1.1 christos xor local3, out5, local3 3153 1.1 christos or local1, %lo(0x0000ffff), local1 3154 1.1 christos and local3, local4, local3 3155 1.1 christos sethi %hi(0x0f0f0f0f), local4 3156 1.1 christos sll local3, 2, local2 3157 1.1 christos 3158 1.1 christos LDPTR [%sp+BIAS+ARG0+0*ARGSZ] , local5 3159 1.1 christos xor out5, local3, out5 3160 1.1 christos 3161 1.1 christos LDPTR [%sp+BIAS+ARG0+1*ARGSZ] , local7 3162 1.1 christos srl out5, 16, local3 3163 1.1 christos xor in5, local2, in5 3164 1.1 christos xor local3, in5, local3 3165 1.1 christos or local4, %lo(0x0f0f0f0f), local4 3166 1.1 christos and local3, local1, local3 3167 1.1 christos sll local3, 16, local2 3168 1.1 christos 3169 1.1 christos xor in5, local3, local1 3170 1.1 christos 3171 1.1 christos srl local1, 4, local3 3172 1.1 christos xor out5, local2, out5 3173 1.1 christos xor local3, out5, local3 3174 1.1 christos and local3, local4, local3 3175 1.1 christos sll local3, 4, local2 3176 1.1 christos 3177 1.1 christos xor out5, local3, out5 3178 1.1 christos 3179 1.1 christos ! optional store: 3180 1.1 christos 3181 1.1 christos 3182 1.1 christos 3183 1.1 christos xor local1, local2, in5 3184 1.1 christos 3185 1.1 christos 3186 1.1 christos 3187 1.1 christos ! 1 for input and output address to local5/7 3188 1.1 christos 3189 1.1 christos ! in2 is bytes left to be stored 3190 1.1 christos ! in2 is compared to 8 in the rounds 3191 1.1 christos 3192 1.1 christos xor out5, in0, out4 ! iv xor 3193 1.1 christos bl .ncbc.dec.seven.or.less 3194 1.1 christos xor in5, in1, global4 ! iv xor 3195 1.1 christos 3196 1.1 christos ! Load ivec next block now, since input and output address might be the same. 3197 1.1 christos 3198 1.1 christos 3199 1.1 christos 3200 1.1 christos ! load_little_endian_inc 3201 1.1 christos ! local5 in0 in1 local3 .LLE5 3202 1.1 christos 3203 1.1 christos ! first in memory to rightmost in register 3204 1.1 christos 3205 1.1 christos .LLE5: 3206 1.1 christos ldub [local5+3], in0 3207 1.1 christos 3208 1.1 christos ldub [local5+2], local3 3209 1.1 christos sll in0, 8, in0 3210 1.1 christos or in0, local3, in0 3211 1.1 christos 3212 1.1 christos ldub [local5+1], local3 3213 1.1 christos sll in0, 8, in0 3214 1.1 christos or in0, local3, in0 3215 1.1 christos 3216 1.1 christos ldub [local5+0], local3 3217 1.1 christos sll in0, 8, in0 3218 1.1 christos or in0, local3, in0 3219 1.1 christos 3220 1.1 christos ldub [local5+3+4], in1 3221 1.1 christos add local5, 8, local5 3222 1.1 christos 3223 1.1 christos ldub [local5+2+4-8], local3 3224 1.1 christos sll in1, 8, in1 3225 1.1 christos or in1, local3, in1 3226 1.1 christos 3227 1.1 christos ldub [local5+1+4-8], local3 3228 1.1 christos sll in1, 8, in1 3229 1.1 christos or in1, local3, in1 3230 1.1 christos 3231 1.1 christos ldub [local5+0+4-8], local3 3232 1.1 christos sll in1, 8, in1 3233 1.1 christos or in1, local3, in1 3234 1.1 christos .LLE5a: 3235 1.1 christos 3236 1.1 christos ! iv 3237 1.1 christos 3238 1.1 christos 3239 1.1 christos 3240 1.1 christos ! store_little_endian 3241 1.1 christos ! local7 out4 global4 local3 .SLE3 3242 1.1 christos 3243 1.1 christos ! rightmost in register to first in memory 3244 1.1 christos 3245 1.1 christos .SLE3: 3246 1.1 christos and out4, 255, local3 3247 1.1 christos stub local3, [local7+0] 3248 1.1 christos 3249 1.1 christos srl out4, 8, local3 3250 1.1 christos and local3, 255, local3 3251 1.1 christos stub local3, [local7+1] 3252 1.1 christos 3253 1.1 christos srl out4, 16, local3 3254 1.1 christos and local3, 255, local3 3255 1.1 christos stub local3, [local7+2] 3256 1.1 christos 3257 1.1 christos srl out4, 24, local3 3258 1.1 christos stub local3, [local7+3] 3259 1.1 christos 3260 1.1 christos 3261 1.1 christos and global4, 255, local3 3262 1.1 christos stub local3, [local7+0+4] 3263 1.1 christos 3264 1.1 christos srl global4, 8, local3 3265 1.1 christos and local3, 255, local3 3266 1.1 christos stub local3, [local7+1+4] 3267 1.1 christos 3268 1.1 christos srl global4, 16, local3 3269 1.1 christos and local3, 255, local3 3270 1.1 christos stub local3, [local7+2+4] 3271 1.1 christos 3272 1.1 christos srl global4, 24, local3 3273 1.1 christos stub local3, [local7+3+4] 3274 1.1 christos 3275 1.1 christos .SLE3a: 3276 1.1 christos 3277 1.1 christos 3278 1.1 christos 3279 1.1 christos STPTR local5, [%sp+BIAS+ARG0+0*ARGSZ] 3280 1.1 christos add local7, 8, local7 3281 1.1 christos addcc in2, -8, in2 3282 1.1 christos 3283 1.1 christos bg .ncbc.dec.next.block 3284 1.1 christos STPTR local7, [%sp+BIAS+ARG0+1*ARGSZ] 3285 1.1 christos 3286 1.1 christos 3287 1.1 christos .ncbc.dec.store.iv: 3288 1.1 christos 3289 1.1 christos LDPTR [%sp+BIAS+ARG0+4*ARGSZ] , local4 ! ivec 3290 1.1 christos 3291 1.1 christos 3292 1.1 christos ! store_little_endian 3293 1.1 christos ! local4 in0 in1 local5 .SLE4 3294 1.1 christos 3295 1.1 christos ! rightmost in register to first in memory 3296 1.1 christos 3297 1.1 christos .SLE4: 3298 1.1 christos and in0, 255, local5 3299 1.1 christos stub local5, [local4+0] 3300 1.1 christos 3301 1.1 christos srl in0, 8, local5 3302 1.1 christos and local5, 255, local5 3303 1.1 christos stub local5, [local4+1] 3304 1.1 christos 3305 1.1 christos srl in0, 16, local5 3306 1.1 christos and local5, 255, local5 3307 1.1 christos stub local5, [local4+2] 3308 1.1 christos 3309 1.1 christos srl in0, 24, local5 3310 1.1 christos stub local5, [local4+3] 3311 1.1 christos 3312 1.1 christos 3313 1.1 christos and in1, 255, local5 3314 1.1 christos stub local5, [local4+0+4] 3315 1.1 christos 3316 1.1 christos srl in1, 8, local5 3317 1.1 christos and local5, 255, local5 3318 1.1 christos stub local5, [local4+1+4] 3319 1.1 christos 3320 1.1 christos srl in1, 16, local5 3321 1.1 christos and local5, 255, local5 3322 1.1 christos stub local5, [local4+2+4] 3323 1.1 christos 3324 1.1 christos srl in1, 24, local5 3325 1.1 christos stub local5, [local4+3+4] 3326 1.1 christos 3327 1.1 christos .SLE4a: 3328 1.1 christos 3329 1.1 christos 3330 1.1 christos 3331 1.1 christos .ncbc.dec.finish: 3332 1.1 christos 3333 1.1 christos ret 3334 1.1 christos restore 3335 1.1 christos 3336 1.1 christos .ncbc.dec.seven.or.less: 3337 1.1 christos 3338 1.1 christos 3339 1.1 christos 3340 1.1 christos ! load_little_endian_inc 3341 1.1 christos ! local5 in0 in1 local3 .LLE13 3342 1.1 christos 3343 1.1 christos ! first in memory to rightmost in register 3344 1.1 christos 3345 1.1 christos .LLE13: 3346 1.1 christos ldub [local5+3], in0 3347 1.1 christos 3348 1.1 christos ldub [local5+2], local3 3349 1.1 christos sll in0, 8, in0 3350 1.1 christos or in0, local3, in0 3351 1.1 christos 3352 1.1 christos ldub [local5+1], local3 3353 1.1 christos sll in0, 8, in0 3354 1.1 christos or in0, local3, in0 3355 1.1 christos 3356 1.1 christos ldub [local5+0], local3 3357 1.1 christos sll in0, 8, in0 3358 1.1 christos or in0, local3, in0 3359 1.1 christos 3360 1.1 christos ldub [local5+3+4], in1 3361 1.1 christos add local5, 8, local5 3362 1.1 christos 3363 1.1 christos ldub [local5+2+4-8], local3 3364 1.1 christos sll in1, 8, in1 3365 1.1 christos or in1, local3, in1 3366 1.1 christos 3367 1.1 christos ldub [local5+1+4-8], local3 3368 1.1 christos sll in1, 8, in1 3369 1.1 christos or in1, local3, in1 3370 1.1 christos 3371 1.1 christos ldub [local5+0+4-8], local3 3372 1.1 christos sll in1, 8, in1 3373 1.1 christos or in1, local3, in1 3374 1.1 christos .LLE13a: 3375 1.1 christos 3376 1.1 christos ! ivec 3377 1.1 christos 3378 1.1 christos 3379 1.1 christos 3380 1.1 christos ! store_n_bytes 3381 1.1 christos ! local7 in2 local3 local4 .SNB1 .ncbc.dec.store.iv .SNB1 .ncbc.dec.store.iv 3382 1.1 christos 3383 1.1 christos .SNB1.0: call .+8 3384 1.1 christos sll in2, 2, local4 3385 1.1 christos 3386 1.1 christos add %o7,.SNB1.jmp.table-.SNB1.0,local3 3387 1.1 christos 3388 1.1 christos add local3, local4, local3 3389 1.1 christos 3390 1.1 christos ld [local3], local3 3391 1.1 christos 3392 1.1 christos jmp %o7+local3 3393 1.1 christos nop 3394 1.1 christos 3395 1.1 christos .SNB1.7: 3396 1.1 christos srl global4, 16, local3 3397 1.1 christos and local3, 0xff, local3 3398 1.1 christos stub local3, [local7+6] 3399 1.1 christos .SNB1.6: 3400 1.1 christos srl global4, 8, local3 3401 1.1 christos and local3, 0xff, local3 3402 1.1 christos stub local3, [local7+5] 3403 1.1 christos .SNB1.5: 3404 1.1 christos and global4, 0xff, local3 3405 1.1 christos stub local3, [local7+4] 3406 1.1 christos .SNB1.4: 3407 1.1 christos srl out4, 24, local3 3408 1.1 christos stub local3, [local7+3] 3409 1.1 christos .SNB1.3: 3410 1.1 christos srl out4, 16, local3 3411 1.1 christos and local3, 0xff, local3 3412 1.1 christos stub local3, [local7+2] 3413 1.1 christos .SNB1.2: 3414 1.1 christos srl out4, 8, local3 3415 1.1 christos and local3, 0xff, local3 3416 1.1 christos stub local3, [local7+1] 3417 1.1 christos .SNB1.1: 3418 1.1 christos and out4, 0xff, local3 3419 1.1 christos 3420 1.1 christos 3421 1.1 christos ba .ncbc.dec.store.iv 3422 1.1 christos stub local3, [local7] 3423 1.1 christos 3424 1.1 christos .align 4 3425 1.1 christos 3426 1.1 christos .SNB1.jmp.table: 3427 1.1 christos 3428 1.1 christos .word 0 3429 1.1 christos .word .SNB1.1-.SNB1.0 3430 1.1 christos .word .SNB1.2-.SNB1.0 3431 1.1 christos .word .SNB1.3-.SNB1.0 3432 1.1 christos .word .SNB1.4-.SNB1.0 3433 1.1 christos .word .SNB1.5-.SNB1.0 3434 1.1 christos .word .SNB1.6-.SNB1.0 3435 1.1 christos .word .SNB1.7-.SNB1.0 3436 1.1 christos 3437 1.1 christos 3438 1.1 christos 3439 1.1 christos .DES_ncbc_encrypt.end: 3440 1.1 christos .size DES_ncbc_encrypt, .DES_ncbc_encrypt.end-DES_ncbc_encrypt 3441 1.1 christos 3442 1.1 christos 3443 1.1.1.2 christos ! void DES_ede3_cbc_encrypt(input, output, length, ks1, ks2, ks3, ivec, enc) 3444 1.1 christos ! ************************************************************************** 3445 1.1 christos 3446 1.1 christos 3447 1.1 christos .align 32 3448 1.1 christos .global DES_ede3_cbc_encrypt 3449 1.1 christos .type DES_ede3_cbc_encrypt,#function 3450 1.1 christos 3451 1.1 christos DES_ede3_cbc_encrypt: 3452 1.1 christos 3453 1.1 christos save %sp, FRAME, %sp 3454 1.1 christos 3455 1.1 christos 3456 1.1 christos 3457 1.1 christos 3458 1.1 christos 3459 1.1 christos sethi %hi(_PIC_DES_SPtrans-1f),global1 3460 1.1 christos or global1,%lo(_PIC_DES_SPtrans-1f),global1 3461 1.1 christos 1: call .+8 3462 1.1 christos add %o7,global1,global1 3463 1.1 christos sub global1,_PIC_DES_SPtrans-.des_and,out2 3464 1.1 christos 3465 1.1 christos LDPTR [%fp+BIAS+ARG0+7*ARGSZ], local3 ! enc 3466 1.1 christos LDPTR [%fp+BIAS+ARG0+6*ARGSZ], local4 ! ivec 3467 1.1 christos cmp local3, 0 ! enc 3468 1.1 christos 3469 1.1 christos be .ede3.dec 3470 1.1 christos STPTR in4, [%sp+BIAS+ARG0+4*ARGSZ] 3471 1.1 christos 3472 1.1 christos STPTR in5, [%sp+BIAS+ARG0+5*ARGSZ] 3473 1.1 christos 3474 1.1 christos 3475 1.1 christos 3476 1.1 christos ! load_little_endian 3477 1.1 christos ! local4 in5 out5 local3 .LLE6 3478 1.1 christos 3479 1.1 christos ! first in memory to rightmost in register 3480 1.1 christos 3481 1.1 christos .LLE6: 3482 1.1 christos ldub [local4+3], in5 3483 1.1 christos 3484 1.1 christos ldub [local4+2], local3 3485 1.1 christos sll in5, 8, in5 3486 1.1 christos or in5, local3, in5 3487 1.1 christos 3488 1.1 christos ldub [local4+1], local3 3489 1.1 christos sll in5, 8, in5 3490 1.1 christos or in5, local3, in5 3491 1.1 christos 3492 1.1 christos ldub [local4+0], local3 3493 1.1 christos sll in5, 8, in5 3494 1.1 christos or in5, local3, in5 3495 1.1 christos 3496 1.1 christos 3497 1.1 christos ldub [local4+3+4], out5 3498 1.1 christos 3499 1.1 christos ldub [local4+2+4], local3 3500 1.1 christos sll out5, 8, out5 3501 1.1 christos or out5, local3, out5 3502 1.1 christos 3503 1.1 christos ldub [local4+1+4], local3 3504 1.1 christos sll out5, 8, out5 3505 1.1 christos or out5, local3, out5 3506 1.1 christos 3507 1.1 christos ldub [local4+0+4], local3 3508 1.1 christos sll out5, 8, out5 3509 1.1 christos or out5, local3, out5 3510 1.1 christos .LLE6a: 3511 1.1 christos 3512 1.1 christos ! ivec 3513 1.1 christos 3514 1.1 christos addcc in2, -8, in2 ! bytes missing after next block 3515 1.1 christos 3516 1.1 christos bl .ede3.enc.seven.or.less 3517 1.1 christos STPTR in3, [%sp+BIAS+ARG0+3*ARGSZ] 3518 1.1 christos 3519 1.1 christos .ede3.enc.next.block: 3520 1.1 christos 3521 1.1 christos 3522 1.1 christos 3523 1.1 christos ! load_little_endian 3524 1.1 christos ! in0 out4 global4 local3 .LLE7 3525 1.1 christos 3526 1.1 christos ! first in memory to rightmost in register 3527 1.1 christos 3528 1.1 christos .LLE7: 3529 1.1 christos ldub [in0+3], out4 3530 1.1 christos 3531 1.1 christos ldub [in0+2], local3 3532 1.1 christos sll out4, 8, out4 3533 1.1 christos or out4, local3, out4 3534 1.1 christos 3535 1.1 christos ldub [in0+1], local3 3536 1.1 christos sll out4, 8, out4 3537 1.1 christos or out4, local3, out4 3538 1.1 christos 3539 1.1 christos ldub [in0+0], local3 3540 1.1 christos sll out4, 8, out4 3541 1.1 christos or out4, local3, out4 3542 1.1 christos 3543 1.1 christos 3544 1.1 christos ldub [in0+3+4], global4 3545 1.1 christos 3546 1.1 christos ldub [in0+2+4], local3 3547 1.1 christos sll global4, 8, global4 3548 1.1 christos or global4, local3, global4 3549 1.1 christos 3550 1.1 christos ldub [in0+1+4], local3 3551 1.1 christos sll global4, 8, global4 3552 1.1 christos or global4, local3, global4 3553 1.1 christos 3554 1.1 christos ldub [in0+0+4], local3 3555 1.1 christos sll global4, 8, global4 3556 1.1 christos or global4, local3, global4 3557 1.1 christos .LLE7a: 3558 1.1 christos 3559 1.1 christos 3560 1.1 christos 3561 1.1 christos .ede3.enc.next.block_1: 3562 1.1 christos 3563 1.1 christos LDPTR [%sp+BIAS+ARG0+4*ARGSZ] , in4 3564 1.1 christos xor in5, out4, in5 ! iv xor 3565 1.1 christos xor out5, global4, out5 ! iv xor 3566 1.1 christos 3567 1.1 christos LDPTR [%sp+BIAS+ARG0+3*ARGSZ] , in3 3568 1.1 christos add in4, 120, in4 ! for decryption we use last subkey first 3569 1.1 christos nop 3570 1.1 christos 3571 1.1 christos 3572 1.1 christos 3573 1.1 christos ! ip_macro 3574 1.1 christos ! in5 out5 out5 in5 in3 3575 1.1 christos 3576 1.1 christos ld [out2+256], local1 3577 1.1 christos srl out5, 4, local4 3578 1.1 christos 3579 1.1 christos xor local4, in5, local4 3580 1.1 christos nop 3581 1.1 christos 3582 1.1 christos ld [out2+260], local2 3583 1.1 christos and local4, local1, local4 3584 1.1 christos 3585 1.1 christos 3586 1.1 christos 3587 1.1 christos ld [out2+280], out4 ! loop counter 3588 1.1 christos sll local4, 4, local1 3589 1.1 christos xor in5, local4, in5 3590 1.1 christos 3591 1.1 christos ld [out2+264], local3 3592 1.1 christos srl in5, 16, local4 3593 1.1 christos xor out5, local1, out5 3594 1.1 christos 3595 1.1 christos 3596 1.1 christos xor local4, out5, local4 3597 1.1 christos nop !sethi %hi(DES_SPtrans), global1 ! sbox addr 3598 1.1 christos 3599 1.1 christos 3600 1.1 christos and local4, local2, local4 3601 1.1 christos nop !or global1, %lo(DES_SPtrans), global1 ! sbox addr 3602 1.1 christos 3603 1.1 christos sll local4, 16, local1 3604 1.1 christos xor out5, local4, out5 3605 1.1 christos 3606 1.1 christos srl out5, 2, local4 3607 1.1 christos xor in5, local1, in5 3608 1.1 christos 3609 1.1 christos sethi %hi(16711680), local5 3610 1.1 christos xor local4, in5, local4 3611 1.1 christos 3612 1.1 christos and local4, local3, local4 3613 1.1 christos or local5, 255, local5 3614 1.1 christos 3615 1.1 christos sll local4, 2, local2 3616 1.1 christos xor in5, local4, in5 3617 1.1 christos 3618 1.1 christos srl in5, 8, local4 3619 1.1 christos xor out5, local2, out5 3620 1.1 christos 3621 1.1 christos xor local4, out5, local4 3622 1.1 christos add global1, 768, global4 3623 1.1 christos 3624 1.1 christos and local4, local5, local4 3625 1.1 christos add global1, 1024, global5 3626 1.1 christos 3627 1.1 christos ld [out2+272], local7 3628 1.1 christos sll local4, 8, local1 3629 1.1 christos xor out5, local4, out5 3630 1.1 christos 3631 1.1 christos srl out5, 1, local4 3632 1.1 christos xor in5, local1, in5 3633 1.1 christos 3634 1.1 christos ld [in3], out0 ! key 7531 3635 1.1 christos xor local4, in5, local4 3636 1.1 christos add global1, 256, global2 3637 1.1 christos 3638 1.1 christos ld [in3+4], out1 ! key 8642 3639 1.1 christos and local4, local7, local4 3640 1.1 christos add global1, 512, global3 3641 1.1 christos 3642 1.1 christos sll local4, 1, local1 3643 1.1 christos xor in5, local4, in5 3644 1.1 christos 3645 1.1 christos sll in5, 3, local3 3646 1.1 christos xor out5, local1, out5 3647 1.1 christos 3648 1.1 christos sll out5, 3, local2 3649 1.1 christos add global1, 1280, local6 ! address sbox 8 3650 1.1 christos 3651 1.1 christos srl in5, 29, local4 3652 1.1 christos add global1, 1792, out3 ! address sbox 8 3653 1.1 christos 3654 1.1 christos srl out5, 29, local1 3655 1.1 christos or local4, local3, out5 3656 1.1 christos 3657 1.1 christos or local2, local1, in5 3658 1.1 christos 3659 1.1 christos 3660 1.1 christos 3661 1.1 christos 3662 1.1 christos 3663 1.1 christos 3664 1.1 christos .ede3.enc.next.block_2: 3665 1.1 christos 3666 1.1 christos call .des_enc ! ks1 in3 3667 1.1 christos nop 3668 1.1 christos 3669 1.1 christos call .des_dec ! ks2 in4 3670 1.1 christos LDPTR [%sp+BIAS+ARG0+5*ARGSZ] , in3 3671 1.1 christos 3672 1.1 christos call .des_enc ! ks3 in3 compares in2 to 8 3673 1.1 christos nop 3674 1.1 christos 3675 1.1 christos bl .ede3.enc.next.block_fp 3676 1.1 christos add in0, 8, in0 3677 1.1 christos 3678 1.1 christos ! If 8 or more bytes are to be encrypted after this block, 3679 1.1 christos ! we combine final permutation for this block with initial 3680 1.1 christos ! permutation for next block. Load next block: 3681 1.1 christos 3682 1.1 christos 3683 1.1 christos 3684 1.1 christos ! load_little_endian 3685 1.1 christos ! in0 global3 global4 local5 .LLE11 3686 1.1 christos 3687 1.1 christos ! first in memory to rightmost in register 3688 1.1 christos 3689 1.1 christos .LLE11: 3690 1.1 christos ldub [in0+3], global3 3691 1.1 christos 3692 1.1 christos ldub [in0+2], local5 3693 1.1 christos sll global3, 8, global3 3694 1.1 christos or global3, local5, global3 3695 1.1 christos 3696 1.1 christos ldub [in0+1], local5 3697 1.1 christos sll global3, 8, global3 3698 1.1 christos or global3, local5, global3 3699 1.1 christos 3700 1.1 christos ldub [in0+0], local5 3701 1.1 christos sll global3, 8, global3 3702 1.1 christos or global3, local5, global3 3703 1.1 christos 3704 1.1 christos 3705 1.1 christos ldub [in0+3+4], global4 3706 1.1 christos 3707 1.1 christos ldub [in0+2+4], local5 3708 1.1 christos sll global4, 8, global4 3709 1.1 christos or global4, local5, global4 3710 1.1 christos 3711 1.1 christos ldub [in0+1+4], local5 3712 1.1 christos sll global4, 8, global4 3713 1.1 christos or global4, local5, global4 3714 1.1 christos 3715 1.1 christos ldub [in0+0+4], local5 3716 1.1 christos sll global4, 8, global4 3717 1.1 christos or global4, local5, global4 3718 1.1 christos .LLE11a: 3719 1.1 christos 3720 1.1 christos 3721 1.1 christos 3722 1.1 christos ! parameter 1 original left 3723 1.1 christos ! parameter 2 original right 3724 1.1 christos ! parameter 3 left ip 3725 1.1 christos ! parameter 4 right ip 3726 1.1 christos ! parameter 5 1: load ks1/ks2 to in3/in4, add 120 to in4 3727 1.1 christos ! 2: mov in4 to in3 3728 1.1 christos ! 3729 1.1 christos ! also adds -8 to length in2 and loads loop counter to out4 3730 1.1 christos 3731 1.1 christos 3732 1.1 christos 3733 1.1 christos ! fp_ip_macro 3734 1.1 christos ! out0 out1 global3 global4 1 3735 1.1 christos 3736 1.1 christos 3737 1.1 christos 3738 1.1 christos 3739 1.1 christos 3740 1.1 christos 3741 1.1 christos 3742 1.1 christos 3743 1.1 christos 3744 1.1 christos ! out0 in local3, local4 3745 1.1 christos 3746 1.1 christos ld [out2+256], local1 3747 1.1 christos sll out5, 29, out4 3748 1.1 christos or local3, local4, out0 3749 1.1 christos 3750 1.1 christos srl out5, 3, out1 3751 1.1 christos 3752 1.1 christos 3753 1.1 christos ld [out2+272], local5 3754 1.1 christos srl global4, 4, local0 3755 1.1 christos or out1, out4, out1 3756 1.1 christos 3757 1.1 christos srl out1, 1, out4 3758 1.1 christos xor out4, out0, out4 3759 1.1 christos 3760 1.1 christos and out4, local5, out4 3761 1.1 christos xor local0, global3, local0 3762 1.1 christos 3763 1.1 christos sll out4, 1, local3 3764 1.1 christos xor out0, out4, out0 3765 1.1 christos 3766 1.1 christos and local0, local1, local0 3767 1.1 christos add in2, -8, in2 3768 1.1 christos 3769 1.1 christos sll local0, 4, local7 3770 1.1 christos xor global3, local0, global3 3771 1.1 christos 3772 1.1 christos ld [out2+268], local4 3773 1.1 christos srl out0, 8, out4 3774 1.1 christos xor out1, local3, out1 3775 1.1 christos ld [out2+260], local2 3776 1.1 christos srl global3, 16, local0 3777 1.1 christos xor global4, local7, global4 3778 1.1 christos xor out4, out1, out4 3779 1.1 christos xor local0, global4, local0 3780 1.1 christos and out4, local4, out4 3781 1.1 christos and local0, local2, local0 3782 1.1 christos sll out4, 8, local3 3783 1.1 christos xor out1, out4, out1 3784 1.1 christos sll local0, 16, local7 3785 1.1 christos xor global4, local0, global4 3786 1.1 christos 3787 1.1 christos srl out1, 2, out4 3788 1.1 christos xor out0, local3, out0 3789 1.1 christos 3790 1.1 christos ld [out2+264], local3 ! ip3 3791 1.1 christos srl global4, 2, local0 3792 1.1 christos xor global3, local7, global3 3793 1.1 christos xor out4, out0, out4 3794 1.1 christos xor local0, global3, local0 3795 1.1 christos and out4, local3, out4 3796 1.1 christos and local0, local3, local0 3797 1.1 christos sll out4, 2, local3 3798 1.1 christos xor out0, out4, out0 3799 1.1 christos sll local0, 2, local7 3800 1.1 christos xor global3, local0, global3 3801 1.1 christos 3802 1.1 christos srl out0, 16, out4 3803 1.1 christos xor out1, local3, out1 3804 1.1 christos srl global3, 8, local0 3805 1.1 christos xor global4, local7, global4 3806 1.1 christos xor out4, out1, out4 3807 1.1 christos xor local0, global4, local0 3808 1.1 christos and out4, local2, out4 3809 1.1 christos and local0, local4, local0 3810 1.1 christos sll out4, 16, local3 3811 1.1 christos xor out1, out4, local4 3812 1.1 christos sll local0, 8, local7 3813 1.1 christos xor global4, local0, global4 3814 1.1 christos 3815 1.1 christos srl global4, 1, local0 3816 1.1 christos xor global3, local7, global3 3817 1.1 christos 3818 1.1 christos srl local4, 4, out4 3819 1.1 christos xor local0, global3, local0 3820 1.1 christos 3821 1.1 christos xor out0, local3, out0 3822 1.1 christos and local0, local5, local0 3823 1.1 christos 3824 1.1 christos sll local0, 1, local7 3825 1.1 christos xor out4, out0, out4 3826 1.1 christos 3827 1.1 christos xor global3, local0, global3 3828 1.1 christos xor global4, local7, global4 3829 1.1 christos 3830 1.1 christos sll global3, 3, local5 3831 1.1 christos and out4, local1, out4 3832 1.1 christos 3833 1.1 christos sll out4, 4, local3 3834 1.1 christos xor out0, out4, out0 3835 1.1 christos 3836 1.1 christos LDPTR [%sp+BIAS+ARG0+4*ARGSZ] , in4 3837 1.1 christos sll global4, 3, local2 3838 1.1 christos xor local4, local3, out1 3839 1.1 christos 3840 1.1.1.2 christos ! reload since used as temporary: 3841 1.1 christos 3842 1.1 christos ld [out2+280], out4 ! loop counter 3843 1.1 christos 3844 1.1 christos srl global3, 29, local0 3845 1.1 christos add in4, 120, in4 3846 1.1 christos 3847 1.1 christos LDPTR [%sp+BIAS+ARG0+3*ARGSZ] , in3 3848 1.1 christos srl global4, 29, local7 3849 1.1 christos 3850 1.1 christos or local0, local5, global4 3851 1.1 christos or local2, local7, global3 3852 1.1 christos 3853 1.1 christos 3854 1.1 christos 3855 1.1 christos 3856 1.1 christos 3857 1.1 christos ! store_little_endian 3858 1.1 christos ! in1 out0 out1 local3 .SLE9 3859 1.1 christos 3860 1.1 christos ! rightmost in register to first in memory 3861 1.1 christos 3862 1.1 christos .SLE9: 3863 1.1 christos and out0, 255, local3 3864 1.1 christos stub local3, [in1+0] 3865 1.1 christos 3866 1.1 christos srl out0, 8, local3 3867 1.1 christos and local3, 255, local3 3868 1.1 christos stub local3, [in1+1] 3869 1.1 christos 3870 1.1 christos srl out0, 16, local3 3871 1.1 christos and local3, 255, local3 3872 1.1 christos stub local3, [in1+2] 3873 1.1 christos 3874 1.1 christos srl out0, 24, local3 3875 1.1 christos stub local3, [in1+3] 3876 1.1 christos 3877 1.1 christos 3878 1.1 christos and out1, 255, local3 3879 1.1 christos stub local3, [in1+0+4] 3880 1.1 christos 3881 1.1 christos srl out1, 8, local3 3882 1.1 christos and local3, 255, local3 3883 1.1 christos stub local3, [in1+1+4] 3884 1.1 christos 3885 1.1 christos srl out1, 16, local3 3886 1.1 christos and local3, 255, local3 3887 1.1 christos stub local3, [in1+2+4] 3888 1.1 christos 3889 1.1 christos srl out1, 24, local3 3890 1.1 christos stub local3, [in1+3+4] 3891 1.1 christos 3892 1.1 christos .SLE9a: 3893 1.1 christos 3894 1.1 christos ! block 3895 1.1 christos 3896 1.1 christos mov in5, local1 3897 1.1 christos xor global3, out5, in5 ! iv xor next block 3898 1.1 christos 3899 1.1 christos ld [in3], out0 ! key 7531 3900 1.1 christos add global1, 512, global3 ! address sbox 3 3901 1.1 christos xor global4, local1, out5 ! iv xor next block 3902 1.1 christos 3903 1.1 christos ld [in3+4], out1 ! key 8642 3904 1.1 christos add global1, 768, global4 ! address sbox 4 3905 1.1 christos ba .ede3.enc.next.block_2 3906 1.1 christos add in1, 8, in1 3907 1.1 christos 3908 1.1 christos .ede3.enc.next.block_fp: 3909 1.1 christos 3910 1.1 christos 3911 1.1 christos 3912 1.1 christos ! fp_macro 3913 1.1 christos ! in5 out5 3914 1.1 christos 3915 1.1 christos ! initially undo the rotate 3 left done after initial permutation 3916 1.1 christos ! original left is received shifted 3 right and 29 left in local3/4 3917 1.1 christos 3918 1.1 christos sll out5, 29, local1 3919 1.1 christos or local3, local4, in5 3920 1.1 christos 3921 1.1 christos srl out5, 3, out5 3922 1.1 christos sethi %hi(0x55555555), local2 3923 1.1 christos 3924 1.1 christos or out5, local1, out5 3925 1.1 christos or local2, %lo(0x55555555), local2 3926 1.1 christos 3927 1.1 christos srl out5, 1, local3 3928 1.1 christos sethi %hi(0x00ff00ff), local1 3929 1.1 christos xor local3, in5, local3 3930 1.1 christos or local1, %lo(0x00ff00ff), local1 3931 1.1 christos and local3, local2, local3 3932 1.1 christos sethi %hi(0x33333333), local4 3933 1.1 christos sll local3, 1, local2 3934 1.1 christos 3935 1.1 christos xor in5, local3, in5 3936 1.1 christos 3937 1.1 christos srl in5, 8, local3 3938 1.1 christos xor out5, local2, out5 3939 1.1 christos xor local3, out5, local3 3940 1.1 christos or local4, %lo(0x33333333), local4 3941 1.1 christos and local3, local1, local3 3942 1.1 christos sethi %hi(0x0000ffff), local1 3943 1.1 christos sll local3, 8, local2 3944 1.1 christos 3945 1.1 christos xor out5, local3, out5 3946 1.1 christos 3947 1.1 christos srl out5, 2, local3 3948 1.1 christos xor in5, local2, in5 3949 1.1 christos xor local3, in5, local3 3950 1.1 christos or local1, %lo(0x0000ffff), local1 3951 1.1 christos and local3, local4, local3 3952 1.1 christos sethi %hi(0x0f0f0f0f), local4 3953 1.1 christos sll local3, 2, local2 3954 1.1 christos 3955 1.1 christos 3956 1.1 christos xor in5, local3, in5 3957 1.1 christos 3958 1.1 christos 3959 1.1 christos srl in5, 16, local3 3960 1.1 christos xor out5, local2, out5 3961 1.1 christos xor local3, out5, local3 3962 1.1 christos or local4, %lo(0x0f0f0f0f), local4 3963 1.1 christos and local3, local1, local3 3964 1.1 christos sll local3, 16, local2 3965 1.1 christos 3966 1.1 christos xor out5, local3, local1 3967 1.1 christos 3968 1.1 christos srl local1, 4, local3 3969 1.1 christos xor in5, local2, in5 3970 1.1 christos xor local3, in5, local3 3971 1.1 christos and local3, local4, local3 3972 1.1 christos sll local3, 4, local2 3973 1.1 christos 3974 1.1 christos xor in5, local3, in5 3975 1.1 christos 3976 1.1 christos ! optional store: 3977 1.1 christos 3978 1.1 christos 3979 1.1 christos 3980 1.1 christos xor local1, local2, out5 3981 1.1 christos 3982 1.1 christos 3983 1.1 christos 3984 1.1 christos 3985 1.1 christos 3986 1.1 christos 3987 1.1 christos 3988 1.1 christos ! store_little_endian 3989 1.1 christos ! in1 in5 out5 local3 .SLE5 3990 1.1 christos 3991 1.1 christos ! rightmost in register to first in memory 3992 1.1 christos 3993 1.1 christos .SLE5: 3994 1.1 christos and in5, 255, local3 3995 1.1 christos stub local3, [in1+0] 3996 1.1 christos 3997 1.1 christos srl in5, 8, local3 3998 1.1 christos and local3, 255, local3 3999 1.1 christos stub local3, [in1+1] 4000 1.1 christos 4001 1.1 christos srl in5, 16, local3 4002 1.1 christos and local3, 255, local3 4003 1.1 christos stub local3, [in1+2] 4004 1.1 christos 4005 1.1 christos srl in5, 24, local3 4006 1.1 christos stub local3, [in1+3] 4007 1.1 christos 4008 1.1 christos 4009 1.1 christos and out5, 255, local3 4010 1.1 christos stub local3, [in1+0+4] 4011 1.1 christos 4012 1.1 christos srl out5, 8, local3 4013 1.1 christos and local3, 255, local3 4014 1.1 christos stub local3, [in1+1+4] 4015 1.1 christos 4016 1.1 christos srl out5, 16, local3 4017 1.1 christos and local3, 255, local3 4018 1.1 christos stub local3, [in1+2+4] 4019 1.1 christos 4020 1.1 christos srl out5, 24, local3 4021 1.1 christos stub local3, [in1+3+4] 4022 1.1 christos 4023 1.1 christos .SLE5a: 4024 1.1 christos 4025 1.1 christos ! block 4026 1.1 christos 4027 1.1 christos addcc in2, -8, in2 ! bytes missing when next block done 4028 1.1 christos 4029 1.1 christos bpos .ede3.enc.next.block 4030 1.1 christos add in1, 8, in1 4031 1.1 christos 4032 1.1 christos .ede3.enc.seven.or.less: 4033 1.1 christos 4034 1.1 christos cmp in2, -8 4035 1.1 christos 4036 1.1 christos ble .ede3.enc.finish 4037 1.1 christos nop 4038 1.1 christos 4039 1.1 christos add in2, 8, local1 ! bytes to load 4040 1.1 christos 4041 1.1 christos ! addr, length, dest left, dest right, temp, local3, label, ret label 4042 1.1 christos 4043 1.1 christos 4044 1.1 christos ! load_n_bytes 4045 1.1 christos ! in0 local1 local2 local3 .LNB2 .ede3.enc.next.block_1 .LNB2 .ede3.enc.next.block_1 4046 1.1 christos 4047 1.1 christos .LNB2.0: call .+8 4048 1.1 christos sll local1, 2, local3 4049 1.1 christos 4050 1.1 christos add %o7,.LNB2.jmp.table-.LNB2.0,local2 4051 1.1 christos 4052 1.1 christos add local2, local3, local2 4053 1.1 christos mov 0, out4 4054 1.1 christos 4055 1.1 christos ld [local2], local2 4056 1.1 christos 4057 1.1 christos jmp %o7+local2 4058 1.1 christos mov 0, global4 4059 1.1 christos 4060 1.1 christos .LNB2.7: 4061 1.1 christos ldub [in0+6], local2 4062 1.1 christos sll local2, 16, local2 4063 1.1 christos or global4, local2, global4 4064 1.1 christos .LNB2.6: 4065 1.1 christos ldub [in0+5], local2 4066 1.1 christos sll local2, 8, local2 4067 1.1 christos or global4, local2, global4 4068 1.1 christos .LNB2.5: 4069 1.1 christos ldub [in0+4], local2 4070 1.1 christos or global4, local2, global4 4071 1.1 christos .LNB2.4: 4072 1.1 christos ldub [in0+3], local2 4073 1.1 christos sll local2, 24, local2 4074 1.1 christos or out4, local2, out4 4075 1.1 christos .LNB2.3: 4076 1.1 christos ldub [in0+2], local2 4077 1.1 christos sll local2, 16, local2 4078 1.1 christos or out4, local2, out4 4079 1.1 christos .LNB2.2: 4080 1.1 christos ldub [in0+1], local2 4081 1.1 christos sll local2, 8, local2 4082 1.1 christos or out4, local2, out4 4083 1.1 christos .LNB2.1: 4084 1.1 christos ldub [in0+0], local2 4085 1.1 christos ba .ede3.enc.next.block_1 4086 1.1 christos or out4, local2, out4 4087 1.1 christos 4088 1.1 christos .align 4 4089 1.1 christos 4090 1.1 christos .LNB2.jmp.table: 4091 1.1 christos .word 0 4092 1.1 christos .word .LNB2.1-.LNB2.0 4093 1.1 christos .word .LNB2.2-.LNB2.0 4094 1.1 christos .word .LNB2.3-.LNB2.0 4095 1.1 christos .word .LNB2.4-.LNB2.0 4096 1.1 christos .word .LNB2.5-.LNB2.0 4097 1.1 christos .word .LNB2.6-.LNB2.0 4098 1.1 christos .word .LNB2.7-.LNB2.0 4099 1.1 christos 4100 1.1 christos 4101 1.1 christos .ede3.enc.finish: 4102 1.1 christos 4103 1.1 christos LDPTR [%fp+BIAS+ARG0+6*ARGSZ], local4 ! ivec 4104 1.1 christos 4105 1.1 christos 4106 1.1 christos ! store_little_endian 4107 1.1 christos ! local4 in5 out5 local5 .SLE6 4108 1.1 christos 4109 1.1 christos ! rightmost in register to first in memory 4110 1.1 christos 4111 1.1 christos .SLE6: 4112 1.1 christos and in5, 255, local5 4113 1.1 christos stub local5, [local4+0] 4114 1.1 christos 4115 1.1 christos srl in5, 8, local5 4116 1.1 christos and local5, 255, local5 4117 1.1 christos stub local5, [local4+1] 4118 1.1 christos 4119 1.1 christos srl in5, 16, local5 4120 1.1 christos and local5, 255, local5 4121 1.1 christos stub local5, [local4+2] 4122 1.1 christos 4123 1.1 christos srl in5, 24, local5 4124 1.1 christos stub local5, [local4+3] 4125 1.1 christos 4126 1.1 christos 4127 1.1 christos and out5, 255, local5 4128 1.1 christos stub local5, [local4+0+4] 4129 1.1 christos 4130 1.1 christos srl out5, 8, local5 4131 1.1 christos and local5, 255, local5 4132 1.1 christos stub local5, [local4+1+4] 4133 1.1 christos 4134 1.1 christos srl out5, 16, local5 4135 1.1 christos and local5, 255, local5 4136 1.1 christos stub local5, [local4+2+4] 4137 1.1 christos 4138 1.1 christos srl out5, 24, local5 4139 1.1 christos stub local5, [local4+3+4] 4140 1.1 christos 4141 1.1 christos .SLE6a: 4142 1.1 christos 4143 1.1 christos ! ivec 4144 1.1 christos 4145 1.1 christos ret 4146 1.1 christos restore 4147 1.1 christos 4148 1.1 christos .ede3.dec: 4149 1.1 christos 4150 1.1 christos STPTR in0, [%sp+BIAS+ARG0+0*ARGSZ] 4151 1.1 christos add in5, 120, in5 4152 1.1 christos 4153 1.1 christos STPTR in1, [%sp+BIAS+ARG0+1*ARGSZ] 4154 1.1 christos mov in0, local5 4155 1.1 christos add in3, 120, in3 4156 1.1 christos 4157 1.1 christos STPTR in3, [%sp+BIAS+ARG0+3*ARGSZ] 4158 1.1 christos cmp in2, 0 4159 1.1 christos 4160 1.1 christos ble .ede3.dec.finish 4161 1.1 christos STPTR in5, [%sp+BIAS+ARG0+5*ARGSZ] 4162 1.1 christos 4163 1.1 christos LDPTR [%fp+BIAS+ARG0+6*ARGSZ], local7 ! iv 4164 1.1 christos 4165 1.1 christos 4166 1.1 christos ! load_little_endian 4167 1.1 christos ! local7 in0 in1 local3 .LLE8 4168 1.1 christos 4169 1.1 christos ! first in memory to rightmost in register 4170 1.1 christos 4171 1.1 christos .LLE8: 4172 1.1 christos ldub [local7+3], in0 4173 1.1 christos 4174 1.1 christos ldub [local7+2], local3 4175 1.1 christos sll in0, 8, in0 4176 1.1 christos or in0, local3, in0 4177 1.1 christos 4178 1.1 christos ldub [local7+1], local3 4179 1.1 christos sll in0, 8, in0 4180 1.1 christos or in0, local3, in0 4181 1.1 christos 4182 1.1 christos ldub [local7+0], local3 4183 1.1 christos sll in0, 8, in0 4184 1.1 christos or in0, local3, in0 4185 1.1 christos 4186 1.1 christos 4187 1.1 christos ldub [local7+3+4], in1 4188 1.1 christos 4189 1.1 christos ldub [local7+2+4], local3 4190 1.1 christos sll in1, 8, in1 4191 1.1 christos or in1, local3, in1 4192 1.1 christos 4193 1.1 christos ldub [local7+1+4], local3 4194 1.1 christos sll in1, 8, in1 4195 1.1 christos or in1, local3, in1 4196 1.1 christos 4197 1.1 christos ldub [local7+0+4], local3 4198 1.1 christos sll in1, 8, in1 4199 1.1 christos or in1, local3, in1 4200 1.1 christos .LLE8a: 4201 1.1 christos 4202 1.1 christos 4203 1.1 christos 4204 1.1 christos .ede3.dec.next.block: 4205 1.1 christos 4206 1.1 christos 4207 1.1 christos 4208 1.1 christos ! load_little_endian 4209 1.1 christos ! local5 in5 out5 local3 .LLE9 4210 1.1 christos 4211 1.1 christos ! first in memory to rightmost in register 4212 1.1 christos 4213 1.1 christos .LLE9: 4214 1.1 christos ldub [local5+3], in5 4215 1.1 christos 4216 1.1 christos ldub [local5+2], local3 4217 1.1 christos sll in5, 8, in5 4218 1.1 christos or in5, local3, in5 4219 1.1 christos 4220 1.1 christos ldub [local5+1], local3 4221 1.1 christos sll in5, 8, in5 4222 1.1 christos or in5, local3, in5 4223 1.1 christos 4224 1.1 christos ldub [local5+0], local3 4225 1.1 christos sll in5, 8, in5 4226 1.1 christos or in5, local3, in5 4227 1.1 christos 4228 1.1 christos 4229 1.1 christos ldub [local5+3+4], out5 4230 1.1 christos 4231 1.1 christos ldub [local5+2+4], local3 4232 1.1 christos sll out5, 8, out5 4233 1.1 christos or out5, local3, out5 4234 1.1 christos 4235 1.1 christos ldub [local5+1+4], local3 4236 1.1 christos sll out5, 8, out5 4237 1.1 christos or out5, local3, out5 4238 1.1 christos 4239 1.1 christos ldub [local5+0+4], local3 4240 1.1 christos sll out5, 8, out5 4241 1.1 christos or out5, local3, out5 4242 1.1 christos .LLE9a: 4243 1.1 christos 4244 1.1 christos 4245 1.1 christos 4246 1.1 christos ! parameter 6 1/2 for include encryption/decryption 4247 1.1 christos ! parameter 7 1 for mov in1 to in3 4248 1.1 christos ! parameter 8 1 for mov in3 to in4 4249 1.1 christos ! parameter 9 1 for load ks3 and ks2 to in4 and in3 4250 1.1 christos 4251 1.1 christos 4252 1.1 christos 4253 1.1 christos ! ip_macro 4254 1.1 christos ! in5 out5 in5 out5 in4 2 0 0 1 4255 1.1 christos 4256 1.1 christos ld [out2+256], local1 4257 1.1 christos srl out5, 4, local4 4258 1.1 christos 4259 1.1 christos xor local4, in5, local4 4260 1.1 christos nop 4261 1.1 christos 4262 1.1 christos ld [out2+260], local2 4263 1.1 christos and local4, local1, local4 4264 1.1 christos 4265 1.1 christos 4266 1.1 christos 4267 1.1 christos ld [out2+280], out4 ! loop counter 4268 1.1 christos sll local4, 4, local1 4269 1.1 christos xor in5, local4, in5 4270 1.1 christos 4271 1.1 christos ld [out2+264], local3 4272 1.1 christos srl in5, 16, local4 4273 1.1 christos xor out5, local1, out5 4274 1.1 christos 4275 1.1 christos LDPTR [%sp+BIAS+ARG0+5*ARGSZ] , in4 4276 1.1 christos xor local4, out5, local4 4277 1.1 christos nop !sethi %hi(DES_SPtrans), global1 ! sbox addr 4278 1.1 christos 4279 1.1 christos LDPTR [%sp+BIAS+ARG0+4*ARGSZ] , in3 4280 1.1 christos and local4, local2, local4 4281 1.1 christos nop !or global1, %lo(DES_SPtrans), global1 ! sbox addr 4282 1.1 christos 4283 1.1 christos sll local4, 16, local1 4284 1.1 christos xor out5, local4, out5 4285 1.1 christos 4286 1.1 christos srl out5, 2, local4 4287 1.1 christos xor in5, local1, in5 4288 1.1 christos 4289 1.1 christos sethi %hi(16711680), local5 4290 1.1 christos xor local4, in5, local4 4291 1.1 christos 4292 1.1 christos and local4, local3, local4 4293 1.1 christos or local5, 255, local5 4294 1.1 christos 4295 1.1 christos sll local4, 2, local2 4296 1.1 christos xor in5, local4, in5 4297 1.1 christos 4298 1.1 christos srl in5, 8, local4 4299 1.1 christos xor out5, local2, out5 4300 1.1 christos 4301 1.1 christos xor local4, out5, local4 4302 1.1 christos add global1, 768, global4 4303 1.1 christos 4304 1.1 christos and local4, local5, local4 4305 1.1 christos add global1, 1024, global5 4306 1.1 christos 4307 1.1 christos ld [out2+272], local7 4308 1.1 christos sll local4, 8, local1 4309 1.1 christos xor out5, local4, out5 4310 1.1 christos 4311 1.1 christos srl out5, 1, local4 4312 1.1 christos xor in5, local1, in5 4313 1.1 christos 4314 1.1 christos ld [in4], out0 ! key 7531 4315 1.1 christos xor local4, in5, local4 4316 1.1 christos add global1, 256, global2 4317 1.1 christos 4318 1.1 christos ld [in4+4], out1 ! key 8642 4319 1.1 christos and local4, local7, local4 4320 1.1 christos add global1, 512, global3 4321 1.1 christos 4322 1.1 christos sll local4, 1, local1 4323 1.1 christos xor in5, local4, in5 4324 1.1 christos 4325 1.1 christos sll in5, 3, local3 4326 1.1 christos xor out5, local1, out5 4327 1.1 christos 4328 1.1 christos sll out5, 3, local2 4329 1.1 christos add global1, 1280, local6 ! address sbox 8 4330 1.1 christos 4331 1.1 christos srl in5, 29, local4 4332 1.1 christos add global1, 1792, out3 ! address sbox 8 4333 1.1 christos 4334 1.1 christos srl out5, 29, local1 4335 1.1 christos or local4, local3, in5 4336 1.1 christos 4337 1.1 christos or local2, local1, out5 4338 1.1 christos 4339 1.1 christos 4340 1.1 christos 4341 1.1 christos 4342 1.1 christos 4343 1.1 christos ld [out2+284], local5 ! 0x0000FC00 used in the rounds 4344 1.1 christos or local2, local1, out5 4345 1.1 christos xor in5, out0, local1 4346 1.1 christos 4347 1.1 christos call .des_dec.1 4348 1.1 christos and local1, 252, local1 4349 1.1 christos 4350 1.1 christos 4351 1.1 christos ! inc .des_dec ks3 in4 4352 1.1 christos 4353 1.1 christos call .des_enc ! ks2 in3 4354 1.1 christos LDPTR [%sp+BIAS+ARG0+3*ARGSZ] , in4 4355 1.1 christos 4356 1.1 christos call .des_dec ! ks1 in4 4357 1.1 christos nop 4358 1.1 christos 4359 1.1 christos 4360 1.1 christos 4361 1.1 christos ! fp_macro 4362 1.1 christos ! out5 in5 0 1 4363 1.1 christos 4364 1.1 christos ! initially undo the rotate 3 left done after initial permutation 4365 1.1 christos ! original left is received shifted 3 right and 29 left in local3/4 4366 1.1 christos 4367 1.1 christos sll in5, 29, local1 4368 1.1 christos or local3, local4, out5 4369 1.1 christos 4370 1.1 christos srl in5, 3, in5 4371 1.1 christos sethi %hi(0x55555555), local2 4372 1.1 christos 4373 1.1 christos or in5, local1, in5 4374 1.1 christos or local2, %lo(0x55555555), local2 4375 1.1 christos 4376 1.1 christos srl in5, 1, local3 4377 1.1 christos sethi %hi(0x00ff00ff), local1 4378 1.1 christos xor local3, out5, local3 4379 1.1 christos or local1, %lo(0x00ff00ff), local1 4380 1.1 christos and local3, local2, local3 4381 1.1 christos sethi %hi(0x33333333), local4 4382 1.1 christos sll local3, 1, local2 4383 1.1 christos 4384 1.1 christos xor out5, local3, out5 4385 1.1 christos 4386 1.1 christos srl out5, 8, local3 4387 1.1 christos xor in5, local2, in5 4388 1.1 christos xor local3, in5, local3 4389 1.1 christos or local4, %lo(0x33333333), local4 4390 1.1 christos and local3, local1, local3 4391 1.1 christos sethi %hi(0x0000ffff), local1 4392 1.1 christos sll local3, 8, local2 4393 1.1 christos 4394 1.1 christos xor in5, local3, in5 4395 1.1 christos 4396 1.1 christos srl in5, 2, local3 4397 1.1 christos xor out5, local2, out5 4398 1.1 christos xor local3, out5, local3 4399 1.1 christos or local1, %lo(0x0000ffff), local1 4400 1.1 christos and local3, local4, local3 4401 1.1 christos sethi %hi(0x0f0f0f0f), local4 4402 1.1 christos sll local3, 2, local2 4403 1.1 christos 4404 1.1 christos LDPTR [%sp+BIAS+ARG0+0*ARGSZ] , local5 4405 1.1 christos xor out5, local3, out5 4406 1.1 christos 4407 1.1 christos LDPTR [%sp+BIAS+ARG0+1*ARGSZ] , local7 4408 1.1 christos srl out5, 16, local3 4409 1.1 christos xor in5, local2, in5 4410 1.1 christos xor local3, in5, local3 4411 1.1 christos or local4, %lo(0x0f0f0f0f), local4 4412 1.1 christos and local3, local1, local3 4413 1.1 christos sll local3, 16, local2 4414 1.1 christos 4415 1.1 christos xor in5, local3, local1 4416 1.1 christos 4417 1.1 christos srl local1, 4, local3 4418 1.1 christos xor out5, local2, out5 4419 1.1 christos xor local3, out5, local3 4420 1.1 christos and local3, local4, local3 4421 1.1 christos sll local3, 4, local2 4422 1.1 christos 4423 1.1 christos xor out5, local3, out5 4424 1.1 christos 4425 1.1 christos ! optional store: 4426 1.1 christos 4427 1.1 christos 4428 1.1 christos 4429 1.1 christos xor local1, local2, in5 4430 1.1 christos 4431 1.1 christos 4432 1.1 christos 4433 1.1 christos ! 1 for input and output address local5/7 4434 1.1 christos 4435 1.1 christos ! in2 is bytes left to be stored 4436 1.1 christos ! in2 is compared to 8 in the rounds 4437 1.1 christos 4438 1.1 christos xor out5, in0, out4 4439 1.1 christos bl .ede3.dec.seven.or.less 4440 1.1 christos xor in5, in1, global4 4441 1.1 christos 4442 1.1 christos 4443 1.1 christos 4444 1.1 christos ! load_little_endian_inc 4445 1.1 christos ! local5 in0 in1 local3 .LLE10 4446 1.1 christos 4447 1.1 christos ! first in memory to rightmost in register 4448 1.1 christos 4449 1.1 christos .LLE10: 4450 1.1 christos ldub [local5+3], in0 4451 1.1 christos 4452 1.1 christos ldub [local5+2], local3 4453 1.1 christos sll in0, 8, in0 4454 1.1 christos or in0, local3, in0 4455 1.1 christos 4456 1.1 christos ldub [local5+1], local3 4457 1.1 christos sll in0, 8, in0 4458 1.1 christos or in0, local3, in0 4459 1.1 christos 4460 1.1 christos ldub [local5+0], local3 4461 1.1 christos sll in0, 8, in0 4462 1.1 christos or in0, local3, in0 4463 1.1 christos 4464 1.1 christos ldub [local5+3+4], in1 4465 1.1 christos add local5, 8, local5 4466 1.1 christos 4467 1.1 christos ldub [local5+2+4-8], local3 4468 1.1 christos sll in1, 8, in1 4469 1.1 christos or in1, local3, in1 4470 1.1 christos 4471 1.1 christos ldub [local5+1+4-8], local3 4472 1.1 christos sll in1, 8, in1 4473 1.1 christos or in1, local3, in1 4474 1.1 christos 4475 1.1 christos ldub [local5+0+4-8], local3 4476 1.1 christos sll in1, 8, in1 4477 1.1 christos or in1, local3, in1 4478 1.1 christos .LLE10a: 4479 1.1 christos 4480 1.1 christos ! iv next block 4481 1.1 christos 4482 1.1 christos 4483 1.1 christos 4484 1.1 christos ! store_little_endian 4485 1.1 christos ! local7 out4 global4 local3 .SLE7 4486 1.1 christos 4487 1.1 christos ! rightmost in register to first in memory 4488 1.1 christos 4489 1.1 christos .SLE7: 4490 1.1 christos and out4, 255, local3 4491 1.1 christos stub local3, [local7+0] 4492 1.1 christos 4493 1.1 christos srl out4, 8, local3 4494 1.1 christos and local3, 255, local3 4495 1.1 christos stub local3, [local7+1] 4496 1.1 christos 4497 1.1 christos srl out4, 16, local3 4498 1.1 christos and local3, 255, local3 4499 1.1 christos stub local3, [local7+2] 4500 1.1 christos 4501 1.1 christos srl out4, 24, local3 4502 1.1 christos stub local3, [local7+3] 4503 1.1 christos 4504 1.1 christos 4505 1.1 christos and global4, 255, local3 4506 1.1 christos stub local3, [local7+0+4] 4507 1.1 christos 4508 1.1 christos srl global4, 8, local3 4509 1.1 christos and local3, 255, local3 4510 1.1 christos stub local3, [local7+1+4] 4511 1.1 christos 4512 1.1 christos srl global4, 16, local3 4513 1.1 christos and local3, 255, local3 4514 1.1 christos stub local3, [local7+2+4] 4515 1.1 christos 4516 1.1 christos srl global4, 24, local3 4517 1.1 christos stub local3, [local7+3+4] 4518 1.1 christos 4519 1.1 christos .SLE7a: 4520 1.1 christos 4521 1.1 christos ! block 4522 1.1 christos 4523 1.1 christos STPTR local5, [%sp+BIAS+ARG0+0*ARGSZ] 4524 1.1 christos addcc in2, -8, in2 4525 1.1 christos add local7, 8, local7 4526 1.1 christos 4527 1.1 christos bg .ede3.dec.next.block 4528 1.1 christos STPTR local7, [%sp+BIAS+ARG0+1*ARGSZ] 4529 1.1 christos 4530 1.1 christos .ede3.dec.store.iv: 4531 1.1 christos 4532 1.1 christos LDPTR [%fp+BIAS+ARG0+6*ARGSZ], local4 ! ivec 4533 1.1 christos 4534 1.1 christos 4535 1.1 christos ! store_little_endian 4536 1.1 christos ! local4 in0 in1 local5 .SLE8 4537 1.1 christos 4538 1.1 christos ! rightmost in register to first in memory 4539 1.1 christos 4540 1.1 christos .SLE8: 4541 1.1 christos and in0, 255, local5 4542 1.1 christos stub local5, [local4+0] 4543 1.1 christos 4544 1.1 christos srl in0, 8, local5 4545 1.1 christos and local5, 255, local5 4546 1.1 christos stub local5, [local4+1] 4547 1.1 christos 4548 1.1 christos srl in0, 16, local5 4549 1.1 christos and local5, 255, local5 4550 1.1 christos stub local5, [local4+2] 4551 1.1 christos 4552 1.1 christos srl in0, 24, local5 4553 1.1 christos stub local5, [local4+3] 4554 1.1 christos 4555 1.1 christos 4556 1.1 christos and in1, 255, local5 4557 1.1 christos stub local5, [local4+0+4] 4558 1.1 christos 4559 1.1 christos srl in1, 8, local5 4560 1.1 christos and local5, 255, local5 4561 1.1 christos stub local5, [local4+1+4] 4562 1.1 christos 4563 1.1 christos srl in1, 16, local5 4564 1.1 christos and local5, 255, local5 4565 1.1 christos stub local5, [local4+2+4] 4566 1.1 christos 4567 1.1 christos srl in1, 24, local5 4568 1.1 christos stub local5, [local4+3+4] 4569 1.1 christos 4570 1.1 christos .SLE8a: 4571 1.1 christos 4572 1.1 christos ! ivec 4573 1.1 christos 4574 1.1 christos .ede3.dec.finish: 4575 1.1 christos 4576 1.1 christos ret 4577 1.1 christos restore 4578 1.1 christos 4579 1.1 christos .ede3.dec.seven.or.less: 4580 1.1 christos 4581 1.1 christos 4582 1.1 christos 4583 1.1 christos ! load_little_endian_inc 4584 1.1 christos ! local5 in0 in1 local3 .LLE14 4585 1.1 christos 4586 1.1 christos ! first in memory to rightmost in register 4587 1.1 christos 4588 1.1 christos .LLE14: 4589 1.1 christos ldub [local5+3], in0 4590 1.1 christos 4591 1.1 christos ldub [local5+2], local3 4592 1.1 christos sll in0, 8, in0 4593 1.1 christos or in0, local3, in0 4594 1.1 christos 4595 1.1 christos ldub [local5+1], local3 4596 1.1 christos sll in0, 8, in0 4597 1.1 christos or in0, local3, in0 4598 1.1 christos 4599 1.1 christos ldub [local5+0], local3 4600 1.1 christos sll in0, 8, in0 4601 1.1 christos or in0, local3, in0 4602 1.1 christos 4603 1.1 christos ldub [local5+3+4], in1 4604 1.1 christos add local5, 8, local5 4605 1.1 christos 4606 1.1 christos ldub [local5+2+4-8], local3 4607 1.1 christos sll in1, 8, in1 4608 1.1 christos or in1, local3, in1 4609 1.1 christos 4610 1.1 christos ldub [local5+1+4-8], local3 4611 1.1 christos sll in1, 8, in1 4612 1.1 christos or in1, local3, in1 4613 1.1 christos 4614 1.1 christos ldub [local5+0+4-8], local3 4615 1.1 christos sll in1, 8, in1 4616 1.1 christos or in1, local3, in1 4617 1.1 christos .LLE14a: 4618 1.1 christos 4619 1.1 christos ! iv 4620 1.1 christos 4621 1.1 christos 4622 1.1 christos 4623 1.1 christos ! store_n_bytes 4624 1.1 christos ! local7 in2 local3 local4 .SNB2 .ede3.dec.store.iv .SNB2 .ede3.dec.store.iv 4625 1.1 christos 4626 1.1 christos .SNB2.0: call .+8 4627 1.1 christos sll in2, 2, local4 4628 1.1 christos 4629 1.1 christos add %o7,.SNB2.jmp.table-.SNB2.0,local3 4630 1.1 christos 4631 1.1 christos add local3, local4, local3 4632 1.1 christos 4633 1.1 christos ld [local3], local3 4634 1.1 christos 4635 1.1 christos jmp %o7+local3 4636 1.1 christos nop 4637 1.1 christos 4638 1.1 christos .SNB2.7: 4639 1.1 christos srl global4, 16, local3 4640 1.1 christos and local3, 0xff, local3 4641 1.1 christos stub local3, [local7+6] 4642 1.1 christos .SNB2.6: 4643 1.1 christos srl global4, 8, local3 4644 1.1 christos and local3, 0xff, local3 4645 1.1 christos stub local3, [local7+5] 4646 1.1 christos .SNB2.5: 4647 1.1 christos and global4, 0xff, local3 4648 1.1 christos stub local3, [local7+4] 4649 1.1 christos .SNB2.4: 4650 1.1 christos srl out4, 24, local3 4651 1.1 christos stub local3, [local7+3] 4652 1.1 christos .SNB2.3: 4653 1.1 christos srl out4, 16, local3 4654 1.1 christos and local3, 0xff, local3 4655 1.1 christos stub local3, [local7+2] 4656 1.1 christos .SNB2.2: 4657 1.1 christos srl out4, 8, local3 4658 1.1 christos and local3, 0xff, local3 4659 1.1 christos stub local3, [local7+1] 4660 1.1 christos .SNB2.1: 4661 1.1 christos and out4, 0xff, local3 4662 1.1 christos 4663 1.1 christos 4664 1.1 christos ba .ede3.dec.store.iv 4665 1.1 christos stub local3, [local7] 4666 1.1 christos 4667 1.1 christos .align 4 4668 1.1 christos 4669 1.1 christos .SNB2.jmp.table: 4670 1.1 christos 4671 1.1 christos .word 0 4672 1.1 christos .word .SNB2.1-.SNB2.0 4673 1.1 christos .word .SNB2.2-.SNB2.0 4674 1.1 christos .word .SNB2.3-.SNB2.0 4675 1.1 christos .word .SNB2.4-.SNB2.0 4676 1.1 christos .word .SNB2.5-.SNB2.0 4677 1.1 christos .word .SNB2.6-.SNB2.0 4678 1.1 christos .word .SNB2.7-.SNB2.0 4679 1.1 christos 4680 1.1 christos 4681 1.1 christos 4682 1.1 christos .DES_ede3_cbc_encrypt.end: 4683 1.1 christos .size DES_ede3_cbc_encrypt,.DES_ede3_cbc_encrypt.end-DES_ede3_cbc_encrypt 4684 1.1 christos 4685 1.1 christos .align 256 4686 1.1 christos .type .des_and,#object 4687 1.1 christos .size .des_and,284 4688 1.1 christos 4689 1.1 christos .des_and: 4690 1.1 christos 4691 1.1 christos ! This table is used for AND 0xFC when it is known that register 4692 1.1 christos ! bits 8-31 are zero. Makes it possible to do three arithmetic 4693 1.1 christos ! operations in one cycle. 4694 1.1 christos 4695 1.1 christos .byte 0, 0, 0, 0, 4, 4, 4, 4 4696 1.1 christos .byte 8, 8, 8, 8, 12, 12, 12, 12 4697 1.1 christos .byte 16, 16, 16, 16, 20, 20, 20, 20 4698 1.1 christos .byte 24, 24, 24, 24, 28, 28, 28, 28 4699 1.1 christos .byte 32, 32, 32, 32, 36, 36, 36, 36 4700 1.1 christos .byte 40, 40, 40, 40, 44, 44, 44, 44 4701 1.1 christos .byte 48, 48, 48, 48, 52, 52, 52, 52 4702 1.1 christos .byte 56, 56, 56, 56, 60, 60, 60, 60 4703 1.1 christos .byte 64, 64, 64, 64, 68, 68, 68, 68 4704 1.1 christos .byte 72, 72, 72, 72, 76, 76, 76, 76 4705 1.1 christos .byte 80, 80, 80, 80, 84, 84, 84, 84 4706 1.1 christos .byte 88, 88, 88, 88, 92, 92, 92, 92 4707 1.1 christos .byte 96, 96, 96, 96, 100, 100, 100, 100 4708 1.1 christos .byte 104, 104, 104, 104, 108, 108, 108, 108 4709 1.1 christos .byte 112, 112, 112, 112, 116, 116, 116, 116 4710 1.1 christos .byte 120, 120, 120, 120, 124, 124, 124, 124 4711 1.1 christos .byte 128, 128, 128, 128, 132, 132, 132, 132 4712 1.1 christos .byte 136, 136, 136, 136, 140, 140, 140, 140 4713 1.1 christos .byte 144, 144, 144, 144, 148, 148, 148, 148 4714 1.1 christos .byte 152, 152, 152, 152, 156, 156, 156, 156 4715 1.1 christos .byte 160, 160, 160, 160, 164, 164, 164, 164 4716 1.1 christos .byte 168, 168, 168, 168, 172, 172, 172, 172 4717 1.1 christos .byte 176, 176, 176, 176, 180, 180, 180, 180 4718 1.1 christos .byte 184, 184, 184, 184, 188, 188, 188, 188 4719 1.1 christos .byte 192, 192, 192, 192, 196, 196, 196, 196 4720 1.1 christos .byte 200, 200, 200, 200, 204, 204, 204, 204 4721 1.1 christos .byte 208, 208, 208, 208, 212, 212, 212, 212 4722 1.1 christos .byte 216, 216, 216, 216, 220, 220, 220, 220 4723 1.1 christos .byte 224, 224, 224, 224, 228, 228, 228, 228 4724 1.1 christos .byte 232, 232, 232, 232, 236, 236, 236, 236 4725 1.1 christos .byte 240, 240, 240, 240, 244, 244, 244, 244 4726 1.1 christos .byte 248, 248, 248, 248, 252, 252, 252, 252 4727 1.1 christos 4728 1.1.1.2 christos ! 5 numbers for initial/final permutation 4729 1.1 christos 4730 1.1 christos .word 0x0f0f0f0f ! offset 256 4731 1.1 christos .word 0x0000ffff ! 260 4732 1.1 christos .word 0x33333333 ! 264 4733 1.1 christos .word 0x00ff00ff ! 268 4734 1.1 christos .word 0x55555555 ! 272 4735 1.1 christos 4736 1.1 christos .word 0 ! 276 4737 1.1 christos .word LOOPS ! 280 4738 1.1 christos .word 0x0000FC00 ! 284 4739 1.1 christos 4740 1.1 christos .global DES_SPtrans 4741 1.1 christos .type DES_SPtrans,#object 4742 1.1 christos .size DES_SPtrans,2048 4743 1.1 christos .align 64 4744 1.1 christos DES_SPtrans: 4745 1.1 christos _PIC_DES_SPtrans: 4746 1.1 christos ! nibble 0 4747 1.1 christos .word 0x02080800, 0x00080000, 0x02000002, 0x02080802 4748 1.1 christos .word 0x02000000, 0x00080802, 0x00080002, 0x02000002 4749 1.1 christos .word 0x00080802, 0x02080800, 0x02080000, 0x00000802 4750 1.1 christos .word 0x02000802, 0x02000000, 0x00000000, 0x00080002 4751 1.1 christos .word 0x00080000, 0x00000002, 0x02000800, 0x00080800 4752 1.1 christos .word 0x02080802, 0x02080000, 0x00000802, 0x02000800 4753 1.1 christos .word 0x00000002, 0x00000800, 0x00080800, 0x02080002 4754 1.1 christos .word 0x00000800, 0x02000802, 0x02080002, 0x00000000 4755 1.1 christos .word 0x00000000, 0x02080802, 0x02000800, 0x00080002 4756 1.1 christos .word 0x02080800, 0x00080000, 0x00000802, 0x02000800 4757 1.1 christos .word 0x02080002, 0x00000800, 0x00080800, 0x02000002 4758 1.1 christos .word 0x00080802, 0x00000002, 0x02000002, 0x02080000 4759 1.1 christos .word 0x02080802, 0x00080800, 0x02080000, 0x02000802 4760 1.1 christos .word 0x02000000, 0x00000802, 0x00080002, 0x00000000 4761 1.1 christos .word 0x00080000, 0x02000000, 0x02000802, 0x02080800 4762 1.1 christos .word 0x00000002, 0x02080002, 0x00000800, 0x00080802 4763 1.1 christos ! nibble 1 4764 1.1 christos .word 0x40108010, 0x00000000, 0x00108000, 0x40100000 4765 1.1 christos .word 0x40000010, 0x00008010, 0x40008000, 0x00108000 4766 1.1 christos .word 0x00008000, 0x40100010, 0x00000010, 0x40008000 4767 1.1 christos .word 0x00100010, 0x40108000, 0x40100000, 0x00000010 4768 1.1 christos .word 0x00100000, 0x40008010, 0x40100010, 0x00008000 4769 1.1 christos .word 0x00108010, 0x40000000, 0x00000000, 0x00100010 4770 1.1 christos .word 0x40008010, 0x00108010, 0x40108000, 0x40000010 4771 1.1 christos .word 0x40000000, 0x00100000, 0x00008010, 0x40108010 4772 1.1 christos .word 0x00100010, 0x40108000, 0x40008000, 0x00108010 4773 1.1 christos .word 0x40108010, 0x00100010, 0x40000010, 0x00000000 4774 1.1 christos .word 0x40000000, 0x00008010, 0x00100000, 0x40100010 4775 1.1 christos .word 0x00008000, 0x40000000, 0x00108010, 0x40008010 4776 1.1 christos .word 0x40108000, 0x00008000, 0x00000000, 0x40000010 4777 1.1 christos .word 0x00000010, 0x40108010, 0x00108000, 0x40100000 4778 1.1 christos .word 0x40100010, 0x00100000, 0x00008010, 0x40008000 4779 1.1 christos .word 0x40008010, 0x00000010, 0x40100000, 0x00108000 4780 1.1 christos ! nibble 2 4781 1.1 christos .word 0x04000001, 0x04040100, 0x00000100, 0x04000101 4782 1.1 christos .word 0x00040001, 0x04000000, 0x04000101, 0x00040100 4783 1.1 christos .word 0x04000100, 0x00040000, 0x04040000, 0x00000001 4784 1.1 christos .word 0x04040101, 0x00000101, 0x00000001, 0x04040001 4785 1.1 christos .word 0x00000000, 0x00040001, 0x04040100, 0x00000100 4786 1.1 christos .word 0x00000101, 0x04040101, 0x00040000, 0x04000001 4787 1.1 christos .word 0x04040001, 0x04000100, 0x00040101, 0x04040000 4788 1.1 christos .word 0x00040100, 0x00000000, 0x04000000, 0x00040101 4789 1.1 christos .word 0x04040100, 0x00000100, 0x00000001, 0x00040000 4790 1.1 christos .word 0x00000101, 0x00040001, 0x04040000, 0x04000101 4791 1.1 christos .word 0x00000000, 0x04040100, 0x00040100, 0x04040001 4792 1.1 christos .word 0x00040001, 0x04000000, 0x04040101, 0x00000001 4793 1.1 christos .word 0x00040101, 0x04000001, 0x04000000, 0x04040101 4794 1.1 christos .word 0x00040000, 0x04000100, 0x04000101, 0x00040100 4795 1.1 christos .word 0x04000100, 0x00000000, 0x04040001, 0x00000101 4796 1.1 christos .word 0x04000001, 0x00040101, 0x00000100, 0x04040000 4797 1.1 christos ! nibble 3 4798 1.1 christos .word 0x00401008, 0x10001000, 0x00000008, 0x10401008 4799 1.1 christos .word 0x00000000, 0x10400000, 0x10001008, 0x00400008 4800 1.1 christos .word 0x10401000, 0x10000008, 0x10000000, 0x00001008 4801 1.1 christos .word 0x10000008, 0x00401008, 0x00400000, 0x10000000 4802 1.1 christos .word 0x10400008, 0x00401000, 0x00001000, 0x00000008 4803 1.1 christos .word 0x00401000, 0x10001008, 0x10400000, 0x00001000 4804 1.1 christos .word 0x00001008, 0x00000000, 0x00400008, 0x10401000 4805 1.1 christos .word 0x10001000, 0x10400008, 0x10401008, 0x00400000 4806 1.1 christos .word 0x10400008, 0x00001008, 0x00400000, 0x10000008 4807 1.1 christos .word 0x00401000, 0x10001000, 0x00000008, 0x10400000 4808 1.1 christos .word 0x10001008, 0x00000000, 0x00001000, 0x00400008 4809 1.1 christos .word 0x00000000, 0x10400008, 0x10401000, 0x00001000 4810 1.1 christos .word 0x10000000, 0x10401008, 0x00401008, 0x00400000 4811 1.1 christos .word 0x10401008, 0x00000008, 0x10001000, 0x00401008 4812 1.1 christos .word 0x00400008, 0x00401000, 0x10400000, 0x10001008 4813 1.1 christos .word 0x00001008, 0x10000000, 0x10000008, 0x10401000 4814 1.1 christos ! nibble 4 4815 1.1 christos .word 0x08000000, 0x00010000, 0x00000400, 0x08010420 4816 1.1 christos .word 0x08010020, 0x08000400, 0x00010420, 0x08010000 4817 1.1 christos .word 0x00010000, 0x00000020, 0x08000020, 0x00010400 4818 1.1 christos .word 0x08000420, 0x08010020, 0x08010400, 0x00000000 4819 1.1 christos .word 0x00010400, 0x08000000, 0x00010020, 0x00000420 4820 1.1 christos .word 0x08000400, 0x00010420, 0x00000000, 0x08000020 4821 1.1 christos .word 0x00000020, 0x08000420, 0x08010420, 0x00010020 4822 1.1 christos .word 0x08010000, 0x00000400, 0x00000420, 0x08010400 4823 1.1 christos .word 0x08010400, 0x08000420, 0x00010020, 0x08010000 4824 1.1 christos .word 0x00010000, 0x00000020, 0x08000020, 0x08000400 4825 1.1 christos .word 0x08000000, 0x00010400, 0x08010420, 0x00000000 4826 1.1 christos .word 0x00010420, 0x08000000, 0x00000400, 0x00010020 4827 1.1 christos .word 0x08000420, 0x00000400, 0x00000000, 0x08010420 4828 1.1 christos .word 0x08010020, 0x08010400, 0x00000420, 0x00010000 4829 1.1 christos .word 0x00010400, 0x08010020, 0x08000400, 0x00000420 4830 1.1 christos .word 0x00000020, 0x00010420, 0x08010000, 0x08000020 4831 1.1 christos ! nibble 5 4832 1.1 christos .word 0x80000040, 0x00200040, 0x00000000, 0x80202000 4833 1.1 christos .word 0x00200040, 0x00002000, 0x80002040, 0x00200000 4834 1.1 christos .word 0x00002040, 0x80202040, 0x00202000, 0x80000000 4835 1.1 christos .word 0x80002000, 0x80000040, 0x80200000, 0x00202040 4836 1.1 christos .word 0x00200000, 0x80002040, 0x80200040, 0x00000000 4837 1.1 christos .word 0x00002000, 0x00000040, 0x80202000, 0x80200040 4838 1.1 christos .word 0x80202040, 0x80200000, 0x80000000, 0x00002040 4839 1.1 christos .word 0x00000040, 0x00202000, 0x00202040, 0x80002000 4840 1.1 christos .word 0x00002040, 0x80000000, 0x80002000, 0x00202040 4841 1.1 christos .word 0x80202000, 0x00200040, 0x00000000, 0x80002000 4842 1.1 christos .word 0x80000000, 0x00002000, 0x80200040, 0x00200000 4843 1.1 christos .word 0x00200040, 0x80202040, 0x00202000, 0x00000040 4844 1.1 christos .word 0x80202040, 0x00202000, 0x00200000, 0x80002040 4845 1.1 christos .word 0x80000040, 0x80200000, 0x00202040, 0x00000000 4846 1.1 christos .word 0x00002000, 0x80000040, 0x80002040, 0x80202000 4847 1.1 christos .word 0x80200000, 0x00002040, 0x00000040, 0x80200040 4848 1.1 christos ! nibble 6 4849 1.1 christos .word 0x00004000, 0x00000200, 0x01000200, 0x01000004 4850 1.1 christos .word 0x01004204, 0x00004004, 0x00004200, 0x00000000 4851 1.1 christos .word 0x01000000, 0x01000204, 0x00000204, 0x01004000 4852 1.1 christos .word 0x00000004, 0x01004200, 0x01004000, 0x00000204 4853 1.1 christos .word 0x01000204, 0x00004000, 0x00004004, 0x01004204 4854 1.1 christos .word 0x00000000, 0x01000200, 0x01000004, 0x00004200 4855 1.1 christos .word 0x01004004, 0x00004204, 0x01004200, 0x00000004 4856 1.1 christos .word 0x00004204, 0x01004004, 0x00000200, 0x01000000 4857 1.1 christos .word 0x00004204, 0x01004000, 0x01004004, 0x00000204 4858 1.1 christos .word 0x00004000, 0x00000200, 0x01000000, 0x01004004 4859 1.1 christos .word 0x01000204, 0x00004204, 0x00004200, 0x00000000 4860 1.1 christos .word 0x00000200, 0x01000004, 0x00000004, 0x01000200 4861 1.1 christos .word 0x00000000, 0x01000204, 0x01000200, 0x00004200 4862 1.1 christos .word 0x00000204, 0x00004000, 0x01004204, 0x01000000 4863 1.1 christos .word 0x01004200, 0x00000004, 0x00004004, 0x01004204 4864 1.1 christos .word 0x01000004, 0x01004200, 0x01004000, 0x00004004 4865 1.1 christos ! nibble 7 4866 1.1 christos .word 0x20800080, 0x20820000, 0x00020080, 0x00000000 4867 1.1 christos .word 0x20020000, 0x00800080, 0x20800000, 0x20820080 4868 1.1 christos .word 0x00000080, 0x20000000, 0x00820000, 0x00020080 4869 1.1 christos .word 0x00820080, 0x20020080, 0x20000080, 0x20800000 4870 1.1 christos .word 0x00020000, 0x00820080, 0x00800080, 0x20020000 4871 1.1 christos .word 0x20820080, 0x20000080, 0x00000000, 0x00820000 4872 1.1 christos .word 0x20000000, 0x00800000, 0x20020080, 0x20800080 4873 1.1 christos .word 0x00800000, 0x00020000, 0x20820000, 0x00000080 4874 1.1 christos .word 0x00800000, 0x00020000, 0x20000080, 0x20820080 4875 1.1 christos .word 0x00020080, 0x20000000, 0x00000000, 0x00820000 4876 1.1 christos .word 0x20800080, 0x20020080, 0x20020000, 0x00800080 4877 1.1 christos .word 0x20820000, 0x00000080, 0x00800080, 0x20020000 4878 1.1 christos .word 0x20820080, 0x00800000, 0x20800000, 0x20000080 4879 1.1 christos .word 0x00820000, 0x00020080, 0x20020080, 0x20800000 4880 1.1 christos .word 0x00000080, 0x20820000, 0x00820080, 0x00000000 4881 1.1 christos .word 0x20000000, 0x20800080, 0x00020000, 0x00820080 4882 1.1 christos 4883