mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-06 15:53:10 +00:00
Inverse for other fields
This commit is contained in:
parent
ce23d4377a
commit
8053215841
@ -14,14 +14,26 @@ use crate::memory::segments::Segment;
|
||||
|
||||
pub static KERNEL: Lazy<Kernel> = Lazy::new(combined_kernel);
|
||||
|
||||
const EC_CONSTANTS: [(&str, [u8; 32]); 3] = [
|
||||
(
|
||||
"BN_BASE",
|
||||
hex!("30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47"),
|
||||
),
|
||||
(
|
||||
"SECP_BASE",
|
||||
hex!("fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),
|
||||
),
|
||||
(
|
||||
"SECP_SCALAR",
|
||||
hex!("fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),
|
||||
),
|
||||
];
|
||||
|
||||
pub fn evm_constants() -> HashMap<String, U256> {
|
||||
let mut c = HashMap::new();
|
||||
c.insert(
|
||||
"BN_BASE".into(),
|
||||
U256::from_big_endian(&hex!(
|
||||
"30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47"
|
||||
)),
|
||||
);
|
||||
for (name, value) in EC_CONSTANTS {
|
||||
c.insert(name.into(), U256::from_big_endian(&value));
|
||||
}
|
||||
for segment in Segment::all() {
|
||||
c.insert(segment.var_name().into(), (segment as u32).into());
|
||||
}
|
||||
|
||||
@ -2,6 +2,10 @@
|
||||
global ec_mul_valid_point_secp:
|
||||
JUMPDEST
|
||||
// stack: x, y, s, retdest
|
||||
%stack (x,y) -> (x,y,x,y)
|
||||
%ec_isidentity
|
||||
// stack: (x,y)==(0,0), x, y, s, retdest
|
||||
%jumpi(ret_zero_ec_mul)
|
||||
DUP3
|
||||
// stack: s, x, y, s, retdest
|
||||
%jumpi(step_case)
|
||||
|
||||
@ -17,654 +17,19 @@
|
||||
%mulmodn_secp_scalar
|
||||
%endmacro
|
||||
|
||||
// Computes the inverse modulo N using x^-1 = x^(N-2) mod N and square-and-multiply modular exponentiation.
|
||||
// Non-deterministically provide the inverse modulo N.
|
||||
%macro inverse_secp_scalar
|
||||
DUP1
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
%squaremodn_secp_scalar
|
||||
DUP2
|
||||
%mulmodn_secp_scalar
|
||||
// stack: x
|
||||
PROVER_INPUT(ff::secp256k1_scalar::inverse)
|
||||
// stack: x^-1, x
|
||||
%stack (inv, x) -> (inv, x, @SECP_SCALAR, inv, x)
|
||||
// stack: x^-1, x, N, x^-1, x
|
||||
MULMOD
|
||||
// stack: x^-1 * x, x^-1, x
|
||||
PUSH 1
|
||||
// stack: 1, x^-1 * x, x^-1, x
|
||||
%assert_eq
|
||||
// stack: x^-1, x
|
||||
SWAP1
|
||||
// stack: x, x^-1
|
||||
POP
|
||||
|
||||
@ -25,760 +25,19 @@
|
||||
%mulmodn_secp_base
|
||||
%endmacro
|
||||
|
||||
// Computes the inverse modulo N using x^-1 = x^(N-2) mod N and square-and-multiply modular exponentiation.
|
||||
// Non-deterministically provide the inverse modulo N.
|
||||
%macro inverse_secp_base
|
||||
DUP1
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
%squaremodn_secp_base
|
||||
DUP2
|
||||
%mulmodn_secp_base
|
||||
// stack: x
|
||||
PROVER_INPUT(ff::secp256k1_base::inverse)
|
||||
// stack: x^-1, x
|
||||
%stack (inv, x) -> (inv, x, @SECP_BASE, inv, x)
|
||||
// stack: x^-1, x, N, x^-1, x
|
||||
MULMOD
|
||||
// stack: x^-1 * x, x^-1, x
|
||||
PUSH 1
|
||||
// stack: 1, x^-1 * x, x^-1, x
|
||||
%assert_eq
|
||||
// stack: x^-1, x
|
||||
SWAP1
|
||||
// stack: x, x^-1
|
||||
POP
|
||||
|
||||
@ -89,8 +89,14 @@ impl Field {
|
||||
.unwrap()
|
||||
}
|
||||
Field::Bn254Scalar => todo!(),
|
||||
Field::Secp256k1Base => todo!(),
|
||||
Field::Secp256k1Scalar => todo!(),
|
||||
Field::Secp256k1Base => {
|
||||
U256::from_str("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f")
|
||||
.unwrap()
|
||||
}
|
||||
Field::Secp256k1Scalar => {
|
||||
U256::from_str("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141")
|
||||
.unwrap()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user