-- 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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