mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2026-11-09 14:50:17 +08:00
ecp: use loops in mbedtls_ecp_mod_p{192,256,384}_raw()
On principle: - If the code is written with a loop, the compiler can easily unroll the loop at high optimisation levels; if we unroll the loop in the source, the compiler is unlikely to roll it up at -Os/-Oz. So loops are more adaptable. - All the other functions are using loops, and there's nothing special about those functions that would justify a different treatement. Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
This commit is contained in:
parent
48e255f31b
commit
42eac21181
@ -4960,23 +4960,15 @@ int mbedtls_ecp_mod_p192_raw(mbedtls_mpi_uint *Np, size_t Nn)
|
||||
ADD(3); ADD(4); ADD(5); NEXT; // A1 += A3 + A4 + A5
|
||||
ADD(4); ADD(5); // A2 += A4 + A5
|
||||
|
||||
RESET;
|
||||
|
||||
/* Use the reduction for the carry as well:
|
||||
* 2^192 * last_carry = 2^64 * last_carry + last_carry mod P192
|
||||
* It can generate a carry. */
|
||||
ADD_LAST; NEXT; // A0 += last_carry
|
||||
ADD_LAST; NEXT; // A1 += last_carry
|
||||
// A2 += carry
|
||||
* 2^192 * last_carry = 2^64 * last_carry + last_carry mod P192 */
|
||||
for (size_t round = 0; round < 2; ++round) {
|
||||
RESET;
|
||||
|
||||
RESET;
|
||||
|
||||
/* Use the reduction for the carry as well:
|
||||
* 2^192 * last_carry = 2^64 * last_carry + last_carry mod P192
|
||||
*/
|
||||
ADD_LAST; NEXT; // A0 += last_carry
|
||||
ADD_LAST; NEXT; // A1 += last_carry
|
||||
// A2 += carry
|
||||
ADD_LAST; NEXT; // A0 += last_carry
|
||||
ADD_LAST; NEXT; // A1 += last_carry
|
||||
// A2 += carry
|
||||
}
|
||||
|
||||
LAST;
|
||||
|
||||
@ -5190,31 +5182,21 @@ int mbedtls_ecp_mod_p256_raw(mbedtls_mpi_uint *X, size_t X_limbs)
|
||||
ADD(15); ADD(15); ADD(15); ADD(8);
|
||||
SUB(10); SUB(11); SUB(12); SUB(13); // A7
|
||||
|
||||
RESET;
|
||||
|
||||
/* Use 2^224 * (2^32 - 1) + 2^192 + 2^96 - 1
|
||||
* to modulo reduce the final carry. */
|
||||
ADD_LAST; NEXT; // A0
|
||||
; NEXT; // A1
|
||||
; NEXT; // A2
|
||||
SUB_LAST; NEXT; // A3
|
||||
; NEXT; // A4
|
||||
; NEXT; // A5
|
||||
SUB_LAST; NEXT; // A6
|
||||
ADD_LAST; // A7
|
||||
for (size_t round = 0; round < 2; ++round) {
|
||||
RESET;
|
||||
|
||||
RESET;
|
||||
|
||||
/* Use 2^224 * (2^32 - 1) + 2^192 + 2^96 - 1
|
||||
* to modulo reduce the carry generated by the previous reduction. */
|
||||
ADD_LAST; NEXT; // A0
|
||||
; NEXT; // A1
|
||||
; NEXT; // A2
|
||||
SUB_LAST; NEXT; // A3
|
||||
; NEXT; // A4
|
||||
; NEXT; // A5
|
||||
SUB_LAST; NEXT; // A6
|
||||
ADD_LAST; // A7
|
||||
/* Use 2^224 * (2^32 - 1) + 2^192 + 2^96 - 1
|
||||
* to modulo reduce the final carry. */
|
||||
ADD_LAST; NEXT; // A0
|
||||
; NEXT; // A1
|
||||
; NEXT; // A2
|
||||
SUB_LAST; NEXT; // A3
|
||||
; NEXT; // A4
|
||||
; NEXT; // A5
|
||||
SUB_LAST; NEXT; // A6
|
||||
ADD_LAST; // A7
|
||||
}
|
||||
|
||||
LAST;
|
||||
|
||||
@ -5282,36 +5264,23 @@ int mbedtls_ecp_mod_p384_raw(mbedtls_mpi_uint *X, size_t X_limbs)
|
||||
ADD(23); ADD(20); ADD(19);
|
||||
SUB(22); // A11
|
||||
|
||||
RESET;
|
||||
for (size_t round = 0; round < 2; ++round) {
|
||||
RESET;
|
||||
|
||||
/* Use 2^384 = P + 2^128 + 2^96 - 2^32 + 1 to modulo reduce the final carry */
|
||||
ADD_LAST; NEXT; // A0
|
||||
SUB_LAST; NEXT; // A1
|
||||
; NEXT; // A2
|
||||
ADD_LAST; NEXT; // A3
|
||||
ADD_LAST; NEXT; // A4
|
||||
; NEXT; // A5
|
||||
; NEXT; // A6
|
||||
; NEXT; // A7
|
||||
; NEXT; // A8
|
||||
; NEXT; // A9
|
||||
; NEXT; // A10
|
||||
// A11
|
||||
|
||||
RESET;
|
||||
|
||||
ADD_LAST; NEXT; // A0
|
||||
SUB_LAST; NEXT; // A1
|
||||
; NEXT; // A2
|
||||
ADD_LAST; NEXT; // A3
|
||||
ADD_LAST; NEXT; // A4
|
||||
; NEXT; // A5
|
||||
; NEXT; // A6
|
||||
; NEXT; // A7
|
||||
; NEXT; // A8
|
||||
; NEXT; // A9
|
||||
; NEXT; // A10
|
||||
/* Use 2^384 = P + 2^128 + 2^96 - 2^32 + 1 to modulo reduce the final carry */
|
||||
ADD_LAST; NEXT; // A0
|
||||
SUB_LAST; NEXT; // A1
|
||||
; NEXT; // A2
|
||||
ADD_LAST; NEXT; // A3
|
||||
ADD_LAST; NEXT; // A4
|
||||
; NEXT; // A5
|
||||
; NEXT; // A6
|
||||
; NEXT; // A7
|
||||
; NEXT; // A8
|
||||
; NEXT; // A9
|
||||
; NEXT; // A10
|
||||
// A11
|
||||
}
|
||||
|
||||
LAST;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user