-- THIS FILE WAS AUTOMATICALLY GENERATED BY AENEAS -- [curve25519]: function definitions import Aeneas import CurveField.Types import CurveField.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 curve25519 /-- Trait implementation: [core::fmt::{impl core::fmt::Debug for [T]}] Source: '/rustc/library/core/src/fmt/mod.rs', lines 3121:0-3121:28 Name pattern: [core::fmt::Debug<[@T]>] -/ @[reducible, rust_trait_impl "core::fmt::Debug<[@T]>"] def Slice.Insts.CoreFmtDebug {T : Type} (DebugInst : core.fmt.Debug T) : core.fmt.Debug (Slice T) := { fmt := Slice.Insts.CoreFmtDebug.fmt DebugInst } /-- Trait implementation: [core::slice::index::private_slice_index::{impl core::slice::index::private_slice_index::Sealed for core::ops::range::RangeFull}] Source: '/rustc/library/core/src/slice/index.rs', lines 120:4-120:34 Name pattern: [core::slice::index::private_slice_index::Sealed] -/ @[reducible, rust_trait_impl "core::slice::index::private_slice_index::Sealed"] def core.ops.range.RangeFull.Insts.CoreSliceIndexPrivate_slice_indexSealed : core.slice.index.private_slice_index.Sealed core.ops.range.RangeFull := { } /-- Trait implementation: [core::slice::index::{impl core::slice::index::SliceIndex<[T], [T]> for core::ops::range::RangeFull}] Source: '/rustc/library/core/src/slice/index.rs', lines 631:0-631:55 Name pattern: [core::slice::index::SliceIndex] -/ @[reducible, rust_trait_impl "core::slice::index::SliceIndex"] def core.ops.range.RangeFull.Insts.CoreSliceIndexSliceIndexSliceSlice (T : Type) : core.slice.index.SliceIndex core.ops.range.RangeFull (Slice T) (Slice T) := { sealedInst := core.ops.range.RangeFull.Insts.CoreSliceIndexPrivate_slice_indexSealed get := core.ops.range.RangeFull.Insts.CoreSliceIndexSliceIndexSliceSlice.get get_mut := core.ops.range.RangeFull.Insts.CoreSliceIndexSliceIndexSliceSlice.get_mut get_unchecked := core.ops.range.RangeFull.Insts.CoreSliceIndexSliceIndexSliceSlice.get_unchecked get_unchecked_mut := core.ops.range.RangeFull.Insts.CoreSliceIndexSliceIndexSliceSlice.get_unchecked_mut index := core.ops.range.RangeFull.Insts.CoreSliceIndexSliceIndexSliceSlice.index index_mut := core.ops.range.RangeFull.Insts.CoreSliceIndexSliceIndexSliceSlice.index_mut } /-- Trait implementation: [subtle::{impl core::convert::From for bool}] Source: '/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/subtle-2.6.1/src/lib.rs', lines 138:0-138:26 Name pattern: [core::convert::From] -/ @[reducible, rust_trait_impl "core::convert::From"] def Bool.Insts.CoreConvertFromChoice : core.convert.From Bool subtle.Choice := { from_ := Bool.Insts.CoreConvertFromChoice.from } /-- Trait implementation: [subtle::{impl core::convert::From for subtle::Choice}] Source: '/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/subtle-2.6.1/src/lib.rs', lines 236:0-236:24 Name pattern: [core::convert::From] -/ @[reducible, rust_trait_impl "core::convert::From"] def subtle.Choice.Insts.CoreConvertFromU8 : core.convert.From subtle.Choice Std.U8 := { from_ := subtle.Choice.Insts.CoreConvertFromU8.from } /-- Trait implementation: [subtle::{impl subtle::ConstantTimeEq for u8}] Source: '/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/subtle-2.6.1/src/lib.rs', lines 346:8-346:36 Name pattern: [subtle::ConstantTimeEq] -/ @[reducible, rust_trait_impl "subtle::ConstantTimeEq"] def U8.Insts.SubtleConstantTimeEq : subtle.ConstantTimeEq Std.U8 := { ct_eq := U8.Insts.SubtleConstantTimeEq.ct_eq } /-- [curve25519::backend::serial::u64::field::{curve25519::backend::serial::u64::field::FieldElement51}::from_limbs]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 254:4-256:5 -/ def backend.serial.u64.field.FieldElement51.from_limbs (limbs : Array Std.U64 5#usize) : Result backend.serial.u64.field.FieldElement51 := do ok limbs /-- [curve25519::backend::serial::u64::constants::SQRT_M1] Source: 'curve25519/solana-ed25519/src/backend/serial/u64/constants.rs', lines 99:0-105:3 -/ @[global_simps, irreducible] def backend.serial.u64.constants.SQRT_M1 : Result backend.serial.u64.field.FieldElement51 := backend.serial.u64.field.FieldElement51.from_limbs (Array.make 5#usize [ 1718705420411056#u64, 234908883556509#u64, 2233514472574048#u64, 2117202627021982#u64, 765476049583133#u64 ]) /-- [curve25519::backend::serial::u64::field::{impl core::clone::Clone for curve25519::backend::serial::u64::field::FieldElement51}::clone]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 42:15-42:20 Visibility: public -/ def backend.serial.u64.field.FieldElement51.Insts.CoreCloneClone.clone (self : backend.serial.u64.field.FieldElement51) : Result backend.serial.u64.field.FieldElement51 := do ok self /-- Trait implementation: [curve25519::backend::serial::u64::field::{impl core::clone::Clone for curve25519::backend::serial::u64::field::FieldElement51}] Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 42:15-42:20 -/ @[reducible] def backend.serial.u64.field.FieldElement51.Insts.CoreCloneClone : core.clone.Clone backend.serial.u64.field.FieldElement51 := { clone := backend.serial.u64.field.FieldElement51.Insts.CoreCloneClone.clone } /-- Trait implementation: [curve25519::backend::serial::u64::field::{impl core::marker::Copy for curve25519::backend::serial::u64::field::FieldElement51}] Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 42:9-42:13 -/ @[reducible] def backend.serial.u64.field.FieldElement51.Insts.CoreMarkerCopy : core.marker.Copy backend.serial.u64.field.FieldElement51 := { cloneInst := backend.serial.u64.field.FieldElement51.Insts.CoreCloneClone } /-- [curve25519::backend::serial::u64::field::{impl core::fmt::Debug for curve25519::backend::serial::u64::field::FieldElement51}::fmt]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 46:4-48:5 Visibility: public -/ def backend.serial.u64.field.FieldElement51.Insts.CoreFmtDebug.fmt (self : backend.serial.u64.field.FieldElement51) (f : core.fmt.Formatter) : Result ((core.result.Result Unit core.fmt.Error) × core.fmt.Formatter) := do let args ← core.array.Array.index (core.ops.index.IndexSlice (core.ops.range.RangeFull.Insts.CoreSliceIndexSliceIndexSliceSlice Std.U64)) self () let a ← core.fmt.rt.Argument.new_debug (core.fmt.DebugShared (Slice.Insts.CoreFmtDebug core.fmt.DebugU64)) args let a1 ← core.fmt.Arguments.new (Array.make 20#usize [ 15#u8, 70#u8, 105#u8, 101#u8, 108#u8, 100#u8, 69#u8, 108#u8, 101#u8, 109#u8, 101#u8, 110#u8, 116#u8, 53#u8, 49#u8, 40#u8, 192#u8, 1#u8, 41#u8, 0#u8 ]) (Array.make 1#usize [ a ]) core.fmt.Formatter.write_fmt f a1 /-- Trait implementation: [curve25519::backend::serial::u64::field::{impl core::fmt::Debug for curve25519::backend::serial::u64::field::FieldElement51}] Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 45:0-49:1 -/ @[reducible] def backend.serial.u64.field.FieldElement51.Insts.CoreFmtDebug : core.fmt.Debug backend.serial.u64.field.FieldElement51 := { fmt := backend.serial.u64.field.FieldElement51.Insts.CoreFmtDebug.fmt } /-- [curve25519::backend::serial::u64::field::{impl core::ops::arith::AddAssign<&'a curve25519::backend::serial::u64::field::FieldElement51> for curve25519::backend::serial::u64::field::FieldElement51}::add_assign]: loop body 0: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 56:8-58:9 Visibility: public -/ @[rust_loop_body] def backend.serial.u64.field.FieldElement51.Insts.CoreOpsArithAddAssignSharedAFieldElement51.add_assign_loop.body (iter : core.ops.range.Range Std.Usize) (self : backend.serial.u64.field.FieldElement51) (_rhs : backend.serial.u64.field.FieldElement51) : Result (ControlFlow ((core.ops.range.Range Std.Usize) × backend.serial.u64.field.FieldElement51 × backend.serial.u64.field.FieldElement51) backend.serial.u64.field.FieldElement51) := do let (o, iter1) ← core.iter.range.IteratorRange.next core.iter.range.StepUsize iter match o with | none => ok (done self) | some i => let i1 ← Array.index_usize _rhs i let i2 ← Array.index_usize self i let i3 ← i2 + i1 let a ← Array.update self i i3 ok (cont (iter1, a, _rhs)) /-- [curve25519::backend::serial::u64::field::{impl core::ops::arith::AddAssign<&'a curve25519::backend::serial::u64::field::FieldElement51> for curve25519::backend::serial::u64::field::FieldElement51}::add_assign]: loop 0: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 56:8-58:9 Visibility: public -/ @[rust_loop] def backend.serial.u64.field.FieldElement51.Insts.CoreOpsArithAddAssignSharedAFieldElement51.add_assign_loop (iter : core.ops.range.Range Std.Usize) (self : backend.serial.u64.field.FieldElement51) (_rhs : backend.serial.u64.field.FieldElement51) : Result backend.serial.u64.field.FieldElement51 := do loop (fun (iter1, self1, _rhs1) => backend.serial.u64.field.FieldElement51.Insts.CoreOpsArithAddAssignSharedAFieldElement51.add_assign_loop.body iter1 self1 _rhs1) (iter, self, _rhs) /-- [curve25519::backend::serial::u64::field::{impl core::ops::arith::AddAssign<&'a curve25519::backend::serial::u64::field::FieldElement51> for curve25519::backend::serial::u64::field::FieldElement51}::add_assign]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 55:4-59:5 Visibility: public -/ @[reducible] def backend.serial.u64.field.FieldElement51.Insts.CoreOpsArithAddAssignSharedAFieldElement51.add_assign (self : backend.serial.u64.field.FieldElement51) (_rhs : backend.serial.u64.field.FieldElement51) : Result backend.serial.u64.field.FieldElement51 := do backend.serial.u64.field.FieldElement51.Insts.CoreOpsArithAddAssignSharedAFieldElement51.add_assign_loop { start := 0#usize, «end» := 5#usize } self _rhs /-- Trait implementation: [curve25519::backend::serial::u64::field::{impl core::ops::arith::AddAssign<&'a curve25519::backend::serial::u64::field::FieldElement51> for curve25519::backend::serial::u64::field::FieldElement51}] Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 54:0-60:1 -/ @[reducible] def backend.serial.u64.field.FieldElement51.Insts.CoreOpsArithAddAssignSharedAFieldElement51 : core.ops.arith.AddAssign backend.serial.u64.field.FieldElement51 backend.serial.u64.field.FieldElement51 := { add_assign := backend.serial.u64.field.FieldElement51.Insts.CoreOpsArithAddAssignSharedAFieldElement51.add_assign } /-- [curve25519::backend::serial::u64::field::{impl core::ops::arith::Add<&'a curve25519::backend::serial::u64::field::FieldElement51, curve25519::backend::serial::u64::field::FieldElement51> for &'_1 curve25519::backend::serial::u64::field::FieldElement51}::add]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 64:4-68:5 Visibility: public -/ def Shared0FieldElement51.Insts.CoreOpsArithAddSharedAFieldElement51FieldElement51.add (self : backend.serial.u64.field.FieldElement51) (_rhs : backend.serial.u64.field.FieldElement51) : Result backend.serial.u64.field.FieldElement51 := do backend.serial.u64.field.FieldElement51.Insts.CoreOpsArithAddAssignSharedAFieldElement51.add_assign self _rhs /-- Trait implementation: [curve25519::backend::serial::u64::field::{impl core::ops::arith::Add<&'a curve25519::backend::serial::u64::field::FieldElement51, curve25519::backend::serial::u64::field::FieldElement51> for &'_1 curve25519::backend::serial::u64::field::FieldElement51}] Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 62:0-69:1 -/ @[reducible] def Shared0FieldElement51.Insts.CoreOpsArithAddSharedAFieldElement51FieldElement51 : core.ops.arith.Add backend.serial.u64.field.FieldElement51 backend.serial.u64.field.FieldElement51 backend.serial.u64.field.FieldElement51 := { add := Shared0FieldElement51.Insts.CoreOpsArithAddSharedAFieldElement51FieldElement51.add } /-- [curve25519::backend::serial::u64::field::{curve25519::backend::serial::u64::field::FieldElement51}::reduce::LOW_51_BIT_MASK] Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 287:8-287:54 -/ @[global_simps, irreducible] def backend.serial.u64.field.FieldElement51.reduce.LOW_51_BIT_MASK : Result Std.U64 := do let i ← 1#u64 <<< 51#i32 i - 1#u64 /-- [curve25519::backend::serial::u64::field::{curve25519::backend::serial::u64::field::FieldElement51}::reduce]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 286:4-319:5 -/ def backend.serial.u64.field.FieldElement51.reduce (limbs : Array Std.U64 5#usize) : Result backend.serial.u64.field.FieldElement51 := do let i ← Array.index_usize limbs 0#usize let c0 ← i >>> 51#i32 let i1 ← Array.index_usize limbs 1#usize let c1 ← i1 >>> 51#i32 let i2 ← Array.index_usize limbs 2#usize let c2 ← i2 >>> 51#i32 let i3 ← Array.index_usize limbs 3#usize let c3 ← i3 >>> 51#i32 let i4 ← Array.index_usize limbs 4#usize let c4 ← i4 >>> 51#i32 let i5 ← backend.serial.u64.field.FieldElement51.reduce.LOW_51_BIT_MASK let i6 ← lift (i &&& i5) let limbs1 ← Array.update limbs 0#usize i6 let i7 ← Array.index_usize limbs1 1#usize let i8 ← lift (i7 &&& i5) let limbs2 ← Array.update limbs1 1#usize i8 let i9 ← Array.index_usize limbs2 2#usize let i10 ← lift (i9 &&& i5) let limbs3 ← Array.update limbs2 2#usize i10 let i11 ← Array.index_usize limbs3 3#usize let i12 ← lift (i11 &&& i5) let limbs4 ← Array.update limbs3 3#usize i12 let i13 ← Array.index_usize limbs4 4#usize let i14 ← lift (i13 &&& i5) let limbs5 ← Array.update limbs4 4#usize i14 let i15 ← c4 * 19#u64 let i16 ← Array.index_usize limbs5 0#usize let i17 ← i16 + i15 let limbs6 ← Array.update limbs5 0#usize i17 let i18 ← Array.index_usize limbs6 1#usize let i19 ← i18 + c0 let limbs7 ← Array.update limbs6 1#usize i19 let i20 ← Array.index_usize limbs7 2#usize let i21 ← i20 + c1 let limbs8 ← Array.update limbs7 2#usize i21 let i22 ← Array.index_usize limbs8 3#usize let i23 ← i22 + c2 let limbs9 ← Array.update limbs8 3#usize i23 let i24 ← Array.index_usize limbs9 4#usize let i25 ← i24 + c3 let limbs10 ← Array.update limbs9 4#usize i25 ok limbs10 /-- [curve25519::backend::serial::u64::field::{impl core::ops::arith::Sub<&'a curve25519::backend::serial::u64::field::FieldElement51, curve25519::backend::serial::u64::field::FieldElement51> for &'_1 curve25519::backend::serial::u64::field::FieldElement51}::sub]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 80:4-97:5 Visibility: public -/ def Shared0FieldElement51.Insts.CoreOpsArithSubSharedAFieldElement51FieldElement51.sub (self : backend.serial.u64.field.FieldElement51) (_rhs : backend.serial.u64.field.FieldElement51) : Result backend.serial.u64.field.FieldElement51 := do let i ← Array.index_usize self 0#usize let i1 ← i + 36028797018963664#u64 let i2 ← Array.index_usize _rhs 0#usize let i3 ← i1 - i2 let i4 ← Array.index_usize self 1#usize let i5 ← i4 + 36028797018963952#u64 let i6 ← Array.index_usize _rhs 1#usize let i7 ← i5 - i6 let i8 ← Array.index_usize self 2#usize let i9 ← i8 + 36028797018963952#u64 let i10 ← Array.index_usize _rhs 2#usize let i11 ← i9 - i10 let i12 ← Array.index_usize self 3#usize let i13 ← i12 + 36028797018963952#u64 let i14 ← Array.index_usize _rhs 3#usize let i15 ← i13 - i14 let i16 ← Array.index_usize self 4#usize let i17 ← i16 + 36028797018963952#u64 let i18 ← Array.index_usize _rhs 4#usize let i19 ← i17 - i18 backend.serial.u64.field.FieldElement51.reduce (Array.make 5#usize [ i3, i7, i11, i15, i19 ]) /-- [curve25519::backend::serial::u64::field::{impl core::ops::arith::SubAssign<&'a curve25519::backend::serial::u64::field::FieldElement51> for curve25519::backend::serial::u64::field::FieldElement51}::sub_assign]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 72:4-75:5 Visibility: public -/ def backend.serial.u64.field.FieldElement51.Insts.CoreOpsArithSubAssignSharedAFieldElement51.sub_assign (self : backend.serial.u64.field.FieldElement51) (_rhs : backend.serial.u64.field.FieldElement51) : Result backend.serial.u64.field.FieldElement51 := do let result ← Shared0FieldElement51.Insts.CoreOpsArithSubSharedAFieldElement51FieldElement51.sub self _rhs ok result /-- Trait implementation: [curve25519::backend::serial::u64::field::{impl core::ops::arith::SubAssign<&'a curve25519::backend::serial::u64::field::FieldElement51> for curve25519::backend::serial::u64::field::FieldElement51}] Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 71:0-76:1 -/ @[reducible] def backend.serial.u64.field.FieldElement51.Insts.CoreOpsArithSubAssignSharedAFieldElement51 : core.ops.arith.SubAssign backend.serial.u64.field.FieldElement51 backend.serial.u64.field.FieldElement51 := { sub_assign := backend.serial.u64.field.FieldElement51.Insts.CoreOpsArithSubAssignSharedAFieldElement51.sub_assign } /-- Trait implementation: [curve25519::backend::serial::u64::field::{impl core::ops::arith::Sub<&'a curve25519::backend::serial::u64::field::FieldElement51, curve25519::backend::serial::u64::field::FieldElement51> for &'_1 curve25519::backend::serial::u64::field::FieldElement51}] Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 78:0-98:1 -/ @[reducible] def Shared0FieldElement51.Insts.CoreOpsArithSubSharedAFieldElement51FieldElement51 : core.ops.arith.Sub backend.serial.u64.field.FieldElement51 backend.serial.u64.field.FieldElement51 backend.serial.u64.field.FieldElement51 := { sub := Shared0FieldElement51.Insts.CoreOpsArithSubSharedAFieldElement51FieldElement51.sub } /-- [curve25519::backend::serial::u64::field::{impl core::ops::arith::Mul<&'a curve25519::backend::serial::u64::field::FieldElement51, curve25519::backend::serial::u64::field::FieldElement51> for &'_1 curve25519::backend::serial::u64::field::FieldElement51}::mul::LOW_51_BIT_MASK] Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 168:8-168:54 -/ @[global_simps, irreducible] def backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.LOW_51_BIT_MASK : Result Std.U64 := do let i ← 1#u64 <<< 51#i32 i - 1#u64 /-- [curve25519::backend::serial::u64::field::{impl core::ops::arith::Mul<&'a curve25519::backend::serial::u64::field::FieldElement51, curve25519::backend::serial::u64::field::FieldElement51> for &'_1 curve25519::backend::serial::u64::field::FieldElement51}::mul::m]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 115:8-115:66 -/ def backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.m (x : Std.U64) (y : Std.U64) : Result Std.U128 := do let i ← lift (UScalar.cast .U128 x) let i1 ← lift (UScalar.cast .U128 y) i * i1 /-- [curve25519::backend::serial::u64::field::{impl core::ops::arith::Mul<&'a curve25519::backend::serial::u64::field::FieldElement51, curve25519::backend::serial::u64::field::FieldElement51> for &'_1 curve25519::backend::serial::u64::field::FieldElement51}::mul]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 111:4-209:5 Visibility: public -/ def Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul (self : backend.serial.u64.field.FieldElement51) (_rhs : backend.serial.u64.field.FieldElement51) : Result backend.serial.u64.field.FieldElement51 := do let i ← Array.index_usize _rhs 1#usize let b1_19 ← i * 19#u64 let i1 ← Array.index_usize _rhs 2#usize let b2_19 ← i1 * 19#u64 let i2 ← Array.index_usize _rhs 3#usize let b3_19 ← i2 * 19#u64 let i3 ← Array.index_usize _rhs 4#usize let b4_19 ← i3 * 19#u64 let i4 ← Array.index_usize self 0#usize let i5 ← Array.index_usize _rhs 0#usize let i6 ← backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.m i4 i5 let i7 ← Array.index_usize self 4#usize let i8 ← backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.m i7 b1_19 let i9 ← i6 + i8 let i10 ← Array.index_usize self 3#usize let i11 ← backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.m i10 b2_19 let i12 ← i9 + i11 let i13 ← Array.index_usize self 2#usize let i14 ← backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.m i13 b3_19 let i15 ← i12 + i14 let i16 ← Array.index_usize self 1#usize let i17 ← backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.m i16 b4_19 let c0 ← i15 + i17 let i18 ← backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.m i16 i5 let i19 ← backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.m i4 i let i20 ← i18 + i19 let i21 ← backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.m i7 b2_19 let i22 ← i20 + i21 let i23 ← backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.m i10 b3_19 let i24 ← i22 + i23 let i25 ← backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.m i13 b4_19 let c1 ← i24 + i25 let i26 ← backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.m i13 i5 let i27 ← backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.m i16 i let i28 ← i26 + i27 let i29 ← backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.m i4 i1 let i30 ← i28 + i29 let i31 ← backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.m i7 b3_19 let i32 ← i30 + i31 let i33 ← backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.m i10 b4_19 let c2 ← i32 + i33 let i34 ← backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.m i10 i5 let i35 ← backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.m i13 i let i36 ← i34 + i35 let i37 ← backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.m i16 i1 let i38 ← i36 + i37 let i39 ← backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.m i4 i2 let i40 ← i38 + i39 let i41 ← backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.m i7 b4_19 let c3 ← i40 + i41 let i42 ← backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.m i7 i5 let i43 ← backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.m i10 i let i44 ← i42 + i43 let i45 ← backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.m i13 i1 let i46 ← i44 + i45 let i47 ← backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.m i16 i2 let i48 ← i46 + i47 let i49 ← backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.m i4 i3 let c4 ← i48 + i49 let i50 ← 1#u64 <<< 54#i32 massert (i4 < i50) massert (i5 < i50) massert (i16 < i50) massert (i < i50) massert (i13 < i50) massert (i1 < i50) massert (i10 < i50) massert (i2 < i50) massert (i7 < i50) massert (i3 < i50) let out := Array.repeat 5#usize 0#u64 let i51 ← c0 >>> 51#i32 let i52 ← lift (UScalar.cast .U64 i51) let i53 ← lift (UScalar.cast .U128 i52) let c11 ← c1 + i53 let i54 ← lift (UScalar.cast .U64 c0) let i55 ← backend.serial.u64.field.MulShared0FieldElement51SharedAFieldElement51FieldElement51.mul.LOW_51_BIT_MASK let i56 ← lift (i54 &&& i55) let out1 ← Array.update out 0#usize i56 let i57 ← c11 >>> 51#i32 let i58 ← lift (UScalar.cast .U64 i57) let i59 ← lift (UScalar.cast .U128 i58) let c21 ← c2 + i59 let i60 ← lift (UScalar.cast .U64 c11) let i61 ← lift (i60 &&& i55) let out2 ← Array.update out1 1#usize i61 let i62 ← c21 >>> 51#i32 let i63 ← lift (UScalar.cast .U64 i62) let i64 ← lift (UScalar.cast .U128 i63) let c31 ← c3 + i64 let i65 ← lift (UScalar.cast .U64 c21) let i66 ← lift (i65 &&& i55) let out3 ← Array.update out2 2#usize i66 let i67 ← c31 >>> 51#i32 let i68 ← lift (UScalar.cast .U64 i67) let i69 ← lift (UScalar.cast .U128 i68) let c41 ← c4 + i69 let i70 ← lift (UScalar.cast .U64 c31) let i71 ← lift (i70 &&& i55) let out4 ← Array.update out3 3#usize i71 let i72 ← c41 >>> 51#i32 let carry ← lift (UScalar.cast .U64 i72) let i73 ← lift (UScalar.cast .U64 c41) let i74 ← lift (i73 &&& i55) let out5 ← Array.update out4 4#usize i74 let i75 ← carry * 19#u64 let i76 ← Array.index_usize out5 0#usize let i77 ← i76 + i75 let out6 ← Array.update out5 0#usize i77 let i78 ← Array.index_usize out6 0#usize let i79 ← i78 >>> 51#i32 let i80 ← Array.index_usize out6 1#usize let i81 ← i80 + i79 let out7 ← Array.update out6 1#usize i81 let i82 ← Array.index_usize out7 0#usize let i83 ← lift (i82 &&& i55) let out8 ← Array.update out7 0#usize i83 ok out8 /-- [curve25519::backend::serial::u64::field::{impl core::ops::arith::MulAssign<&'a curve25519::backend::serial::u64::field::FieldElement51> for curve25519::backend::serial::u64::field::FieldElement51}::mul_assign]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 101:4-104:5 Visibility: public -/ def backend.serial.u64.field.FieldElement51.Insts.CoreOpsArithMulAssignSharedAFieldElement51.mul_assign (self : backend.serial.u64.field.FieldElement51) (_rhs : backend.serial.u64.field.FieldElement51) : Result backend.serial.u64.field.FieldElement51 := do let result ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self _rhs ok result /-- Trait implementation: [curve25519::backend::serial::u64::field::{impl core::ops::arith::MulAssign<&'a curve25519::backend::serial::u64::field::FieldElement51> for curve25519::backend::serial::u64::field::FieldElement51}] Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 100:0-105:1 -/ @[reducible] def backend.serial.u64.field.FieldElement51.Insts.CoreOpsArithMulAssignSharedAFieldElement51 : core.ops.arith.MulAssign backend.serial.u64.field.FieldElement51 backend.serial.u64.field.FieldElement51 := { mul_assign := backend.serial.u64.field.FieldElement51.Insts.CoreOpsArithMulAssignSharedAFieldElement51.mul_assign } /-- Trait implementation: [curve25519::backend::serial::u64::field::{impl core::ops::arith::Mul<&'a curve25519::backend::serial::u64::field::FieldElement51, curve25519::backend::serial::u64::field::FieldElement51> for &'_1 curve25519::backend::serial::u64::field::FieldElement51}] Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 107:0-210:1 -/ @[reducible] def Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51 : core.ops.arith.Mul backend.serial.u64.field.FieldElement51 backend.serial.u64.field.FieldElement51 backend.serial.u64.field.FieldElement51 := { mul := Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul } /-- [curve25519::backend::serial::u64::field::{curve25519::backend::serial::u64::field::FieldElement51}::negate]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 272:4-282:5 Visibility: public -/ def backend.serial.u64.field.FieldElement51.negate (self : backend.serial.u64.field.FieldElement51) : Result backend.serial.u64.field.FieldElement51 := do let i ← Array.index_usize self 0#usize let i1 ← 36028797018963664#u64 - i let i2 ← Array.index_usize self 1#usize let i3 ← 36028797018963952#u64 - i2 let i4 ← Array.index_usize self 2#usize let i5 ← 36028797018963952#u64 - i4 let i6 ← Array.index_usize self 3#usize let i7 ← 36028797018963952#u64 - i6 let i8 ← Array.index_usize self 4#usize let i9 ← 36028797018963952#u64 - i8 let neg ← backend.serial.u64.field.FieldElement51.reduce (Array.make 5#usize [ i1, i3, i5, i7, i9 ]) ok neg /-- [curve25519::backend::serial::u64::field::{impl core::ops::arith::Neg for &'_0 curve25519::backend::serial::u64::field::FieldElement51}::neg]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 214:4-218:5 Visibility: public -/ def Shared0FieldElement51.Insts.CoreOpsArithNegFieldElement51.neg (self : backend.serial.u64.field.FieldElement51) : Result backend.serial.u64.field.FieldElement51 := do backend.serial.u64.field.FieldElement51.negate self /-- Trait implementation: [curve25519::backend::serial::u64::field::{impl core::ops::arith::Neg for &'_0 curve25519::backend::serial::u64::field::FieldElement51}] Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 212:0-219:1 -/ @[reducible] def Shared0FieldElement51.Insts.CoreOpsArithNegFieldElement51 : core.ops.arith.Neg backend.serial.u64.field.FieldElement51 backend.serial.u64.field.FieldElement51 := { neg := Shared0FieldElement51.Insts.CoreOpsArithNegFieldElement51.neg } /-- [curve25519::backend::serial::u64::field::{impl subtle::ConditionallySelectable for curve25519::backend::serial::u64::field::FieldElement51}::conditional_assign]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 244:4-250:5 Visibility: public -/ def backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_assign (self : backend.serial.u64.field.FieldElement51) (other : backend.serial.u64.field.FieldElement51) (choice : subtle.Choice) : Result backend.serial.u64.field.FieldElement51 := do let (i, index_mut_back) ← Array.index_mut_usize self 0#usize let i1 ← Array.index_usize other 0#usize let i2 ← U64.Insts.SubtleConditionallySelectable.conditional_assign i i1 choice let a := index_mut_back i2 let (i3, index_mut_back1) ← Array.index_mut_usize a 1#usize let i4 ← Array.index_usize other 1#usize let i5 ← U64.Insts.SubtleConditionallySelectable.conditional_assign i3 i4 choice let a1 := index_mut_back1 i5 let (i6, index_mut_back2) ← Array.index_mut_usize a1 2#usize let i7 ← Array.index_usize other 2#usize let i8 ← U64.Insts.SubtleConditionallySelectable.conditional_assign i6 i7 choice let a2 := index_mut_back2 i8 let (i9, index_mut_back3) ← Array.index_mut_usize a2 3#usize let i10 ← Array.index_usize other 3#usize let i11 ← U64.Insts.SubtleConditionallySelectable.conditional_assign i9 i10 choice let a3 := index_mut_back3 i11 let (i12, index_mut_back4) ← Array.index_mut_usize a3 4#usize let i13 ← Array.index_usize other 4#usize let i14 ← U64.Insts.SubtleConditionallySelectable.conditional_assign i12 i13 choice let a4 := index_mut_back4 i14 ok a4 /-- [curve25519::backend::serial::u64::field::{impl subtle::ConditionallySelectable for curve25519::backend::serial::u64::field::FieldElement51}::conditional_swap]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 236:4-242:5 Visibility: public -/ def backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_swap (a : backend.serial.u64.field.FieldElement51) (b : backend.serial.u64.field.FieldElement51) (choice : subtle.Choice) : Result (backend.serial.u64.field.FieldElement51 × backend.serial.u64.field.FieldElement51) := do let (i, index_mut_back) ← Array.index_mut_usize a 0#usize let (i1, index_mut_back1) ← Array.index_mut_usize b 0#usize let (i2, i3) ← U64.Insts.SubtleConditionallySelectable.conditional_swap i i1 choice let a1 := index_mut_back i2 let (i4, index_mut_back2) ← Array.index_mut_usize a1 1#usize let a2 := index_mut_back1 i3 let (i5, index_mut_back3) ← Array.index_mut_usize a2 1#usize let (i6, i7) ← U64.Insts.SubtleConditionallySelectable.conditional_swap i4 i5 choice let a3 := index_mut_back2 i6 let (i8, index_mut_back4) ← Array.index_mut_usize a3 2#usize let a4 := index_mut_back3 i7 let (i9, index_mut_back5) ← Array.index_mut_usize a4 2#usize let (i10, i11) ← U64.Insts.SubtleConditionallySelectable.conditional_swap i8 i9 choice let a5 := index_mut_back4 i10 let (i12, index_mut_back6) ← Array.index_mut_usize a5 3#usize let a6 := index_mut_back5 i11 let (i13, index_mut_back7) ← Array.index_mut_usize a6 3#usize let (i14, i15) ← U64.Insts.SubtleConditionallySelectable.conditional_swap i12 i13 choice let a7 := index_mut_back6 i14 let (i16, index_mut_back8) ← Array.index_mut_usize a7 4#usize let a8 := index_mut_back7 i15 let (i17, index_mut_back9) ← Array.index_mut_usize a8 4#usize let (i18, i19) ← U64.Insts.SubtleConditionallySelectable.conditional_swap i16 i17 choice let a9 := index_mut_back8 i18 let a10 := index_mut_back9 i19 ok (a9, a10) /-- [curve25519::backend::serial::u64::field::{impl subtle::ConditionallySelectable for curve25519::backend::serial::u64::field::FieldElement51}::conditional_select]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 222:4-234:5 Visibility: public -/ def backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_select (a : backend.serial.u64.field.FieldElement51) (b : backend.serial.u64.field.FieldElement51) (choice : subtle.Choice) : Result backend.serial.u64.field.FieldElement51 := 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 let i12 ← Array.index_usize a 4#usize let i13 ← Array.index_usize b 4#usize let i14 ← U64.Insts.SubtleConditionallySelectable.conditional_select i12 i13 choice ok (Array.make 5#usize [ i2, i5, i8, i11, i14 ]) /-- Trait implementation: [curve25519::backend::serial::u64::field::{impl subtle::ConditionallySelectable for curve25519::backend::serial::u64::field::FieldElement51}] Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 221:0-251:1 -/ @[reducible] def backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable : subtle.ConditionallySelectable backend.serial.u64.field.FieldElement51 := { coremarkerCopyInst := backend.serial.u64.field.FieldElement51.Insts.CoreMarkerCopy conditional_select := backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_select conditional_assign := backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_assign conditional_swap := backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_swap } /-- [curve25519::backend::serial::u64::field::{curve25519::backend::serial::u64::field::FieldElement51}::ZERO] Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 259:4-259:81 Visibility: public -/ @[global_simps, irreducible] def backend.serial.u64.field.FieldElement51.ZERO : Result backend.serial.u64.field.FieldElement51 := let a := Array.repeat 5#usize 0#u64 backend.serial.u64.field.FieldElement51.from_limbs a /-- [curve25519::backend::serial::u64::field::{curve25519::backend::serial::u64::field::FieldElement51}::ONE] Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 261:4-261:80 Visibility: public -/ @[global_simps, irreducible] def backend.serial.u64.field.FieldElement51.ONE : Result backend.serial.u64.field.FieldElement51 := backend.serial.u64.field.FieldElement51.from_limbs (Array.make 5#usize [ 1#u64, 0#u64, 0#u64, 0#u64, 0#u64 ]) /-- [curve25519::backend::serial::u64::field::{curve25519::backend::serial::u64::field::FieldElement51}::MINUS_ONE] Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 263:4-269:7 Visibility: public -/ @[global_simps, irreducible] def backend.serial.u64.field.FieldElement51.MINUS_ONE : Result backend.serial.u64.field.FieldElement51 := backend.serial.u64.field.FieldElement51.from_limbs (Array.make 5#usize [ 2251799813685228#u64, 2251799813685247#u64, 2251799813685247#u64, 2251799813685247#u64, 2251799813685247#u64 ]) /-- [curve25519::backend::serial::u64::field::{curve25519::backend::serial::u64::field::FieldElement51}::from_bytes::load8_at]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 335:8-344:9 -/ def backend.serial.u64.field.FieldElement51.from_bytes.load8_at (input : Slice Std.U8) (i : Std.Usize) : Result Std.U64 := do let i1 ← Slice.index_usize input i let i2 ← lift (UScalar.cast .U64 i1) let i3 ← i + 1#usize let i4 ← Slice.index_usize input i3 let i5 ← lift (UScalar.cast .U64 i4) let i6 ← i5 <<< 8#i32 let i7 ← lift (i2 ||| i6) let i8 ← i + 2#usize let i9 ← Slice.index_usize input i8 let i10 ← lift (UScalar.cast .U64 i9) let i11 ← i10 <<< 16#i32 let i12 ← lift (i7 ||| i11) let i13 ← i + 3#usize let i14 ← Slice.index_usize input i13 let i15 ← lift (UScalar.cast .U64 i14) let i16 ← i15 <<< 24#i32 let i17 ← lift (i12 ||| i16) let i18 ← i + 4#usize let i19 ← Slice.index_usize input i18 let i20 ← lift (UScalar.cast .U64 i19) let i21 ← i20 <<< 32#i32 let i22 ← lift (i17 ||| i21) let i23 ← i + 5#usize let i24 ← Slice.index_usize input i23 let i25 ← lift (UScalar.cast .U64 i24) let i26 ← i25 <<< 40#i32 let i27 ← lift (i22 ||| i26) let i28 ← i + 6#usize let i29 ← Slice.index_usize input i28 let i30 ← lift (UScalar.cast .U64 i29) let i31 ← i30 <<< 48#i32 let i32 ← lift (i27 ||| i31) let i33 ← i + 7#usize let i34 ← Slice.index_usize input i33 let i35 ← lift (UScalar.cast .U64 i34) let i36 ← i35 <<< 56#i32 ok (i32 ||| i36) /-- [curve25519::backend::serial::u64::field::{curve25519::backend::serial::u64::field::FieldElement51}::from_bytes]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 334:4-359:5 Visibility: public -/ def backend.serial.u64.field.FieldElement51.from_bytes (bytes : Array Std.U8 32#usize) : Result backend.serial.u64.field.FieldElement51 := do let i ← 1#u64 <<< 51#i32 let low_51_bit_mask ← i - 1#u64 let s ← lift (Array.to_slice bytes) let i1 ← backend.serial.u64.field.FieldElement51.from_bytes.load8_at s 0#usize let i2 ← lift (i1 &&& low_51_bit_mask) let s1 ← lift (Array.to_slice bytes) let i3 ← backend.serial.u64.field.FieldElement51.from_bytes.load8_at s1 6#usize let i4 ← i3 >>> 3#i32 let i5 ← lift (i4 &&& low_51_bit_mask) let s2 ← lift (Array.to_slice bytes) let i6 ← backend.serial.u64.field.FieldElement51.from_bytes.load8_at s2 12#usize let i7 ← i6 >>> 6#i32 let i8 ← lift (i7 &&& low_51_bit_mask) let s3 ← lift (Array.to_slice bytes) let i9 ← backend.serial.u64.field.FieldElement51.from_bytes.load8_at s3 19#usize let i10 ← i9 >>> 1#i32 let i11 ← lift (i10 &&& low_51_bit_mask) let s4 ← lift (Array.to_slice bytes) let i12 ← backend.serial.u64.field.FieldElement51.from_bytes.load8_at s4 24#usize let i13 ← i12 >>> 12#i32 let i14 ← lift (i13 &&& low_51_bit_mask) ok (Array.make 5#usize [ i2, i5, i8, i11, i14 ]) /-- [curve25519::backend::serial::u64::field::{curve25519::backend::serial::u64::field::FieldElement51}::to_bytes]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 364:4-446:5 Visibility: public -/ def backend.serial.u64.field.FieldElement51.to_bytes (self : backend.serial.u64.field.FieldElement51) : Result (Array Std.U8 32#usize) := do let fe ← backend.serial.u64.field.FieldElement51.reduce self let i ← Array.index_usize fe 0#usize let i1 ← i + 19#u64 let q ← i1 >>> 51#i32 let i2 ← Array.index_usize fe 1#usize let i3 ← i2 + q let q1 ← i3 >>> 51#i32 let i4 ← Array.index_usize fe 2#usize let i5 ← i4 + q1 let q2 ← i5 >>> 51#i32 let i6 ← Array.index_usize fe 3#usize let i7 ← i6 + q2 let q3 ← i7 >>> 51#i32 let i8 ← Array.index_usize fe 4#usize let i9 ← i8 + q3 let q4 ← i9 >>> 51#i32 let i10 ← 19#u64 * q4 let i11 ← i + i10 let limbs ← Array.update fe 0#usize i11 let i12 ← 1#u64 <<< 51#i32 let low_51_bit_mask ← i12 - 1#u64 let i13 ← Array.index_usize limbs 0#usize let i14 ← i13 >>> 51#i32 let i15 ← Array.index_usize limbs 1#usize let i16 ← i15 + i14 let limbs1 ← Array.update limbs 1#usize i16 let i17 ← Array.index_usize limbs1 0#usize let i18 ← lift (i17 &&& low_51_bit_mask) let limbs2 ← Array.update limbs1 0#usize i18 let i19 ← Array.index_usize limbs2 1#usize let i20 ← i19 >>> 51#i32 let i21 ← Array.index_usize limbs2 2#usize let i22 ← i21 + i20 let limbs3 ← Array.update limbs2 2#usize i22 let i23 ← Array.index_usize limbs3 1#usize let i24 ← lift (i23 &&& low_51_bit_mask) let limbs4 ← Array.update limbs3 1#usize i24 let i25 ← Array.index_usize limbs4 2#usize let i26 ← i25 >>> 51#i32 let i27 ← Array.index_usize limbs4 3#usize let i28 ← i27 + i26 let limbs5 ← Array.update limbs4 3#usize i28 let i29 ← Array.index_usize limbs5 2#usize let i30 ← lift (i29 &&& low_51_bit_mask) let limbs6 ← Array.update limbs5 2#usize i30 let i31 ← Array.index_usize limbs6 3#usize let i32 ← i31 >>> 51#i32 let i33 ← Array.index_usize limbs6 4#usize let i34 ← i33 + i32 let limbs7 ← Array.update limbs6 4#usize i34 let i35 ← Array.index_usize limbs7 3#usize let i36 ← lift (i35 &&& low_51_bit_mask) let limbs8 ← Array.update limbs7 3#usize i36 let i37 ← Array.index_usize limbs8 4#usize let i38 ← lift (i37 &&& low_51_bit_mask) let limbs9 ← Array.update limbs8 4#usize i38 let s := Array.repeat 32#usize 0#u8 let i39 ← Array.index_usize limbs9 0#usize let i40 ← lift (UScalar.cast .U8 i39) let s1 ← Array.update s 0#usize i40 let i41 ← i39 >>> 8#i32 let i42 ← lift (UScalar.cast .U8 i41) let s2 ← Array.update s1 1#usize i42 let i43 ← i39 >>> 16#i32 let i44 ← lift (UScalar.cast .U8 i43) let s3 ← Array.update s2 2#usize i44 let i45 ← i39 >>> 24#i32 let i46 ← lift (UScalar.cast .U8 i45) let s4 ← Array.update s3 3#usize i46 let i47 ← i39 >>> 32#i32 let i48 ← lift (UScalar.cast .U8 i47) let s5 ← Array.update s4 4#usize i48 let i49 ← i39 >>> 40#i32 let i50 ← lift (UScalar.cast .U8 i49) let s6 ← Array.update s5 5#usize i50 let i51 ← i39 >>> 48#i32 let i52 ← Array.index_usize limbs9 1#usize let i53 ← i52 <<< 3#i32 let i54 ← lift (i51 ||| i53) let i55 ← lift (UScalar.cast .U8 i54) let s7 ← Array.update s6 6#usize i55 let i56 ← i52 >>> 5#i32 let i57 ← lift (UScalar.cast .U8 i56) let s8 ← Array.update s7 7#usize i57 let i58 ← i52 >>> 13#i32 let i59 ← lift (UScalar.cast .U8 i58) let s9 ← Array.update s8 8#usize i59 let i60 ← i52 >>> 21#i32 let i61 ← lift (UScalar.cast .U8 i60) let s10 ← Array.update s9 9#usize i61 let i62 ← i52 >>> 29#i32 let i63 ← lift (UScalar.cast .U8 i62) let s11 ← Array.update s10 10#usize i63 let i64 ← i52 >>> 37#i32 let i65 ← lift (UScalar.cast .U8 i64) let s12 ← Array.update s11 11#usize i65 let i66 ← i52 >>> 45#i32 let i67 ← Array.index_usize limbs9 2#usize let i68 ← i67 <<< 6#i32 let i69 ← lift (i66 ||| i68) let i70 ← lift (UScalar.cast .U8 i69) let s13 ← Array.update s12 12#usize i70 let i71 ← i67 >>> 2#i32 let i72 ← lift (UScalar.cast .U8 i71) let s14 ← Array.update s13 13#usize i72 let i73 ← i67 >>> 10#i32 let i74 ← lift (UScalar.cast .U8 i73) let s15 ← Array.update s14 14#usize i74 let i75 ← i67 >>> 18#i32 let i76 ← lift (UScalar.cast .U8 i75) let s16 ← Array.update s15 15#usize i76 let i77 ← i67 >>> 26#i32 let i78 ← lift (UScalar.cast .U8 i77) let s17 ← Array.update s16 16#usize i78 let i79 ← i67 >>> 34#i32 let i80 ← lift (UScalar.cast .U8 i79) let s18 ← Array.update s17 17#usize i80 let i81 ← i67 >>> 42#i32 let i82 ← lift (UScalar.cast .U8 i81) let s19 ← Array.update s18 18#usize i82 let i83 ← i67 >>> 50#i32 let i84 ← Array.index_usize limbs9 3#usize let i85 ← i84 <<< 1#i32 let i86 ← lift (i83 ||| i85) let i87 ← lift (UScalar.cast .U8 i86) let s20 ← Array.update s19 19#usize i87 let i88 ← i84 >>> 7#i32 let i89 ← lift (UScalar.cast .U8 i88) let s21 ← Array.update s20 20#usize i89 let i90 ← i84 >>> 15#i32 let i91 ← lift (UScalar.cast .U8 i90) let s22 ← Array.update s21 21#usize i91 let i92 ← i84 >>> 23#i32 let i93 ← lift (UScalar.cast .U8 i92) let s23 ← Array.update s22 22#usize i93 let i94 ← i84 >>> 31#i32 let i95 ← lift (UScalar.cast .U8 i94) let s24 ← Array.update s23 23#usize i95 let i96 ← i84 >>> 39#i32 let i97 ← lift (UScalar.cast .U8 i96) let s25 ← Array.update s24 24#usize i97 let i98 ← i84 >>> 47#i32 let i99 ← Array.index_usize limbs9 4#usize let i100 ← i99 <<< 4#i32 let i101 ← lift (i98 ||| i100) let i102 ← lift (UScalar.cast .U8 i101) let s26 ← Array.update s25 25#usize i102 let i103 ← i99 >>> 4#i32 let i104 ← lift (UScalar.cast .U8 i103) let s27 ← Array.update s26 26#usize i104 let i105 ← i99 >>> 12#i32 let i106 ← lift (UScalar.cast .U8 i105) let s28 ← Array.update s27 27#usize i106 let i107 ← i99 >>> 20#i32 let i108 ← lift (UScalar.cast .U8 i107) let s29 ← Array.update s28 28#usize i108 let i109 ← i99 >>> 28#i32 let i110 ← lift (UScalar.cast .U8 i109) let s30 ← Array.update s29 29#usize i110 let i111 ← i99 >>> 36#i32 let i112 ← lift (UScalar.cast .U8 i111) let s31 ← Array.update s30 30#usize i112 let i113 ← i99 >>> 44#i32 let i114 ← lift (UScalar.cast .U8 i113) let s32 ← Array.update s31 31#usize i114 let i115 ← Array.index_usize s32 31#usize let i116 ← lift (i115 &&& 128#u8) massert (i116 = 0#u8) ok s32 /-- [curve25519::backend::serial::u64::field::{curve25519::backend::serial::u64::field::FieldElement51}::pow2k::LOW_51_BIT_MASK] Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 507:12-507:58 -/ @[global_simps, irreducible] def backend.serial.u64.field.FieldElement51.pow2k.LOW_51_BIT_MASK : Result Std.U64 := do let i ← 1#u64 <<< 51#i32 i - 1#u64 /-- [curve25519::backend::serial::u64::field::{curve25519::backend::serial::u64::field::FieldElement51}::pow2k::m]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 456:8-458:9 -/ def backend.serial.u64.field.FieldElement51.pow2k.m (x : Std.U64) (y : Std.U64) : Result Std.U128 := do let i ← lift (UScalar.cast .U128 x) let i1 ← lift (UScalar.cast .U128 y) i * i1 /-- [curve25519::backend::serial::u64::field::{curve25519::backend::serial::u64::field::FieldElement51}::pow2k]: loop body 0: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 476:16-488:86 Visibility: public -/ @[rust_loop_body] def backend.serial.u64.field.FieldElement51.pow2k_loop.body (k : Std.U32) (a : Array Std.U64 5#usize) : Result (ControlFlow (Std.U32 × (Array Std.U64 5#usize)) (Array Std.U64 5#usize)) := do let i ← Array.index_usize a 3#usize let a3_19 ← 19#u64 * i let i1 ← Array.index_usize a 4#usize let a4_19 ← 19#u64 * i1 let i2 ← Array.index_usize a 0#usize let i3 ← backend.serial.u64.field.FieldElement51.pow2k.m i2 i2 let i4 ← Array.index_usize a 1#usize let i5 ← backend.serial.u64.field.FieldElement51.pow2k.m i4 a4_19 let i6 ← Array.index_usize a 2#usize let i7 ← backend.serial.u64.field.FieldElement51.pow2k.m i6 a3_19 let i8 ← i5 + i7 let i9 ← 2#u128 * i8 let c0 ← i3 + i9 let i10 ← backend.serial.u64.field.FieldElement51.pow2k.m i a3_19 let i11 ← backend.serial.u64.field.FieldElement51.pow2k.m i2 i4 let i12 ← backend.serial.u64.field.FieldElement51.pow2k.m i6 a4_19 let i13 ← i11 + i12 let i14 ← 2#u128 * i13 let c1 ← i10 + i14 let i15 ← backend.serial.u64.field.FieldElement51.pow2k.m i4 i4 let i16 ← backend.serial.u64.field.FieldElement51.pow2k.m i2 i6 let i17 ← backend.serial.u64.field.FieldElement51.pow2k.m i1 a3_19 let i18 ← i16 + i17 let i19 ← 2#u128 * i18 let c2 ← i15 + i19 let i20 ← backend.serial.u64.field.FieldElement51.pow2k.m i1 a4_19 let i21 ← backend.serial.u64.field.FieldElement51.pow2k.m i2 i let i22 ← backend.serial.u64.field.FieldElement51.pow2k.m i4 i6 let i23 ← i21 + i22 let i24 ← 2#u128 * i23 let c3 ← i20 + i24 let i25 ← backend.serial.u64.field.FieldElement51.pow2k.m i6 i6 let i26 ← backend.serial.u64.field.FieldElement51.pow2k.m i2 i1 let i27 ← backend.serial.u64.field.FieldElement51.pow2k.m i4 i let i28 ← i26 + i27 let i29 ← 2#u128 * i28 let c4 ← i25 + i29 let i30 ← 1#u64 <<< 54#i32 massert (i2 < i30) massert (i4 < i30) massert (i6 < i30) massert (i < i30) massert (i1 < i30) let i31 ← c0 >>> 51#i32 let i32 ← lift (UScalar.cast .U64 i31) let i33 ← lift (UScalar.cast .U128 i32) let c11 ← c1 + i33 let i34 ← lift (UScalar.cast .U64 c0) let i35 ← backend.serial.u64.field.FieldElement51.pow2k.LOW_51_BIT_MASK let i36 ← lift (i34 &&& i35) let a1 ← Array.update a 0#usize i36 let i37 ← c11 >>> 51#i32 let i38 ← lift (UScalar.cast .U64 i37) let i39 ← lift (UScalar.cast .U128 i38) let c21 ← c2 + i39 let i40 ← lift (UScalar.cast .U64 c11) let i41 ← lift (i40 &&& i35) let a2 ← Array.update a1 1#usize i41 let i42 ← c21 >>> 51#i32 let i43 ← lift (UScalar.cast .U64 i42) let i44 ← lift (UScalar.cast .U128 i43) let c31 ← c3 + i44 let i45 ← lift (UScalar.cast .U64 c21) let i46 ← lift (i45 &&& i35) let a3 ← Array.update a2 2#usize i46 let i47 ← c31 >>> 51#i32 let i48 ← lift (UScalar.cast .U64 i47) let i49 ← lift (UScalar.cast .U128 i48) let c41 ← c4 + i49 let i50 ← lift (UScalar.cast .U64 c31) let i51 ← lift (i50 &&& i35) let a4 ← Array.update a3 3#usize i51 let i52 ← c41 >>> 51#i32 let carry ← lift (UScalar.cast .U64 i52) let i53 ← lift (UScalar.cast .U64 c41) let i54 ← lift (i53 &&& i35) let a5 ← Array.update a4 4#usize i54 let i55 ← carry * 19#u64 let i56 ← Array.index_usize a5 0#usize let i57 ← i56 + i55 let a6 ← Array.update a5 0#usize i57 let i58 ← Array.index_usize a6 0#usize let i59 ← i58 >>> 51#i32 let i60 ← Array.index_usize a6 1#usize let i61 ← i60 + i59 let a7 ← Array.update a6 1#usize i61 let i62 ← Array.index_usize a7 0#usize let i63 ← lift (i62 &&& i35) let (_, index_mut_back) ← Array.index_mut_usize a7 0#usize let k1 ← k - 1#u32 if k1 = 0#u32 then let a8 := index_mut_back i63 ok (done a8) else let a8 := index_mut_back i63 ok (cont (k1, a8)) /-- [curve25519::backend::serial::u64::field::{curve25519::backend::serial::u64::field::FieldElement51}::pow2k]: loop 0: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 476:16-488:86 Visibility: public -/ @[rust_loop] def backend.serial.u64.field.FieldElement51.pow2k_loop (k : Std.U32) (a : Array Std.U64 5#usize) : Result (Array Std.U64 5#usize) := do loop (fun (k1, a1) => backend.serial.u64.field.FieldElement51.pow2k_loop.body k1 a1) (k, a) /-- [curve25519::backend::serial::u64::field::{curve25519::backend::serial::u64::field::FieldElement51}::pow2k]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 450:4-555:5 Visibility: public -/ def backend.serial.u64.field.FieldElement51.pow2k (self : backend.serial.u64.field.FieldElement51) (k : Std.U32) : Result backend.serial.u64.field.FieldElement51 := do massert (k > 0#u32) let a ← backend.serial.u64.field.FieldElement51.pow2k_loop k self ok a /-- [curve25519::backend::serial::u64::field::{curve25519::backend::serial::u64::field::FieldElement51}::square]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 558:4-560:5 Visibility: public -/ def backend.serial.u64.field.FieldElement51.square (self : backend.serial.u64.field.FieldElement51) : Result backend.serial.u64.field.FieldElement51 := do backend.serial.u64.field.FieldElement51.pow2k self 1#u32 /-- [curve25519::backend::serial::u64::field::{curve25519::backend::serial::u64::field::FieldElement51}::square2]: loop body 0: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 565:8-567:9 Visibility: public -/ @[rust_loop_body] def backend.serial.u64.field.FieldElement51.square2_loop.body (iter : core.ops.range.Range Std.Usize) (square : backend.serial.u64.field.FieldElement51) : Result (ControlFlow ((core.ops.range.Range Std.Usize) × backend.serial.u64.field.FieldElement51) backend.serial.u64.field.FieldElement51) := do let (o, iter1) ← core.iter.range.IteratorRange.next core.iter.range.StepUsize iter match o with | none => ok (done square) | some i => let i1 ← Array.index_usize square i let i2 ← i1 * 2#u64 let a ← Array.update square i i2 ok (cont (iter1, a)) /-- [curve25519::backend::serial::u64::field::{curve25519::backend::serial::u64::field::FieldElement51}::square2]: loop 0: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 565:8-567:9 Visibility: public -/ @[rust_loop] def backend.serial.u64.field.FieldElement51.square2_loop (iter : core.ops.range.Range Std.Usize) (square : backend.serial.u64.field.FieldElement51) : Result backend.serial.u64.field.FieldElement51 := do loop (fun (iter1, square1) => backend.serial.u64.field.FieldElement51.square2_loop.body iter1 square1) (iter, square) /-- [curve25519::backend::serial::u64::field::{curve25519::backend::serial::u64::field::FieldElement51}::square2]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/field.rs', lines 563:4-570:5 Visibility: public -/ def backend.serial.u64.field.FieldElement51.square2 (self : backend.serial.u64.field.FieldElement51) : Result backend.serial.u64.field.FieldElement51 := do let square ← backend.serial.u64.field.FieldElement51.pow2k self 1#u32 backend.serial.u64.field.FieldElement51.square2_loop { start := 0#usize, «end» := 5#usize } square /-- [curve25519::field::{impl subtle::ConstantTimeEq for curve25519::backend::serial::u64::field::FieldElement51}::ct_eq]: Source: 'curve25519/solana-ed25519/src/field.rs', lines 64:4-66:5 Visibility: public -/ def backend.serial.u64.field.FieldElement51.Insts.SubtleConstantTimeEq.ct_eq (self : backend.serial.u64.field.FieldElement51) (other : backend.serial.u64.field.FieldElement51) : Result subtle.Choice := do let a ← backend.serial.u64.field.FieldElement51.to_bytes self let s ← lift (Array.to_slice a) let a1 ← backend.serial.u64.field.FieldElement51.to_bytes other let s1 ← lift (Array.to_slice a1) Slice.Insts.SubtleConstantTimeEq.ct_eq U8.Insts.SubtleConstantTimeEq s s1 /-- [curve25519::field::{impl core::cmp::PartialEq for curve25519::backend::serial::u64::field::FieldElement51}::eq]: Source: 'curve25519/solana-ed25519/src/field.rs', lines 55:4-57:5 Visibility: public -/ def backend.serial.u64.field.FieldElement51.Insts.CoreCmpPartialEqFieldElement51.eq (self : backend.serial.u64.field.FieldElement51) (other : backend.serial.u64.field.FieldElement51) : Result Bool := do let c ← backend.serial.u64.field.FieldElement51.Insts.SubtleConstantTimeEq.ct_eq self other core.convert.IntoFrom.into Bool.Insts.CoreConvertFromChoice c /-- Trait implementation: [curve25519::field::{impl core::cmp::PartialEq for curve25519::backend::serial::u64::field::FieldElement51}] Source: 'curve25519/solana-ed25519/src/field.rs', lines 54:0-58:1 -/ @[reducible] def backend.serial.u64.field.FieldElement51.Insts.CoreCmpPartialEqFieldElement51 : core.cmp.PartialEq backend.serial.u64.field.FieldElement51 backend.serial.u64.field.FieldElement51 := { eq := backend.serial.u64.field.FieldElement51.Insts.CoreCmpPartialEqFieldElement51.eq } /-- Trait implementation: [curve25519::field::{impl core::cmp::Eq for curve25519::backend::serial::u64::field::FieldElement51}] Source: 'curve25519/solana-ed25519/src/field.rs', lines 52:0-52:27 -/ @[reducible] def backend.serial.u64.field.FieldElement51.Insts.CoreCmpEq : core.cmp.Eq backend.serial.u64.field.FieldElement51 := { partialEqInst := backend.serial.u64.field.FieldElement51.Insts.CoreCmpPartialEqFieldElement51 } /-- Trait implementation: [curve25519::field::{impl subtle::ConstantTimeEq for curve25519::backend::serial::u64::field::FieldElement51}] Source: 'curve25519/solana-ed25519/src/field.rs', lines 60:0-67:1 -/ @[reducible] def backend.serial.u64.field.FieldElement51.Insts.SubtleConstantTimeEq : subtle.ConstantTimeEq backend.serial.u64.field.FieldElement51 := { ct_eq := backend.serial.u64.field.FieldElement51.Insts.SubtleConstantTimeEq.ct_eq } /-- [curve25519::field::{impl core::default::Default for curve25519::backend::serial::u64::field::FieldElement51}::default]: Source: 'curve25519/solana-ed25519/src/field.rs', lines 70:4-72:5 Visibility: public -/ def backend.serial.u64.field.FieldElement51.Insts.CoreDefaultDefault.default : Result backend.serial.u64.field.FieldElement51 := do backend.serial.u64.field.FieldElement51.ZERO /-- Trait implementation: [curve25519::field::{impl core::default::Default for curve25519::backend::serial::u64::field::FieldElement51}] Source: 'curve25519/solana-ed25519/src/field.rs', lines 69:0-73:1 -/ @[reducible] def backend.serial.u64.field.FieldElement51.Insts.CoreDefaultDefault : core.default.Default backend.serial.u64.field.FieldElement51 := { default := backend.serial.u64.field.FieldElement51.Insts.CoreDefaultDefault.default } /-- [curve25519::field::{curve25519::backend::serial::u64::field::FieldElement51}::is_negative]: Source: 'curve25519/solana-ed25519/src/field.rs', lines 139:4-142:5 -/ def field.FieldElement51.is_negative (self : backend.serial.u64.field.FieldElement51) : Result subtle.Choice := do let bytes ← backend.serial.u64.field.FieldElement51.to_bytes self let i ← Array.index_usize bytes 0#usize let i1 ← lift (i &&& 1#u8) core.convert.IntoFrom.into subtle.Choice.Insts.CoreConvertFromU8 i1 /-- [curve25519::field::{curve25519::backend::serial::u64::field::FieldElement51}::is_zero]: Source: 'curve25519/solana-ed25519/src/field.rs', lines 149:4-154:5 -/ def field.FieldElement51.is_zero (self : backend.serial.u64.field.FieldElement51) : Result subtle.Choice := do let zero := Array.repeat 32#usize 0#u8 let bytes ← backend.serial.u64.field.FieldElement51.to_bytes self let s ← lift (Array.to_slice bytes) let s1 ← lift (Array.to_slice zero) Slice.Insts.SubtleConstantTimeEq.ct_eq U8.Insts.SubtleConstantTimeEq s s1 /-- [curve25519::field::{curve25519::backend::serial::u64::field::FieldElement51}::pow22501]: Source: 'curve25519/solana-ed25519/src/field.rs', lines 159:4-193:5 -/ def field.FieldElement51.pow22501 (self : backend.serial.u64.field.FieldElement51) : Result (backend.serial.u64.field.FieldElement51 × backend.serial.u64.field.FieldElement51) := do let t0 ← backend.serial.u64.field.FieldElement51.square self let fe ← backend.serial.u64.field.FieldElement51.square t0 let t1 ← backend.serial.u64.field.FieldElement51.square fe let t2 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self t1 let t3 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul t0 t2 let t4 ← backend.serial.u64.field.FieldElement51.square t3 let t5 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul t2 t4 let t6 ← backend.serial.u64.field.FieldElement51.pow2k t5 5#u32 let t7 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul t6 t5 let t8 ← backend.serial.u64.field.FieldElement51.pow2k t7 10#u32 let t9 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul t8 t7 let t10 ← backend.serial.u64.field.FieldElement51.pow2k t9 20#u32 let t11 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul t10 t9 let t12 ← backend.serial.u64.field.FieldElement51.pow2k t11 10#u32 let t13 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul t12 t7 let t14 ← backend.serial.u64.field.FieldElement51.pow2k t13 50#u32 let t15 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul t14 t13 let t16 ← backend.serial.u64.field.FieldElement51.pow2k t15 100#u32 let t17 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul t16 t15 let t18 ← backend.serial.u64.field.FieldElement51.pow2k t17 50#u32 let t19 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul t18 t13 ok (t19, t3) /-- [curve25519::field::{curve25519::backend::serial::u64::field::FieldElement51}::invert]: Source: 'curve25519/solana-ed25519/src/field.rs', lines 280:4-289:5 -/ def field.FieldElement51.invert (self : backend.serial.u64.field.FieldElement51) : Result backend.serial.u64.field.FieldElement51 := do let (t19, t3) ← field.FieldElement51.pow22501 self let t20 ← backend.serial.u64.field.FieldElement51.pow2k t19 5#u32 Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul t20 t3 /-- [curve25519::field::{curve25519::backend::serial::u64::field::FieldElement51}::pow_p58]: Source: 'curve25519/solana-ed25519/src/field.rs', lines 294:4-303:5 -/ def field.FieldElement51.pow_p58 (self : backend.serial.u64.field.FieldElement51) : Result backend.serial.u64.field.FieldElement51 := do let (t19, _) ← field.FieldElement51.pow22501 self let t20 ← backend.serial.u64.field.FieldElement51.pow2k t19 2#u32 Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self t20 /-- [curve25519::field::{curve25519::backend::serial::u64::field::FieldElement51}::sqrt_ratio_i]: Source: 'curve25519/solana-ed25519/src/field.rs', lines 317:4-370:5 -/ def field.FieldElement51.sqrt_ratio_i (u : backend.serial.u64.field.FieldElement51) (v : backend.serial.u64.field.FieldElement51) : Result (subtle.Choice × backend.serial.u64.field.FieldElement51) := do let fe ← backend.serial.u64.field.FieldElement51.square v let v3 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul fe v let fe1 ← backend.serial.u64.field.FieldElement51.square v3 let v7 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul fe1 v let fe2 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul u v3 let fe3 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul u v7 let fe4 ← field.FieldElement51.pow_p58 fe3 let r ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul fe2 fe4 let fe5 ← backend.serial.u64.field.FieldElement51.square r let check ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul v fe5 let i ← backend.serial.u64.constants.SQRT_M1 let correct_sign_sqrt ← backend.serial.u64.field.FieldElement51.Insts.SubtleConstantTimeEq.ct_eq check u let fe6 ← Shared0FieldElement51.Insts.CoreOpsArithNegFieldElement51.neg u let flipped_sign_sqrt ← backend.serial.u64.field.FieldElement51.Insts.SubtleConstantTimeEq.ct_eq check fe6 let fe7 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul fe6 i let flipped_sign_sqrt_i ← backend.serial.u64.field.FieldElement51.Insts.SubtleConstantTimeEq.ct_eq check fe7 let r_prime ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul i r let c ← subtle.Choice.Insts.CoreOpsBitBitOrChoiceChoice.bitor flipped_sign_sqrt flipped_sign_sqrt_i let r1 ← backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_assign r r_prime c let r_is_negative ← field.FieldElement51.is_negative r1 let r_neg ← Shared0FieldElement51.Insts.CoreOpsArithNegFieldElement51.neg r1 let r2 ← backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_assign r1 r_neg r_is_negative let was_nonzero_square ← subtle.Choice.Insts.CoreOpsBitBitOrChoiceChoice.bitor correct_sign_sqrt flipped_sign_sqrt ok (was_nonzero_square, r2) /-- [curve25519::field::{curve25519::backend::serial::u64::field::FieldElement51}::invsqrt]: Source: 'curve25519/solana-ed25519/src/field.rs', lines 384:4-386:5 -/ def field.FieldElement51.invsqrt (self : backend.serial.u64.field.FieldElement51) : Result (subtle.Choice × backend.serial.u64.field.FieldElement51) := do let fe ← backend.serial.u64.field.FieldElement51.ONE field.FieldElement51.sqrt_ratio_i fe self end curve25519