Skip to content

Add SLH-DSA - #6

Merged
mikelodder7 merged 1 commit into
mainfrom
slh-dsa
Feb 20, 2026
Merged

Add SLH-DSA#6
mikelodder7 merged 1 commit into
mainfrom
slh-dsa

Conversation

@mikelodder7

@mikelodder7 mikelodder7 commented Feb 20, 2026

Copy link
Copy Markdown
Collaborator

This exposes the SLH-DSA signature methods and also adds the keypair_from_seed similar to how its been done for ml-dsa and falcon. @shemnon requested this signature type. These changes are needed for downstream bedrock

Signed-off-by: Mike Lodder <mikelodder@tectonic.xyz>
@greptile-apps

greptile-apps Bot commented Feb 20, 2026

Copy link
Copy Markdown

Greptile Summary

Added keypair_from_seed functionality to all 12 SLH-DSA variants, enabling deterministic keypair generation from seed material.

Key changes:

  • Exposed keypair_from_seed API in sig_slh_dsa.h for all variants (SHA2 and SHAKE, 128/192/256-bit, small/fast)
  • Implemented functions consistently across all wrappers using slh_keygen_internal
  • Added seed length validation requiring 3 * n bytes (SK.seed || SK.prf || PK.seed)
  • Properly wired function pointers in *_new() constructors (previously NULL)
  • Imported slh_param.h header for parameter access

Implementation pattern:
All implementations follow identical structure - validate seed length against 3 * prm->n, then call slh_keygen_internal with properly offset seed components. Matches existing patterns in ML-DSA and Falcon implementations.

Confidence Score: 5/5

  • This PR is safe to merge with minimal risk
  • The implementation is consistent across all 12 variants, follows established patterns from ML-DSA and Falcon, includes proper seed validation, and correctly uses the underlying slh_keygen_internal function. The changes are straightforward API additions with no modifications to existing logic.
  • No files require special attention

Important Files Changed

Filename Overview
src/sig/slh_dsa/sig_slh_dsa.h Added keypair_from_seed function declarations for all 12 SLH-DSA variants
src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_128s.c Implemented keypair_from_seed with seed validation for SHA2-128s variant
src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_128f.c Implemented keypair_from_seed with seed validation for SHA2-128f variant
src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_192s.c Implemented keypair_from_seed with seed validation for SHA2-192s variant
src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_192f.c Implemented keypair_from_seed with seed validation for SHA2-192f variant
src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_256s.c Implemented keypair_from_seed with seed validation for SHA2-256s variant
src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_sha2_256f.c Implemented keypair_from_seed with seed validation for SHA2-256f variant
src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_128s.c Implemented keypair_from_seed with seed validation for SHAKE-128s variant
src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_128f.c Implemented keypair_from_seed with seed validation for SHAKE-128f variant
src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_192s.c Implemented keypair_from_seed with seed validation for SHAKE-192s variant
src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_192f.c Implemented keypair_from_seed with seed validation for SHAKE-192f variant
src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_256s.c Implemented keypair_from_seed with seed validation for SHAKE-256s variant
src/sig/slh_dsa/wrappers/pure/slh_dsa_pure_shake_256f.c Implemented keypair_from_seed with seed validation for SHAKE-256f variant

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[User calls keypair_from_seed] --> B{Validate seed_len}
    B -->|seed_len != 3*n| C[Return OQS_ERROR]
    B -->|seed_len == 3*n| D[Parse seed into components]
    D --> E[SK.seed = seed<br/>0 to n bytes]
    D --> F[SK.prf = seed + n<br/>n to 2n bytes]
    D --> G[PK.seed = seed + 2n<br/>2n to 3n bytes]
    E --> H[slh_keygen_internal]
    F --> H
    G --> H
    H --> I[Generate keypair deterministically]
    I --> J[Return OQS_SUCCESS]
Loading

Last reviewed commit: 722b548

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

13 files reviewed, no comments

Edit Code Review Agent Settings | Greptile

return OQS_ERROR;
}
return slh_keygen_internal(secret_key, public_key,
seed, seed + prm->n, seed + 2 * prm->n, prm);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

What if we have variables for seed, seed + prm->n, seed + 2 * prm->n? Maybe its not so idiomatic but improves readability.

@mikelodder7
mikelodder7 merged commit be2d35a into main Feb 20, 2026
11 checks passed
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.

2 participants