mirror of
https://github.com/pseXperiments/icicle.git
synced 2026-01-07 22:53:56 -05:00
refactor from_affine with C link
This commit is contained in:
@@ -20,6 +20,11 @@ extern "C" void CONCAT_EXPAND(CURVE, to_affine)(projective_t* point, affine_t* p
|
||||
*point_out = projective_t::to_affine(*point);
|
||||
}
|
||||
|
||||
extern "C" void CONCAT_EXPAND(CURVE, from_affine)(affine_t* point, projective_t* point_out)
|
||||
{
|
||||
*point_out = projective_t::from_affine(*point);
|
||||
}
|
||||
|
||||
extern "C" void CONCAT_EXPAND(CURVE, generate_projective_points)(projective_t* points, int size)
|
||||
{
|
||||
projective_t::rand_host_many(points, size);
|
||||
|
||||
@@ -20,6 +20,11 @@ extern "C" void CONCAT_EXPAND(CURVE, g2_to_affine)(g2_projective_t* point, g2_af
|
||||
*point_out = g2_projective_t::to_affine(*point);
|
||||
}
|
||||
|
||||
extern "C" void CONCAT_EXPAND(CURVE, g2_from_affine)(g2_affine_t* point, g2_projective_t* point_out)
|
||||
{
|
||||
*point_out = g2_projective_t::from_affine(*point);
|
||||
}
|
||||
|
||||
extern "C" void CONCAT_EXPAND(CURVE, g2_generate_projective_points)(g2_projective_t* points, int size)
|
||||
{
|
||||
g2_projective_t::rand_host_many(points, size);
|
||||
|
||||
@@ -28,21 +28,6 @@ func (p *MockProjective) FromLimbs(x, y, z []uint32) MockProjective {
|
||||
return *p
|
||||
}
|
||||
|
||||
func (p *MockProjective) FromAffine(a MockAffine) MockProjective {
|
||||
z := MockBaseField{}
|
||||
z.One()
|
||||
|
||||
if (a.X == z.Zero()) && (a.Y == z.Zero()) {
|
||||
p.Zero()
|
||||
} else {
|
||||
p.X = a.X
|
||||
p.Y = a.Y
|
||||
p.Z = z.One()
|
||||
}
|
||||
|
||||
return *p
|
||||
}
|
||||
|
||||
type MockAffine struct {
|
||||
X, Y MockBaseField
|
||||
}
|
||||
@@ -68,18 +53,3 @@ func (a *MockAffine) FromLimbs(x, y []uint32) MockAffine {
|
||||
|
||||
return *a
|
||||
}
|
||||
|
||||
func (a MockAffine) ToProjective() MockProjective {
|
||||
var z MockBaseField
|
||||
|
||||
if (a.X == z.Zero()) && (a.Y == z.Zero()) {
|
||||
var p MockProjective
|
||||
return p.Zero()
|
||||
}
|
||||
|
||||
return MockProjective{
|
||||
X: a.X,
|
||||
Y: a.Y,
|
||||
Z: z.One(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,17 +40,10 @@ func (p *Projective) FromLimbs(x, y, z []uint32) Projective {
|
||||
}
|
||||
|
||||
func (p *Projective) FromAffine(a Affine) Projective {
|
||||
z := BaseField{}
|
||||
z.One()
|
||||
|
||||
if (a.X == z.Zero()) && (a.Y == z.Zero()) {
|
||||
p.Zero()
|
||||
} else {
|
||||
p.X = a.X
|
||||
p.Y = a.Y
|
||||
p.Z = z.One()
|
||||
}
|
||||
|
||||
cA := (*C.affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.projective_t)(unsafe.Pointer(p))
|
||||
C.bls12_377_from_affine(cA, cP)
|
||||
return *p
|
||||
}
|
||||
|
||||
@@ -65,7 +58,7 @@ func (p *Projective) ProjectiveToAffine() Affine {
|
||||
var a Affine
|
||||
|
||||
cA := (*C.affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.projective_t)(unsafe.Pointer(&p))
|
||||
cP := (*C.projective_t)(unsafe.Pointer(p))
|
||||
C.bls12_377_to_affine(cP, cA)
|
||||
return a
|
||||
}
|
||||
@@ -111,18 +104,12 @@ func (a *Affine) FromLimbs(x, y []uint32) Affine {
|
||||
}
|
||||
|
||||
func (a Affine) ToProjective() Projective {
|
||||
var z BaseField
|
||||
var p Projective
|
||||
|
||||
if (a.X == z.Zero()) && (a.Y == z.Zero()) {
|
||||
var p Projective
|
||||
return p.Zero()
|
||||
}
|
||||
|
||||
return Projective{
|
||||
X: a.X,
|
||||
Y: a.Y,
|
||||
Z: z.One(),
|
||||
}
|
||||
cA := (*C.affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.projective_t)(unsafe.Pointer(&p))
|
||||
C.bls12_377_from_affine(cA, cP)
|
||||
return p
|
||||
}
|
||||
|
||||
func AffineFromProjective(p *Projective) Affine {
|
||||
|
||||
@@ -40,17 +40,10 @@ func (p *G2Projective) FromLimbs(x, y, z []uint32) G2Projective {
|
||||
}
|
||||
|
||||
func (p *G2Projective) FromAffine(a G2Affine) G2Projective {
|
||||
z := G2BaseField{}
|
||||
z.One()
|
||||
|
||||
if (a.X == z.Zero()) && (a.Y == z.Zero()) {
|
||||
p.Zero()
|
||||
} else {
|
||||
p.X = a.X
|
||||
p.Y = a.Y
|
||||
p.Z = z.One()
|
||||
}
|
||||
|
||||
cA := (*C.g2_affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.g2_projective_t)(unsafe.Pointer(p))
|
||||
C.bls12_377_g2_from_affine(cA, cP)
|
||||
return *p
|
||||
}
|
||||
|
||||
@@ -65,7 +58,7 @@ func (p *G2Projective) ProjectiveToAffine() G2Affine {
|
||||
var a G2Affine
|
||||
|
||||
cA := (*C.g2_affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.g2_projective_t)(unsafe.Pointer(&p))
|
||||
cP := (*C.g2_projective_t)(unsafe.Pointer(p))
|
||||
C.bls12_377_g2_to_affine(cP, cA)
|
||||
return a
|
||||
}
|
||||
@@ -111,18 +104,12 @@ func (a *G2Affine) FromLimbs(x, y []uint32) G2Affine {
|
||||
}
|
||||
|
||||
func (a G2Affine) ToProjective() G2Projective {
|
||||
var z G2BaseField
|
||||
var p G2Projective
|
||||
|
||||
if (a.X == z.Zero()) && (a.Y == z.Zero()) {
|
||||
var p G2Projective
|
||||
return p.Zero()
|
||||
}
|
||||
|
||||
return G2Projective{
|
||||
X: a.X,
|
||||
Y: a.Y,
|
||||
Z: z.One(),
|
||||
}
|
||||
cA := (*C.g2_affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.g2_projective_t)(unsafe.Pointer(&p))
|
||||
C.bls12_377_g2_from_affine(cA, cP)
|
||||
return p
|
||||
}
|
||||
|
||||
func G2AffineFromProjective(p *G2Projective) G2Affine {
|
||||
|
||||
@@ -14,6 +14,7 @@ typedef struct DeviceContext DeviceContext;
|
||||
|
||||
bool bls12_377_g2_eq(g2_projective_t* point1, g2_projective_t* point2);
|
||||
void bls12_377_g2_to_affine(g2_projective_t* point, g2_affine_t* point_out);
|
||||
void bls12_377_g2_from_affine(g2_affine_t* point, g2_projective_t* point_out);
|
||||
void bls12_377_g2_generate_projective_points(g2_projective_t* points, int size);
|
||||
void bls12_377_g2_generate_affine_points(g2_affine_t* points, int size);
|
||||
cudaError_t bls12_377_g2_affine_convert_montgomery(g2_affine_t* points, size_t n, bool is_into, DeviceContext* ctx);
|
||||
|
||||
@@ -14,6 +14,7 @@ typedef struct DeviceContext DeviceContext;
|
||||
|
||||
bool bls12_377_eq(projective_t* point1, projective_t* point2);
|
||||
void bls12_377_to_affine(projective_t* point, affine_t* point_out);
|
||||
void bls12_377_from_affine(affine_t* point, projective_t* point_out);
|
||||
void bls12_377_generate_projective_points(projective_t* points, int size);
|
||||
void bls12_377_generate_affine_points(affine_t* points, int size);
|
||||
cudaError_t bls12_377_affine_convert_montgomery(affine_t* points, size_t n, bool is_into, DeviceContext* ctx);
|
||||
|
||||
@@ -40,17 +40,10 @@ func (p *Projective) FromLimbs(x, y, z []uint32) Projective {
|
||||
}
|
||||
|
||||
func (p *Projective) FromAffine(a Affine) Projective {
|
||||
z := BaseField{}
|
||||
z.One()
|
||||
|
||||
if (a.X == z.Zero()) && (a.Y == z.Zero()) {
|
||||
p.Zero()
|
||||
} else {
|
||||
p.X = a.X
|
||||
p.Y = a.Y
|
||||
p.Z = z.One()
|
||||
}
|
||||
|
||||
cA := (*C.affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.projective_t)(unsafe.Pointer(p))
|
||||
C.bls12_381_from_affine(cA, cP)
|
||||
return *p
|
||||
}
|
||||
|
||||
@@ -65,7 +58,7 @@ func (p *Projective) ProjectiveToAffine() Affine {
|
||||
var a Affine
|
||||
|
||||
cA := (*C.affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.projective_t)(unsafe.Pointer(&p))
|
||||
cP := (*C.projective_t)(unsafe.Pointer(p))
|
||||
C.bls12_381_to_affine(cP, cA)
|
||||
return a
|
||||
}
|
||||
@@ -111,18 +104,12 @@ func (a *Affine) FromLimbs(x, y []uint32) Affine {
|
||||
}
|
||||
|
||||
func (a Affine) ToProjective() Projective {
|
||||
var z BaseField
|
||||
var p Projective
|
||||
|
||||
if (a.X == z.Zero()) && (a.Y == z.Zero()) {
|
||||
var p Projective
|
||||
return p.Zero()
|
||||
}
|
||||
|
||||
return Projective{
|
||||
X: a.X,
|
||||
Y: a.Y,
|
||||
Z: z.One(),
|
||||
}
|
||||
cA := (*C.affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.projective_t)(unsafe.Pointer(&p))
|
||||
C.bls12_381_from_affine(cA, cP)
|
||||
return p
|
||||
}
|
||||
|
||||
func AffineFromProjective(p *Projective) Affine {
|
||||
|
||||
@@ -40,17 +40,10 @@ func (p *G2Projective) FromLimbs(x, y, z []uint32) G2Projective {
|
||||
}
|
||||
|
||||
func (p *G2Projective) FromAffine(a G2Affine) G2Projective {
|
||||
z := G2BaseField{}
|
||||
z.One()
|
||||
|
||||
if (a.X == z.Zero()) && (a.Y == z.Zero()) {
|
||||
p.Zero()
|
||||
} else {
|
||||
p.X = a.X
|
||||
p.Y = a.Y
|
||||
p.Z = z.One()
|
||||
}
|
||||
|
||||
cA := (*C.g2_affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.g2_projective_t)(unsafe.Pointer(p))
|
||||
C.bls12_381_g2_from_affine(cA, cP)
|
||||
return *p
|
||||
}
|
||||
|
||||
@@ -65,7 +58,7 @@ func (p *G2Projective) ProjectiveToAffine() G2Affine {
|
||||
var a G2Affine
|
||||
|
||||
cA := (*C.g2_affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.g2_projective_t)(unsafe.Pointer(&p))
|
||||
cP := (*C.g2_projective_t)(unsafe.Pointer(p))
|
||||
C.bls12_381_g2_to_affine(cP, cA)
|
||||
return a
|
||||
}
|
||||
@@ -111,18 +104,12 @@ func (a *G2Affine) FromLimbs(x, y []uint32) G2Affine {
|
||||
}
|
||||
|
||||
func (a G2Affine) ToProjective() G2Projective {
|
||||
var z G2BaseField
|
||||
var p G2Projective
|
||||
|
||||
if (a.X == z.Zero()) && (a.Y == z.Zero()) {
|
||||
var p G2Projective
|
||||
return p.Zero()
|
||||
}
|
||||
|
||||
return G2Projective{
|
||||
X: a.X,
|
||||
Y: a.Y,
|
||||
Z: z.One(),
|
||||
}
|
||||
cA := (*C.g2_affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.g2_projective_t)(unsafe.Pointer(&p))
|
||||
C.bls12_381_g2_from_affine(cA, cP)
|
||||
return p
|
||||
}
|
||||
|
||||
func G2AffineFromProjective(p *G2Projective) G2Affine {
|
||||
|
||||
@@ -14,6 +14,7 @@ typedef struct DeviceContext DeviceContext;
|
||||
|
||||
bool bls12_381_g2_eq(g2_projective_t* point1, g2_projective_t* point2);
|
||||
void bls12_381_g2_to_affine(g2_projective_t* point, g2_affine_t* point_out);
|
||||
void bls12_381_g2_from_affine(g2_affine_t* point, g2_projective_t* point_out);
|
||||
void bls12_381_g2_generate_projective_points(g2_projective_t* points, int size);
|
||||
void bls12_381_g2_generate_affine_points(g2_affine_t* points, int size);
|
||||
cudaError_t bls12_381_g2_affine_convert_montgomery(g2_affine_t* points, size_t n, bool is_into, DeviceContext* ctx);
|
||||
|
||||
@@ -14,6 +14,7 @@ typedef struct DeviceContext DeviceContext;
|
||||
|
||||
bool bls12_381_eq(projective_t* point1, projective_t* point2);
|
||||
void bls12_381_to_affine(projective_t* point, affine_t* point_out);
|
||||
void bls12_381_from_affine(affine_t* point, projective_t* point_out);
|
||||
void bls12_381_generate_projective_points(projective_t* points, int size);
|
||||
void bls12_381_generate_affine_points(affine_t* points, int size);
|
||||
cudaError_t bls12_381_affine_convert_montgomery(affine_t* points, size_t n, bool is_into, DeviceContext* ctx);
|
||||
|
||||
@@ -40,17 +40,10 @@ func (p *Projective) FromLimbs(x, y, z []uint32) Projective {
|
||||
}
|
||||
|
||||
func (p *Projective) FromAffine(a Affine) Projective {
|
||||
z := BaseField{}
|
||||
z.One()
|
||||
|
||||
if (a.X == z.Zero()) && (a.Y == z.Zero()) {
|
||||
p.Zero()
|
||||
} else {
|
||||
p.X = a.X
|
||||
p.Y = a.Y
|
||||
p.Z = z.One()
|
||||
}
|
||||
|
||||
cA := (*C.affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.projective_t)(unsafe.Pointer(p))
|
||||
C.bn254_from_affine(cA, cP)
|
||||
return *p
|
||||
}
|
||||
|
||||
@@ -65,7 +58,7 @@ func (p *Projective) ProjectiveToAffine() Affine {
|
||||
var a Affine
|
||||
|
||||
cA := (*C.affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.projective_t)(unsafe.Pointer(&p))
|
||||
cP := (*C.projective_t)(unsafe.Pointer(p))
|
||||
C.bn254_to_affine(cP, cA)
|
||||
return a
|
||||
}
|
||||
@@ -111,18 +104,12 @@ func (a *Affine) FromLimbs(x, y []uint32) Affine {
|
||||
}
|
||||
|
||||
func (a Affine) ToProjective() Projective {
|
||||
var z BaseField
|
||||
var p Projective
|
||||
|
||||
if (a.X == z.Zero()) && (a.Y == z.Zero()) {
|
||||
var p Projective
|
||||
return p.Zero()
|
||||
}
|
||||
|
||||
return Projective{
|
||||
X: a.X,
|
||||
Y: a.Y,
|
||||
Z: z.One(),
|
||||
}
|
||||
cA := (*C.affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.projective_t)(unsafe.Pointer(&p))
|
||||
C.bn254_from_affine(cA, cP)
|
||||
return p
|
||||
}
|
||||
|
||||
func AffineFromProjective(p *Projective) Affine {
|
||||
|
||||
@@ -40,17 +40,10 @@ func (p *G2Projective) FromLimbs(x, y, z []uint32) G2Projective {
|
||||
}
|
||||
|
||||
func (p *G2Projective) FromAffine(a G2Affine) G2Projective {
|
||||
z := G2BaseField{}
|
||||
z.One()
|
||||
|
||||
if (a.X == z.Zero()) && (a.Y == z.Zero()) {
|
||||
p.Zero()
|
||||
} else {
|
||||
p.X = a.X
|
||||
p.Y = a.Y
|
||||
p.Z = z.One()
|
||||
}
|
||||
|
||||
cA := (*C.g2_affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.g2_projective_t)(unsafe.Pointer(p))
|
||||
C.bn254_g2_from_affine(cA, cP)
|
||||
return *p
|
||||
}
|
||||
|
||||
@@ -65,7 +58,7 @@ func (p *G2Projective) ProjectiveToAffine() G2Affine {
|
||||
var a G2Affine
|
||||
|
||||
cA := (*C.g2_affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.g2_projective_t)(unsafe.Pointer(&p))
|
||||
cP := (*C.g2_projective_t)(unsafe.Pointer(p))
|
||||
C.bn254_g2_to_affine(cP, cA)
|
||||
return a
|
||||
}
|
||||
@@ -111,18 +104,12 @@ func (a *G2Affine) FromLimbs(x, y []uint32) G2Affine {
|
||||
}
|
||||
|
||||
func (a G2Affine) ToProjective() G2Projective {
|
||||
var z G2BaseField
|
||||
var p G2Projective
|
||||
|
||||
if (a.X == z.Zero()) && (a.Y == z.Zero()) {
|
||||
var p G2Projective
|
||||
return p.Zero()
|
||||
}
|
||||
|
||||
return G2Projective{
|
||||
X: a.X,
|
||||
Y: a.Y,
|
||||
Z: z.One(),
|
||||
}
|
||||
cA := (*C.g2_affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.g2_projective_t)(unsafe.Pointer(&p))
|
||||
C.bn254_g2_from_affine(cA, cP)
|
||||
return p
|
||||
}
|
||||
|
||||
func G2AffineFromProjective(p *G2Projective) G2Affine {
|
||||
|
||||
@@ -14,6 +14,7 @@ typedef struct DeviceContext DeviceContext;
|
||||
|
||||
bool bn254_g2_eq(g2_projective_t* point1, g2_projective_t* point2);
|
||||
void bn254_g2_to_affine(g2_projective_t* point, g2_affine_t* point_out);
|
||||
void bn254_g2_from_affine(g2_affine_t* point, g2_projective_t* point_out);
|
||||
void bn254_g2_generate_projective_points(g2_projective_t* points, int size);
|
||||
void bn254_g2_generate_affine_points(g2_affine_t* points, int size);
|
||||
cudaError_t bn254_g2_affine_convert_montgomery(g2_affine_t* points, size_t n, bool is_into, DeviceContext* ctx);
|
||||
|
||||
@@ -14,6 +14,7 @@ typedef struct DeviceContext DeviceContext;
|
||||
|
||||
bool bn254_eq(projective_t* point1, projective_t* point2);
|
||||
void bn254_to_affine(projective_t* point, affine_t* point_out);
|
||||
void bn254_from_affine(affine_t* point, projective_t* point_out);
|
||||
void bn254_generate_projective_points(projective_t* points, int size);
|
||||
void bn254_generate_affine_points(affine_t* points, int size);
|
||||
cudaError_t bn254_affine_convert_montgomery(affine_t* points, size_t n, bool is_into, DeviceContext* ctx);
|
||||
|
||||
@@ -40,17 +40,10 @@ func (p *Projective) FromLimbs(x, y, z []uint32) Projective {
|
||||
}
|
||||
|
||||
func (p *Projective) FromAffine(a Affine) Projective {
|
||||
z := BaseField{}
|
||||
z.One()
|
||||
|
||||
if (a.X == z.Zero()) && (a.Y == z.Zero()) {
|
||||
p.Zero()
|
||||
} else {
|
||||
p.X = a.X
|
||||
p.Y = a.Y
|
||||
p.Z = z.One()
|
||||
}
|
||||
|
||||
cA := (*C.affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.projective_t)(unsafe.Pointer(p))
|
||||
C.bw6_761_from_affine(cA, cP)
|
||||
return *p
|
||||
}
|
||||
|
||||
@@ -65,7 +58,7 @@ func (p *Projective) ProjectiveToAffine() Affine {
|
||||
var a Affine
|
||||
|
||||
cA := (*C.affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.projective_t)(unsafe.Pointer(&p))
|
||||
cP := (*C.projective_t)(unsafe.Pointer(p))
|
||||
C.bw6_761_to_affine(cP, cA)
|
||||
return a
|
||||
}
|
||||
@@ -111,18 +104,12 @@ func (a *Affine) FromLimbs(x, y []uint32) Affine {
|
||||
}
|
||||
|
||||
func (a Affine) ToProjective() Projective {
|
||||
var z BaseField
|
||||
var p Projective
|
||||
|
||||
if (a.X == z.Zero()) && (a.Y == z.Zero()) {
|
||||
var p Projective
|
||||
return p.Zero()
|
||||
}
|
||||
|
||||
return Projective{
|
||||
X: a.X,
|
||||
Y: a.Y,
|
||||
Z: z.One(),
|
||||
}
|
||||
cA := (*C.affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.projective_t)(unsafe.Pointer(&p))
|
||||
C.bw6_761_from_affine(cA, cP)
|
||||
return p
|
||||
}
|
||||
|
||||
func AffineFromProjective(p *Projective) Affine {
|
||||
|
||||
@@ -40,17 +40,10 @@ func (p *G2Projective) FromLimbs(x, y, z []uint32) G2Projective {
|
||||
}
|
||||
|
||||
func (p *G2Projective) FromAffine(a G2Affine) G2Projective {
|
||||
z := G2BaseField{}
|
||||
z.One()
|
||||
|
||||
if (a.X == z.Zero()) && (a.Y == z.Zero()) {
|
||||
p.Zero()
|
||||
} else {
|
||||
p.X = a.X
|
||||
p.Y = a.Y
|
||||
p.Z = z.One()
|
||||
}
|
||||
|
||||
cA := (*C.g2_affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.g2_projective_t)(unsafe.Pointer(p))
|
||||
C.bw6_761_g2_from_affine(cA, cP)
|
||||
return *p
|
||||
}
|
||||
|
||||
@@ -65,7 +58,7 @@ func (p *G2Projective) ProjectiveToAffine() G2Affine {
|
||||
var a G2Affine
|
||||
|
||||
cA := (*C.g2_affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.g2_projective_t)(unsafe.Pointer(&p))
|
||||
cP := (*C.g2_projective_t)(unsafe.Pointer(p))
|
||||
C.bw6_761_g2_to_affine(cP, cA)
|
||||
return a
|
||||
}
|
||||
@@ -111,18 +104,12 @@ func (a *G2Affine) FromLimbs(x, y []uint32) G2Affine {
|
||||
}
|
||||
|
||||
func (a G2Affine) ToProjective() G2Projective {
|
||||
var z G2BaseField
|
||||
var p G2Projective
|
||||
|
||||
if (a.X == z.Zero()) && (a.Y == z.Zero()) {
|
||||
var p G2Projective
|
||||
return p.Zero()
|
||||
}
|
||||
|
||||
return G2Projective{
|
||||
X: a.X,
|
||||
Y: a.Y,
|
||||
Z: z.One(),
|
||||
}
|
||||
cA := (*C.g2_affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.g2_projective_t)(unsafe.Pointer(&p))
|
||||
C.bw6_761_g2_from_affine(cA, cP)
|
||||
return p
|
||||
}
|
||||
|
||||
func G2AffineFromProjective(p *G2Projective) G2Affine {
|
||||
|
||||
@@ -14,6 +14,7 @@ typedef struct DeviceContext DeviceContext;
|
||||
|
||||
bool bw6_761_g2_eq(g2_projective_t* point1, g2_projective_t* point2);
|
||||
void bw6_761_g2_to_affine(g2_projective_t* point, g2_affine_t* point_out);
|
||||
void bw6_761_g2_from_affine(g2_affine_t* point, g2_projective_t* point_out);
|
||||
void bw6_761_g2_generate_projective_points(g2_projective_t* points, int size);
|
||||
void bw6_761_g2_generate_affine_points(g2_affine_t* points, int size);
|
||||
cudaError_t bw6_761_g2_affine_convert_montgomery(g2_affine_t* points, size_t n, bool is_into, DeviceContext* ctx);
|
||||
|
||||
@@ -14,6 +14,7 @@ typedef struct DeviceContext DeviceContext;
|
||||
|
||||
bool bw6_761_eq(projective_t* point1, projective_t* point2);
|
||||
void bw6_761_to_affine(projective_t* point, affine_t* point_out);
|
||||
void bw6_761_from_affine(affine_t* point, projective_t* point_out);
|
||||
void bw6_761_generate_projective_points(projective_t* points, int size);
|
||||
void bw6_761_generate_affine_points(affine_t* points, int size);
|
||||
cudaError_t bw6_761_affine_convert_montgomery(affine_t* points, size_t n, bool is_into, DeviceContext* ctx);
|
||||
|
||||
@@ -40,17 +40,10 @@ func (p *Projective) FromLimbs(x, y, z []uint32) Projective {
|
||||
}
|
||||
|
||||
func (p *Projective) FromAffine(a Affine) Projective {
|
||||
z := BaseField{}
|
||||
z.One()
|
||||
|
||||
if (a.X == z.Zero()) && (a.Y == z.Zero()) {
|
||||
p.Zero()
|
||||
} else {
|
||||
p.X = a.X
|
||||
p.Y = a.Y
|
||||
p.Z = z.One()
|
||||
}
|
||||
|
||||
cA := (*C.affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.projective_t)(unsafe.Pointer(p))
|
||||
C.grumpkin_from_affine(cA, cP)
|
||||
return *p
|
||||
}
|
||||
|
||||
@@ -65,7 +58,7 @@ func (p *Projective) ProjectiveToAffine() Affine {
|
||||
var a Affine
|
||||
|
||||
cA := (*C.affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.projective_t)(unsafe.Pointer(&p))
|
||||
cP := (*C.projective_t)(unsafe.Pointer(p))
|
||||
C.grumpkin_to_affine(cP, cA)
|
||||
return a
|
||||
}
|
||||
@@ -111,18 +104,12 @@ func (a *Affine) FromLimbs(x, y []uint32) Affine {
|
||||
}
|
||||
|
||||
func (a Affine) ToProjective() Projective {
|
||||
var z BaseField
|
||||
var p Projective
|
||||
|
||||
if (a.X == z.Zero()) && (a.Y == z.Zero()) {
|
||||
var p Projective
|
||||
return p.Zero()
|
||||
}
|
||||
|
||||
return Projective{
|
||||
X: a.X,
|
||||
Y: a.Y,
|
||||
Z: z.One(),
|
||||
}
|
||||
cA := (*C.affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.projective_t)(unsafe.Pointer(&p))
|
||||
C.grumpkin_from_affine(cA, cP)
|
||||
return p
|
||||
}
|
||||
|
||||
func AffineFromProjective(p *Projective) Affine {
|
||||
|
||||
@@ -14,6 +14,7 @@ typedef struct DeviceContext DeviceContext;
|
||||
|
||||
bool grumpkin_eq(projective_t* point1, projective_t* point2);
|
||||
void grumpkin_to_affine(projective_t* point, affine_t* point_out);
|
||||
void grumpkin_from_affine(affine_t* point, projective_t* point_out);
|
||||
void grumpkin_generate_projective_points(projective_t* points, int size);
|
||||
void grumpkin_generate_affine_points(affine_t* points, int size);
|
||||
cudaError_t grumpkin_affine_convert_montgomery(affine_t* points, size_t n, bool is_into, DeviceContext* ctx);
|
||||
|
||||
@@ -39,21 +39,16 @@ func (p *{{.CurvePrefix}}Projective) FromLimbs(x, y, z []uint32) {{.CurvePrefix}
|
||||
return *p
|
||||
}
|
||||
|
||||
|
||||
{{if ne .CurvePrefix "Mock"}}
|
||||
func (p *{{.CurvePrefix}}Projective) FromAffine(a {{.CurvePrefix}}Affine) {{.CurvePrefix}}Projective {
|
||||
z := {{.CurvePrefix}}BaseField{}
|
||||
z.One()
|
||||
|
||||
if (a.X == z.Zero()) && (a.Y == z.Zero()) {
|
||||
p.Zero()
|
||||
}else{
|
||||
p.X = a.X
|
||||
p.Y = a.Y
|
||||
p.Z = z.One()
|
||||
}
|
||||
|
||||
|
||||
cA := (*C.{{toCName .CurvePrefix}}affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.{{toCName .CurvePrefix}}projective_t)(unsafe.Pointer(p))
|
||||
C.{{.Curve}}{{toCNameBackwards .CurvePrefix}}_from_affine(cA, cP)
|
||||
return *p
|
||||
}
|
||||
{{if ne .CurvePrefix "Mock"}}
|
||||
|
||||
func (p {{.CurvePrefix}}Projective) ProjectiveEq(p2 *{{.CurvePrefix}}Projective) bool {
|
||||
cP := (*C.{{toCName .CurvePrefix}}projective_t)(unsafe.Pointer(&p))
|
||||
cP2 := (*C.{{toCName .CurvePrefix}}projective_t)(unsafe.Pointer(&p2))
|
||||
@@ -65,7 +60,7 @@ func (p *{{.CurvePrefix}}Projective) ProjectiveToAffine() {{.CurvePrefix}}Affine
|
||||
var a {{.CurvePrefix}}Affine
|
||||
|
||||
cA := (*C.{{toCName .CurvePrefix}}affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.{{toCName .CurvePrefix}}projective_t)(unsafe.Pointer(&p))
|
||||
cP := (*C.{{toCName .CurvePrefix}}projective_t)(unsafe.Pointer(p))
|
||||
C.{{.Curve}}{{toCNameBackwards .CurvePrefix}}_to_affine(cP, cA)
|
||||
return a
|
||||
}
|
||||
@@ -110,21 +105,17 @@ func (a *{{.CurvePrefix}}Affine) FromLimbs(x, y []uint32) {{.CurvePrefix}}Affine
|
||||
return *a
|
||||
}
|
||||
|
||||
func (a {{.CurvePrefix}}Affine) ToProjective() {{.CurvePrefix}}Projective {
|
||||
var z {{.CurvePrefix}}BaseField
|
||||
|
||||
if (a.X == z.Zero()) && (a.Y == z.Zero()) {
|
||||
var p {{.CurvePrefix}}Projective
|
||||
return p.Zero()
|
||||
}
|
||||
|
||||
return {{.CurvePrefix}}Projective{
|
||||
X: a.X,
|
||||
Y: a.Y,
|
||||
Z: z.One(),
|
||||
}
|
||||
}
|
||||
{{if ne .CurvePrefix "Mock"}}
|
||||
func (a {{.CurvePrefix}}Affine) ToProjective() {{.CurvePrefix}}Projective {
|
||||
var p {{.CurvePrefix}}Projective
|
||||
|
||||
cA := (*C.{{toCName .CurvePrefix}}affine_t)(unsafe.Pointer(&a))
|
||||
cP := (*C.{{toCName .CurvePrefix}}projective_t)(unsafe.Pointer(&p))
|
||||
C.{{.Curve}}{{toCNameBackwards .CurvePrefix}}_from_affine(cA, cP)
|
||||
return p
|
||||
}
|
||||
|
||||
func {{.CurvePrefix}}AffineFromProjective(p *{{.CurvePrefix}}Projective) {{.CurvePrefix}}Affine {
|
||||
return p.ProjectiveToAffine()
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ typedef struct DeviceContext DeviceContext;
|
||||
|
||||
bool {{.Curve}}{{toCNameBackwards .CurvePrefix}}_eq({{toCName .CurvePrefix}}projective_t* point1, {{toCName .CurvePrefix}}projective_t* point2);
|
||||
void {{.Curve}}{{toCNameBackwards .CurvePrefix}}_to_affine({{toCName .CurvePrefix}}projective_t* point, {{toCName .CurvePrefix}}affine_t* point_out);
|
||||
void {{.Curve}}{{toCNameBackwards .CurvePrefix}}_from_affine({{toCName .CurvePrefix}}affine_t* point, {{toCName .CurvePrefix}}projective_t* point_out);
|
||||
void {{.Curve}}{{toCNameBackwards .CurvePrefix}}_generate_projective_points({{toCName .CurvePrefix}}projective_t* points, int size);
|
||||
void {{.Curve}}{{toCNameBackwards .CurvePrefix}}_generate_affine_points({{toCName .CurvePrefix}}affine_t* points, int size);
|
||||
cudaError_t {{.Curve}}{{toCNameBackwards .CurvePrefix}}_affine_convert_montgomery({{toCName .CurvePrefix}}affine_t* points, size_t n, bool is_into, DeviceContext* ctx);
|
||||
|
||||
@@ -22,6 +22,8 @@ pub trait Curve: Debug + PartialEq + Copy + Clone {
|
||||
#[doc(hidden)]
|
||||
fn to_affine(point: *const Projective<Self>, point_aff: *mut Affine<Self>);
|
||||
#[doc(hidden)]
|
||||
fn from_affine(point: *const Affine<Self>, point_proj: *mut Projective<Self>);
|
||||
#[doc(hidden)]
|
||||
fn generate_random_projective_points(size: usize) -> Vec<Projective<Self>>;
|
||||
#[doc(hidden)]
|
||||
fn generate_random_affine_points(size: usize) -> Vec<Affine<Self>>;
|
||||
@@ -79,27 +81,17 @@ impl<C: Curve> Affine<C> {
|
||||
}
|
||||
|
||||
pub fn to_projective(&self) -> Projective<C> {
|
||||
if *self == Self::zero() {
|
||||
return Projective::<C>::zero();
|
||||
}
|
||||
Projective {
|
||||
x: self.x,
|
||||
y: self.y,
|
||||
z: C::BaseField::one(),
|
||||
}
|
||||
let mut proj = Projective::<C>::zero();
|
||||
C::from_affine(self as *const Self, &mut proj as *mut Projective<C>);
|
||||
proj
|
||||
}
|
||||
}
|
||||
|
||||
impl<C: Curve> From<Affine<C>> for Projective<C> {
|
||||
fn from(item: Affine<C>) -> Self {
|
||||
if item == (Affine::<C>::zero()) {
|
||||
return Self::zero();
|
||||
}
|
||||
Self {
|
||||
x: item.x,
|
||||
y: item.y,
|
||||
z: C::BaseField::one(),
|
||||
}
|
||||
let mut proj = Self::zero();
|
||||
C::from_affine(&item as *const Affine<C>, &mut proj as *mut Self);
|
||||
proj
|
||||
}
|
||||
}
|
||||
|
||||
@@ -282,6 +274,8 @@ macro_rules! impl_curve {
|
||||
pub(crate) fn eq(point1: *const $projective_type, point2: *const $projective_type) -> bool;
|
||||
#[link_name = concat!($curve_prefix, "_to_affine")]
|
||||
pub(crate) fn proj_to_affine(point: *const $projective_type, point_out: *mut $affine_type);
|
||||
#[link_name = concat!($curve_prefix, "_from_affine")]
|
||||
pub(crate) fn proj_from_affine(point: *const $affine_type, point_out: *mut $projective_type);
|
||||
#[link_name = concat!($curve_prefix, "_generate_projective_points")]
|
||||
pub(crate) fn generate_projective_points(points: *mut $projective_type, size: usize);
|
||||
#[link_name = concat!($curve_prefix, "_generate_affine_points")]
|
||||
@@ -315,6 +309,10 @@ macro_rules! impl_curve {
|
||||
unsafe { $curve_prefix_ident::proj_to_affine(point, point_out) };
|
||||
}
|
||||
|
||||
fn from_affine(point: *const $affine_type, point_out: *mut $projective_type) {
|
||||
unsafe { $curve_prefix_ident::proj_from_affine(point, point_out) };
|
||||
}
|
||||
|
||||
fn generate_random_projective_points(size: usize) -> Vec<$projective_type> {
|
||||
let mut res = vec![$projective_type::zero(); size];
|
||||
unsafe {
|
||||
|
||||
Reference in New Issue
Block a user