Skip to content

fix: ecDeriveBits returns full backing ArrayBuffer instead of truncat…#947

Merged
boorad merged 2 commits intomargelo:mainfrom
reznik99:fix/ecdh-derive-bits-subarray-buffer
Feb 17, 2026
Merged

fix: ecDeriveBits returns full backing ArrayBuffer instead of truncat…#947
boorad merged 2 commits intomargelo:mainfrom
reznik99:fix/ecdh-derive-bits-subarray-buffer

Conversation

@reznik99
Copy link
Contributor

TypedArray.subarray() creates a view, so .buffer returns the original full-size ArrayBuffer (e.g. 48 bytes for P-384). When deriveKey requests 256-bit AES-GCM, importKey receives 384 bits and throws 'Invalid AES key length'.

Use ArrayBuffer.prototype.slice() to create a new ArrayBuffer with only the requested bytes.

Add P-384 and P-521 regression tests for ECDH deriveKey to AES-GCM-256.

Closes #946

reznik99 and others added 2 commits February 18, 2026 00:36
…ed slice

TypedArray.subarray() creates a view, so .buffer returns the original
full-size ArrayBuffer (e.g. 48 bytes for P-384). When deriveKey requests
256-bit AES-GCM, importKey receives 384 bits and throws 'Invalid AES
key length'.

Use ArrayBuffer.prototype.slice() to create a new ArrayBuffer with only
the requested bytes.

Add P-384 and P-521 regression tests for ECDH deriveKey to AES-GCM-256.

Closes margelo#946
- Consolidate P-256/P-384/P-521 deriveKey tests into parameterized loop
- Add AES-GCM-128 deriveKey tests for P-384 and P-521
- Add AES-CBC-256 deriveKey test for P-384
- Add deriveBits truncation tests verifying correct prefix extraction
  when requesting fewer bits than the curve's shared secret size
- All tests exercise the margelo#946 regression: larger secrets must be
  properly truncated when deriving shorter keys
Copy link
Collaborator

@boorad boorad left a comment

Choose a reason for hiding this comment

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

thanks for this! 🚀

@boorad boorad merged commit 7c1d6ba into margelo:main Feb 17, 2026
6 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.

🐛 subtle.deriveKey with ECDH P-384 to AES-GCM-256 throws "Invalid AES key length"

2 participants

Comments