Add DeriveECDHKeyMaterial tests: P-256 raw secret, Concat KDF SHA-256, missing key error

This commit is contained in:
Jacob Marks 2026-05-16 23:24:20 -04:00
parent 550d0b7ec6
commit e08d401956

View File

@ -0,0 +1,66 @@
/**
* DeriveECDHKeyMaterial tests.
*
* Test vectors generated with Node.js WebCrypto (crypto.subtle) and cross-verified
* in both directions (AliceBob and BobAlice produce identical shared secrets).
*
* @author Jacob Marks
* @copyright Crown Copyright 2024
* @license Apache-2.0
*/
import TestRegister from "../../lib/TestRegister.mjs";
// Alice's P-256 private key (PKCS#8 PEM)
const ALICE_PRIV_P256 = `-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg4HBsMvgcOvEQBrYJ
dEXulke/dh5vYiOvfI41AToqfbWhRANCAAQgZgScW2pSpRRTOADLPL5D+8TF6xXx
x9GDOE8V1xYj7arujDYH5935uCdVxXa84lUEw35+afHuh0bDmBDxolmx
-----END PRIVATE KEY-----`;
// Bob's P-256 public key (SPKI PEM)
const BOB_PUB_P256 = `-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEa+FXJzzko0OZ9DcOaXpLzAkSt7bE
XXVKQqYfsmuelH6QgH86dMR04/bvnhl4bF7YKbMWDlPRHs9haSeR/PhFNg==
-----END PUBLIC KEY-----`;
// Shared secret = x-coordinate of ECDH(Alice_priv, Bob_pub)
const SHARED_SECRET_HEX = "4E030938FB1958545CCEFC98007DFB5F5780497161EB92D004391AF41D431ACF";
// Concat KDF SHA-256 over the shared secret, 32 bytes output, no shared info
const KDF_SHA256_32B_HEX = "61F4121E618428606D52ADC4626990A34BB59C14C4D14C3DD3AF5D082475FA85";
TestRegister.addTests([
{
name: "Derive ECDH Key Material: P-256 raw shared secret (None KDF)",
input: ALICE_PRIV_P256,
expectedOutput: SHARED_SECRET_HEX,
recipeConfig: [
{
"op": "Derive ECDH Key Material",
"args": ["PEM", "P-256", "PEM", BOB_PUB_P256, "None", 32, "", "Hex"]
}
]
},
{
name: "Derive ECDH Key Material: P-256 Concat KDF SHA-256 (32 bytes, no shared info)",
input: ALICE_PRIV_P256,
expectedOutput: KDF_SHA256_32B_HEX,
recipeConfig: [
{
"op": "Derive ECDH Key Material",
"args": ["PEM", "P-256", "PEM", BOB_PUB_P256, "Concat KDF SHA-256", 32, "", "Hex"]
}
]
},
{
name: "Derive ECDH Key Material: missing peer public key returns error",
input: ALICE_PRIV_P256,
expectedOutput: "Missing key input.",
recipeConfig: [
{
"op": "Derive ECDH Key Material",
"args": ["PEM", "P-256", "PEM", "", "None", 32, "", "Hex"]
}
]
},
]);