Skip to content

refactor: moving signature logic from ethlambda-types to ethlambda-crypto - #541

Merged
MegaRedHand merged 4 commits into
lambdaclass:mainfrom
Sahilgill24:refactor/signature-logic-port
Jul 29, 2026
Merged

refactor: moving signature logic from ethlambda-types to ethlambda-crypto#541
MegaRedHand merged 4 commits into
lambdaclass:mainfrom
Sahilgill24:refactor/signature-logic-port

Conversation

@Sahilgill24

@Sahilgill24 Sahilgill24 commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Description / Motivation

porting the lean-sig based signature logic from types crate to crypto crate as mentioned here

It is first of all a cleaner and more idiomatic approach and secondly ethlambda-types crate builds/compiles for the prover crate(zkVM prover), which also leads to dependency conflicts between leansig dependencies and the zkVM sdk dependencies being used. This port removes all leansig dependencies from the ethlambda-types

What Changed

  • added a new signature.rs file to the crypto crate along with a extension trait ValidatorPublicKeys with the same methods as before, it helps in avoiding cyclic dependencies and the call sites remain the same.
  • removed the older signature.rs from the types crate and moved the SIGNATURE_SIZE directly to the attestation.rs

Verification Checklist

  • Ran make fmt
  • Ran make lint (clippy with -D warnings)
  • Ran cargo test --workspace --release — all passing

@MegaRedHand MegaRedHand left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good. Left a suggestion

Comment thread crates/common/crypto/src/signature.rs Outdated
@Sahilgill24
Sahilgill24 marked this pull request as ready for review July 29, 2026 00:32
@greptile-apps

greptile-apps Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR relocates validator XMSS signature primitives from ethlambda-types to ethlambda-crypto.

  • Removes the leansig dependency and signature module from the shared types crate.
  • Updates blockchain, storage, binary, and test-fixture consumers to use the new module path.
  • Keeps the fixed 2536-byte SSZ signature representation in the attestation domain model.
  • Adds the crypto dependency to storage for its in-memory signature buffers.

Confidence Score: 5/5

The PR appears safe to merge, with the signature relocation preserving existing decoding, signing, verification, and SSZ wire behavior.

All affected workspace consumers use the relocated crypto module and declare the required dependency, while the shared types crate retains only the fixed wire representation and no accepted functional or security failure remains.

Important Files Changed

Filename Overview
crates/common/crypto/src/signature.rs Relocates the existing leansig-backed validator key and signature implementation into the crypto crate without changing its behavior.
crates/common/types/src/attestation.rs Keeps the fixed XMSS wire-size constant beside the SSZ XmssSignature type, preserving its encoding.
crates/common/types/src/state.rs Removes crypto-returning validator pubkey helpers, with affected callers replaced by equivalent direct decoding.
crates/blockchain/src/store.rs Updates signature imports and public-key decoding to the relocated crypto API without changing validation behavior.
crates/storage/src/store.rs Imports buffered validator signatures from the crypto crate while retaining the existing storage representation and behavior.
crates/storage/Cargo.toml Adds the direct crypto dependency required by storage's signature buffer implementation.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart LR
  Types["ethlambda-types<br/>SSZ/domain types"]
  Crypto["ethlambda-crypto<br/>XMSS keys and signatures"]
  Storage["ethlambda-storage"]
  Blockchain["ethlambda-blockchain"]
  Binary["ethlambda binary"]

  Crypto --> Types
  Storage --> Types
  Storage --> Crypto
  Blockchain --> Types
  Blockchain --> Crypto
  Blockchain --> Storage
  Binary --> Crypto
  Binary --> Blockchain
Loading

Reviews (1): Last reviewed commit: "refactor: inline validator public key ca..." | Re-trigger Greptile

@MegaRedHand MegaRedHand left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great work! Thanks for your contribution!

@MegaRedHand
MegaRedHand merged commit 97485de into lambdaclass:main Jul 29, 2026
8 checks passed
MegaRedHand added a commit that referenced this pull request Jul 29, 2026
Resolves the overlap with #541, which moved the signature primitives out of
`ethlambda-types` and into `ethlambda-crypto` while this branch was rewriting
those same primitives for leanVM's internalized XMSS.

The two wire-size constants cannot follow `signature.rs` into
`ethlambda-crypto`: `types::attestation::XmssSignature` and
`types::state::ValidatorPubkeyBytes` are defined in terms of them, and
`ethlambda-crypto` already depends on `ethlambda-types`. #541 hit the same
constraint and hardcoded `SIGNATURE_SIZE` in `types`. Keep that placement, but
source both from leanVM's xmss crate so they track the scheme parameters:
main's literal 2536 is the old leanSig size and is wrong for leanVM's wire
format.

`ethlambda-types` therefore keeps a narrow `xmss` dependency for the two
constants only, and `ssz`/`postcard` move to `ethlambda-crypto` along with the
signing code that needed them.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants