Skip to content

feat: add NATS nkey (ed25519) JWT support#423

Open
johnweldon wants to merge 2 commits intomike-engel:mainfrom
johnweldon:jw4/nkeys
Open

feat: add NATS nkey (ed25519) JWT support#423
johnweldon wants to merge 2 commits intomike-engel:mainfrom
johnweldon:jw4/nkeys

Conversation

@johnweldon
Copy link

Summary

Add support for encoding and decoding JWTs using NATS nkeys (ed25519-based
keys with base32 encoding). This enables full compatibility with NATS
authentication tokens and other nkey-signed JWTs.

Features:

  • Encode JWTs using nkey seeds with EdDSA algorithm
  • Decode/verify JWTs using nkey seeds or public keys
  • Automatic normalization of NATS JWTs ("ed25519-nkey" → "EdDSA")
  • Support for both string and file-based nkey inputs

Implementation:

  • Detect nkey format by prefix (S/P for seeds, A/U/O/N/C/M/V/X for public keys)
  • Convert nkeys to raw Ed25519 bytes via nkeys crate
  • Transform to PKCS#8/SPKI PEM format for jsonwebtoken compatibility
  • Normalize NATS JWT headers to enable parsing by jsonwebtoken

Dependencies:

  • nkeys 0.4: NATS nkey format handling
  • ed25519-dalek 2.2 (pkcs8 feature): Ed25519 cryptographic operations
  • base64 0.21: JWT header manipulation for normalization

Testing:

  • 4 test nkey files (user/account seeds and public keys)
  • 7 new integration tests covering encoding, decoding, and error cases
  • All 62 tests passing

This allows jwt-cli to work seamlessly with NATS ecosystem JWTs and
provides a convenient way to handle ed25519-nkey authentication tokens.

Preflight checklist

  • Code formatted rustfmt ($ cargo fmt)
  • Code linter check with clippy ($ cargo clippy)
  • Relevant tests added
  • Any new documentation added

  Add support for encoding and decoding JWTs using NATS nkeys (ed25519-based
  keys with base32 encoding). This enables full compatibility with NATS
  authentication tokens and other nkey-signed JWTs.

  Features:
  - Encode JWTs using nkey seeds with EdDSA algorithm
  - Decode/verify JWTs using nkey seeds or public keys
  - Automatic normalization of NATS JWTs ("ed25519-nkey" → "EdDSA")
  - Support for both string and file-based nkey inputs

  Implementation:
  - Detect nkey format by prefix (S/P for seeds, A/U/O/N/C/M/V/X for public keys)
  - Convert nkeys to raw Ed25519 bytes via nkeys crate
  - Transform to PKCS#8/SPKI PEM format for jsonwebtoken compatibility
  - Normalize NATS JWT headers to enable parsing by jsonwebtoken

  Dependencies:
  - nkeys 0.4: NATS nkey format handling
  - ed25519-dalek 2.2 (pkcs8 feature): Ed25519 cryptographic operations
  - base64 0.21: JWT header manipulation for normalization

  Testing:
  - 4 test nkey files (user/account seeds and public keys)
  - 7 new integration tests covering encoding, decoding, and error cases
  - All 62 tests passing

  This allows jwt-cli to work seamlessly with NATS ecosystem JWTs and
  provides a convenient way to handle ed25519-nkey authentication tokens.

Signed-off-by: John Weldon <johnweldon4@gmail.com>
Signed-off-by: John Weldon <johnweldon4@gmail.com>
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.

1 participant