-- 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::array::{impl core::fmt::Debug for [T; N]}] Source: '/rustc/library/core/src/array/mod.rs', lines 355:0-355:57 Name pattern: [core::fmt::Debug<[@T; @N]>] -/ @[reducible, rust_trait_impl "core::fmt::Debug<[@T; @N]>"] def Array.Insts.CoreFmtDebug {T : Type} (N : Std.Usize) (fmtDebugInst : core.fmt.Debug T) : core.fmt.Debug (Array T N) := { fmt := core.array.DebugArray.fmt fmtDebugInst } /-- 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::hash::impls::{impl core::hash::Hash for u8}] Source: '/rustc/library/core/src/hash/mod.rs', lines 810:12-810:29 Name pattern: [core::hash::Hash] -/ @[reducible, rust_trait_impl "core::hash::Hash"] def U8.Insts.CoreHashHash : core.hash.Hash Std.U8 := { hash := fun {H : Type} (HasherInst : core.hash.Hasher H) => U8.Insts.CoreHashHash.hash HasherInst } /-- Trait implementation: [core::iter::range::{impl core::iter::range::Step for u32}] Source: '/rustc/library/core/src/iter/range.rs', lines 266:12-266:43 Name pattern: [core::iter::range::Step] -/ @[reducible, rust_trait_impl "core::iter::range::Step"] def U32.Insts.CoreIterRangeStep : core.iter.range.Step Std.U32 := { cloneInst := core.clone.CloneU32 partialOrdInst := core.cmp.PartialOrdU32 steps_between := U32.Insts.CoreIterRangeStep.steps_between forward_checked := U32.Insts.CoreIterRangeStep.forward_checked backward_checked := U32.Insts.CoreIterRangeStep.backward_checked } /-- 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::curve_models::{impl core::clone::Clone for curve25519::backend::serial::curve_models::ProjectivePoint}::clone]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 153:15-153:20 Visibility: public -/ def backend.serial.curve_models.ProjectivePoint.Insts.CoreCloneClone.clone (self : backend.serial.curve_models.ProjectivePoint) : Result backend.serial.curve_models.ProjectivePoint := do ok self /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl core::clone::Clone for curve25519::backend::serial::curve_models::ProjectivePoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 153:15-153:20 -/ @[reducible] def backend.serial.curve_models.ProjectivePoint.Insts.CoreCloneClone : core.clone.Clone backend.serial.curve_models.ProjectivePoint := { clone := backend.serial.curve_models.ProjectivePoint.Insts.CoreCloneClone.clone } /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl core::marker::Copy for curve25519::backend::serial::curve_models::ProjectivePoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 153:9-153:13 -/ @[reducible] def backend.serial.curve_models.ProjectivePoint.Insts.CoreMarkerCopy : core.marker.Copy backend.serial.curve_models.ProjectivePoint := { cloneInst := backend.serial.curve_models.ProjectivePoint.Insts.CoreCloneClone } /-- [curve25519::backend::serial::curve_models::{impl core::clone::Clone for curve25519::backend::serial::curve_models::CompletedPoint}::clone]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 167:15-167:20 Visibility: public -/ def backend.serial.curve_models.CompletedPoint.Insts.CoreCloneClone.clone (self : backend.serial.curve_models.CompletedPoint) : Result backend.serial.curve_models.CompletedPoint := do ok self /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl core::clone::Clone for curve25519::backend::serial::curve_models::CompletedPoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 167:15-167:20 -/ @[reducible] def backend.serial.curve_models.CompletedPoint.Insts.CoreCloneClone : core.clone.Clone backend.serial.curve_models.CompletedPoint := { clone := backend.serial.curve_models.CompletedPoint.Insts.CoreCloneClone.clone } /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl core::marker::Copy for curve25519::backend::serial::curve_models::CompletedPoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 167:9-167:13 -/ @[reducible] def backend.serial.curve_models.CompletedPoint.Insts.CoreMarkerCopy : core.marker.Copy backend.serial.curve_models.CompletedPoint := { cloneInst := backend.serial.curve_models.CompletedPoint.Insts.CoreCloneClone } /-- [curve25519::backend::serial::curve_models::{impl core::clone::Clone for curve25519::backend::serial::curve_models::AffineNielsPoint}::clone]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 182:15-182:20 Visibility: public -/ def backend.serial.curve_models.AffineNielsPoint.Insts.CoreCloneClone.clone (self : backend.serial.curve_models.AffineNielsPoint) : Result backend.serial.curve_models.AffineNielsPoint := do ok self /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl core::clone::Clone for curve25519::backend::serial::curve_models::AffineNielsPoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 182:15-182:20 -/ @[reducible] def backend.serial.curve_models.AffineNielsPoint.Insts.CoreCloneClone : core.clone.Clone backend.serial.curve_models.AffineNielsPoint := { clone := backend.serial.curve_models.AffineNielsPoint.Insts.CoreCloneClone.clone } /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl core::marker::Copy for curve25519::backend::serial::curve_models::AffineNielsPoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 182:9-182:13 -/ @[reducible] def backend.serial.curve_models.AffineNielsPoint.Insts.CoreMarkerCopy : core.marker.Copy backend.serial.curve_models.AffineNielsPoint := { cloneInst := backend.serial.curve_models.AffineNielsPoint.Insts.CoreCloneClone } /-- [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::{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::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 /-- [curve25519::backend::serial::curve_models::{impl core::cmp::PartialEq for curve25519::backend::serial::curve_models::AffineNielsPoint}::eq]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 182:26-182:35 Visibility: public -/ def backend.serial.curve_models.AffineNielsPoint.Insts.CoreCmpPartialEqAffineNielsPoint.eq (self : backend.serial.curve_models.AffineNielsPoint) (other : backend.serial.curve_models.AffineNielsPoint) : Result Bool := do let b ← backend.serial.u64.field.FieldElement51.Insts.CoreCmpPartialEqFieldElement51.eq self.y_plus_x other.y_plus_x if b then let b1 ← backend.serial.u64.field.FieldElement51.Insts.CoreCmpPartialEqFieldElement51.eq self.y_minus_x other.y_minus_x if b1 then backend.serial.u64.field.FieldElement51.Insts.CoreCmpPartialEqFieldElement51.eq self.xy2d other.xy2d else ok false else ok false /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl core::cmp::PartialEq for curve25519::backend::serial::curve_models::AffineNielsPoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 182:26-182:35 -/ @[reducible] def backend.serial.curve_models.AffineNielsPoint.Insts.CoreCmpPartialEqAffineNielsPoint : core.cmp.PartialEq backend.serial.curve_models.AffineNielsPoint backend.serial.curve_models.AffineNielsPoint := { eq := backend.serial.curve_models.AffineNielsPoint.Insts.CoreCmpPartialEqAffineNielsPoint.eq } /-- [curve25519::backend::serial::curve_models::{impl core::cmp::Eq for curve25519::backend::serial::curve_models::AffineNielsPoint}::assert_fields_are_eq]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 182:22-182:24 Visibility: public -/ def backend.serial.curve_models.AffineNielsPoint.Insts.CoreCmpEq.assert_fields_are_eq (self : backend.serial.curve_models.AffineNielsPoint) : Result Unit := do ok () /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl core::cmp::Eq for curve25519::backend::serial::curve_models::AffineNielsPoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 182:22-182:24 -/ @[reducible] def backend.serial.curve_models.AffineNielsPoint.Insts.CoreCmpEq : core.cmp.Eq backend.serial.curve_models.AffineNielsPoint := { partialEqInst := backend.serial.curve_models.AffineNielsPoint.Insts.CoreCmpPartialEqAffineNielsPoint assert_fields_are_eq := backend.serial.curve_models.AffineNielsPoint.Insts.CoreCmpEq.assert_fields_are_eq } /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl core::marker::StructuralPartialEq for curve25519::backend::serial::curve_models::AffineNielsPoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 182:26-182:35 -/ @[reducible] def backend.serial.curve_models.AffineNielsPoint.Insts.CoreMarkerStructuralPartialEq : core.marker.StructuralPartialEq backend.serial.curve_models.AffineNielsPoint := { } /-- [curve25519::backend::serial::curve_models::{impl core::clone::Clone for curve25519::backend::serial::curve_models::ProjectiveNielsPoint}::clone]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 204:15-204:20 Visibility: public -/ def backend.serial.curve_models.ProjectiveNielsPoint.Insts.CoreCloneClone.clone (self : backend.serial.curve_models.ProjectiveNielsPoint) : Result backend.serial.curve_models.ProjectiveNielsPoint := do ok self /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl core::clone::Clone for curve25519::backend::serial::curve_models::ProjectiveNielsPoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 204:15-204:20 -/ @[reducible] def backend.serial.curve_models.ProjectiveNielsPoint.Insts.CoreCloneClone : core.clone.Clone backend.serial.curve_models.ProjectiveNielsPoint := { clone := backend.serial.curve_models.ProjectiveNielsPoint.Insts.CoreCloneClone.clone } /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl core::marker::Copy for curve25519::backend::serial::curve_models::ProjectiveNielsPoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 204:9-204:13 -/ @[reducible] def backend.serial.curve_models.ProjectiveNielsPoint.Insts.CoreMarkerCopy : core.marker.Copy backend.serial.curve_models.ProjectiveNielsPoint := { cloneInst := backend.serial.curve_models.ProjectiveNielsPoint.Insts.CoreCloneClone } /-- [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::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}::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::curve_models::{impl curve25519::traits::Identity for curve25519::backend::serial::curve_models::ProjectivePoint}::identity]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 230:4-236:5 Visibility: public -/ def backend.serial.curve_models.ProjectivePoint.Insts.Curve25519TraitsIdentity.identity : Result backend.serial.curve_models.ProjectivePoint := do let fe ← backend.serial.u64.field.FieldElement51.ZERO let fe1 ← backend.serial.u64.field.FieldElement51.ONE ok { X := fe, Y := fe1, Z := fe1 } /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl curve25519::traits::Identity for curve25519::backend::serial::curve_models::ProjectivePoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 229:0-237:1 -/ @[reducible] def backend.serial.curve_models.ProjectivePoint.Insts.Curve25519TraitsIdentity : traits.Identity backend.serial.curve_models.ProjectivePoint := { identity := backend.serial.curve_models.ProjectivePoint.Insts.Curve25519TraitsIdentity.identity } /-- [curve25519::backend::serial::curve_models::{impl curve25519::traits::Identity for curve25519::backend::serial::curve_models::ProjectiveNielsPoint}::identity]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 240:4-247:5 Visibility: public -/ def backend.serial.curve_models.ProjectiveNielsPoint.Insts.Curve25519TraitsIdentity.identity : Result backend.serial.curve_models.ProjectiveNielsPoint := do let fe ← backend.serial.u64.field.FieldElement51.ONE let fe1 ← backend.serial.u64.field.FieldElement51.ZERO ok { Y_plus_X := fe, Y_minus_X := fe, Z := fe, T2d := fe1 } /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl curve25519::traits::Identity for curve25519::backend::serial::curve_models::ProjectiveNielsPoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 239:0-248:1 -/ @[reducible] def backend.serial.curve_models.ProjectiveNielsPoint.Insts.Curve25519TraitsIdentity : traits.Identity backend.serial.curve_models.ProjectiveNielsPoint := { identity := backend.serial.curve_models.ProjectiveNielsPoint.Insts.Curve25519TraitsIdentity.identity } /-- [curve25519::backend::serial::curve_models::{impl core::default::Default for curve25519::backend::serial::curve_models::ProjectiveNielsPoint}::default]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 251:4-253:5 Visibility: public -/ def backend.serial.curve_models.ProjectiveNielsPoint.Insts.CoreDefaultDefault.default : Result backend.serial.curve_models.ProjectiveNielsPoint := do backend.serial.curve_models.ProjectiveNielsPoint.Insts.Curve25519TraitsIdentity.identity /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl core::default::Default for curve25519::backend::serial::curve_models::ProjectiveNielsPoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 250:0-254:1 -/ @[reducible] def backend.serial.curve_models.ProjectiveNielsPoint.Insts.CoreDefaultDefault : core.default.Default backend.serial.curve_models.ProjectiveNielsPoint := { default := backend.serial.curve_models.ProjectiveNielsPoint.Insts.CoreDefaultDefault.default } /-- [curve25519::backend::serial::curve_models::{impl curve25519::traits::Identity for curve25519::backend::serial::curve_models::AffineNielsPoint}::identity]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 257:4-263:5 Visibility: public -/ def backend.serial.curve_models.AffineNielsPoint.Insts.Curve25519TraitsIdentity.identity : Result backend.serial.curve_models.AffineNielsPoint := do let fe ← backend.serial.u64.field.FieldElement51.ONE let fe1 ← backend.serial.u64.field.FieldElement51.ZERO ok { y_plus_x := fe, y_minus_x := fe, xy2d := fe1 } /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl curve25519::traits::Identity for curve25519::backend::serial::curve_models::AffineNielsPoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 256:0-264:1 -/ @[reducible] def backend.serial.curve_models.AffineNielsPoint.Insts.Curve25519TraitsIdentity : traits.Identity backend.serial.curve_models.AffineNielsPoint := { identity := backend.serial.curve_models.AffineNielsPoint.Insts.Curve25519TraitsIdentity.identity } /-- [curve25519::backend::serial::curve_models::{impl core::default::Default for curve25519::backend::serial::curve_models::AffineNielsPoint}::default]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 267:4-269:5 Visibility: public -/ def backend.serial.curve_models.AffineNielsPoint.Insts.CoreDefaultDefault.default : Result backend.serial.curve_models.AffineNielsPoint := do backend.serial.curve_models.AffineNielsPoint.Insts.Curve25519TraitsIdentity.identity /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl core::default::Default for curve25519::backend::serial::curve_models::AffineNielsPoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 266:0-270:1 -/ @[reducible] def backend.serial.curve_models.AffineNielsPoint.Insts.CoreDefaultDefault : core.default.Default backend.serial.curve_models.AffineNielsPoint := { default := backend.serial.curve_models.AffineNielsPoint.Insts.CoreDefaultDefault.default } /-- [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::{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::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::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 /-- [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 /-- [curve25519::backend::serial::u64::constants::EDWARDS_D] Source: 'curve25519/solana-ed25519/src/backend/serial/u64/constants.rs', lines 45:0-51:3 -/ @[global_simps, irreducible] def backend.serial.u64.constants.EDWARDS_D : Result backend.serial.u64.field.FieldElement51 := backend.serial.u64.field.FieldElement51.from_limbs (Array.make 5#usize [ 929955233495203#u64, 466365720129213#u64, 1662059464998953#u64, 2033849074728123#u64, 1442794654840575#u64 ]) /-- [curve25519::backend::serial::curve_models::{impl curve25519::traits::ValidityCheck for curve25519::backend::serial::curve_models::ProjectivePoint}::is_valid]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 277:4-288:5 -/ def backend.serial.curve_models.ProjectivePoint.Insts.Curve25519TraitsValidityCheck.is_valid (self : backend.serial.curve_models.ProjectivePoint) : Result Bool := do let XX ← backend.serial.u64.field.FieldElement51.square self.X let YY ← backend.serial.u64.field.FieldElement51.square self.Y let ZZ ← backend.serial.u64.field.FieldElement51.square self.Z let ZZZZ ← backend.serial.u64.field.FieldElement51.square ZZ let fe ← Shared0FieldElement51.Insts.CoreOpsArithSubSharedAFieldElement51FieldElement51.sub YY XX let lhs ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul fe ZZ let fe1 ← backend.serial.u64.constants.EDWARDS_D let fe2 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul XX YY let fe3 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul fe1 fe2 let rhs ← Shared0FieldElement51.Insts.CoreOpsArithAddSharedAFieldElement51FieldElement51.add ZZZZ fe3 backend.serial.u64.field.FieldElement51.Insts.CoreCmpPartialEqFieldElement51.eq lhs rhs /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl curve25519::traits::ValidityCheck for curve25519::backend::serial::curve_models::ProjectivePoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 276:0-289:1 -/ @[reducible] def backend.serial.curve_models.ProjectivePoint.Insts.Curve25519TraitsValidityCheck : traits.ValidityCheck backend.serial.curve_models.ProjectivePoint := { is_valid := backend.serial.curve_models.ProjectivePoint.Insts.Curve25519TraitsValidityCheck.is_valid } /-- [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::curve_models::{impl subtle::ConditionallySelectable for curve25519::backend::serial::curve_models::ProjectiveNielsPoint}::conditional_assign]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 305:4-310:5 Visibility: public -/ def backend.serial.curve_models.ProjectiveNielsPoint.Insts.SubtleConditionallySelectable.conditional_assign (self : backend.serial.curve_models.ProjectiveNielsPoint) (other : backend.serial.curve_models.ProjectiveNielsPoint) (choice : subtle.Choice) : Result backend.serial.curve_models.ProjectiveNielsPoint := do let fe ← backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_assign self.Y_plus_X other.Y_plus_X choice let fe1 ← backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_assign self.Y_minus_X other.Y_minus_X choice let fe2 ← backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_assign self.Z other.Z choice let fe3 ← backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_assign self.T2d other.T2d choice ok { Y_plus_X := fe, Y_minus_X := fe1, Z := fe2, T2d := fe3 } /-- [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 ]) /-- [curve25519::backend::serial::curve_models::{impl subtle::ConditionallySelectable for curve25519::backend::serial::curve_models::ProjectiveNielsPoint}::conditional_select]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 296:4-303:5 Visibility: public -/ def backend.serial.curve_models.ProjectiveNielsPoint.Insts.SubtleConditionallySelectable.conditional_select (a : backend.serial.curve_models.ProjectiveNielsPoint) (b : backend.serial.curve_models.ProjectiveNielsPoint) (choice : subtle.Choice) : Result backend.serial.curve_models.ProjectiveNielsPoint := do let fe ← backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_select a.Y_plus_X b.Y_plus_X choice let fe1 ← backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_select a.Y_minus_X b.Y_minus_X choice let fe2 ← backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_select a.Z b.Z choice let fe3 ← backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_select a.T2d b.T2d choice ok { Y_plus_X := fe, Y_minus_X := fe1, Z := fe2, T2d := fe3 } /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl subtle::ConditionallySelectable for curve25519::backend::serial::curve_models::ProjectiveNielsPoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 295:0-311:1 -/ @[reducible] def backend.serial.curve_models.ProjectiveNielsPoint.Insts.SubtleConditionallySelectable : subtle.ConditionallySelectable backend.serial.curve_models.ProjectiveNielsPoint := { coremarkerCopyInst := backend.serial.curve_models.ProjectiveNielsPoint.Insts.CoreMarkerCopy conditional_select := backend.serial.curve_models.ProjectiveNielsPoint.Insts.SubtleConditionallySelectable.conditional_select conditional_assign := backend.serial.curve_models.ProjectiveNielsPoint.Insts.SubtleConditionallySelectable.conditional_assign conditional_swap := backend.serial.curve_models.ProjectiveNielsPoint.Insts.SubtleConditionallySelectable.conditional_swap } /-- [curve25519::backend::serial::curve_models::{impl subtle::ConditionallySelectable for curve25519::backend::serial::curve_models::AffineNielsPoint}::conditional_assign]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 322:4-326:5 Visibility: public -/ def backend.serial.curve_models.AffineNielsPoint.Insts.SubtleConditionallySelectable.conditional_assign (self : backend.serial.curve_models.AffineNielsPoint) (other : backend.serial.curve_models.AffineNielsPoint) (choice : subtle.Choice) : Result backend.serial.curve_models.AffineNielsPoint := do let fe ← backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_assign self.y_plus_x other.y_plus_x choice let fe1 ← backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_assign self.y_minus_x other.y_minus_x choice let fe2 ← backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_assign self.xy2d other.xy2d choice ok { y_plus_x := fe, y_minus_x := fe1, xy2d := fe2 } /-- [curve25519::backend::serial::curve_models::{impl subtle::ConditionallySelectable for curve25519::backend::serial::curve_models::AffineNielsPoint}::conditional_select]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 314:4-320:5 Visibility: public -/ def backend.serial.curve_models.AffineNielsPoint.Insts.SubtleConditionallySelectable.conditional_select (a : backend.serial.curve_models.AffineNielsPoint) (b : backend.serial.curve_models.AffineNielsPoint) (choice : subtle.Choice) : Result backend.serial.curve_models.AffineNielsPoint := do let fe ← backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_select a.y_plus_x b.y_plus_x choice let fe1 ← backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_select a.y_minus_x b.y_minus_x choice let fe2 ← backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_select a.xy2d b.xy2d choice ok { y_plus_x := fe, y_minus_x := fe1, xy2d := fe2 } /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl subtle::ConditionallySelectable for curve25519::backend::serial::curve_models::AffineNielsPoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 313:0-327:1 -/ @[reducible] def backend.serial.curve_models.AffineNielsPoint.Insts.SubtleConditionallySelectable : subtle.ConditionallySelectable backend.serial.curve_models.AffineNielsPoint := { coremarkerCopyInst := backend.serial.curve_models.AffineNielsPoint.Insts.CoreMarkerCopy conditional_select := backend.serial.curve_models.AffineNielsPoint.Insts.SubtleConditionallySelectable.conditional_select conditional_assign := backend.serial.curve_models.AffineNielsPoint.Insts.SubtleConditionallySelectable.conditional_assign conditional_swap := backend.serial.curve_models.AffineNielsPoint.Insts.SubtleConditionallySelectable.conditional_swap } /-- [curve25519::backend::serial::curve_models::{curve25519::backend::serial::curve_models::ProjectivePoint}::as_extended]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 338:4-345:5 Visibility: public -/ def backend.serial.curve_models.ProjectivePoint.as_extended (self : backend.serial.curve_models.ProjectivePoint) : Result edwards.EdwardsPoint := do let fe ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self.X self.Z let fe1 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self.Y self.Z let fe2 ← backend.serial.u64.field.FieldElement51.square self.Z let fe3 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self.X self.Y ok { X := fe, Y := fe1, Z := fe2, T := fe3 } /-- [curve25519::backend::serial::curve_models::{curve25519::backend::serial::curve_models::CompletedPoint}::as_projective]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 353:4-359:5 Visibility: public -/ def backend.serial.curve_models.CompletedPoint.as_projective (self : backend.serial.curve_models.CompletedPoint) : Result backend.serial.curve_models.ProjectivePoint := do let fe ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self.X self.T let fe1 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self.Y self.Z let fe2 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self.Z self.T ok { X := fe, Y := fe1, Z := fe2 } /-- [curve25519::backend::serial::curve_models::{curve25519::backend::serial::curve_models::CompletedPoint}::as_extended]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 365:4-372:5 Visibility: public -/ def backend.serial.curve_models.CompletedPoint.as_extended (self : backend.serial.curve_models.CompletedPoint) : Result edwards.EdwardsPoint := do let fe ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self.X self.T let fe1 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self.Y self.Z let fe2 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self.Z self.T let fe3 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self.X self.Y ok { X := fe, Y := fe1, Z := fe2, T := fe3 } /-- [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::backend::serial::curve_models::{curve25519::backend::serial::curve_models::ProjectivePoint}::double]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 381:4-397:5 Visibility: public -/ def backend.serial.curve_models.ProjectivePoint.double (self : backend.serial.curve_models.ProjectivePoint) : Result backend.serial.curve_models.CompletedPoint := do let XX ← backend.serial.u64.field.FieldElement51.square self.X let YY ← backend.serial.u64.field.FieldElement51.square self.Y let ZZ2 ← backend.serial.u64.field.FieldElement51.square2 self.Z let X_plus_Y ← Shared0FieldElement51.Insts.CoreOpsArithAddSharedAFieldElement51FieldElement51.add self.X self.Y let X_plus_Y_sq ← backend.serial.u64.field.FieldElement51.square X_plus_Y let YY_plus_XX ← Shared0FieldElement51.Insts.CoreOpsArithAddSharedAFieldElement51FieldElement51.add YY XX let YY_minus_XX ← Shared0FieldElement51.Insts.CoreOpsArithSubSharedAFieldElement51FieldElement51.sub YY XX let fe ← Shared0FieldElement51.Insts.CoreOpsArithSubSharedAFieldElement51FieldElement51.sub X_plus_Y_sq YY_plus_XX let fe1 ← Shared0FieldElement51.Insts.CoreOpsArithSubSharedAFieldElement51FieldElement51.sub ZZ2 YY_minus_XX ok { X := fe, Y := YY_plus_XX, Z := YY_minus_XX, T := fe1 } /-- [curve25519::backend::serial::curve_models::{impl core::ops::arith::Add<&'a curve25519::backend::serial::curve_models::ProjectiveNielsPoint, curve25519::backend::serial::curve_models::CompletedPoint> for &'_1 curve25519::edwards::EdwardsPoint}::add]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 414:4-429:5 Visibility: public -/ def Shared0EdwardsPoint.Insts.CoreOpsArithAddSharedAProjectiveNielsPointCompletedPoint.add (self : edwards.EdwardsPoint) (other : backend.serial.curve_models.ProjectiveNielsPoint) : Result backend.serial.curve_models.CompletedPoint := do let Y_plus_X ← Shared0FieldElement51.Insts.CoreOpsArithAddSharedAFieldElement51FieldElement51.add self.Y self.X let Y_minus_X ← Shared0FieldElement51.Insts.CoreOpsArithSubSharedAFieldElement51FieldElement51.sub self.Y self.X let PP ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul Y_plus_X other.Y_plus_X let MM ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul Y_minus_X other.Y_minus_X let TT2d ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self.T other.T2d let ZZ ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self.Z other.Z let ZZ2 ← Shared0FieldElement51.Insts.CoreOpsArithAddSharedAFieldElement51FieldElement51.add ZZ ZZ let fe ← Shared0FieldElement51.Insts.CoreOpsArithSubSharedAFieldElement51FieldElement51.sub PP MM let fe1 ← Shared0FieldElement51.Insts.CoreOpsArithAddSharedAFieldElement51FieldElement51.add PP MM let fe2 ← Shared0FieldElement51.Insts.CoreOpsArithAddSharedAFieldElement51FieldElement51.add ZZ2 TT2d let fe3 ← Shared0FieldElement51.Insts.CoreOpsArithSubSharedAFieldElement51FieldElement51.sub ZZ2 TT2d ok { X := fe, Y := fe1, Z := fe2, T := fe3 } /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl core::ops::arith::Add<&'a curve25519::backend::serial::curve_models::ProjectiveNielsPoint, curve25519::backend::serial::curve_models::CompletedPoint> for &'_1 curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 411:0-430:1 -/ @[reducible] def Shared0EdwardsPoint.Insts.CoreOpsArithAddSharedAProjectiveNielsPointCompletedPoint : core.ops.arith.Add edwards.EdwardsPoint backend.serial.curve_models.ProjectiveNielsPoint backend.serial.curve_models.CompletedPoint := { add := Shared0EdwardsPoint.Insts.CoreOpsArithAddSharedAProjectiveNielsPointCompletedPoint.add } /-- [curve25519::backend::serial::curve_models::{impl core::ops::arith::Sub<&'a curve25519::backend::serial::curve_models::ProjectiveNielsPoint, curve25519::backend::serial::curve_models::CompletedPoint> for &'_1 curve25519::edwards::EdwardsPoint}::sub]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 436:4-451:5 Visibility: public -/ def Shared0EdwardsPoint.Insts.CoreOpsArithSubSharedAProjectiveNielsPointCompletedPoint.sub (self : edwards.EdwardsPoint) (other : backend.serial.curve_models.ProjectiveNielsPoint) : Result backend.serial.curve_models.CompletedPoint := do let Y_plus_X ← Shared0FieldElement51.Insts.CoreOpsArithAddSharedAFieldElement51FieldElement51.add self.Y self.X let Y_minus_X ← Shared0FieldElement51.Insts.CoreOpsArithSubSharedAFieldElement51FieldElement51.sub self.Y self.X let PM ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul Y_plus_X other.Y_minus_X let MP ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul Y_minus_X other.Y_plus_X let TT2d ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self.T other.T2d let ZZ ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self.Z other.Z let ZZ2 ← Shared0FieldElement51.Insts.CoreOpsArithAddSharedAFieldElement51FieldElement51.add ZZ ZZ let fe ← Shared0FieldElement51.Insts.CoreOpsArithSubSharedAFieldElement51FieldElement51.sub PM MP let fe1 ← Shared0FieldElement51.Insts.CoreOpsArithAddSharedAFieldElement51FieldElement51.add PM MP let fe2 ← Shared0FieldElement51.Insts.CoreOpsArithSubSharedAFieldElement51FieldElement51.sub ZZ2 TT2d let fe3 ← Shared0FieldElement51.Insts.CoreOpsArithAddSharedAFieldElement51FieldElement51.add ZZ2 TT2d ok { X := fe, Y := fe1, Z := fe2, T := fe3 } /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl core::ops::arith::Sub<&'a curve25519::backend::serial::curve_models::ProjectiveNielsPoint, curve25519::backend::serial::curve_models::CompletedPoint> for &'_1 curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 433:0-452:1 -/ @[reducible] def Shared0EdwardsPoint.Insts.CoreOpsArithSubSharedAProjectiveNielsPointCompletedPoint : core.ops.arith.Sub edwards.EdwardsPoint backend.serial.curve_models.ProjectiveNielsPoint backend.serial.curve_models.CompletedPoint := { sub := Shared0EdwardsPoint.Insts.CoreOpsArithSubSharedAProjectiveNielsPointCompletedPoint.sub } /-- [curve25519::backend::serial::curve_models::{impl core::ops::arith::Add<&'a curve25519::backend::serial::curve_models::AffineNielsPoint, curve25519::backend::serial::curve_models::CompletedPoint> for &'_1 curve25519::edwards::EdwardsPoint}::add]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 458:4-472:5 Visibility: public -/ def Shared0EdwardsPoint.Insts.CoreOpsArithAddSharedAAffineNielsPointCompletedPoint.add (self : edwards.EdwardsPoint) (other : backend.serial.curve_models.AffineNielsPoint) : Result backend.serial.curve_models.CompletedPoint := do let Y_plus_X ← Shared0FieldElement51.Insts.CoreOpsArithAddSharedAFieldElement51FieldElement51.add self.Y self.X let Y_minus_X ← Shared0FieldElement51.Insts.CoreOpsArithSubSharedAFieldElement51FieldElement51.sub self.Y self.X let PP ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul Y_plus_X other.y_plus_x let MM ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul Y_minus_X other.y_minus_x let Txy2d ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self.T other.xy2d let Z2 ← Shared0FieldElement51.Insts.CoreOpsArithAddSharedAFieldElement51FieldElement51.add self.Z self.Z let fe ← Shared0FieldElement51.Insts.CoreOpsArithSubSharedAFieldElement51FieldElement51.sub PP MM let fe1 ← Shared0FieldElement51.Insts.CoreOpsArithAddSharedAFieldElement51FieldElement51.add PP MM let fe2 ← Shared0FieldElement51.Insts.CoreOpsArithAddSharedAFieldElement51FieldElement51.add Z2 Txy2d let fe3 ← Shared0FieldElement51.Insts.CoreOpsArithSubSharedAFieldElement51FieldElement51.sub Z2 Txy2d ok { X := fe, Y := fe1, Z := fe2, T := fe3 } /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl core::ops::arith::Add<&'a curve25519::backend::serial::curve_models::AffineNielsPoint, curve25519::backend::serial::curve_models::CompletedPoint> for &'_1 curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 455:0-473:1 -/ @[reducible] def Shared0EdwardsPoint.Insts.CoreOpsArithAddSharedAAffineNielsPointCompletedPoint : core.ops.arith.Add edwards.EdwardsPoint backend.serial.curve_models.AffineNielsPoint backend.serial.curve_models.CompletedPoint := { add := Shared0EdwardsPoint.Insts.CoreOpsArithAddSharedAAffineNielsPointCompletedPoint.add } /-- [curve25519::backend::serial::curve_models::{impl core::ops::arith::Sub<&'a curve25519::backend::serial::curve_models::AffineNielsPoint, curve25519::backend::serial::curve_models::CompletedPoint> for &'_1 curve25519::edwards::EdwardsPoint}::sub]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 479:4-493:5 Visibility: public -/ def Shared0EdwardsPoint.Insts.CoreOpsArithSubSharedAAffineNielsPointCompletedPoint.sub (self : edwards.EdwardsPoint) (other : backend.serial.curve_models.AffineNielsPoint) : Result backend.serial.curve_models.CompletedPoint := do let Y_plus_X ← Shared0FieldElement51.Insts.CoreOpsArithAddSharedAFieldElement51FieldElement51.add self.Y self.X let Y_minus_X ← Shared0FieldElement51.Insts.CoreOpsArithSubSharedAFieldElement51FieldElement51.sub self.Y self.X let PM ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul Y_plus_X other.y_minus_x let MP ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul Y_minus_X other.y_plus_x let Txy2d ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self.T other.xy2d let Z2 ← Shared0FieldElement51.Insts.CoreOpsArithAddSharedAFieldElement51FieldElement51.add self.Z self.Z let fe ← Shared0FieldElement51.Insts.CoreOpsArithSubSharedAFieldElement51FieldElement51.sub PM MP let fe1 ← Shared0FieldElement51.Insts.CoreOpsArithAddSharedAFieldElement51FieldElement51.add PM MP let fe2 ← Shared0FieldElement51.Insts.CoreOpsArithSubSharedAFieldElement51FieldElement51.sub Z2 Txy2d let fe3 ← Shared0FieldElement51.Insts.CoreOpsArithAddSharedAFieldElement51FieldElement51.add Z2 Txy2d ok { X := fe, Y := fe1, Z := fe2, T := fe3 } /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl core::ops::arith::Sub<&'a curve25519::backend::serial::curve_models::AffineNielsPoint, curve25519::backend::serial::curve_models::CompletedPoint> for &'_1 curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 476:0-494:1 -/ @[reducible] def Shared0EdwardsPoint.Insts.CoreOpsArithSubSharedAAffineNielsPointCompletedPoint : core.ops.arith.Sub edwards.EdwardsPoint backend.serial.curve_models.AffineNielsPoint backend.serial.curve_models.CompletedPoint := { sub := Shared0EdwardsPoint.Insts.CoreOpsArithSubSharedAAffineNielsPointCompletedPoint.sub } /-- [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 /-- [curve25519::backend::serial::curve_models::{impl core::ops::arith::Neg for &'_0 curve25519::backend::serial::curve_models::ProjectiveNielsPoint}::neg]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 503:4-510:5 Visibility: public -/ def Shared0ProjectiveNielsPoint.Insts.CoreOpsArithNegProjectiveNielsPoint.neg (self : backend.serial.curve_models.ProjectiveNielsPoint) : Result backend.serial.curve_models.ProjectiveNielsPoint := do let fe ← Shared0FieldElement51.Insts.CoreOpsArithNegFieldElement51.neg self.T2d ok { self with Y_plus_X := self.Y_minus_X, Y_minus_X := self.Y_plus_X, T2d := fe } /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl core::ops::arith::Neg for &'_0 curve25519::backend::serial::curve_models::ProjectiveNielsPoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 500:0-511:1 -/ @[reducible] def Shared0ProjectiveNielsPoint.Insts.CoreOpsArithNegProjectiveNielsPoint : core.ops.arith.Neg backend.serial.curve_models.ProjectiveNielsPoint backend.serial.curve_models.ProjectiveNielsPoint := { neg := Shared0ProjectiveNielsPoint.Insts.CoreOpsArithNegProjectiveNielsPoint.neg } /-- [curve25519::backend::serial::curve_models::{impl core::ops::arith::Neg for &'_0 curve25519::backend::serial::curve_models::AffineNielsPoint}::neg]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 516:4-522:5 Visibility: public -/ def Shared0AffineNielsPoint.Insts.CoreOpsArithNegAffineNielsPoint.neg (self : backend.serial.curve_models.AffineNielsPoint) : Result backend.serial.curve_models.AffineNielsPoint := do let fe ← Shared0FieldElement51.Insts.CoreOpsArithNegFieldElement51.neg self.xy2d ok { y_plus_x := self.y_minus_x, y_minus_x := self.y_plus_x, xy2d := fe } /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl core::ops::arith::Neg for &'_0 curve25519::backend::serial::curve_models::AffineNielsPoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 513:0-523:1 -/ @[reducible] def Shared0AffineNielsPoint.Insts.CoreOpsArithNegAffineNielsPoint : core.ops.arith.Neg backend.serial.curve_models.AffineNielsPoint backend.serial.curve_models.AffineNielsPoint := { neg := Shared0AffineNielsPoint.Insts.CoreOpsArithNegAffineNielsPoint.neg } /-- [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::curve_models::{impl core::fmt::Debug for curve25519::backend::serial::curve_models::ProjectivePoint}::fmt]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 530:4-536:5 Visibility: public -/ def backend.serial.curve_models.ProjectivePoint.Insts.CoreFmtDebug.fmt (self : backend.serial.curve_models.ProjectivePoint) (f : core.fmt.Formatter) : Result ((core.result.Result Unit core.fmt.Error) × core.fmt.Formatter) := do let a ← core.fmt.rt.Argument.new_debug (core.fmt.DebugShared backend.serial.u64.field.FieldElement51.Insts.CoreFmtDebug) self.X let a1 ← core.fmt.rt.Argument.new_debug (core.fmt.DebugShared backend.serial.u64.field.FieldElement51.Insts.CoreFmtDebug) self.Y let a2 ← core.fmt.rt.Argument.new_debug (core.fmt.DebugShared backend.serial.u64.field.FieldElement51.Insts.CoreFmtDebug) self.Z let a3 ← core.fmt.Arguments.new (Array.make 43#usize [ 21#u8, 80#u8, 114#u8, 111#u8, 106#u8, 101#u8, 99#u8, 116#u8, 105#u8, 118#u8, 101#u8, 80#u8, 111#u8, 105#u8, 110#u8, 116#u8, 123#u8, 10#u8, 9#u8, 88#u8, 58#u8, 32#u8, 192#u8, 6#u8, 44#u8, 10#u8, 9#u8, 89#u8, 58#u8, 32#u8, 192#u8, 6#u8, 44#u8, 10#u8, 9#u8, 90#u8, 58#u8, 32#u8, 192#u8, 2#u8, 10#u8, 125#u8, 0#u8 ]) (Array.make 3#usize [ a, a1, a2 ]) core.fmt.Formatter.write_fmt f a3 /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl core::fmt::Debug for curve25519::backend::serial::curve_models::ProjectivePoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 529:0-537:1 -/ @[reducible] def backend.serial.curve_models.ProjectivePoint.Insts.CoreFmtDebug : core.fmt.Debug backend.serial.curve_models.ProjectivePoint := { fmt := backend.serial.curve_models.ProjectivePoint.Insts.CoreFmtDebug.fmt } /-- [curve25519::backend::serial::curve_models::{impl core::fmt::Debug for curve25519::backend::serial::curve_models::CompletedPoint}::fmt]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 540:4-546:5 Visibility: public -/ def backend.serial.curve_models.CompletedPoint.Insts.CoreFmtDebug.fmt (self : backend.serial.curve_models.CompletedPoint) (f : core.fmt.Formatter) : Result ((core.result.Result Unit core.fmt.Error) × core.fmt.Formatter) := do let a ← core.fmt.rt.Argument.new_debug (core.fmt.DebugShared backend.serial.u64.field.FieldElement51.Insts.CoreFmtDebug) self.X let a1 ← core.fmt.rt.Argument.new_debug (core.fmt.DebugShared backend.serial.u64.field.FieldElement51.Insts.CoreFmtDebug) self.Y let a2 ← core.fmt.rt.Argument.new_debug (core.fmt.DebugShared backend.serial.u64.field.FieldElement51.Insts.CoreFmtDebug) self.Z let a3 ← core.fmt.rt.Argument.new_debug (core.fmt.DebugShared backend.serial.u64.field.FieldElement51.Insts.CoreFmtDebug) self.T let a4 ← core.fmt.Arguments.new (Array.make 50#usize [ 20#u8, 67#u8, 111#u8, 109#u8, 112#u8, 108#u8, 101#u8, 116#u8, 101#u8, 100#u8, 80#u8, 111#u8, 105#u8, 110#u8, 116#u8, 123#u8, 10#u8, 9#u8, 88#u8, 58#u8, 32#u8, 192#u8, 6#u8, 44#u8, 10#u8, 9#u8, 89#u8, 58#u8, 32#u8, 192#u8, 6#u8, 44#u8, 10#u8, 9#u8, 90#u8, 58#u8, 32#u8, 192#u8, 6#u8, 44#u8, 10#u8, 9#u8, 84#u8, 58#u8, 32#u8, 192#u8, 2#u8, 10#u8, 125#u8, 0#u8 ]) (Array.make 4#usize [ a, a1, a2, a3 ]) core.fmt.Formatter.write_fmt f a4 /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl core::fmt::Debug for curve25519::backend::serial::curve_models::CompletedPoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 539:0-547:1 -/ @[reducible] def backend.serial.curve_models.CompletedPoint.Insts.CoreFmtDebug : core.fmt.Debug backend.serial.curve_models.CompletedPoint := { fmt := backend.serial.curve_models.CompletedPoint.Insts.CoreFmtDebug.fmt } /-- [curve25519::backend::serial::curve_models::{impl core::fmt::Debug for curve25519::backend::serial::curve_models::AffineNielsPoint}::fmt]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 550:4-556:5 Visibility: public -/ def backend.serial.curve_models.AffineNielsPoint.Insts.CoreFmtDebug.fmt (self : backend.serial.curve_models.AffineNielsPoint) (f : core.fmt.Formatter) : Result ((core.result.Result Unit core.fmt.Error) × core.fmt.Formatter) := do let a ← core.fmt.rt.Argument.new_debug (core.fmt.DebugShared backend.serial.u64.field.FieldElement51.Insts.CoreFmtDebug) self.y_plus_x let a1 ← core.fmt.rt.Argument.new_debug (core.fmt.DebugShared backend.serial.u64.field.FieldElement51.Insts.CoreFmtDebug) self.y_minus_x let a2 ← core.fmt.rt.Argument.new_debug (core.fmt.DebugShared backend.serial.u64.field.FieldElement51.Insts.CoreFmtDebug) self.xy2d let a3 ← core.fmt.Arguments.new (Array.make 62#usize [ 29#u8, 65#u8, 102#u8, 102#u8, 105#u8, 110#u8, 101#u8, 78#u8, 105#u8, 101#u8, 108#u8, 115#u8, 80#u8, 111#u8, 105#u8, 110#u8, 116#u8, 123#u8, 10#u8, 9#u8, 121#u8, 95#u8, 112#u8, 108#u8, 117#u8, 115#u8, 95#u8, 120#u8, 58#u8, 32#u8, 192#u8, 14#u8, 44#u8, 10#u8, 9#u8, 121#u8, 95#u8, 109#u8, 105#u8, 110#u8, 117#u8, 115#u8, 95#u8, 120#u8, 58#u8, 32#u8, 192#u8, 9#u8, 44#u8, 10#u8, 9#u8, 120#u8, 121#u8, 50#u8, 100#u8, 58#u8, 32#u8, 192#u8, 2#u8, 10#u8, 125#u8, 0#u8 ]) (Array.make 3#usize [ a, a1, a2 ]) core.fmt.Formatter.write_fmt f a3 /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl core::fmt::Debug for curve25519::backend::serial::curve_models::AffineNielsPoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 549:0-557:1 -/ @[reducible] def backend.serial.curve_models.AffineNielsPoint.Insts.CoreFmtDebug : core.fmt.Debug backend.serial.curve_models.AffineNielsPoint := { fmt := backend.serial.curve_models.AffineNielsPoint.Insts.CoreFmtDebug.fmt } /-- [curve25519::backend::serial::curve_models::{impl core::fmt::Debug for curve25519::backend::serial::curve_models::ProjectiveNielsPoint}::fmt]: Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 560:4-566:5 Visibility: public -/ def backend.serial.curve_models.ProjectiveNielsPoint.Insts.CoreFmtDebug.fmt (self : backend.serial.curve_models.ProjectiveNielsPoint) (f : core.fmt.Formatter) : Result ((core.result.Result Unit core.fmt.Error) × core.fmt.Formatter) := do let a ← core.fmt.rt.Argument.new_debug (core.fmt.DebugShared backend.serial.u64.field.FieldElement51.Insts.CoreFmtDebug) self.Y_plus_X let a1 ← core.fmt.rt.Argument.new_debug (core.fmt.DebugShared backend.serial.u64.field.FieldElement51.Insts.CoreFmtDebug) self.Y_minus_X let a2 ← core.fmt.rt.Argument.new_debug (core.fmt.DebugShared backend.serial.u64.field.FieldElement51.Insts.CoreFmtDebug) self.Z let a3 ← core.fmt.rt.Argument.new_debug (core.fmt.DebugShared backend.serial.u64.field.FieldElement51.Insts.CoreFmtDebug) self.T2d let a4 ← core.fmt.Arguments.new (Array.make 73#usize [ 33#u8, 80#u8, 114#u8, 111#u8, 106#u8, 101#u8, 99#u8, 116#u8, 105#u8, 118#u8, 101#u8, 78#u8, 105#u8, 101#u8, 108#u8, 115#u8, 80#u8, 111#u8, 105#u8, 110#u8, 116#u8, 123#u8, 10#u8, 9#u8, 89#u8, 95#u8, 112#u8, 108#u8, 117#u8, 115#u8, 95#u8, 88#u8, 58#u8, 32#u8, 192#u8, 14#u8, 44#u8, 10#u8, 9#u8, 89#u8, 95#u8, 109#u8, 105#u8, 110#u8, 117#u8, 115#u8, 95#u8, 88#u8, 58#u8, 32#u8, 192#u8, 6#u8, 44#u8, 10#u8, 9#u8, 90#u8, 58#u8, 32#u8, 192#u8, 8#u8, 44#u8, 10#u8, 9#u8, 84#u8, 50#u8, 100#u8, 58#u8, 32#u8, 192#u8, 2#u8, 10#u8, 125#u8, 0#u8 ]) (Array.make 4#usize [ a, a1, a2, a3 ]) core.fmt.Formatter.write_fmt f a4 /-- Trait implementation: [curve25519::backend::serial::curve_models::{impl core::fmt::Debug for curve25519::backend::serial::curve_models::ProjectiveNielsPoint}] Source: 'curve25519/solana-ed25519/src/backend/serial/curve_models.rs', lines 559:0-567:1 -/ @[reducible] def backend.serial.curve_models.ProjectiveNielsPoint.Insts.CoreFmtDebug : core.fmt.Debug backend.serial.curve_models.ProjectiveNielsPoint := { fmt := backend.serial.curve_models.ProjectiveNielsPoint.Insts.CoreFmtDebug.fmt } /-- [curve25519::backend::serial::scalar_mul::vartime_double_base::dsm_top_index]: Source: 'curve25519/solana-ed25519/src/backend/serial/scalar_mul/vartime_double_base.rs', lines 29:0-37:1 -/ def backend.serial.scalar_mul.vartime_double_base.dsm_top_index (a_naf : Array Std.I8 256#usize) (b_naf : Array Std.I8 256#usize) : Result Std.Usize := do ok 255#usize /-- [curve25519::window::{curve25519::window::NafLookupTable5}::select]: Source: 'curve25519/solana-ed25519/src/window.rs', lines 217:4-222:5 Visibility: public -/ def window.NafLookupTable5.select {T : Type} (coremarkerCopyInst : core.marker.Copy T) (self : window.NafLookupTable5 T) (x : Std.Usize) : Result T := do let left_val ← lift (x &&& 1#usize) massert (left_val = 1#usize) massert (x < 16#usize) let i ← x / 2#usize Array.index_usize self i /-- [curve25519::backend::serial::scalar_mul::vartime_double_base::dsm_step_p]: Source: 'curve25519/solana-ed25519/src/backend/serial/scalar_mul/vartime_double_base.rs', lines 86:0-98:1 -/ def backend.serial.scalar_mul.vartime_double_base.dsm_step_p (t : backend.serial.curve_models.CompletedPoint) (table : window.NafLookupTable5 backend.serial.curve_models.ProjectiveNielsPoint) (d : Std.I8) : Result backend.serial.curve_models.CompletedPoint := do if d > 0#i8 then let ep ← backend.serial.curve_models.CompletedPoint.as_extended t let i ← lift (IScalar.hcast .Usize d) let pnp ← window.NafLookupTable5.select backend.serial.curve_models.ProjectiveNielsPoint.Insts.CoreMarkerCopy table i Shared0EdwardsPoint.Insts.CoreOpsArithAddSharedAProjectiveNielsPointCompletedPoint.add ep pnp else if d < 0#i8 then let ep ← backend.serial.curve_models.CompletedPoint.as_extended t let i ← -. d let i1 ← lift (IScalar.hcast .Usize i) let pnp ← window.NafLookupTable5.select backend.serial.curve_models.ProjectiveNielsPoint.Insts.CoreMarkerCopy table i1 Shared0EdwardsPoint.Insts.CoreOpsArithSubSharedAProjectiveNielsPointCompletedPoint.sub ep pnp else ok t /-- [curve25519::backend::serial::scalar_mul::vartime_double_base::dsm_step_b]: Source: 'curve25519/solana-ed25519/src/backend/serial/scalar_mul/vartime_double_base.rs', lines 118:0-124:1 -/ def backend.serial.scalar_mul.vartime_double_base.dsm_step_b (t : backend.serial.curve_models.CompletedPoint) (table : window.NafLookupTable5 backend.serial.curve_models.ProjectiveNielsPoint) (d : Std.I8) : Result backend.serial.curve_models.CompletedPoint := do backend.serial.scalar_mul.vartime_double_base.dsm_step_p t table d /-- [curve25519::backend::serial::scalar_mul::vartime_double_base::dsm_loop]: loop body 0: Source: 'curve25519/solana-ed25519/src/backend/serial/scalar_mul/vartime_double_base.rs', lines 72:4-79:5 -/ @[rust_loop_body] def backend.serial.scalar_mul.vartime_double_base.dsm_loop_loop.body (a_naf : Array Std.I8 256#usize) (b_naf : Array Std.I8 256#usize) (table_a : window.NafLookupTable5 backend.serial.curve_models.ProjectiveNielsPoint) (table_b : window.NafLookupTable5 backend.serial.curve_models.ProjectiveNielsPoint) (r : backend.serial.curve_models.ProjectivePoint) (j : Std.Usize) : Result (ControlFlow (backend.serial.curve_models.ProjectivePoint × Std.Usize) backend.serial.curve_models.ProjectivePoint) := do if j > 0#usize then let idx ← j - 1#usize let t0 ← backend.serial.curve_models.ProjectivePoint.double r let i ← Array.index_usize a_naf idx let t1 ← backend.serial.scalar_mul.vartime_double_base.dsm_step_p t0 table_a i let i1 ← Array.index_usize b_naf idx let t2 ← backend.serial.scalar_mul.vartime_double_base.dsm_step_b t1 table_b i1 let r1 ← backend.serial.curve_models.CompletedPoint.as_projective t2 ok (cont (r1, idx)) else ok (done r) /-- [curve25519::backend::serial::scalar_mul::vartime_double_base::dsm_loop]: loop 0: Source: 'curve25519/solana-ed25519/src/backend/serial/scalar_mul/vartime_double_base.rs', lines 72:4-79:5 -/ @[rust_loop] def backend.serial.scalar_mul.vartime_double_base.dsm_loop_loop (a_naf : Array Std.I8 256#usize) (b_naf : Array Std.I8 256#usize) (table_a : window.NafLookupTable5 backend.serial.curve_models.ProjectiveNielsPoint) (table_b : window.NafLookupTable5 backend.serial.curve_models.ProjectiveNielsPoint) (r : backend.serial.curve_models.ProjectivePoint) (j : Std.Usize) : Result backend.serial.curve_models.ProjectivePoint := do loop (fun (r1, j1) => backend.serial.scalar_mul.vartime_double_base.dsm_loop_loop.body a_naf b_naf table_a table_b r1 j1) (r, j) /-- [curve25519::backend::serial::scalar_mul::vartime_double_base::dsm_loop]: Source: 'curve25519/solana-ed25519/src/backend/serial/scalar_mul/vartime_double_base.rs', lines 63:0-81:1 -/ def backend.serial.scalar_mul.vartime_double_base.dsm_loop (i : Std.Usize) (a_naf : Array Std.I8 256#usize) (b_naf : Array Std.I8 256#usize) (table_a : window.NafLookupTable5 backend.serial.curve_models.ProjectiveNielsPoint) (table_b : window.NafLookupTable5 backend.serial.curve_models.ProjectiveNielsPoint) : Result backend.serial.curve_models.ProjectivePoint := do let r ← backend.serial.curve_models.ProjectivePoint.Insts.Curve25519TraitsIdentity.identity let j ← i + 1#usize backend.serial.scalar_mul.vartime_double_base.dsm_loop_loop a_naf b_naf table_a table_b r j /-- [curve25519::edwards::{curve25519::edwards::EdwardsPoint}::as_projective]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 541:4-547:5 -/ def edwards.EdwardsPoint.as_projective (self : edwards.EdwardsPoint) : Result backend.serial.curve_models.ProjectivePoint := do ok { X := self.X, Y := self.Y, Z := self.Z } /-- [curve25519::edwards::{curve25519::edwards::EdwardsPoint}::double]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 774:4-776:5 -/ def edwards.EdwardsPoint.double (self : edwards.EdwardsPoint) : Result edwards.EdwardsPoint := do let pp ← edwards.EdwardsPoint.as_projective self let cp ← backend.serial.curve_models.ProjectivePoint.double pp backend.serial.curve_models.CompletedPoint.as_extended cp /-- [curve25519::backend::serial::u64::constants::EDWARDS_D2] Source: 'curve25519/solana-ed25519/src/backend/serial/u64/constants.rs', lines 54:0-60:3 -/ @[global_simps, irreducible] def backend.serial.u64.constants.EDWARDS_D2 : Result backend.serial.u64.field.FieldElement51 := backend.serial.u64.field.FieldElement51.from_limbs (Array.make 5#usize [ 1859910466990425#u64, 932731440258426#u64, 1072319116312658#u64, 1815898335770999#u64, 633789495995903#u64 ]) /-- [curve25519::edwards::{curve25519::edwards::EdwardsPoint}::as_projective_niels]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 528:4-535:5 -/ def edwards.EdwardsPoint.as_projective_niels (self : edwards.EdwardsPoint) : Result backend.serial.curve_models.ProjectiveNielsPoint := do let fe ← Shared0FieldElement51.Insts.CoreOpsArithAddSharedAFieldElement51FieldElement51.add self.Y self.X let fe1 ← Shared0FieldElement51.Insts.CoreOpsArithSubSharedAFieldElement51FieldElement51.sub self.Y self.X let fe2 ← backend.serial.u64.constants.EDWARDS_D2 let fe3 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self.T fe2 ok { Y_plus_X := fe, Y_minus_X := fe1, Z := self.Z, T2d := fe3 } /-- [curve25519::window::{impl core::convert::From<&'a curve25519::edwards::EdwardsPoint> for curve25519::window::NafLookupTable5}::from]: loop body 0: Source: 'curve25519/solana-ed25519/src/window.rs', lines 235:8-237:9 Visibility: public -/ @[rust_loop_body] def window.NafLookupTable5ProjectiveNielsPoint.Insts.CoreConvertFromSharedAEdwardsPoint.from_loop.body (A2 : edwards.EdwardsPoint) (iter : core.ops.range.Range Std.Usize) (Ai : Array backend.serial.curve_models.ProjectiveNielsPoint 8#usize) : Result (ControlFlow ((core.ops.range.Range Std.Usize) × (Array backend.serial.curve_models.ProjectiveNielsPoint 8#usize)) (Array backend.serial.curve_models.ProjectiveNielsPoint 8#usize)) := do let (o, iter1) ← core.iter.range.IteratorRange.next core.iter.range.StepUsize iter match o with | none => ok (done Ai) | some i => let pnp ← Array.index_usize Ai i let cp ← Shared0EdwardsPoint.Insts.CoreOpsArithAddSharedAProjectiveNielsPointCompletedPoint.add A2 pnp let ep ← backend.serial.curve_models.CompletedPoint.as_extended cp let pnp1 ← edwards.EdwardsPoint.as_projective_niels ep let i1 ← i + 1#usize let a ← Array.update Ai i1 pnp1 ok (cont (iter1, a)) /-- [curve25519::window::{impl core::convert::From<&'a curve25519::edwards::EdwardsPoint> for curve25519::window::NafLookupTable5}::from]: loop 0: Source: 'curve25519/solana-ed25519/src/window.rs', lines 235:8-237:9 Visibility: public -/ @[rust_loop] def window.NafLookupTable5ProjectiveNielsPoint.Insts.CoreConvertFromSharedAEdwardsPoint.from_loop (iter : core.ops.range.Range Std.Usize) (Ai : Array backend.serial.curve_models.ProjectiveNielsPoint 8#usize) (A2 : edwards.EdwardsPoint) : Result (Array backend.serial.curve_models.ProjectiveNielsPoint 8#usize) := do loop (fun (iter1, Ai1) => window.NafLookupTable5ProjectiveNielsPoint.Insts.CoreConvertFromSharedAEdwardsPoint.from_loop.body A2 iter1 Ai1) (iter, Ai) /-- [curve25519::window::{impl core::convert::From<&'a curve25519::edwards::EdwardsPoint> for curve25519::window::NafLookupTable5}::from]: Source: 'curve25519/solana-ed25519/src/window.rs', lines 232:4-240:5 Visibility: public -/ def window.NafLookupTable5ProjectiveNielsPoint.Insts.CoreConvertFromSharedAEdwardsPoint.from (A : edwards.EdwardsPoint) : Result (window.NafLookupTable5 backend.serial.curve_models.ProjectiveNielsPoint) := do let pnp ← edwards.EdwardsPoint.as_projective_niels A let Ai := Array.repeat 8#usize pnp let A2 ← edwards.EdwardsPoint.double A let Ai1 ← window.NafLookupTable5ProjectiveNielsPoint.Insts.CoreConvertFromSharedAEdwardsPoint.from_loop { start := 0#usize, «end» := 7#usize } Ai A2 ok Ai1 /-- [curve25519::scalar::{curve25519::scalar::Scalar}::non_adjacent_form]: loop body 1: Source: 'curve25519/solana-ed25519/src/scalar.rs', lines 1044:12-1047:13 -/ @[rust_loop_body] def scalar.Scalar.non_adjacent_form_loop0_loop0.body (self : scalar.Scalar) (k : Std.Usize) (t : Std.U64) (bi : Std.Usize) : Result (ControlFlow (Std.U64 × Std.Usize) (scalar.Scalar × Std.U64)) := do if bi < 8#usize then let i ← 8#usize * k let i1 ← i + bi let i2 ← Array.index_usize self.bytes i1 let i3 ← lift (UScalar.cast .U64 i2) let i4 ← 8#usize * bi let i5 ← i3 <<< i4 let t1 ← lift (t ||| i5) let bi1 ← bi + 1#usize ok (cont (t1, bi1)) else ok (done (self, t)) /-- [curve25519::scalar::{curve25519::scalar::Scalar}::non_adjacent_form]: loop 1: Source: 'curve25519/solana-ed25519/src/scalar.rs', lines 1044:12-1047:13 -/ @[rust_loop] def scalar.Scalar.non_adjacent_form_loop0_loop0 (self : scalar.Scalar) (k : Std.Usize) (t : Std.U64) (bi : Std.Usize) : Result (scalar.Scalar × Std.U64) := do loop (fun (t1, bi1) => scalar.Scalar.non_adjacent_form_loop0_loop0.body self k t1 bi1) (t, bi) /-- [curve25519::scalar::{curve25519::scalar::Scalar}::non_adjacent_form]: loop body 0: Source: 'curve25519/solana-ed25519/src/scalar.rs', lines 1041:8-1050:9 -/ @[rust_loop_body] def scalar.Scalar.non_adjacent_form_loop0.body (self : scalar.Scalar) (x_u64 : Array Std.U64 5#usize) (k : Std.Usize) : Result (ControlFlow (scalar.Scalar × (Array Std.U64 5#usize) × Std.Usize) (Array Std.U64 5#usize)) := do if k < 4#usize then let (self1, t) ← scalar.Scalar.non_adjacent_form_loop0_loop0 self k 0#u64 0#usize let a ← Array.update x_u64 k t let k1 ← k + 1#usize ok (cont (self1, a, k1)) else ok (done x_u64) /-- [curve25519::scalar::{curve25519::scalar::Scalar}::non_adjacent_form]: loop 0: Source: 'curve25519/solana-ed25519/src/scalar.rs', lines 1041:8-1050:9 -/ @[rust_loop] def scalar.Scalar.non_adjacent_form_loop0 (self : scalar.Scalar) (x_u64 : Array Std.U64 5#usize) (k : Std.Usize) : Result (Array Std.U64 5#usize) := do loop (fun (self1, x_u641, k1) => scalar.Scalar.non_adjacent_form_loop0.body self1 x_u641 k1) (self, x_u64, k) /-- [curve25519::scalar::{curve25519::scalar::Scalar}::non_adjacent_form]: loop body 2: Source: 'curve25519/solana-ed25519/src/scalar.rs', lines 1057:8-1090:9 -/ @[rust_loop_body] def scalar.Scalar.non_adjacent_form_loop1.body (w : Std.Usize) (x_u64 : Array Std.U64 5#usize) (width : Std.U64) (window_mask : Std.U64) (naf : Array Std.I8 256#usize) (pos : Std.Usize) (carry : Std.U64) : Result (ControlFlow ((Array Std.I8 256#usize) × Std.Usize × Std.U64) (Array Std.I8 256#usize)) := do if pos < 256#usize then let u64_idx ← pos / 64#usize let bit_idx ← pos % 64#usize let i ← 64#usize - w let bit_buf ← if bit_idx < i then do let i1 ← Array.index_usize x_u64 u64_idx i1 >>> bit_idx else do let i1 ← Array.index_usize x_u64 u64_idx let i2 ← i1 >>> bit_idx let i3 ← 1#usize + u64_idx let i4 ← Array.index_usize x_u64 i3 let i5 ← 64#usize - bit_idx let i6 ← i4 <<< i5 ok (i2 ||| i6) let i1 ← lift (bit_buf &&& window_mask) let window ← carry + i1 let i2 ← lift (window &&& 1#u64) if i2 = 0#u64 then let pos1 ← pos + 1#usize ok (cont (naf, pos1, carry)) else let i3 ← width / 2#u64 let (naf1, carry1) ← if window < i3 then do let i4 ← lift (UScalar.hcast .I8 window) let a ← Array.update naf pos i4 ok (a, 0#u64) else do let i4 ← lift (UScalar.hcast .I8 window) let i5 ← lift (UScalar.hcast .I8 width) let i6 ← lift (core.num.I8.wrapping_sub i4 i5) let a ← Array.update naf pos i6 ok (a, 1#u64) let pos1 ← pos + w ok (cont (naf1, pos1, carry1)) else ok (done naf) /-- [curve25519::scalar::{curve25519::scalar::Scalar}::non_adjacent_form]: loop 2: Source: 'curve25519/solana-ed25519/src/scalar.rs', lines 1057:8-1090:9 -/ @[rust_loop] def scalar.Scalar.non_adjacent_form_loop1 (w : Std.Usize) (naf : Array Std.I8 256#usize) (x_u64 : Array Std.U64 5#usize) (width : Std.U64) (window_mask : Std.U64) (pos : Std.Usize) (carry : Std.U64) : Result (Array Std.I8 256#usize) := do loop (fun (naf1, pos1, carry1) => scalar.Scalar.non_adjacent_form_loop1.body w x_u64 width window_mask naf1 pos1 carry1) (naf, pos, carry) /-- [curve25519::scalar::{curve25519::scalar::Scalar}::non_adjacent_form]: Source: 'curve25519/solana-ed25519/src/scalar.rs', lines 1028:4-1093:5 -/ def scalar.Scalar.non_adjacent_form (self : scalar.Scalar) (w : Std.Usize) : Result (Array Std.I8 256#usize) := do massert (w >= 2#usize) massert (w <= 8#usize) let naf := Array.repeat 256#usize 0#i8 let x_u64 := Array.repeat 5#usize 0#u64 let x_u641 ← scalar.Scalar.non_adjacent_form_loop0 self x_u64 0#usize let width ← 1#u64 <<< w let window_mask ← width - 1#u64 scalar.Scalar.non_adjacent_form_loop1 w naf x_u641 width window_mask 0#usize 0#u64 /-- [curve25519::backend::serial::u64::constants::ED25519_BASEPOINT_POINT] Source: 'curve25519/solana-ed25519/src/backend/serial/u64/constants.rs', lines 163:0-186:2 Visibility: public -/ @[global_simps, irreducible] def backend.serial.u64.constants.ED25519_BASEPOINT_POINT : Result edwards.EdwardsPoint := do let fe ← backend.serial.u64.field.FieldElement51.from_limbs (Array.make 5#usize [ 1738742601995546#u64, 1146398526822698#u64, 2070867633025821#u64, 562264141797630#u64, 587772402128613#u64 ]) let fe1 ← backend.serial.u64.field.FieldElement51.from_limbs (Array.make 5#usize [ 1801439850948184#u64, 1351079888211148#u64, 450359962737049#u64, 900719925474099#u64, 1801439850948198#u64 ]) let fe2 ← backend.serial.u64.field.FieldElement51.from_limbs (Array.make 5#usize [ 1#u64, 0#u64, 0#u64, 0#u64, 0#u64 ]) let fe3 ← backend.serial.u64.field.FieldElement51.from_limbs (Array.make 5#usize [ 1841354044333475#u64, 16398895984059#u64, 755974180946558#u64, 900171276175154#u64, 1821297809914039#u64 ]) ok { X := fe, Y := fe1, Z := fe2, T := fe3 } /-- [curve25519::backend::serial::scalar_mul::vartime_double_base::mul]: Source: 'curve25519/solana-ed25519/src/backend/serial/scalar_mul/vartime_double_base.rs', lines 126:0-147:1 Visibility: public -/ def backend.serial.scalar_mul.vartime_double_base.mul (a : scalar.Scalar) (A : edwards.EdwardsPoint) (b : scalar.Scalar) : Result edwards.EdwardsPoint := do let a_naf ← scalar.Scalar.non_adjacent_form a 5#usize let b_naf ← scalar.Scalar.non_adjacent_form b 5#usize let i ← backend.serial.scalar_mul.vartime_double_base.dsm_top_index a_naf b_naf let table_A ← window.NafLookupTable5ProjectiveNielsPoint.Insts.CoreConvertFromSharedAEdwardsPoint.from A let ep ← backend.serial.u64.constants.ED25519_BASEPOINT_POINT let table_B ← window.NafLookupTable5ProjectiveNielsPoint.Insts.CoreConvertFromSharedAEdwardsPoint.from ep let r ← backend.serial.scalar_mul.vartime_double_base.dsm_loop i a_naf b_naf table_A table_B backend.serial.curve_models.ProjectivePoint.as_extended r /-- [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::constants::L] Source: 'curve25519/solana-ed25519/src/backend/serial/u64/constants.rs', lines 129:0-135:3 -/ @[global_simps, irreducible] def backend.serial.u64.constants.L : backend.serial.u64.scalar.Scalar52 := Array.make 5#usize [ 671914833335277#u64, 3916664325105025#u64, 1367801#u64, 0#u64, 17592186044416#u64 ] /-- [curve25519::backend::serial::u64::constants::LFACTOR] Source: 'curve25519/solana-ed25519/src/backend/serial/u64/constants.rs', lines 138:0-138:48 -/ @[global_simps, irreducible] def backend.serial.u64.constants.LFACTOR : Std.U64 := 1439961107955227#u64 /-- [curve25519::backend::serial::u64::constants::R] Source: 'curve25519/solana-ed25519/src/backend/serial/u64/constants.rs', lines 141:0-147:3 -/ @[global_simps, irreducible] def backend.serial.u64.constants.R : backend.serial.u64.scalar.Scalar52 := Array.make 5#usize [ 4302102966953709#u64, 1049714374468698#u64, 4503599278581019#u64, 4503599627370495#u64, 17592186044415#u64 ] /-- [curve25519::backend::serial::u64::constants::RR] Source: 'curve25519/solana-ed25519/src/backend/serial/u64/constants.rs', lines 150:0-156:3 -/ @[global_simps, irreducible] def backend.serial.u64.constants.RR : backend.serial.u64.scalar.Scalar52 := Array.make 5#usize [ 2764609938444603#u64, 3768881411696287#u64, 1616719297148420#u64, 1087343033131391#u64, 10175238647962#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 } /-- 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 } /-- 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::{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::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 } /-- 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_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) /-- 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}::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::scalar::{impl core::ops::index::Index for curve25519::backend::serial::u64::scalar::Scalar52}::index]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 39:4-41:5 Visibility: public -/ def backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index (self : backend.serial.u64.scalar.Scalar52) (_index : Std.Usize) : Result Std.U64 := do Array.index_usize self _index /-- [curve25519::backend::serial::u64::scalar::{impl core::ops::index::IndexMut for curve25519::backend::serial::u64::scalar::Scalar52}::index_mut]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 45:4-47:5 Visibility: public -/ def backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexMutUsizeU64.index_mut (self : backend.serial.u64.scalar.Scalar52) (_index : Std.Usize) : Result (Std.U64 × (Std.U64 → backend.serial.u64.scalar.Scalar52)) := do let (i, index_mut_back) ← Array.index_mut_usize self _index let back := fun i1 => let a := index_mut_back i1 a ok (i, back) /-- [curve25519::backend::serial::u64::scalar::m]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 52:0-54:1 -/ def backend.serial.u64.scalar.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::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::ZERO] Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 58:4-58:57 Visibility: public -/ @[global_simps, irreducible] def backend.serial.u64.scalar.Scalar52.ZERO : backend.serial.u64.scalar.Scalar52 := let a := Array.repeat 5#usize 0#u64 a /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::from_bytes]: loop body 1: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 65:12-67:13 Visibility: public -/ @[rust_loop_body] def backend.serial.u64.scalar.Scalar52.from_bytes_loop0_loop0.body (bytes : Array Std.U8 32#usize) (i : Std.Usize) (iter : core.ops.range.Range Std.Usize) (words : Array Std.U64 4#usize) : Result (ControlFlow ((core.ops.range.Range Std.Usize) × (Array Std.U64 4#usize)) (Array Std.U64 4#usize)) := do let (o, iter1) ← core.iter.range.IteratorRange.next core.iter.range.StepUsize iter match o with | none => ok (done words) | some j => let i1 ← i * 8#usize let i2 ← i1 + j let i3 ← Array.index_usize bytes i2 let i4 ← lift (UScalar.cast .U64 i3) let i5 ← j * 8#usize let i6 ← i4 <<< i5 let i7 ← Array.index_usize words i let i8 ← lift (i7 ||| i6) let a ← Array.update words i i8 ok (cont (iter1, a)) /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::from_bytes]: loop 1: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 65:12-67:13 Visibility: public -/ @[rust_loop] def backend.serial.u64.scalar.Scalar52.from_bytes_loop0_loop0 (iter : core.ops.range.Range Std.Usize) (bytes : Array Std.U8 32#usize) (words : Array Std.U64 4#usize) (i : Std.Usize) : Result (Array Std.U64 4#usize) := do loop (fun (iter1, words1) => backend.serial.u64.scalar.Scalar52.from_bytes_loop0_loop0.body bytes i iter1 words1) (iter, words) /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::from_bytes]: loop body 0: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 64:8-68:9 Visibility: public -/ @[rust_loop_body] def backend.serial.u64.scalar.Scalar52.from_bytes_loop0.body (bytes : Array Std.U8 32#usize) (iter : core.ops.range.Range Std.Usize) (words : Array Std.U64 4#usize) : Result (ControlFlow ((core.ops.range.Range Std.Usize) × (Array Std.U64 4#usize)) (Array Std.U64 4#usize)) := do let (o, iter1) ← core.iter.range.IteratorRange.next core.iter.range.StepUsize iter match o with | none => ok (done words) | some i => let words1 ← backend.serial.u64.scalar.Scalar52.from_bytes_loop0_loop0 { start := 0#usize, «end» := 8#usize } bytes words i ok (cont (iter1, words1)) /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::from_bytes]: loop 0: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 64:8-68:9 Visibility: public -/ @[rust_loop] def backend.serial.u64.scalar.Scalar52.from_bytes_loop0 (iter : core.ops.range.Range Std.Usize) (bytes : Array Std.U8 32#usize) (words : Array Std.U64 4#usize) : Result (Array Std.U64 4#usize) := do loop (fun (iter1, words1) => backend.serial.u64.scalar.Scalar52.from_bytes_loop0.body bytes iter1 words1) (iter, words) /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::from_bytes]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 62:4-84:5 Visibility: public -/ def backend.serial.u64.scalar.Scalar52.from_bytes (bytes : Array Std.U8 32#usize) : Result backend.serial.u64.scalar.Scalar52 := do let words := Array.repeat 4#usize 0#u64 let words1 ← backend.serial.u64.scalar.Scalar52.from_bytes_loop0 { start := 0#usize, «end» := 4#usize } bytes words let i ← 1#u64 <<< 52#i32 let mask ← i - 1#u64 let i1 ← 1#u64 <<< 48#i32 let top_mask ← i1 - 1#u64 let i2 ← Array.index_usize words1 0#usize let (_, index_mut_back) ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexMutUsizeU64.index_mut backend.serial.u64.scalar.Scalar52.ZERO 0#usize let i3 ← lift (i2 &&& mask) let i4 ← i2 >>> 52#i32 let i5 ← Array.index_usize words1 1#usize let i6 ← i5 <<< 12#i32 let i7 ← lift (i4 ||| i6) let s := index_mut_back i3 let (_, index_mut_back1) ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexMutUsizeU64.index_mut s 1#usize let i8 ← lift (i7 &&& mask) let i9 ← i5 >>> 40#i32 let i10 ← Array.index_usize words1 2#usize let i11 ← i10 <<< 24#i32 let i12 ← lift (i9 ||| i11) let s1 := index_mut_back1 i8 let (_, index_mut_back2) ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexMutUsizeU64.index_mut s1 2#usize let i13 ← lift (i12 &&& mask) let i14 ← i10 >>> 28#i32 let i15 ← Array.index_usize words1 3#usize let i16 ← i15 <<< 36#i32 let i17 ← lift (i14 ||| i16) let s2 := index_mut_back2 i13 let (_, index_mut_back3) ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexMutUsizeU64.index_mut s2 3#usize let i18 ← lift (i17 &&& mask) let i19 ← i15 >>> 16#i32 let s3 := index_mut_back3 i18 let (_, index_mut_back4) ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexMutUsizeU64.index_mut s3 4#usize let i20 ← lift (i19 &&& top_mask) ok (index_mut_back4 i20) /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::split_words_lo]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 95:4-104:5 -/ def backend.serial.u64.scalar.Scalar52.split_words_lo (words : Array Std.U64 8#usize) : Result backend.serial.u64.scalar.Scalar52 := do let i ← 1#u64 <<< 52#i32 let mask ← i - 1#u64 let i1 ← Array.index_usize words 0#usize let i2 ← lift (i1 &&& mask) let i3 ← i1 >>> 52#i32 let i4 ← Array.index_usize words 1#usize let i5 ← i4 <<< 12#i32 let i6 ← lift (i3 ||| i5) let i7 ← lift (i6 &&& mask) let i8 ← i4 >>> 40#i32 let i9 ← Array.index_usize words 2#usize let i10 ← i9 <<< 24#i32 let i11 ← lift (i8 ||| i10) let i12 ← lift (i11 &&& mask) let i13 ← i9 >>> 28#i32 let i14 ← Array.index_usize words 3#usize let i15 ← i14 <<< 36#i32 let i16 ← lift (i13 ||| i15) let i17 ← lift (i16 &&& mask) let i18 ← i14 >>> 16#i32 let i19 ← Array.index_usize words 4#usize let i20 ← i19 <<< 48#i32 let i21 ← lift (i18 ||| i20) let i22 ← lift (i21 &&& mask) ok (Array.make 5#usize [ i2, i7, i12, i17, i22 ]) /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::split_words_hi]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 107:4-116:5 -/ def backend.serial.u64.scalar.Scalar52.split_words_hi (words : Array Std.U64 8#usize) : Result backend.serial.u64.scalar.Scalar52 := do let i ← 1#u64 <<< 52#i32 let mask ← i - 1#u64 let i1 ← Array.index_usize words 4#usize let i2 ← i1 >>> 4#i32 let i3 ← lift (i2 &&& mask) let i4 ← i1 >>> 56#i32 let i5 ← Array.index_usize words 5#usize let i6 ← i5 <<< 8#i32 let i7 ← lift (i4 ||| i6) let i8 ← lift (i7 &&& mask) let i9 ← i5 >>> 44#i32 let i10 ← Array.index_usize words 6#usize let i11 ← i10 <<< 20#i32 let i12 ← lift (i9 ||| i11) let i13 ← lift (i12 &&& mask) let i14 ← i10 >>> 32#i32 let i15 ← Array.index_usize words 7#usize let i16 ← i15 <<< 32#i32 let i17 ← lift (i14 ||| i16) let i18 ← lift (i17 &&& mask) let i19 ← i15 >>> 20#i32 let i20 ← lift (i19 &&& mask) ok (Array.make 5#usize [ i3, i8, i13, i18, i20 ]) /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::from_bytes_wide_parts]: loop body 1: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 129:12-131:13 -/ @[rust_loop_body] def backend.serial.u64.scalar.Scalar52.from_bytes_wide_parts_loop0_loop0.body (bytes : Array Std.U8 64#usize) (i : Std.Usize) (iter : core.ops.range.Range Std.Usize) (words : Array Std.U64 8#usize) : Result (ControlFlow ((core.ops.range.Range Std.Usize) × (Array Std.U64 8#usize)) (Array Std.U64 8#usize)) := do let (o, iter1) ← core.iter.range.IteratorRange.next core.iter.range.StepUsize iter match o with | none => ok (done words) | some j => let i1 ← i * 8#usize let i2 ← i1 + j let i3 ← Array.index_usize bytes i2 let i4 ← lift (UScalar.cast .U64 i3) let i5 ← j * 8#usize let i6 ← i4 <<< i5 let i7 ← Array.index_usize words i let i8 ← lift (i7 ||| i6) let a ← Array.update words i i8 ok (cont (iter1, a)) /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::from_bytes_wide_parts]: loop 1: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 129:12-131:13 -/ @[rust_loop] def backend.serial.u64.scalar.Scalar52.from_bytes_wide_parts_loop0_loop0 (iter : core.ops.range.Range Std.Usize) (bytes : Array Std.U8 64#usize) (words : Array Std.U64 8#usize) (i : Std.Usize) : Result (Array Std.U64 8#usize) := do loop (fun (iter1, words1) => backend.serial.u64.scalar.Scalar52.from_bytes_wide_parts_loop0_loop0.body bytes i iter1 words1) (iter, words) /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::from_bytes_wide_parts]: loop body 0: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 128:8-132:9 -/ @[rust_loop_body] def backend.serial.u64.scalar.Scalar52.from_bytes_wide_parts_loop0.body (bytes : Array Std.U8 64#usize) (iter : core.ops.range.Range Std.Usize) (words : Array Std.U64 8#usize) : Result (ControlFlow ((core.ops.range.Range Std.Usize) × (Array Std.U64 8#usize)) (Array Std.U64 8#usize)) := do let (o, iter1) ← core.iter.range.IteratorRange.next core.iter.range.StepUsize iter match o with | none => ok (done words) | some i => let words1 ← backend.serial.u64.scalar.Scalar52.from_bytes_wide_parts_loop0_loop0 { start := 0#usize, «end» := 8#usize } bytes words i ok (cont (iter1, words1)) /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::from_bytes_wide_parts]: loop 0: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 128:8-132:9 -/ @[rust_loop] def backend.serial.u64.scalar.Scalar52.from_bytes_wide_parts_loop0 (iter : core.ops.range.Range Std.Usize) (bytes : Array Std.U8 64#usize) (words : Array Std.U64 8#usize) : Result (Array Std.U64 8#usize) := do loop (fun (iter1, words1) => backend.serial.u64.scalar.Scalar52.from_bytes_wide_parts_loop0.body bytes iter1 words1) (iter, words) /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::from_bytes_wide_parts]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 126:4-134:5 -/ def backend.serial.u64.scalar.Scalar52.from_bytes_wide_parts (bytes : Array Std.U8 64#usize) : Result (backend.serial.u64.scalar.Scalar52 × backend.serial.u64.scalar.Scalar52) := do let words := Array.repeat 8#usize 0#u64 let words1 ← backend.serial.u64.scalar.Scalar52.from_bytes_wide_parts_loop0 { start := 0#usize, «end» := 8#usize } bytes words let s ← backend.serial.u64.scalar.Scalar52.split_words_lo words1 let s1 ← backend.serial.u64.scalar.Scalar52.split_words_hi words1 ok (s, s1) /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::montgomery_reduce::part2]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 299:8-302:9 -/ def backend.serial.u64.scalar.Scalar52.montgomery_reduce.part2 (sum : Std.U128) : Result (Std.U128 × Std.U64) := do let i ← lift (UScalar.cast .U64 sum) let i1 ← 1#u64 <<< 52#i32 let i2 ← i1 - 1#u64 let w ← lift (i &&& i2) let i3 ← sum >>> 52#i32 ok (i3, w) /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::montgomery_reduce::part1]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 293:8-296:9 -/ def backend.serial.u64.scalar.Scalar52.montgomery_reduce.part1 (sum : Std.U128) : Result (Std.U128 × Std.U64) := do let i ← lift (UScalar.cast .U64 sum) let i1 ← lift (core.num.U64.wrapping_mul i backend.serial.u64.constants.LFACTOR) let i2 ← 1#u64 <<< 52#i32 let i3 ← i2 - 1#u64 let p ← lift (i1 &&& i3) let i4 ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index backend.serial.u64.constants.L 0#usize let i5 ← backend.serial.u64.scalar.m p i4 let i6 ← sum + i5 let i7 ← i6 >>> 52#i32 ok (i7, p) /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::conditional_add_l]: loop body 0: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 0:0-226:9 -/ @[rust_loop_body] def backend.serial.u64.scalar.Scalar52.conditional_add_l_loop.body (condition : subtle.Choice) (mask : Std.U64) (iter : core.ops.range.Range Std.Usize) (self : backend.serial.u64.scalar.Scalar52) (carry : Std.U64) : Result (ControlFlow ((core.ops.range.Range Std.Usize) × backend.serial.u64.scalar.Scalar52 × Std.U64) (Std.U64 × backend.serial.u64.scalar.Scalar52)) := do let (o, iter1) ← core.iter.range.IteratorRange.next core.iter.range.StepUsize iter match o with | none => ok (done (carry, self)) | some i => let i1 ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index backend.serial.u64.constants.L i let addend ← U64.Insts.SubtleConditionallySelectable.conditional_select 0#u64 i1 condition let i2 ← carry >>> 52#i32 let i3 ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index self i let i4 ← i2 + i3 let carry1 ← i4 + addend let (_, index_mut_back) ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexMutUsizeU64.index_mut self i let i5 ← lift (carry1 &&& mask) let self1 := index_mut_back i5 ok (cont (iter1, self1, carry1)) /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::conditional_add_l]: loop 0: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 0:0-226:9 -/ @[rust_loop] def backend.serial.u64.scalar.Scalar52.conditional_add_l_loop (iter : core.ops.range.Range Std.Usize) (self : backend.serial.u64.scalar.Scalar52) (condition : subtle.Choice) (carry : Std.U64) (mask : Std.U64) : Result (Std.U64 × backend.serial.u64.scalar.Scalar52) := do loop (fun (iter1, self1, carry1) => backend.serial.u64.scalar.Scalar52.conditional_add_l_loop.body condition mask iter1 self1 carry1) (iter, self, carry) /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::conditional_add_l]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 218:4-229:5 -/ def backend.serial.u64.scalar.Scalar52.conditional_add_l (self : backend.serial.u64.scalar.Scalar52) (condition : subtle.Choice) : Result (Std.U64 × backend.serial.u64.scalar.Scalar52) := do let i ← 1#u64 <<< 52#i32 let mask ← i - 1#u64 backend.serial.u64.scalar.Scalar52.conditional_add_l_loop { start := 0#usize, «end» := 5#usize } self condition 0#u64 mask /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::sub]: loop body 0: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 208:8-211:9 Visibility: public -/ @[rust_loop_body] def backend.serial.u64.scalar.Scalar52.sub_loop.body (a : backend.serial.u64.scalar.Scalar52) (b : backend.serial.u64.scalar.Scalar52) (mask : Std.U64) (iter : core.ops.range.Range Std.Usize) (difference : backend.serial.u64.scalar.Scalar52) (borrow : Std.U64) : Result (ControlFlow ((core.ops.range.Range Std.Usize) × backend.serial.u64.scalar.Scalar52 × Std.U64) (backend.serial.u64.scalar.Scalar52 × Std.U64)) := do let (o, iter1) ← core.iter.range.IteratorRange.next core.iter.range.StepUsize iter match o with | none => ok (done (difference, borrow)) | some i => let i1 ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index a i let i2 ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index b i let i3 ← borrow >>> 63#i32 let i4 ← i2 + i3 let borrow1 ← lift (core.num.U64.wrapping_sub i1 i4) let (_, index_mut_back) ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexMutUsizeU64.index_mut difference i let i5 ← lift (borrow1 &&& mask) let difference1 := index_mut_back i5 ok (cont (iter1, difference1, borrow1)) /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::sub]: loop 0: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 208:8-211:9 Visibility: public -/ @[rust_loop] def backend.serial.u64.scalar.Scalar52.sub_loop (iter : core.ops.range.Range Std.Usize) (a : backend.serial.u64.scalar.Scalar52) (b : backend.serial.u64.scalar.Scalar52) (difference : backend.serial.u64.scalar.Scalar52) (mask : Std.U64) (borrow : Std.U64) : Result (backend.serial.u64.scalar.Scalar52 × Std.U64) := do loop (fun (iter1, difference1, borrow1) => backend.serial.u64.scalar.Scalar52.sub_loop.body a b mask iter1 difference1 borrow1) (iter, difference, borrow) /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::sub]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 202:4-216:5 Visibility: public -/ def backend.serial.u64.scalar.Scalar52.sub (a : backend.serial.u64.scalar.Scalar52) (b : backend.serial.u64.scalar.Scalar52) : Result backend.serial.u64.scalar.Scalar52 := do let i ← 1#u64 <<< 52#i32 let mask ← i - 1#u64 let (difference, borrow) ← backend.serial.u64.scalar.Scalar52.sub_loop { start := 0#usize, «end» := 5#usize } a b backend.serial.u64.scalar.Scalar52.ZERO mask 0#u64 let i1 ← borrow >>> 63#i32 let i2 ← lift (UScalar.cast .U8 i1) let c ← subtle.Choice.Insts.CoreConvertFromU8.from i2 let (_, difference1) ← backend.serial.u64.scalar.Scalar52.conditional_add_l difference c ok difference1 /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::montgomery_reduce]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 290:4-323:5 -/ def backend.serial.u64.scalar.Scalar52.montgomery_reduce (limbs : Array Std.U128 9#usize) : Result backend.serial.u64.scalar.Scalar52 := do let i ← Array.index_usize limbs 0#usize let (carry, n0) ← backend.serial.u64.scalar.Scalar52.montgomery_reduce.part1 i let i1 ← Array.index_usize limbs 1#usize let i2 ← carry + i1 let i3 ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index backend.serial.u64.constants.L 1#usize let i4 ← backend.serial.u64.scalar.m n0 i3 let i5 ← i2 + i4 let (carry1, n1) ← backend.serial.u64.scalar.Scalar52.montgomery_reduce.part1 i5 let i6 ← Array.index_usize limbs 2#usize let i7 ← carry1 + i6 let i8 ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index backend.serial.u64.constants.L 2#usize let i9 ← backend.serial.u64.scalar.m n0 i8 let i10 ← i7 + i9 let i11 ← backend.serial.u64.scalar.m n1 i3 let i12 ← i10 + i11 let (carry2, n2) ← backend.serial.u64.scalar.Scalar52.montgomery_reduce.part1 i12 let i13 ← Array.index_usize limbs 3#usize let i14 ← carry2 + i13 let i15 ← backend.serial.u64.scalar.m n1 i8 let i16 ← i14 + i15 let i17 ← backend.serial.u64.scalar.m n2 i3 let i18 ← i16 + i17 let (carry3, n3) ← backend.serial.u64.scalar.Scalar52.montgomery_reduce.part1 i18 let i19 ← Array.index_usize limbs 4#usize let i20 ← carry3 + i19 let i21 ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index backend.serial.u64.constants.L 4#usize let i22 ← backend.serial.u64.scalar.m n0 i21 let i23 ← i20 + i22 let i24 ← backend.serial.u64.scalar.m n2 i8 let i25 ← i23 + i24 let i26 ← backend.serial.u64.scalar.m n3 i3 let i27 ← i25 + i26 let (carry4, n4) ← backend.serial.u64.scalar.Scalar52.montgomery_reduce.part1 i27 let i28 ← Array.index_usize limbs 5#usize let i29 ← carry4 + i28 let i30 ← backend.serial.u64.scalar.m n1 i21 let i31 ← i29 + i30 let i32 ← backend.serial.u64.scalar.m n3 i8 let i33 ← i31 + i32 let i34 ← backend.serial.u64.scalar.m n4 i3 let i35 ← i33 + i34 let (carry5, r0) ← backend.serial.u64.scalar.Scalar52.montgomery_reduce.part2 i35 let i36 ← Array.index_usize limbs 6#usize let i37 ← carry5 + i36 let i38 ← backend.serial.u64.scalar.m n2 i21 let i39 ← i37 + i38 let i40 ← backend.serial.u64.scalar.m n4 i8 let i41 ← i39 + i40 let (carry6, r1) ← backend.serial.u64.scalar.Scalar52.montgomery_reduce.part2 i41 let i42 ← Array.index_usize limbs 7#usize let i43 ← carry6 + i42 let i44 ← backend.serial.u64.scalar.m n3 i21 let i45 ← i43 + i44 let (carry7, r2) ← backend.serial.u64.scalar.Scalar52.montgomery_reduce.part2 i45 let i46 ← Array.index_usize limbs 8#usize let i47 ← carry7 + i46 let i48 ← backend.serial.u64.scalar.m n4 i21 let i49 ← i47 + i48 let (carry8, r3) ← backend.serial.u64.scalar.Scalar52.montgomery_reduce.part2 i49 let r4 ← lift (UScalar.cast .U64 carry8) backend.serial.u64.scalar.Scalar52.sub (Array.make 5#usize [ r0, r1, r2, r3, r4 ]) backend.serial.u64.constants.L /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::mul_internal]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 247:4-261:5 -/ def backend.serial.u64.scalar.Scalar52.mul_internal (a : backend.serial.u64.scalar.Scalar52) (b : backend.serial.u64.scalar.Scalar52) : Result (Array Std.U128 9#usize) := do let z := Array.repeat 9#usize 0#u128 let i ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index a 0#usize let i1 ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index b 0#usize let i2 ← backend.serial.u64.scalar.m i i1 let z1 ← Array.update z 0#usize i2 let i3 ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index b 1#usize let i4 ← backend.serial.u64.scalar.m i i3 let i5 ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index a 1#usize let i6 ← backend.serial.u64.scalar.m i5 i1 let i7 ← i4 + i6 let z2 ← Array.update z1 1#usize i7 let i8 ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index b 2#usize let i9 ← backend.serial.u64.scalar.m i i8 let i10 ← backend.serial.u64.scalar.m i5 i3 let i11 ← i9 + i10 let i12 ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index a 2#usize let i13 ← backend.serial.u64.scalar.m i12 i1 let i14 ← i11 + i13 let z3 ← Array.update z2 2#usize i14 let i15 ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index b 3#usize let i16 ← backend.serial.u64.scalar.m i i15 let i17 ← backend.serial.u64.scalar.m i5 i8 let i18 ← i16 + i17 let i19 ← backend.serial.u64.scalar.m i12 i3 let i20 ← i18 + i19 let i21 ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index a 3#usize let i22 ← backend.serial.u64.scalar.m i21 i1 let i23 ← i20 + i22 let z4 ← Array.update z3 3#usize i23 let i24 ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index b 4#usize let i25 ← backend.serial.u64.scalar.m i i24 let i26 ← backend.serial.u64.scalar.m i5 i15 let i27 ← i25 + i26 let i28 ← backend.serial.u64.scalar.m i12 i8 let i29 ← i27 + i28 let i30 ← backend.serial.u64.scalar.m i21 i3 let i31 ← i29 + i30 let i32 ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index a 4#usize let i33 ← backend.serial.u64.scalar.m i32 i1 let i34 ← i31 + i33 let z5 ← Array.update z4 4#usize i34 let i35 ← backend.serial.u64.scalar.m i5 i24 let i36 ← backend.serial.u64.scalar.m i12 i15 let i37 ← i35 + i36 let i38 ← backend.serial.u64.scalar.m i21 i8 let i39 ← i37 + i38 let i40 ← backend.serial.u64.scalar.m i32 i3 let i41 ← i39 + i40 let z6 ← Array.update z5 5#usize i41 let i42 ← backend.serial.u64.scalar.m i12 i24 let i43 ← backend.serial.u64.scalar.m i21 i15 let i44 ← i42 + i43 let i45 ← backend.serial.u64.scalar.m i32 i8 let i46 ← i44 + i45 let z7 ← Array.update z6 6#usize i46 let i47 ← backend.serial.u64.scalar.m i21 i24 let i48 ← backend.serial.u64.scalar.m i32 i15 let i49 ← i47 + i48 let z8 ← Array.update z7 7#usize i49 let i50 ← backend.serial.u64.scalar.m i32 i24 Array.update z8 8#usize i50 /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::montgomery_mul]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 367:4-375:5 Visibility: public -/ def backend.serial.u64.scalar.Scalar52.montgomery_mul (a : backend.serial.u64.scalar.Scalar52) (b : backend.serial.u64.scalar.Scalar52) : Result backend.serial.u64.scalar.Scalar52 := do let limbs ← backend.serial.u64.scalar.Scalar52.mul_internal a b backend.serial.u64.scalar.Scalar52.montgomery_reduce limbs /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::add]: loop body 0: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 192:8-195:9 Visibility: public -/ @[rust_loop_body] def backend.serial.u64.scalar.Scalar52.add_loop.body (a : backend.serial.u64.scalar.Scalar52) (b : backend.serial.u64.scalar.Scalar52) (mask : Std.U64) (iter : core.ops.range.Range Std.Usize) (sum : backend.serial.u64.scalar.Scalar52) (carry : Std.U64) : Result (ControlFlow ((core.ops.range.Range Std.Usize) × backend.serial.u64.scalar.Scalar52 × Std.U64) backend.serial.u64.scalar.Scalar52) := do let (o, iter1) ← core.iter.range.IteratorRange.next core.iter.range.StepUsize iter match o with | none => ok (done sum) | some i => let i1 ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index a i let i2 ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index b i let i3 ← i1 + i2 let i4 ← carry >>> 52#i32 let carry1 ← i3 + i4 let (_, index_mut_back) ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexMutUsizeU64.index_mut sum i let i5 ← lift (carry1 &&& mask) let sum1 := index_mut_back i5 ok (cont (iter1, sum1, carry1)) /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::add]: loop 0: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 192:8-195:9 Visibility: public -/ @[rust_loop] def backend.serial.u64.scalar.Scalar52.add_loop (iter : core.ops.range.Range Std.Usize) (a : backend.serial.u64.scalar.Scalar52) (b : backend.serial.u64.scalar.Scalar52) (sum : backend.serial.u64.scalar.Scalar52) (mask : Std.U64) (carry : Std.U64) : Result backend.serial.u64.scalar.Scalar52 := do loop (fun (iter1, sum1, carry1) => backend.serial.u64.scalar.Scalar52.add_loop.body a b mask iter1 sum1 carry1) (iter, sum, carry) /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::add]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 186:4-199:5 Visibility: public -/ def backend.serial.u64.scalar.Scalar52.add (a : backend.serial.u64.scalar.Scalar52) (b : backend.serial.u64.scalar.Scalar52) : Result backend.serial.u64.scalar.Scalar52 := do let i ← 1#u64 <<< 52#i32 let mask ← i - 1#u64 let sum ← backend.serial.u64.scalar.Scalar52.add_loop { start := 0#usize, «end» := 5#usize } a b backend.serial.u64.scalar.Scalar52.ZERO mask 0#u64 backend.serial.u64.scalar.Scalar52.sub sum backend.serial.u64.constants.L /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::from_bytes_wide]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 136:4-141:5 Visibility: public -/ def backend.serial.u64.scalar.Scalar52.from_bytes_wide (bytes : Array Std.U8 64#usize) : Result backend.serial.u64.scalar.Scalar52 := do let (lo, hi) ← backend.serial.u64.scalar.Scalar52.from_bytes_wide_parts bytes let lo1 ← backend.serial.u64.scalar.Scalar52.montgomery_mul lo backend.serial.u64.constants.R let hi1 ← backend.serial.u64.scalar.Scalar52.montgomery_mul hi backend.serial.u64.constants.RR backend.serial.u64.scalar.Scalar52.add hi1 lo1 /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::to_bytes]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 146:4-183:5 Visibility: public -/ def backend.serial.u64.scalar.Scalar52.to_bytes (self : backend.serial.u64.scalar.Scalar52) : Result (Array Std.U8 32#usize) := do let s := Array.repeat 32#usize 0#u8 let i ← Array.index_usize self 0#usize let i1 ← i >>> 0#i32 let i2 ← lift (UScalar.cast .U8 i1) let s1 ← Array.update s 0#usize i2 let i3 ← i >>> 8#i32 let i4 ← lift (UScalar.cast .U8 i3) let s2 ← Array.update s1 1#usize i4 let i5 ← i >>> 16#i32 let i6 ← lift (UScalar.cast .U8 i5) let s3 ← Array.update s2 2#usize i6 let i7 ← i >>> 24#i32 let i8 ← lift (UScalar.cast .U8 i7) let s4 ← Array.update s3 3#usize i8 let i9 ← i >>> 32#i32 let i10 ← lift (UScalar.cast .U8 i9) let s5 ← Array.update s4 4#usize i10 let i11 ← i >>> 40#i32 let i12 ← lift (UScalar.cast .U8 i11) let s6 ← Array.update s5 5#usize i12 let i13 ← i >>> 48#i32 let i14 ← Array.index_usize self 1#usize let i15 ← i14 <<< 4#i32 let i16 ← lift (i13 ||| i15) let i17 ← lift (UScalar.cast .U8 i16) let s7 ← Array.update s6 6#usize i17 let i18 ← i14 >>> 4#i32 let i19 ← lift (UScalar.cast .U8 i18) let s8 ← Array.update s7 7#usize i19 let i20 ← i14 >>> 12#i32 let i21 ← lift (UScalar.cast .U8 i20) let s9 ← Array.update s8 8#usize i21 let i22 ← i14 >>> 20#i32 let i23 ← lift (UScalar.cast .U8 i22) let s10 ← Array.update s9 9#usize i23 let i24 ← i14 >>> 28#i32 let i25 ← lift (UScalar.cast .U8 i24) let s11 ← Array.update s10 10#usize i25 let i26 ← i14 >>> 36#i32 let i27 ← lift (UScalar.cast .U8 i26) let s12 ← Array.update s11 11#usize i27 let i28 ← i14 >>> 44#i32 let i29 ← lift (UScalar.cast .U8 i28) let s13 ← Array.update s12 12#usize i29 let i30 ← Array.index_usize self 2#usize let i31 ← i30 >>> 0#i32 let i32 ← lift (UScalar.cast .U8 i31) let s14 ← Array.update s13 13#usize i32 let i33 ← i30 >>> 8#i32 let i34 ← lift (UScalar.cast .U8 i33) let s15 ← Array.update s14 14#usize i34 let i35 ← i30 >>> 16#i32 let i36 ← lift (UScalar.cast .U8 i35) let s16 ← Array.update s15 15#usize i36 let i37 ← i30 >>> 24#i32 let i38 ← lift (UScalar.cast .U8 i37) let s17 ← Array.update s16 16#usize i38 let i39 ← i30 >>> 32#i32 let i40 ← lift (UScalar.cast .U8 i39) let s18 ← Array.update s17 17#usize i40 let i41 ← i30 >>> 40#i32 let i42 ← lift (UScalar.cast .U8 i41) let s19 ← Array.update s18 18#usize i42 let i43 ← i30 >>> 48#i32 let i44 ← Array.index_usize self 3#usize let i45 ← i44 <<< 4#i32 let i46 ← lift (i43 ||| i45) let i47 ← lift (UScalar.cast .U8 i46) let s20 ← Array.update s19 19#usize i47 let i48 ← i44 >>> 4#i32 let i49 ← lift (UScalar.cast .U8 i48) let s21 ← Array.update s20 20#usize i49 let i50 ← i44 >>> 12#i32 let i51 ← lift (UScalar.cast .U8 i50) let s22 ← Array.update s21 21#usize i51 let i52 ← i44 >>> 20#i32 let i53 ← lift (UScalar.cast .U8 i52) let s23 ← Array.update s22 22#usize i53 let i54 ← i44 >>> 28#i32 let i55 ← lift (UScalar.cast .U8 i54) let s24 ← Array.update s23 23#usize i55 let i56 ← i44 >>> 36#i32 let i57 ← lift (UScalar.cast .U8 i56) let s25 ← Array.update s24 24#usize i57 let i58 ← i44 >>> 44#i32 let i59 ← lift (UScalar.cast .U8 i58) let s26 ← Array.update s25 25#usize i59 let i60 ← Array.index_usize self 4#usize let i61 ← i60 >>> 0#i32 let i62 ← lift (UScalar.cast .U8 i61) let s27 ← Array.update s26 26#usize i62 let i63 ← i60 >>> 8#i32 let i64 ← lift (UScalar.cast .U8 i63) let s28 ← Array.update s27 27#usize i64 let i65 ← i60 >>> 16#i32 let i66 ← lift (UScalar.cast .U8 i65) let s29 ← Array.update s28 28#usize i66 let i67 ← i60 >>> 24#i32 let i68 ← lift (UScalar.cast .U8 i67) let s30 ← Array.update s29 29#usize i68 let i69 ← i60 >>> 32#i32 let i70 ← lift (UScalar.cast .U8 i69) let s31 ← Array.update s30 30#usize i70 let i71 ← i60 >>> 40#i32 let i72 ← lift (UScalar.cast .U8 i71) Array.update s31 31#usize i72 /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::square_internal]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 266:4-285:5 -/ def backend.serial.u64.scalar.Scalar52.square_internal (a : backend.serial.u64.scalar.Scalar52) : Result (Array Std.U128 9#usize) := do let i ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index a 0#usize let i1 ← i * 2#u64 let i2 ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index a 1#usize let i3 ← i2 * 2#u64 let i4 ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index a 2#usize let i5 ← i4 * 2#u64 let i6 ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index a 3#usize let i7 ← i6 * 2#u64 let i8 ← backend.serial.u64.scalar.m i i let i9 ← Array.index_usize (Array.make 4#usize [ i1, i3, i5, i7 ]) 0#usize let i10 ← backend.serial.u64.scalar.m i9 i2 let i11 ← backend.serial.u64.scalar.m i9 i4 let i12 ← backend.serial.u64.scalar.m i2 i2 let i13 ← i11 + i12 let i14 ← backend.serial.u64.scalar.m i9 i6 let i15 ← Array.index_usize (Array.make 4#usize [ i1, i3, i5, i7 ]) 1#usize let i16 ← backend.serial.u64.scalar.m i15 i4 let i17 ← i14 + i16 let i18 ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index a 4#usize let i19 ← backend.serial.u64.scalar.m i9 i18 let i20 ← backend.serial.u64.scalar.m i15 i6 let i21 ← i19 + i20 let i22 ← backend.serial.u64.scalar.m i4 i4 let i23 ← i21 + i22 let i24 ← backend.serial.u64.scalar.m i15 i18 let i25 ← Array.index_usize (Array.make 4#usize [ i1, i3, i5, i7 ]) 2#usize let i26 ← backend.serial.u64.scalar.m i25 i6 let i27 ← i24 + i26 let i28 ← backend.serial.u64.scalar.m i25 i18 let i29 ← backend.serial.u64.scalar.m i6 i6 let i30 ← i28 + i29 let i31 ← Array.index_usize (Array.make 4#usize [ i1, i3, i5, i7 ]) 3#usize let i32 ← backend.serial.u64.scalar.m i31 i18 let i33 ← backend.serial.u64.scalar.m i18 i18 ok (Array.make 9#usize [ i8, i10, i13, i17, i23, i27, i30, i32, i33 ]) /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::mul]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 328:4-342:5 Visibility: public -/ def backend.serial.u64.scalar.Scalar52.mul (a : backend.serial.u64.scalar.Scalar52) (b : backend.serial.u64.scalar.Scalar52) : Result backend.serial.u64.scalar.Scalar52 := do let ab_limbs ← backend.serial.u64.scalar.Scalar52.mul_internal a b let ab ← backend.serial.u64.scalar.Scalar52.montgomery_reduce ab_limbs let rr_limbs ← backend.serial.u64.scalar.Scalar52.mul_internal ab backend.serial.u64.constants.RR backend.serial.u64.scalar.Scalar52.montgomery_reduce rr_limbs /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::square]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 348:4-362:5 Visibility: public -/ def backend.serial.u64.scalar.Scalar52.square (self : backend.serial.u64.scalar.Scalar52) : Result backend.serial.u64.scalar.Scalar52 := do let aa_limbs ← backend.serial.u64.scalar.Scalar52.square_internal self let aa ← backend.serial.u64.scalar.Scalar52.montgomery_reduce aa_limbs let rr_limbs ← backend.serial.u64.scalar.Scalar52.mul_internal aa backend.serial.u64.constants.RR backend.serial.u64.scalar.Scalar52.montgomery_reduce rr_limbs /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::montgomery_square]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 380:4-388:5 Visibility: public -/ def backend.serial.u64.scalar.Scalar52.montgomery_square (self : backend.serial.u64.scalar.Scalar52) : Result backend.serial.u64.scalar.Scalar52 := do let limbs ← backend.serial.u64.scalar.Scalar52.square_internal self backend.serial.u64.scalar.Scalar52.montgomery_reduce limbs /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::as_montgomery]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 392:4-394:5 Visibility: public -/ def backend.serial.u64.scalar.Scalar52.as_montgomery (self : backend.serial.u64.scalar.Scalar52) : Result backend.serial.u64.scalar.Scalar52 := do backend.serial.u64.scalar.Scalar52.montgomery_mul self backend.serial.u64.constants.RR /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::from_montgomery]: loop body 0: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 401:8-403:9 Visibility: public -/ @[rust_loop_body] def backend.serial.u64.scalar.Scalar52.from_montgomery_loop.body (self : backend.serial.u64.scalar.Scalar52) (iter : core.ops.range.Range Std.Usize) (limbs : Array Std.U128 9#usize) : Result (ControlFlow ((core.ops.range.Range Std.Usize) × (Array Std.U128 9#usize)) (Array Std.U128 9#usize)) := do let (o, iter1) ← core.iter.range.IteratorRange.next core.iter.range.StepUsize iter match o with | none => ok (done limbs) | some i => let i1 ← backend.serial.u64.scalar.Scalar52.Insts.CoreOpsIndexIndexUsizeU64.index self i let i2 ← lift (UScalar.cast .U128 i1) let a ← Array.update limbs i i2 ok (cont (iter1, a)) /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::from_montgomery]: loop 0: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 401:8-403:9 Visibility: public -/ @[rust_loop] def backend.serial.u64.scalar.Scalar52.from_montgomery_loop (iter : core.ops.range.Range Std.Usize) (self : backend.serial.u64.scalar.Scalar52) (limbs : Array Std.U128 9#usize) : Result (Array Std.U128 9#usize) := do loop (fun (iter1, limbs1) => backend.serial.u64.scalar.Scalar52.from_montgomery_loop.body self iter1 limbs1) (iter, limbs) /-- [curve25519::backend::serial::u64::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::from_montgomery]: Source: 'curve25519/solana-ed25519/src/backend/serial/u64/scalar.rs', lines 399:4-410:5 Visibility: public -/ def backend.serial.u64.scalar.Scalar52.from_montgomery (self : backend.serial.u64.scalar.Scalar52) : Result backend.serial.u64.scalar.Scalar52 := do let limbs := Array.repeat 9#usize 0#u128 let limbs1 ← backend.serial.u64.scalar.Scalar52.from_montgomery_loop { start := 0#usize, «end» := 5#usize } self limbs backend.serial.u64.scalar.Scalar52.montgomery_reduce limbs1 /-- [curve25519::backend::variable_base_mul]: Source: 'curve25519/solana-ed25519/src/backend.rs', lines 221:0-227:1 Visibility: public -/ def backend.variable_base_mul (point : edwards.EdwardsPoint) (scalar : scalar.Scalar) : Result edwards.EdwardsPoint := do let bk ← backend.get_selected_backend match bk with | backend.BackendKind.Avx2 => backend.vector.scalar_mul.variable_base.spec_avx2.mul point scalar | backend.BackendKind.Serial => backend.serial.scalar_mul.variable_base.mul point scalar /-- [curve25519::backend::vartime_double_base_mul]: Source: 'curve25519/solana-ed25519/src/backend.rs', lines 231:0-237:1 Visibility: public -/ def backend.vartime_double_base_mul (a : scalar.Scalar) (A : edwards.EdwardsPoint) (b : scalar.Scalar) : Result edwards.EdwardsPoint := do let bk ← backend.get_selected_backend match bk with | backend.BackendKind.Avx2 => backend.vector.scalar_mul.vartime_double_base.spec_avx2.mul a A b | backend.BackendKind.Serial => backend.serial.scalar_mul.vartime_double_base.mul a A b /-- [curve25519::edwards::{impl core::ops::arith::Add<&'a curve25519::edwards::EdwardsPoint, curve25519::edwards::EdwardsPoint> for &'_1 curve25519::edwards::EdwardsPoint}::add]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 785:4-787:5 Visibility: public -/ def Shared0EdwardsPoint.Insts.CoreOpsArithAddSharedAEdwardsPointEdwardsPoint.add (self : edwards.EdwardsPoint) (other : edwards.EdwardsPoint) : Result edwards.EdwardsPoint := do let pnp ← edwards.EdwardsPoint.as_projective_niels other let cp ← Shared0EdwardsPoint.Insts.CoreOpsArithAddSharedAProjectiveNielsPointCompletedPoint.add self pnp backend.serial.curve_models.CompletedPoint.as_extended cp /-- [curve25519::edwards::{impl core::ops::arith::Add for curve25519::edwards::EdwardsPoint}::add]: Source: 'curve25519/solana-ed25519/src/macros.rs', lines 33:12-35:13 Visibility: public -/ def edwards.EdwardsPoint.Insts.CoreOpsArithAddEdwardsPointEdwardsPoint.add (self : edwards.EdwardsPoint) (rhs : edwards.EdwardsPoint) : Result edwards.EdwardsPoint := do Shared0EdwardsPoint.Insts.CoreOpsArithAddSharedAEdwardsPointEdwardsPoint.add self rhs /-- [curve25519::edwards::{impl core::ops::arith::Mul<&'a curve25519::scalar::Scalar, curve25519::edwards::EdwardsPoint> for &'_1 curve25519::edwards::EdwardsPoint}::mul]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 884:4-886:5 Visibility: public -/ def Shared0EdwardsPoint.Insts.CoreOpsArithMulSharedAScalarEdwardsPoint.mul (self : edwards.EdwardsPoint) (scalar : scalar.Scalar) : Result edwards.EdwardsPoint := do backend.variable_base_mul self scalar /-- [curve25519::edwards::{impl core::ops::arith::Mul<&'a curve25519::edwards::EdwardsPoint, curve25519::edwards::EdwardsPoint> for &'_1 curve25519::scalar::Scalar}::mul]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 896:4-898:5 Visibility: public -/ def Shared0Scalar.Insts.CoreOpsArithMulSharedAEdwardsPointEdwardsPoint.mul (self : scalar.Scalar) (point : edwards.EdwardsPoint) : Result edwards.EdwardsPoint := do Shared0EdwardsPoint.Insts.CoreOpsArithMulSharedAScalarEdwardsPoint.mul point self /-- [curve25519::edwards::{impl core::ops::arith::Mul for &'a curve25519::scalar::Scalar}::mul]: Source: 'curve25519/solana-ed25519/src/macros.rs', lines 100:12-102:13 Visibility: public -/ def SharedAScalar.Insts.CoreOpsArithMulEdwardsPointEdwardsPoint.mul (self : scalar.Scalar) (rhs : edwards.EdwardsPoint) : Result edwards.EdwardsPoint := do Shared0Scalar.Insts.CoreOpsArithMulSharedAEdwardsPointEdwardsPoint.mul self rhs /-- [curve25519::edwards::{curve25519::edwards::EdwardsPoint}::mul_base]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 906:4-916:5 Visibility: public -/ def edwards.EdwardsPoint.mul_base (scalar : scalar.Scalar) : Result edwards.EdwardsPoint := do let ep ← backend.serial.u64.constants.ED25519_BASEPOINT_POINT SharedAScalar.Insts.CoreOpsArithMulEdwardsPointEdwardsPoint.mul scalar ep /-- [curve25519::backend::vartime_triple_base_mul_128_128_256_prechecked]: Source: 'curve25519/solana-ed25519/src/backend.rs', lines 262:0-280:1 -/ def backend.vartime_triple_base_mul_128_128_256_prechecked (a1 : scalar.Scalar) (A1 : edwards.EdwardsPoint) (a2 : scalar.Scalar) (A2 : edwards.EdwardsPoint) (b : scalar.Scalar) : Result edwards.EdwardsPoint := do let bk ← backend.get_selected_backend match bk with | backend.BackendKind.Avx2 => backend.vector.scalar_mul.vartime_triple_base.spec_avx2.mul_128_128_256_prechecked a1 A1 a2 A2 b | backend.BackendKind.Serial => backend.serial.scalar_mul.vartime_triple_base.mul_128_128_256_prechecked a1 A1 a2 A2 b /-- [curve25519::backend::vartime_triple_base_mul_128_128_256]: Source: 'curve25519/solana-ed25519/src/backend.rs', lines 244:0-256:1 Visibility: public -/ def backend.vartime_triple_base_mul_128_128_256 (a1 : scalar.Scalar) (A1 : edwards.EdwardsPoint) (a2 : scalar.Scalar) (A2 : edwards.EdwardsPoint) (b : scalar.Scalar) : Result edwards.EdwardsPoint := do let b1 ← backend.scalar_fits_in_128_bits a1 if b1 then let b2 ← backend.scalar_fits_in_128_bits a2 if b2 then backend.vartime_triple_base_mul_128_128_256_prechecked a1 A1 a2 A2 b else let ep ← Shared0Scalar.Insts.CoreOpsArithMulSharedAEdwardsPointEdwardsPoint.mul a1 A1 let ep1 ← Shared0Scalar.Insts.CoreOpsArithMulSharedAEdwardsPointEdwardsPoint.mul a2 A2 let ep2 ← edwards.EdwardsPoint.Insts.CoreOpsArithAddEdwardsPointEdwardsPoint.add ep ep1 let ep3 ← edwards.EdwardsPoint.mul_base b edwards.EdwardsPoint.Insts.CoreOpsArithAddEdwardsPointEdwardsPoint.add ep2 ep3 else let ep ← Shared0Scalar.Insts.CoreOpsArithMulSharedAEdwardsPointEdwardsPoint.mul a1 A1 let ep1 ← Shared0Scalar.Insts.CoreOpsArithMulSharedAEdwardsPointEdwardsPoint.mul a2 A2 let ep2 ← edwards.EdwardsPoint.Insts.CoreOpsArithAddEdwardsPointEdwardsPoint.add ep ep1 let ep3 ← edwards.EdwardsPoint.mul_base b edwards.EdwardsPoint.Insts.CoreOpsArithAddEdwardsPointEdwardsPoint.add ep2 ep3 /-- [curve25519::constants::BASEPOINT_ORDER] Source: 'curve25519/solana-ed25519/src/constants.rs', lines 58:0-64:2 -/ @[global_simps, irreducible] def constants.BASEPOINT_ORDER : scalar.Scalar := { bytes := (Array.make 32#usize [ 237#u8, 211#u8, 245#u8, 92#u8, 26#u8, 99#u8, 18#u8, 88#u8, 214#u8, 156#u8, 247#u8, 162#u8, 222#u8, 249#u8, 222#u8, 20#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 16#u8 ]) } /-- [curve25519::edwards::affine::{impl core::clone::Clone for curve25519::edwards::affine::AffinePoint}::clone]: Source: 'curve25519/solana-ed25519/src/edwards/affine.rs', lines 11:15-11:20 Visibility: public -/ def edwards.affine.AffinePoint.Insts.CoreCloneClone.clone (self : edwards.affine.AffinePoint) : Result edwards.affine.AffinePoint := do ok self /-- Trait implementation: [curve25519::edwards::affine::{impl core::clone::Clone for curve25519::edwards::affine::AffinePoint}] Source: 'curve25519/solana-ed25519/src/edwards/affine.rs', lines 11:15-11:20 -/ @[reducible] def edwards.affine.AffinePoint.Insts.CoreCloneClone : core.clone.Clone edwards.affine.AffinePoint := { clone := edwards.affine.AffinePoint.Insts.CoreCloneClone.clone } /-- Trait implementation: [curve25519::edwards::affine::{impl core::marker::Copy for curve25519::edwards::affine::AffinePoint}] Source: 'curve25519/solana-ed25519/src/edwards/affine.rs', lines 11:9-11:13 -/ @[reducible] def edwards.affine.AffinePoint.Insts.CoreMarkerCopy : core.marker.Copy edwards.affine.AffinePoint := { cloneInst := edwards.affine.AffinePoint.Insts.CoreCloneClone } /-- [curve25519::edwards::affine::{impl core::fmt::Debug for curve25519::edwards::affine::AffinePoint}::fmt]: Source: 'curve25519/solana-ed25519/src/edwards/affine.rs', lines 11:22-11:27 Visibility: public -/ def edwards.affine.AffinePoint.Insts.CoreFmtDebug.fmt (self : edwards.affine.AffinePoint) (f : core.fmt.Formatter) : Result ((core.result.Result Unit core.fmt.Error) × core.fmt.Formatter) := do let dyn := Dyn.mk _ backend.serial.u64.field.FieldElement51.Insts.CoreFmtDebug self.x let dyn1 := Dyn.mk _ (core.fmt.DebugShared backend.serial.u64.field.FieldElement51.Insts.CoreFmtDebug) self.y core.fmt.Formatter.debug_struct_field2_finish f (toStr "AffinePoint") (toStr "x") dyn (toStr "y") dyn1 /-- Trait implementation: [curve25519::edwards::affine::{impl core::fmt::Debug for curve25519::edwards::affine::AffinePoint}] Source: 'curve25519/solana-ed25519/src/edwards/affine.rs', lines 11:22-11:27 -/ @[reducible] def edwards.affine.AffinePoint.Insts.CoreFmtDebug : core.fmt.Debug edwards.affine.AffinePoint := { fmt := edwards.affine.AffinePoint.Insts.CoreFmtDebug.fmt } /-- [curve25519::edwards::affine::{impl subtle::ConstantTimeEq for curve25519::edwards::affine::AffinePoint}::ct_eq]: Source: 'curve25519/solana-ed25519/src/edwards/affine.rs', lines 18:4-20:5 Visibility: public -/ def edwards.affine.AffinePoint.Insts.SubtleConstantTimeEq.ct_eq (self : edwards.affine.AffinePoint) (other : edwards.affine.AffinePoint) : Result subtle.Choice := do let c ← backend.serial.u64.field.FieldElement51.Insts.SubtleConstantTimeEq.ct_eq self.x other.x let c1 ← backend.serial.u64.field.FieldElement51.Insts.SubtleConstantTimeEq.ct_eq self.y other.y subtle.Choice.Insts.CoreOpsBitBitAndChoiceChoice.bitand c c1 /-- Trait implementation: [curve25519::edwards::affine::{impl subtle::ConstantTimeEq for curve25519::edwards::affine::AffinePoint}] Source: 'curve25519/solana-ed25519/src/edwards/affine.rs', lines 17:0-21:1 -/ @[reducible] def edwards.affine.AffinePoint.Insts.SubtleConstantTimeEq : subtle.ConstantTimeEq edwards.affine.AffinePoint := { ct_eq := edwards.affine.AffinePoint.Insts.SubtleConstantTimeEq.ct_eq } /-- [curve25519::edwards::affine::{impl subtle::ConditionallySelectable for curve25519::edwards::affine::AffinePoint}::conditional_select]: Source: 'curve25519/solana-ed25519/src/edwards/affine.rs', lines 24:4-29:5 Visibility: public -/ def edwards.affine.AffinePoint.Insts.SubtleConditionallySelectable.conditional_select (a : edwards.affine.AffinePoint) (b : edwards.affine.AffinePoint) (choice : subtle.Choice) : Result edwards.affine.AffinePoint := do let fe ← backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_select a.x b.x choice let fe1 ← backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_select a.y b.y choice ok { x := fe, y := fe1 } /-- Trait implementation: [curve25519::edwards::affine::{impl subtle::ConditionallySelectable for curve25519::edwards::affine::AffinePoint}] Source: 'curve25519/solana-ed25519/src/edwards/affine.rs', lines 23:0-30:1 -/ @[reducible] def edwards.affine.AffinePoint.Insts.SubtleConditionallySelectable : subtle.ConditionallySelectable edwards.affine.AffinePoint := { coremarkerCopyInst := edwards.affine.AffinePoint.Insts.CoreMarkerCopy conditional_select := edwards.affine.AffinePoint.Insts.SubtleConditionallySelectable.conditional_select conditional_assign := edwards.affine.AffinePoint.Insts.SubtleConditionallySelectable.conditional_assign conditional_swap := edwards.affine.AffinePoint.Insts.SubtleConditionallySelectable.conditional_swap } /-- [curve25519::edwards::affine::{impl curve25519::traits::Identity for curve25519::edwards::affine::AffinePoint}::identity]: Source: 'curve25519/solana-ed25519/src/edwards/affine.rs', lines 39:4-44:5 Visibility: public -/ def edwards.affine.AffinePoint.Insts.Curve25519TraitsIdentity.identity : Result edwards.affine.AffinePoint := do let fe ← backend.serial.u64.field.FieldElement51.ZERO let fe1 ← backend.serial.u64.field.FieldElement51.ONE ok { x := fe, y := fe1 } /-- [curve25519::edwards::affine::{impl core::default::Default for curve25519::edwards::affine::AffinePoint}::default]: Source: 'curve25519/solana-ed25519/src/edwards/affine.rs', lines 33:4-35:5 Visibility: public -/ def edwards.affine.AffinePoint.Insts.CoreDefaultDefault.default : Result edwards.affine.AffinePoint := do edwards.affine.AffinePoint.Insts.Curve25519TraitsIdentity.identity /-- Trait implementation: [curve25519::edwards::affine::{impl core::default::Default for curve25519::edwards::affine::AffinePoint}] Source: 'curve25519/solana-ed25519/src/edwards/affine.rs', lines 32:0-36:1 -/ @[reducible] def edwards.affine.AffinePoint.Insts.CoreDefaultDefault : core.default.Default edwards.affine.AffinePoint := { default := edwards.affine.AffinePoint.Insts.CoreDefaultDefault.default } /-- Trait implementation: [curve25519::edwards::affine::{impl curve25519::traits::Identity for curve25519::edwards::affine::AffinePoint}] Source: 'curve25519/solana-ed25519/src/edwards/affine.rs', lines 38:0-45:1 -/ @[reducible] def edwards.affine.AffinePoint.Insts.Curve25519TraitsIdentity : traits.Identity edwards.affine.AffinePoint := { identity := edwards.affine.AffinePoint.Insts.Curve25519TraitsIdentity.identity } /-- [curve25519::edwards::affine::{impl core::cmp::PartialEq for curve25519::edwards::affine::AffinePoint}::eq]: Source: 'curve25519/solana-ed25519/src/edwards/affine.rs', lines 48:4-50:5 Visibility: public -/ def edwards.affine.AffinePoint.Insts.CoreCmpPartialEqAffinePoint.eq (self : edwards.affine.AffinePoint) (other : edwards.affine.AffinePoint) : Result Bool := do let c ← edwards.affine.AffinePoint.Insts.SubtleConstantTimeEq.ct_eq self other core.convert.IntoFrom.into Bool.Insts.CoreConvertFromChoice c /-- Trait implementation: [curve25519::edwards::affine::{impl core::cmp::PartialEq for curve25519::edwards::affine::AffinePoint}] Source: 'curve25519/solana-ed25519/src/edwards/affine.rs', lines 47:0-51:1 -/ @[reducible] def edwards.affine.AffinePoint.Insts.CoreCmpPartialEqAffinePoint : core.cmp.PartialEq edwards.affine.AffinePoint edwards.affine.AffinePoint := { eq := edwards.affine.AffinePoint.Insts.CoreCmpPartialEqAffinePoint.eq } /-- Trait implementation: [curve25519::edwards::affine::{impl core::cmp::Eq for curve25519::edwards::affine::AffinePoint}] Source: 'curve25519/solana-ed25519/src/edwards/affine.rs', lines 53:0-53:26 -/ @[reducible] def edwards.affine.AffinePoint.Insts.CoreCmpEq : core.cmp.Eq edwards.affine.AffinePoint := { partialEqInst := edwards.affine.AffinePoint.Insts.CoreCmpPartialEqAffinePoint assert_fields_are_eq := edwards.affine.AffinePoint.Insts.CoreCmpEq.assert_fields_are_eq } /-- [curve25519::edwards::affine::{curve25519::edwards::affine::AffinePoint}::to_edwards]: Source: 'curve25519/solana-ed25519/src/edwards/affine.rs', lines 60:4-67:5 Visibility: public -/ def edwards.affine.AffinePoint.to_edwards (self : edwards.affine.AffinePoint) : Result edwards.EdwardsPoint := do let fe ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self.x self.y let fe1 ← backend.serial.u64.field.FieldElement51.ONE ok { X := self.x, Y := self.y, Z := fe1, T := fe } /-- [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::edwards::affine::{curve25519::edwards::affine::AffinePoint}::compress]: Source: 'curve25519/solana-ed25519/src/edwards/affine.rs', lines 71:4-75:5 Visibility: public -/ def edwards.affine.AffinePoint.compress (self : edwards.affine.AffinePoint) : Result edwards.CompressedEdwardsY := do let s ← backend.serial.u64.field.FieldElement51.to_bytes self.y let c ← field.FieldElement51.is_negative self.x let i ← subtle.Choice.unwrap_u8 c let i1 ← i <<< 7#i32 let i2 ← Array.index_usize s 31#usize let i3 ← lift (i2 ^^^ i1) let s1 ← Array.update s 31#usize i3 ok s1 /-- [curve25519::edwards::{impl core::ops::arith::Mul for curve25519::edwards::EdwardsPoint}::mul]: Source: 'curve25519/solana-ed25519/src/macros.rs', lines 107:12-109:13 Visibility: public -/ def edwards.EdwardsPoint.Insts.CoreOpsArithMulScalarEdwardsPoint.mul (self : edwards.EdwardsPoint) (rhs : scalar.Scalar) : Result edwards.EdwardsPoint := do Shared0EdwardsPoint.Insts.CoreOpsArithMulSharedAScalarEdwardsPoint.mul self rhs /-- [curve25519::edwards::affine::{impl core::ops::arith::Mul<&'_0 curve25519::edwards::affine::AffinePoint, curve25519::edwards::EdwardsPoint> for curve25519::scalar::Scalar}::mul]: Source: 'curve25519/solana-ed25519/src/edwards/affine.rs', lines 91:4-93:5 Visibility: public -/ def scalar.Scalar.Insts.CoreOpsArithMulShared0AffinePointEdwardsPoint.mul (self : scalar.Scalar) (rhs : edwards.affine.AffinePoint) : Result edwards.EdwardsPoint := do let ep ← edwards.affine.AffinePoint.to_edwards rhs edwards.EdwardsPoint.Insts.CoreOpsArithMulScalarEdwardsPoint.mul ep self /-- [curve25519::edwards::affine::{impl core::ops::arith::Mul for curve25519::scalar::Scalar}::mul]: Source: 'curve25519/solana-ed25519/src/edwards/affine.rs', lines 82:4-84:5 Visibility: public -/ def scalar.Scalar.Insts.CoreOpsArithMulAffinePointEdwardsPoint.mul (self : scalar.Scalar) (rhs : edwards.affine.AffinePoint) : Result edwards.EdwardsPoint := do scalar.Scalar.Insts.CoreOpsArithMulShared0AffinePointEdwardsPoint.mul self rhs /-- Trait implementation: [curve25519::edwards::affine::{impl core::ops::arith::Mul for curve25519::scalar::Scalar}] Source: 'curve25519/solana-ed25519/src/edwards/affine.rs', lines 78:0-85:1 -/ @[reducible] def scalar.Scalar.Insts.CoreOpsArithMulAffinePointEdwardsPoint : core.ops.arith.Mul scalar.Scalar edwards.affine.AffinePoint edwards.EdwardsPoint := { mul := scalar.Scalar.Insts.CoreOpsArithMulAffinePointEdwardsPoint.mul } /-- Trait implementation: [curve25519::edwards::affine::{impl core::ops::arith::Mul<&'_0 curve25519::edwards::affine::AffinePoint, curve25519::edwards::EdwardsPoint> for curve25519::scalar::Scalar}] Source: 'curve25519/solana-ed25519/src/edwards/affine.rs', lines 87:0-94:1 -/ @[reducible] def scalar.Scalar.Insts.CoreOpsArithMulShared0AffinePointEdwardsPoint : core.ops.arith.Mul scalar.Scalar edwards.affine.AffinePoint edwards.EdwardsPoint := { mul := scalar.Scalar.Insts.CoreOpsArithMulShared0AffinePointEdwardsPoint.mul } /-- [curve25519::edwards::{impl core::clone::Clone for curve25519::edwards::CompressedEdwardsY}::clone]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 174:15-174:20 Visibility: public -/ def edwards.CompressedEdwardsY.Insts.CoreCloneClone.clone (self : edwards.CompressedEdwardsY) : Result edwards.CompressedEdwardsY := do ok self /-- Trait implementation: [curve25519::edwards::{impl core::clone::Clone for curve25519::edwards::CompressedEdwardsY}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 174:15-174:20 -/ @[reducible] def edwards.CompressedEdwardsY.Insts.CoreCloneClone : core.clone.Clone edwards.CompressedEdwardsY := { clone := edwards.CompressedEdwardsY.Insts.CoreCloneClone.clone } /-- Trait implementation: [curve25519::edwards::{impl core::marker::Copy for curve25519::edwards::CompressedEdwardsY}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 174:9-174:13 -/ @[reducible] def edwards.CompressedEdwardsY.Insts.CoreMarkerCopy : core.marker.Copy edwards.CompressedEdwardsY := { cloneInst := edwards.CompressedEdwardsY.Insts.CoreCloneClone } /-- [curve25519::edwards::{impl core::hash::Hash for curve25519::edwards::CompressedEdwardsY}::hash]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 174:22-174:26 Visibility: public -/ def edwards.CompressedEdwardsY.Insts.CoreHashHash.hash {__H : Type} (corehashHasherInst : core.hash.Hasher __H) (self : edwards.CompressedEdwardsY) (state : __H) : Result __H := do Array.Insts.CoreHashHash.hash U8.Insts.CoreHashHash corehashHasherInst self state /-- Trait implementation: [curve25519::edwards::{impl core::hash::Hash for curve25519::edwards::CompressedEdwardsY}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 174:22-174:26 -/ @[reducible] def edwards.CompressedEdwardsY.Insts.CoreHashHash : core.hash.Hash edwards.CompressedEdwardsY := { hash := fun {H : Type} (corehashHasherInst : core.hash.Hasher H) => edwards.CompressedEdwardsY.Insts.CoreHashHash.hash corehashHasherInst } /-- [curve25519::edwards::{curve25519::edwards::CompressedEdwardsY}::as_bytes]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 198:4-200:5 Visibility: public -/ def edwards.CompressedEdwardsY.as_bytes (self : edwards.CompressedEdwardsY) : Result (Array Std.U8 32#usize) := do ok self /-- [curve25519::edwards::{impl subtle::ConstantTimeEq for curve25519::edwards::CompressedEdwardsY}::ct_eq]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 178:4-180:5 Visibility: public -/ def edwards.CompressedEdwardsY.Insts.SubtleConstantTimeEq.ct_eq (self : edwards.CompressedEdwardsY) (other : edwards.CompressedEdwardsY) : Result subtle.Choice := do let a ← edwards.CompressedEdwardsY.as_bytes self let s ← lift (Array.to_slice a) let a1 ← edwards.CompressedEdwardsY.as_bytes other let s1 ← lift (Array.to_slice a1) Slice.Insts.SubtleConstantTimeEq.ct_eq U8.Insts.SubtleConstantTimeEq s s1 /-- Trait implementation: [curve25519::edwards::{impl subtle::ConstantTimeEq for curve25519::edwards::CompressedEdwardsY}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 177:0-181:1 -/ @[reducible] def edwards.CompressedEdwardsY.Insts.SubtleConstantTimeEq : subtle.ConstantTimeEq edwards.CompressedEdwardsY := { ct_eq := edwards.CompressedEdwardsY.Insts.SubtleConstantTimeEq.ct_eq } /-- [curve25519::edwards::{impl core::cmp::PartialEq for curve25519::edwards::CompressedEdwardsY}::eq]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 185:4-187:5 Visibility: public -/ def edwards.CompressedEdwardsY.Insts.CoreCmpPartialEqCompressedEdwardsY.eq (self : edwards.CompressedEdwardsY) (other : edwards.CompressedEdwardsY) : Result Bool := do let c ← edwards.CompressedEdwardsY.Insts.SubtleConstantTimeEq.ct_eq self other core.convert.IntoFrom.into Bool.Insts.CoreConvertFromChoice c /-- Trait implementation: [curve25519::edwards::{impl core::cmp::PartialEq for curve25519::edwards::CompressedEdwardsY}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 184:0-188:1 -/ @[reducible] def edwards.CompressedEdwardsY.Insts.CoreCmpPartialEqCompressedEdwardsY : core.cmp.PartialEq edwards.CompressedEdwardsY edwards.CompressedEdwardsY := { eq := edwards.CompressedEdwardsY.Insts.CoreCmpPartialEqCompressedEdwardsY.eq } /-- Trait implementation: [curve25519::edwards::{impl core::cmp::Eq for curve25519::edwards::CompressedEdwardsY}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 183:0-183:33 -/ @[reducible] def edwards.CompressedEdwardsY.Insts.CoreCmpEq : core.cmp.Eq edwards.CompressedEdwardsY := { partialEqInst := edwards.CompressedEdwardsY.Insts.CoreCmpPartialEqCompressedEdwardsY assert_fields_are_eq := edwards.CompressedEdwardsY.Insts.CoreCmpEq.assert_fields_are_eq } /-- [curve25519::edwards::{impl core::fmt::Debug for curve25519::edwards::CompressedEdwardsY}::fmt]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 191:4-193:5 Visibility: public -/ def edwards.CompressedEdwardsY.Insts.CoreFmtDebug.fmt (self : edwards.CompressedEdwardsY) (f : core.fmt.Formatter) : Result ((core.result.Result Unit core.fmt.Error) × core.fmt.Formatter) := do let args ← edwards.CompressedEdwardsY.as_bytes self let a ← core.fmt.rt.Argument.new_debug (core.fmt.DebugShared (Array.Insts.CoreFmtDebug 32#usize core.fmt.DebugU8)) args let a1 ← core.fmt.Arguments.new (Array.make 23#usize [ 20#u8, 67#u8, 111#u8, 109#u8, 112#u8, 114#u8, 101#u8, 115#u8, 115#u8, 101#u8, 100#u8, 69#u8, 100#u8, 119#u8, 97#u8, 114#u8, 100#u8, 115#u8, 89#u8, 58#u8, 32#u8, 192#u8, 0#u8 ]) (Array.make 1#usize [ a ]) core.fmt.Formatter.write_fmt f a1 /-- Trait implementation: [curve25519::edwards::{impl core::fmt::Debug for curve25519::edwards::CompressedEdwardsY}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 190:0-194:1 -/ @[reducible] def edwards.CompressedEdwardsY.Insts.CoreFmtDebug : core.fmt.Debug edwards.CompressedEdwardsY := { fmt := edwards.CompressedEdwardsY.Insts.CoreFmtDebug.fmt } /-- [curve25519::edwards::{curve25519::edwards::CompressedEdwardsY}::to_bytes]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 203:4-205:5 Visibility: public -/ def edwards.CompressedEdwardsY.to_bytes (self : edwards.CompressedEdwardsY) : Result (Array Std.U8 32#usize) := do ok self /-- [curve25519::edwards::{curve25519::edwards::CompressedEdwardsY}::decompress]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 211:4-219:5 Visibility: public -/ def edwards.CompressedEdwardsY.decompress (self : edwards.CompressedEdwardsY) : Result (Option edwards.EdwardsPoint) := do let (is_valid_y_coord, X, Y, Z) ← edwards.decompress.step_1 self let b ← core.convert.IntoFrom.into Bool.Insts.CoreConvertFromChoice is_valid_y_coord if b then let ep ← edwards.decompress.step_2 self X Y Z ok (some ep) else ok none /-- [curve25519::edwards::{impl core::convert::TryFrom<&'_0 [u8], core::array::TryFromSliceError> for curve25519::edwards::CompressedEdwardsY}::try_from]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 263:4-265:5 Visibility: public -/ def edwards.CompressedEdwardsY.Insts.CoreConvertTryFromShared0SliceU8TryFromSliceError.try_from (slice : Slice Std.U8) : Result (core.result.Result edwards.CompressedEdwardsY core.array.TryFromSliceError) := do edwards.CompressedEdwardsY.from_slice slice /-- Trait implementation: [curve25519::edwards::{impl core::convert::TryFrom<&'_0 [u8], core::array::TryFromSliceError> for curve25519::edwards::CompressedEdwardsY}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 260:0-266:1 -/ @[reducible] def edwards.CompressedEdwardsY.Insts.CoreConvertTryFromShared0SliceU8TryFromSliceError : core.convert.TryFrom edwards.CompressedEdwardsY (Slice Std.U8) core.array.TryFromSliceError := { try_from := edwards.CompressedEdwardsY.Insts.CoreConvertTryFromShared0SliceU8TryFromSliceError.try_from } /-- [curve25519::edwards::{impl core::clone::Clone for curve25519::edwards::EdwardsPoint}::clone]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 388:15-388:20 Visibility: public -/ def edwards.EdwardsPoint.Insts.CoreCloneClone.clone (self : edwards.EdwardsPoint) : Result edwards.EdwardsPoint := do ok self /-- Trait implementation: [curve25519::edwards::{impl core::clone::Clone for curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 388:15-388:20 -/ @[reducible] def edwards.EdwardsPoint.Insts.CoreCloneClone : core.clone.Clone edwards.EdwardsPoint := { clone := edwards.EdwardsPoint.Insts.CoreCloneClone.clone } /-- Trait implementation: [curve25519::edwards::{impl core::marker::Copy for curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 388:9-388:13 -/ @[reducible] def edwards.EdwardsPoint.Insts.CoreMarkerCopy : core.marker.Copy edwards.EdwardsPoint := { cloneInst := edwards.EdwardsPoint.Insts.CoreCloneClone } /-- [curve25519::edwards::{impl curve25519::traits::Identity for curve25519::edwards::CompressedEdwardsY}::identity]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 402:4-407:5 Visibility: public -/ def edwards.CompressedEdwardsY.Insts.Curve25519TraitsIdentity.identity : Result edwards.CompressedEdwardsY := do ok (Array.make 32#usize [ 1#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8, 0#u8 ]) /-- Trait implementation: [curve25519::edwards::{impl curve25519::traits::Identity for curve25519::edwards::CompressedEdwardsY}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 401:0-408:1 -/ @[reducible] def edwards.CompressedEdwardsY.Insts.Curve25519TraitsIdentity : traits.Identity edwards.CompressedEdwardsY := { identity := edwards.CompressedEdwardsY.Insts.Curve25519TraitsIdentity.identity } /-- [curve25519::edwards::{impl core::default::Default for curve25519::edwards::CompressedEdwardsY}::default]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 411:4-413:5 Visibility: public -/ def edwards.CompressedEdwardsY.Insts.CoreDefaultDefault.default : Result edwards.CompressedEdwardsY := do edwards.CompressedEdwardsY.Insts.Curve25519TraitsIdentity.identity /-- Trait implementation: [curve25519::edwards::{impl core::default::Default for curve25519::edwards::CompressedEdwardsY}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 410:0-414:1 -/ @[reducible] def edwards.CompressedEdwardsY.Insts.CoreDefaultDefault : core.default.Default edwards.CompressedEdwardsY := { default := edwards.CompressedEdwardsY.Insts.CoreDefaultDefault.default } /-- [curve25519::edwards::{impl curve25519::traits::Identity for curve25519::edwards::EdwardsPoint}::identity]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 429:4-436:5 Visibility: public -/ def edwards.EdwardsPoint.Insts.Curve25519TraitsIdentity.identity : Result edwards.EdwardsPoint := do let fe ← backend.serial.u64.field.FieldElement51.ZERO let fe1 ← backend.serial.u64.field.FieldElement51.ONE ok { X := fe, Y := fe1, Z := fe1, T := fe } /-- Trait implementation: [curve25519::edwards::{impl curve25519::traits::Identity for curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 428:0-437:1 -/ @[reducible] def edwards.EdwardsPoint.Insts.Curve25519TraitsIdentity : traits.Identity edwards.EdwardsPoint := { identity := edwards.EdwardsPoint.Insts.Curve25519TraitsIdentity.identity } /-- [curve25519::edwards::{impl core::default::Default for curve25519::edwards::EdwardsPoint}::default]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 440:4-442:5 Visibility: public -/ def edwards.EdwardsPoint.Insts.CoreDefaultDefault.default : Result edwards.EdwardsPoint := do edwards.EdwardsPoint.Insts.Curve25519TraitsIdentity.identity /-- Trait implementation: [curve25519::edwards::{impl core::default::Default for curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 439:0-443:1 -/ @[reducible] def edwards.EdwardsPoint.Insts.CoreDefaultDefault : core.default.Default edwards.EdwardsPoint := { default := edwards.EdwardsPoint.Insts.CoreDefaultDefault.default } /-- [curve25519::edwards::{impl curve25519::traits::ValidityCheck for curve25519::edwards::EdwardsPoint}::is_valid]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 474:4-479:5 -/ def edwards.EdwardsPoint.Insts.Curve25519TraitsValidityCheck.is_valid (self : edwards.EdwardsPoint) : Result Bool := do let pp ← edwards.EdwardsPoint.as_projective self let point_on_curve ← backend.serial.curve_models.ProjectivePoint.Insts.Curve25519TraitsValidityCheck.is_valid pp let fe ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self.X self.Y let fe1 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self.Z self.T let on_segre_image ← backend.serial.u64.field.FieldElement51.Insts.CoreCmpPartialEqFieldElement51.eq fe fe1 if point_on_curve then ok on_segre_image else ok false /-- Trait implementation: [curve25519::edwards::{impl curve25519::traits::ValidityCheck for curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 473:0-480:1 -/ @[reducible] def edwards.EdwardsPoint.Insts.Curve25519TraitsValidityCheck : traits.ValidityCheck edwards.EdwardsPoint := { is_valid := edwards.EdwardsPoint.Insts.Curve25519TraitsValidityCheck.is_valid } /-- [curve25519::edwards::{impl subtle::ConditionallySelectable for curve25519::edwards::EdwardsPoint}::conditional_select]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 487:4-494:5 Visibility: public -/ def edwards.EdwardsPoint.Insts.SubtleConditionallySelectable.conditional_select (a : edwards.EdwardsPoint) (b : edwards.EdwardsPoint) (choice : subtle.Choice) : Result edwards.EdwardsPoint := do let fe ← backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_select a.X b.X choice let fe1 ← backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_select a.Y b.Y choice let fe2 ← backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_select a.Z b.Z choice let fe3 ← backend.serial.u64.field.FieldElement51.Insts.SubtleConditionallySelectable.conditional_select a.T b.T choice ok { X := fe, Y := fe1, Z := fe2, T := fe3 } /-- Trait implementation: [curve25519::edwards::{impl subtle::ConditionallySelectable for curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 486:0-495:1 -/ @[reducible] def edwards.EdwardsPoint.Insts.SubtleConditionallySelectable : subtle.ConditionallySelectable edwards.EdwardsPoint := { coremarkerCopyInst := edwards.EdwardsPoint.Insts.CoreMarkerCopy conditional_select := edwards.EdwardsPoint.Insts.SubtleConditionallySelectable.conditional_select conditional_assign := edwards.EdwardsPoint.Insts.SubtleConditionallySelectable.conditional_assign conditional_swap := edwards.EdwardsPoint.Insts.SubtleConditionallySelectable.conditional_swap } /-- [curve25519::edwards::{impl subtle::ConstantTimeEq for curve25519::edwards::EdwardsPoint}::ct_eq]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 502:4-511:5 Visibility: public -/ def edwards.EdwardsPoint.Insts.SubtleConstantTimeEq.ct_eq (self : edwards.EdwardsPoint) (other : edwards.EdwardsPoint) : Result subtle.Choice := do let fe ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self.X other.Z let fe1 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul other.X self.Z let c ← backend.serial.u64.field.FieldElement51.Insts.SubtleConstantTimeEq.ct_eq fe fe1 let fe2 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self.Y other.Z let fe3 ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul other.Y self.Z let c1 ← backend.serial.u64.field.FieldElement51.Insts.SubtleConstantTimeEq.ct_eq fe2 fe3 subtle.Choice.Insts.CoreOpsBitBitAndChoiceChoice.bitand c c1 /-- Trait implementation: [curve25519::edwards::{impl subtle::ConstantTimeEq for curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 501:0-512:1 -/ @[reducible] def edwards.EdwardsPoint.Insts.SubtleConstantTimeEq : subtle.ConstantTimeEq edwards.EdwardsPoint := { ct_eq := edwards.EdwardsPoint.Insts.SubtleConstantTimeEq.ct_eq } /-- [curve25519::edwards::{impl core::cmp::PartialEq for curve25519::edwards::EdwardsPoint}::eq]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 515:4-517:5 Visibility: public -/ def edwards.EdwardsPoint.Insts.CoreCmpPartialEqEdwardsPoint.eq (self : edwards.EdwardsPoint) (other : edwards.EdwardsPoint) : Result Bool := do let c ← edwards.EdwardsPoint.Insts.SubtleConstantTimeEq.ct_eq self other core.convert.IntoFrom.into Bool.Insts.CoreConvertFromChoice c /-- Trait implementation: [curve25519::edwards::{impl core::cmp::PartialEq for curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 514:0-518:1 -/ @[reducible] def edwards.EdwardsPoint.Insts.CoreCmpPartialEqEdwardsPoint : core.cmp.PartialEq edwards.EdwardsPoint edwards.EdwardsPoint := { eq := edwards.EdwardsPoint.Insts.CoreCmpPartialEqEdwardsPoint.eq } /-- Trait implementation: [curve25519::edwards::{impl core::cmp::Eq for curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 520:0-520:27 -/ @[reducible] def edwards.EdwardsPoint.Insts.CoreCmpEq : core.cmp.Eq edwards.EdwardsPoint := { partialEqInst := edwards.EdwardsPoint.Insts.CoreCmpPartialEqEdwardsPoint assert_fields_are_eq := edwards.EdwardsPoint.Insts.CoreCmpEq.assert_fields_are_eq } /-- [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::edwards::{curve25519::edwards::EdwardsPoint}::as_affine_niels]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 551:4-561:5 -/ def edwards.EdwardsPoint.as_affine_niels (self : edwards.EdwardsPoint) : Result backend.serial.curve_models.AffineNielsPoint := do let recip ← field.FieldElement51.invert self.Z let x ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self.X recip let y ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self.Y recip let fe ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul x y let fe1 ← backend.serial.u64.constants.EDWARDS_D2 let xy2d ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul fe fe1 let fe2 ← Shared0FieldElement51.Insts.CoreOpsArithAddSharedAFieldElement51FieldElement51.add y x let fe3 ← Shared0FieldElement51.Insts.CoreOpsArithSubSharedAFieldElement51FieldElement51.sub y x ok { y_plus_x := fe2, y_minus_x := fe3, xy2d } /-- [curve25519::edwards::{curve25519::edwards::EdwardsPoint}::to_affine]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 564:4-569:5 -/ def edwards.EdwardsPoint.to_affine (self : edwards.EdwardsPoint) : Result edwards.affine.AffinePoint := do let recip ← field.FieldElement51.invert self.Z let x ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self.X recip let y ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul self.Y recip ok { x, y } /-- [curve25519::edwards::{curve25519::edwards::EdwardsPoint}::to_montgomery]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 580:4-590:5 Visibility: public -/ def edwards.EdwardsPoint.to_montgomery (self : edwards.EdwardsPoint) : Result montgomery.MontgomeryPoint := do let U ← Shared0FieldElement51.Insts.CoreOpsArithAddSharedAFieldElement51FieldElement51.add self.Z self.Y let W ← Shared0FieldElement51.Insts.CoreOpsArithSubSharedAFieldElement51FieldElement51.sub self.Z self.Y let fe ← field.FieldElement51.invert W let u ← Shared0FieldElement51.Insts.CoreOpsArithMulSharedAFieldElement51FieldElement51.mul U fe let a ← backend.serial.u64.field.FieldElement51.to_bytes u ok a /-- [curve25519::edwards::{curve25519::edwards::EdwardsPoint}::compress]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 615:4-617:5 Visibility: public -/ def edwards.EdwardsPoint.compress (self : edwards.EdwardsPoint) : Result edwards.CompressedEdwardsY := do let ap ← edwards.EdwardsPoint.to_affine self edwards.affine.AffinePoint.compress ap /-- Trait implementation: [curve25519::edwards::{impl core::ops::arith::Add<&'a curve25519::edwards::EdwardsPoint, curve25519::edwards::EdwardsPoint> for &'_1 curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 783:0-788:1 -/ @[reducible] def Shared0EdwardsPoint.Insts.CoreOpsArithAddSharedAEdwardsPointEdwardsPoint : core.ops.arith.Add edwards.EdwardsPoint edwards.EdwardsPoint edwards.EdwardsPoint := { add := Shared0EdwardsPoint.Insts.CoreOpsArithAddSharedAEdwardsPointEdwardsPoint.add } /-- [curve25519::edwards::{impl core::ops::arith::AddAssign<&'a curve25519::edwards::EdwardsPoint> for curve25519::edwards::EdwardsPoint}::add_assign]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 797:4-799:5 Visibility: public -/ def edwards.EdwardsPoint.Insts.CoreOpsArithAddAssignSharedAEdwardsPoint.add_assign (self : edwards.EdwardsPoint) (_rhs : edwards.EdwardsPoint) : Result edwards.EdwardsPoint := do Shared0EdwardsPoint.Insts.CoreOpsArithAddSharedAEdwardsPointEdwardsPoint.add self _rhs /-- Trait implementation: [curve25519::edwards::{impl core::ops::arith::AddAssign<&'a curve25519::edwards::EdwardsPoint> for curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 796:0-800:1 -/ @[reducible] def edwards.EdwardsPoint.Insts.CoreOpsArithAddAssignSharedAEdwardsPoint : core.ops.arith.AddAssign edwards.EdwardsPoint edwards.EdwardsPoint := { add_assign := edwards.EdwardsPoint.Insts.CoreOpsArithAddAssignSharedAEdwardsPoint.add_assign } /-- [curve25519::edwards::{impl core::ops::arith::Sub<&'a curve25519::edwards::EdwardsPoint, curve25519::edwards::EdwardsPoint> for &'_1 curve25519::edwards::EdwardsPoint}::sub]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 806:4-808:5 Visibility: public -/ def Shared0EdwardsPoint.Insts.CoreOpsArithSubSharedAEdwardsPointEdwardsPoint.sub (self : edwards.EdwardsPoint) (other : edwards.EdwardsPoint) : Result edwards.EdwardsPoint := do let pnp ← edwards.EdwardsPoint.as_projective_niels other let cp ← Shared0EdwardsPoint.Insts.CoreOpsArithSubSharedAProjectiveNielsPointCompletedPoint.sub self pnp backend.serial.curve_models.CompletedPoint.as_extended cp /-- Trait implementation: [curve25519::edwards::{impl core::ops::arith::Sub<&'a curve25519::edwards::EdwardsPoint, curve25519::edwards::EdwardsPoint> for &'_1 curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 804:0-809:1 -/ @[reducible] def Shared0EdwardsPoint.Insts.CoreOpsArithSubSharedAEdwardsPointEdwardsPoint : core.ops.arith.Sub edwards.EdwardsPoint edwards.EdwardsPoint edwards.EdwardsPoint := { sub := Shared0EdwardsPoint.Insts.CoreOpsArithSubSharedAEdwardsPointEdwardsPoint.sub } /-- [curve25519::edwards::{impl core::ops::arith::SubAssign<&'a curve25519::edwards::EdwardsPoint> for curve25519::edwards::EdwardsPoint}::sub_assign]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 818:4-820:5 Visibility: public -/ def edwards.EdwardsPoint.Insts.CoreOpsArithSubAssignSharedAEdwardsPoint.sub_assign (self : edwards.EdwardsPoint) (_rhs : edwards.EdwardsPoint) : Result edwards.EdwardsPoint := do Shared0EdwardsPoint.Insts.CoreOpsArithSubSharedAEdwardsPointEdwardsPoint.sub self _rhs /-- Trait implementation: [curve25519::edwards::{impl core::ops::arith::SubAssign<&'a curve25519::edwards::EdwardsPoint> for curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 817:0-821:1 -/ @[reducible] def edwards.EdwardsPoint.Insts.CoreOpsArithSubAssignSharedAEdwardsPoint : core.ops.arith.SubAssign edwards.EdwardsPoint edwards.EdwardsPoint := { sub_assign := edwards.EdwardsPoint.Insts.CoreOpsArithSubAssignSharedAEdwardsPoint.sub_assign } /-- Trait implementation: [curve25519::edwards::{impl core::iter::traits::accum::Sum for curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 825:0-835:1 -/ @[reducible] def edwards.EdwardsPoint.Insts.CoreIterTraitsAccumSum {T : Type} (coreborrowBorrowTEdwardsPointInst : core.borrow.Borrow T edwards.EdwardsPoint) : core.iter.traits.accum.Sum edwards.EdwardsPoint T := { sum := fun {I : Type} (coreitertraitsiteratorIteratorInst : core.iter.traits.iterator.Iterator I T) => edwards.EdwardsPoint.Insts.CoreIterTraitsAccumSum.sum coreborrowBorrowTEdwardsPointInst coreitertraitsiteratorIteratorInst } /-- [curve25519::edwards::{impl core::ops::arith::Neg for &'_0 curve25519::edwards::EdwardsPoint}::neg]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 844:4-851:5 Visibility: public -/ def Shared0EdwardsPoint.Insts.CoreOpsArithNegEdwardsPoint.neg (self : edwards.EdwardsPoint) : Result edwards.EdwardsPoint := do let fe ← Shared0FieldElement51.Insts.CoreOpsArithNegFieldElement51.neg self.X let fe1 ← Shared0FieldElement51.Insts.CoreOpsArithNegFieldElement51.neg self.T ok { self with X := fe, T := fe1 } /-- Trait implementation: [curve25519::edwards::{impl core::ops::arith::Neg for &'_0 curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 841:0-852:1 -/ @[reducible] def Shared0EdwardsPoint.Insts.CoreOpsArithNegEdwardsPoint : core.ops.arith.Neg edwards.EdwardsPoint edwards.EdwardsPoint := { neg := Shared0EdwardsPoint.Insts.CoreOpsArithNegEdwardsPoint.neg } /-- [curve25519::edwards::{impl core::ops::arith::Neg for curve25519::edwards::EdwardsPoint}::neg]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 857:4-859:5 Visibility: public -/ def edwards.EdwardsPoint.Insts.CoreOpsArithNegEdwardsPoint.neg (self : edwards.EdwardsPoint) : Result edwards.EdwardsPoint := do Shared0EdwardsPoint.Insts.CoreOpsArithNegEdwardsPoint.neg self /-- Trait implementation: [curve25519::edwards::{impl core::ops::arith::Neg for curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 854:0-860:1 -/ @[reducible] def edwards.EdwardsPoint.Insts.CoreOpsArithNegEdwardsPoint : core.ops.arith.Neg edwards.EdwardsPoint edwards.EdwardsPoint := { neg := edwards.EdwardsPoint.Insts.CoreOpsArithNegEdwardsPoint.neg } /-- [curve25519::edwards::{impl core::ops::arith::MulAssign<&'a curve25519::scalar::Scalar> for curve25519::edwards::EdwardsPoint}::mul_assign]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 867:4-870:5 Visibility: public -/ def edwards.EdwardsPoint.Insts.CoreOpsArithMulAssignSharedAScalar.mul_assign (self : edwards.EdwardsPoint) (scalar : scalar.Scalar) : Result edwards.EdwardsPoint := do Shared0EdwardsPoint.Insts.CoreOpsArithMulSharedAScalarEdwardsPoint.mul self scalar /-- Trait implementation: [curve25519::edwards::{impl core::ops::arith::MulAssign<&'a curve25519::scalar::Scalar> for curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 866:0-871:1 -/ @[reducible] def edwards.EdwardsPoint.Insts.CoreOpsArithMulAssignSharedAScalar : core.ops.arith.MulAssign edwards.EdwardsPoint scalar.Scalar := { mul_assign := edwards.EdwardsPoint.Insts.CoreOpsArithMulAssignSharedAScalar.mul_assign } /-- Trait implementation: [curve25519::edwards::{impl core::ops::arith::Mul<&'a curve25519::scalar::Scalar, curve25519::edwards::EdwardsPoint> for &'_1 curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 878:0-887:1 -/ @[reducible] def Shared0EdwardsPoint.Insts.CoreOpsArithMulSharedAScalarEdwardsPoint : core.ops.arith.Mul edwards.EdwardsPoint scalar.Scalar edwards.EdwardsPoint := { mul := Shared0EdwardsPoint.Insts.CoreOpsArithMulSharedAScalarEdwardsPoint.mul } /-- Trait implementation: [curve25519::edwards::{impl core::ops::arith::Mul<&'a curve25519::edwards::EdwardsPoint, curve25519::edwards::EdwardsPoint> for &'_1 curve25519::scalar::Scalar}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 889:0-899:1 -/ @[reducible] def Shared0Scalar.Insts.CoreOpsArithMulSharedAEdwardsPointEdwardsPoint : core.ops.arith.Mul scalar.Scalar edwards.EdwardsPoint edwards.EdwardsPoint := { mul := Shared0Scalar.Insts.CoreOpsArithMulSharedAEdwardsPointEdwardsPoint.mul } /-- [curve25519::scalar::clamp_integer]: Source: 'curve25519/solana-ed25519/src/scalar.rs', lines 1610:0-1615:1 Visibility: public -/ def scalar.clamp_integer (bytes : Array Std.U8 32#usize) : Result (Array Std.U8 32#usize) := do let i ← Array.index_usize bytes 0#usize let i1 ← lift (i &&& 248#u8) let bytes1 ← Array.update bytes 0#usize i1 let i2 ← Array.index_usize bytes1 31#usize let i3 ← lift (i2 &&& 127#u8) let bytes2 ← Array.update bytes1 31#usize i3 let i4 ← Array.index_usize bytes2 31#usize let i5 ← lift (i4 ||| 64#u8) Array.update bytes2 31#usize i5 /-- [curve25519::edwards::{impl core::ops::arith::Mul for curve25519::scalar::Scalar}::mul]: Source: 'curve25519/solana-ed25519/src/macros.rs', lines 107:12-109:13 Visibility: public -/ def scalar.Scalar.Insts.CoreOpsArithMulEdwardsPointEdwardsPoint.mul (self : scalar.Scalar) (rhs : edwards.EdwardsPoint) : Result edwards.EdwardsPoint := do Shared0Scalar.Insts.CoreOpsArithMulSharedAEdwardsPointEdwardsPoint.mul self rhs /-- [curve25519::edwards::{curve25519::edwards::EdwardsPoint}::mul_clamped]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 920:4-932:5 Visibility: public -/ def edwards.EdwardsPoint.mul_clamped (self : edwards.EdwardsPoint) (bytes : Array Std.U8 32#usize) : Result edwards.EdwardsPoint := do let a ← scalar.clamp_integer bytes scalar.Scalar.Insts.CoreOpsArithMulEdwardsPointEdwardsPoint.mul { bytes := a } self /-- [curve25519::edwards::{curve25519::edwards::EdwardsPoint}::mul_base_clamped]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 936:4-944:5 Visibility: public -/ def edwards.EdwardsPoint.mul_base_clamped (bytes : Array Std.U8 32#usize) : Result edwards.EdwardsPoint := do let a ← scalar.clamp_integer bytes edwards.EdwardsPoint.mul_base { bytes := a } /-- [curve25519::edwards::{curve25519::edwards::EdwardsPoint}::vartime_double_scalar_mul_basepoint]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 1068:4-1074:5 Visibility: public -/ def edwards.EdwardsPoint.vartime_double_scalar_mul_basepoint (a : scalar.Scalar) (A : edwards.EdwardsPoint) (b : scalar.Scalar) : Result edwards.EdwardsPoint := do backend.vartime_double_base_mul a A b /-- [curve25519::edwards::{curve25519::edwards::EdwardsPoint}::vartime_triple_scalar_mul_basepoint]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 1099:4-1107:5 Visibility: public -/ def edwards.EdwardsPoint.vartime_triple_scalar_mul_basepoint (a1 : scalar.Scalar) (A1 : edwards.EdwardsPoint) (a2 : scalar.Scalar) (A2 : edwards.EdwardsPoint) (b : scalar.Scalar) : Result edwards.EdwardsPoint := do backend.vartime_triple_base_mul_128_128_256 a1 A1 a2 A2 b /-- [curve25519::edwards::{curve25519::edwards::EdwardsPoint}::mul_by_pow_2]: loop body 0: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 1395:8-1398:9 -/ @[rust_loop_body] def edwards.EdwardsPoint.mul_by_pow_2_loop.body (iter : core.ops.range.Range Std.U32) (s : backend.serial.curve_models.ProjectivePoint) : Result (ControlFlow ((core.ops.range.Range Std.U32) × backend.serial.curve_models.ProjectivePoint) backend.serial.curve_models.ProjectivePoint) := do let (o, iter1) ← core.iter.range.IteratorRange.next U32.Insts.CoreIterRangeStep iter match o with | none => ok (done s) | some _ => let r ← backend.serial.curve_models.ProjectivePoint.double s let s1 ← backend.serial.curve_models.CompletedPoint.as_projective r ok (cont (iter1, s1)) /-- [curve25519::edwards::{curve25519::edwards::EdwardsPoint}::mul_by_pow_2]: loop 0: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 1395:8-1398:9 -/ @[rust_loop] def edwards.EdwardsPoint.mul_by_pow_2_loop (iter : core.ops.range.Range Std.U32) (s : backend.serial.curve_models.ProjectivePoint) : Result backend.serial.curve_models.ProjectivePoint := do loop (fun (iter1, s1) => edwards.EdwardsPoint.mul_by_pow_2_loop.body iter1 s1) (iter, s) /-- [curve25519::edwards::{curve25519::edwards::EdwardsPoint}::mul_by_pow_2]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 1391:4-1401:5 -/ def edwards.EdwardsPoint.mul_by_pow_2 (self : edwards.EdwardsPoint) (k : Std.U32) : Result edwards.EdwardsPoint := do massert (k > 0#u32) let s ← edwards.EdwardsPoint.as_projective self let i ← k - 1#u32 let s1 ← edwards.EdwardsPoint.mul_by_pow_2_loop { start := 0#u32, «end» := i } s let cp ← backend.serial.curve_models.ProjectivePoint.double s1 backend.serial.curve_models.CompletedPoint.as_extended cp /-- [curve25519::edwards::{curve25519::edwards::EdwardsPoint}::mul_by_cofactor]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 1386:4-1388:5 Visibility: public -/ def edwards.EdwardsPoint.mul_by_cofactor (self : edwards.EdwardsPoint) : Result edwards.EdwardsPoint := do edwards.EdwardsPoint.mul_by_pow_2 self 3#u32 /-- [curve25519::traits::{impl curve25519::traits::IsIdentity for T}::is_identity]: Source: 'curve25519/solana-ed25519/src/traits.rs', lines 51:4-53:5 Visibility: public -/ def traits.IsIdentity.Blanket.is_identity {T : Type} (subtleConstantTimeEqInst : subtle.ConstantTimeEq T) (IdentityInst : traits.Identity T) (self : T) : Result Bool := do let t ← IdentityInst.identity let c ← subtleConstantTimeEqInst.ct_eq self t core.convert.IntoFrom.into Bool.Insts.CoreConvertFromChoice c /-- [curve25519::edwards::{curve25519::edwards::EdwardsPoint}::is_small_order]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 1426:4-1428:5 Visibility: public -/ def edwards.EdwardsPoint.is_small_order (self : edwards.EdwardsPoint) : Result Bool := do let ep ← edwards.EdwardsPoint.mul_by_cofactor self traits.IsIdentity.Blanket.is_identity edwards.EdwardsPoint.Insts.SubtleConstantTimeEq edwards.EdwardsPoint.Insts.Curve25519TraitsIdentity ep /-- [curve25519::edwards::{impl core::ops::arith::Mul for &'a curve25519::edwards::EdwardsPoint}::mul]: Source: 'curve25519/solana-ed25519/src/macros.rs', lines 100:12-102:13 Visibility: public -/ def SharedAEdwardsPoint.Insts.CoreOpsArithMulScalarEdwardsPoint.mul (self : edwards.EdwardsPoint) (rhs : scalar.Scalar) : Result edwards.EdwardsPoint := do Shared0EdwardsPoint.Insts.CoreOpsArithMulSharedAScalarEdwardsPoint.mul self rhs /-- [curve25519::edwards::{curve25519::edwards::EdwardsPoint}::is_torsion_free]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 1456:4-1458:5 Visibility: public -/ def edwards.EdwardsPoint.is_torsion_free (self : edwards.EdwardsPoint) : Result Bool := do let ep ← SharedAEdwardsPoint.Insts.CoreOpsArithMulScalarEdwardsPoint.mul self constants.BASEPOINT_ORDER traits.IsIdentity.Blanket.is_identity edwards.EdwardsPoint.Insts.SubtleConstantTimeEq edwards.EdwardsPoint.Insts.Curve25519TraitsIdentity ep /-- [curve25519::edwards::{impl core::fmt::Debug for curve25519::edwards::EdwardsPoint}::fmt]: Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 1466:4-1472:5 Visibility: public -/ def edwards.EdwardsPoint.Insts.CoreFmtDebug.fmt (self : edwards.EdwardsPoint) (f : core.fmt.Formatter) : Result ((core.result.Result Unit core.fmt.Error) × core.fmt.Formatter) := do let a ← core.fmt.rt.Argument.new_debug (core.fmt.DebugShared backend.serial.u64.field.FieldElement51.Insts.CoreFmtDebug) self.X let a1 ← core.fmt.rt.Argument.new_debug (core.fmt.DebugShared backend.serial.u64.field.FieldElement51.Insts.CoreFmtDebug) self.Y let a2 ← core.fmt.rt.Argument.new_debug (core.fmt.DebugShared backend.serial.u64.field.FieldElement51.Insts.CoreFmtDebug) self.Z let a3 ← core.fmt.rt.Argument.new_debug (core.fmt.DebugShared backend.serial.u64.field.FieldElement51.Insts.CoreFmtDebug) self.T let a4 ← core.fmt.Arguments.new (Array.make 48#usize [ 18#u8, 69#u8, 100#u8, 119#u8, 97#u8, 114#u8, 100#u8, 115#u8, 80#u8, 111#u8, 105#u8, 110#u8, 116#u8, 123#u8, 10#u8, 9#u8, 88#u8, 58#u8, 32#u8, 192#u8, 6#u8, 44#u8, 10#u8, 9#u8, 89#u8, 58#u8, 32#u8, 192#u8, 6#u8, 44#u8, 10#u8, 9#u8, 90#u8, 58#u8, 32#u8, 192#u8, 6#u8, 44#u8, 10#u8, 9#u8, 84#u8, 58#u8, 32#u8, 192#u8, 2#u8, 10#u8, 125#u8, 0#u8 ]) (Array.make 4#usize [ a, a1, a2, a3 ]) core.fmt.Formatter.write_fmt f a4 /-- Trait implementation: [curve25519::edwards::{impl core::fmt::Debug for curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/edwards.rs', lines 1465:0-1473:1 -/ @[reducible] def edwards.EdwardsPoint.Insts.CoreFmtDebug : core.fmt.Debug edwards.EdwardsPoint := { fmt := edwards.EdwardsPoint.Insts.CoreFmtDebug.fmt } /-- 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 assert_fields_are_eq := backend.serial.u64.field.FieldElement51.Insts.CoreCmpEq.assert_fields_are_eq } /-- 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_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}::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 /-- [curve25519::edwards::{impl core::ops::arith::Add<&'b curve25519::edwards::EdwardsPoint, curve25519::edwards::EdwardsPoint> for curve25519::edwards::EdwardsPoint}::add]: Source: 'curve25519/solana-ed25519/src/macros.rs', lines 19:12-21:13 Visibility: public -/ def edwards.EdwardsPoint.Insts.CoreOpsArithAddSharedBEdwardsPointEdwardsPoint.add (self : edwards.EdwardsPoint) (rhs : edwards.EdwardsPoint) : Result edwards.EdwardsPoint := do Shared0EdwardsPoint.Insts.CoreOpsArithAddSharedAEdwardsPointEdwardsPoint.add self rhs /-- Trait implementation: [curve25519::edwards::{impl core::ops::arith::Add<&'b curve25519::edwards::EdwardsPoint, curve25519::edwards::EdwardsPoint> for curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/macros.rs', lines 17:8-22:9 -/ @[reducible] def edwards.EdwardsPoint.Insts.CoreOpsArithAddSharedBEdwardsPointEdwardsPoint : core.ops.arith.Add edwards.EdwardsPoint edwards.EdwardsPoint edwards.EdwardsPoint := { add := edwards.EdwardsPoint.Insts.CoreOpsArithAddSharedBEdwardsPointEdwardsPoint.add } /-- [curve25519::edwards::{impl core::ops::arith::Add for &'a curve25519::edwards::EdwardsPoint}::add]: Source: 'curve25519/solana-ed25519/src/macros.rs', lines 26:12-28:13 Visibility: public -/ def SharedAEdwardsPoint.Insts.CoreOpsArithAddEdwardsPointEdwardsPoint.add (self : edwards.EdwardsPoint) (rhs : edwards.EdwardsPoint) : Result edwards.EdwardsPoint := do Shared0EdwardsPoint.Insts.CoreOpsArithAddSharedAEdwardsPointEdwardsPoint.add self rhs /-- Trait implementation: [curve25519::edwards::{impl core::ops::arith::Add for &'a curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/macros.rs', lines 24:8-29:9 -/ @[reducible] def SharedAEdwardsPoint.Insts.CoreOpsArithAddEdwardsPointEdwardsPoint : core.ops.arith.Add edwards.EdwardsPoint edwards.EdwardsPoint edwards.EdwardsPoint := { add := SharedAEdwardsPoint.Insts.CoreOpsArithAddEdwardsPointEdwardsPoint.add } /-- Trait implementation: [curve25519::edwards::{impl core::ops::arith::Add for curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/macros.rs', lines 31:8-36:9 -/ @[reducible] def edwards.EdwardsPoint.Insts.CoreOpsArithAddEdwardsPointEdwardsPoint : core.ops.arith.Add edwards.EdwardsPoint edwards.EdwardsPoint edwards.EdwardsPoint := { add := edwards.EdwardsPoint.Insts.CoreOpsArithAddEdwardsPointEdwardsPoint.add } /-- [curve25519::edwards::{impl core::ops::arith::AddAssign for curve25519::edwards::EdwardsPoint}::add_assign]: Source: 'curve25519/solana-ed25519/src/macros.rs', lines 44:12-46:13 Visibility: public -/ def edwards.EdwardsPoint.Insts.CoreOpsArithAddAssignEdwardsPoint.add_assign (self : edwards.EdwardsPoint) (rhs : edwards.EdwardsPoint) : Result edwards.EdwardsPoint := do edwards.EdwardsPoint.Insts.CoreOpsArithAddAssignSharedAEdwardsPoint.add_assign self rhs /-- Trait implementation: [curve25519::edwards::{impl core::ops::arith::AddAssign for curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/macros.rs', lines 43:8-47:9 -/ @[reducible] def edwards.EdwardsPoint.Insts.CoreOpsArithAddAssignEdwardsPoint : core.ops.arith.AddAssign edwards.EdwardsPoint edwards.EdwardsPoint := { add_assign := edwards.EdwardsPoint.Insts.CoreOpsArithAddAssignEdwardsPoint.add_assign } /-- [curve25519::edwards::{impl core::ops::arith::Sub<&'b curve25519::edwards::EdwardsPoint, curve25519::edwards::EdwardsPoint> for curve25519::edwards::EdwardsPoint}::sub]: Source: 'curve25519/solana-ed25519/src/macros.rs', lines 56:12-58:13 Visibility: public -/ def edwards.EdwardsPoint.Insts.CoreOpsArithSubSharedBEdwardsPointEdwardsPoint.sub (self : edwards.EdwardsPoint) (rhs : edwards.EdwardsPoint) : Result edwards.EdwardsPoint := do Shared0EdwardsPoint.Insts.CoreOpsArithSubSharedAEdwardsPointEdwardsPoint.sub self rhs /-- Trait implementation: [curve25519::edwards::{impl core::ops::arith::Sub<&'b curve25519::edwards::EdwardsPoint, curve25519::edwards::EdwardsPoint> for curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/macros.rs', lines 54:8-59:9 -/ @[reducible] def edwards.EdwardsPoint.Insts.CoreOpsArithSubSharedBEdwardsPointEdwardsPoint : core.ops.arith.Sub edwards.EdwardsPoint edwards.EdwardsPoint edwards.EdwardsPoint := { sub := edwards.EdwardsPoint.Insts.CoreOpsArithSubSharedBEdwardsPointEdwardsPoint.sub } /-- [curve25519::edwards::{impl core::ops::arith::Sub for &'a curve25519::edwards::EdwardsPoint}::sub]: Source: 'curve25519/solana-ed25519/src/macros.rs', lines 63:12-65:13 Visibility: public -/ def SharedAEdwardsPoint.Insts.CoreOpsArithSubEdwardsPointEdwardsPoint.sub (self : edwards.EdwardsPoint) (rhs : edwards.EdwardsPoint) : Result edwards.EdwardsPoint := do Shared0EdwardsPoint.Insts.CoreOpsArithSubSharedAEdwardsPointEdwardsPoint.sub self rhs /-- Trait implementation: [curve25519::edwards::{impl core::ops::arith::Sub for &'a curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/macros.rs', lines 61:8-66:9 -/ @[reducible] def SharedAEdwardsPoint.Insts.CoreOpsArithSubEdwardsPointEdwardsPoint : core.ops.arith.Sub edwards.EdwardsPoint edwards.EdwardsPoint edwards.EdwardsPoint := { sub := SharedAEdwardsPoint.Insts.CoreOpsArithSubEdwardsPointEdwardsPoint.sub } /-- [curve25519::edwards::{impl core::ops::arith::Sub for curve25519::edwards::EdwardsPoint}::sub]: Source: 'curve25519/solana-ed25519/src/macros.rs', lines 70:12-72:13 Visibility: public -/ def edwards.EdwardsPoint.Insts.CoreOpsArithSubEdwardsPointEdwardsPoint.sub (self : edwards.EdwardsPoint) (rhs : edwards.EdwardsPoint) : Result edwards.EdwardsPoint := do Shared0EdwardsPoint.Insts.CoreOpsArithSubSharedAEdwardsPointEdwardsPoint.sub self rhs /-- Trait implementation: [curve25519::edwards::{impl core::ops::arith::Sub for curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/macros.rs', lines 68:8-73:9 -/ @[reducible] def edwards.EdwardsPoint.Insts.CoreOpsArithSubEdwardsPointEdwardsPoint : core.ops.arith.Sub edwards.EdwardsPoint edwards.EdwardsPoint edwards.EdwardsPoint := { sub := edwards.EdwardsPoint.Insts.CoreOpsArithSubEdwardsPointEdwardsPoint.sub } /-- [curve25519::edwards::{impl core::ops::arith::SubAssign for curve25519::edwards::EdwardsPoint}::sub_assign]: Source: 'curve25519/solana-ed25519/src/macros.rs', lines 81:12-83:13 Visibility: public -/ def edwards.EdwardsPoint.Insts.CoreOpsArithSubAssignEdwardsPoint.sub_assign (self : edwards.EdwardsPoint) (rhs : edwards.EdwardsPoint) : Result edwards.EdwardsPoint := do edwards.EdwardsPoint.Insts.CoreOpsArithSubAssignSharedAEdwardsPoint.sub_assign self rhs /-- Trait implementation: [curve25519::edwards::{impl core::ops::arith::SubAssign for curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/macros.rs', lines 80:8-84:9 -/ @[reducible] def edwards.EdwardsPoint.Insts.CoreOpsArithSubAssignEdwardsPoint : core.ops.arith.SubAssign edwards.EdwardsPoint edwards.EdwardsPoint := { sub_assign := edwards.EdwardsPoint.Insts.CoreOpsArithSubAssignEdwardsPoint.sub_assign } /-- [curve25519::edwards::{impl core::ops::arith::Mul<&'b curve25519::scalar::Scalar, curve25519::edwards::EdwardsPoint> for curve25519::edwards::EdwardsPoint}::mul]: Source: 'curve25519/solana-ed25519/src/macros.rs', lines 93:12-95:13 Visibility: public -/ def edwards.EdwardsPoint.Insts.CoreOpsArithMulSharedBScalarEdwardsPoint.mul (self : edwards.EdwardsPoint) (rhs : scalar.Scalar) : Result edwards.EdwardsPoint := do Shared0EdwardsPoint.Insts.CoreOpsArithMulSharedAScalarEdwardsPoint.mul self rhs /-- Trait implementation: [curve25519::edwards::{impl core::ops::arith::Mul<&'b curve25519::scalar::Scalar, curve25519::edwards::EdwardsPoint> for curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/macros.rs', lines 91:8-96:9 -/ @[reducible] def edwards.EdwardsPoint.Insts.CoreOpsArithMulSharedBScalarEdwardsPoint : core.ops.arith.Mul edwards.EdwardsPoint scalar.Scalar edwards.EdwardsPoint := { mul := edwards.EdwardsPoint.Insts.CoreOpsArithMulSharedBScalarEdwardsPoint.mul } /-- [curve25519::edwards::{impl core::ops::arith::Mul<&'b curve25519::edwards::EdwardsPoint, curve25519::edwards::EdwardsPoint> for curve25519::scalar::Scalar}::mul]: Source: 'curve25519/solana-ed25519/src/macros.rs', lines 93:12-95:13 Visibility: public -/ def scalar.Scalar.Insts.CoreOpsArithMulSharedBEdwardsPointEdwardsPoint.mul (self : scalar.Scalar) (rhs : edwards.EdwardsPoint) : Result edwards.EdwardsPoint := do Shared0Scalar.Insts.CoreOpsArithMulSharedAEdwardsPointEdwardsPoint.mul self rhs /-- Trait implementation: [curve25519::edwards::{impl core::ops::arith::Mul<&'b curve25519::edwards::EdwardsPoint, curve25519::edwards::EdwardsPoint> for curve25519::scalar::Scalar}] Source: 'curve25519/solana-ed25519/src/macros.rs', lines 91:8-96:9 -/ @[reducible] def scalar.Scalar.Insts.CoreOpsArithMulSharedBEdwardsPointEdwardsPoint : core.ops.arith.Mul scalar.Scalar edwards.EdwardsPoint edwards.EdwardsPoint := { mul := scalar.Scalar.Insts.CoreOpsArithMulSharedBEdwardsPointEdwardsPoint.mul } /-- Trait implementation: [curve25519::edwards::{impl core::ops::arith::Mul for &'a curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/macros.rs', lines 98:8-103:9 -/ @[reducible] def SharedAEdwardsPoint.Insts.CoreOpsArithMulScalarEdwardsPoint : core.ops.arith.Mul edwards.EdwardsPoint scalar.Scalar edwards.EdwardsPoint := { mul := SharedAEdwardsPoint.Insts.CoreOpsArithMulScalarEdwardsPoint.mul } /-- Trait implementation: [curve25519::edwards::{impl core::ops::arith::Mul for &'a curve25519::scalar::Scalar}] Source: 'curve25519/solana-ed25519/src/macros.rs', lines 98:8-103:9 -/ @[reducible] def SharedAScalar.Insts.CoreOpsArithMulEdwardsPointEdwardsPoint : core.ops.arith.Mul scalar.Scalar edwards.EdwardsPoint edwards.EdwardsPoint := { mul := SharedAScalar.Insts.CoreOpsArithMulEdwardsPointEdwardsPoint.mul } /-- Trait implementation: [curve25519::edwards::{impl core::ops::arith::Mul for curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/macros.rs', lines 105:8-110:9 -/ @[reducible] def edwards.EdwardsPoint.Insts.CoreOpsArithMulScalarEdwardsPoint : core.ops.arith.Mul edwards.EdwardsPoint scalar.Scalar edwards.EdwardsPoint := { mul := edwards.EdwardsPoint.Insts.CoreOpsArithMulScalarEdwardsPoint.mul } /-- Trait implementation: [curve25519::edwards::{impl core::ops::arith::Mul for curve25519::scalar::Scalar}] Source: 'curve25519/solana-ed25519/src/macros.rs', lines 105:8-110:9 -/ @[reducible] def scalar.Scalar.Insts.CoreOpsArithMulEdwardsPointEdwardsPoint : core.ops.arith.Mul scalar.Scalar edwards.EdwardsPoint edwards.EdwardsPoint := { mul := scalar.Scalar.Insts.CoreOpsArithMulEdwardsPointEdwardsPoint.mul } /-- [curve25519::edwards::{impl core::ops::arith::MulAssign for curve25519::edwards::EdwardsPoint}::mul_assign]: Source: 'curve25519/solana-ed25519/src/macros.rs', lines 118:12-120:13 Visibility: public -/ def edwards.EdwardsPoint.Insts.CoreOpsArithMulAssignScalar.mul_assign (self : edwards.EdwardsPoint) (rhs : scalar.Scalar) : Result edwards.EdwardsPoint := do edwards.EdwardsPoint.Insts.CoreOpsArithMulAssignSharedAScalar.mul_assign self rhs /-- Trait implementation: [curve25519::edwards::{impl core::ops::arith::MulAssign for curve25519::edwards::EdwardsPoint}] Source: 'curve25519/solana-ed25519/src/macros.rs', lines 117:8-121:9 -/ @[reducible] def edwards.EdwardsPoint.Insts.CoreOpsArithMulAssignScalar : core.ops.arith.MulAssign edwards.EdwardsPoint scalar.Scalar := { mul_assign := edwards.EdwardsPoint.Insts.CoreOpsArithMulAssignScalar.mul_assign } /-- [curve25519::scalar::{curve25519::backend::serial::u64::scalar::Scalar52}::pack]: Source: 'curve25519/solana-ed25519/src/scalar.rs', lines 1331:4-1335:5 -/ def scalar.Scalar52.pack (self : backend.serial.u64.scalar.Scalar52) : Result scalar.Scalar := do let a ← backend.serial.u64.scalar.Scalar52.to_bytes self ok { bytes := a } /-- [curve25519::scalar::{curve25519::scalar::Scalar}::unpack]: Source: 'curve25519/solana-ed25519/src/scalar.rs', lines 1288:4-1290:5 -/ def scalar.Scalar.unpack (self : scalar.Scalar) : Result backend.serial.u64.scalar.Scalar52 := do backend.serial.u64.scalar.Scalar52.from_bytes self.bytes /-- [curve25519::scalar::{curve25519::scalar::Scalar}::reduce]: Source: 'curve25519/solana-ed25519/src/scalar.rs', lines 1303:4-1320:5 -/ def scalar.Scalar.reduce (self : scalar.Scalar) : Result scalar.Scalar := do let x ← scalar.Scalar.unpack self let xR ← backend.serial.u64.scalar.Scalar52.mul_internal x backend.serial.u64.constants.R let x_mod_l ← backend.serial.u64.scalar.Scalar52.montgomery_reduce xR scalar.Scalar52.pack x_mod_l /-- [curve25519::scalar::{impl core::ops::index::Index for curve25519::scalar::Scalar}::index]: Source: 'curve25519/solana-ed25519/src/scalar.rs', lines 290:4-292:5 Visibility: public -/ def scalar.Scalar.Insts.CoreOpsIndexIndexUsizeU8.index (self : scalar.Scalar) (_index : Std.Usize) : Result Std.U8 := do Array.index_usize self.bytes _index /-- [curve25519::scalar::{curve25519::scalar::Scalar}::from_bytes_mod_order]: Source: 'curve25519/solana-ed25519/src/scalar.rs', lines 207:4-216:5 Visibility: public -/ def scalar.Scalar.from_bytes_mod_order (bytes : Array Std.U8 32#usize) : Result scalar.Scalar := do let s ← scalar.Scalar.reduce { bytes } let i ← scalar.Scalar.Insts.CoreOpsIndexIndexUsizeU8.index s 31#usize let right_val ← i >>> 7#i32 massert (0#u8 = right_val) ok s /-- [curve25519::scalar::{curve25519::scalar::Scalar}::from_bytes_mod_order_wide]: Source: 'curve25519/solana-ed25519/src/scalar.rs', lines 220:4-229:5 Visibility: public -/ def scalar.Scalar.from_bytes_mod_order_wide (input : Array Std.U8 64#usize) : Result scalar.Scalar := do let unpacked ← backend.serial.u64.scalar.Scalar52.from_bytes_wide input scalar.Scalar52.pack unpacked end curve25519