X-Git-Url: https://bearssl.org/gitweb//home/git/?p=BearSSL;a=blobdiff_plain;f=src%2Fint%2Fi15_bitlen.c;fp=src%2Fec%2Fec_prime_i31_secp384r1.c;h=ad74467182a1d668785333ff5f522490298c376b;hp=9f92b4f92ad21271ad3f2c0ad78f7cc98d6f5f8d;hb=2f454aad577ae53798935cc32438a2d3f02ba31f;hpb=bd3036844bd20b2b8d7bce7fee5ad010ce401915 diff --git a/src/ec/ec_prime_i31_secp384r1.c b/src/int/i15_bitlen.c similarity index 66% rename from src/ec/ec_prime_i31_secp384r1.c rename to src/int/i15_bitlen.c index 9f92b4f..ad74467 100644 --- a/src/ec/ec_prime_i31_secp384r1.c +++ b/src/int/i15_bitlen.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,25 +24,21 @@ #include "inner.h" -static const uint32_t P384_P[] = { - 0x0000018C, - 0x7FFFFFFF, 0x00000001, 0x00000000, 0x7FFFFFF8, - 0x7FFFFFEF, 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF, - 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF, - 0x00000FFF -}; +/* see inner.h */ +uint32_t +br_i15_bit_length(uint16_t *x, size_t xlen) +{ + uint32_t tw, twk; -static const uint32_t P384_B[] = { - 0x0000018C, - 0x6E666840, 0x070D0392, 0x5D810231, 0x7651D50C, - 0x17E218D6, 0x1B192002, 0x44EFE441, 0x3A524E2B, - 0x2719BA5F, 0x41F02209, 0x36C5643E, 0x5813EFFE, - 0x000008A5 -}; + tw = 0; + twk = 0; + while (xlen -- > 0) { + uint32_t w, c; -/* see inner.h */ -const br_ec_prime_i31_curve br_ec_prime_i31_secp384r1 = { - P384_P, - P384_B, - 0x00000001 -}; + c = EQ(tw, 0); + w = x[xlen]; + tw = MUX(c, w, tw); + twk = MUX(c, (uint32_t)xlen, twk); + } + return (twk << 4) + BIT_LENGTH(tw); +}