1 C nettle, low-level cryptographics library
3 C Copyright (C) 2013 Niels Möller
5 C The nettle library is free software; you can redistribute it and/or modify
6 C it under the terms of the GNU Lesser General Public License as published by
7 C the Free Software Foundation; either version 2.1 of the License, or (at your
8 C option) any later version.
10 C The nettle library is distributed in the hope that it will be useful, but
11 C WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12 C or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
13 C License for more details.
15 C You should have received a copy of the GNU Lesser General Public License
16 C along with the nettle library; see the file COPYING.LIB. If not, write to
17 C the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20 .file "ecc-256-redc.asm"
23 define(<U0>, <%rdi>) C Overlaps unused ecc input
35 C FOLD(x), sets (F3,F2,F1,F0) <-- (x << 224) - (x << 128) - (x<<32)
48 PROLOGUE(nettle_ecc_256_redc)
50 C save all registers that need to be saved
63 sbb F3, U0 C Add in later
91 C If carry, we need to add in
92 C 2^256 - p = <0xfffffffe, 0xff..ff, 0xffffffff00000000, 1>
96 mov XREG(F2), XREG(F3)
116 EPILOGUE(nettle_ecc_256_redc)