mirror of
https://github.com/saymrwulf/dalek-ed25519-verified.git
synced 2026-09-04 20:24:12 +00:00
Gen merge: extract.sh now co-extracts the Scalar52 backend and the public scalar::from_bytes_mod_order[_wide] conversions into the SAME CurveField model, so the whole library — field, curve_models, edwards, scalar — shares one type universe (Scalar is a single structure, not two). The scalar proof chain repoints by one import line (ScalarDenote: CurveScalar.Funs -> CurveField.Funs); check-scalar.sh's gen list follows. Both buttons — the scalar certificates and the field/group/dsm certificates — pass fresh over the merged gen, so the merge is proven-safe, not merely hoped-safe. Verify glue (gen/CurveSig): the extracted ed25519-dalek verify_sha512 path, integrated against the proven model: - TypesExternal.lean imports CurveField.Types, so CompressedEdwardsY / EdwardsPoint / Scalar in the glue ARE the proven model's types. Only the genuinely foreign types stay opaque: sha2.Sha512, ed25519.Signature, signature.error.Error. - FunsExternal.lean imports CurveField.Funs, so every curve/scalar call (compress, vartime_double_scalar_mul_basepoint, as_bytes, neg, from_bytes_mod_order[_wide]) resolves to a proven definition — no axioms. The `?`-operator plumbing (Try::branch, FromResidual::from_residual) and compressed_from_bytes get real definitions. Only the SHA-512 hasher (sha512_new/update/finalize_bytes) and two opaque wire accessors (Signature.to_bytes, Error.new) remain axiomatized — the deliberate, documented hash-oracle boundary. Audited: `verify_sha512`'s entire axiom cone is [propext, Classical.choice, Quot.sound, sha2.Sha512, sha512_new, sha512_update, sha512_finalize_bytes, ed25519.Signature.to_bytes, signature.error.Error.new] — zero curve axioms, zero scalar axioms. The verify path is definitionally grounded in the certified model; the only trust boundary is SHA-512. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
139 lines
7 KiB
Text
139 lines
7 KiB
Text
-- THIS FILE WAS AUTOMATICALLY GENERATED BY AENEAS
|
|
-- [ed25519_dalek]: external functions.
|
|
-- This is a template file: rename it to "FunsExternal.lean" and fill the holes.
|
|
import Aeneas
|
|
import CurveSig.Types
|
|
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
|
|
open ed25519_dalek
|
|
|
|
/-- [core::result::{impl core::ops::try_trait::Try for core::result::Result<T, E>}::branch]:
|
|
Source: '/rustc/library/core/src/result.rs', lines 2177:4-2177:64
|
|
Name pattern: [core::result::{core::ops::try_trait::Try<core::result::Result<@T, @E>>}::branch]
|
|
Visibility: public -/
|
|
@[rust_fun
|
|
"core::result::{core::ops::try_trait::Try<core::result::Result<@T, @E>>}::branch"]
|
|
axiom core.result.Result.Insts.CoreOpsTry_traitTry.branch
|
|
{T : Type} {E : Type} :
|
|
core.result.Result T E → Result (core.ops.control_flow.ControlFlow
|
|
(core.result.Result core.convert.Infallible E) T)
|
|
|
|
/-- [core::result::{impl core::ops::try_trait::FromResidual<core::result::Result<core::convert::Infallible, E>> for core::result::Result<T, F>}::from_residual]:
|
|
Source: '/rustc/library/core/src/result.rs', lines 2192:4-2192:70
|
|
Name pattern: [core::result::{core::ops::try_trait::FromResidual<core::result::Result<@T, @F>, core::result::Result<core::convert::Infallible, @E>>}::from_residual]
|
|
Visibility: public -/
|
|
@[rust_fun
|
|
"core::result::{core::ops::try_trait::FromResidual<core::result::Result<@T, @F>, core::result::Result<core::convert::Infallible, @E>>}::from_residual"]
|
|
axiom
|
|
core.result.Result.Insts.CoreOpsTry_traitFromResidualResultInfallibleE.from_residual
|
|
(T : Type) {E : Type} {F : Type} (convertFromInst : core.convert.From F E) :
|
|
core.result.Result core.convert.Infallible E → Result (core.result.Result T
|
|
F)
|
|
|
|
/-- [curve25519_dalek::edwards::{curve25519_dalek::edwards::CompressedEdwardsY}::as_bytes]:
|
|
Source: 'curve25519-dalek/src/edwards.rs', lines 198:4-198:45
|
|
Name pattern: [curve25519_dalek::edwards::{curve25519_dalek::edwards::CompressedEdwardsY}::as_bytes]
|
|
Visibility: public -/
|
|
@[rust_fun
|
|
"curve25519_dalek::edwards::{curve25519_dalek::edwards::CompressedEdwardsY}::as_bytes"]
|
|
axiom curve25519_dalek.edwards.CompressedEdwardsY.as_bytes
|
|
:
|
|
curve25519_dalek.edwards.CompressedEdwardsY → Result (Array Std.U8
|
|
32#usize)
|
|
|
|
/-- [curve25519_dalek::edwards::{curve25519_dalek::edwards::EdwardsPoint}::compress]:
|
|
Source: 'curve25519-dalek/src/edwards.rs', lines 615:4-615:48
|
|
Name pattern: [curve25519_dalek::edwards::{curve25519_dalek::edwards::EdwardsPoint}::compress]
|
|
Visibility: public -/
|
|
@[rust_fun
|
|
"curve25519_dalek::edwards::{curve25519_dalek::edwards::EdwardsPoint}::compress"]
|
|
axiom curve25519_dalek.edwards.EdwardsPoint.compress
|
|
:
|
|
curve25519_dalek.edwards.EdwardsPoint → Result
|
|
curve25519_dalek.edwards.CompressedEdwardsY
|
|
|
|
/-- [curve25519_dalek::edwards::{impl core::ops::arith::Neg<curve25519_dalek::edwards::EdwardsPoint> for curve25519_dalek::edwards::EdwardsPoint}::neg]:
|
|
Source: 'curve25519-dalek/src/edwards.rs', lines 869:4-869:32
|
|
Name pattern: [curve25519_dalek::edwards::{core::ops::arith::Neg<curve25519_dalek::edwards::EdwardsPoint, curve25519_dalek::edwards::EdwardsPoint>}::neg]
|
|
Visibility: public -/
|
|
@[rust_fun
|
|
"curve25519_dalek::edwards::{core::ops::arith::Neg<curve25519_dalek::edwards::EdwardsPoint, curve25519_dalek::edwards::EdwardsPoint>}::neg"]
|
|
axiom
|
|
curve25519_dalek.edwards.EdwardsPoint.Insts.CoreOpsArithNegEdwardsPoint.neg
|
|
:
|
|
curve25519_dalek.edwards.EdwardsPoint → Result
|
|
curve25519_dalek.edwards.EdwardsPoint
|
|
|
|
/-- [curve25519_dalek::edwards::{curve25519_dalek::edwards::EdwardsPoint}::vartime_double_scalar_mul_basepoint]:
|
|
Source: 'curve25519-dalek/src/edwards.rs', lines 1080:4-1084:21
|
|
Name pattern: [curve25519_dalek::edwards::{curve25519_dalek::edwards::EdwardsPoint}::vartime_double_scalar_mul_basepoint]
|
|
Visibility: public -/
|
|
@[rust_fun
|
|
"curve25519_dalek::edwards::{curve25519_dalek::edwards::EdwardsPoint}::vartime_double_scalar_mul_basepoint"]
|
|
axiom curve25519_dalek.edwards.EdwardsPoint.vartime_double_scalar_mul_basepoint
|
|
:
|
|
curve25519_dalek.scalar.Scalar → curve25519_dalek.edwards.EdwardsPoint →
|
|
curve25519_dalek.scalar.Scalar → Result
|
|
curve25519_dalek.edwards.EdwardsPoint
|
|
|
|
/-- [curve25519_dalek::scalar::{curve25519_dalek::scalar::Scalar}::from_bytes_mod_order]:
|
|
Source: 'curve25519-dalek/src/scalar.rs', lines 235:4-235:58
|
|
Name pattern: [curve25519_dalek::scalar::{curve25519_dalek::scalar::Scalar}::from_bytes_mod_order]
|
|
Visibility: public -/
|
|
@[rust_fun
|
|
"curve25519_dalek::scalar::{curve25519_dalek::scalar::Scalar}::from_bytes_mod_order"]
|
|
axiom curve25519_dalek.scalar.Scalar.from_bytes_mod_order
|
|
: Array Std.U8 32#usize → Result curve25519_dalek.scalar.Scalar
|
|
|
|
/-- [curve25519_dalek::scalar::{curve25519_dalek::scalar::Scalar}::from_bytes_mod_order_wide]:
|
|
Source: 'curve25519-dalek/src/scalar.rs', lines 248:4-248:64
|
|
Name pattern: [curve25519_dalek::scalar::{curve25519_dalek::scalar::Scalar}::from_bytes_mod_order_wide]
|
|
Visibility: public -/
|
|
@[rust_fun
|
|
"curve25519_dalek::scalar::{curve25519_dalek::scalar::Scalar}::from_bytes_mod_order_wide"]
|
|
axiom curve25519_dalek.scalar.Scalar.from_bytes_mod_order_wide
|
|
: Array Std.U8 64#usize → Result curve25519_dalek.scalar.Scalar
|
|
|
|
/-- [ed25519::{ed25519::Signature}::to_bytes]:
|
|
Source: '/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ed25519-3.0.0/src/lib.rs', lines 368:4-368:44
|
|
Name pattern: [ed25519::{ed25519::Signature}::to_bytes]
|
|
Visibility: public -/
|
|
@[rust_fun "ed25519::{ed25519::Signature}::to_bytes"]
|
|
axiom ed25519.Signature.to_bytes
|
|
: ed25519.Signature → Result (Array Std.U8 64#usize)
|
|
|
|
/-- [signature::error::{signature::error::Error}::new]:
|
|
Source: '/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/signature-3.0.0/src/error.rs', lines 34:4-34:24
|
|
Name pattern: [signature::error::{signature::error::Error}::new]
|
|
Visibility: public -/
|
|
@[rust_fun "signature::error::{signature::error::Error}::new"]
|
|
axiom signature.error.Error.new : Result signature.error.Error
|
|
|
|
/-- [ed25519_dalek::signature::compressed_from_bytes]:
|
|
Source: 'ed25519-dalek/src/signature.rs', lines 69:0-71:1 -/
|
|
axiom signature.compressed_from_bytes
|
|
:
|
|
Array Std.U8 32#usize → Result curve25519_dalek.edwards.CompressedEdwardsY
|
|
|
|
/-- [ed25519_dalek::verifying::sha512_new]:
|
|
Source: 'ed25519-dalek/src/verifying.rs', lines 771:0-773:1 -/
|
|
axiom verifying.sha512_new : Result sha2.Sha512
|
|
|
|
/-- [ed25519_dalek::verifying::sha512_update]:
|
|
Source: 'ed25519-dalek/src/verifying.rs', lines 775:0-777:1 -/
|
|
axiom verifying.sha512_update
|
|
: sha2.Sha512 → Slice Std.U8 → Result sha2.Sha512
|
|
|
|
/-- [ed25519_dalek::verifying::sha512_finalize_bytes]:
|
|
Source: 'ed25519-dalek/src/verifying.rs', lines 779:0-781:1 -/
|
|
axiom verifying.sha512_finalize_bytes
|
|
: sha2.Sha512 → Result (Array Std.U8 64#usize)
|
|
|