1/* 2 * This file is part of the openHiTLS project. 3 * 4 * openHiTLS is licensed under the Mulan PSL v2. 5 * You can use this software according to the terms and conditions of the Mulan PSL v2. 6 * You may obtain a copy of Mulan PSL v2 at: 7 * 8 * http://license.coscl.org.cn/MulanPSL2 9 * 10 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, 11 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, 12 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 13 * See the Mulan PSL v2 for more details. 14 */ 15 16#include "hitls_build.h" 17#ifdef HITLS_CRYPTO_AES 18 19.file "crypt_aes_macro_armv8.s" 20.text 21.arch armv8-a+crypto 22 23BLK0 .req v0 24 25/* 26 * AES_ENC_1_BLKS 27 */ 28.macro AES_ENC_1_BLK key blk rdk0s rdk1s rdk0 rdk1 rounds 29 ldr \rounds,[\key,#240] 30 ld1 {\rdk0s,\rdk1s},[\key],#32 31 sub \rounds,\rounds,#2 32.Loop_enc: 33 aese \blk,\rdk0 34 aesmc \blk,\blk 35 subs \rounds,\rounds,#2 36 ld1 {\rdk0s},[\key],#16 37 aese \blk,\rdk1 38 aesmc \blk,\blk 39 ld1 {\rdk1s},[\key],#16 40 b.gt .Loop_enc 41 42 aese \blk,\rdk0 43 aesmc \blk,\blk 44 ld1 {\rdk0s},[\key] 45 aese \blk,\rdk1 46 eor \blk,\blk,\rdk0 47.endm 48 49/* 50 * AES_DEC_1_BLKS 51 */ 52.macro AES_DEC_1_BLK key blk rdk0s rdk1s rdk0 rdk1 rounds 53 ldr \rounds,[\key,#240] 54 ld1 {\rdk0s,\rdk1s},[\key],#32 55 sub \rounds,\rounds,#2 56.Loop_dec: 57 aesd \blk,\rdk0 58 aesimc \blk,\blk 59 subs \rounds,\rounds,#2 60 ld1 {\rdk0s},[\key],#16 61 aesd \blk,\rdk1 62 aesimc \blk,\blk 63 ld1 {\rdk1s},[\key],#16 64 b.gt .Loop_dec 65 66 aesd \blk,\rdk0 67 aesimc \blk,\blk 68 ld1 {\rdk0s},[\key] 69 aesd \blk,\rdk1 70 eor \blk,\blk,\rdk0 71.endm 72 73.macro SETDECKEY_LDR_9_BLOCK PTR 74 ld1 {v1.4s}, [\PTR], #16 75 ld1 {v2.4s}, [\PTR], #16 76 ld1 {v3.4s}, [\PTR], #16 77 ld1 {v4.4s}, [\PTR], #16 78 ld1 {v5.4s}, [\PTR], #16 79 ld1 {v6.4s}, [\PTR], #16 80 ld1 {v7.4s}, [\PTR], #16 81 ld1 {v8.4s}, [\PTR], #16 82 ld1 {v9.4s}, [\PTR], #16 83.endm 84 85.macro SETDECKEY_INVMIX_9_BLOCK 86 aesimc v1.16b, v1.16b 87 aesimc v2.16b, v2.16b 88 aesimc v3.16b, v3.16b 89 aesimc v4.16b, v4.16b 90 aesimc v5.16b, v5.16b 91 aesimc v6.16b, v6.16b 92 aesimc v7.16b, v7.16b 93 aesimc v8.16b, v8.16b 94 aesimc v9.16b, v9.16b 95.endm 96 97.macro SETDECKEY_STR_9_BLOCK PTR OFFSETREG 98 st1 {v1.4s}, [\PTR], \OFFSETREG 99 st1 {v2.4s}, [\PTR], \OFFSETREG 100 st1 {v3.4s}, [\PTR], \OFFSETREG 101 st1 {v4.4s}, [\PTR], \OFFSETREG 102 st1 {v5.4s}, [\PTR], \OFFSETREG 103 st1 {v6.4s}, [\PTR], \OFFSETREG 104 st1 {v7.4s}, [\PTR], \OFFSETREG 105 st1 {v8.4s}, [\PTR], \OFFSETREG 106 st1 {v9.4s}, [\PTR], \OFFSETREG 107.endm 108 109/* 110 * AES_ENC_2_BLKS 111 */ 112.macro AES_ENC_2_BLKS key blk0 blk1 rdk0s rdk1s rdk0 rdk1 rounds 113 ldr \rounds,[\key,#240] 114 ld1 {\rdk0s,\rdk1s},[\key],#32 115 sub \rounds,\rounds,#2 116.Loop_enc_2_blks: 117 aese \blk0,\rdk0 118 aesmc \blk0,\blk0 119 aese \blk0,\rdk1 120 aesmc \blk0,\blk0 121 122 aese \blk1,\rdk0 123 aesmc \blk1,\blk1 124 aese \blk1,\rdk1 125 aesmc \blk1,\blk1 126 127 ld1 {\rdk0s,\rdk1s},[\key],#32 128 subs \rounds,\rounds,#2 129 b.gt .Loop_enc_2_blks 130 131 aese \blk0,\rdk0 132 aesmc \blk0,\blk0 133 aese \blk1,\rdk0 134 aesmc \blk1,\blk1 135 ld1 {\rdk0s},[\key] 136 aese \blk0,\rdk1 137 aese \blk1,\rdk1 138 eor \blk0,\blk0,\rdk0 139 eor \blk1,\blk1,\rdk0 140.endm 141 142/* 143 * AES_ENC_3_BLKS 144 */ 145.macro AES_ENC_3_BLKS key blk0 blk1 blk2 rdk0s rdk1s rdk0 rdk1 rounds 146 ldr \rounds,[\key,#240] 147 ld1 {\rdk0s,\rdk1s},[\key],#32 148 sub \rounds,\rounds,#2 149.align 3 150.Loop_enc_3_blks: 151 aese \blk0,\rdk0 152 aesmc \blk0,\blk0 153 aese \blk0,\rdk1 154 aesmc \blk0,\blk0 155 156 aese \blk1,\rdk0 157 aesmc \blk1,\blk1 158 aese \blk1,\rdk1 159 aesmc \blk1,\blk1 160 161 aese \blk2,\rdk0 162 aesmc \blk2,\blk2 163 aese \blk2,\rdk1 164 aesmc \blk2,\blk2 165 166 ld1 {\rdk0s,\rdk1s},[\key],#32 167 subs \rounds,\rounds,#2 168 b.gt .Loop_enc_3_blks 169 170 aese \blk0,\rdk0 171 aesmc \blk0,\blk0 172 aese \blk1,\rdk0 173 aesmc \blk1,\blk1 174 aese \blk2,\rdk0 175 aesmc \blk2,\blk2 176 ld1 {\rdk0s},[\key] 177 aese \blk0,\rdk1 178 aese \blk1,\rdk1 179 aese \blk2,\rdk1 180 eor \blk0,\blk0,\rdk0 181 eor \blk1,\blk1,\rdk0 182 eor \blk2,\blk2,\rdk0 183.endm 184 185/* 186 * AES_ENC_4_BLKS 187 */ 188.macro AES_ENC_4_BLKS key blk0 blk1 blk2 blk3 rdk0s rdk1s rdk0 rdk1 rounds 189 ldr \rounds,[\key,#240] 190 ld1 {\rdk0s,\rdk1s},[\key],#32 191 sub \rounds,\rounds,#2 192.Loop_enc_4_blks: 193 aese \blk0,\rdk0 194 aesmc \blk0,\blk0 195 aese \blk0,\rdk1 196 aesmc \blk0,\blk0 197 198 aese \blk1,\rdk0 199 aesmc \blk1,\blk1 200 aese \blk1,\rdk1 201 aesmc \blk1,\blk1 202 203 aese \blk2,\rdk0 204 aesmc \blk2,\blk2 205 aese \blk2,\rdk1 206 aesmc \blk2,\blk2 207 208 aese \blk3,\rdk0 209 aesmc \blk3,\blk3 210 aese \blk3,\rdk1 211 aesmc \blk3,\blk3 212 213 ld1 {\rdk0s,\rdk1s},[\key],#32 214 subs \rounds,\rounds,#2 215 b.gt .Loop_enc_4_blks 216 217 aese \blk0,\rdk0 218 aesmc \blk0,\blk0 219 aese \blk1,\rdk0 220 aesmc \blk1,\blk1 221 aese \blk2,\rdk0 222 aesmc \blk2,\blk2 223 aese \blk3,\rdk0 224 aesmc \blk3,\blk3 225 ld1 {\rdk0s},[\key] 226 aese \blk0,\rdk1 227 aese \blk1,\rdk1 228 aese \blk2,\rdk1 229 aese \blk3,\rdk1 230 eor \blk0,\blk0,\rdk0 231 eor \blk1,\blk1,\rdk0 232 eor \blk2,\blk2,\rdk0 233 eor \blk3,\blk3,\rdk0 234.endm 235 236 237/* 238 * AES_ENC_5_BLKS 239 */ 240.macro AES_ENC_5_BLKS key blk0 blk1 blk2 blk3 blk4 rdk0s rdk1s rdk0 rdk1 rounds 241 ldr \rounds,[\key,#240] 242 ld1 {\rdk0s,\rdk1s},[\key],#32 243 sub \rounds,\rounds,#2 244.Loop_enc_5_blks: 245 aese \blk0,\rdk0 246 aesmc \blk0,\blk0 247 aese \blk1,\rdk0 248 aesmc \blk1,\blk1 249 aese \blk2,\rdk0 250 aesmc \blk2,\blk2 251 aese \blk3,\rdk0 252 aesmc \blk3,\blk3 253 aese \blk4,\rdk0 254 aesmc \blk4,\blk4 255 ld1 {\rdk0s},[\key],#16 256 subs \rounds,\rounds,#2 257 aese \blk0,\rdk1 258 aesmc \blk0,\blk0 259 260 aese \blk1,\rdk1 261 aesmc \blk1,\blk1 262 263 aese \blk2,\rdk1 264 aesmc \blk2,\blk2 265 266 aese \blk3,\rdk1 267 aesmc \blk3,\blk3 268 269 aese \blk4,\rdk1 270 aesmc \blk4,\blk4 271 272 ld1 {\rdk1s},[\key],#16 273 b.gt .Loop_enc_5_blks 274 275 aese \blk0,\rdk0 276 aesmc \blk0,\blk0 277 aese \blk1,\rdk0 278 aesmc \blk1,\blk1 279 aese \blk2,\rdk0 280 aesmc \blk2,\blk2 281 aese \blk3,\rdk0 282 aesmc \blk3,\blk3 283 aese \blk4,\rdk0 284 aesmc \blk4,\blk4 285 ld1 {\rdk0s},[\key] 286 aese \blk0,\rdk1 287 aese \blk1,\rdk1 288 aese \blk2,\rdk1 289 aese \blk3,\rdk1 290 aese \blk4,\rdk1 291 eor \blk0,\blk0,\rdk0 292 eor \blk1,\blk1,\rdk0 293 eor \blk2,\blk2,\rdk0 294 eor \blk3,\blk3,\rdk0 295 eor \blk4,\blk4,\rdk0 296.endm 297 298/* 299 * AES_ENC_6_BLKS 300 */ 301.macro AES_ENC_6_BLKS key blk0 blk1 blk2 blk3 blk4 blk5 rdk0s rdk1s rdk0 rdk1 rounds 302 ldr \rounds,[\key,#240] 303 ld1 {\rdk0s,\rdk1s},[\key],#32 304 sub \rounds,\rounds,#2 305.Loop_enc_6_blks: 306 aese \blk0,\rdk0 307 aesmc \blk0,\blk0 308 aese \blk0,\rdk1 309 aesmc \blk0,\blk0 310 311 aese \blk1,\rdk0 312 aesmc \blk1,\blk1 313 aese \blk1,\rdk1 314 aesmc \blk1,\blk1 315 316 aese \blk2,\rdk0 317 aesmc \blk2,\blk2 318 aese \blk2,\rdk1 319 aesmc \blk2,\blk2 320 321 aese \blk3,\rdk0 322 aesmc \blk3,\blk3 323 aese \blk3,\rdk1 324 aesmc \blk3,\blk3 325 326 aese \blk4,\rdk0 327 aesmc \blk4,\blk4 328 aese \blk4,\rdk1 329 aesmc \blk4,\blk4 330 331 aese \blk5,\rdk0 332 aesmc \blk5,\blk5 333 aese \blk5,\rdk1 334 aesmc \blk5,\blk5 335 336 ld1 {\rdk0s,\rdk1s},[\key],#32 337 subs \rounds,\rounds,#2 338 b.gt .Loop_enc_6_blks 339 340 aese \blk0,\rdk0 341 aesmc \blk0,\blk0 342 aese \blk1,\rdk0 343 aesmc \blk1,\blk1 344 aese \blk2,\rdk0 345 aesmc \blk2,\blk2 346 aese \blk3,\rdk0 347 aesmc \blk3,\blk3 348 aese \blk4,\rdk0 349 aesmc \blk4,\blk4 350 aese \blk5,\rdk0 351 aesmc \blk5,\blk5 352 ld1 {\rdk0s},[\key] 353 aese \blk0,\rdk1 354 aese \blk1,\rdk1 355 aese \blk2,\rdk1 356 aese \blk3,\rdk1 357 aese \blk4,\rdk1 358 aese \blk5,\rdk1 359 eor \blk0,\blk0,\rdk0 360 eor \blk1,\blk1,\rdk0 361 eor \blk2,\blk2,\rdk0 362 eor \blk3,\blk3,\rdk0 363 eor \blk4,\blk4,\rdk0 364 eor \blk5,\blk5,\rdk0 365.endm 366 367 368/* 369 * AES_ENC_7_BLKS 370 */ 371.macro AES_ENC_7_BLKS key blk0 blk1 blk2 blk3 blk4 blk5 blk6 rdk0s rdk1s rdk0 rdk1 rounds 372 ldr \rounds,[\key,#240] 373 ld1 {\rdk0s,\rdk1s},[\key],#32 374 sub \rounds,\rounds,#2 375.Loop_enc_7_blks: 376 aese \blk0,\rdk0 377 aesmc \blk0,\blk0 378 aese \blk0,\rdk1 379 aesmc \blk0,\blk0 380 381 aese \blk1,\rdk0 382 aesmc \blk1,\blk1 383 aese \blk1,\rdk1 384 aesmc \blk1,\blk1 385 386 aese \blk2,\rdk0 387 aesmc \blk2,\blk2 388 aese \blk2,\rdk1 389 aesmc \blk2,\blk2 390 391 aese \blk3,\rdk0 392 aesmc \blk3,\blk3 393 aese \blk3,\rdk1 394 aesmc \blk3,\blk3 395 396 aese \blk4,\rdk0 397 aesmc \blk4,\blk4 398 aese \blk4,\rdk1 399 aesmc \blk4,\blk4 400 401 aese \blk5,\rdk0 402 aesmc \blk5,\blk5 403 aese \blk5,\rdk1 404 aesmc \blk5,\blk5 405 406 aese \blk6,\rdk0 407 aesmc \blk6,\blk6 408 aese \blk6,\rdk1 409 aesmc \blk6,\blk6 410 411 ld1 {\rdk0s,\rdk1s},[\key],#32 412 subs \rounds,\rounds,#2 413 b.gt .Loop_enc_7_blks 414 415 aese \blk0,\rdk0 416 aesmc \blk0,\blk0 417 aese \blk1,\rdk0 418 aesmc \blk1,\blk1 419 aese \blk2,\rdk0 420 aesmc \blk2,\blk2 421 aese \blk3,\rdk0 422 aesmc \blk3,\blk3 423 aese \blk4,\rdk0 424 aesmc \blk4,\blk4 425 aese \blk5,\rdk0 426 aesmc \blk5,\blk5 427 aese \blk6,\rdk0 428 aesmc \blk6,\blk6 429 ld1 {\rdk0s},[\key] 430 aese \blk0,\rdk1 431 aese \blk1,\rdk1 432 aese \blk2,\rdk1 433 aese \blk3,\rdk1 434 aese \blk4,\rdk1 435 aese \blk5,\rdk1 436 aese \blk6,\rdk1 437 eor \blk0,\blk0,\rdk0 438 eor \blk1,\blk1,\rdk0 439 eor \blk2,\blk2,\rdk0 440 eor \blk3,\blk3,\rdk0 441 eor \blk4,\blk4,\rdk0 442 eor \blk5,\blk5,\rdk0 443 eor \blk6,\blk6,\rdk0 444.endm 445 446/* 447 * AES_ENC_8_BLKS 448 */ 449.macro AES_ENC_8_BLKS key blk0 blk1 blk2 blk3 blk4 blk5 blk6 blk7 rdk0s rdk1s rdk0 rdk1 rounds 450 ldr \rounds,[\key,#240] 451 ld1 {\rdk0s,\rdk1s},[\key],#32 452 sub \rounds,\rounds,#2 453.Loop_enc_8_blks: 454 aese \blk0,\rdk0 455 aesmc \blk0,\blk0 456 aese \blk0,\rdk1 457 aesmc \blk0,\blk0 458 459 aese \blk1,\rdk0 460 aesmc \blk1,\blk1 461 aese \blk1,\rdk1 462 aesmc \blk1,\blk1 463 464 aese \blk2,\rdk0 465 aesmc \blk2,\blk2 466 aese \blk2,\rdk1 467 aesmc \blk2,\blk2 468 469 aese \blk3,\rdk0 470 aesmc \blk3,\blk3 471 aese \blk3,\rdk1 472 aesmc \blk3,\blk3 473 474 aese \blk4,\rdk0 475 aesmc \blk4,\blk4 476 aese \blk4,\rdk1 477 aesmc \blk4,\blk4 478 479 aese \blk5,\rdk0 480 aesmc \blk5,\blk5 481 aese \blk5,\rdk1 482 aesmc \blk5,\blk5 483 484 aese \blk6,\rdk0 485 aesmc \blk6,\blk6 486 aese \blk6,\rdk1 487 aesmc \blk6,\blk6 488 489 aese \blk7,\rdk0 490 aesmc \blk7,\blk7 491 aese \blk7,\rdk1 492 aesmc \blk7,\blk7 493 494 ld1 {\rdk0s,\rdk1s},[\key],#32 495 subs \rounds,\rounds,#2 496 b.gt .Loop_enc_8_blks 497 498 499 aese \blk0,\rdk0 500 aesmc \blk0,\blk0 501 aese \blk1,\rdk0 502 aesmc \blk1,\blk1 503 aese \blk2,\rdk0 504 aesmc \blk2,\blk2 505 aese \blk3,\rdk0 506 aesmc \blk3,\blk3 507 aese \blk4,\rdk0 508 aesmc \blk4,\blk4 509 aese \blk5,\rdk0 510 aesmc \blk5,\blk5 511 aese \blk6,\rdk0 512 aesmc \blk6,\blk6 513 aese \blk7,\rdk0 514 aesmc \blk7,\blk7 515 ld1 {\rdk0s},[\key] 516 aese \blk0,\rdk1 517 aese \blk1,\rdk1 518 aese \blk2,\rdk1 519 aese \blk3,\rdk1 520 aese \blk4,\rdk1 521 aese \blk5,\rdk1 522 aese \blk6,\rdk1 523 aese \blk7,\rdk1 524 eor \blk0,\blk0,\rdk0 525 eor \blk1,\blk1,\rdk0 526 eor \blk2,\blk2,\rdk0 527 eor \blk3,\blk3,\rdk0 528 eor \blk4,\blk4,\rdk0 529 eor \blk5,\blk5,\rdk0 530 eor \blk6,\blk6,\rdk0 531 eor \blk7,\blk7,\rdk0 532.endm 533 534/* 535 * AES_DEC_2_BLKS 536 */ 537.macro AES_DEC_2_BLKS key blk0 blk1 rdk0s rdk1s rdk0 rdk1 rounds 538 ldr \rounds,[\key,#240] 539 ld1 {\rdk0s,\rdk1s},[\key],#32 540 sub \rounds,\rounds,#2 541.Loop_dec_2_blks: 542 aesd \blk0,\rdk0 543 aesimc \blk0,\blk0 544 aesd \blk0,\rdk1 545 aesimc \blk0,\blk0 546 547 aesd \blk1,\rdk0 548 aesimc \blk1,\blk1 549 aesd \blk1,\rdk1 550 aesimc \blk1,\blk1 551 552 ld1 {\rdk0s,\rdk1s},[\key],#32 553 subs \rounds,\rounds,#2 554 b.gt .Loop_dec_2_blks 555 556 557 aesd \blk0,\rdk0 558 aesimc \blk0,\blk0 559 aesd \blk1,\rdk0 560 aesimc \blk1,\blk1 561 ld1 {\rdk0s},[\key] 562 aesd \blk0,\rdk1 563 aesd \blk1,\rdk1 564 eor \blk0,\blk0,\rdk0 565 eor \blk1,\blk1,\rdk0 566.endm 567 568/* 569 * AES_DEC_3_BLKS 570 */ 571.macro AES_DEC_3_BLKS key blk0 blk1 blk2 rdk0s rdk1s rdk0 rdk1 rounds 572 ldr \rounds,[\key,#240] 573 ld1 {\rdk0s,\rdk1s},[\key],#32 574 sub \rounds,\rounds,#2 575.align 3 576.Loop_dec_3_blks: 577 aesd \blk0,\rdk0 578 aesimc \blk0,\blk0 579 aesd \blk0,\rdk1 580 aesimc \blk0,\blk0 581 582 aesd \blk1,\rdk0 583 aesimc \blk1,\blk1 584 aesd \blk1,\rdk1 585 aesimc \blk1,\blk1 586 587 aesd \blk2,\rdk0 588 aesimc \blk2,\blk2 589 aesd \blk2,\rdk1 590 aesimc \blk2,\blk2 591 592 ld1 {\rdk0s,\rdk1s},[\key],#32 593 subs \rounds,\rounds,#2 594 b.gt .Loop_dec_3_blks 595 596 aesd \blk0,\rdk0 597 aesimc \blk0,\blk0 598 aesd \blk1,\rdk0 599 aesimc \blk1,\blk1 600 aesd \blk2,\rdk0 601 aesimc \blk2,\blk2 602 ld1 {\rdk0s},[\key] 603 aesd \blk0,\rdk1 604 aesd \blk1,\rdk1 605 aesd \blk2,\rdk1 606 eor \blk0,\blk0,\rdk0 607 eor \blk1,\blk1,\rdk0 608 eor \blk2,\blk2,\rdk0 609.endm 610 611/* 612 * AES_DEC_4_BLKS 613 */ 614.macro AES_DEC_4_BLKS key blk0 blk1 blk2 blk3 rdk0s rdk1s rdk0 rdk1 rounds 615 ldr \rounds,[\key,#240] 616 ld1 {\rdk0s,\rdk1s},[\key],#32 617 sub \rounds,\rounds,#2 618.Loop_dec_4_blks: 619 aesd \blk0,\rdk0 620 aesimc \blk0,\blk0 621 aesd \blk0,\rdk1 622 aesimc \blk0,\blk0 623 624 aesd \blk1,\rdk0 625 aesimc \blk1,\blk1 626 aesd \blk1,\rdk1 627 aesimc \blk1,\blk1 628 629 aesd \blk2,\rdk0 630 aesimc \blk2,\blk2 631 aesd \blk2,\rdk1 632 aesimc \blk2,\blk2 633 634 aesd \blk3,\rdk0 635 aesimc \blk3,\blk3 636 aesd \blk3,\rdk1 637 aesimc \blk3,\blk3 638 639 ld1 {\rdk0s,\rdk1s},[\key],#32 640 subs \rounds,\rounds,#2 641 b.gt .Loop_dec_4_blks 642 643 aesd \blk0,\rdk0 644 aesimc \blk0,\blk0 645 aesd \blk1,\rdk0 646 aesimc \blk1,\blk1 647 aesd \blk2,\rdk0 648 aesimc \blk2,\blk2 649 aesd \blk3,\rdk0 650 aesimc \blk3,\blk3 651 ld1 {\rdk0s},[\key] 652 aesd \blk0,\rdk1 653 aesd \blk1,\rdk1 654 aesd \blk2,\rdk1 655 aesd \blk3,\rdk1 656 eor \blk0,\blk0,\rdk0 657 eor \blk1,\blk1,\rdk0 658 eor \blk2,\blk2,\rdk0 659 eor \blk3,\blk3,\rdk0 660.endm 661 662/* 663 * AES_DEC_5_BLKS 664 */ 665.macro AES_DEC_5_BLKS key blk0 blk1 blk2 blk3 blk4 rdk0s rdk1s rdk0 rdk1 rounds 666 ldr \rounds,[\key,#240] 667 ld1 {\rdk0s,\rdk1s},[\key],#32 668 sub \rounds,\rounds,#2 669.Loop_dec_5_blks: 670 aesd \blk0,\rdk0 671 aesimc \blk0,\blk0 672 aesd \blk0,\rdk1 673 aesimc \blk0,\blk0 674 675 aesd \blk1,\rdk0 676 aesimc \blk1,\blk1 677 aesd \blk1,\rdk1 678 aesimc \blk1,\blk1 679 680 aesd \blk2,\rdk0 681 aesimc \blk2,\blk2 682 aesd \blk2,\rdk1 683 aesimc \blk2,\blk2 684 685 aesd \blk3,\rdk0 686 aesimc \blk3,\blk3 687 aesd \blk3,\rdk1 688 aesimc \blk3,\blk3 689 690 aesd \blk4,\rdk0 691 aesimc \blk4,\blk4 692 aesd \blk4,\rdk1 693 aesimc \blk4,\blk4 694 695 ld1 {\rdk0s,\rdk1s},[\key],#32 696 subs \rounds,\rounds,#2 697 b.gt .Loop_dec_5_blks 698 699 aesd \blk0,\rdk0 700 aesimc \blk0,\blk0 701 aesd \blk1,\rdk0 702 aesimc \blk1,\blk1 703 aesd \blk2,\rdk0 704 aesimc \blk2,\blk2 705 aesd \blk3,\rdk0 706 aesimc \blk3,\blk3 707 aesd \blk4,\rdk0 708 aesimc \blk4,\blk4 709 ld1 {\rdk0s},[\key] 710 aesd \blk0,\rdk1 711 aesd \blk1,\rdk1 712 aesd \blk2,\rdk1 713 aesd \blk3,\rdk1 714 aesd \blk4,\rdk1 715 eor \blk0,\blk0,\rdk0 716 eor \blk1,\blk1,\rdk0 717 eor \blk2,\blk2,\rdk0 718 eor \blk3,\blk3,\rdk0 719 eor \blk4,\blk4,\rdk0 720.endm 721 722/* 723 * AES_DEC_6_BLKS 724 */ 725.macro AES_DEC_6_BLKS key blk0 blk1 blk2 blk3 blk4 blk5 rdk0s rdk1s rdk0 rdk1 rounds 726 ldr \rounds,[\key,#240] 727 ld1 {\rdk0s,\rdk1s},[\key],#32 728 sub \rounds,\rounds,#2 729.Loop_dec_6_blks: 730 aesd \blk0,\rdk0 731 aesimc \blk0,\blk0 732 aesd \blk0,\rdk1 733 aesimc \blk0,\blk0 734 735 aesd \blk1,\rdk0 736 aesimc \blk1,\blk1 737 aesd \blk1,\rdk1 738 aesimc \blk1,\blk1 739 740 aesd \blk2,\rdk0 741 aesimc \blk2,\blk2 742 aesd \blk2,\rdk1 743 aesimc \blk2,\blk2 744 745 aesd \blk3,\rdk0 746 aesimc \blk3,\blk3 747 aesd \blk3,\rdk1 748 aesimc \blk3,\blk3 749 750 aesd \blk4,\rdk0 751 aesimc \blk4,\blk4 752 aesd \blk4,\rdk1 753 aesimc \blk4,\blk4 754 755 aesd \blk5,\rdk0 756 aesimc \blk5,\blk5 757 aesd \blk5,\rdk1 758 aesimc \blk5,\blk5 759 760 ld1 {\rdk0s,\rdk1s},[\key],#32 761 subs \rounds,\rounds,#2 762 b.gt .Loop_dec_6_blks 763 764 aesd \blk0,\rdk0 765 aesimc \blk0,\blk0 766 aesd \blk1,\rdk0 767 aesimc \blk1,\blk1 768 aesd \blk2,\rdk0 769 aesimc \blk2,\blk2 770 aesd \blk3,\rdk0 771 aesimc \blk3,\blk3 772 aesd \blk4,\rdk0 773 aesimc \blk4,\blk4 774 aesd \blk5,\rdk0 775 aesimc \blk5,\blk5 776 ld1 {\rdk0s},[\key] 777 aesd \blk0,\rdk1 778 aesd \blk1,\rdk1 779 aesd \blk2,\rdk1 780 aesd \blk3,\rdk1 781 aesd \blk4,\rdk1 782 aesd \blk5,\rdk1 783 eor \blk0,\blk0,\rdk0 784 eor \blk1,\blk1,\rdk0 785 eor \blk2,\blk2,\rdk0 786 eor \blk3,\blk3,\rdk0 787 eor \blk4,\blk4,\rdk0 788 eor \blk5,\blk5,\rdk0 789.endm 790 791/* 792 * AES_DEC_7_BLKS 793 */ 794.macro AES_DEC_7_BLKS key blk0 blk1 blk2 blk3 blk4 blk5 blk6 rdk0s rdk1s rdk0 rdk1 rounds 795 ldr \rounds,[\key,#240] 796 ld1 {\rdk0s,\rdk1s},[\key],#32 797 sub \rounds,\rounds,#2 798.Loop_dec_7_blks: 799 aesd \blk0,\rdk0 800 aesimc \blk0,\blk0 801 aesd \blk0,\rdk1 802 aesimc \blk0,\blk0 803 804 aesd \blk1,\rdk0 805 aesimc \blk1,\blk1 806 aesd \blk1,\rdk1 807 aesimc \blk1,\blk1 808 809 aesd \blk2,\rdk0 810 aesimc \blk2,\blk2 811 aesd \blk2,\rdk1 812 aesimc \blk2,\blk2 813 814 aesd \blk3,\rdk0 815 aesimc \blk3,\blk3 816 aesd \blk3,\rdk1 817 aesimc \blk3,\blk3 818 819 aesd \blk4,\rdk0 820 aesimc \blk4,\blk4 821 aesd \blk4,\rdk1 822 aesimc \blk4,\blk4 823 824 aesd \blk5,\rdk0 825 aesimc \blk5,\blk5 826 aesd \blk5,\rdk1 827 aesimc \blk5,\blk5 828 829 aesd \blk6,\rdk0 830 aesimc \blk6,\blk6 831 aesd \blk6,\rdk1 832 aesimc \blk6,\blk6 833 834 ld1 {\rdk0s,\rdk1s},[\key],#32 835 subs \rounds,\rounds,#2 836 b.gt .Loop_dec_7_blks 837 838 aesd \blk0,\rdk0 839 aesimc \blk0,\blk0 840 aesd \blk1,\rdk0 841 aesimc \blk1,\blk1 842 aesd \blk2,\rdk0 843 aesimc \blk2,\blk2 844 aesd \blk3,\rdk0 845 aesimc \blk3,\blk3 846 aesd \blk4,\rdk0 847 aesimc \blk4,\blk4 848 aesd \blk5,\rdk0 849 aesimc \blk5,\blk5 850 aesd \blk6,\rdk0 851 aesimc \blk6,\blk6 852 ld1 {\rdk0s},[\key] 853 aesd \blk0,\rdk1 854 aesd \blk1,\rdk1 855 aesd \blk2,\rdk1 856 aesd \blk3,\rdk1 857 aesd \blk4,\rdk1 858 aesd \blk5,\rdk1 859 aesd \blk6,\rdk1 860 eor \blk0,\blk0,\rdk0 861 eor \blk1,\blk1,\rdk0 862 eor \blk2,\blk2,\rdk0 863 eor \blk3,\blk3,\rdk0 864 eor \blk4,\blk4,\rdk0 865 eor \blk5,\blk5,\rdk0 866 eor \blk6,\blk6,\rdk0 867.endm 868 869/* 870 * AES_DEC_8_BLKS 871 */ 872.macro AES_DEC_8_BLKS key blk0 blk1 blk2 blk3 blk4 blk5 blk6 blk7 rdk0s rdk1s rdk0 rdk1 rounds 873 ldr \rounds,[\key,#240] 874 ld1 {\rdk0s,\rdk1s},[\key],#32 875 sub \rounds,\rounds,#2 876.align 5 877.Loop_dec_8_blks: 878 aesd \blk0,\rdk0 879 aesimc \blk0,\blk0 880 aesd \blk5,\rdk0 881 aesimc \blk5,\blk5 882 aesd \blk1,\rdk0 883 aesimc \blk1,\blk1 884 aesd \blk6,\rdk0 885 aesimc \blk6,\blk6 886 aesd \blk2,\rdk0 887 aesimc \blk2,\blk2 888 aesd \blk3,\rdk0 889 aesimc \blk3,\blk3 890 aesd \blk4,\rdk0 891 aesimc \blk4,\blk4 892 aesd \blk7,\rdk0 893 aesimc \blk7,\blk7 894 895 aesd \blk0,\rdk1 896 aesimc \blk0,\blk0 897 aesd \blk5,\rdk1 898 aesimc \blk5,\blk5 899 aesd \blk1,\rdk1 900 aesimc \blk1,\blk1 901 aesd \blk6,\rdk1 902 aesimc \blk6,\blk6 903 aesd \blk2,\rdk1 904 aesimc \blk2,\blk2 905 aesd \blk3,\rdk1 906 aesimc \blk3,\blk3 907 aesd \blk4,\rdk1 908 aesimc \blk4,\blk4 909 aesd \blk7,\rdk1 910 ld1 {\rdk0s, \rdk1s},[\key],#32 911 aesimc \blk7,\blk7 912 913 subs \rounds,\rounds,#2 914 b.gt .Loop_dec_8_blks 915 916 aesd \blk0,\rdk0 917 aesimc \blk0,\blk0 918 aesd \blk1,\rdk0 919 aesimc \blk1,\blk1 920 aesd \blk2,\rdk0 921 aesimc \blk2,\blk2 922 aesd \blk3,\rdk0 923 aesimc \blk3,\blk3 924 aesd \blk4,\rdk0 925 aesimc \blk4,\blk4 926 aesd \blk5,\rdk0 927 aesimc \blk5,\blk5 928 aesd \blk6,\rdk0 929 aesimc \blk6,\blk6 930 aesd \blk7,\rdk0 931 ld1 {\rdk0s},[\key] 932 aesimc \blk7,\blk7 933 934 aesd \blk0,\rdk1 935 aesd \blk1,\rdk1 936 aesd \blk2,\rdk1 937 aesd \blk3,\rdk1 938 aesd \blk4,\rdk1 939 aesd \blk5,\rdk1 940 aesd \blk6,\rdk1 941 aesd \blk7,\rdk1 942 eor \blk0,\blk0,\rdk0 943 eor \blk1,\blk1,\rdk0 944 eor \blk2,\blk2,\rdk0 945 eor \blk3,\blk3,\rdk0 946 eor \blk4,\blk4,\rdk0 947 eor \blk5,\blk5,\rdk0 948 eor \blk6,\blk6,\rdk0 949 eor \blk7,\blk7,\rdk0 950.endm 951 952#endif 953