@@ -3372,6 +3372,29 @@ WC_OMIT_FRAME_POINTER int curve25519(byte* r, const byte* n, const byte* a)
33723372 "LDR r1, [sp, #160]\n\t"
33733373 "LDR r0, [sp, #160]\n\t"
33743374 "BL fe_mul_op\n\t"
3375+ /* Ensure result is less than modulus */
3376+ "LDR %[r], [sp, #160]\n\t"
3377+ "LDM %[r], {r4, r5, r6, r7, r8, r9, r10, r11}\n\t"
3378+ "ADDS %[a], r4, #0x13\n\t"
3379+ "ADCS %[a], r5, #0x0\n\t"
3380+ "ADCS %[a], r6, #0x0\n\t"
3381+ "ADCS %[a], r7, #0x0\n\t"
3382+ "ADCS %[a], r8, #0x0\n\t"
3383+ "ADCS %[a], r9, #0x0\n\t"
3384+ "ADCS %[a], r10, #0x0\n\t"
3385+ "ADC %[a], r11, #0x0\n\t"
3386+ "ASR %[a], %[a], #31\n\t"
3387+ "AND %[a], %[a], #0x13\n\t"
3388+ "ADDS r4, r4, %[a]\n\t"
3389+ "ADCS r5, r5, #0x0\n\t"
3390+ "ADCS r6, r6, #0x0\n\t"
3391+ "ADCS r7, r7, #0x0\n\t"
3392+ "ADCS r8, r8, #0x0\n\t"
3393+ "ADCS r9, r9, #0x0\n\t"
3394+ "ADCS r10, r10, #0x0\n\t"
3395+ "ADC r11, r11, #0x0\n\t"
3396+ "BFC r11, #31, #1\n\t"
3397+ "STM %[r], {r4, r5, r6, r7, r8, r9, r10, r11}\n\t"
33753398 "MOV r0, #0x0\n\t"
33763399 "ADD sp, sp, #0xbc\n\t"
33773400#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
@@ -3773,17 +3796,25 @@ WC_OMIT_FRAME_POINTER int curve25519(byte* r, const byte* n, const byte* a)
37733796 /* Ensure result is less than modulus */
37743797 "LDR %[r], [sp, #176]\n\t"
37753798 "LDM %[r], {r4, r5, r6, r7, r8, r9, r10, r11}\n\t"
3776- "MOV %[a], #0x13\n\t"
3777- "AND %[a], %[a], r11, ASR #31\n\t"
3799+ "ADDS %[a], r4, #0x13\n\t"
3800+ "ADCS %[a], r5, #0x0\n\t"
3801+ "ADCS %[a], r6, #0x0\n\t"
3802+ "ADCS %[a], r7, #0x0\n\t"
3803+ "ADCS %[a], r8, #0x0\n\t"
3804+ "ADCS %[a], r9, #0x0\n\t"
3805+ "ADCS %[a], r10, #0x0\n\t"
3806+ "ADC %[a], r11, #0x0\n\t"
3807+ "ASR %[a], %[a], #31\n\t"
3808+ "AND %[a], %[a], #0x13\n\t"
37783809 "ADDS r4, r4, %[a]\n\t"
37793810 "ADCS r5, r5, #0x0\n\t"
37803811 "ADCS r6, r6, #0x0\n\t"
37813812 "ADCS r7, r7, #0x0\n\t"
37823813 "ADCS r8, r8, #0x0\n\t"
37833814 "ADCS r9, r9, #0x0\n\t"
3784- "BFC r11, #31, #1\n\t"
37853815 "ADCS r10, r10, #0x0\n\t"
37863816 "ADC r11, r11, #0x0\n\t"
3817+ "BFC r11, #31, #1\n\t"
37873818 "STM %[r], {r4, r5, r6, r7, r8, r9, r10, r11}\n\t"
37883819 "MOV r0, #0x0\n\t"
37893820 "ADD sp, sp, #0xc0\n\t"
0 commit comments