Add fr_negate() method

This commit is contained in:
Ben Edgington 2021-02-04 14:14:25 +00:00
parent ab0b618cac
commit a59ccc7ff7
3 changed files with 19 additions and 5 deletions

View File

@ -17,9 +17,9 @@
#include "blst_util.h" #include "blst_util.h"
#include "debug_util.h" #include "debug_util.h"
bool fr_is_one(const blst_fr *fr_p) { bool fr_is_one(const blst_fr *p) {
uint64_t a[4]; uint64_t a[4];
blst_uint64_from_fr(a, fr_p); blst_uint64_from_fr(a, p);
return a[0] == 1 && a[1] == 0 && a[2] == 0 && a[3] == 0; return a[0] == 1 && a[1] == 0 && a[2] == 0 && a[3] == 0;
} }
@ -35,6 +35,10 @@ bool fr_equal(const blst_fr *aa, const blst_fr *bb) {
return a[0] == b[0] && a[1] == b[1] && a[2] == b[2] && a[3] == b[3]; return a[0] == b[0] && a[1] == b[1] && a[2] == b[2] && a[3] == b[3];
} }
void fr_negate(blst_fr *out, const blst_fr *in) {
blst_fr_cneg(out, in, true);
}
// TODO: Is there really no better way to do this? // TODO: Is there really no better way to do this?
void p1_mul(blst_p1 *out, const blst_p1 *a, const blst_fr *b) { void p1_mul(blst_p1 *out, const blst_p1 *a, const blst_fr *b) {
blst_scalar s; blst_scalar s;

View File

@ -23,9 +23,10 @@ static const blst_fr one =
// The G1 identity/infinity in affine representation // The G1 identity/infinity in affine representation
static const blst_p1_affine identity_g1_affine = {{0,0,0,0,0,0},{0,0,0,0,0,0}}; static const blst_p1_affine identity_g1_affine = {{0,0,0,0,0,0},{0,0,0,0,0,0}};
bool fr_is_one(const blst_fr *fr_p); bool fr_is_one(const blst_fr *p);
void fr_from_uint64(blst_fr *a, const uint64_t n); void fr_from_uint64(blst_fr *a, const uint64_t n);
bool fr_equal(const blst_fr *aa, const blst_fr *bb); bool fr_equal(const blst_fr *aa, const blst_fr *bb);
void fr_negate(blst_fr *out, const blst_fr *in);
void p1_mul(blst_p1 *out, const blst_p1 *a, const blst_fr *b); void p1_mul(blst_p1 *out, const blst_p1 *a, const blst_fr *b);
void p1_sub(blst_p1 *out, const blst_p1 *a, const blst_p1 *b); void p1_sub(blst_p1 *out, const blst_p1 *a, const blst_p1 *b);
void linear_combination_g1(blst_p1 *out, const blst_p1 *p, const blst_fr *coeffs, const uint64_t len); void linear_combination_g1(blst_p1 *out, const blst_p1 *p, const blst_fr *coeffs, const uint64_t len);

View File

@ -18,6 +18,9 @@
#include "debug_util.h" #include "debug_util.h"
#include "blst_util.h" #include "blst_util.h"
// This is -1 (the second root of unity)
uint64_t m1[] = {0xffffffff00000000L, 0x53bda402fffe5bfeL, 0x3339d80809a1d805L, 0x73eda753299d7d48L};
void fr_is_one_works(void) { void fr_is_one_works(void) {
TEST_CHECK(true == fr_is_one(&one)); TEST_CHECK(true == fr_is_one(&one));
} }
@ -39,9 +42,14 @@ void fr_equal_works(void) {
TEST_CHECK(false == fr_equal(&a, &b)); TEST_CHECK(false == fr_equal(&a, &b));
} }
void fr_negate_works(void) {
blst_fr minus1, res;
blst_fr_from_uint64(&minus1, m1);
fr_negate(&res, &minus1);
TEST_CHECK(fr_is_one(&res));
}
void p1_mul_works(void) { void p1_mul_works(void) {
// This is -1 (the second root of unity)
uint64_t m1[] = {0xffffffff00000000L, 0x53bda402fffe5bfeL, 0x3339d80809a1d805L, 0x73eda753299d7d48L};
blst_fr minus1; blst_fr minus1;
blst_p1 g1_gen, g1_gen_neg, res; blst_p1 g1_gen, g1_gen_neg, res;
@ -100,6 +108,7 @@ TEST_LIST =
{"fr_is_one_works", fr_is_one_works }, {"fr_is_one_works", fr_is_one_works },
{"fr_from_uint64_works", fr_from_uint64_works}, {"fr_from_uint64_works", fr_from_uint64_works},
{"fr_equal_works", fr_equal_works}, {"fr_equal_works", fr_equal_works},
{"fr_negate_works", fr_negate_works},
{"p1_mul_works", p1_mul_works}, {"p1_mul_works", p1_mul_works},
{"p1_sub_works", p1_sub_works}, {"p1_sub_works", p1_sub_works},
{"identity_g1_is_infinity", identity_g1_is_infinity}, {"identity_g1_is_infinity", identity_g1_is_infinity},