X-Git-Url: https://www.bearssl.org/gitweb//home/git/?p=BearSSL;a=blobdiff_plain;f=src%2Fint%2Fi15_add.c;fp=src%2Fec%2Fec_prime_i31_secp256r1.c;h=97e29b825f54331aba0d0ca786b8f187d0c9287c;hp=007b6b26bfc8067fd5066477475ea9c6c4f8a3b1;hb=2f454aad577ae53798935cc32438a2d3f02ba31f;hpb=bd3036844bd20b2b8d7bce7fee5ad010ce401915 diff --git a/src/ec/ec_prime_i31_secp256r1.c b/src/int/i15_add.c similarity index 70% rename from src/ec/ec_prime_i31_secp256r1.c rename to src/int/i15_add.c index 007b6b2..97e29b8 100644 --- a/src/ec/ec_prime_i31_secp256r1.c +++ b/src/int/i15_add.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Thomas Pornin + * Copyright (c) 2017 Thomas Pornin * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the @@ -24,23 +24,23 @@ #include "inner.h" -static const uint32_t P256_P[] = { - 0x00000108, - 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF, 0x00000007, - 0x00000000, 0x00000000, 0x00000040, 0x7FFFFF80, - 0x000000FF -}; +/* see inner.h */ +uint32_t +br_i15_add(uint16_t *a, const uint16_t *b, uint32_t ctl) +{ + uint32_t cc; + size_t u, m; -static const uint32_t P256_B[] = { - 0x00000108, - 0x6FEE1803, 0x6229C4BD, 0x21B139BE, 0x327150AA, - 0x3567802E, 0x3F7212ED, 0x012E4355, 0x782DD38D, - 0x0000000E -}; + cc = 0; + m = (a[0] + 31) >> 4; + for (u = 1; u < m; u ++) { + uint32_t aw, bw, naw; -/* see inner.h */ -const br_ec_prime_i31_curve br_ec_prime_i31_secp256r1 = { - P256_P, - P256_B, - 0x00000001 -}; + aw = a[u]; + bw = b[u]; + naw = aw + bw + cc; + cc = naw >> 15; + a[u] = MUX(ctl, naw & 0x7FFF, aw); + } + return cc; +}