1.machine "any" 2 3.text 4 5.align 7 6_vpaes_consts: 7.Lk_mc_forward: 8.byte 0x01,0x02,0x03,0x00,0x05,0x06,0x07,0x04,0x09,0x0a,0x0b,0x08,0x0d,0x0e,0x0f,0x0c 9.byte 0x05,0x06,0x07,0x04,0x09,0x0a,0x0b,0x08,0x0d,0x0e,0x0f,0x0c,0x01,0x02,0x03,0x00 10.byte 0x09,0x0a,0x0b,0x08,0x0d,0x0e,0x0f,0x0c,0x01,0x02,0x03,0x00,0x05,0x06,0x07,0x04 11.byte 0x0d,0x0e,0x0f,0x0c,0x01,0x02,0x03,0x00,0x05,0x06,0x07,0x04,0x09,0x0a,0x0b,0x08 12.Lk_mc_backward: 13.byte 0x03,0x00,0x01,0x02,0x07,0x04,0x05,0x06,0x0b,0x08,0x09,0x0a,0x0f,0x0c,0x0d,0x0e 14.byte 0x0f,0x0c,0x0d,0x0e,0x03,0x00,0x01,0x02,0x07,0x04,0x05,0x06,0x0b,0x08,0x09,0x0a 15.byte 0x0b,0x08,0x09,0x0a,0x0f,0x0c,0x0d,0x0e,0x03,0x00,0x01,0x02,0x07,0x04,0x05,0x06 16.byte 0x07,0x04,0x05,0x06,0x0b,0x08,0x09,0x0a,0x0f,0x0c,0x0d,0x0e,0x03,0x00,0x01,0x02 17.Lk_sr: 18.byte 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f 19.byte 0x00,0x05,0x0a,0x0f,0x04,0x09,0x0e,0x03,0x08,0x0d,0x02,0x07,0x0c,0x01,0x06,0x0b 20.byte 0x00,0x09,0x02,0x0b,0x04,0x0d,0x06,0x0f,0x08,0x01,0x0a,0x03,0x0c,0x05,0x0e,0x07 21.byte 0x00,0x0d,0x0a,0x07,0x04,0x01,0x0e,0x0b,0x08,0x05,0x02,0x0f,0x0c,0x09,0x06,0x03 22 23 24 25 26.Lk_inv: 27.byte 0xf0,0x01,0x08,0x0d,0x0f,0x06,0x05,0x0e,0x02,0x0c,0x0b,0x0a,0x09,0x03,0x07,0x04 28.byte 0xf0,0x07,0x0b,0x0f,0x06,0x0a,0x04,0x01,0x09,0x08,0x05,0x02,0x0c,0x0e,0x0d,0x03 29.Lk_ipt: 30.byte 0x00,0x70,0x2a,0x5a,0x98,0xe8,0xb2,0xc2,0x08,0x78,0x22,0x52,0x90,0xe0,0xba,0xca 31.byte 0x00,0x4d,0x7c,0x31,0x7d,0x30,0x01,0x4c,0x81,0xcc,0xfd,0xb0,0xfc,0xb1,0x80,0xcd 32.Lk_sbo: 33.byte 0x00,0xc7,0xbd,0x6f,0x17,0x6d,0xd2,0xd0,0x78,0xa8,0x02,0xc5,0x7a,0xbf,0xaa,0x15 34.byte 0x00,0x6a,0xbb,0x5f,0xa5,0x74,0xe4,0xcf,0xfa,0x35,0x2b,0x41,0xd1,0x90,0x1e,0x8e 35.Lk_sb1: 36.byte 0x00,0x23,0xe2,0xfa,0x15,0xd4,0x18,0x36,0xef,0xd9,0x2e,0x0d,0xc1,0xcc,0xf7,0x3b 37.byte 0x00,0x3e,0x50,0xcb,0x8f,0xe1,0x9b,0xb1,0x44,0xf5,0x2a,0x14,0x6e,0x7a,0xdf,0xa5 38.Lk_sb2: 39.byte 0x00,0x29,0xe1,0x0a,0x40,0x88,0xeb,0x69,0x4a,0x23,0x82,0xab,0xc8,0x63,0xa1,0xc2 40.byte 0x00,0x24,0x71,0x0b,0xc6,0x93,0x7a,0xe2,0xcd,0x2f,0x98,0xbc,0x55,0xe9,0xb7,0x5e 41 42 43 44 45.Lk_dipt: 46.byte 0x00,0x5f,0x54,0x0b,0x04,0x5b,0x50,0x0f,0x1a,0x45,0x4e,0x11,0x1e,0x41,0x4a,0x15 47.byte 0x00,0x65,0x05,0x60,0xe6,0x83,0xe3,0x86,0x94,0xf1,0x91,0xf4,0x72,0x17,0x77,0x12 48.Lk_dsbo: 49.byte 0x00,0x40,0xf9,0x7e,0x53,0xea,0x87,0x13,0x2d,0x3e,0x94,0xd4,0xb9,0x6d,0xaa,0xc7 50.byte 0x00,0x1d,0x44,0x93,0x0f,0x56,0xd7,0x12,0x9c,0x8e,0xc5,0xd8,0x59,0x81,0x4b,0xca 51.Lk_dsb9: 52.byte 0x00,0xd6,0x86,0x9a,0x53,0x03,0x1c,0x85,0xc9,0x4c,0x99,0x4f,0x50,0x1f,0xd5,0xca 53.byte 0x00,0x49,0xd7,0xec,0x89,0x17,0x3b,0xc0,0x65,0xa5,0xfb,0xb2,0x9e,0x2c,0x5e,0x72 54.Lk_dsbd: 55.byte 0x00,0xa2,0xb1,0xe6,0xdf,0xcc,0x57,0x7d,0x39,0x44,0x2a,0x88,0x13,0x9b,0x6e,0xf5 56.byte 0x00,0xcb,0xc6,0x24,0xf7,0xfa,0xe2,0x3c,0xd3,0xef,0xde,0x15,0x0d,0x18,0x31,0x29 57.Lk_dsbb: 58.byte 0x00,0x42,0xb4,0x96,0x92,0x64,0x22,0xd0,0x04,0xd4,0xf2,0xb0,0xf6,0x46,0x26,0x60 59.byte 0x00,0x67,0x59,0xcd,0xa6,0x98,0x94,0xc1,0x6b,0xaa,0x55,0x32,0x3e,0x0c,0xff,0xf3 60.Lk_dsbe: 61.byte 0x00,0xd0,0xd4,0x26,0x96,0x92,0xf2,0x46,0xb0,0xf6,0xb4,0x64,0x04,0x60,0x42,0x22 62.byte 0x00,0xc1,0xaa,0xff,0xcd,0xa6,0x55,0x0c,0x32,0x3e,0x59,0x98,0x6b,0xf3,0x67,0x94 63 64 65 66 67.Lk_dksd: 68.byte 0x00,0x47,0xe4,0xa3,0x5d,0x1a,0xb9,0xfe,0xf9,0xbe,0x1d,0x5a,0xa4,0xe3,0x40,0x07 69.byte 0x00,0x83,0x36,0xb5,0xf4,0x77,0xc2,0x41,0x1e,0x9d,0x28,0xab,0xea,0x69,0xdc,0x5f 70.Lk_dksb: 71.byte 0x00,0xd5,0x50,0x85,0x1f,0xca,0x4f,0x9a,0x99,0x4c,0xc9,0x1c,0x86,0x53,0xd6,0x03 72.byte 0x00,0x4a,0xfc,0xb6,0xa7,0xed,0x5b,0x11,0xc8,0x82,0x34,0x7e,0x6f,0x25,0x93,0xd9 73.Lk_dkse: 74.byte 0x00,0xd6,0xc9,0x1f,0xca,0x1c,0x03,0xd5,0x86,0x50,0x4f,0x99,0x4c,0x9a,0x85,0x53 75.byte 0xe8,0x7b,0xdc,0x4f,0x05,0x96,0x31,0xa2,0x87,0x14,0xb3,0x20,0x6a,0xf9,0x5e,0xcd 76.Lk_dks9: 77.byte 0x00,0xa7,0xd9,0x7e,0xc8,0x6f,0x11,0xb6,0xfc,0x5b,0x25,0x82,0x34,0x93,0xed,0x4a 78.byte 0x00,0x33,0x14,0x27,0x62,0x51,0x76,0x45,0xce,0xfd,0xda,0xe9,0xac,0x9f,0xb8,0x8b 79 80.Lk_rcon: 81.byte 0xb6,0xee,0x9d,0xaf,0xb9,0x91,0x83,0x1f,0x81,0x7d,0x7c,0x4d,0x08,0x98,0x2a,0x70 82.Lk_s63: 83.byte 0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b 84 85.Lk_opt: 86.byte 0x00,0x60,0xb6,0xd6,0x29,0x49,0x9f,0xff,0x08,0x68,0xbe,0xde,0x21,0x41,0x97,0xf7 87.byte 0x00,0xec,0xbc,0x50,0x51,0xbd,0xed,0x01,0xe0,0x0c,0x5c,0xb0,0xb1,0x5d,0x0d,0xe1 88.Lk_deskew: 89.byte 0x00,0xe3,0xa4,0x47,0x40,0xa3,0xe4,0x07,0x1a,0xf9,0xbe,0x5d,0x5a,0xb9,0xfe,0x1d 90.byte 0x00,0x69,0xea,0x83,0xdc,0xb5,0x36,0x5f,0x77,0x1e,0x9d,0xf4,0xab,0xc2,0x41,0x28 91.align 5 92.Lconsts: 93 mflr 0 94 bcl 20,31,$+4 95 mflr 12 96 addi 12,12,-0x308 97 mtlr 0 98 blr 99.long 0 100.byte 0,12,0x14,0,0,0,0,0 101.byte 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105,111,110,32,65,69,83,32,102,111,114,32,65,108,116,105,86,101,99,44,77,105,107,101,32,72,97,109,98,117,114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105,118,101,114,115,105,116,121,41,0 102.align 2 103.align 6 104 105 106 107 108 109 110.align 4 111_vpaes_encrypt_preheat: 112 mflr 8 113 bl .Lconsts 114 mtlr 8 115 li 11, 0xc0 116 li 10, 0xd0 117 li 9, 0xe0 118 li 8, 0xf0 119 vxor 7, 7, 7 120 vspltisb 8,4 121 vspltisb 9,0x0f 122 lvx 10, 12, 11 123 li 11, 0x100 124 lvx 11, 12, 10 125 li 10, 0x110 126 lvx 12, 12, 9 127 li 9, 0x120 128 lvx 13, 12, 8 129 li 8, 0x130 130 lvx 14, 12, 11 131 li 11, 0x140 132 lvx 15, 12, 10 133 li 10, 0x150 134 lvx 16, 12, 9 135 lvx 17, 12, 8 136 lvx 18, 12, 11 137 lvx 19, 12, 10 138 blr 139.long 0 140.byte 0,12,0x14,0,0,0,0,0 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156.align 5 157_vpaes_encrypt_core: 158 lwz 8, 240(5) 159 li 9, 16 160 lvx 5, 0, 5 161 li 11, 0x10 162 lvx 6, 9, 5 163 addi 9, 9, 16 164 vperm 5, 5, 6, 31 165 addi 10, 11, 0x40 166 vsrb 1, 0, 8 167 vperm 0, 12, 12, 0 168 vperm 1, 13, 13, 1 169 vxor 0, 0, 5 170 vxor 0, 0, 1 171 mtctr 8 172 b .Lenc_entry 173 174.align 4 175.Lenc_loop: 176 177 vperm 4, 17, 7, 2 178 lvx 1, 12, 11 179 addi 11, 11, 16 180 vperm 0, 16, 7, 3 181 vxor 4, 4, 5 182 andi. 11, 11, 0x30 183 vperm 5, 19, 7, 2 184 vxor 0, 0, 4 185 vperm 2, 18, 7, 3 186 lvx 4, 12, 10 187 addi 10, 11, 0x40 188 vperm 3, 0, 7, 1 189 vxor 2, 2, 5 190 vperm 0, 0, 7, 4 191 vxor 3, 3, 2 192 vperm 4, 3, 7, 1 193 vxor 0, 0, 3 194 vxor 0, 0, 4 195 196.Lenc_entry: 197 198 vsrb 1, 0, 8 199 vperm 5, 11, 11, 0 200 vxor 0, 0, 1 201 vperm 3, 10, 10, 1 202 vperm 4, 10, 10, 0 203 vand 0, 0, 9 204 vxor 3, 3, 5 205 vxor 4, 4, 5 206 vperm 2, 10, 7, 3 207 vor 5,6,6 208 lvx 6, 9, 5 209 vperm 3, 10, 7, 4 210 addi 9, 9, 16 211 vxor 2, 2, 0 212 vperm 5, 5, 6, 31 213 vxor 3, 3, 1 214 bc 16,0,.Lenc_loop 215 216 217 addi 10, 11, 0x80 218 219 220 vperm 4, 14, 7, 2 221 lvx 1, 12, 10 222 vperm 0, 15, 7, 3 223 vxor 4, 4, 5 224 vxor 0, 0, 4 225 vperm 0, 0, 7, 1 226 blr 227.long 0 228.byte 0,12,0x14,0,0,0,0,0 229 230.globl vpaes_encrypt 231.type vpaes_encrypt,@function 232.align 5 233vpaes_encrypt: 234 stwu 1,-232(1) 235 li 10,39 236 li 11,55 237 mflr 6 238 mfspr 7,256 239 stvx 20,10,1 240 addi 10,10,32 241 stvx 21,11,1 242 addi 11,11,32 243 stvx 22,10,1 244 addi 10,10,32 245 stvx 23,11,1 246 addi 11,11,32 247 stvx 24,10,1 248 addi 10,10,32 249 stvx 25,11,1 250 addi 11,11,32 251 stvx 26,10,1 252 addi 10,10,32 253 stvx 27,11,1 254 addi 11,11,32 255 stvx 28,10,1 256 addi 10,10,32 257 stvx 29,11,1 258 addi 11,11,32 259 stvx 30,10,1 260 stvx 31,11,1 261 stw 7,228(1) 262 li 0, -1 263 stw 6,236(1) 264 mtspr 256,0 265 266 bl _vpaes_encrypt_preheat 267 268 lvsl 27, 0, 3 269 lvx 0, 0, 3 270 addi 3, 3, 15 271 lvsr 29, 0, 4 272 lvsl 31, 0, 5 273 lvx 26, 0, 3 274 vperm 0, 0, 26, 27 275 276 bl _vpaes_encrypt_core 277 278 andi. 8, 4, 15 279 li 9, 16 280 beq .Lenc_out_aligned 281 282 vperm 0, 0, 0, 29 283 mtctr 9 284.Lenc_out_unaligned: 285 stvebx 0, 0, 4 286 addi 4, 4, 1 287 bc 16,0,.Lenc_out_unaligned 288 b .Lenc_done 289 290.align 4 291.Lenc_out_aligned: 292 stvx 0, 0, 4 293.Lenc_done: 294 295 li 10,39 296 li 11,55 297 mtlr 6 298 mtspr 256,7 299 lvx 20,10,1 300 addi 10,10,32 301 lvx 21,11,1 302 addi 11,11,32 303 lvx 22,10,1 304 addi 10,10,32 305 lvx 23,11,1 306 addi 11,11,32 307 lvx 24,10,1 308 addi 10,10,32 309 lvx 25,11,1 310 addi 11,11,32 311 lvx 26,10,1 312 addi 10,10,32 313 lvx 27,11,1 314 addi 11,11,32 315 lvx 28,10,1 316 addi 10,10,32 317 lvx 29,11,1 318 addi 11,11,32 319 lvx 30,10,1 320 lvx 31,11,1 321 addi 1,1,232 322 blr 323.long 0 324.byte 0,12,0x04,1,0x80,0,3,0 325.long 0 326 327 328.align 4 329_vpaes_decrypt_preheat: 330 mflr 8 331 bl .Lconsts 332 mtlr 8 333 li 11, 0xc0 334 li 10, 0xd0 335 li 9, 0x160 336 li 8, 0x170 337 vxor 7, 7, 7 338 vspltisb 8,4 339 vspltisb 9,0x0f 340 lvx 10, 12, 11 341 li 11, 0x180 342 lvx 11, 12, 10 343 li 10, 0x190 344 lvx 12, 12, 9 345 li 9, 0x1a0 346 lvx 13, 12, 8 347 li 8, 0x1b0 348 lvx 14, 12, 11 349 li 11, 0x1c0 350 lvx 15, 12, 10 351 li 10, 0x1d0 352 lvx 16, 12, 9 353 li 9, 0x1e0 354 lvx 17, 12, 8 355 li 8, 0x1f0 356 lvx 18, 12, 11 357 li 11, 0x200 358 lvx 19, 12, 10 359 li 10, 0x210 360 lvx 20, 12, 9 361 lvx 21, 12, 8 362 lvx 22, 12, 11 363 lvx 23, 12, 10 364 blr 365.long 0 366.byte 0,12,0x14,0,0,0,0,0 367 368 369 370 371 372 373.align 4 374_vpaes_decrypt_core: 375 lwz 8, 240(5) 376 li 9, 16 377 lvx 5, 0, 5 378 li 11, 0x30 379 lvx 6, 9, 5 380 addi 9, 9, 16 381 vperm 5, 5, 6, 31 382 vsrb 1, 0, 8 383 vperm 0, 12, 12, 0 384 vperm 1, 13, 13, 1 385 vxor 0, 0, 5 386 vxor 0, 0, 1 387 mtctr 8 388 b .Ldec_entry 389 390.align 4 391.Ldec_loop: 392 393 394 395 lvx 0, 12, 11 396 397 398 vperm 4, 16, 7, 2 399 subi 11, 11, 16 400 vperm 1, 17, 7, 3 401 andi. 11, 11, 0x30 402 vxor 5, 5, 4 403 404 vxor 5, 5, 1 405 406 407 vperm 4, 18, 7, 2 408 vperm 5, 5, 7, 0 409 vperm 1, 19, 7, 3 410 vxor 5, 5, 4 411 412 vxor 5, 5, 1 413 414 415 vperm 4, 20, 7, 2 416 vperm 5, 5, 7, 0 417 vperm 1, 21, 7, 3 418 vxor 5, 5, 4 419 420 vxor 5, 5, 1 421 422 423 vperm 4, 22, 7, 2 424 vperm 5, 5, 7, 0 425 vperm 1, 23, 7, 3 426 vxor 0, 5, 4 427 vxor 0, 0, 1 428 429.Ldec_entry: 430 431 vsrb 1, 0, 8 432 vperm 2, 11, 11, 0 433 vxor 0, 0, 1 434 vperm 3, 10, 10, 1 435 vperm 4, 10, 10, 0 436 vand 0, 0, 9 437 vxor 3, 3, 2 438 vxor 4, 4, 2 439 vperm 2, 10, 7, 3 440 vor 5,6,6 441 lvx 6, 9, 5 442 vperm 3, 10, 7, 4 443 addi 9, 9, 16 444 vxor 2, 2, 0 445 vperm 5, 5, 6, 31 446 vxor 3, 3, 1 447 bc 16,0,.Ldec_loop 448 449 450 addi 10, 11, 0x80 451 452 vperm 4, 14, 7, 2 453 454 lvx 2, 12, 10 455 vperm 1, 15, 7, 3 456 vxor 4, 4, 5 457 vxor 0, 1, 4 458 vperm 0, 0, 7, 2 459 blr 460.long 0 461.byte 0,12,0x14,0,0,0,0,0 462 463.globl vpaes_decrypt 464.type vpaes_decrypt,@function 465.align 5 466vpaes_decrypt: 467 stwu 1,-232(1) 468 li 10,39 469 li 11,55 470 mflr 6 471 mfspr 7,256 472 stvx 20,10,1 473 addi 10,10,32 474 stvx 21,11,1 475 addi 11,11,32 476 stvx 22,10,1 477 addi 10,10,32 478 stvx 23,11,1 479 addi 11,11,32 480 stvx 24,10,1 481 addi 10,10,32 482 stvx 25,11,1 483 addi 11,11,32 484 stvx 26,10,1 485 addi 10,10,32 486 stvx 27,11,1 487 addi 11,11,32 488 stvx 28,10,1 489 addi 10,10,32 490 stvx 29,11,1 491 addi 11,11,32 492 stvx 30,10,1 493 stvx 31,11,1 494 stw 7,228(1) 495 li 0, -1 496 stw 6,236(1) 497 mtspr 256,0 498 499 bl _vpaes_decrypt_preheat 500 501 lvsl 27, 0, 3 502 lvx 0, 0, 3 503 addi 3, 3, 15 504 lvsr 29, 0, 4 505 lvsl 31, 0, 5 506 lvx 26, 0, 3 507 vperm 0, 0, 26, 27 508 509 bl _vpaes_decrypt_core 510 511 andi. 8, 4, 15 512 li 9, 16 513 beq .Ldec_out_aligned 514 515 vperm 0, 0, 0, 29 516 mtctr 9 517.Ldec_out_unaligned: 518 stvebx 0, 0, 4 519 addi 4, 4, 1 520 bc 16,0,.Ldec_out_unaligned 521 b .Ldec_done 522 523.align 4 524.Ldec_out_aligned: 525 stvx 0, 0, 4 526.Ldec_done: 527 528 li 10,39 529 li 11,55 530 mtlr 6 531 mtspr 256,7 532 lvx 20,10,1 533 addi 10,10,32 534 lvx 21,11,1 535 addi 11,11,32 536 lvx 22,10,1 537 addi 10,10,32 538 lvx 23,11,1 539 addi 11,11,32 540 lvx 24,10,1 541 addi 10,10,32 542 lvx 25,11,1 543 addi 11,11,32 544 lvx 26,10,1 545 addi 10,10,32 546 lvx 27,11,1 547 addi 11,11,32 548 lvx 28,10,1 549 addi 10,10,32 550 lvx 29,11,1 551 addi 11,11,32 552 lvx 30,10,1 553 lvx 31,11,1 554 addi 1,1,232 555 blr 556.long 0 557.byte 0,12,0x04,1,0x80,0,3,0 558.long 0 559 560 561.globl vpaes_cbc_encrypt 562.type vpaes_cbc_encrypt,@function 563.align 5 564vpaes_cbc_encrypt: 565 cmplwi 5,16 566 bltlr 567 568 stwu 1,-240(1) 569 mflr 0 570 li 10,39 571 li 11,55 572 mfspr 12,256 573 stvx 20,10,1 574 addi 10,10,32 575 stvx 21,11,1 576 addi 11,11,32 577 stvx 22,10,1 578 addi 10,10,32 579 stvx 23,11,1 580 addi 11,11,32 581 stvx 24,10,1 582 addi 10,10,32 583 stvx 25,11,1 584 addi 11,11,32 585 stvx 26,10,1 586 addi 10,10,32 587 stvx 27,11,1 588 addi 11,11,32 589 stvx 28,10,1 590 addi 10,10,32 591 stvx 29,11,1 592 addi 11,11,32 593 stvx 30,10,1 594 stvx 31,11,1 595 stw 12,228(1) 596 stw 30,232(1) 597 stw 31,236(1) 598 li 9, -16 599 stw 0, 244(1) 600 601 and 30, 5, 9 602 andi. 9, 4, 15 603 mr 5, 6 604 mr 31, 7 605 li 6, -1 606 mcrf 1, 0 607 mr 7, 12 608 mtspr 256,6 609 610 lvx 24, 0, 31 611 li 9, 15 612 lvsl 27, 0, 31 613 lvx 25, 9, 31 614 vperm 24, 24, 25, 27 615 616 cmpwi 8, 0 617 neg 8, 3 618 vxor 7, 7, 7 619 lvsl 31, 0, 5 620 lvsr 29, 0, 4 621 lvsr 27, 0, 8 622 vnor 30, 7, 7 623 lvx 26, 0, 3 624 vperm 30, 7, 30, 29 625 addi 3, 3, 15 626 627 beq .Lcbc_decrypt 628 629 bl _vpaes_encrypt_preheat 630 li 0, 16 631 632 beq 1, .Lcbc_enc_loop 633 634 vor 0,26,26 635 lvx 26, 0, 3 636 addi 3, 3, 16 637 vperm 0, 0, 26, 27 638 vxor 0, 0, 24 639 640 bl _vpaes_encrypt_core 641 642 andi. 8, 4, 15 643 vor 24,0,0 644 sub 9, 4, 8 645 vperm 28, 0, 0, 29 646 647.Lcbc_enc_head: 648 stvebx 28, 8, 9 649 cmpwi 8, 15 650 addi 8, 8, 1 651 bne .Lcbc_enc_head 652 653 sub. 30, 30, 0 654 addi 4, 4, 16 655 beq .Lcbc_unaligned_done 656 657.Lcbc_enc_loop: 658 vor 0,26,26 659 lvx 26, 0, 3 660 addi 3, 3, 16 661 vperm 0, 0, 26, 27 662 vxor 0, 0, 24 663 664 bl _vpaes_encrypt_core 665 666 vor 24,0,0 667 sub. 30, 30, 0 668 vperm 0, 0, 0, 29 669 vsel 1,28,0,30 670 vor 28,0,0 671 stvx 1, 0, 4 672 addi 4, 4, 16 673 bne .Lcbc_enc_loop 674 675 b .Lcbc_done 676 677.align 5 678.Lcbc_decrypt: 679 bl _vpaes_decrypt_preheat 680 li 0, 16 681 682 beq 1, .Lcbc_dec_loop 683 684 vor 0,26,26 685 lvx 26, 0, 3 686 addi 3, 3, 16 687 vperm 0, 0, 26, 27 688 vor 25,0,0 689 690 bl _vpaes_decrypt_core 691 692 andi. 8, 4, 15 693 vxor 0, 0, 24 694 vor 24,25,25 695 sub 9, 4, 8 696 vperm 28, 0, 0, 29 697 698.Lcbc_dec_head: 699 stvebx 28, 8, 9 700 cmpwi 8, 15 701 addi 8, 8, 1 702 bne .Lcbc_dec_head 703 704 sub. 30, 30, 0 705 addi 4, 4, 16 706 beq .Lcbc_unaligned_done 707 708.Lcbc_dec_loop: 709 vor 0,26,26 710 lvx 26, 0, 3 711 addi 3, 3, 16 712 vperm 0, 0, 26, 27 713 vor 25,0,0 714 715 bl _vpaes_decrypt_core 716 717 vxor 0, 0, 24 718 vor 24,25,25 719 sub. 30, 30, 0 720 vperm 0, 0, 0, 29 721 vsel 1,28,0,30 722 vor 28,0,0 723 stvx 1, 0, 4 724 addi 4, 4, 16 725 bne .Lcbc_dec_loop 726 727.Lcbc_done: 728 beq 1, .Lcbc_write_iv 729 730.Lcbc_unaligned_done: 731 andi. 8, 4, 15 732 sub 4, 4, 8 733 li 9, 0 734.Lcbc_tail: 735 stvebx 28, 9, 4 736 addi 9, 9, 1 737 cmpw 9, 8 738 bne .Lcbc_tail 739 740.Lcbc_write_iv: 741 neg 8, 31 742 li 10, 4 743 lvsl 29, 0, 8 744 li 11, 8 745 li 12, 12 746 vperm 24, 24, 24, 29 747 stvewx 24, 0, 31 748 stvewx 24, 10, 31 749 stvewx 24, 11, 31 750 stvewx 24, 12, 31 751 752 mtspr 256,7 753 li 10,39 754 li 11,55 755 lvx 20,10,1 756 addi 10,10,32 757 lvx 21,11,1 758 addi 11,11,32 759 lvx 22,10,1 760 addi 10,10,32 761 lvx 23,11,1 762 addi 11,11,32 763 lvx 24,10,1 764 addi 10,10,32 765 lvx 25,11,1 766 addi 11,11,32 767 lvx 26,10,1 768 addi 10,10,32 769 lvx 27,11,1 770 addi 11,11,32 771 lvx 28,10,1 772 addi 10,10,32 773 lvx 29,11,1 774 addi 11,11,32 775 lvx 30,10,1 776 lvx 31,11,1 777.Lcbc_abort: 778 lwz 0, 244(1) 779 lwz 30,232(1) 780 lwz 31,236(1) 781 mtlr 0 782 addi 1,1,240 783 blr 784.long 0 785.byte 0,12,0x04,1,0x80,2,6,0 786.long 0 787 788 789 790 791 792 793.align 4 794_vpaes_key_preheat: 795 mflr 8 796 bl .Lconsts 797 mtlr 8 798 li 11, 0xc0 799 li 10, 0xd0 800 li 9, 0xe0 801 li 8, 0xf0 802 803 vspltisb 8,4 804 vxor 9,9,9 805 lvx 10, 12, 11 806 li 11, 0x120 807 lvx 11, 12, 10 808 li 10, 0x130 809 lvx 12, 12, 9 810 li 9, 0x220 811 lvx 13, 12, 8 812 li 8, 0x230 813 814 lvx 14, 12, 11 815 li 11, 0x240 816 lvx 15, 12, 10 817 li 10, 0x250 818 819 lvx 16, 12, 9 820 li 9, 0x260 821 lvx 17, 12, 8 822 li 8, 0x270 823 lvx 18, 12, 11 824 li 11, 0x280 825 lvx 19, 12, 10 826 li 10, 0x290 827 lvx 20, 12, 9 828 li 9, 0x2a0 829 lvx 21, 12, 8 830 li 8, 0x2b0 831 lvx 22, 12, 11 832 lvx 23, 12, 10 833 834 lvx 24, 12, 9 835 lvx 25, 0, 12 836 lvx 26, 12, 8 837 blr 838.long 0 839.byte 0,12,0x14,0,0,0,0,0 840 841.align 4 842_vpaes_schedule_core: 843 mflr 7 844 845 bl _vpaes_key_preheat 846 847 848 neg 8, 3 849 lvx 0, 0, 3 850 addi 3, 3, 15 851 lvsr 27, 0, 8 852 lvx 6, 0, 3 853 addi 3, 3, 8 854 vperm 0, 0, 6, 27 855 856 857 vor 3,0,0 858 bl _vpaes_schedule_transform 859 vor 7,0,0 860 861 bne 1, .Lschedule_am_decrypting 862 863 864 li 8, 0x30 865 li 9, 4 866 li 10, 8 867 li 11, 12 868 869 lvsr 29, 0, 5 870 vnor 30, 9, 9 871 vperm 30, 9, 30, 29 872 873 874 vperm 28, 0, 0, 29 875 stvewx 28, 0, 5 876 stvewx 28, 9, 5 877 stvewx 28, 10, 5 878 addi 10, 12, 0x80 879 stvewx 28, 11, 5 880 b .Lschedule_go 881 882.Lschedule_am_decrypting: 883 srwi 8, 4, 1 884 andi. 8, 8, 32 885 xori 8, 8, 32 886 addi 10, 12, 0x80 887 888 lvx 1, 8, 10 889 li 9, 4 890 li 10, 8 891 li 11, 12 892 vperm 4, 3, 3, 1 893 894 neg 0, 5 895 lvsl 29, 0, 0 896 vnor 30, 9, 9 897 vperm 30, 30, 9, 29 898 899 900 vperm 28, 4, 4, 29 901 stvewx 28, 0, 5 902 stvewx 28, 9, 5 903 stvewx 28, 10, 5 904 addi 10, 12, 0x80 905 stvewx 28, 11, 5 906 addi 5, 5, 15 907 xori 8, 8, 0x30 908 909.Lschedule_go: 910 cmplwi 4, 192 911 bgt .Lschedule_256 912 beq .Lschedule_192 913 914 915 916 917 918 919 920 921 922 923.Lschedule_128: 924 li 0, 10 925 mtctr 0 926 927.Loop_schedule_128: 928 bl _vpaes_schedule_round 929 bdz .Lschedule_mangle_last 930 bl _vpaes_schedule_mangle 931 b .Loop_schedule_128 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948.align 4 949.Lschedule_192: 950 li 0, 4 951 lvx 0, 0, 3 952 vperm 0, 6, 0, 27 953 vsldoi 0, 3, 0, 8 954 bl _vpaes_schedule_transform 955 vsldoi 6, 0, 9, 8 956 vsldoi 6, 9, 6, 8 957 mtctr 0 958 959.Loop_schedule_192: 960 bl _vpaes_schedule_round 961 vsldoi 0, 6, 0, 8 962 bl _vpaes_schedule_mangle 963 bl _vpaes_schedule_192_smear 964 bl _vpaes_schedule_mangle 965 bl _vpaes_schedule_round 966 bdz .Lschedule_mangle_last 967 bl _vpaes_schedule_mangle 968 bl _vpaes_schedule_192_smear 969 b .Loop_schedule_192 970 971 972 973 974 975 976 977 978 979 980 981.align 4 982.Lschedule_256: 983 li 0, 7 984 addi 3, 3, 8 985 lvx 0, 0, 3 986 vperm 0, 6, 0, 27 987 bl _vpaes_schedule_transform 988 mtctr 0 989 990.Loop_schedule_256: 991 bl _vpaes_schedule_mangle 992 vor 6,0,0 993 994 995 bl _vpaes_schedule_round 996 bdz .Lschedule_mangle_last 997 bl _vpaes_schedule_mangle 998 999 1000 vspltw 0, 0, 3 1001 vor 5,7,7 1002 vor 7,6,6 1003 bl _vpaes_schedule_low_round 1004 vor 7,5,5 1005 1006 b .Loop_schedule_256 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017.align 4 1018.Lschedule_mangle_last: 1019 1020 li 11, 0x2e0 1021 li 9, 0x2f0 1022 bne 1, .Lschedule_mangle_last_dec 1023 1024 1025 lvx 1, 8, 10 1026 li 11, 0x2c0 1027 li 9, 0x2d0 1028 vperm 0, 0, 0, 1 1029 1030 lvx 12, 11, 12 1031 lvx 13, 9, 12 1032 addi 5, 5, 16 1033 vxor 0, 0, 26 1034 bl _vpaes_schedule_transform 1035 1036 1037 vperm 0, 0, 0, 29 1038 li 10, 4 1039 vsel 2,28,0,30 1040 li 11, 8 1041 stvx 2, 0, 5 1042 li 12, 12 1043 stvewx 0, 0, 5 1044 stvewx 0, 10, 5 1045 stvewx 0, 11, 5 1046 stvewx 0, 12, 5 1047 b .Lschedule_mangle_done 1048 1049.align 4 1050.Lschedule_mangle_last_dec: 1051 lvx 12, 11, 12 1052 lvx 13, 9, 12 1053 addi 5, 5, -16 1054 vxor 0, 0, 26 1055 bl _vpaes_schedule_transform 1056 1057 1058 addi 9, 5, -15 1059 vperm 0, 0, 0, 29 1060 li 10, 4 1061 vsel 2,28,0,30 1062 li 11, 8 1063 stvx 2, 0, 5 1064 li 12, 12 1065 stvewx 0, 0, 9 1066 stvewx 0, 10, 9 1067 stvewx 0, 11, 9 1068 stvewx 0, 12, 9 1069 1070 1071.Lschedule_mangle_done: 1072 mtlr 7 1073 1074 vxor 0, 0, 0 1075 vxor 1, 1, 1 1076 vxor 2, 2, 2 1077 vxor 3, 3, 3 1078 vxor 4, 4, 4 1079 vxor 5, 5, 5 1080 vxor 6, 6, 6 1081 vxor 7, 7, 7 1082 1083 blr 1084.long 0 1085.byte 0,12,0x14,0,0,0,0,0 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101.align 4 1102_vpaes_schedule_192_smear: 1103 vspltw 0, 7, 3 1104 vsldoi 1, 9, 6, 12 1105 vsldoi 0, 7, 0, 8 1106 vxor 6, 6, 1 1107 vxor 6, 6, 0 1108 vor 0,6,6 1109 vsldoi 6, 6, 9, 8 1110 vsldoi 6, 9, 6, 8 1111 blr 1112.long 0 1113.byte 0,12,0x14,0,0,0,0,0 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133.align 4 1134_vpaes_schedule_round: 1135 1136 1137 vsldoi 1, 24, 9, 15 1138 vsldoi 24, 24, 24, 15 1139 vxor 7, 7, 1 1140 1141 1142 vspltw 0, 0, 3 1143 vsldoi 0, 0, 0, 1 1144 1145 1146 1147 1148_vpaes_schedule_low_round: 1149 1150 vsldoi 1, 9, 7, 12 1151 vxor 7, 7, 1 1152 vspltisb 1,0x0f 1153 vsldoi 4, 9, 7, 8 1154 1155 1156 vand 1, 1, 0 1157 vsrb 0, 0, 8 1158 vxor 7, 7, 4 1159 vperm 2, 11, 9, 1 1160 vxor 1, 1, 0 1161 vperm 3, 10, 9, 0 1162 vxor 3, 3, 2 1163 vperm 4, 10, 9, 1 1164 vxor 7, 7, 26 1165 vperm 3, 10, 9, 3 1166 vxor 4, 4, 2 1167 vperm 2, 10, 9, 4 1168 vxor 3, 3, 1 1169 vxor 2, 2, 0 1170 vperm 4, 15, 9, 3 1171 vperm 1, 14, 9, 2 1172 vxor 1, 1, 4 1173 1174 1175 vxor 0, 1, 7 1176 vxor 7, 1, 7 1177 blr 1178.long 0 1179.byte 0,12,0x14,0,0,0,0,0 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190.align 4 1191_vpaes_schedule_transform: 1192 1193 vsrb 2, 0, 8 1194 1195 vperm 0, 12, 12, 0 1196 1197 vperm 2, 13, 13, 2 1198 vxor 0, 0, 2 1199 blr 1200.long 0 1201.byte 0,12,0x14,0,0,0,0,0 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226.align 4 1227_vpaes_schedule_mangle: 1228 1229 1230 bne 1, .Lschedule_mangle_dec 1231 1232 1233 vxor 4, 0, 26 1234 addi 5, 5, 16 1235 vperm 4, 4, 4, 25 1236 vperm 1, 4, 4, 25 1237 vperm 3, 1, 1, 25 1238 vxor 4, 4, 1 1239 lvx 1, 8, 10 1240 vxor 3, 3, 4 1241 1242 vperm 3, 3, 3, 1 1243 addi 8, 8, -16 1244 andi. 8, 8, 0x30 1245 1246 1247 vperm 1, 3, 3, 29 1248 vsel 2,28,1,30 1249 vor 28,1,1 1250 stvx 2, 0, 5 1251 blr 1252 1253.align 4 1254.Lschedule_mangle_dec: 1255 1256 1257 vsrb 1, 0, 8 1258 1259 1260 1261 vperm 2, 16, 16, 0 1262 1263 vperm 3, 17, 17, 1 1264 vxor 3, 3, 2 1265 vperm 3, 3, 9, 25 1266 1267 1268 vperm 2, 18, 18, 0 1269 vxor 2, 2, 3 1270 1271 vperm 3, 19, 19, 1 1272 vxor 3, 3, 2 1273 vperm 3, 3, 9, 25 1274 1275 1276 vperm 2, 20, 20, 0 1277 vxor 2, 2, 3 1278 1279 vperm 3, 21, 21, 1 1280 vxor 3, 3, 2 1281 1282 1283 vperm 2, 22, 22, 0 1284 vperm 3, 3, 9, 25 1285 1286 vperm 4, 23, 23, 1 1287 lvx 1, 8, 10 1288 vxor 2, 2, 3 1289 vxor 3, 4, 2 1290 1291 addi 5, 5, -16 1292 1293 vperm 3, 3, 3, 1 1294 addi 8, 8, -16 1295 andi. 8, 8, 0x30 1296 1297 1298 vperm 1, 3, 3, 29 1299 vsel 2,28,1,30 1300 vor 28,1,1 1301 stvx 2, 0, 5 1302 blr 1303.long 0 1304.byte 0,12,0x14,0,0,0,0,0 1305 1306.globl vpaes_set_encrypt_key 1307.type vpaes_set_encrypt_key,@function 1308.align 5 1309vpaes_set_encrypt_key: 1310 stwu 1,-232(1) 1311 li 10,39 1312 li 11,55 1313 mflr 0 1314 mfspr 6,256 1315 stvx 20,10,1 1316 addi 10,10,32 1317 stvx 21,11,1 1318 addi 11,11,32 1319 stvx 22,10,1 1320 addi 10,10,32 1321 stvx 23,11,1 1322 addi 11,11,32 1323 stvx 24,10,1 1324 addi 10,10,32 1325 stvx 25,11,1 1326 addi 11,11,32 1327 stvx 26,10,1 1328 addi 10,10,32 1329 stvx 27,11,1 1330 addi 11,11,32 1331 stvx 28,10,1 1332 addi 10,10,32 1333 stvx 29,11,1 1334 addi 11,11,32 1335 stvx 30,10,1 1336 stvx 31,11,1 1337 stw 6,228(1) 1338 li 7, -1 1339 stw 0, 236(1) 1340 mtspr 256,7 1341 1342 srwi 9, 4, 5 1343 addi 9, 9, 6 1344 stw 9, 240(5) 1345 1346 .long 0x7c842040 1347 li 8, 0x30 1348 bl _vpaes_schedule_core 1349 1350 lwz 0, 236(1) 1351 li 10,39 1352 li 11,55 1353 mtspr 256,6 1354 mtlr 0 1355 xor 3, 3, 3 1356 lvx 20,10,1 1357 addi 10,10,32 1358 lvx 21,11,1 1359 addi 11,11,32 1360 lvx 22,10,1 1361 addi 10,10,32 1362 lvx 23,11,1 1363 addi 11,11,32 1364 lvx 24,10,1 1365 addi 10,10,32 1366 lvx 25,11,1 1367 addi 11,11,32 1368 lvx 26,10,1 1369 addi 10,10,32 1370 lvx 27,11,1 1371 addi 11,11,32 1372 lvx 28,10,1 1373 addi 10,10,32 1374 lvx 29,11,1 1375 addi 11,11,32 1376 lvx 30,10,1 1377 lvx 31,11,1 1378 addi 1,1,232 1379 blr 1380.long 0 1381.byte 0,12,0x04,1,0x80,0,3,0 1382.long 0 1383 1384 1385.globl vpaes_set_decrypt_key 1386.type vpaes_set_decrypt_key,@function 1387.align 4 1388vpaes_set_decrypt_key: 1389 stwu 1,-232(1) 1390 li 10,39 1391 li 11,55 1392 mflr 0 1393 mfspr 6,256 1394 stvx 20,10,1 1395 addi 10,10,32 1396 stvx 21,11,1 1397 addi 11,11,32 1398 stvx 22,10,1 1399 addi 10,10,32 1400 stvx 23,11,1 1401 addi 11,11,32 1402 stvx 24,10,1 1403 addi 10,10,32 1404 stvx 25,11,1 1405 addi 11,11,32 1406 stvx 26,10,1 1407 addi 10,10,32 1408 stvx 27,11,1 1409 addi 11,11,32 1410 stvx 28,10,1 1411 addi 10,10,32 1412 stvx 29,11,1 1413 addi 11,11,32 1414 stvx 30,10,1 1415 stvx 31,11,1 1416 stw 6,228(1) 1417 li 7, -1 1418 stw 0, 236(1) 1419 mtspr 256,7 1420 1421 srwi 9, 4, 5 1422 addi 9, 9, 6 1423 stw 9, 240(5) 1424 1425 slwi 9, 9, 4 1426 add 5, 5, 9 1427 1428 cmplwi 1, 4, 0 1429 srwi 8, 4, 1 1430 andi. 8, 8, 32 1431 xori 8, 8, 32 1432 bl _vpaes_schedule_core 1433 1434 lwz 0, 236(1) 1435 li 10,39 1436 li 11,55 1437 mtspr 256,6 1438 mtlr 0 1439 xor 3, 3, 3 1440 lvx 20,10,1 1441 addi 10,10,32 1442 lvx 21,11,1 1443 addi 11,11,32 1444 lvx 22,10,1 1445 addi 10,10,32 1446 lvx 23,11,1 1447 addi 11,11,32 1448 lvx 24,10,1 1449 addi 10,10,32 1450 lvx 25,11,1 1451 addi 11,11,32 1452 lvx 26,10,1 1453 addi 10,10,32 1454 lvx 27,11,1 1455 addi 11,11,32 1456 lvx 28,10,1 1457 addi 10,10,32 1458 lvx 29,11,1 1459 addi 11,11,32 1460 lvx 30,10,1 1461 lvx 31,11,1 1462 addi 1,1,232 1463 blr 1464.long 0 1465.byte 0,12,0x04,1,0x80,0,3,0 1466.long 0 1467 1468