1int64 x 2int64 arg2 3int64 arg3 4int64 arg4 5 6input x 7input arg2 8input arg3 9input arg4 10 11int64 i 12int64 a 13int64 m 14int64 out 15int64 bytes 16stack64 ctarget 17stack512 tmp 18 19stack64 bytes_stack 20stack64 out_stack 21stack64 m_stack 22stack64 x_stack 23 24int64 z0 25int64 z1 26int64 z2 27int64 z3 28int64 z4 29int64 z5 30int64 z6 31int64 z7 32int64 z8 33int64 z9 34int64 z10 35int64 z11 36int64 z12 37int64 z13 38int64 z14 39int64 z15 40 41int64 u0 42int64 u1 43int64 u2 44int64 u3 45int64 u4 46int64 u5 47int64 u6 48int64 u7 49int64 u8 50int64 u9 51int64 u10 52int64 u11 53int64 u12 54int64 u13 55int64 u14 56int64 u15 57 58int64 y0 59int64 y1 60int64 y2 61int64 y3 62int64 y4 63int64 y5 64int64 y6 65int64 y7 66int64 y8 67int64 y9 68int64 y10 69int64 y11 70int64 y12 71int64 y13 72int64 y14 73int64 y15 74 75int64 x0 76int64 x1 77int64 x2 78int64 x3 79int64 x4 80int64 x5 81int64 x6 82int64 x7 83int64 x8 84int64 x9 85int64 x10 86int64 x11 87int64 x12 88int64 x13 89int64 x14 90int64 x15 91 92int64 q0 93int64 q1 94int64 q2 95int64 q3 96int64 q4 97int64 q5 98int64 q6 99int64 q7 100int64 q8 101int64 q9 102int64 q10 103int64 q11 104int64 q12 105int64 q13 106int64 q14 107int64 q15 108 109int64 m0 110int64 m1 111int64 m2 112int64 m3 113int64 m4 114int64 m5 115int64 m6 116int64 m7 117int64 m8 118int64 m9 119int64 m10 120int64 m11 121int64 m12 122int64 m13 123int64 m14 124int64 m15 125 126enter ECRYPT_init 127leave 128 129 130enter ECRYPT_ivsetup 131 x6 = *(uint32 *) (arg2 + 0) 132 x8 = 0 133 x7 = *(uint32 *) (arg2 + 4) 134 x9 = 0 135 x += 24 136 *(swapendian int32 *) x = x6 137 x += 4 138 *(swapendian int32 *) x = x7 139 x += 4 140 *(int32 *) (x + 0) = x8 141 x += 4 142 *(int32 *) (x + 0) = x9 143leave 144 145 146enter ECRYPT_keysetup 147 148 unsigned>? arg3 - 128 149goto kbits256 if unsigned> 150 151kbits128: 152 153 x1 = *(uint32 *) (arg2 + 0) 154 x0 = 1634760805 & 0xfffffc00 155 x2 = *(uint32 *) (arg2 + 4) 156 x5 = 824206446 & 0xfffffc00 157 x3 = *(uint32 *) (arg2 + 8) 158 x10 = 2036477238 & 0xfffffc00 159 x4 = *(uint32 *) (arg2 + 12) 160 x15 = 1797285236 & 0xfffffc00 161 x11 = *(uint32 *) (arg2 + 0) 162 x0 |= 1634760805 & 0x3ff 163 x12 = *(uint32 *) (arg2 + 4) 164 x5 |= 824206446 & 0x3ff 165 x13 = *(uint32 *) (arg2 + 8) 166 x10 |= 2036477238 & 0x3ff 167 x14 = *(uint32 *) (arg2 + 12) 168 x15 |= 1797285236 & 0x3ff 169 170goto storekey 171 172kbits256: 173 174 x1 = *(uint32 *) (arg2 + 0) 175 x0 = 1634760805 & 0xfffffc00 176 x2 = *(uint32 *) (arg2 + 4) 177 x5 = 857760878 & 0xfffffc00 178 x3 = *(uint32 *) (arg2 + 8) 179 x10 = 2036477234 & 0xfffffc00 180 x4 = *(uint32 *) (arg2 + 12) 181 x15 = 1797285236 & 0xfffffc00 182 x11 = *(uint32 *) (arg2 + 16) 183 x0 |= 1634760805 & 0x3ff 184 x12 = *(uint32 *) (arg2 + 20) 185 x5 |= 857760878 & 0x3ff 186 x13 = *(uint32 *) (arg2 + 24) 187 x10 |= 2036477234 & 0x3ff 188 x14 = *(uint32 *) (arg2 + 28) 189 x15 |= 1797285236 & 0x3ff 190 191storekey: 192 193 *(int32 *) (x + 0) = x0 194 x += 4 195 *(swapendian int32 *) x = x1 196 x += 4 197 *(swapendian int32 *) x = x2 198 x += 4 199 *(swapendian int32 *) x = x3 200 x += 4 201 *(swapendian int32 *) x = x4 202 x += 4 203 *(int32 *) (x + 0) = x5 204 x += 20 205 *(int32 *) (x + 0) = x10 206 x += 4 207 *(swapendian int32 *) x = x11 208 x += 4 209 *(swapendian int32 *) x = x12 210 x += 4 211 *(swapendian int32 *) x = x13 212 x += 4 213 *(swapendian int32 *) x = x14 214 x += 4 215 *(int32 *) (x + 0) = x15 216 217leave 218 219 220enter ECRYPT_keystream_bytes 221 222bytes = arg3 223m = arg2 224out = arg2 225 226 unsigned>? bytes - 0 227goto done if !unsigned> 228 229 a = 0 230 i = bytes 231 zeroloop: 232 *(int8 *) (out + 0) = a 233 out += 1 234 unsigned>? i -= 1 235 goto zeroloop if unsigned> 236 out -= bytes 237 238goto bytesatleast1 239 240enter ECRYPT_decrypt_bytes 241 242bytes = arg4 243m = arg2 244out = arg3 245 246 unsigned>? bytes - 0 247goto done if !unsigned> 248goto bytesatleast1 249 250enter ECRYPT_encrypt_bytes 251 252bytes = arg4 253m = arg2 254out = arg3 255 256 unsigned>? bytes - 0 257goto done if !unsigned> 258bytesatleast1: 259 260 unsigned<? bytes - 64 261 goto bytesatleast64 if !unsigned< 262 263 ctarget = out 264 out = &tmp 265 i = 0 266 mcopyloop: 267 a = *(int8 *) (m + i) 268 *(int8 *) (out + i) = a 269 i += 1 270 unsigned<? i - bytes 271 goto mcopyloop if unsigned< 272 m = &tmp 273 274 bytesatleast64: 275 276 x0 = *(uint32 *) (x + 0) 277 x1 = *(uint32 *) (x + 4) 278 x2 = *(uint32 *) (x + 8) 279 x3 = *(uint32 *) (x + 12) 280 x4 = *(uint32 *) (x + 16) 281 x5 = *(uint32 *) (x + 20) 282 x6 = *(uint32 *) (x + 24) 283 x7 = *(uint32 *) (x + 28) 284 x8 = *(uint32 *) (x + 32) 285 x9 = *(uint32 *) (x + 36) 286 x10 = *(uint32 *) (x + 40) 287 x11 = *(uint32 *) (x + 44) 288 x12 = *(uint32 *) (x + 48) 289 x13 = *(uint32 *) (x + 52) 290 x14 = *(uint32 *) (x + 56) 291 x15 = *(uint32 *) (x + 60) 292 293 i = 20 294 295 bytes_stack = bytes 296 out_stack = out 297 m_stack = m 298 x_stack = x 299 300 mainloop: 301 302 303 304y4 = x0 + x12 305 y9 = x5 + x1 306z4 = (uint32) y4 << 7 307 y14 = x10 + x6 308y4 = (uint32) y4 >> 25 309 y3 = x15 + x11 310 z9 = (uint32) y9 << 7 311y4 |= z4 312 y9 = (uint32) y9 >> 25 313x4 ^= y4 314 z14 = (uint32) y14 << 7 315 y9 |= z9 316 y14 = (uint32) y14 >> 25 317y8 = x4 + x0 318 z3 = (uint32) y3 << 7 319 x9 ^= y9 320 y3 = (uint32) y3 >> 25 321 y14 |= z14 322z8 = (uint32) y8 << 9 323 y13 = x9 + x5 324y8 = (uint32) y8 >> 23 325 x14 ^= y14 326 y3 |= z3 327 y2 = x14 + x10 328 z13 = (uint32) y13 << 9 329 x3 ^= y3 330 y13 = (uint32) y13 >> 23 331y8 |= z8 332 z2 = (uint32) y2 << 9 333 y7 = x3 + x15 334 y2 = (uint32) y2 >> 23 335x8 ^= y8 336 y13 |= z13 337y12 = x8 + x4 338 z7 = (uint32) y7 << 9 339 x13 ^= y13 340 y7 = (uint32) y7 >> 23 341 y2 |= z2 342z12 = (uint32) y12 << 13 343 y1 = x13 + x9 344y12 = (uint32) y12 >> 19 345 x2 ^= y2 346 y7 |= z7 347 y6 = x2 + x14 348 z1 = (uint32) y1 << 13 349 x7 ^= y7 350 y1 = (uint32) y1 >> 19 351y12 |= z12 352 z6 = (uint32) y6 << 13 353 y11 = x7 + x3 354 y6 = (uint32) y6 >> 19 355x12 ^= y12 356 y1 |= z1 357y0 = x12 + x8 358 z11 = (uint32) y11 << 13 359 x1 ^= y1 360 y11 = (uint32) y11 >> 19 361 y6 |= z6 362z0 = (uint32) y0 << 18 363 y5 = x1 + x13 364y0 = (uint32) y0 >> 14 365 x6 ^= y6 366 y11 |= z11 367 y10 = x6 + x2 368 z5 = (uint32) y5 << 18 369 x11 ^= y11 370 y5 = (uint32) y5 >> 14 371y0 |= z0 372 z10 = (uint32) y10 << 18 373 y15 = x11 + x7 374 y10 = (uint32) y10 >> 14 375x0 ^= y0 376 y5 |= z5 377u1 = x0 + x3 378 z15 = (uint32) y15 << 18 379 x5 ^= y5 380 y15 = (uint32) y15 >> 14 381 y10 |= z10 382z1 = (uint32) u1 << 7 383 u6 = x5 + x4 384u1 = (uint32) u1 >> 25 385 x10 ^= y10 386 y15 |= z15 387 u11 = x10 + x9 388 z6 = (uint32) u6 << 7 389 x15 ^= y15 390 u6 = (uint32) u6 >> 25 391u1 |= z1 392 z11 = (uint32) u11 << 7 393 u12 = x15 + x14 394 u11 = (uint32) u11 >> 25 395 u6 |= z6 396x1 ^= u1 397 z12 = (uint32) u12 << 7 398 x6 ^= u6 399 u12 = (uint32) u12 >> 25 400 u11 |= z11 401u2 = x1 + x0 402 u7 = x6 + x5 403z2 = (uint32) u2 << 9 404 x11 ^= u11 405u2 = (uint32) u2 >> 23 406 u12 |= z12 407 z7 = (uint32) u7 << 9 408 u8 = x11 + x10 409 u7 = (uint32) u7 >> 23 410 x12 ^= u12 411 z8 = (uint32) u8 << 9 412u2 |= z2 413 u8 = (uint32) u8 >> 23 414 u13 = x12 + x15 415 u7 |= z7 416x2 ^= u2 417 z13 = (uint32) u13 << 9 418 x7 ^= u7 419 u13 = (uint32) u13 >> 23 420 u8 |= z8 421u3 = x2 + x1 422 u4 = x7 + x6 423z3 = (uint32) u3 << 13 424 x8 ^= u8 425 z4 = (uint32) u4 << 13 426 u13 |= z13 427u3 = (uint32) u3 >> 19 428 u9 = x8 + x11 429 u4 = (uint32) u4 >> 19 430 x13 ^= u13 431 z9 = (uint32) u9 << 13 432u3 |= z3 433 u9 = (uint32) u9 >> 19 434 u14 = x13 + x12 435 u4 |= z4 436x3 ^= u3 437 z14 = (uint32) u14 << 13 438 x4 ^= u4 439 u14 = (uint32) u14 >> 19 440 u9 |= z9 441u0 = x3 + x2 442 u5 = x4 + x7 443z0 = (uint32) u0 << 18 444 x9 ^= u9 445 z5 = (uint32) u5 << 18 446 u14 |= z14 447u0 = (uint32) u0 >> 14 448 u10 = x9 + x8 449 u5 = (uint32) u5 >> 14 450 x14 ^= u14 451 z10 = (uint32) u10 << 18 452u0 |= z0 453 u10 = (uint32) u10 >> 14 454 u15 = x14 + x13 455 u5 |= z5 456x0 ^= u0 457 z15 = (uint32) u15 << 18 458 x5 ^= u5 459 u15 = (uint32) u15 >> 14 460 unsigned>? i -= 2 461 u10 |= z10 462 u15 |= z15 463 x10 ^= u10 464 x15 ^= u15 465 466 467goto mainloop if unsigned> 468 469 x = x_stack 470 471 q0 = *(uint32 *) (x + 0) 472 q1 = *(uint32 *) (x + 4) 473 q2 = *(uint32 *) (x + 8) 474 q3 = *(uint32 *) (x + 12) 475 x0 += q0 476 q4 = *(uint32 *) (x + 16) 477 x1 += q1 478 q5 = *(uint32 *) (x + 20) 479 x2 += q2 480 q6 = *(uint32 *) (x + 24) 481 x3 += q3 482 q7 = *(uint32 *) (x + 28) 483 x4 += q4 484 q8 = *(uint32 *) (x + 32) 485 x5 += q5 486 q9 = *(uint32 *) (x + 36) 487 x6 += q6 488 q10 = *(uint32 *) (x + 40) 489 x7 += q7 490 q11 = *(uint32 *) (x + 44) 491 x8 += q8 492 q8 += 1 493 *(uint32 *) (x + 32) = q8 494 q8 = (uint64) q8 >> 32 495 q12 = *(uint32 *) (x + 48) 496 x9 += q9 497 q9 += q8 498 *(uint32 *) (x + 36) = q9 499 q13 = *(uint32 *) (x + 52) 500 x10 += q10 501 q14 = *(uint32 *) (x + 56) 502 x11 += q11 503 q15 = *(uint32 *) (x + 60) 504 x12 += q12 505 x13 += q13 506 x14 += q14 507 x15 += q15 508 509 m = m_stack 510 511 m0 = *(swapendian uint32 *) m 512 m += 4 513 m1 = *(swapendian uint32 *) m 514 m += 4 515 m2 = *(swapendian uint32 *) m 516 m += 4 517 m3 = *(swapendian uint32 *) m 518 m += 4 519 x0 ^= m0 520 m4 = *(swapendian uint32 *) m 521 m += 4 522 x1 ^= m1 523 m5 = *(swapendian uint32 *) m 524 m += 4 525 x2 ^= m2 526 m6 = *(swapendian uint32 *) m 527 m += 4 528 x3 ^= m3 529 m7 = *(swapendian uint32 *) m 530 m += 4 531 x4 ^= m4 532 m8 = *(swapendian uint32 *) m 533 m += 4 534 x5 ^= m5 535 m9 = *(swapendian uint32 *) m 536 m += 4 537 x6 ^= m6 538 m10 = *(swapendian uint32 *) m 539 m += 4 540 x7 ^= m7 541 m11 = *(swapendian uint32 *) m 542 m += 4 543 x8 ^= m8 544 m12 = *(swapendian uint32 *) m 545 m += 4 546 x9 ^= m9 547 m13 = *(swapendian uint32 *) m 548 m += 4 549 x10 ^= m10 550 m14 = *(swapendian uint32 *) m 551 m += 4 552 x11 ^= m11 553 m15 = *(swapendian uint32 *) m 554 m += 4 555 x12 ^= m12 556 x13 ^= m13 557 x14 ^= m14 558 x15 ^= m15 559 560 out = out_stack 561 *(swapendian uint32 *) out = x0 562 out += 4 563 *(swapendian uint32 *) out = x1 564 out += 4 565 *(swapendian uint32 *) out = x2 566 out += 4 567 *(swapendian uint32 *) out = x3 568 out += 4 569 *(swapendian uint32 *) out = x4 570 out += 4 571 *(swapendian uint32 *) out = x5 572 out += 4 573 *(swapendian uint32 *) out = x6 574 out += 4 575 *(swapendian uint32 *) out = x7 576 out += 4 577 *(swapendian uint32 *) out = x8 578 out += 4 579 *(swapendian uint32 *) out = x9 580 out += 4 581 *(swapendian uint32 *) out = x10 582 out += 4 583 *(swapendian uint32 *) out = x11 584 out += 4 585 *(swapendian uint32 *) out = x12 586 out += 4 587 *(swapendian uint32 *) out = x13 588 out += 4 589 *(swapendian uint32 *) out = x14 590 out += 4 591 *(swapendian uint32 *) out = x15 592 out += 4 593 594 bytes = bytes_stack 595 unsigned>? bytes -= 64 596 goto bytesatleast1 if unsigned> 597 goto done if !unsigned< 598 599 m = ctarget 600 bytes += 64 601 out -= 64 602 i = 0 603 ccopyloop: 604 a = *(int8 *) (out + i) 605 *(int8 *) (m + i) = a 606 i += 1 607 unsigned<? i - bytes 608 goto ccopyloop if unsigned< 609 610done: 611leave 612