mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-09 17:23:08 +00:00
Secp256K1 curve (in progress)
This commit is contained in:
parent
869a5860f4
commit
50db118718
@ -2,4 +2,4 @@ pub mod curve_adds;
|
||||
pub mod curve_multiplication;
|
||||
pub mod curve_summation;
|
||||
pub mod curve_types;
|
||||
//pub mod secp256k1_curve;
|
||||
pub mod secp256k1_curve;
|
||||
@ -9,39 +9,45 @@ use crate::field::secp256k1_scalar::Secp256K1Scalar;
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
pub struct Secp256K1;
|
||||
|
||||
impl Curve for Bls12377 {
|
||||
type BaseField = Bls12377Base;
|
||||
type ScalarField = Bls12377Scalar;
|
||||
impl Curve for Secp256K1 {
|
||||
type BaseField = Secp256K1Base;
|
||||
type ScalarField = Secp256K1Scalar;
|
||||
|
||||
const A: Bls12377Base = Bls12377Base::ZERO;
|
||||
const B: Bls12377Base = Bls12377Base::ONE;
|
||||
const A: Secp256K1Base = Secp256K1Base::ZERO;
|
||||
const B: Secp256K1Base = Secp256K1Base::ONE;
|
||||
const GENERATOR_AFFINE: AffinePoint<Self> = AffinePoint {
|
||||
x: BLS12_377_GENERATOR_X,
|
||||
y: BLS12_377_GENERATOR_Y,
|
||||
x: SECP256K1_GENERATOR_X,
|
||||
y: SECP256K1_GENERATOR_Y,
|
||||
zero: false,
|
||||
};
|
||||
}
|
||||
|
||||
/// 81937999373150964239938255573465948239988671502647976594219695644855304257327692006745978603320413799295628339695
|
||||
const BLS12_377_GENERATOR_X: Bls12377Base = Bls12377Base {
|
||||
limbs: [2742467569752756724, 14217256487979144792, 6635299530028159197, 8509097278468658840,
|
||||
14518893593143693938, 46181716169194829]
|
||||
};
|
||||
const SECP256K1_GENERATOR_X: Secp256K1Base = Secp256K1Base([
|
||||
0x59F2815B16F81798,
|
||||
0x029BFCDB2DCE28D9,
|
||||
0x55A06295CE870B07,
|
||||
0x79BE667EF9DCBBAC,
|
||||
]);
|
||||
|
||||
/// 241266749859715473739788878240585681733927191168601896383759122102112907357779751001206799952863815012735208165030
|
||||
const BLS12_377_GENERATOR_Y: Bls12377Base = Bls12377Base {
|
||||
limbs: [9336971515457667571, 28021381849722296, 18085035374859187530, 14013031479170682136,
|
||||
3369780711397861396, 35370409237953649]
|
||||
};
|
||||
const SECP256K1_GENERATOR_Y: Secp256K1Base = Secp256K1Base([
|
||||
0x9C47D08FFB10D4B8,
|
||||
0xFD17B448A6855419,
|
||||
0x5DA4FBFC0E1108A8,
|
||||
0x483ADA7726A3C465,
|
||||
]);
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::{blake_hash_usize_to_curve, Bls12377, Bls12377Scalar, Curve, Field, ProjectivePoint};
|
||||
use crate::field::field_types::Field;
|
||||
use crate::field::secp256k1_scalar::Secp256K1Scalar;
|
||||
use crate::curve::curve_types::{Curve, ProjectivePoint};
|
||||
use crate::curve::secp256k1_curve::Secp256K1;
|
||||
|
||||
#[test]
|
||||
/*#[test]
|
||||
fn test_double_affine() {
|
||||
for i in 0..100 {
|
||||
let p = blake_hash_usize_to_curve::<Bls12377>(i);
|
||||
//let p = blake_hash_usize_to_curve::<Secp256K1>(i);
|
||||
assert_eq!(
|
||||
p.double(),
|
||||
p.to_projective().double().to_affine());
|
||||
@ -50,8 +56,8 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_naive_multiplication() {
|
||||
let g = Bls12377::GENERATOR_PROJECTIVE;
|
||||
let ten = Bls12377Scalar::from_canonical_u64(10);
|
||||
let g = Secp256K1::GENERATOR_PROJECTIVE;
|
||||
let ten = Secp256K1Scalar::from_canonical_u64(10);
|
||||
let product = mul_naive(ten, g);
|
||||
let sum = g + g + g + g + g + g + g + g + g + g;
|
||||
assert_eq!(product, sum);
|
||||
@ -59,13 +65,13 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_g1_multiplication() {
|
||||
let lhs = Bls12377Scalar::from_canonical([11111111, 22222222, 33333333, 44444444]);
|
||||
assert_eq!(Bls12377::convert(lhs) * Bls12377::GENERATOR_PROJECTIVE, mul_naive(lhs, Bls12377::GENERATOR_PROJECTIVE));
|
||||
let lhs = Secp256K1Scalar::from_canonical([11111111, 22222222, 33333333, 44444444]);
|
||||
assert_eq!(Secp256K1::convert(lhs) * Secp256K1::GENERATOR_PROJECTIVE, mul_naive(lhs, Secp256K1::GENERATOR_PROJECTIVE));
|
||||
}
|
||||
|
||||
/// A simple, somewhat inefficient implementation of multiplication which is used as a reference
|
||||
/// for correctness.
|
||||
fn mul_naive(lhs: Bls12377Scalar, rhs: ProjectivePoint<Bls12377>) -> ProjectivePoint<Bls12377> {
|
||||
fn mul_naive(lhs: Secp256K1Scalar, rhs: ProjectivePoint<Secp256K1>) -> ProjectivePoint<Secp256K1> {
|
||||
let mut g = rhs;
|
||||
let mut sum = ProjectivePoint::ZERO;
|
||||
for limb in lhs.to_canonical().iter() {
|
||||
@ -77,5 +83,5 @@ mod tests {
|
||||
}
|
||||
}
|
||||
sum
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user