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