mirror of
https://github.com/saymrwulf/fips205-slhdsa-verified.git
synced 2026-09-04 20:03:44 +00:00
54 lines
177 KiB
Text
54 lines
177 KiB
Text
|
|
policy|allowedBoundary=Classical.choice,Quot.sound,propext,verify_mono.oracle.f,verify_mono.oracle.h,verify_mono.oracle.h_msg,verify_mono.oracle.t_l,verify_mono.oracle.t_len|certModules=Proofs.ApexSpec,Proofs.ChainSpec,Proofs.ForsInnerSpec,Proofs.ForsOuterSpec,Proofs.HtSpec,Proofs.InputPrepSpec,Proofs.WotsSpec,Proofs.XmssSpec
|
||
|
|
cert|fips205.chain_free_loop_eq|cone=Classical.choice,Quot.sound,propext,verify_mono.oracle.f|type=∀ {N : Aeneas.Std.Usize} (pk_seed : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (s : Nat) (start : Aeneas.Std.U32) (adrs : fips205.types.Adrs) (tmp : Aeneas.Std.Array.{0} Aeneas.Std.U8 N), @LT.lt.{0} Nat instLTNat (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U32 start) s) (@HPow.hPow.{0, 0, 0} Nat Nat Nat (@instHPow.{0, 0} Nat Nat (@Monoid.toPow.{0} Nat Nat.instMonoid)) (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))) → ∀ (stop : Aeneas.Std.U32), @Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U32 stop) (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U32 start) s) → @Eq.{1} (Aeneas.Std.Result.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N)) (@fips205.verify_mono.chain_free_loop N (@Aeneas.Std.core.ops.range.Range.mk.{0} Aeneas.Std.U32 start stop) pk_seed adrs tmp) (@fips205.chainFoldN N pk_seed adrs tmp start s)
|
||
|
|
cert|fips205.wots_loop1_eq|cone=Classical.choice,Quot.sound,propext,verify_mono.oracle.f|type=∀ {LEN N : Aeneas.Std.Usize} (sig : fips205.types.WotsSig LEN N) (pk_seed : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (msg : Aeneas.Std.Array.{0} Aeneas.Std.U32 LEN) (s : Nat) (start : Aeneas.Std.Usize) (adrs : fips205.types.Adrs) (tmp : Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN), @LT.lt.{0} Nat instLTNat (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.Usize start) s) (@HPow.hPow.{0, 0, 0} Nat Nat Nat (@instHPow.{0, 0} Nat Nat (@Monoid.toPow.{0} Nat Nat.instMonoid)) (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) System.Platform.numBits) → ∀ (stop : Aeneas.Std.Usize), @Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.Usize stop) (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.Usize start) s) → @Eq.{1} (Aeneas.Std.Result.{0} (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN))) (@fips205.verify_mono.wots_pk_from_sig_free_loop1 LEN N (@Aeneas.Std.core.ops.range.Range.mk.{0} Aeneas.Std.Usize start stop) sig pk_seed adrs tmp msg) (@fips205.wotsChainFold LEN N sig pk_seed msg adrs tmp start s)
|
||
|
|
cert|fips205.xmss_loop_eq|cone=Classical.choice,Quot.sound,propext,verify_mono.oracle.h|type=∀ {HP N : Aeneas.Std.Usize} (idx : Aeneas.Std.U32) (pk_seed : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (auth : Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) HP) (s : Nat) (start : Aeneas.Std.U32) (adrs : fips205.types.Adrs) (node : Aeneas.Std.Array.{0} Aeneas.Std.U8 N), @LT.lt.{0} Nat instLTNat (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U32 start) s) (@HPow.hPow.{0, 0, 0} Nat Nat Nat (@instHPow.{0, 0} Nat Nat (@Monoid.toPow.{0} Nat Nat.instMonoid)) (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))) → ∀ (stop : Aeneas.Std.U32), @Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U32 stop) (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U32 start) s) → @Eq.{1} (Aeneas.Std.Result.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N)) (@fips205.verify_mono.xmss_pk_from_sig_free_loop HP N (@Aeneas.Std.core.ops.range.Range.mk.{0} Aeneas.Std.U32 start stop) idx pk_seed adrs auth node) (@fips205.xmssFoldN HP N idx pk_seed auth adrs node start s)
|
||
|
|
cert|fips205.ht_loop_eq|cone=Classical.choice,Quot.sound,propext,verify_mono.oracle.f,verify_mono.oracle.h,verify_mono.oracle.t_l|type=∀ {D HP LEN N : Aeneas.Std.Usize} (a : Aeneas.Std.Array.{0} (fips205.types.XmssSig HP LEN N) D) (pk_seed : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (hp32 : Aeneas.Std.U32) (s : Nat) (start : Aeneas.Std.U32) (idx_tree : Aeneas.Std.U64) (adrs : fips205.types.Adrs) (node : Aeneas.Std.Array.{0} Aeneas.Std.U8 N), @LT.lt.{0} Nat instLTNat (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U32 start) s) (@HPow.hPow.{0, 0, 0} Nat Nat Nat (@instHPow.{0, 0} Nat Nat (@Monoid.toPow.{0} Nat Nat.instMonoid)) (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))) → ∀ (stop : Aeneas.Std.U32), @Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U32 stop) (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U32 start) s) → @Eq.{1} (Aeneas.Std.Result.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N)) (@fips205.verify_mono.ht_verify_free_loop D HP LEN N (@Aeneas.Std.core.ops.range.Range.mk.{0} Aeneas.Std.U32 start stop) a pk_seed idx_tree hp32 adrs node) (@fips205.htFoldN D HP LEN N a pk_seed hp32 idx_tree adrs node start s)
|
||
|
|
cert|fips205.fors_inner_loop_eq|cone=Classical.choice,Quot.sound,propext,verify_mono.oracle.h|type=∀ {A K N : Aeneas.Std.Usize} (pk_seed : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (indices : Aeneas.Std.Array.{0} Aeneas.Std.U32 K) (i : Aeneas.Std.U32) (auth : fips205.types.Auth A N) (s : Nat) (start : Aeneas.Std.U32) (adrs : fips205.types.Adrs) (node : Aeneas.Std.Array.{0} Aeneas.Std.U8 N), @LT.lt.{0} Nat instLTNat (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U32 start) s) (@HPow.hPow.{0, 0, 0} Nat Nat Nat (@instHPow.{0, 0} Nat Nat (@Monoid.toPow.{0} Nat Nat.instMonoid)) (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))) → ∀ (stop : Aeneas.Std.U32), @Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U32 stop) (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U32 start) s) → @Eq.{1} (Aeneas.Std.Result.{0} (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} Aeneas.Std.U8 N))) (@fips205.verify_mono.fors_pk_from_sig_free_loop0_loop0 A K N (@Aeneas.Std.core.ops.range.Range.mk.{0} Aeneas.Std.U32 start stop) pk_seed adrs indices i node auth) (@fips205.forsInnerFold A K N pk_seed indices i auth adrs node start s)
|
||
|
|
cert|fips205.fors_outer_loop_eq|cone=Classical.choice,Quot.sound,propext,verify_mono.oracle.f,verify_mono.oracle.h|type=∀ {A K N : Aeneas.Std.Usize} (sig_fors : fips205.types.ForsSig A K N) (pk_seed : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (a32 : Aeneas.Std.U32) (indices : Aeneas.Std.Array.{0} Aeneas.Std.U32 K) (s : Nat) (start : Aeneas.Std.U32) (adrs : fips205.types.Adrs) (root : Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K), @LT.lt.{0} Nat instLTNat (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U32 start) s) (@HPow.hPow.{0, 0, 0} Nat Nat Nat (@instHPow.{0, 0} Nat Nat (@Monoid.toPow.{0} Nat Nat.instMonoid)) (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))) → ∀ (stop : Aeneas.Std.U32), @Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U32 stop) (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U32 start) s) → @Eq.{1} (Aeneas.Std.Result.{0} (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K))) (@fips205.verify_mono.fors_pk_from_sig_free_loop0 A K N (@Aeneas.Std.core.ops.range.Range.mk.{0} Aeneas.Std.U32 start stop) sig_fors pk_seed a32 adrs indices root) (@fips205.forsOuterFold A K N sig_fors pk_seed a32 indices adrs root start s)
|
||
|
|
cert|fips205.to_int_loop_eq|cone=Classical.choice,Quot.sound,propext|type=∀ (x : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (s : Nat) (start : Aeneas.Std.Usize) (total : Aeneas.Std.U64), @LT.lt.{0} Nat instLTNat (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.Usize start) s) (@HPow.hPow.{0, 0, 0} Nat Nat Nat (@instHPow.{0, 0} Nat Nat (@Monoid.toPow.{0} Nat Nat.instMonoid)) (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) System.Platform.numBits) → ∀ (stop : Aeneas.Std.Usize), @Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.Usize stop) (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.Usize start) s) → @Eq.{1} (Aeneas.Std.Result.{0} Aeneas.Std.U64) (fips205.helpers.to_int_loop (@Aeneas.Std.core.ops.range.Range.mk.{0} Aeneas.Std.Usize start stop) x total) (fips205.toIntFold x total start s)
|
||
|
|
cert|fips205.to_byte_loop_eq|cone=Classical.choice,Quot.sound,propext|type=∀ (n : Aeneas.Std.U32) (k : Nat) (start : Aeneas.Std.U32) (s : Aeneas.Std.Array.{0} Aeneas.Std.U8 (Aeneas.Std.Usize.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (@of_decide_eq_true (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (@id.{0} (@Eq.{1} Bool (@Decidable.decide (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize))) Bool.true) (@Eq.refl.{1} Bool Bool.true))))) (total : Aeneas.Std.U32), @LT.lt.{0} Nat instLTNat (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U32 start) k) (@HPow.hPow.{0, 0, 0} Nat Nat Nat (@instHPow.{0, 0} Nat Nat (@Monoid.toPow.{0} Nat Nat.instMonoid)) (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))) → ∀ (stop : Aeneas.Std.U32), @Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U32 stop) (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U32 start) k) → @Eq.{1} (Aeneas.Std.Result.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 (Aeneas.Std.Usize.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (@of_decide_eq_true (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (@id.{0} (@Eq.{1} Bool (@Decidable.decide (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize))) Bool.true) (@Eq.refl.{1} Bool Bool.true)))))) (fips205.helpers.to_byte_loop (@Aeneas.Std.core.ops.range.Range.mk.{0} Aeneas.Std.U32 start stop) n s total) (fips205.toByteFold n s total start k)
|
||
|
|
cert|fips205.wots_csum_loop_eq|cone=Classical.choice,Quot.sound,propext|type=∀ {LEN : Aeneas.Std.Usize} (msg : Aeneas.Std.Array.{0} Aeneas.Std.U32 LEN) (s : Nat) (start : Aeneas.Std.Usize) (csum : Aeneas.Std.U32), @LT.lt.{0} Nat instLTNat (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.Usize start) s) (@HPow.hPow.{0, 0, 0} Nat Nat Nat (@instHPow.{0, 0} Nat Nat (@Monoid.toPow.{0} Nat Nat.instMonoid)) (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) System.Platform.numBits) → ∀ (stop : Aeneas.Std.Usize), @Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.Usize stop) (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.Usize start) s) → @Eq.{1} (Aeneas.Std.Result.{0} Aeneas.Std.U32) (@fips205.verify_mono.wots_pk_from_sig_free_loop0 LEN (@Aeneas.Std.core.ops.range.Range.mk.{0} Aeneas.Std.Usize start stop) csum msg) (@fips205.wotsCsumFold LEN msg csum start s)
|
||
|
|
cert|fips205.base2b_outer_loop_eq|cone=Classical.choice,Quot.sound,propext|type=∀ (x : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (b : Aeneas.Std.U32) (s : Nat) (start : Aeneas.Std.Usize) (baseb : Aeneas.Std.Slice.{0} Aeneas.Std.U32) (inn : Aeneas.Std.Usize) (bits total : Aeneas.Std.U32), @LT.lt.{0} Nat instLTNat (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.Usize start) s) (@HPow.hPow.{0, 0, 0} Nat Nat Nat (@instHPow.{0, 0} Nat Nat (@Monoid.toPow.{0} Nat Nat.instMonoid)) (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) System.Platform.numBits) → ∀ (stop : Aeneas.Std.Usize), @Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.Usize stop) (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.Usize start) s) → @Eq.{1} (Aeneas.Std.Result.{0} (Aeneas.Std.Slice.{0} Aeneas.Std.U32)) (fips205.helpers.base_2b_loop0 (@Aeneas.Std.core.ops.range.Range.mk.{0} Aeneas.Std.Usize start stop) x b baseb inn bits total) (fips205.base2bOuterFold x b baseb inn bits total start s)
|
||
|
|
cert|fips205.slh_verify_128s_accepts_iff|cone=Classical.choice,Quot.sound,propext,verify_mono.oracle.f,verify_mono.oracle.h,verify_mono.oracle.h_msg,verify_mono.oracle.t_l,verify_mono.oracle.t_len|type=∀ (mprime : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (sig : fips205.types.SlhDsaSig (Aeneas.Std.Usize.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 12) (instOfNatNat (nat_lit 12))) (@of_decide_eq_true (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 12) (instOfNatNat (nat_lit 12))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 12) (instOfNatNat (nat_lit 12))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (@id.{0} (@Eq.{1} Bool (@Decidable.decide (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 12) (instOfNatNat (nat_lit 12))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 12) (instOfNatNat (nat_lit 12))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize))) Bool.true) (@Eq.refl.{1} Bool Bool.true)))) (Aeneas.Std.Usize.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 7) (instOfNatNat (nat_lit 7))) (@of_decide_eq_true (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 7) (instOfNatNat (nat_lit 7))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 7) (instOfNatNat (nat_lit 7))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (@id.{0} (@Eq.{1} Bool (@Decidable.decide (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 7) (instOfNatNat (nat_lit 7))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 7) (instOfNatNat (nat_lit 7))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize))) Bool.true) (@Eq.refl.{1} Bool Bool.true)))) (Aeneas.Std.Usize.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 9) (instOfNatNat (nat_lit 9))) (@of_decide_eq_true (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 9) (instOfNatNat (nat_lit 9))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 9) (instOfNatNat (nat_lit 9))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (@id.{0} (@Eq.{1} Bool (@Decidable.decide (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 9) (instOfNatNat (nat_lit 9))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 9) (instOfNatNat (nat_lit 9))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize))) Bool.true) (@Eq.refl.{1} Bool Bool.true)))) (Aeneas.Std.Usize.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 14) (instOfNatNat (nat_lit 14))) (@of_decide_eq_true (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 14) (instOfNatNat (nat_lit 14))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 14) (instOfNatNat (nat_lit 14))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (@id.{0} (@Eq.{1} Bool (@Decidable.decide (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 14) (instOfNatNat (nat_lit 14))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 14) (instOfNatNat (nat_lit 14))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize))) Bool.true) (@Eq.refl.{1} Bool Bool.true)))) (Aeneas.Std.Usize.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 35) (instOfNatNat (nat_lit 35))) (@of_decide_eq_true (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 35) (instOfNatNat (nat_lit 35))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 35) (instOfNatNat (nat_lit 35))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (@id.{0} (@Eq.{1} Bool (@Decidable.decide (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 35) (instOfNatNat (nat_lit 35))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 35) (instOfNatNat (nat_lit 35))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize))) Bool.true) (@Eq.refl.{1} Bool Bool.true)))) (Aeneas.Std.Usize.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 16) (instOfNatNat (nat_lit 16))) (@of_decide_eq_true (@LE.le.{0} Nat ins
|
||
|
|
spec|fips205.base2bOuterFold|def|value=fun (x : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (b : Aeneas.Std.U32) (x_1 : Aeneas.Std.Slice.{0} Aeneas.Std.U32) (x_2 : Aeneas.Std.Usize) (x_3 x_4 : Aeneas.Std.U32) (x_5 : Aeneas.Std.Usize) (x_6 : Nat) => @Nat.brecOn.{1} (fun (x : Nat) => Aeneas.Std.Slice.{0} Aeneas.Std.U32 → Aeneas.Std.Usize → Aeneas.Std.U32 → Aeneas.Std.U32 → Aeneas.Std.Usize → Aeneas.Std.Result.{0} (Aeneas.Std.Slice.{0} Aeneas.Std.U32)) x_6 (fips205.base2bOuterFold._f x b) x_1 x_2 x_3 x_4 x_5
|
||
|
|
spec|fips205.base2bOuterFold._f|def|value=fun (x : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (b : Aeneas.Std.U32) (x_1 : Nat) (f : @Nat.below.{1} (fun (x : Nat) => Aeneas.Std.Slice.{0} Aeneas.Std.U32 → Aeneas.Std.Usize → Aeneas.Std.U32 → Aeneas.Std.U32 → Aeneas.Std.Usize → Aeneas.Std.Result.{0} (Aeneas.Std.Slice.{0} Aeneas.Std.U32)) x_1) (x_2 : Aeneas.Std.Slice.{0} Aeneas.Std.U32) (x_3 : Aeneas.Std.Usize) (x_4 x_5 : Aeneas.Std.U32) (x_6 : Aeneas.Std.Usize) => fips205.base2bOuterFold.match_1.{1} (fun (x : Aeneas.Std.Slice.{0} Aeneas.Std.U32) (x_7 : Aeneas.Std.Usize) (x_8 x_9 : Aeneas.Std.U32) (x_10 : Aeneas.Std.Usize) (x_11 : Nat) => @Nat.below.{1} (fun (x : Nat) => Aeneas.Std.Slice.{0} Aeneas.Std.U32 → Aeneas.Std.Usize → Aeneas.Std.U32 → Aeneas.Std.U32 → Aeneas.Std.Usize → Aeneas.Std.Result.{0} (Aeneas.Std.Slice.{0} Aeneas.Std.U32)) x_11 → Aeneas.Std.Result.{0} (Aeneas.Std.Slice.{0} Aeneas.Std.U32)) x_2 x_3 x_4 x_5 x_6 x_1 (fun (baseb : Aeneas.Std.Slice.{0} Aeneas.Std.U32) (x : Aeneas.Std.Usize) (x_7 x_8 : Aeneas.Std.U32) (x_9 : Aeneas.Std.Usize) (x_10 : @Nat.below.{1} (fun (x : Nat) => Aeneas.Std.Slice.{0} Aeneas.Std.U32 → Aeneas.Std.Usize → Aeneas.Std.U32 → Aeneas.Std.U32 → Aeneas.Std.Usize → Aeneas.Std.Result.{0} (Aeneas.Std.Slice.{0} Aeneas.Std.U32)) (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0)))) => @Aeneas.Std.Result.ok.{0} (Aeneas.Std.Slice.{0} Aeneas.Std.U32) baseb) (fun (baseb : Aeneas.Std.Slice.{0} Aeneas.Std.U32) (inn : Aeneas.Std.Usize) (bits total : Aeneas.Std.U32) (out : Aeneas.Std.Usize) (k : Nat) (x_7 : @Nat.below.{1} (fun (x : Nat) => Aeneas.Std.Slice.{0} Aeneas.Std.U32 → Aeneas.Std.Usize → Aeneas.Std.U32 → Aeneas.Std.U32 → Aeneas.Std.Usize → Aeneas.Std.Result.{0} (Aeneas.Std.Slice.{0} Aeneas.Std.U32)) (Nat.succ k)) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Prod.{0, 0} Aeneas.Std.Usize (Prod.{0, 0} Aeneas.Std.U32 Aeneas.Std.U32)) (Aeneas.Std.Slice.{0} Aeneas.Std.U32) (fips205.helpers.base_2b_loop0_loop0 x b inn bits total) (@Aeneas.Std.uncurry.{0, 0, 1} Aeneas.Std.Usize (Prod.{0, 0} Aeneas.Std.U32 Aeneas.Std.U32) (Aeneas.Std.Result.{0} (Aeneas.Std.Slice.{0} Aeneas.Std.U32)) fun (inn1 : Aeneas.Std.Usize) => @Aeneas.Std.uncurry.{0, 0, 1} Aeneas.Std.U32 Aeneas.Std.U32 (Aeneas.Std.Result.{0} (Aeneas.Std.Slice.{0} Aeneas.Std.U32)) fun (bits1 total1 : Aeneas.Std.U32) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (Aeneas.Std.Slice.{0} Aeneas.Std.U32) (@HSub.hSub.{0, 0, 0} Aeneas.Std.U32 Aeneas.Std.U32 (Aeneas.Std.Result.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32)) (@Aeneas.Std.instHSubUScalarResult Aeneas.Std.UScalarTy.U32) bits1 b) fun (bits2 : Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (Aeneas.Std.Slice.{0} Aeneas.Std.U32) (@HShiftRight.hShiftRight.{0, 0, 0} Aeneas.Std.U32 (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (Aeneas.Std.Result.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32)) (@Aeneas.Std.instHShiftRightUScalarResult Aeneas.Std.UScalarTy.U32 Aeneas.Std.UScalarTy.U32) total1 bits2) fun (i : Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (Aeneas.Std.Slice.{0} Aeneas.Std.U32) (@HSub.hSub.{0, 0, 0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) Aeneas.Std.U32 (Aeneas.Std.Result.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32)) (@Aeneas.Std.instHSubUScalarResult Aeneas.Std.UScalarTy.U32) (Aeneas.Std.U32.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))) (@of_decide_eq_true (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U32)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U32)) (@id.{0} (@Eq.{1} Bool (@Decidable.decide (@LE.le.{0} N
|
||
|
|
spec|fips205.base2bOuterFold.match_1|def|value=fun (motive : Aeneas.Std.Slice.{0} Aeneas.Std.U32 → Aeneas.Std.Usize → Aeneas.Std.U32 → Aeneas.Std.U32 → Aeneas.Std.Usize → Nat → Sort u_1) (x : Aeneas.Std.Slice.{0} Aeneas.Std.U32) (x_1 : Aeneas.Std.Usize) (x_2 x_3 : Aeneas.Std.U32) (x_4 : Aeneas.Std.Usize) (x_5 : Nat) (h_1 : (baseb : Aeneas.Std.Slice.{0} Aeneas.Std.U32) → (x : Aeneas.Std.Usize) → (x_6 x_7 : Aeneas.Std.U32) → (x_8 : Aeneas.Std.Usize) → motive baseb x x_6 x_7 x_8 (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0)))) (h_2 : (baseb : Aeneas.Std.Slice.{0} Aeneas.Std.U32) → (inn : Aeneas.Std.Usize) → (bits total : Aeneas.Std.U32) → (out : Aeneas.Std.Usize) → (k : Nat) → motive baseb inn bits total out (Nat.succ k)) => @Nat.casesOn.{u_1} (fun (x_6 : Nat) => motive x x_1 x_2 x_3 x_4 x_6) x_5 (h_1 x x_1 x_2 x_3 x_4) fun (n : Nat) => h_2 x x_1 x_2 x_3 x_4 n
|
||
|
|
spec|fips205.chainFoldN|def|value=fun {N : Aeneas.Std.Usize} (pk_seed : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (x : fips205.types.Adrs) (x_1 : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (x_2 : Aeneas.Std.U32) (x_3 : Nat) => @Nat.brecOn.{1} (fun (x : Nat) => fips205.types.Adrs → Aeneas.Std.Array.{0} Aeneas.Std.U8 N → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N)) x_3 (@fips205.chainFoldN._f N pk_seed) x x_1 x_2
|
||
|
|
spec|fips205.chainFoldN._f|def|value=fun {N : Aeneas.Std.Usize} (pk_seed : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (x : Nat) (f : @Nat.below.{1} (fun (x : Nat) => fips205.types.Adrs → Aeneas.Std.Array.{0} Aeneas.Std.U8 N → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N)) x) (x_1 : fips205.types.Adrs) (x_2 : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (x_3 : Aeneas.Std.U32) => @fips205.chainFoldN.match_1.{1} N (fun (x : fips205.types.Adrs) (x_4 : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (x_5 : Aeneas.Std.U32) (x_6 : Nat) => @Nat.below.{1} (fun (x : Nat) => fips205.types.Adrs → Aeneas.Std.Array.{0} Aeneas.Std.U8 N → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N)) x_6 → Aeneas.Std.Result.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N)) x_1 x_2 x_3 x (fun (x : fips205.types.Adrs) (tmp : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (x_4 : Aeneas.Std.U32) (x_5 : @Nat.below.{1} (fun (x : Nat) => fips205.types.Adrs → Aeneas.Std.Array.{0} Aeneas.Std.U8 N → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N)) (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0)))) => @Aeneas.Std.Result.ok.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) tmp) (fun (adrs : fips205.types.Adrs) (tmp : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (start : Aeneas.Std.U32) (k : Nat) (x : @Nat.below.{1} (fun (x : Nat) => fips205.types.Adrs → Aeneas.Std.Array.{0} Aeneas.Std.U8 N → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N)) (Nat.succ k)) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} fips205.types.Adrs (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (fips205.helpers.Adrs.set_hash_address adrs start) fun (adrs1 : fips205.types.Adrs) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.Slice.{0} Aeneas.Std.U8) (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (@Aeneas.Std.lift.{0} (Aeneas.Std.Slice.{0} Aeneas.Std.U8) (@Aeneas.Std.Array.to_slice.{0} Aeneas.Std.U8 N tmp)) fun (s : Aeneas.Std.Slice.{0} Aeneas.Std.U8) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (verify_mono.oracle.f N pk_seed adrs1 s) fun (tmp1 : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (@HAdd.hAdd.{0, 0, 0} Aeneas.Std.U32 (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (Aeneas.Std.Result.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32)) (@Aeneas.Std.instHAddUScalarResult Aeneas.Std.UScalarTy.U32) start (Aeneas.Std.U32.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (@of_decide_eq_true (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U32)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U32)) (@id.{0} (@Eq.{1} Bool (@Decidable.decide (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U32)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U32))) Bool.true) (@Eq.refl.{1} Bool Bool.true))))) fun (start1 : Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) => x.1 adrs1 tmp1 start1) f
|
||
|
|
spec|fips205.chainFoldN.match_1|def|value=fun {N : Aeneas.Std.Usize} (motive : fips205.types.Adrs → Aeneas.Std.Array.{0} Aeneas.Std.U8 N → Aeneas.Std.U32 → Nat → Sort u_1) (x : fips205.types.Adrs) (x_1 : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (x_2 : Aeneas.Std.U32) (x_3 : Nat) (h_1 : (x : fips205.types.Adrs) → (tmp : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) → (x_4 : Aeneas.Std.U32) → motive x tmp x_4 (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0)))) (h_2 : (adrs : fips205.types.Adrs) → (tmp : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) → (start : Aeneas.Std.U32) → (k : Nat) → motive adrs tmp start (Nat.succ k)) => @Nat.casesOn.{u_1} (fun (x_4 : Nat) => motive x x_1 x_2 x_4) x_3 (h_1 x x_1 x_2) fun (n : Nat) => h_2 x x_1 x_2 n
|
||
|
|
spec|fips205.forsInnerFold|def|value=fun {A K N : Aeneas.Std.Usize} (pk_seed : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (indices : Aeneas.Std.Array.{0} Aeneas.Std.U32 K) (i : Aeneas.Std.U32) (auth : fips205.types.Auth A N) (x : fips205.types.Adrs) (x_1 : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (x_2 : Aeneas.Std.U32) (x_3 : Nat) => @Nat.brecOn.{1} (fun (x : Nat) => fips205.types.Adrs → Aeneas.Std.Array.{0} Aeneas.Std.U8 N → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} Aeneas.Std.U8 N))) x_3 (@fips205.forsInnerFold._f A K N pk_seed indices i auth) x x_1 x_2
|
||
|
|
spec|fips205.forsInnerFold._f|def|value=fun {A K N : Aeneas.Std.Usize} (pk_seed : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (indices : Aeneas.Std.Array.{0} Aeneas.Std.U32 K) (i : Aeneas.Std.U32) (auth : fips205.types.Auth A N) (x : Nat) (f : @Nat.below.{1} (fun (x : Nat) => fips205.types.Adrs → Aeneas.Std.Array.{0} Aeneas.Std.U8 N → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} Aeneas.Std.U8 N))) x) (x_1 : fips205.types.Adrs) (x_2 : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (x_3 : Aeneas.Std.U32) => @fips205.forsInnerFold.match_1.{1} N (fun (x : fips205.types.Adrs) (x_4 : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (x_5 : Aeneas.Std.U32) (x_6 : Nat) => @Nat.below.{1} (fun (x : Nat) => fips205.types.Adrs → Aeneas.Std.Array.{0} Aeneas.Std.U8 N → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} Aeneas.Std.U8 N))) x_6 → Aeneas.Std.Result.{0} (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} Aeneas.Std.U8 N))) x_1 x_2 x_3 x (fun (adrs : fips205.types.Adrs) (node : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (x : Aeneas.Std.U32) (x_4 : @Nat.below.{1} (fun (x : Nat) => fips205.types.Adrs → Aeneas.Std.Array.{0} Aeneas.Std.U8 N → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} Aeneas.Std.U8 N))) (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0)))) => @Aeneas.Std.Result.ok.{0} (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} Aeneas.Std.U8 N)) (@Prod.mk.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) adrs node)) (fun (adrs : fips205.types.Adrs) (node : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (lvl : Aeneas.Std.U32) (s : Nat) (x : @Nat.below.{1} (fun (x : Nat) => fips205.types.Adrs → Aeneas.Std.Array.{0} Aeneas.Std.U8 N → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} Aeneas.Std.U8 N))) (Nat.succ s)) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} Aeneas.Std.U8 N)) (@HAdd.hAdd.{0, 0, 0} Aeneas.Std.U32 (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (Aeneas.Std.Result.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32)) (@Aeneas.Std.instHAddUScalarResult Aeneas.Std.UScalarTy.U32) lvl (Aeneas.Std.U32.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (@of_decide_eq_true (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U32)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U32)) (@id.{0} (@Eq.{1} Bool (@Decidable.decide (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U32)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U32))) Bool.true) (@Eq.refl.{1} Bool Bool.true))))) fun (w : Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} fips205.types.Adrs (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} Aeneas.Std.U8 N)) (fips205.helpers.Adrs.set_tree_height adrs w) fun (adrs1 : fips205.types.Adrs) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.Usize) (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} Aeneas.Std.U8 N)) (@Aeneas.Std.lift.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.Usize) (@Aeneas.Std.UScalar.cast Aeneas.Std.UScalarTy.U32 Aeneas.Std.UScalarTy.Usize i)) fun (i2 : Aeneas.Std.UScalar Aeneas.Std.UScalarTy.Usize) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} Aeneas.Std.U32 (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} Aeneas.Std.U8 N)) (@Aeneas.Std.Array.index_usize.{0} Aeneas.Std.U32 K indices i2) fun (i3 : Aeneas.Std.U32) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aene
|
||
|
|
spec|fips205.forsInnerFold.match_1|def|value=fun {N : Aeneas.Std.Usize} (motive : fips205.types.Adrs → Aeneas.Std.Array.{0} Aeneas.Std.U8 N → Aeneas.Std.U32 → Nat → Sort u_1) (x : fips205.types.Adrs) (x_1 : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (x_2 : Aeneas.Std.U32) (x_3 : Nat) (h_1 : (adrs : fips205.types.Adrs) → (node : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) → (x : Aeneas.Std.U32) → motive adrs node x (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0)))) (h_2 : (adrs : fips205.types.Adrs) → (node : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) → (lvl : Aeneas.Std.U32) → (s : Nat) → motive adrs node lvl (Nat.succ s)) => @Nat.casesOn.{u_1} (fun (x_4 : Nat) => motive x x_1 x_2 x_4) x_3 (h_1 x x_1 x_2) fun (n : Nat) => h_2 x x_1 x_2 n
|
||
|
|
spec|fips205.forsOuterFold|def|value=fun {A K N : Aeneas.Std.Usize} (sig_fors : fips205.types.ForsSig A K N) (pk_seed : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (a32 : Aeneas.Std.U32) (indices : Aeneas.Std.Array.{0} Aeneas.Std.U32 K) (x : fips205.types.Adrs) (x_1 : Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K) (x_2 : Aeneas.Std.U32) (x_3 : Nat) => @Nat.brecOn.{1} (fun (x : Nat) => fips205.types.Adrs → Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K))) x_3 (@fips205.forsOuterFold._f A K N sig_fors pk_seed a32 indices) x x_1 x_2
|
||
|
|
spec|fips205.forsOuterFold._f|def|value=fun {A K N : Aeneas.Std.Usize} (sig_fors : fips205.types.ForsSig A K N) (pk_seed : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (a32 : Aeneas.Std.U32) (indices : Aeneas.Std.Array.{0} Aeneas.Std.U32 K) (x : Nat) (f : @Nat.below.{1} (fun (x : Nat) => fips205.types.Adrs → Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K))) x) (x_1 : fips205.types.Adrs) (x_2 : Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K) (x_3 : Aeneas.Std.U32) => @fips205.forsOuterFold.match_1.{1} K N (fun (x : fips205.types.Adrs) (x_4 : Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K) (x_5 : Aeneas.Std.U32) (x_6 : Nat) => @Nat.below.{1} (fun (x : Nat) => fips205.types.Adrs → Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K))) x_6 → Aeneas.Std.Result.{0} (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K))) x_1 x_2 x_3 x (fun (adrs : fips205.types.Adrs) (root : Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K) (x : Aeneas.Std.U32) (x_4 : @Nat.below.{1} (fun (x : Nat) => fips205.types.Adrs → Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K))) (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0)))) => @Aeneas.Std.Result.ok.{0} (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K)) (@Prod.mk.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K) adrs root)) (fun (adrs : fips205.types.Adrs) (root : Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K) (i : Aeneas.Std.U32) (s : Nat) (x : @Nat.below.{1} (fun (x : Nat) => fips205.types.Adrs → Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K))) (Nat.succ s)) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.Usize) (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K)) (@Aeneas.Std.lift.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.Usize) (@Aeneas.Std.UScalar.cast Aeneas.Std.UScalarTy.U32 Aeneas.Std.UScalarTy.Usize i)) fun (i1 : Aeneas.Std.UScalar Aeneas.Std.UScalarTy.Usize) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K)) (@Aeneas.Std.Array.index_usize.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K (@fips205.types.ForsSig.private_key_value A K N sig_fors) i1) fun (sk : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} fips205.types.Adrs (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K)) (fips205.helpers.Adrs.set_tree_height adrs (Aeneas.Std.U32.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0))) (@of_decide_eq_true (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U32)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U32)) (@id.{0} (@Eq.{1} Bool (@Decidable.decide (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U32)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U32))) Bool.true) (@Eq.refl.{1} Bool Bool.true))
|
||
|
|
spec|fips205.forsOuterFold.match_1|def|value=fun {K N : Aeneas.Std.Usize} (motive : fips205.types.Adrs → Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K → Aeneas.Std.U32 → Nat → Sort u_1) (x : fips205.types.Adrs) (x_1 : Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K) (x_2 : Aeneas.Std.U32) (x_3 : Nat) (h_1 : (adrs : fips205.types.Adrs) → (root : Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K) → (x : Aeneas.Std.U32) → motive adrs root x (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0)))) (h_2 : (adrs : fips205.types.Adrs) → (root : Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) K) → (i : Aeneas.Std.U32) → (s : Nat) → motive adrs root i (Nat.succ s)) => @Nat.casesOn.{u_1} (fun (x_4 : Nat) => motive x x_1 x_2 x_4) x_3 (h_1 x x_1 x_2) fun (n : Nat) => h_2 x x_1 x_2 n
|
||
|
|
spec|fips205.htFoldN|def|value=fun {D HP LEN N : Aeneas.Std.Usize} (a : Aeneas.Std.Array.{0} (fips205.types.XmssSig HP LEN N) D) (pk_seed : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (hp32 : Aeneas.Std.U32) (x : Aeneas.Std.U64) (x_1 : fips205.types.Adrs) (x_2 : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (x_3 : Aeneas.Std.U32) (x_4 : Nat) => @Nat.brecOn.{1} (fun (x : Nat) => Aeneas.Std.U64 → fips205.types.Adrs → Aeneas.Std.Array.{0} Aeneas.Std.U8 N → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N)) x_4 (@fips205.htFoldN._f D HP LEN N a pk_seed hp32) x x_1 x_2 x_3
|
||
|
|
spec|fips205.htFoldN._f|def|value=fun {D HP LEN N : Aeneas.Std.Usize} (a : Aeneas.Std.Array.{0} (fips205.types.XmssSig HP LEN N) D) (pk_seed : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (hp32 : Aeneas.Std.U32) (x : Nat) (f : @Nat.below.{1} (fun (x : Nat) => Aeneas.Std.U64 → fips205.types.Adrs → Aeneas.Std.Array.{0} Aeneas.Std.U8 N → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N)) x) (x_1 : Aeneas.Std.U64) (x_2 : fips205.types.Adrs) (x_3 : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (x_4 : Aeneas.Std.U32) => @fips205.htFoldN.match_1.{1} N (fun (x : Aeneas.Std.U64) (x_5 : fips205.types.Adrs) (x_6 : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (x_7 : Aeneas.Std.U32) (x_8 : Nat) => @Nat.below.{1} (fun (x : Nat) => Aeneas.Std.U64 → fips205.types.Adrs → Aeneas.Std.Array.{0} Aeneas.Std.U8 N → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N)) x_8 → Aeneas.Std.Result.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N)) x_1 x_2 x_3 x_4 x (fun (x : Aeneas.Std.U64) (x_5 : fips205.types.Adrs) (node : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (x_6 : Aeneas.Std.U32) (x_7 : @Nat.below.{1} (fun (x : Nat) => Aeneas.Std.U64 → fips205.types.Adrs → Aeneas.Std.Array.{0} Aeneas.Std.U8 N → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N)) (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0)))) => @Aeneas.Std.Result.ok.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) node) (fun (idx_tree : Aeneas.Std.U64) (adrs : fips205.types.Adrs) (node : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (j : Aeneas.Std.U32) (s : Nat) (x : @Nat.below.{1} (fun (x : Nat) => Aeneas.Std.U64 → fips205.types.Adrs → Aeneas.Std.Array.{0} Aeneas.Std.U8 N → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N)) (Nat.succ s)) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U64) (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (@HShiftLeft.hShiftLeft.{0, 0, 0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U64) Aeneas.Std.U32 (Aeneas.Std.Result.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U64)) (@Aeneas.Std.instHShiftLeftUScalarResult Aeneas.Std.UScalarTy.U64 Aeneas.Std.UScalarTy.U32) (Aeneas.Std.U64.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (@of_decide_eq_true (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U64)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U64)) (@id.{0} (@Eq.{1} Bool (@Decidable.decide (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U64)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U64))) Bool.true) (@Eq.refl.{1} Bool Bool.true)))) hp32) fun (i : Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U64) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U64) (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (@HSub.hSub.{0, 0, 0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U64) (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U64) (Aeneas.Std.Result.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U64)) (@Aeneas.Std.instHSubUScalarResult Aeneas.Std.UScalarTy.U64) i (Aeneas.Std.U64.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (@of_decide_eq_true (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U64)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U64)) (@id.{0} (@Eq.{1} Bool (@Decidable.decide (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U64)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U64))) Bool.true
|
||
|
|
spec|fips205.htFoldN.match_1|def|value=fun {N : Aeneas.Std.Usize} (motive : Aeneas.Std.U64 → fips205.types.Adrs → Aeneas.Std.Array.{0} Aeneas.Std.U8 N → Aeneas.Std.U32 → Nat → Sort u_1) (x : Aeneas.Std.U64) (x_1 : fips205.types.Adrs) (x_2 : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (x_3 : Aeneas.Std.U32) (x_4 : Nat) (h_1 : (x : Aeneas.Std.U64) → (x_5 : fips205.types.Adrs) → (node : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) → (x_6 : Aeneas.Std.U32) → motive x x_5 node x_6 (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0)))) (h_2 : (idx_tree : Aeneas.Std.U64) → (adrs : fips205.types.Adrs) → (node : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) → (j : Aeneas.Std.U32) → (s : Nat) → motive idx_tree adrs node j (Nat.succ s)) => @Nat.casesOn.{u_1} (fun (x_5 : Nat) => motive x x_1 x_2 x_3 x_5) x_4 (h_1 x x_1 x_2 x_3) fun (n : Nat) => h_2 x x_1 x_2 x_3 n
|
||
|
|
spec|fips205.htVerifyRoot|def|value=fun {D HP LEN N : Aeneas.Std.Usize} (m : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (sig_ht : fips205.types.HtSig D HP LEN N) (pk_seed : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (idx_tree : Aeneas.Std.U64) (idx_leaf : Aeneas.Std.U32) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (@Aeneas.Std.lift.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (@Aeneas.Std.UScalar.cast Aeneas.Std.UScalarTy.Usize Aeneas.Std.UScalarTy.U32 D)) fun (d32 : Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (@Aeneas.Std.lift.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (@Aeneas.Std.UScalar.cast Aeneas.Std.UScalarTy.Usize Aeneas.Std.UScalarTy.U32 HP)) fun (hp32 : Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} fips205.types.Adrs (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) fips205.types.Adrs.Insts.CoreDefaultDefault.default fun (adrs : fips205.types.Adrs) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} fips205.types.Adrs (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (fips205.helpers.Adrs.set_tree_address adrs idx_tree) fun (adrs1 : fips205.types.Adrs) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (fips205.types.XmssSig HP LEN N) (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (@Aeneas.Std.Array.index_usize.{0} (fips205.types.XmssSig HP LEN N) D (@fips205.types.HtSig.xmss_sigs D HP LEN N sig_ht) (Aeneas.Std.Usize.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0))) fips205.htVerifyRoot._proof_1)) fun (xs : fips205.types.XmssSig HP LEN N) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (fips205.types.XmssSig HP LEN N) (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (@fips205.types.XmssSig.Insts.CoreCloneClone.clone HP LEN N xs) fun (sig_tmp : fips205.types.XmssSig HP LEN N) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (@fips205.verify_mono.xmss_pk_from_sig_free HP LEN N idx_leaf sig_tmp m pk_seed adrs1) fun (node : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) => @fips205.verify_mono.ht_verify_free_loop D HP LEN N (@Aeneas.Std.core.ops.range.Range.mk.{0} Aeneas.Std.U32 (Aeneas.Std.U32.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) fips205.htVerifyRoot._proof_2) d32) (@fips205.types.HtSig.xmss_sigs D HP LEN N sig_ht) pk_seed idx_tree hp32 adrs1 node
|
||
|
|
spec|fips205.htVerifyRoot._proof_1|prop|type=@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)
|
||
|
|
spec|fips205.htVerifyRoot._proof_2|prop|type=@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U32)
|
||
|
|
spec|fips205.slhVerifyRoot|def|value=fun {A D HP K LEN N : Aeneas.Std.Usize} (H M : Aeneas.Std.Usize) (mprime : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (sig : fips205.types.SlhDsaSig A D HP K LEN N) (pk : fips205.types.SlhPublicKey N) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (@Aeneas.Std.lift.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (@Aeneas.Std.UScalar.cast Aeneas.Std.UScalarTy.Usize Aeneas.Std.UScalarTy.U32 D)) fun (d32 : Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (@Aeneas.Std.lift.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (@Aeneas.Std.UScalar.cast Aeneas.Std.UScalarTy.Usize Aeneas.Std.UScalarTy.U32 H)) fun (h32 : Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} fips205.types.Adrs (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) fips205.types.Adrs.Insts.CoreDefaultDefault.default fun (adrs : fips205.types.Adrs) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.Slice.{0} Aeneas.Std.U8) (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (@Aeneas.Std.lift.{0} (Aeneas.Std.Slice.{0} Aeneas.Std.U8) (@Aeneas.Std.Array.to_slice.{0} Aeneas.Std.U8 N (@fips205.types.SlhDsaSig.randomness A D HP K LEN N sig))) fun (s : Aeneas.Std.Slice.{0} Aeneas.Std.U8) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.Slice.{0} Aeneas.Std.U8) (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (@Aeneas.Std.lift.{0} (Aeneas.Std.Slice.{0} Aeneas.Std.U8) (@Aeneas.Std.Array.to_slice.{0} Aeneas.Std.U8 N (@fips205.types.SlhPublicKey.pk_seed N pk))) fun (s1 : Aeneas.Std.Slice.{0} Aeneas.Std.U8) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.Slice.{0} Aeneas.Std.U8) (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (@Aeneas.Std.lift.{0} (Aeneas.Std.Slice.{0} Aeneas.Std.U8) (@Aeneas.Std.Array.to_slice.{0} Aeneas.Std.U8 N (@fips205.types.SlhPublicKey.pk_root N pk))) fun (s2 : Aeneas.Std.Slice.{0} Aeneas.Std.U8) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 M) (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (verify_mono.oracle.h_msg M s s1 s2 mprime) fun (digest : Aeneas.Std.Array.{0} Aeneas.Std.U8 M) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.Usize) (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (@HMul.hMul.{0, 0, 0} Aeneas.Std.Usize Aeneas.Std.Usize (Aeneas.Std.Result.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.Usize)) (@Aeneas.Std.instHMulUScalarResult Aeneas.Std.UScalarTy.Usize) K A) fun (i : Aeneas.Std.UScalar Aeneas.Std.UScalarTy.Usize) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.Usize) (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (@HAdd.hAdd.{0, 0, 0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.Usize) (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.Usize) (Aeneas.Std.Result.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.Usize)) (@Aeneas.Std.instHAddUScalarResult Aeneas.Std.UScalarTy.Usize) i (Aeneas.Std.Usize.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 7) (instOfNatNat (nat_lit 7))) fips205.slhVerifyRoot._proof_1)) fun (i1 : Aeneas.Std.UScalar Aeneas.Std.UScalarTy.Usize) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.Usize) (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (@HDiv.hDiv.{0, 0, 0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.Usize) (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.Usize) (Aeneas.Std.Result.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.Usize)) (@Aeneas.Std.instHDivUScalarResult Aeneas.Std.UScalarTy.Usize) i1 (Aeneas.Std.Usize.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 8) (instOfNatNat (nat_lit 8))) fips205.slhVerifyRoot._proof_2)) fun (index1 : Aeneas.Std.UScalar Aeneas.Std.UScalarTy.Usize) => @Bind.bind.{0, 0}
|
||
|
|
spec|fips205.slhVerifyRoot._proof_1|prop|type=@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 7) (instOfNatNat (nat_lit 7))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)
|
||
|
|
spec|fips205.slhVerifyRoot._proof_2|prop|type=@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 8) (instOfNatNat (nat_lit 8))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)
|
||
|
|
spec|fips205.slhVerifyRoot._proof_3|prop|type=@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)
|
||
|
|
spec|fips205.slhVerifyRoot._proof_4|prop|type=@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 7) (instOfNatNat (nat_lit 7))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U32)
|
||
|
|
spec|fips205.slhVerifyRoot._proof_5|prop|type=@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 8) (instOfNatNat (nat_lit 8))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U32)
|
||
|
|
spec|fips205.slhVerifyRoot._proof_6|prop|type=@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 64) (instOfNatNat (nat_lit 64))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U32)
|
||
|
|
spec|fips205.toByteFold|def|value=fun (n : Aeneas.Std.U32) (x : Aeneas.Std.Array.{0} Aeneas.Std.U8 (Aeneas.Std.Usize.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) fips205.toByteFold._proof_1)) (x_1 x_2 : Aeneas.Std.U32) (x_3 : Nat) => @Nat.brecOn.{1} (fun (x : Nat) => Aeneas.Std.Array.{0} Aeneas.Std.U8 (Aeneas.Std.Usize.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) fips205.toByteFold._proof_1) → Aeneas.Std.U32 → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 (Aeneas.Std.Usize.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) fips205.toByteFold._proof_1))) x_3 (fips205.toByteFold._f n) x x_1 x_2
|
||
|
|
spec|fips205.toByteFold._f|def|value=fun (n : Aeneas.Std.U32) (x : Nat) (f : @Nat.below.{1} (fun (x : Nat) => Aeneas.Std.Array.{0} Aeneas.Std.U8 (Aeneas.Std.Usize.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (@of_decide_eq_true (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (@id.{0} (@Eq.{1} Bool (@Decidable.decide (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize))) Bool.true) (@Eq.refl.{1} Bool Bool.true)))) → Aeneas.Std.U32 → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 (Aeneas.Std.Usize.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (@of_decide_eq_true (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (@id.{0} (@Eq.{1} Bool (@Decidable.decide (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize))) Bool.true) (@Eq.refl.{1} Bool Bool.true)))))) x) (x_1 : Aeneas.Std.Array.{0} Aeneas.Std.U8 (Aeneas.Std.Usize.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (@of_decide_eq_true (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (@id.{0} (@Eq.{1} Bool (@Decidable.decide (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize))) Bool.true) (@Eq.refl.{1} Bool Bool.true))))) (x_2 x_3 : Aeneas.Std.U32) => fips205.toByteFold.match_1.{1} (fun (x : Aeneas.Std.Array.{0} Aeneas.Std.U8 (Aeneas.Std.Usize.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (@of_decide_eq_true (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (@id.{0} (@Eq.{1} Bool (@Decidable.decide (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize))) Bool.true) (@Eq.refl.{1} Bool Bool.true))))) (x_4 x_5 : Aeneas.Std.U32) (x_6 : Nat) => @Nat.below.{1} (fun (x : Nat) => Aeneas.Std.Array.{0} Aeneas.Std.U8 (Aeneas.Std.Usize.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (@of_decide_eq_true (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (@id.{0} (@Eq.{1} Bool (@Decidable.decide (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aene
|
||
|
|
spec|fips205.toByteFold._proof_1|prop|type=@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)
|
||
|
|
spec|fips205.toByteFold.match_1|def|value=fun (motive : Aeneas.Std.Array.{0} Aeneas.Std.U8 (Aeneas.Std.Usize.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (@of_decide_eq_true (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (@id.{0} (@Eq.{1} Bool (@Decidable.decide (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize))) Bool.true) (@Eq.refl.{1} Bool Bool.true)))) → Aeneas.Std.U32 → Aeneas.Std.U32 → Nat → Sort u_1) (x : Aeneas.Std.Array.{0} Aeneas.Std.U8 (Aeneas.Std.Usize.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (@of_decide_eq_true (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (@id.{0} (@Eq.{1} Bool (@Decidable.decide (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize))) Bool.true) (@Eq.refl.{1} Bool Bool.true))))) (x_1 x_2 : Aeneas.Std.U32) (x_3 : Nat) (h_1 : (s : Aeneas.Std.Array.{0} Aeneas.Std.U8 (Aeneas.Std.Usize.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (@of_decide_eq_true (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (@id.{0} (@Eq.{1} Bool (@Decidable.decide (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize))) Bool.true) (@Eq.refl.{1} Bool Bool.true))))) → (x x_4 : Aeneas.Std.U32) → motive s x x_4 (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0)))) (h_2 : (s : Aeneas.Std.Array.{0} Aeneas.Std.U8 (Aeneas.Std.Usize.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (@of_decide_eq_true (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (@id.{0} (@Eq.{1} Bool (@Decidable.decide (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize))) Bool.true) (@Eq.refl.{1} Bool Bool.true))))) → (total i : Aeneas.Std.U32) → (k : Nat) → motive s total i (Nat.succ k)) => @Nat.casesOn.{u_1} (fun (x_4 : Nat) => motive x x_1 x_2 x_4) x_3 (h_1 x x_1 x_2) fun (n : Nat) => h_2 x x_1 x_2 n
|
||
|
|
spec|fips205.toIntFold|def|value=fun (x : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (x_1 : Aeneas.Std.U64) (x_2 : Aeneas.Std.Usize) (x_3 : Nat) => @Nat.brecOn.{1} (fun (x : Nat) => Aeneas.Std.U64 → Aeneas.Std.Usize → Aeneas.Std.Result.{0} Aeneas.Std.U64) x_3 (fips205.toIntFold._f x) x_1 x_2
|
||
|
|
spec|fips205.toIntFold._f|def|value=fun (x : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (x_1 : Nat) (f : @Nat.below.{1} (fun (x : Nat) => Aeneas.Std.U64 → Aeneas.Std.Usize → Aeneas.Std.Result.{0} Aeneas.Std.U64) x_1) (x_2 : Aeneas.Std.U64) (x_3 : Aeneas.Std.Usize) => fips205.toIntFold.match_1.{1} (fun (x : Aeneas.Std.U64) (x_4 : Aeneas.Std.Usize) (x_5 : Nat) => @Nat.below.{1} (fun (x : Nat) => Aeneas.Std.U64 → Aeneas.Std.Usize → Aeneas.Std.Result.{0} Aeneas.Std.U64) x_5 → Aeneas.Std.Result.{0} Aeneas.Std.U64) x_2 x_3 x_1 (fun (total : Aeneas.Std.U64) (x : Aeneas.Std.Usize) (x_4 : @Nat.below.{1} (fun (x : Nat) => Aeneas.Std.U64 → Aeneas.Std.Usize → Aeneas.Std.Result.{0} Aeneas.Std.U64) (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0)))) => @Aeneas.Std.Result.ok.{0} Aeneas.Std.U64 total) (fun (total : Aeneas.Std.U64) (i : Aeneas.Std.Usize) (s : Nat) (x_4 : @Nat.below.{1} (fun (x : Nat) => Aeneas.Std.U64 → Aeneas.Std.Usize → Aeneas.Std.Result.{0} Aeneas.Std.U64) (Nat.succ s)) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U64) Aeneas.Std.U64 (@HShiftLeft.hShiftLeft.{0, 0, 0} Aeneas.Std.U64 (Aeneas.Std.IScalar Aeneas.Std.IScalarTy.I32) (Aeneas.Std.Result.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U64)) (@Aeneas.Std.instHShiftLeftUScalarIScalarResult Aeneas.Std.UScalarTy.U64 Aeneas.Std.IScalarTy.I32) total (Aeneas.Std.I32.ofInt (@OfNat.ofNat.{0} Int (nat_lit 8) (@instOfNat (nat_lit 8))) (@of_decide_eq_true (And (@LE.le.{0} Int Int.instLEInt (Aeneas.Std.IScalar.cMin Aeneas.Std.IScalarTy.I32) (@OfNat.ofNat.{0} Int (nat_lit 8) (@instOfNat (nat_lit 8)))) (@LE.le.{0} Int Int.instLEInt (@OfNat.ofNat.{0} Int (nat_lit 8) (@instOfNat (nat_lit 8))) (Aeneas.Std.IScalar.cMax Aeneas.Std.IScalarTy.I32))) (@instDecidableAnd (@LE.le.{0} Int Int.instLEInt (Aeneas.Std.IScalar.cMin Aeneas.Std.IScalarTy.I32) (@OfNat.ofNat.{0} Int (nat_lit 8) (@instOfNat (nat_lit 8)))) (@LE.le.{0} Int Int.instLEInt (@OfNat.ofNat.{0} Int (nat_lit 8) (@instOfNat (nat_lit 8))) (Aeneas.Std.IScalar.cMax Aeneas.Std.IScalarTy.I32)) (Int.decLe (Aeneas.Std.IScalar.cMin Aeneas.Std.IScalarTy.I32) (@OfNat.ofNat.{0} Int (nat_lit 8) (@instOfNat (nat_lit 8)))) (Int.decLe (@OfNat.ofNat.{0} Int (nat_lit 8) (@instOfNat (nat_lit 8))) (Aeneas.Std.IScalar.cMax Aeneas.Std.IScalarTy.I32))) (@id.{0} (@Eq.{1} Bool (@Decidable.decide (And (@LE.le.{0} Int Int.instLEInt (Aeneas.Std.IScalar.cMin Aeneas.Std.IScalarTy.I32) (@OfNat.ofNat.{0} Int (nat_lit 8) (@instOfNat (nat_lit 8)))) (@LE.le.{0} Int Int.instLEInt (@OfNat.ofNat.{0} Int (nat_lit 8) (@instOfNat (nat_lit 8))) (Aeneas.Std.IScalar.cMax Aeneas.Std.IScalarTy.I32))) (@instDecidableAnd (@LE.le.{0} Int Int.instLEInt (Aeneas.Std.IScalar.cMin Aeneas.Std.IScalarTy.I32) (@OfNat.ofNat.{0} Int (nat_lit 8) (@instOfNat (nat_lit 8)))) (@LE.le.{0} Int Int.instLEInt (@OfNat.ofNat.{0} Int (nat_lit 8) (@instOfNat (nat_lit 8))) (Aeneas.Std.IScalar.cMax Aeneas.Std.IScalarTy.I32)) (Int.decLe (Aeneas.Std.IScalar.cMin Aeneas.Std.IScalarTy.I32) (@OfNat.ofNat.{0} Int (nat_lit 8) (@instOfNat (nat_lit 8)))) (Int.decLe (@OfNat.ofNat.{0} Int (nat_lit 8) (@instOfNat (nat_lit 8))) (Aeneas.Std.IScalar.cMax Aeneas.Std.IScalarTy.I32)))) Bool.true) (@Eq.refl.{1} Bool Bool.true))))) fun (i1 : Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U64) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} Aeneas.Std.U8 Aeneas.Std.U64 (@Aeneas.Std.Slice.index_usize.{0} Aeneas.Std.U8 x i) fun (i2 : Aeneas.Std.U8) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} Aeneas.Std.U64 Aeneas.Std.U64 (@Aeneas.Std.lift.{0} Aeneas.Std.U64 (Aeneas.Std.core.convert.num.FromU64U8.from i2)) fun (i3 : Aeneas.Std.U64) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U64) Aeneas.Std.U64 (@HAdd.hAdd.{0, 0, 0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U64) Aeneas.Std.U64 (Aeneas.Std.Result.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U64)) (@Aeneas.Std.instHAddUScalarResult Aeneas.Std.UScalarTy.U64) i1 i3) fun (
|
||
|
|
spec|fips205.toIntFold.match_1|def|value=fun (motive : Aeneas.Std.U64 → Aeneas.Std.Usize → Nat → Sort u_1) (x : Aeneas.Std.U64) (x_1 : Aeneas.Std.Usize) (x_2 : Nat) (h_1 : (total : Aeneas.Std.U64) → (x : Aeneas.Std.Usize) → motive total x (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0)))) (h_2 : (total : Aeneas.Std.U64) → (i : Aeneas.Std.Usize) → (s : Nat) → motive total i (Nat.succ s)) => @Nat.casesOn.{u_1} (fun (x_3 : Nat) => motive x x_1 x_3) x_2 (h_1 x x_1) fun (n : Nat) => h_2 x x_1 n
|
||
|
|
spec|fips205.wotsChainFold|def|value=fun {LEN N : Aeneas.Std.Usize} (sig : fips205.types.WotsSig LEN N) (pk_seed : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (msg : Aeneas.Std.Array.{0} Aeneas.Std.U32 LEN) (x : fips205.types.Adrs) (x_1 : Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN) (x_2 : Aeneas.Std.Usize) (x_3 : Nat) => @Nat.brecOn.{1} (fun (x : Nat) => fips205.types.Adrs → Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN → Aeneas.Std.Usize → Aeneas.Std.Result.{0} (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN))) x_3 (@fips205.wotsChainFold._f LEN N sig pk_seed msg) x x_1 x_2
|
||
|
|
spec|fips205.wotsChainFold._f|def|value=fun {LEN N : Aeneas.Std.Usize} (sig : fips205.types.WotsSig LEN N) (pk_seed : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (msg : Aeneas.Std.Array.{0} Aeneas.Std.U32 LEN) (x : Nat) (f : @Nat.below.{1} (fun (x : Nat) => fips205.types.Adrs → Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN → Aeneas.Std.Usize → Aeneas.Std.Result.{0} (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN))) x) (x_1 : fips205.types.Adrs) (x_2 : Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN) (x_3 : Aeneas.Std.Usize) => @fips205.wotsChainFold.match_1.{1} LEN N (fun (x : fips205.types.Adrs) (x_4 : Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN) (x_5 : Aeneas.Std.Usize) (x_6 : Nat) => @Nat.below.{1} (fun (x : Nat) => fips205.types.Adrs → Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN → Aeneas.Std.Usize → Aeneas.Std.Result.{0} (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN))) x_6 → Aeneas.Std.Result.{0} (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN))) x_1 x_2 x_3 x (fun (adrs : fips205.types.Adrs) (tmp : Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN) (x : Aeneas.Std.Usize) (x_4 : @Nat.below.{1} (fun (x : Nat) => fips205.types.Adrs → Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN → Aeneas.Std.Usize → Aeneas.Std.Result.{0} (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN))) (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0)))) => @Aeneas.Std.Result.ok.{0} (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN)) (@Prod.mk.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN) adrs tmp)) (fun (adrs : fips205.types.Adrs) (tmp : Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN) (i : Aeneas.Std.Usize) (k : Nat) (x : @Nat.below.{1} (fun (x : Nat) => fips205.types.Adrs → Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN → Aeneas.Std.Usize → Aeneas.Std.Result.{0} (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN))) (Nat.succ k)) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN)) (@Aeneas.Std.lift.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (@Aeneas.Std.UScalar.cast Aeneas.Std.UScalarTy.Usize Aeneas.Std.UScalarTy.U32 i)) fun (i1 : Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} fips205.types.Adrs (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN)) (fips205.helpers.Adrs.set_chain_address adrs i1) fun (adrs1 : fips205.types.Adrs) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN)) (@Aeneas.Std.Array.index_usize.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN (@fips205.types.WotsSig.data LEN N sig) i) fun (a : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} Aeneas.Std.U32 (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN)) (@Aeneas.Std.Array.index_usize.{0} Aeneas.Std.U32 LEN msg i) fun (i2 : Aeneas.Std.U32) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (Prod.{0, 0} fips205.types.Adrs (Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN)) (@HSub.hSub.{0, 0, 0} Aeneas.Std.U32 (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (Aeneas.Std.Result.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32)) (@Aeneas.Std.instHSubUScalarResult Ae
|
||
|
|
spec|fips205.wotsChainFold.match_1|def|value=fun {LEN N : Aeneas.Std.Usize} (motive : fips205.types.Adrs → Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN → Aeneas.Std.Usize → Nat → Sort u_1) (x : fips205.types.Adrs) (x_1 : Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN) (x_2 : Aeneas.Std.Usize) (x_3 : Nat) (h_1 : (adrs : fips205.types.Adrs) → (tmp : Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN) → (x : Aeneas.Std.Usize) → motive adrs tmp x (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0)))) (h_2 : (adrs : fips205.types.Adrs) → (tmp : Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) LEN) → (i : Aeneas.Std.Usize) → (k : Nat) → motive adrs tmp i (Nat.succ k)) => @Nat.casesOn.{u_1} (fun (x_4 : Nat) => motive x x_1 x_2 x_4) x_3 (h_1 x x_1 x_2) fun (n : Nat) => h_2 x x_1 x_2 n
|
||
|
|
spec|fips205.wotsCsumFold|def|value=fun {LEN : Aeneas.Std.Usize} (msg : Aeneas.Std.Array.{0} Aeneas.Std.U32 LEN) (x : Aeneas.Std.U32) (x_1 : Aeneas.Std.Usize) (x_2 : Nat) => @Nat.brecOn.{1} (fun (x : Nat) => Aeneas.Std.U32 → Aeneas.Std.Usize → Aeneas.Std.Result.{0} Aeneas.Std.U32) x_2 (@fips205.wotsCsumFold._f LEN msg) x x_1
|
||
|
|
spec|fips205.wotsCsumFold._f|def|value=fun {LEN : Aeneas.Std.Usize} (msg : Aeneas.Std.Array.{0} Aeneas.Std.U32 LEN) (x : Nat) (f : @Nat.below.{1} (fun (x : Nat) => Aeneas.Std.U32 → Aeneas.Std.Usize → Aeneas.Std.Result.{0} Aeneas.Std.U32) x) (x_1 : Aeneas.Std.U32) (x_2 : Aeneas.Std.Usize) => fips205.wotsCsumFold.match_1.{1} (fun (x : Aeneas.Std.U32) (x_3 : Aeneas.Std.Usize) (x_4 : Nat) => @Nat.below.{1} (fun (x : Nat) => Aeneas.Std.U32 → Aeneas.Std.Usize → Aeneas.Std.Result.{0} Aeneas.Std.U32) x_4 → Aeneas.Std.Result.{0} Aeneas.Std.U32) x_1 x_2 x (fun (csum : Aeneas.Std.U32) (x : Aeneas.Std.Usize) (x_3 : @Nat.below.{1} (fun (x : Nat) => Aeneas.Std.U32 → Aeneas.Std.Usize → Aeneas.Std.Result.{0} Aeneas.Std.U32) (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0)))) => @Aeneas.Std.Result.ok.{0} Aeneas.Std.U32 csum) (fun (csum : Aeneas.Std.U32) (i : Aeneas.Std.Usize) (s : Nat) (x : @Nat.below.{1} (fun (x : Nat) => Aeneas.Std.U32 → Aeneas.Std.Usize → Aeneas.Std.Result.{0} Aeneas.Std.U32) (Nat.succ s)) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) Aeneas.Std.U32 (@HSub.hSub.{0, 0, 0} Aeneas.Std.U32 (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (Aeneas.Std.Result.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32)) (@Aeneas.Std.instHSubUScalarResult Aeneas.Std.UScalarTy.U32) fips205.W (Aeneas.Std.U32.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (@of_decide_eq_true (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U32)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U32)) (@id.{0} (@Eq.{1} Bool (@Decidable.decide (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U32)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U32))) Bool.true) (@Eq.refl.{1} Bool Bool.true))))) fun (i1 : Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} Aeneas.Std.U32 Aeneas.Std.U32 (@Aeneas.Std.Array.index_usize.{0} Aeneas.Std.U32 LEN msg i) fun (i2 : Aeneas.Std.U32) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) Aeneas.Std.U32 (@HSub.hSub.{0, 0, 0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) Aeneas.Std.U32 (Aeneas.Std.Result.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32)) (@Aeneas.Std.instHSubUScalarResult Aeneas.Std.UScalarTy.U32) i1 i2) fun (i3 : Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) Aeneas.Std.U32 (@HAdd.hAdd.{0, 0, 0} Aeneas.Std.U32 (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (Aeneas.Std.Result.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32)) (@Aeneas.Std.instHAddUScalarResult Aeneas.Std.UScalarTy.U32) csum i3) fun (csum1 : Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.Usize) Aeneas.Std.U32 (@HAdd.hAdd.{0, 0, 0} Aeneas.Std.Usize (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.Usize) (Aeneas.Std.Result.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.Usize)) (@Aeneas.Std.instHAddUScalarResult Aeneas.Std.UScalarTy.Usize) i (Aeneas.Std.Usize.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (@of_decide_eq_true (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.Usize)) (@id.{0} (@Eq.{1} Bool (@Decidable.decide (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalar
|
||
|
|
spec|fips205.wotsCsumFold.match_1|def|value=fun (motive : Aeneas.Std.U32 → Aeneas.Std.Usize → Nat → Sort u_1) (x : Aeneas.Std.U32) (x_1 : Aeneas.Std.Usize) (x_2 : Nat) (h_1 : (csum : Aeneas.Std.U32) → (x : Aeneas.Std.Usize) → motive csum x (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0)))) (h_2 : (csum : Aeneas.Std.U32) → (i : Aeneas.Std.Usize) → (s : Nat) → motive csum i (Nat.succ s)) => @Nat.casesOn.{u_1} (fun (x_3 : Nat) => motive x x_1 x_3) x_2 (h_1 x x_1) fun (n : Nat) => h_2 x x_1 n
|
||
|
|
spec|fips205.xmssFoldN|def|value=fun {HP N : Aeneas.Std.Usize} (idx : Aeneas.Std.U32) (pk_seed : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (auth : Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) HP) (x : fips205.types.Adrs) (x_1 : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (x_2 : Aeneas.Std.U32) (x_3 : Nat) => @Nat.brecOn.{1} (fun (x : Nat) => fips205.types.Adrs → Aeneas.Std.Array.{0} Aeneas.Std.U8 N → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N)) x_3 (@fips205.xmssFoldN._f HP N idx pk_seed auth) x x_1 x_2
|
||
|
|
spec|fips205.xmssFoldN._f|def|value=fun {HP N : Aeneas.Std.Usize} (idx : Aeneas.Std.U32) (pk_seed : Aeneas.Std.Slice.{0} Aeneas.Std.U8) (auth : Aeneas.Std.Array.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) HP) (x : Nat) (f : @Nat.below.{1} (fun (x : Nat) => fips205.types.Adrs → Aeneas.Std.Array.{0} Aeneas.Std.U8 N → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N)) x) (x_1 : fips205.types.Adrs) (x_2 : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (x_3 : Aeneas.Std.U32) => @fips205.xmssFoldN.match_1.{1} N (fun (x : fips205.types.Adrs) (x_4 : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (x_5 : Aeneas.Std.U32) (x_6 : Nat) => @Nat.below.{1} (fun (x : Nat) => fips205.types.Adrs → Aeneas.Std.Array.{0} Aeneas.Std.U8 N → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N)) x_6 → Aeneas.Std.Result.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N)) x_1 x_2 x_3 x (fun (x : fips205.types.Adrs) (node : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (x_4 : Aeneas.Std.U32) (x_5 : @Nat.below.{1} (fun (x : Nat) => fips205.types.Adrs → Aeneas.Std.Array.{0} Aeneas.Std.U8 N → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N)) (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0)))) => @Aeneas.Std.Result.ok.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) node) (fun (adrs : fips205.types.Adrs) (node : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (k : Aeneas.Std.U32) (s : Nat) (x : @Nat.below.{1} (fun (x : Nat) => fips205.types.Adrs → Aeneas.Std.Array.{0} Aeneas.Std.U8 N → Aeneas.Std.U32 → Aeneas.Std.Result.{0} (Aeneas.Std.Array.{0} Aeneas.Std.U8 N)) (Nat.succ s)) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (@HAdd.hAdd.{0, 0, 0} Aeneas.Std.U32 (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (Aeneas.Std.Result.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32)) (@Aeneas.Std.instHAddUScalarResult Aeneas.Std.UScalarTy.U32) k (Aeneas.Std.U32.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (@of_decide_eq_true (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U32)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U32)) (@id.{0} (@Eq.{1} Bool (@Decidable.decide (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U32)) (Nat.decLe (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.UScalar.cMax Aeneas.Std.UScalarTy.U32))) Bool.true) (@Eq.refl.{1} Bool Bool.true))))) fun (w : Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} fips205.types.Adrs (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (fips205.helpers.Adrs.set_tree_height adrs w) fun (adrs1 : fips205.types.Adrs) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (@HShiftRight.hShiftRight.{0, 0, 0} Aeneas.Std.U32 Aeneas.Std.U32 (Aeneas.Std.Result.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32)) (@Aeneas.Std.instHShiftRightUScalarResult Aeneas.Std.UScalarTy.U32 Aeneas.Std.UScalarTy.U32) idx k) fun (i1 : Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) => @Bind.bind.{0, 0} Aeneas.Std.Result.{0} Aeneas.Std.instBindResult.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (@Aeneas.Std.lift.{0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (@HAnd.hAnd.{0, 0, 0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.U32) (@Aeneas.Std.instHAndUScalar Aeneas.Std.UScalarTy.U32) i1 (Aeneas.Std.U32.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (@of_decide_eq_true (@LE.le.{0} Nat instLENat (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) (Aeneas.Std.
|
||
|
|
spec|fips205.xmssFoldN.match_1|def|value=fun {N : Aeneas.Std.Usize} (motive : fips205.types.Adrs → Aeneas.Std.Array.{0} Aeneas.Std.U8 N → Aeneas.Std.U32 → Nat → Sort u_1) (x : fips205.types.Adrs) (x_1 : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) (x_2 : Aeneas.Std.U32) (x_3 : Nat) (h_1 : (x : fips205.types.Adrs) → (node : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) → (x_4 : Aeneas.Std.U32) → motive x node x_4 (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0)))) (h_2 : (adrs : fips205.types.Adrs) → (node : Aeneas.Std.Array.{0} Aeneas.Std.U8 N) → (k : Aeneas.Std.U32) → (s : Nat) → motive adrs node k (Nat.succ s)) => @Nat.casesOn.{u_1} (fun (x_4 : Nat) => motive x x_1 x_2 x_4) x_3 (h_1 x x_1 x_2) fun (n : Nat) => h_2 x x_1 x_2 n
|