static const uint8_t exp[P] = {
0x01, 0x03, 0x05, 0x0f, 0x11, 0x33, 0x55, 0xff, 0x1a, 0x2e, 0x72, 0x96, 0xa1, 0xf8, 0x13, 0x35,
0x5f, 0xe1, 0x38, 0x48, 0xd8, 0x73, 0x95, 0xa4, 0xf7, 0x02, 0x06, 0x0a, 0x1e, 0x22, 0x66, 0xaa,
static const uint8_t exp[P] = {
0x01, 0x03, 0x05, 0x0f, 0x11, 0x33, 0x55, 0xff, 0x1a, 0x2e, 0x72, 0x96, 0xa1, 0xf8, 0x13, 0x35,
0x5f, 0xe1, 0x38, 0x48, 0xd8, 0x73, 0x95, 0xa4, 0xf7, 0x02, 0x06, 0x0a, 0x1e, 0x22, 0x66, 0xaa,
#ifndef TEST
// Although this function works for a==0, its not trivially obvious why,
// and since we never call with a==0, we just assert a != 0 (except when testing)
#ifndef TEST
// Although this function works for a==0, its not trivially obvious why,
// and since we never call with a==0, we just assert a != 0 (except when testing)
// Test multiplication with the logarithm tables
for (uint16_t i = 0; i < P; i++) {
for (uint16_t j = 0; j < P; j++)
// Test multiplication with the logarithm tables
for (uint16_t i = 0; i < P; i++) {
for (uint16_t j = 0; j < P; j++)
}
// Test exponentiation with the logarithm tables
for (uint16_t i = 0; i < P; i++) {
for (uint16_t j = 0; j < P; j++)
}
// Test exponentiation with the logarithm tables
for (uint16_t i = 0; i < P; i++) {
for (uint16_t j = 0; j < P; j++)
* coefficients[0] == secret, the rest are random values
*/
uint8_t calculateQ(uint8_t coefficients[], uint8_t shares_required, uint8_t x) {
* coefficients[0] == secret, the rest are random values
*/
uint8_t calculateQ(uint8_t coefficients[], uint8_t shares_required, uint8_t x) {
uint8_t ret = coefficients[0];
for (uint8_t i = 1; i < shares_required; i++) {
ret = field_add(ret, field_mul(coefficients[i], field_pow(x, i)));
uint8_t ret = coefficients[0];
for (uint8_t i = 1; i < shares_required; i++) {
ret = field_add(ret, field_mul(coefficients[i], field_pow(x, i)));