pasta-pallas-verified/verification/gen/PallasFp/Funs.lean
mrwulf 75ae21df06 pasta field: foundation + helper + sub/neg proofs against REAL extraction
- extract.sh: scoped Charon/Aeneas extraction of fields::fp (pow_vartime
  patched upstream to index loops — semantics-preserving, crate tests pass;
  sqrt/cmp/sum/random/... opaque, documented)
- gen/: real transpiled model; subtle/CtOption hand-modeled (Choice := U8,
  CtOption := value × is_some), all other externals are axioms outside
  certificate cones
- Proofs/PPallas: Lucas/Pratt primality certificate (reused — it was the one
  genuine piece of the previous attempt)
- Proofs/Denote: Montgomery denotation ⟪a⟫ = feVal a · R⁻¹, Canon invariant
- Proofs/HelperSpecs: adc/sbb/mac exact ℕ specs (step-registered)
- Proofs/SubNegSpec: sub_spec (general two-case identity covering the
  t<2P reduction shape) and neg_spec, proven, no axioms

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 15:51:57 +02:00

1501 lines
68 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- THIS FILE WAS AUTOMATICALLY GENERATED BY AENEAS
-- [pasta_curves]: function definitions
import Aeneas
import PallasFp.Types
import PallasFp.FunsExternal
open Aeneas Aeneas.Std Result ControlFlow Error
set_option linter.dupNamespace false
set_option linter.hashCommand false
set_option linter.unusedVariables false
/- You can set the `maxHeartbeats` value with the `-max-heartbeats` CLI option -/
set_option maxHeartbeats 1000000
/- You can set the `maxRecDepth` value with the `-max-recdepth` CLI option -/
set_option maxRecDepth 2048
/- You can remove the following line by using the CLI option `-all-computable`: -/
noncomputable section
namespace pasta_curves
/-- Trait implementation: [core::array::{impl core::convert::AsRef<[T]> for [T; N]}]
Source: '/rustc/library/core/src/array/mod.rs', lines 206:0-206:51
Name pattern: [core::convert::AsRef<[@T; @N], [@T]>] -/
@[reducible, rust_trait_impl "core::convert::AsRef<[@T; @N], [@T]>"]
def Array.Insts.CoreConvertAsRefSlice (T : Type) (N : Std.Usize) :
core.convert.AsRef (Array T N) (Slice T) := {
as_ref := Array.Insts.CoreConvertAsRefSlice.as_ref
}
/-- Trait implementation: [core::array::{impl core::convert::AsMut<[T]> for [T; N]}]
Source: '/rustc/library/core/src/array/mod.rs', lines 215:0-215:51
Name pattern: [core::convert::AsMut<[@T; @N], [@T]>] -/
@[reducible, rust_trait_impl "core::convert::AsMut<[@T; @N], [@T]>"]
def Array.Insts.CoreConvertAsMutSlice (T : Type) (N : Std.Usize) :
core.convert.AsMut (Array T N) (Slice T) := {
as_mut := Array.Insts.CoreConvertAsMutSlice.as_mut
}
/-- Trait implementation: [core::array::{impl core::marker::Copy for [T; N]}]
Source: '/rustc/library/core/src/array/mod.rs', lines 444:0-444:45
Name pattern: [core::marker::Copy<[@T; @N]>] -/
@[reducible, rust_trait_impl "core::marker::Copy<[@T; @N]>"]
def Array.Insts.CoreMarkerCopy {T : Type} (N : Std.Usize) (markerCopyInst :
core.marker.Copy T) : core.marker.Copy (Array T N) := {
cloneInst := core.clone.CloneArray N markerCopyInst.cloneInst
}
/-- Trait implementation: [core::borrow::{impl core::borrow::Borrow<T> for T}]
Source: '/rustc/library/core/src/borrow.rs', lines 212:0-212:37
Name pattern: [core::borrow::Borrow<@T, @T>] -/
@[reducible, rust_trait_impl "core::borrow::Borrow<@T, @T>"]
def core.borrow.Borrow.Blanket (T : Type) : core.borrow.Borrow T T := {
borrow := core.borrow.Borrow.Blanket.borrow
}
/-- Trait implementation: [core::borrow::{impl core::borrow::Borrow<T> for &'_0 T}]
Source: '/rustc/library/core/src/borrow.rs', lines 229:0-229:38
Name pattern: [core::borrow::Borrow<&'0 @T, @T>] -/
@[reducible, rust_trait_impl "core::borrow::Borrow<&'0 @T, @T>"]
def Shared0T.Insts.CoreBorrowBorrow (T : Type) : core.borrow.Borrow T T := {
borrow := Shared0T.Insts.CoreBorrowBorrow.borrow
}
/-- Trait implementation: [core::convert::{impl core::convert::AsRef<U> for &'_0 T}]
Source: '/rustc/library/core/src/convert/mod.rs', lines 712:0-714:24
Name pattern: [core::convert::AsRef<&'0 @T, @U>] -/
@[reducible, rust_trait_impl "core::convert::AsRef<&'0 @T, @U>"]
def Shared0T.Insts.CoreConvertAsRef {T : Type} {U : Type} (AsRefInst :
core.convert.AsRef T U) : core.convert.AsRef T U := {
as_ref := Shared0T.Insts.CoreConvertAsRef.as_ref AsRefInst
}
/-- [pasta_curves::arithmetic::fields::adc]:
Source: 'src/arithmetic/fields.rs', lines 241:0-244:1 -/
def arithmetic.fields.adc
(a : Std.U64) (b : Std.U64) (carry : Std.U64) :
Result (Std.U64 × Std.U64)
:= do
let i ← lift (UScalar.cast .U128 a)
let i1 ← lift (UScalar.cast .U128 b)
let i2 ← i + i1
let i3 ← lift (UScalar.cast .U128 carry)
let ret ← i2 + i3
let i4 ← lift (UScalar.cast .U64 ret)
let i5 ← ret >>> 64#i32
let i6 ← lift (UScalar.cast .U64 i5)
ok (i4, i6)
/-- [pasta_curves::arithmetic::fields::sbb]:
Source: 'src/arithmetic/fields.rs', lines 248:0-251:1 -/
def arithmetic.fields.sbb
(a : Std.U64) (b : Std.U64) (borrow : Std.U64) :
Result (Std.U64 × Std.U64)
:= do
let i ← lift (UScalar.cast .U128 a)
let i1 ← lift (UScalar.cast .U128 b)
let i2 ← borrow >>> 63#i32
let i3 ← lift (UScalar.cast .U128 i2)
let i4 ← i1 + i3
let ret ← lift (core.num.U128.wrapping_sub i i4)
let i5 ← lift (UScalar.cast .U64 ret)
let i6 ← ret >>> 64#i32
let i7 ← lift (UScalar.cast .U64 i6)
ok (i5, i7)
/-- [pasta_curves::arithmetic::fields::mac]:
Source: 'src/arithmetic/fields.rs', lines 255:0-258:1 -/
def arithmetic.fields.mac
(a : Std.U64) (b : Std.U64) (c : Std.U64) (carry : Std.U64) :
Result (Std.U64 × Std.U64)
:= do
let i ← lift (UScalar.cast .U128 a)
let i1 ← lift (UScalar.cast .U128 b)
let i2 ← lift (UScalar.cast .U128 c)
let i3 ← i1 * i2
let i4 ← i + i3
let i5 ← lift (UScalar.cast .U128 carry)
let ret ← i4 + i5
let i6 ← lift (UScalar.cast .U64 ret)
let i7 ← ret >>> 64#i32
let i8 ← lift (UScalar.cast .U64 i7)
ok (i6, i8)
/-- [pasta_curves::fields::fp::{impl core::clone::Clone for pasta_curves::fields::fp::Fp}::clone]:
Source: 'src/fields/fp.rs', lines 29:9-29:14
Visibility: public -/
def fields.fp.Fp.Insts.CoreCloneClone.clone
(self : fields.fp.Fp) : Result fields.fp.Fp := do
ok self
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::clone::Clone for pasta_curves::fields::fp::Fp}]
Source: 'src/fields/fp.rs', lines 29:9-29:14 -/
@[reducible]
def fields.fp.Fp.Insts.CoreCloneClone : core.clone.Clone fields.fp.Fp := {
clone := fields.fp.Fp.Insts.CoreCloneClone.clone
}
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::marker::Copy for pasta_curves::fields::fp::Fp}]
Source: 'src/fields/fp.rs', lines 29:16-29:20 -/
@[reducible]
def fields.fp.Fp.Insts.CoreMarkerCopy : core.marker.Copy fields.fp.Fp := {
cloneInst := fields.fp.Fp.Insts.CoreCloneClone
}
/-- [pasta_curves::fields::fp::{impl subtle::ConstantTimeEq for pasta_curves::fields::fp::Fp}::ct_eq]:
Source: 'src/fields/fp.rs', lines 61:4-66:5
Visibility: public -/
def fields.fp.Fp.Insts.SubtleConstantTimeEq.ct_eq
(self : fields.fp.Fp) (other : fields.fp.Fp) : Result subtle.Choice := do
let i ← Array.index_usize self 0#usize
let i1 ← Array.index_usize other 0#usize
let c ← U64.Insts.SubtleConstantTimeEq.ct_eq i i1
let i2 ← Array.index_usize self 1#usize
let i3 ← Array.index_usize other 1#usize
let c1 ← U64.Insts.SubtleConstantTimeEq.ct_eq i2 i3
let c2 ← subtle.Choice.Insts.CoreOpsBitBitAndChoiceChoice.bitand c c1
let i4 ← Array.index_usize self 2#usize
let i5 ← Array.index_usize other 2#usize
let c3 ← U64.Insts.SubtleConstantTimeEq.ct_eq i4 i5
let c4 ← subtle.Choice.Insts.CoreOpsBitBitAndChoiceChoice.bitand c2 c3
let i6 ← Array.index_usize self 3#usize
let i7 ← Array.index_usize other 3#usize
let c5 ← U64.Insts.SubtleConstantTimeEq.ct_eq i6 i7
subtle.Choice.Insts.CoreOpsBitBitAndChoiceChoice.bitand c4 c5
/-- [pasta_curves::fields::fp::{impl core::cmp::PartialEq<pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}::eq]:
Source: 'src/fields/fp.rs', lines 71:4-73:5
Visibility: public -/
def fields.fp.Fp.Insts.CoreCmpPartialEqFp.eq
(self : fields.fp.Fp) (other : fields.fp.Fp) : Result Bool := do
let c ← fields.fp.Fp.Insts.SubtleConstantTimeEq.ct_eq self other
let i ← subtle.Choice.unwrap_u8 c
ok (i = 1#u8)
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::cmp::PartialEq<pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}]
Source: 'src/fields/fp.rs', lines 69:0-74:1 -/
@[reducible]
def fields.fp.Fp.Insts.CoreCmpPartialEqFp : core.cmp.PartialEq fields.fp.Fp
fields.fp.Fp := {
eq := fields.fp.Fp.Insts.CoreCmpPartialEqFp.eq
}
/-- [pasta_curves::fields::fp::{impl core::cmp::Eq for pasta_curves::fields::fp::Fp}::assert_fields_are_eq]:
Source: 'src/fields/fp.rs', lines 29:22-29:24
Visibility: public -/
def fields.fp.Fp.Insts.CoreCmpEq.assert_fields_are_eq
(self : fields.fp.Fp) : Result Unit := do
ok ()
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::cmp::Eq for pasta_curves::fields::fp::Fp}]
Source: 'src/fields/fp.rs', lines 29:22-29:24 -/
@[reducible]
def fields.fp.Fp.Insts.CoreCmpEq : core.cmp.Eq fields.fp.Fp := {
partialEqInst := fields.fp.Fp.Insts.CoreCmpPartialEqFp
assert_fields_are_eq := fields.fp.Fp.Insts.CoreCmpEq.assert_fields_are_eq
}
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::fmt::Debug for pasta_curves::fields::fp::Fp}]
Source: 'src/fields/fp.rs', lines 33:0-42:1 -/
@[reducible]
def fields.fp.Fp.Insts.CoreFmtDebug : core.fmt.Debug fields.fp.Fp := {
fmt := fields.fp.Fp.Insts.CoreFmtDebug.fmt
}
/-- [pasta_curves::fields::fp::R]
Source: 'src/fields/fp.rs', lines 194:0-199:3 -/
@[global_simps, irreducible]
def fields.fp.R : fields.fp.Fp :=
Array.make 4#usize [
3780891978758094845#u64, 11037255111966004397#u64,
18446744073709551615#u64, 4611686018427387903#u64
]
/-- [pasta_curves::fields::fp::{pasta_curves::fields::fp::Fp}::one]:
Source: 'src/fields/fp.rs', lines 273:4-275:5
Visibility: public -/
def fields.fp.Fp.one : Result fields.fp.Fp := do
ok fields.fp.R
/-- [pasta_curves::fields::fp::{pasta_curves::fields::fp::Fp}::zero]:
Source: 'src/fields/fp.rs', lines 267:4-269:5
Visibility: public -/
def fields.fp.Fp.zero : Result fields.fp.Fp := do
let a := Array.repeat 4#usize 0#u64
ok a
/-- [pasta_curves::fields::fp::{impl core::convert::From<bool> for pasta_curves::fields::fp::Fp}::from]:
Source: 'src/fields/fp.rs', lines 45:4-51:5
Visibility: public -/
def fields.fp.Fp.Insts.CoreConvertFromBool.from
(bit : Bool) : Result fields.fp.Fp := do
if bit
then fields.fp.Fp.one
else fields.fp.Fp.zero
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::convert::From<bool> for pasta_curves::fields::fp::Fp}]
Source: 'src/fields/fp.rs', lines 44:0-52:1 -/
@[reducible]
def fields.fp.Fp.Insts.CoreConvertFromBool : core.convert.From fields.fp.Fp
Bool := {
from_ := fields.fp.Fp.Insts.CoreConvertFromBool.from
}
/-- [pasta_curves::fields::fp::{pasta_curves::fields::fp::Fp}::mul_unreduced]:
Source: 'src/fields/fp.rs', lines 423:4-447:5 -/
def fields.fp.Fp.mul_unreduced
(self : fields.fp.Fp) (rhs : fields.fp.Fp) :
Result (Array Std.U64 8#usize)
:= do
let i ← Array.index_usize self 0#usize
let i1 ← Array.index_usize rhs 0#usize
let (r0, carry) ← arithmetic.fields.mac 0#u64 i i1 0#u64
let i2 ← Array.index_usize rhs 1#usize
let (r1, carry1) ← arithmetic.fields.mac 0#u64 i i2 carry
let i3 ← Array.index_usize rhs 2#usize
let (r2, carry2) ← arithmetic.fields.mac 0#u64 i i3 carry1
let i4 ← Array.index_usize rhs 3#usize
let (r3, r4) ← arithmetic.fields.mac 0#u64 i i4 carry2
let i5 ← Array.index_usize self 1#usize
let (r11, carry3) ← arithmetic.fields.mac r1 i5 i1 0#u64
let (r21, carry4) ← arithmetic.fields.mac r2 i5 i2 carry3
let (r31, carry5) ← arithmetic.fields.mac r3 i5 i3 carry4
let (r41, r5) ← arithmetic.fields.mac r4 i5 i4 carry5
let i6 ← Array.index_usize self 2#usize
let (r22, carry6) ← arithmetic.fields.mac r21 i6 i1 0#u64
let (r32, carry7) ← arithmetic.fields.mac r31 i6 i2 carry6
let (r42, carry8) ← arithmetic.fields.mac r41 i6 i3 carry7
let (r51, r6) ← arithmetic.fields.mac r5 i6 i4 carry8
let i7 ← Array.index_usize self 3#usize
let (r33, carry9) ← arithmetic.fields.mac r32 i7 i1 0#u64
let (r43, carry10) ← arithmetic.fields.mac r42 i7 i2 carry9
let (r52, carry11) ← arithmetic.fields.mac r51 i7 i3 carry10
let (r61, r7) ← arithmetic.fields.mac r6 i7 i4 carry11
ok (Array.make 8#usize [ r0, r11, r22, r33, r43, r52, r61, r7 ])
/-- [pasta_curves::fields::fp::MODULUS]
Source: 'src/fields/fp.rs', lines 110:0-115:3 -/
@[global_simps, irreducible]
def fields.fp.MODULUS : fields.fp.Fp :=
Array.make 4#usize [
11037532056220336129#u64, 2469829653914515739#u64, 0#u64,
4611686018427387904#u64
]
/-- [pasta_curves::fields::fp::{pasta_curves::fields::fp::Fp}::sub]:
Source: 'src/fields/fp.rs', lines 374:4-388:5
Visibility: public -/
def fields.fp.Fp.sub
(self : fields.fp.Fp) (rhs : fields.fp.Fp) : Result fields.fp.Fp := do
let i ← Array.index_usize self 0#usize
let i1 ← Array.index_usize rhs 0#usize
let (d0, borrow) ← arithmetic.fields.sbb i i1 0#u64
let i2 ← Array.index_usize self 1#usize
let i3 ← Array.index_usize rhs 1#usize
let (d1, borrow1) ← arithmetic.fields.sbb i2 i3 borrow
let i4 ← Array.index_usize self 2#usize
let i5 ← Array.index_usize rhs 2#usize
let (d2, borrow2) ← arithmetic.fields.sbb i4 i5 borrow1
let i6 ← Array.index_usize self 3#usize
let i7 ← Array.index_usize rhs 3#usize
let (d3, borrow3) ← arithmetic.fields.sbb i6 i7 borrow2
let a := fields.fp.MODULUS
let i8 ← Array.index_usize a 0#usize
let i9 ← lift (i8 &&& borrow3)
let (d01, carry) ← arithmetic.fields.adc d0 i9 0#u64
let a1 := fields.fp.MODULUS
let i10 ← Array.index_usize a1 1#usize
let i11 ← lift (i10 &&& borrow3)
let (d11, carry1) ← arithmetic.fields.adc d1 i11 carry
let a2 := fields.fp.MODULUS
let i12 ← Array.index_usize a2 2#usize
let i13 ← lift (i12 &&& borrow3)
let (d21, carry2) ← arithmetic.fields.adc d2 i13 carry1
let a3 := fields.fp.MODULUS
let i14 ← Array.index_usize a3 3#usize
let i15 ← lift (i14 &&& borrow3)
let (d31, _) ← arithmetic.fields.adc d3 i15 carry2
ok (Array.make 4#usize [ d01, d11, d21, d31 ])
/-- [pasta_curves::fields::fp::INV]
Source: 'src/fields/fp.rs', lines 191:0-191:36 -/
@[global_simps, irreducible]
def fields.fp.INV : Std.U64 := 11037532056220336127#u64
/-- [pasta_curves::fields::fp::{pasta_curves::fields::fp::Fp}::montgomery_reduce]:
Source: 'src/fields/fp.rs', lines 319:4-363:5 -/
def fields.fp.Fp.montgomery_reduce
(r0 : Std.U64) (r1 : Std.U64) (r2 : Std.U64) (r3 : Std.U64) (r4 : Std.U64)
(r5 : Std.U64) (r6 : Std.U64) (r7 : Std.U64) :
Result fields.fp.Fp
:= do
let k ← lift (core.num.U64.wrapping_mul r0 fields.fp.INV)
let a := fields.fp.MODULUS
let i ← Array.index_usize a 0#usize
let (_, carry) ← arithmetic.fields.mac r0 k i 0#u64
let a1 := fields.fp.MODULUS
let i1 ← Array.index_usize a1 1#usize
let (r11, carry1) ← arithmetic.fields.mac r1 k i1 carry
let a2 := fields.fp.MODULUS
let i2 ← Array.index_usize a2 2#usize
let (r21, carry2) ← arithmetic.fields.mac r2 k i2 carry1
let a3 := fields.fp.MODULUS
let i3 ← Array.index_usize a3 3#usize
let (r31, carry3) ← arithmetic.fields.mac r3 k i3 carry2
let (r41, carry21) ← arithmetic.fields.adc r4 0#u64 carry3
let k1 ← lift (core.num.U64.wrapping_mul r11 fields.fp.INV)
let a4 := fields.fp.MODULUS
let i4 ← Array.index_usize a4 0#usize
let (_, carry4) ← arithmetic.fields.mac r11 k1 i4 0#u64
let a5 := fields.fp.MODULUS
let i5 ← Array.index_usize a5 1#usize
let (r22, carry5) ← arithmetic.fields.mac r21 k1 i5 carry4
let a6 := fields.fp.MODULUS
let i6 ← Array.index_usize a6 2#usize
let (r32, carry6) ← arithmetic.fields.mac r31 k1 i6 carry5
let a7 := fields.fp.MODULUS
let i7 ← Array.index_usize a7 3#usize
let (r42, carry7) ← arithmetic.fields.mac r41 k1 i7 carry6
let (r51, carry22) ← arithmetic.fields.adc r5 carry21 carry7
let k2 ← lift (core.num.U64.wrapping_mul r22 fields.fp.INV)
let a8 := fields.fp.MODULUS
let i8 ← Array.index_usize a8 0#usize
let (_, carry8) ← arithmetic.fields.mac r22 k2 i8 0#u64
let a9 := fields.fp.MODULUS
let i9 ← Array.index_usize a9 1#usize
let (r33, carry9) ← arithmetic.fields.mac r32 k2 i9 carry8
let a10 := fields.fp.MODULUS
let i10 ← Array.index_usize a10 2#usize
let (r43, carry10) ← arithmetic.fields.mac r42 k2 i10 carry9
let a11 := fields.fp.MODULUS
let i11 ← Array.index_usize a11 3#usize
let (r52, carry11) ← arithmetic.fields.mac r51 k2 i11 carry10
let (r61, carry23) ← arithmetic.fields.adc r6 carry22 carry11
let k3 ← lift (core.num.U64.wrapping_mul r33 fields.fp.INV)
let a12 := fields.fp.MODULUS
let i12 ← Array.index_usize a12 0#usize
let (_, carry12) ← arithmetic.fields.mac r33 k3 i12 0#u64
let a13 := fields.fp.MODULUS
let i13 ← Array.index_usize a13 1#usize
let (r44, carry13) ← arithmetic.fields.mac r43 k3 i13 carry12
let a14 := fields.fp.MODULUS
let i14 ← Array.index_usize a14 2#usize
let (r53, carry14) ← arithmetic.fields.mac r52 k3 i14 carry13
let a15 := fields.fp.MODULUS
let i15 ← Array.index_usize a15 3#usize
let (r62, carry15) ← arithmetic.fields.mac r61 k3 i15 carry14
let (r71, _) ← arithmetic.fields.adc r7 carry23 carry15
fields.fp.Fp.sub (Array.make 4#usize [ r44, r53, r62, r71 ])
fields.fp.MODULUS
/-- [pasta_curves::fields::fp::{pasta_curves::fields::fp::Fp}::mul]:
Source: 'src/fields/fp.rs', lines 367:4-370:5
Visibility: public -/
def fields.fp.Fp.mul
(self : fields.fp.Fp) (rhs : fields.fp.Fp) : Result fields.fp.Fp := do
let u ← fields.fp.Fp.mul_unreduced self rhs
let i ← Array.index_usize u 0#usize
let i1 ← Array.index_usize u 1#usize
let i2 ← Array.index_usize u 2#usize
let i3 ← Array.index_usize u 3#usize
let i4 ← Array.index_usize u 4#usize
let i5 ← Array.index_usize u 5#usize
let i6 ← Array.index_usize u 6#usize
let i7 ← Array.index_usize u 7#usize
fields.fp.Fp.montgomery_reduce i i1 i2 i3 i4 i5 i6 i7
/-- [pasta_curves::fields::fp::{impl core::ops::arith::Mul<&'b pasta_curves::fields::fp::Fp, pasta_curves::fields::fp::Fp> for &'a pasta_curves::fields::fp::Fp}::mul]:
Source: 'src/fields/fp.rs', lines 170:4-172:5
Visibility: public -/
def SharedAFp.Insts.CoreOpsArithMulSharedBFpFp.mul
(self : fields.fp.Fp) (rhs : fields.fp.Fp) : Result fields.fp.Fp := do
fields.fp.Fp.mul self rhs
/-- [pasta_curves::fields::fp::{impl core::ops::arith::Mul<pasta_curves::fields::fp::Fp, pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}::mul]:
Source: 'src/macros.rs', lines 94:12-96:13
Visibility: public -/
def fields.fp.Fp.Insts.CoreOpsArithMulFpFp.mul
(self : fields.fp.Fp) (rhs : fields.fp.Fp) : Result fields.fp.Fp := do
SharedAFp.Insts.CoreOpsArithMulSharedBFpFp.mul self rhs
/-- [pasta_curves::fields::fp::R2]
Source: 'src/fields/fp.rs', lines 202:0-207:3 -/
@[global_simps, irreducible]
def fields.fp.R2 : fields.fp.Fp :=
Array.make 4#usize [
10122100416058490895#u64, 15551789045973377255#u64,
8617542898466512152#u64, 679271340751763220#u64
]
/-- [pasta_curves::fields::fp::{impl core::convert::From<u64> for pasta_curves::fields::fp::Fp}::from]:
Source: 'src/fields/fp.rs', lines 55:4-57:5
Visibility: public -/
def fields.fp.Fp.Insts.CoreConvertFromU64.from
(val : Std.U64) : Result fields.fp.Fp := do
fields.fp.Fp.Insts.CoreOpsArithMulFpFp.mul
(Array.make 4#usize [ val, 0#u64, 0#u64, 0#u64 ]) fields.fp.R2
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::convert::From<u64> for pasta_curves::fields::fp::Fp}]
Source: 'src/fields/fp.rs', lines 54:0-58:1 -/
@[reducible]
def fields.fp.Fp.Insts.CoreConvertFromU64 : core.convert.From fields.fp.Fp
Std.U64 := {
from_ := fields.fp.Fp.Insts.CoreConvertFromU64.from
}
/-- Trait implementation: [pasta_curves::fields::fp::{impl subtle::ConstantTimeEq for pasta_curves::fields::fp::Fp}]
Source: 'src/fields/fp.rs', lines 60:0-67:1 -/
@[reducible]
def fields.fp.Fp.Insts.SubtleConstantTimeEq : subtle.ConstantTimeEq
fields.fp.Fp := {
ct_eq := fields.fp.Fp.Insts.SubtleConstantTimeEq.ct_eq
}
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::cmp::PartialOrd<pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}]
Source: 'src/fields/fp.rs', lines 91:0-95:1 -/
@[reducible]
def fields.fp.Fp.Insts.CoreCmpPartialOrdFp : core.cmp.PartialOrd fields.fp.Fp
fields.fp.Fp := {
partialEqInst := fields.fp.Fp.Insts.CoreCmpPartialEqFp
partial_cmp := fields.fp.Fp.Insts.CoreCmpPartialOrdFp.partial_cmp
}
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::cmp::Ord for pasta_curves::fields::fp::Fp}]
Source: 'src/fields/fp.rs', lines 76:0-89:1 -/
@[reducible]
def fields.fp.Fp.Insts.CoreCmpOrd : core.cmp.Ord fields.fp.Fp := {
eqInst := fields.fp.Fp.Insts.CoreCmpEq
partialOrdInst := fields.fp.Fp.Insts.CoreCmpPartialOrdFp
cmp := fields.fp.Fp.Insts.CoreCmpOrd.cmp
}
/-- [pasta_curves::fields::fp::{impl subtle::ConditionallySelectable for pasta_curves::fields::fp::Fp}::conditional_select]:
Source: 'src/fields/fp.rs', lines 98:4-105:5
Visibility: public -/
def fields.fp.Fp.Insts.SubtleConditionallySelectable.conditional_select
(a : fields.fp.Fp) (b : fields.fp.Fp) (choice : subtle.Choice) :
Result fields.fp.Fp
:= do
let i ← Array.index_usize a 0#usize
let i1 ← Array.index_usize b 0#usize
let i2 ←
U64.Insts.SubtleConditionallySelectable.conditional_select i i1 choice
let i3 ← Array.index_usize a 1#usize
let i4 ← Array.index_usize b 1#usize
let i5 ←
U64.Insts.SubtleConditionallySelectable.conditional_select i3 i4 choice
let i6 ← Array.index_usize a 2#usize
let i7 ← Array.index_usize b 2#usize
let i8 ←
U64.Insts.SubtleConditionallySelectable.conditional_select i6 i7 choice
let i9 ← Array.index_usize a 3#usize
let i10 ← Array.index_usize b 3#usize
let i11 ←
U64.Insts.SubtleConditionallySelectable.conditional_select i9 i10 choice
ok (Array.make 4#usize [ i2, i5, i8, i11 ])
/-- Trait implementation: [pasta_curves::fields::fp::{impl subtle::ConditionallySelectable for pasta_curves::fields::fp::Fp}]
Source: 'src/fields/fp.rs', lines 97:0-106:1 -/
@[reducible]
def fields.fp.Fp.Insts.SubtleConditionallySelectable :
subtle.ConditionallySelectable fields.fp.Fp := {
coremarkerCopyInst := fields.fp.Fp.Insts.CoreMarkerCopy
conditional_select :=
fields.fp.Fp.Insts.SubtleConditionallySelectable.conditional_select
}
/-- [pasta_curves::fields::fp::{pasta_curves::fields::fp::Fp}::neg]:
Source: 'src/fields/fp.rs', lines 405:4-419:5
Visibility: public -/
def fields.fp.Fp.neg (self : fields.fp.Fp) : Result fields.fp.Fp := do
let a := fields.fp.MODULUS
let i ← Array.index_usize a 0#usize
let i1 ← Array.index_usize self 0#usize
let (d0, borrow) ← arithmetic.fields.sbb i i1 0#u64
let a1 := fields.fp.MODULUS
let i2 ← Array.index_usize a1 1#usize
let i3 ← Array.index_usize self 1#usize
let (d1, borrow1) ← arithmetic.fields.sbb i2 i3 borrow
let a2 := fields.fp.MODULUS
let i4 ← Array.index_usize a2 2#usize
let i5 ← Array.index_usize self 2#usize
let (d2, borrow2) ← arithmetic.fields.sbb i4 i5 borrow1
let a3 := fields.fp.MODULUS
let i6 ← Array.index_usize a3 3#usize
let i7 ← Array.index_usize self 3#usize
let (d3, _) ← arithmetic.fields.sbb i6 i7 borrow2
let i8 ← lift (i1 ||| i3)
let i9 ← lift (i8 ||| i5)
let i10 ← lift (i9 ||| i7)
let i11 ← lift (UScalar.cast_fromBool .U64 (i10 = 0#u64))
let mask ← lift (core.num.U64.wrapping_sub i11 1#u64)
let i12 ← lift (d0 &&& mask)
let i13 ← lift (d1 &&& mask)
let i14 ← lift (d2 &&& mask)
let i15 ← lift (d3 &&& mask)
ok (Array.make 4#usize [ i12, i13, i14, i15 ])
/-- [pasta_curves::fields::fp::{impl core::ops::arith::Neg<pasta_curves::fields::fp::Fp> for &'a pasta_curves::fields::fp::Fp}::neg]:
Source: 'src/fields/fp.rs', lines 134:4-136:5
Visibility: public -/
def SharedAFp.Insts.CoreOpsArithNegFp.neg
(self : fields.fp.Fp) : Result fields.fp.Fp := do
fields.fp.Fp.neg self
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::ops::arith::Neg<pasta_curves::fields::fp::Fp> for &'a pasta_curves::fields::fp::Fp}]
Source: 'src/fields/fp.rs', lines 130:0-137:1 -/
@[reducible]
def SharedAFp.Insts.CoreOpsArithNegFp : core.ops.arith.Neg fields.fp.Fp
fields.fp.Fp := {
neg := SharedAFp.Insts.CoreOpsArithNegFp.neg
}
/-- [pasta_curves::fields::fp::{impl core::ops::arith::Neg<pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}::neg]:
Source: 'src/fields/fp.rs', lines 143:4-145:5
Visibility: public -/
def fields.fp.Fp.Insts.CoreOpsArithNegFp.neg
(self : fields.fp.Fp) : Result fields.fp.Fp := do
SharedAFp.Insts.CoreOpsArithNegFp.neg self
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::ops::arith::Neg<pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}]
Source: 'src/fields/fp.rs', lines 139:0-146:1 -/
@[reducible]
def fields.fp.Fp.Insts.CoreOpsArithNegFp : core.ops.arith.Neg fields.fp.Fp
fields.fp.Fp := {
neg := fields.fp.Fp.Insts.CoreOpsArithNegFp.neg
}
/-- [pasta_curves::fields::fp::{impl core::ops::arith::Sub<&'b pasta_curves::fields::fp::Fp, pasta_curves::fields::fp::Fp> for &'a pasta_curves::fields::fp::Fp}::sub]:
Source: 'src/fields/fp.rs', lines 152:4-154:5
Visibility: public -/
def SharedAFp.Insts.CoreOpsArithSubSharedBFpFp.sub
(self : fields.fp.Fp) (rhs : fields.fp.Fp) : Result fields.fp.Fp := do
fields.fp.Fp.sub self rhs
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::ops::arith::Sub<&'b pasta_curves::fields::fp::Fp, pasta_curves::fields::fp::Fp> for &'a pasta_curves::fields::fp::Fp}]
Source: 'src/fields/fp.rs', lines 148:0-155:1 -/
@[reducible]
def SharedAFp.Insts.CoreOpsArithSubSharedBFpFp : core.ops.arith.Sub
fields.fp.Fp fields.fp.Fp fields.fp.Fp := {
sub := SharedAFp.Insts.CoreOpsArithSubSharedBFpFp.sub
}
/-- [pasta_curves::fields::fp::{pasta_curves::fields::fp::Fp}::add]:
Source: 'src/fields/fp.rs', lines 392:4-401:5
Visibility: public -/
def fields.fp.Fp.add
(self : fields.fp.Fp) (rhs : fields.fp.Fp) : Result fields.fp.Fp := do
let i ← Array.index_usize self 0#usize
let i1 ← Array.index_usize rhs 0#usize
let (d0, carry) ← arithmetic.fields.adc i i1 0#u64
let i2 ← Array.index_usize self 1#usize
let i3 ← Array.index_usize rhs 1#usize
let (d1, carry1) ← arithmetic.fields.adc i2 i3 carry
let i4 ← Array.index_usize self 2#usize
let i5 ← Array.index_usize rhs 2#usize
let (d2, carry2) ← arithmetic.fields.adc i4 i5 carry1
let i6 ← Array.index_usize self 3#usize
let i7 ← Array.index_usize rhs 3#usize
let (d3, _) ← arithmetic.fields.adc i6 i7 carry2
fields.fp.Fp.sub (Array.make 4#usize [ d0, d1, d2, d3 ]) fields.fp.MODULUS
/-- [pasta_curves::fields::fp::{impl core::ops::arith::Add<&'b pasta_curves::fields::fp::Fp, pasta_curves::fields::fp::Fp> for &'a pasta_curves::fields::fp::Fp}::add]:
Source: 'src/fields/fp.rs', lines 161:4-163:5
Visibility: public -/
def SharedAFp.Insts.CoreOpsArithAddSharedBFpFp.add
(self : fields.fp.Fp) (rhs : fields.fp.Fp) : Result fields.fp.Fp := do
fields.fp.Fp.add self rhs
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::ops::arith::Add<&'b pasta_curves::fields::fp::Fp, pasta_curves::fields::fp::Fp> for &'a pasta_curves::fields::fp::Fp}]
Source: 'src/fields/fp.rs', lines 157:0-164:1 -/
@[reducible]
def SharedAFp.Insts.CoreOpsArithAddSharedBFpFp : core.ops.arith.Add
fields.fp.Fp fields.fp.Fp fields.fp.Fp := {
add := SharedAFp.Insts.CoreOpsArithAddSharedBFpFp.add
}
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::ops::arith::Mul<&'b pasta_curves::fields::fp::Fp, pasta_curves::fields::fp::Fp> for &'a pasta_curves::fields::fp::Fp}]
Source: 'src/fields/fp.rs', lines 166:0-173:1 -/
@[reducible]
def SharedAFp.Insts.CoreOpsArithMulSharedBFpFp : core.ops.arith.Mul
fields.fp.Fp fields.fp.Fp fields.fp.Fp := {
mul := SharedAFp.Insts.CoreOpsArithMulSharedBFpFp.mul
}
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::iter::traits::accum::Sum<T> for pasta_curves::fields::fp::Fp}]
Source: 'src/fields/fp.rs', lines 178:0-182:1 -/
@[reducible]
def fields.fp.Fp.Insts.CoreIterTraitsAccumSum {T : Type}
(coreborrowBorrowTFpInst : core.borrow.Borrow T fields.fp.Fp) :
core.iter.traits.accum.Sum fields.fp.Fp T := {
sum := fun {I : Type} (coreitertraitsiteratorIteratorInst :
core.iter.traits.iterator.Iterator I T) =>
fields.fp.Fp.Insts.CoreIterTraitsAccumSum.sum coreborrowBorrowTFpInst
coreitertraitsiteratorIteratorInst
}
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::iter::traits::accum::Product<T> for pasta_curves::fields::fp::Fp}]
Source: 'src/fields/fp.rs', lines 184:0-188:1 -/
@[reducible]
def fields.fp.Fp.Insts.CoreIterTraitsAccumProduct {T : Type}
(coreborrowBorrowTFpInst : core.borrow.Borrow T fields.fp.Fp) :
core.iter.traits.accum.Product fields.fp.Fp T := {
product := fun {I : Type} (coreitertraitsiteratorIteratorInst :
core.iter.traits.iterator.Iterator I T) =>
fields.fp.Fp.Insts.CoreIterTraitsAccumProduct.product
coreborrowBorrowTFpInst coreitertraitsiteratorIteratorInst
}
/-- [pasta_curves::fields::fp::R3]
Source: 'src/fields/fp.rs', lines 210:0-215:3 -/
@[global_simps, irreducible]
def fields.fp.R3 : fields.fp.Fp :=
Array.make 4#usize [
17403498412575166713#u64, 17773050464821424593#u64,
16108549121152898092#u64, 3090323811697793296#u64
]
/-- [pasta_curves::fields::fp::{pasta_curves::fields::fp::Fp}::from_raw]:
Source: 'src/fields/fp.rs', lines 306:4-308:5
Visibility: public -/
def fields.fp.Fp.from_raw
(val : Array Std.U64 4#usize) : Result fields.fp.Fp := do
fields.fp.Fp.mul val fields.fp.R2
/-- [pasta_curves::fields::fp::GENERATOR]
Source: 'src/fields/fp.rs', lines 219:0-224:3 -/
@[global_simps, irreducible]
def fields.fp.GENERATOR : Result fields.fp.Fp :=
fields.fp.Fp.from_raw (Array.make 4#usize [ 5#u64, 0#u64, 0#u64, 0#u64 ])
/-- [pasta_curves::fields::fp::S]
Source: 'src/fields/fp.rs', lines 226:0-226:18 -/
@[global_simps, irreducible] def fields.fp.S : Std.U32 := 32#u32
/-- [pasta_curves::fields::fp::ROOT_OF_UNITY]
Source: 'src/fields/fp.rs', lines 231:0-236:3 -/
@[global_simps, irreducible]
def fields.fp.ROOT_OF_UNITY : Result fields.fp.Fp :=
fields.fp.Fp.from_raw
(Array.make 4#usize [
13667703228001592111#u64, 16875599075175265668#u64,
3900434499382671386#u64, 3156588888553745370#u64
])
/-- [pasta_curves::fields::fp::DELTA]
Source: 'src/fields/fp.rs', lines 241:0-246:3 -/
@[global_simps, irreducible]
def fields.fp.DELTA : Result fields.fp.Fp :=
fields.fp.Fp.from_raw
(Array.make 4#usize [
7668729806543625122#u64, 17718555051450848822#u64,
13638407587763651741#u64, 753646016032844652#u64
])
/-- [pasta_curves::fields::fp::T_MINUS1_OVER2]
Source: 'src/fields/fp.rs', lines 250:0-255:2 -/
@[global_simps, irreducible]
def fields.fp.T_MINUS1_OVER2 : Array Std.U64 4#usize :=
Array.make 4#usize [
335092170750335094#u64, 287526014#u64, 0#u64, 536870912#u64
]
/-- [pasta_curves::fields::fp::{impl core::default::Default for pasta_curves::fields::fp::Fp}::default]:
Source: 'src/fields/fp.rs', lines 259:4-261:5
Visibility: public -/
def fields.fp.Fp.Insts.CoreDefaultDefault.default : Result fields.fp.Fp := do
fields.fp.Fp.zero
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::default::Default for pasta_curves::fields::fp::Fp}]
Source: 'src/fields/fp.rs', lines 257:0-262:1 -/
@[reducible]
def fields.fp.Fp.Insts.CoreDefaultDefault : core.default.Default fields.fp.Fp
:= {
default := fields.fp.Fp.Insts.CoreDefaultDefault.default
}
/-- [pasta_curves::fields::fp::{pasta_curves::fields::fp::Fp}::double]:
Source: 'src/fields/fp.rs', lines 279:4-282:5
Visibility: public -/
def fields.fp.Fp.double (self : fields.fp.Fp) : Result fields.fp.Fp := do
fields.fp.Fp.add self self
/-- [pasta_curves::fields::fp::{impl core::ops::arith::Add<pasta_curves::fields::fp::Fp, pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}::add]:
Source: 'src/macros.rs', lines 25:12-27:13
Visibility: public -/
def fields.fp.Fp.Insts.CoreOpsArithAddFpFp.add
(self : fields.fp.Fp) (rhs : fields.fp.Fp) : Result fields.fp.Fp := do
SharedAFp.Insts.CoreOpsArithAddSharedBFpFp.add self rhs
/-- [pasta_curves::fields::fp::{pasta_curves::fields::fp::Fp}::from_u512]:
Source: 'src/fields/fp.rs', lines 284:4-302:5 -/
def fields.fp.Fp.from_u512
(limbs : Array Std.U64 8#usize) : Result fields.fp.Fp := do
let i ← Array.index_usize limbs 0#usize
let i1 ← Array.index_usize limbs 1#usize
let i2 ← Array.index_usize limbs 2#usize
let i3 ← Array.index_usize limbs 3#usize
let i4 ← Array.index_usize limbs 4#usize
let i5 ← Array.index_usize limbs 5#usize
let i6 ← Array.index_usize limbs 6#usize
let i7 ← Array.index_usize limbs 7#usize
let f ←
fields.fp.Fp.Insts.CoreOpsArithMulFpFp.mul
(Array.make 4#usize [ i, i1, i2, i3 ]) fields.fp.R2
let f1 ←
fields.fp.Fp.Insts.CoreOpsArithMulFpFp.mul
(Array.make 4#usize [ i4, i5, i6, i7 ]) fields.fp.R3
fields.fp.Fp.Insts.CoreOpsArithAddFpFp.add f f1
/-- [pasta_curves::fields::fp::{pasta_curves::fields::fp::Fp}::square_unreduced]:
Source: 'src/fields/fp.rs', lines 451:4-479:5 -/
def fields.fp.Fp.square_unreduced
(self : fields.fp.Fp) : Result (Array Std.U64 8#usize) := do
let i ← Array.index_usize self 0#usize
let i1 ← Array.index_usize self 1#usize
let (r1, carry) ← arithmetic.fields.mac 0#u64 i i1 0#u64
let i2 ← Array.index_usize self 2#usize
let (r2, carry1) ← arithmetic.fields.mac 0#u64 i i2 carry
let i3 ← Array.index_usize self 3#usize
let (r3, r4) ← arithmetic.fields.mac 0#u64 i i3 carry1
let (r31, carry2) ← arithmetic.fields.mac r3 i1 i2 0#u64
let (r41, r5) ← arithmetic.fields.mac r4 i1 i3 carry2
let (r51, r6) ← arithmetic.fields.mac r5 i2 i3 0#u64
let r7 ← r6 >>> 63#i32
let i4 ← r6 <<< 1#i32
let i5 ← r51 >>> 63#i32
let r61 ← lift (i4 ||| i5)
let i6 ← r51 <<< 1#i32
let i7 ← r41 >>> 63#i32
let r52 ← lift (i6 ||| i7)
let i8 ← r41 <<< 1#i32
let i9 ← r31 >>> 63#i32
let r42 ← lift (i8 ||| i9)
let i10 ← r31 <<< 1#i32
let i11 ← r2 >>> 63#i32
let r32 ← lift (i10 ||| i11)
let i12 ← r2 <<< 1#i32
let i13 ← r1 >>> 63#i32
let r21 ← lift (i12 ||| i13)
let r11 ← r1 <<< 1#i32
let (r0, carry3) ← arithmetic.fields.mac 0#u64 i i 0#u64
let (r12, carry4) ← arithmetic.fields.adc 0#u64 r11 carry3
let (r22, carry5) ← arithmetic.fields.mac r21 i1 i1 carry4
let (r33, carry6) ← arithmetic.fields.adc 0#u64 r32 carry5
let (r43, carry7) ← arithmetic.fields.mac r42 i2 i2 carry6
let (r53, carry8) ← arithmetic.fields.adc 0#u64 r52 carry7
let (r62, carry9) ← arithmetic.fields.mac r61 i3 i3 carry8
let (r71, _) ← arithmetic.fields.adc 0#u64 r7 carry9
ok (Array.make 8#usize [ r0, r12, r22, r33, r43, r53, r62, r71 ])
/-- [pasta_curves::fields::fp::{pasta_curves::fields::fp::Fp}::square]:
Source: 'src/fields/fp.rs', lines 312:4-315:5
Visibility: public -/
def fields.fp.Fp.square (self : fields.fp.Fp) : Result fields.fp.Fp := do
let u ← fields.fp.Fp.square_unreduced self
let i ← Array.index_usize u 0#usize
let i1 ← Array.index_usize u 1#usize
let i2 ← Array.index_usize u 2#usize
let i3 ← Array.index_usize u 3#usize
let i4 ← Array.index_usize u 4#usize
let i5 ← Array.index_usize u 5#usize
let i6 ← Array.index_usize u 6#usize
let i7 ← Array.index_usize u 7#usize
fields.fp.Fp.montgomery_reduce i i1 i2 i3 i4 i5 i6 i7
/-- [pasta_curves::fields::fp::{impl ff::PrimeField<[u8; 32usize]> for pasta_curves::fields::fp::Fp}::to_repr]:
Source: 'src/fields/fp.rs', lines 674:4-686:5
Visibility: public -/
def fields.fp.Fp.Insts.FfPrimeFieldArrayU832.to_repr
(self : fields.fp.Fp) : Result (Array Std.U8 32#usize) := do
let i ← Array.index_usize self 0#usize
let i1 ← Array.index_usize self 1#usize
let i2 ← Array.index_usize self 2#usize
let i3 ← Array.index_usize self 3#usize
let tmp ← fields.fp.Fp.montgomery_reduce i i1 i2 i3 0#u64 0#u64 0#u64 0#u64
let res := Array.repeat 32#usize 0#u8
let (s, index_mut_back) ←
core.array.Array.index_mut (core.ops.index.IndexMutSlice
(core.slice.index.SliceIndexRangeUsizeSlice Std.U8)) res
{ start := 0#usize, «end» := 8#usize }
let i4 ← Array.index_usize tmp 0#usize
let a ← lift (core.num.U64.to_le_bytes i4)
let s1 ← lift (Array.to_slice a)
let s2 ← core.slice.Slice.copy_from_slice core.marker.CopyU8 s s1
let res1 := index_mut_back s2
let (s3, index_mut_back1) ←
core.array.Array.index_mut (core.ops.index.IndexMutSlice
(core.slice.index.SliceIndexRangeUsizeSlice Std.U8)) res1
{ start := 8#usize, «end» := 16#usize }
let i5 ← Array.index_usize tmp 1#usize
let a1 ← lift (core.num.U64.to_le_bytes i5)
let s4 ← lift (Array.to_slice a1)
let s5 ← core.slice.Slice.copy_from_slice core.marker.CopyU8 s3 s4
let res2 := index_mut_back1 s5
let (s6, index_mut_back2) ←
core.array.Array.index_mut (core.ops.index.IndexMutSlice
(core.slice.index.SliceIndexRangeUsizeSlice Std.U8)) res2
{ start := 16#usize, «end» := 24#usize }
let i6 ← Array.index_usize tmp 2#usize
let a2 ← lift (core.num.U64.to_le_bytes i6)
let s7 ← lift (Array.to_slice a2)
let s8 ← core.slice.Slice.copy_from_slice core.marker.CopyU8 s6 s7
let res3 := index_mut_back2 s8
let (s9, index_mut_back3) ←
core.array.Array.index_mut (core.ops.index.IndexMutSlice
(core.slice.index.SliceIndexRangeUsizeSlice Std.U8)) res3
{ start := 24#usize, «end» := 32#usize }
let i7 ← Array.index_usize tmp 3#usize
let a3 ← lift (core.num.U64.to_le_bytes i7)
let s10 ← lift (Array.to_slice a3)
let s11 ← core.slice.Slice.copy_from_slice core.marker.CopyU8 s9 s10
ok (index_mut_back3 s11)
/-- [pasta_curves::fields::fp::{impl core::convert::From<pasta_curves::fields::fp::Fp> for [u8; 32usize]}::from]:
Source: 'src/fields/fp.rs', lines 513:4-515:5
Visibility: public -/
def ArrayU832.Insts.CoreConvertFromFp.from
(value : fields.fp.Fp) : Result (Array Std.U8 32#usize) := do
fields.fp.Fp.Insts.FfPrimeFieldArrayU832.to_repr value
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::convert::From<pasta_curves::fields::fp::Fp> for [u8; 32usize]}]
Source: 'src/fields/fp.rs', lines 512:0-516:1 -/
@[reducible]
def ArrayU832.Insts.CoreConvertFromFp : core.convert.From (Array Std.U8
32#usize) fields.fp.Fp := {
from_ := ArrayU832.Insts.CoreConvertFromFp.from
}
/-- [pasta_curves::fields::fp::{impl core::convert::From<&'a pasta_curves::fields::fp::Fp> for [u8; 32usize]}::from]:
Source: 'src/fields/fp.rs', lines 519:4-521:5
Visibility: public -/
def ArrayU832.Insts.CoreConvertFromSharedAFp.from
(value : fields.fp.Fp) : Result (Array Std.U8 32#usize) := do
fields.fp.Fp.Insts.FfPrimeFieldArrayU832.to_repr value
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::convert::From<&'a pasta_curves::fields::fp::Fp> for [u8; 32usize]}]
Source: 'src/fields/fp.rs', lines 518:0-522:1 -/
@[reducible]
def ArrayU832.Insts.CoreConvertFromSharedAFp : core.convert.From (Array Std.U8
32#usize) fields.fp.Fp := {
from_ := ArrayU832.Insts.CoreConvertFromSharedAFp.from
}
/-- [pasta_curves::fields::fp::{impl core::ops::arith::MulAssign<&'b pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}::mul_assign]:
Source: 'src/macros.rs', lines 148:12-150:13
Visibility: public -/
def fields.fp.Fp.Insts.CoreOpsArithMulAssignSharedBFp.mul_assign
(self : fields.fp.Fp) (rhs : fields.fp.Fp) : Result fields.fp.Fp := do
SharedAFp.Insts.CoreOpsArithMulSharedBFpFp.mul self rhs
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::ops::arith::MulAssign<&'b pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}]
Source: 'src/macros.rs', lines 146:8-151:9 -/
@[reducible]
def fields.fp.Fp.Insts.CoreOpsArithMulAssignSharedBFp :
core.ops.arith.MulAssign fields.fp.Fp fields.fp.Fp := {
mul_assign := fields.fp.Fp.Insts.CoreOpsArithMulAssignSharedBFp.mul_assign
}
/-- [pasta_curves::fields::fp::{impl core::ops::arith::MulAssign<pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}::mul_assign]:
Source: 'src/macros.rs', lines 141:12-143:13
Visibility: public -/
def fields.fp.Fp.Insts.CoreOpsArithMulAssignFp.mul_assign
(self : fields.fp.Fp) (rhs : fields.fp.Fp) : Result fields.fp.Fp := do
SharedAFp.Insts.CoreOpsArithMulSharedBFpFp.mul self rhs
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::ops::arith::MulAssign<pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}]
Source: 'src/macros.rs', lines 139:8-144:9 -/
@[reducible]
def fields.fp.Fp.Insts.CoreOpsArithMulAssignFp : core.ops.arith.MulAssign
fields.fp.Fp fields.fp.Fp := {
mul_assign := fields.fp.Fp.Insts.CoreOpsArithMulAssignFp.mul_assign
}
/-- [pasta_curves::fields::fp::{impl core::ops::arith::AddAssign<&'b pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}::add_assign]:
Source: 'src/macros.rs', lines 128:12-130:13
Visibility: public -/
def fields.fp.Fp.Insts.CoreOpsArithAddAssignSharedBFp.add_assign
(self : fields.fp.Fp) (rhs : fields.fp.Fp) : Result fields.fp.Fp := do
SharedAFp.Insts.CoreOpsArithAddSharedBFpFp.add self rhs
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::ops::arith::AddAssign<&'b pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}]
Source: 'src/macros.rs', lines 126:8-131:9 -/
@[reducible]
def fields.fp.Fp.Insts.CoreOpsArithAddAssignSharedBFp :
core.ops.arith.AddAssign fields.fp.Fp fields.fp.Fp := {
add_assign := fields.fp.Fp.Insts.CoreOpsArithAddAssignSharedBFp.add_assign
}
/-- [pasta_curves::fields::fp::{impl core::ops::arith::SubAssign<&'b pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}::sub_assign]:
Source: 'src/macros.rs', lines 121:12-123:13
Visibility: public -/
def fields.fp.Fp.Insts.CoreOpsArithSubAssignSharedBFp.sub_assign
(self : fields.fp.Fp) (rhs : fields.fp.Fp) : Result fields.fp.Fp := do
SharedAFp.Insts.CoreOpsArithSubSharedBFpFp.sub self rhs
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::ops::arith::SubAssign<&'b pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}]
Source: 'src/macros.rs', lines 119:8-124:9 -/
@[reducible]
def fields.fp.Fp.Insts.CoreOpsArithSubAssignSharedBFp :
core.ops.arith.SubAssign fields.fp.Fp fields.fp.Fp := {
sub_assign := fields.fp.Fp.Insts.CoreOpsArithSubAssignSharedBFp.sub_assign
}
/-- [pasta_curves::fields::fp::{impl core::ops::arith::AddAssign<pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}::add_assign]:
Source: 'src/macros.rs', lines 114:12-116:13
Visibility: public -/
def fields.fp.Fp.Insts.CoreOpsArithAddAssignFp.add_assign
(self : fields.fp.Fp) (rhs : fields.fp.Fp) : Result fields.fp.Fp := do
SharedAFp.Insts.CoreOpsArithAddSharedBFpFp.add self rhs
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::ops::arith::AddAssign<pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}]
Source: 'src/macros.rs', lines 112:8-117:9 -/
@[reducible]
def fields.fp.Fp.Insts.CoreOpsArithAddAssignFp : core.ops.arith.AddAssign
fields.fp.Fp fields.fp.Fp := {
add_assign := fields.fp.Fp.Insts.CoreOpsArithAddAssignFp.add_assign
}
/-- [pasta_curves::fields::fp::{impl core::ops::arith::SubAssign<pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}::sub_assign]:
Source: 'src/macros.rs', lines 107:12-109:13
Visibility: public -/
def fields.fp.Fp.Insts.CoreOpsArithSubAssignFp.sub_assign
(self : fields.fp.Fp) (rhs : fields.fp.Fp) : Result fields.fp.Fp := do
SharedAFp.Insts.CoreOpsArithSubSharedBFpFp.sub self rhs
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::ops::arith::SubAssign<pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}]
Source: 'src/macros.rs', lines 105:8-110:9 -/
@[reducible]
def fields.fp.Fp.Insts.CoreOpsArithSubAssignFp : core.ops.arith.SubAssign
fields.fp.Fp fields.fp.Fp := {
sub_assign := fields.fp.Fp.Insts.CoreOpsArithSubAssignFp.sub_assign
}
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::ops::arith::Mul<pasta_curves::fields::fp::Fp, pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}]
Source: 'src/macros.rs', lines 90:8-97:9 -/
@[reducible]
def fields.fp.Fp.Insts.CoreOpsArithMulFpFp : core.ops.arith.Mul fields.fp.Fp
fields.fp.Fp fields.fp.Fp := {
mul := fields.fp.Fp.Insts.CoreOpsArithMulFpFp.mul
}
/-- [pasta_curves::fields::fp::{impl core::ops::arith::Mul<&'b pasta_curves::fields::fp::Fp, pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}::mul]:
Source: 'src/macros.rs', lines 76:12-78:13
Visibility: public -/
def fields.fp.Fp.Insts.CoreOpsArithMulSharedBFpFp.mul
(self : fields.fp.Fp) (rhs : fields.fp.Fp) : Result fields.fp.Fp := do
SharedAFp.Insts.CoreOpsArithMulSharedBFpFp.mul self rhs
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::ops::arith::Mul<&'b pasta_curves::fields::fp::Fp, pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}]
Source: 'src/macros.rs', lines 72:8-79:9 -/
@[reducible]
def fields.fp.Fp.Insts.CoreOpsArithMulSharedBFpFp : core.ops.arith.Mul
fields.fp.Fp fields.fp.Fp fields.fp.Fp := {
mul := fields.fp.Fp.Insts.CoreOpsArithMulSharedBFpFp.mul
}
/-- [pasta_curves::fields::fp::{impl core::ops::arith::Sub<pasta_curves::fields::fp::Fp, pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}::sub]:
Source: 'src/macros.rs', lines 56:12-58:13
Visibility: public -/
def fields.fp.Fp.Insts.CoreOpsArithSubFpFp.sub
(self : fields.fp.Fp) (rhs : fields.fp.Fp) : Result fields.fp.Fp := do
SharedAFp.Insts.CoreOpsArithSubSharedBFpFp.sub self rhs
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::ops::arith::Sub<pasta_curves::fields::fp::Fp, pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}]
Source: 'src/macros.rs', lines 52:8-59:9 -/
@[reducible]
def fields.fp.Fp.Insts.CoreOpsArithSubFpFp : core.ops.arith.Sub fields.fp.Fp
fields.fp.Fp fields.fp.Fp := {
sub := fields.fp.Fp.Insts.CoreOpsArithSubFpFp.sub
}
/-- [pasta_curves::fields::fp::{impl core::ops::arith::Sub<&'b pasta_curves::fields::fp::Fp, pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}::sub]:
Source: 'src/macros.rs', lines 38:12-40:13
Visibility: public -/
def fields.fp.Fp.Insts.CoreOpsArithSubSharedBFpFp.sub
(self : fields.fp.Fp) (rhs : fields.fp.Fp) : Result fields.fp.Fp := do
SharedAFp.Insts.CoreOpsArithSubSharedBFpFp.sub self rhs
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::ops::arith::Sub<&'b pasta_curves::fields::fp::Fp, pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}]
Source: 'src/macros.rs', lines 34:8-41:9 -/
@[reducible]
def fields.fp.Fp.Insts.CoreOpsArithSubSharedBFpFp : core.ops.arith.Sub
fields.fp.Fp fields.fp.Fp fields.fp.Fp := {
sub := fields.fp.Fp.Insts.CoreOpsArithSubSharedBFpFp.sub
}
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::ops::arith::Add<pasta_curves::fields::fp::Fp, pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}]
Source: 'src/macros.rs', lines 21:8-28:9 -/
@[reducible]
def fields.fp.Fp.Insts.CoreOpsArithAddFpFp : core.ops.arith.Add fields.fp.Fp
fields.fp.Fp fields.fp.Fp := {
add := fields.fp.Fp.Insts.CoreOpsArithAddFpFp.add
}
/-- [pasta_curves::fields::fp::{impl core::ops::arith::Add<&'b pasta_curves::fields::fp::Fp, pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}::add]:
Source: 'src/macros.rs', lines 7:12-9:13
Visibility: public -/
def fields.fp.Fp.Insts.CoreOpsArithAddSharedBFpFp.add
(self : fields.fp.Fp) (rhs : fields.fp.Fp) : Result fields.fp.Fp := do
SharedAFp.Insts.CoreOpsArithAddSharedBFpFp.add self rhs
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::ops::arith::Add<&'b pasta_curves::fields::fp::Fp, pasta_curves::fields::fp::Fp> for pasta_curves::fields::fp::Fp}]
Source: 'src/macros.rs', lines 3:8-10:9 -/
@[reducible]
def fields.fp.Fp.Insts.CoreOpsArithAddSharedBFpFp : core.ops.arith.Add
fields.fp.Fp fields.fp.Fp fields.fp.Fp := {
add := fields.fp.Fp.Insts.CoreOpsArithAddSharedBFpFp.add
}
/-- [pasta_curves::fields::fp::{impl ff::Field for pasta_curves::fields::fp::Fp}::pow_vartime]: loop body 1:
Source: 'src/fields/fp.rs', lines 604:12-614:13
Visibility: public -/
@[rust_loop_body]
def fields.fp.Fp.Insts.FfField.pow_vartime_loop0_loop0.body
(self : fields.fp.Fp) (e : Std.U64) (res : fields.fp.Fp) (found_one : Bool)
(i : Std.U32) :
Result (ControlFlow (fields.fp.Fp × Bool × Std.U32) (fields.fp.Fp × Bool))
:= do
if i > 0#u32
then
let i1 ← i - 1#u32
let res1 ← if found_one
then fields.fp.Fp.square res
else ok res
let i2 ← e >>> i1
let i3 ← lift (i2 &&& 1#u64)
if i3 = 1#u64
then
let res2 ←
fields.fp.Fp.Insts.CoreOpsArithMulAssignSharedBFp.mul_assign res1 self
ok (cont (res2, true, i1))
else ok (cont (res1, found_one, i1))
else ok (done (res, found_one))
/-- [pasta_curves::fields::fp::{impl ff::Field for pasta_curves::fields::fp::Fp}::pow_vartime]: loop 1:
Source: 'src/fields/fp.rs', lines 604:12-614:13
Visibility: public -/
@[rust_loop]
def fields.fp.Fp.Insts.FfField.pow_vartime_loop0_loop0
(self : fields.fp.Fp) (res : fields.fp.Fp) (found_one : Bool) (e : Std.U64)
(i : Std.U32) :
Result (fields.fp.Fp × Bool)
:= do
loop
(fun (res1, found_one1, i1) =>
fields.fp.Fp.Insts.FfField.pow_vartime_loop0_loop0.body self e res1
found_one1 i1)
(res, found_one, i)
/-- [pasta_curves::fields::fp::{impl ff::Field for pasta_curves::fields::fp::Fp}::pow_vartime]: loop body 0:
Source: 'src/fields/fp.rs', lines 600:8-615:9
Visibility: public -/
@[rust_loop_body]
def fields.fp.Fp.Insts.FfField.pow_vartime_loop0.body
(self : fields.fp.Fp) (exp : Slice Std.U64) (res : fields.fp.Fp)
(found_one : Bool) (j : Std.Usize) :
Result (ControlFlow (fields.fp.Fp × Bool × Std.Usize) fields.fp.Fp)
:= do
if j > 0#usize
then
let j1 ← j - 1#usize
let e ← Slice.index_usize exp j1
let (res1, found_one1) ←
fields.fp.Fp.Insts.FfField.pow_vartime_loop0_loop0 self res found_one e
64#u32
ok (cont (res1, found_one1, j1))
else ok (done res)
/-- [pasta_curves::fields::fp::{impl ff::Field for pasta_curves::fields::fp::Fp}::pow_vartime]: loop 0:
Source: 'src/fields/fp.rs', lines 600:8-615:9
Visibility: public -/
@[rust_loop]
def fields.fp.Fp.Insts.FfField.pow_vartime_loop0
(self : fields.fp.Fp) (res : fields.fp.Fp) (found_one : Bool)
(exp : Slice Std.U64) (j : Std.Usize) :
Result fields.fp.Fp
:= do
loop
(fun (res1, found_one1, j1) =>
fields.fp.Fp.Insts.FfField.pow_vartime_loop0.body self exp res1
found_one1 j1)
(res, found_one, j)
/-- [pasta_curves::fields::fp::{impl ff::Field for pasta_curves::fields::fp::Fp}::pow_vartime]:
Source: 'src/fields/fp.rs', lines 590:4-617:5
Visibility: public -/
def fields.fp.Fp.Insts.FfField.pow_vartime
{S : Type} (coreconvertAsRefSSliceU64Inst : core.convert.AsRef S (Slice
Std.U64)) (self : fields.fp.Fp) (exp : S) :
Result fields.fp.Fp
:= do
let res ← fields.fp.Fp.one
let exp1 ← coreconvertAsRefSSliceU64Inst.as_ref exp
let j := Slice.len exp1
fields.fp.Fp.Insts.FfField.pow_vartime_loop0 self res false exp1 j
/-- [pasta_curves::fields::fp::{impl ff::Field for pasta_curves::fields::fp::Fp}::invert]:
Source: 'src/fields/fp.rs', lines 579:4-588:5
Visibility: public -/
def fields.fp.Fp.Insts.FfField.invert
(self : fields.fp.Fp) : Result (subtle.CtOption fields.fp.Fp) := do
let tmp ←
fields.fp.Fp.Insts.FfField.pow_vartime (Shared0T.Insts.CoreConvertAsRef
(Array.Insts.CoreConvertAsRefSlice Std.U64 4#usize)) self
(Array.make 4#usize [
11037532056220336127#u64, 2469829653914515739#u64, 0#u64,
4611686018427387904#u64
])
let f ← fields.fp.Fp.zero
let c ← fields.fp.Fp.Insts.SubtleConstantTimeEq.ct_eq self f
let c1 ← subtle.Choice.Insts.CoreOpsBitNotChoice.not c
subtle.CtOption.new tmp c1
/-- [pasta_curves::fields::fp::{impl ff::Field for pasta_curves::fields::fp::Fp}::square]:
Source: 'src/fields/fp.rs', lines 546:4-548:5
Visibility: public -/
def fields.fp.Fp.Insts.FfField.square
(self : fields.fp.Fp) : Result fields.fp.Fp := do
fields.fp.Fp.square self
/-- [pasta_curves::fields::fp::{impl ff::Field for pasta_curves::fields::fp::Fp}::double]:
Source: 'src/fields/fp.rs', lines 541:4-543:5
Visibility: public -/
def fields.fp.Fp.Insts.FfField.double
(self : fields.fp.Fp) : Result fields.fp.Fp := do
fields.fp.Fp.double self
/-- [pasta_curves::fields::fp::{impl ff::Field for pasta_curves::fields::fp::Fp}::ONE]
Source: 'src/fields/fp.rs', lines 526:4-526:34
Visibility: public -/
@[global_simps, irreducible]
def fields.fp.Fp.Insts.FfField.ONE : Result fields.fp.Fp := fields.fp.Fp.one
/-- [pasta_curves::fields::fp::{impl ff::Field for pasta_curves::fields::fp::Fp}::ZERO]
Source: 'src/fields/fp.rs', lines 525:4-525:36
Visibility: public -/
@[global_simps, irreducible]
def fields.fp.Fp.Insts.FfField.ZERO : Result fields.fp.Fp := fields.fp.Fp.zero
/-- Trait implementation: [pasta_curves::fields::fp::{impl ff::Field for pasta_curves::fields::fp::Fp}]
Source: 'src/fields/fp.rs', lines 524:0-618:1 -/
@[reducible]
def fields.fp.Fp.Insts.FfField : ff.Field fields.fp.Fp := {
ZERO := fields.fp.Fp.Insts.FfField.ZERO
ONE := fields.fp.Fp.Insts.FfField.ONE
corecmpEqInst := fields.fp.Fp.Insts.CoreCmpEq
coremarkerCopyInst := fields.fp.Fp.Insts.CoreMarkerCopy
corecloneCloneInst := fields.fp.Fp.Insts.CoreCloneClone
coredefaultDefaultInst := fields.fp.Fp.Insts.CoreDefaultDefault
corefmtDebugInst := fields.fp.Fp.Insts.CoreFmtDebug
subtleConditionallySelectableInst :=
fields.fp.Fp.Insts.SubtleConditionallySelectable
subtleConstantTimeEqInst := fields.fp.Fp.Insts.SubtleConstantTimeEq
coreopsarithNegInst := fields.fp.Fp.Insts.CoreOpsArithNegFp
coreopsarithAddInst := fields.fp.Fp.Insts.CoreOpsArithAddFpFp
coreopsarithSubInst := fields.fp.Fp.Insts.CoreOpsArithSubFpFp
coreopsarithMulInst := fields.fp.Fp.Insts.CoreOpsArithMulFpFp
coreitertraitsaccumSumInst := fields.fp.Fp.Insts.CoreIterTraitsAccumSum
(core.borrow.Borrow.Blanket fields.fp.Fp)
coreitertraitsaccumProductInst :=
fields.fp.Fp.Insts.CoreIterTraitsAccumProduct (core.borrow.Borrow.Blanket
fields.fp.Fp)
coreopsarithAddSelfSharedSelfSelfInst :=
fields.fp.Fp.Insts.CoreOpsArithAddSharedBFpFp
coreopsarithSubSelfSharedSelfSelfInst :=
fields.fp.Fp.Insts.CoreOpsArithSubSharedBFpFp
coreopsarithMulSelfSharedSelfSelfInst :=
fields.fp.Fp.Insts.CoreOpsArithMulSharedBFpFp
coreitertraitsaccumSumSelfSharedSelfInst :=
fields.fp.Fp.Insts.CoreIterTraitsAccumSum (Shared0T.Insts.CoreBorrowBorrow
fields.fp.Fp)
coreitertraitsaccumProductSelfSharedSelfInst :=
fields.fp.Fp.Insts.CoreIterTraitsAccumProduct
(Shared0T.Insts.CoreBorrowBorrow fields.fp.Fp)
coreopsarithAddAssignInst := fields.fp.Fp.Insts.CoreOpsArithAddAssignFp
coreopsarithSubAssignInst := fields.fp.Fp.Insts.CoreOpsArithSubAssignFp
coreopsarithMulAssignInst := fields.fp.Fp.Insts.CoreOpsArithMulAssignFp
coreopsarithAddAssignSelfSharedSelfInst :=
fields.fp.Fp.Insts.CoreOpsArithAddAssignSharedBFp
coreopsarithSubAssignSelfSharedSelfInst :=
fields.fp.Fp.Insts.CoreOpsArithSubAssignSharedBFp
coreopsarithMulAssignSelfSharedSelfInst :=
fields.fp.Fp.Insts.CoreOpsArithMulAssignSharedBFp
random := fun {T0 : Type} (rand_coreRngCoreInst : rand_core.RngCore T0) =>
fields.fp.Fp.Insts.FfField.random rand_coreRngCoreInst
square := fields.fp.Fp.Insts.FfField.square
double := fields.fp.Fp.Insts.FfField.double
invert := fields.fp.Fp.Insts.FfField.invert
sqrt_ratio := fields.fp.Fp.Insts.FfField.sqrt_ratio
sqrt := fields.fp.Fp.Insts.FfField.sqrt
pow_vartime := fun {S : Type} (coreconvertAsRefPSliceU64Inst :
core.convert.AsRef S (Slice Std.U64)) =>
fields.fp.Fp.Insts.FfField.pow_vartime coreconvertAsRefPSliceU64Inst
}
/-- [pasta_curves::fields::fp::{impl ff::PrimeField<[u8; 32usize]> for pasta_curves::fields::fp::Fp}::is_odd]:
Source: 'src/fields/fp.rs', lines 688:4-690:5
Visibility: public -/
def fields.fp.Fp.Insts.FfPrimeFieldArrayU832.is_odd
(self : fields.fp.Fp) : Result subtle.Choice := do
let a ← fields.fp.Fp.Insts.FfPrimeFieldArrayU832.to_repr self
let i ← Array.index_usize a 0#usize
let i1 ← lift (i &&& 1#u8)
subtle.Choice.Insts.CoreConvertFromU8.from i1
/-- [pasta_curves::fields::fp::{impl ff::PrimeField<[u8; 32usize]> for pasta_curves::fields::fp::Fp}::from_repr]:
Source: 'src/fields/fp.rs', lines 648:4-672:5
Visibility: public -/
def fields.fp.Fp.Insts.FfPrimeFieldArrayU832.from_repr
(repr : Array Std.U8 32#usize) : Result (subtle.CtOption fields.fp.Fp) := do
let a := Array.repeat 4#usize 0#u64
let s ←
core.array.Array.index (core.ops.index.IndexSlice
(core.slice.index.SliceIndexRangeUsizeSlice Std.U8)) repr
{ start := 0#usize, «end» := 8#usize }
let r ←
core.array.TryFromArrayCopySlice.try_from 8#usize core.marker.CopyU8 s
let a1 ← core.result.Result.unwrap core.fmt.DebugTryFromSliceError r
let i ← lift (core.num.U64.from_le_bytes a1)
let a2 ← Array.update a 0#usize i
let s1 ←
core.array.Array.index (core.ops.index.IndexSlice
(core.slice.index.SliceIndexRangeUsizeSlice Std.U8)) repr
{ start := 8#usize, «end» := 16#usize }
let r1 ←
core.array.TryFromArrayCopySlice.try_from 8#usize core.marker.CopyU8 s1
let a3 ← core.result.Result.unwrap core.fmt.DebugTryFromSliceError r1
let i1 ← lift (core.num.U64.from_le_bytes a3)
let a4 ← Array.update a2 1#usize i1
let s2 ←
core.array.Array.index (core.ops.index.IndexSlice
(core.slice.index.SliceIndexRangeUsizeSlice Std.U8)) repr
{ start := 16#usize, «end» := 24#usize }
let r2 ←
core.array.TryFromArrayCopySlice.try_from 8#usize core.marker.CopyU8 s2
let a5 ← core.result.Result.unwrap core.fmt.DebugTryFromSliceError r2
let i2 ← lift (core.num.U64.from_le_bytes a5)
let a6 ← Array.update a4 2#usize i2
let s3 ←
core.array.Array.index (core.ops.index.IndexSlice
(core.slice.index.SliceIndexRangeUsizeSlice Std.U8)) repr
{ start := 24#usize, «end» := 32#usize }
let r3 ←
core.array.TryFromArrayCopySlice.try_from 8#usize core.marker.CopyU8 s3
let a7 ← core.result.Result.unwrap core.fmt.DebugTryFromSliceError r3
let i3 ← lift (core.num.U64.from_le_bytes a7)
let a8 ← Array.update a6 3#usize i3
let i4 ← Array.index_usize a8 0#usize
let a9 := fields.fp.MODULUS
let i5 ← Array.index_usize a9 0#usize
let (_, borrow) ← arithmetic.fields.sbb i4 i5 0#u64
let i6 ← Array.index_usize a8 1#usize
let a10 := fields.fp.MODULUS
let i7 ← Array.index_usize a10 1#usize
let (_, borrow1) ← arithmetic.fields.sbb i6 i7 borrow
let i8 ← Array.index_usize a8 2#usize
let a11 := fields.fp.MODULUS
let i9 ← Array.index_usize a11 2#usize
let (_, borrow2) ← arithmetic.fields.sbb i8 i9 borrow1
let i10 ← Array.index_usize a8 3#usize
let a12 := fields.fp.MODULUS
let i11 ← Array.index_usize a12 3#usize
let (_, borrow3) ← arithmetic.fields.sbb i10 i11 borrow2
let i12 ← lift (UScalar.cast .U8 borrow3)
let is_some ← lift (i12 &&& 1#u8)
let tmp ←
fields.fp.Fp.Insts.CoreOpsArithMulAssignSharedBFp.mul_assign a8
fields.fp.R2
let c ← subtle.Choice.Insts.CoreConvertFromU8.from is_some
subtle.CtOption.new tmp c
/-- [pasta_curves::fields::fp::{impl ff::PrimeField<[u8; 32usize]> for pasta_curves::fields::fp::Fp}::from_u128]:
Source: 'src/fields/fp.rs', lines 644:4-646:5
Visibility: public -/
def fields.fp.Fp.Insts.FfPrimeFieldArrayU832.from_u128
(v : Std.U128) : Result fields.fp.Fp := do
let i ← lift (UScalar.cast .U64 v)
let i1 ← v >>> 64#i32
let i2 ← lift (UScalar.cast .U64 i1)
fields.fp.Fp.from_raw (Array.make 4#usize [ i, i2, 0#u64, 0#u64 ])
/-- [pasta_curves::fields::fp::{impl ff::PrimeField<[u8; 32usize]> for pasta_curves::fields::fp::Fp}::DELTA]
Source: 'src/fields/fp.rs', lines 642:4-642:30
Visibility: public -/
@[global_simps, irreducible]
def fields.fp.Fp.Insts.FfPrimeFieldArrayU832.DELTA : Result fields.fp.Fp :=
fields.fp.DELTA
/-- [pasta_curves::fields::fp::{impl ff::PrimeField<[u8; 32usize]> for pasta_curves::fields::fp::Fp}::ROOT_OF_UNITY_INV]
Source: 'src/fields/fp.rs', lines 636:4-641:7
Visibility: public -/
@[global_simps, irreducible]
def fields.fp.Fp.Insts.FfPrimeFieldArrayU832.ROOT_OF_UNITY_INV
: Result fields.fp.Fp :=
fields.fp.Fp.from_raw
(Array.make 4#usize [
17345750844130103798#u64, 9556816360606991983#u64,
13037233058361039569#u64, 3230532478545521500#u64
])
/-- [pasta_curves::fields::fp::{impl ff::PrimeField<[u8; 32usize]> for pasta_curves::fields::fp::Fp}::ROOT_OF_UNITY]
Source: 'src/fields/fp.rs', lines 635:4-635:46
Visibility: public -/
@[global_simps, irreducible]
def fields.fp.Fp.Insts.FfPrimeFieldArrayU832.ROOT_OF_UNITY
: Result fields.fp.Fp :=
fields.fp.ROOT_OF_UNITY
/-- [pasta_curves::fields::fp::{impl ff::PrimeField<[u8; 32usize]> for pasta_curves::fields::fp::Fp}::S]
Source: 'src/fields/fp.rs', lines 634:4-634:21
Visibility: public -/
@[global_simps, irreducible]
def fields.fp.Fp.Insts.FfPrimeFieldArrayU832.S : Std.U32 := fields.fp.S
/-- [pasta_curves::fields::fp::{impl ff::PrimeField<[u8; 32usize]> for pasta_curves::fields::fp::Fp}::MULTIPLICATIVE_GENERATOR]
Source: 'src/fields/fp.rs', lines 633:4-633:53
Visibility: public -/
@[global_simps, irreducible]
def fields.fp.Fp.Insts.FfPrimeFieldArrayU832.MULTIPLICATIVE_GENERATOR
: Result fields.fp.Fp :=
fields.fp.GENERATOR
/-- [pasta_curves::fields::fp::{impl ff::PrimeField<[u8; 32usize]> for pasta_curves::fields::fp::Fp}::CAPACITY]
Source: 'src/fields/fp.rs', lines 632:4-632:30
Visibility: public -/
@[global_simps, irreducible]
def fields.fp.Fp.Insts.FfPrimeFieldArrayU832.CAPACITY : Std.U32 := 254#u32
/-- [pasta_curves::fields::fp::{impl ff::PrimeField<[u8; 32usize]> for pasta_curves::fields::fp::Fp}::NUM_BITS]
Source: 'src/fields/fp.rs', lines 631:4-631:30
Visibility: public -/
@[global_simps, irreducible]
def fields.fp.Fp.Insts.FfPrimeFieldArrayU832.NUM_BITS : Std.U32 := 255#u32
/-- [pasta_curves::fields::fp::{impl ff::PrimeField<[u8; 32usize]> for pasta_curves::fields::fp::Fp}::TWO_INV]
Source: 'src/fields/fp.rs', lines 625:4-630:7
Visibility: public -/
@[global_simps, irreducible]
def fields.fp.Fp.Insts.FfPrimeFieldArrayU832.TWO_INV : Result fields.fp.Fp :=
fields.fp.Fp.from_raw
(Array.make 4#usize [
14742138064964943873#u64, 1234914826957257869#u64, 0#u64,
2305843009213693952#u64
])
/-- [pasta_curves::fields::fp::{impl ff::PrimeField<[u8; 32usize]> for pasta_curves::fields::fp::Fp}::MODULUS]
Source: 'src/fields/fp.rs', lines 623:4-624:77
Visibility: public -/
@[global_simps, irreducible]
def fields.fp.Fp.Insts.FfPrimeFieldArrayU832.MODULUS : Str :=
toStr "0x40000000000000000000000000000000224698fc094cf91b992d30ed00000001"
/-- Trait implementation: [pasta_curves::fields::fp::{impl ff::PrimeField<[u8; 32usize]> for pasta_curves::fields::fp::Fp}]
Source: 'src/fields/fp.rs', lines 620:0-691:1 -/
@[reducible]
def fields.fp.Fp.Insts.FfPrimeFieldArrayU832 : ff.PrimeField fields.fp.Fp
(Array Std.U8 32#usize) := {
MODULUS := ok fields.fp.Fp.Insts.FfPrimeFieldArrayU832.MODULUS
NUM_BITS := ok fields.fp.Fp.Insts.FfPrimeFieldArrayU832.NUM_BITS
CAPACITY := ok fields.fp.Fp.Insts.FfPrimeFieldArrayU832.CAPACITY
TWO_INV := fields.fp.Fp.Insts.FfPrimeFieldArrayU832.TWO_INV
MULTIPLICATIVE_GENERATOR :=
fields.fp.Fp.Insts.FfPrimeFieldArrayU832.MULTIPLICATIVE_GENERATOR
S := ok fields.fp.Fp.Insts.FfPrimeFieldArrayU832.S
ROOT_OF_UNITY := fields.fp.Fp.Insts.FfPrimeFieldArrayU832.ROOT_OF_UNITY
ROOT_OF_UNITY_INV :=
fields.fp.Fp.Insts.FfPrimeFieldArrayU832.ROOT_OF_UNITY_INV
DELTA := fields.fp.Fp.Insts.FfPrimeFieldArrayU832.DELTA
FieldInst := fields.fp.Fp.Insts.FfField
coreconvertFromSelfU64Inst := fields.fp.Fp.Insts.CoreConvertFromU64
coremarkerCopyInst := Array.Insts.CoreMarkerCopy 32#usize core.marker.CopyU8
coredefaultDefaultInst := core.default.DefaultArray 32#usize
core.default.DefaultU8
coreconvertAsRefSelf_ReprSliceU8Inst := Array.Insts.CoreConvertAsRefSlice
Std.U8 32#usize
coreconvertAsMutSelf_ReprSliceU8Inst := Array.Insts.CoreConvertAsMutSlice
Std.U8 32#usize
from_u128 := fields.fp.Fp.Insts.FfPrimeFieldArrayU832.from_u128
from_repr := fields.fp.Fp.Insts.FfPrimeFieldArrayU832.from_repr
to_repr := fields.fp.Fp.Insts.FfPrimeFieldArrayU832.to_repr
is_odd := fields.fp.Fp.Insts.FfPrimeFieldArrayU832.is_odd
}
/-- Trait implementation: [pasta_curves::fields::fp::{impl pasta_curves::arithmetic::fields::SqrtTableHelpers<[u8; 32usize]> for pasta_curves::fields::fp::Fp}]
Source: 'src/fields/fp.rs', lines 748:0-786:1 -/
@[reducible]
def fields.fp.Fp.Insts.Pasta_curvesArithmeticFieldsSqrtTableHelpersArrayU832 :
arithmetic.fields.SqrtTableHelpers fields.fp.Fp (Array Std.U8 32#usize) := {
ffPrimeFieldInst := fields.fp.Fp.Insts.FfPrimeFieldArrayU832
pow_by_t_minus1_over2 :=
fields.fp.Fp.Insts.Pasta_curvesArithmeticFieldsSqrtTableHelpersArrayU832.pow_by_t_minus1_over2
get_lower_32 :=
fields.fp.Fp.Insts.Pasta_curvesArithmeticFieldsSqrtTableHelpersArrayU832.get_lower_32
}
/-- Trait implementation: [pasta_curves::fields::fp::{impl ff::WithSmallOrderMulGroup<[u8; 32usize], 3u8> for pasta_curves::fields::fp::Fp}]
Source: 'src/fields/fp.rs', lines 788:0-795:1 -/
@[reducible]
def fields.fp.Fp.Insts.FfWithSmallOrderMulGroupArrayU8323 :
ff.WithSmallOrderMulGroup fields.fp.Fp (Array Std.U8 32#usize) 3#u8 := {
ZETA := fields.fp.Fp.Insts.FfWithSmallOrderMulGroupArrayU8323.ZETA
PrimeFieldInst := fields.fp.Fp.Insts.FfPrimeFieldArrayU832
}
/-- Trait implementation: [pasta_curves::fields::fp::{impl ff::FromUniformBytes<[u8; 32usize], 64usize> for pasta_curves::fields::fp::Fp}]
Source: 'src/fields/fp.rs', lines 797:0-812:1 -/
@[reducible]
def fields.fp.Fp.Insts.FfFromUniformBytesArrayU83264 : ff.FromUniformBytes
fields.fp.Fp (Array Std.U8 32#usize) 64#usize := {
PrimeFieldInst := fields.fp.Fp.Insts.FfPrimeFieldArrayU832
from_uniform_bytes :=
fields.fp.Fp.Insts.FfFromUniformBytesArrayU83264.from_uniform_bytes
}
/-- [pasta_curves::fields::fp::{impl core::ops::arith::Add<pasta_curves::fields::fp::Fp, pasta_curves::fields::fp::Fp> for &'a pasta_curves::fields::fp::Fp}::add]:
Source: 'src/macros.rs', lines 16:12-18:13
Visibility: public -/
def SharedAFp.Insts.CoreOpsArithAddFpFp.add
(self : fields.fp.Fp) (rhs : fields.fp.Fp) : Result fields.fp.Fp := do
SharedAFp.Insts.CoreOpsArithAddSharedBFpFp.add self rhs
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::ops::arith::Add<pasta_curves::fields::fp::Fp, pasta_curves::fields::fp::Fp> for &'a pasta_curves::fields::fp::Fp}]
Source: 'src/macros.rs', lines 12:8-19:9 -/
@[reducible]
def SharedAFp.Insts.CoreOpsArithAddFpFp : core.ops.arith.Add fields.fp.Fp
fields.fp.Fp fields.fp.Fp := {
add := SharedAFp.Insts.CoreOpsArithAddFpFp.add
}
/-- [pasta_curves::fields::fp::{impl core::ops::arith::Sub<pasta_curves::fields::fp::Fp, pasta_curves::fields::fp::Fp> for &'a pasta_curves::fields::fp::Fp}::sub]:
Source: 'src/macros.rs', lines 47:12-49:13
Visibility: public -/
def SharedAFp.Insts.CoreOpsArithSubFpFp.sub
(self : fields.fp.Fp) (rhs : fields.fp.Fp) : Result fields.fp.Fp := do
SharedAFp.Insts.CoreOpsArithSubSharedBFpFp.sub self rhs
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::ops::arith::Sub<pasta_curves::fields::fp::Fp, pasta_curves::fields::fp::Fp> for &'a pasta_curves::fields::fp::Fp}]
Source: 'src/macros.rs', lines 43:8-50:9 -/
@[reducible]
def SharedAFp.Insts.CoreOpsArithSubFpFp : core.ops.arith.Sub fields.fp.Fp
fields.fp.Fp fields.fp.Fp := {
sub := SharedAFp.Insts.CoreOpsArithSubFpFp.sub
}
/-- [pasta_curves::fields::fp::{impl core::ops::arith::Mul<pasta_curves::fields::fp::Fp, pasta_curves::fields::fp::Fp> for &'a pasta_curves::fields::fp::Fp}::mul]:
Source: 'src/macros.rs', lines 85:12-87:13
Visibility: public -/
def SharedAFp.Insts.CoreOpsArithMulFpFp.mul
(self : fields.fp.Fp) (rhs : fields.fp.Fp) : Result fields.fp.Fp := do
SharedAFp.Insts.CoreOpsArithMulSharedBFpFp.mul self rhs
/-- Trait implementation: [pasta_curves::fields::fp::{impl core::ops::arith::Mul<pasta_curves::fields::fp::Fp, pasta_curves::fields::fp::Fp> for &'a pasta_curves::fields::fp::Fp}]
Source: 'src/macros.rs', lines 81:8-88:9 -/
@[reducible]
def SharedAFp.Insts.CoreOpsArithMulFpFp : core.ops.arith.Mul fields.fp.Fp
fields.fp.Fp fields.fp.Fp := {
mul := SharedAFp.Insts.CoreOpsArithMulFpFp.mul
}
end pasta_curves