Add DeriveECDHKeyMaterial tests: P-256 raw secret, Concat KDF SHA-256, missing key error
This commit is contained in:
parent
550d0b7ec6
commit
e08d401956
66
tests/operations/tests/DeriveECDHKeyMaterial.mjs
Normal file
66
tests/operations/tests/DeriveECDHKeyMaterial.mjs
Normal file
@ -0,0 +1,66 @@
|
||||
/**
|
||||
* DeriveECDHKeyMaterial tests.
|
||||
*
|
||||
* Test vectors generated with Node.js WebCrypto (crypto.subtle) and cross-verified
|
||||
* in both directions (Alice→Bob and Bob→Alice 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"]
|
||||
}
|
||||
]
|
||||
},
|
||||
]);
|
||||
Loading…
x
Reference in New Issue
Block a user