X-Git-Url: http://git.bitcoin.ninja/index.cgi?p=shamirs;a=blobdiff_plain;f=shamirssecret.c;h=f440f49f21d7d2d9d7413f048b8cc546b38c0536;hp=9293f79eafea0282b28d43fbae7f8bcf4a2f75a1;hb=29918d3171bc7ca0f038da5385105adb9a3aaf00;hpb=7a6c59f40b44c243cecc3389db388c50e4979e07 diff --git a/shamirssecret.c b/shamirssecret.c index 9293f79..f440f49 100644 --- a/shamirssecret.c +++ b/shamirssecret.c @@ -1,15 +1,36 @@ -#include +/* + * Shamir's secret sharing sharing implementation + * + * Copyright (C) 2013 Matt Corallo + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + */ #ifndef IN_KERNEL #include #define CHECKSTATE(x) assert(x) #else #include -#define CHECKSTATE(x) BUG_ON(x) +#define CHECKSTATE(x) BUG_ON(!(x)) #endif #include "shamirssecret.h" +#ifndef noinline +#define noinline __attribute__((noinline)) +#endif + /* * Calculations across the finite field GF(2^8) */ @@ -68,7 +89,7 @@ static const uint8_t log[P] = { 0x4a, 0xed, 0xde, 0xc5, 0x31, 0xfe, 0x18, 0x0d, 0x63, 0x8c, 0x80, 0xc0, 0xf7, 0x70, 0x07}; // We disable lots of optimizations that result in non-constant runtime (+/- branch delays) -static uint8_t field_mul_ret(uint8_t calc, uint8_t a, uint8_t b) __attribute__((optimize("-O0"))) __attribute__((noinline)); +static uint8_t field_mul_ret(uint8_t calc, uint8_t a, uint8_t b) __attribute__((optimize("-O0"))) noinline; static uint8_t field_mul_ret(uint8_t calc, uint8_t a, uint8_t b) { uint8_t ret, ret2; if (a == 0) @@ -91,7 +112,7 @@ static uint8_t field_invert(uint8_t a) { } // We disable lots of optimizations that result in non-constant runtime (+/- branch delays) -static uint8_t field_pow_ret(uint8_t calc, uint8_t a, uint8_t e) __attribute__((optimize("-O0"))) __attribute__((noinline)); +static uint8_t field_pow_ret(uint8_t calc, uint8_t a, uint8_t e) __attribute__((optimize("-O0"))) noinline; static uint8_t field_pow_ret(uint8_t calc, uint8_t a, uint8_t e) { uint8_t ret, ret2; if (a == 0)