mirror of
https://github.com/gchq/CyberChef.git
synced 2025-04-25 09:16:17 -04:00
Merge branch 'master' into time-difference
This commit is contained in:
commit
ba435d17b5
72 changed files with 3340 additions and 477 deletions
|
@ -59,6 +59,7 @@ import "./tests/Crypt.mjs";
|
|||
import "./tests/CSV.mjs";
|
||||
import "./tests/DateTime.mjs";
|
||||
import "./tests/DefangIP.mjs";
|
||||
import "./tests/ECDSA.mjs";
|
||||
import "./tests/ELFInfo.mjs";
|
||||
import "./tests/Enigma.mjs";
|
||||
import "./tests/ExtractEmailAddresses.mjs";
|
||||
|
@ -83,12 +84,13 @@ import "./tests/HKDF.mjs";
|
|||
import "./tests/Image.mjs";
|
||||
import "./tests/IndexOfCoincidence.mjs";
|
||||
import "./tests/JA3Fingerprint.mjs";
|
||||
import "./tests/JA4Fingerprint.mjs";
|
||||
import "./tests/JA4.mjs";
|
||||
import "./tests/JA3SFingerprint.mjs";
|
||||
import "./tests/JSONBeautify.mjs";
|
||||
import "./tests/JSONMinify.mjs";
|
||||
import "./tests/JSONtoCSV.mjs";
|
||||
import "./tests/Jump.mjs";
|
||||
import "./tests/JWK.mjs";
|
||||
import "./tests/JWTDecode.mjs";
|
||||
import "./tests/JWTSign.mjs";
|
||||
import "./tests/JWTVerify.mjs";
|
||||
|
@ -120,6 +122,8 @@ import "./tests/PGP.mjs";
|
|||
import "./tests/PHP.mjs";
|
||||
import "./tests/PowerSet.mjs";
|
||||
import "./tests/Protobuf.mjs";
|
||||
import "./tests/PubKeyFromCert.mjs";
|
||||
import "./tests/PubKeyFromPrivKey.mjs";
|
||||
import "./tests/Rabbit.mjs";
|
||||
import "./tests/RAKE.mjs";
|
||||
import "./tests/Regex.mjs";
|
||||
|
@ -149,6 +153,7 @@ import "./tests/UnescapeString.mjs";
|
|||
import "./tests/Unicode.mjs";
|
||||
import "./tests/YARA.mjs";
|
||||
import "./tests/ParseCSR.mjs";
|
||||
import "./tests/XXTEA.mjs";
|
||||
|
||||
const testStatus = {
|
||||
allTestsPassing: true,
|
||||
|
|
464
tests/operations/tests/ECDSA.mjs
Normal file
464
tests/operations/tests/ECDSA.mjs
Normal file
|
@ -0,0 +1,464 @@
|
|||
/**
|
||||
* ECDSA tests.
|
||||
*
|
||||
* @author cplussharp
|
||||
* @copyright Crown Copyright 2021
|
||||
* @license Apache-2.0
|
||||
*/
|
||||
import TestRegister from "../../lib/TestRegister.mjs";
|
||||
import { ASCII_TEXT } from "../../samples/Ciphers.mjs";
|
||||
|
||||
const P256 = {
|
||||
// openssl ecparam -name prime256v1 -genkey -noout -out p256.priv.key
|
||||
privateKeyPkcs1: `-----BEGIN EC PRIVATE KEY-----
|
||||
MHcCAQEEINtTjwUkgfAiSwqgcGAXWyE0ueIW6n2k395dmQZ3vGr4oAoGCCqGSM49
|
||||
AwEHoUQDQgAEDUc8A0EDNKoCYIPWMHz1yUzqE5mJgusgcAE8H6810fkJ8ZmTNiCC
|
||||
a6sLgR2vD1VNh2diirWgKPH4PVMKav5e6Q==
|
||||
-----END EC PRIVATE KEY-----`,
|
||||
privateKeyPkcs8: `-----BEGIN PRIVATE KEY-----
|
||||
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg21OPBSSB8CJLCqBw
|
||||
YBdbITS54hbqfaTf3l2ZBne8avihRANCAAQNRzwDQQM0qgJgg9YwfPXJTOoTmYmC
|
||||
6yBwATwfrzXR+QnxmZM2IIJrqwuBHa8PVU2HZ2KKtaAo8fg9Uwpq/l7p
|
||||
-----END PRIVATE KEY-----`,
|
||||
|
||||
// openssl ec -in p256.priv.key -pubout -out p256.pub.key
|
||||
publicKey: `-----BEGIN PUBLIC KEY-----
|
||||
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEDUc8A0EDNKoCYIPWMHz1yUzqE5mJ
|
||||
gusgcAE8H6810fkJ8ZmTNiCCa6sLgR2vD1VNh2diirWgKPH4PVMKav5e6Q==
|
||||
-----END PUBLIC KEY-----`,
|
||||
|
||||
signature: {
|
||||
sha256: {
|
||||
asn1: "3046022100e06905608a2fa7dbda9e284c2a7959dfb68fb527a5f003b2d7975ff135145127022100b6baa253793334f8b93ea1dd622bc600124d8090babd807efe3f77b8b324388d",
|
||||
p1363: "e06905608a2fa7dbda9e284c2a7959dfb68fb527a5f003b2d7975ff135145127b6baa253793334f8b93ea1dd622bc600124d8090babd807efe3f77b8b324388d",
|
||||
jws: "4GkFYIovp9vanihMKnlZ37aPtSel8AOy15df8TUUUSe2uqJTeTM0-Lk-od1iK8YAEk2AkLq9gH7-P3e4syQ4jQ",
|
||||
json: `{"r":"00e06905608a2fa7dbda9e284c2a7959dfb68fb527a5f003b2d7975ff135145127","s":"00b6baa253793334f8b93ea1dd622bc600124d8090babd807efe3f77b8b324388d"}`
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// openssl pkcs8 -topk8 -in p256.priv.key -out p256.enc-priv.key -v2 des3 -v2prf hmacWithSHA1 -passout pass:Test1234
|
||||
/* const PEM_PRIV_P256_ENCRYPTED_PASS = "Test1234";
|
||||
const PEM_PRIV_P256_ENCRYPTED = `-----BEGIN ENCRYPTED PRIVATE KEY-----
|
||||
MIHsMFcGCSqGSIb3DQEFDTBKMCkGCSqGSIb3DQEFDDAcBAg+4ckqI9Q9ZAICCAAw
|
||||
DAYIKoZIhvcNAgkFADAdBglghkgBZQMEASoEEOnMUW15Hn/ub0OcCCj9lksEgZCk
|
||||
kxaK4d430lZHovcA4ZeKTt94QcfjnIHRk65aZt93l17l52pv6n/srs3aRo/n5RV+
|
||||
wZ5sTLF0925ZQWJB5cIhzc8KQIvguGCX1znLQJJaRHyYOUXIN77AKEfALKAinBit
|
||||
25paDnbXAqGn1CR3UwFWUZZW+c3UEhWhmpghQpS1tIl0KI6IAvnrGIdw2kKIouo=
|
||||
-----END ENCRYPTED PRIVATE KEY-----`;*/
|
||||
|
||||
const P384 = {
|
||||
privateKeyPkcs8: `-----BEGIN PRIVATE KEY-----
|
||||
MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDAYo22xn2kZjN8MInom
|
||||
NDsgD/zhpUwnCYch634jUgO59fN9m2lR5ekaI1XABHz39rihZANiAAQwXoCsPOLv
|
||||
Nn2STUs/hpL41CQveSL3WUmJ4QdtD7UFCl1mBO6ME0xSUgIQTUNkHt5k9CpOq3x9
|
||||
r+LG5+GcisoLn7R54R+bRoGp/p1ZBeuBXoCgthvs+RFoT3OewUmA8oQ=
|
||||
-----END PRIVATE KEY-----`,
|
||||
publicKey: `-----BEGIN PUBLIC KEY-----
|
||||
MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEMF6ArDzi7zZ9kk1LP4aS+NQkL3ki91lJ
|
||||
ieEHbQ+1BQpdZgTujBNMUlICEE1DZB7eZPQqTqt8fa/ixufhnIrKC5+0eeEfm0aB
|
||||
qf6dWQXrgV6AoLYb7PkRaE9znsFJgPKE
|
||||
-----END PUBLIC KEY-----`
|
||||
};
|
||||
|
||||
const P521 = {
|
||||
privateKeyPkcs8: `-----BEGIN PRIVATE KEY-----
|
||||
MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIAifBaJDqNwOtKgThc
|
||||
FU34GzPQ73ubOQg9dnighpVGwA3b/KwCifimCNKDmKnXJaE04mEcxg8yzcFKausF
|
||||
5I8o206hgYkDgYYABAGwpkwrBBlZOdx4u9mxqYxJvtzAHaFFAzl21WQVbAjyrqXe
|
||||
nFPMkhbFpEEWr1ualPYKQkHe14AX33iU3fQ9MlBkgAAripsPbiKggAaog74cUERo
|
||||
qbrUFZwMbptGgovpE6pU93h7A1wb3Vtw9DZQCgiNbwzMbdsft+p2RJ8iSxWEC6Gd
|
||||
mw==
|
||||
-----END PRIVATE KEY-----`,
|
||||
publicKey: `-----BEGIN PUBLIC KEY-----
|
||||
MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBsKZMKwQZWTnceLvZsamMSb7cwB2h
|
||||
RQM5dtVkFWwI8q6l3pxTzJIWxaRBFq9bmpT2CkJB3teAF994lN30PTJQZIAAK4qb
|
||||
D24ioIAGqIO+HFBEaKm61BWcDG6bRoKL6ROqVPd4ewNcG91bcPQ2UAoIjW8MzG3b
|
||||
H7fqdkSfIksVhAuhnZs=
|
||||
-----END PUBLIC KEY-----`
|
||||
};
|
||||
|
||||
const PEM_PPRIV_RSA512 = `-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIBOQIBAAJBAPKr0Dp6YdItzOfk6a7ma7L4BF4LnelMYKtboGLrk6ihtqFPZFRL
|
||||
NcJi68Hvnt8stMrP50t6jqwWQ2EjMdkj6fsCAwEAAQJAOJUpM0lv36MAQR3WAwsF
|
||||
F7DOy+LnigteCvaNWiNVxZ6jByB5Qb7sall/Qlu9sFI0ZwrlVcKS0kldee7JTYlL
|
||||
WQIhAP3UKEfOtpTgT1tYmdhaqjxqMfxBom0Ri+rt9ajlzs6vAiEA9L85B8/Gnb7p
|
||||
6Af7/wpmafL277OV4X4xBfzMR+TUzHUCIBq+VLQkInaTH6lXL3ZtLwyIf9W9MJjf
|
||||
RWeuRLjT5bM/AiBF7Kw6kx5Hy1fAtydEApCoDIaIjWJw/kC7WTJ0B+jUUQIgV6dw
|
||||
NSyj0feakeD890gmId+lvl/w/3oUXiczqvl/N9o=
|
||||
-----END RSA PRIVATE KEY-----`;
|
||||
const PEM_PUB_RSA512 = `-----BEGIN PUBLIC KEY-----
|
||||
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAPKr0Dp6YdItzOfk6a7ma7L4BF4LnelM
|
||||
YKtboGLrk6ihtqFPZFRLNcJi68Hvnt8stMrP50t6jqwWQ2EjMdkj6fsCAwEAAQ==
|
||||
-----END PUBLIC KEY-----`;
|
||||
|
||||
TestRegister.addTests([
|
||||
{
|
||||
name: "ECDSA Sign/Verify: P-256 with MD5",
|
||||
input: ASCII_TEXT,
|
||||
expectedOutput: "Verified OK",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Sign",
|
||||
"args": [P256.privateKeyPkcs1, "MD5", "ASN.1 HEX"]
|
||||
},
|
||||
{
|
||||
"op": "ECDSA Verify",
|
||||
"args": ["ASN.1 HEX", "MD5", P256.publicKey, ASCII_TEXT]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "ECDSA Sign/Verify: P-256 with SHA1",
|
||||
input: ASCII_TEXT,
|
||||
expectedOutput: "Verified OK",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Sign",
|
||||
"args": [P256.privateKeyPkcs1, "SHA-1", "ASN.1 HEX"]
|
||||
},
|
||||
{
|
||||
"op": "ECDSA Verify",
|
||||
"args": ["ASN.1 HEX", "SHA-1", P256.publicKey, ASCII_TEXT]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "ECDSA Sign/Verify: P-256 with SHA256",
|
||||
input: ASCII_TEXT,
|
||||
expectedOutput: "Verified OK",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Sign",
|
||||
"args": [P256.privateKeyPkcs1, "SHA-256", "ASN.1 HEX"]
|
||||
},
|
||||
{
|
||||
"op": "ECDSA Verify",
|
||||
"args": ["ASN.1 HEX", "SHA-256", P256.publicKey, ASCII_TEXT]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "ECDSA Sign/Verify: P-256 with SHA384",
|
||||
input: ASCII_TEXT,
|
||||
expectedOutput: "Verified OK",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Sign",
|
||||
"args": [P256.privateKeyPkcs1, "SHA-384", "ASN.1 HEX"]
|
||||
},
|
||||
{
|
||||
"op": "ECDSA Verify",
|
||||
"args": ["ASN.1 HEX", "SHA-384", P256.publicKey, ASCII_TEXT]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "ECDSA Sign/Verify: P-256 with SHA512",
|
||||
input: ASCII_TEXT,
|
||||
expectedOutput: "Verified OK",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Sign",
|
||||
"args": [P256.privateKeyPkcs1, "SHA-512", "ASN.1 HEX"]
|
||||
},
|
||||
{
|
||||
"op": "ECDSA Verify",
|
||||
"args": ["ASN.1 HEX", "SHA-512", P256.publicKey, ASCII_TEXT]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "ECDSA Sign/Verify:: Using a private key in PKCS#8 format works",
|
||||
input: ASCII_TEXT,
|
||||
expectedOutput: "Verified OK",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Sign",
|
||||
"args": [P256.privateKeyPkcs8, "SHA-256", "ASN.1 HEX"]
|
||||
},
|
||||
{
|
||||
"op": "ECDSA Verify",
|
||||
"args": ["ASN.1 HEX", "SHA-256", P256.publicKey, ASCII_TEXT]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "ECDSA Sign/Verify: P-384 with SHA384",
|
||||
input: ASCII_TEXT,
|
||||
expectedOutput: "Verified OK",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Sign",
|
||||
"args": [P384.privateKeyPkcs8, "SHA-384", "ASN.1 HEX"]
|
||||
},
|
||||
{
|
||||
"op": "ECDSA Verify",
|
||||
"args": ["ASN.1 HEX", "SHA-384", P384.publicKey, ASCII_TEXT]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "ECDSA Sign/Verify: P-521 with SHA512",
|
||||
input: ASCII_TEXT,
|
||||
expectedOutput: "Verified OK",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Sign",
|
||||
"args": [P521.privateKeyPkcs8, "SHA-512", "ASN.1 HEX"]
|
||||
},
|
||||
{
|
||||
"op": "ECDSA Verify",
|
||||
"args": ["ASN.1 HEX", "SHA-512", P521.publicKey, ASCII_TEXT]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
// ECDSA Sign
|
||||
{
|
||||
name: "ECDSA Sign: Using public key fails",
|
||||
input: ASCII_TEXT,
|
||||
expectedOutput: "Provided key is not a private key.",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Sign",
|
||||
"args": [P256.publicKey, "SHA-256", "ASN.1 HEX"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "ECDSA Sign: Using an RSA key fails",
|
||||
input: ASCII_TEXT,
|
||||
expectedOutput: "Provided key is not an EC key.",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Sign",
|
||||
"args": [PEM_PPRIV_RSA512, "SHA-256", "ASN.1 HEX"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
// ECDSA Verify
|
||||
{
|
||||
name: "ECDSA Verify: P-256 with SHA256 (ASN.1 signature)",
|
||||
input: P256.signature.sha256.asn1,
|
||||
expectedOutput: "Verified OK",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Verify",
|
||||
"args": ["Auto", "SHA-256", P256.publicKey, ASCII_TEXT]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "ECDSA Verify: P-256 with SHA256 (P1363 signature)",
|
||||
input: P256.signature.sha256.p1363,
|
||||
expectedOutput: "Verified OK",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Verify",
|
||||
"args": ["Auto", "SHA-256", P256.publicKey, ASCII_TEXT]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "ECDSA Verify: P-256 with SHA256 (JWS signature)",
|
||||
input: P256.signature.sha256.jws,
|
||||
expectedOutput: "Verified OK",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Verify",
|
||||
"args": ["Auto", "SHA-256", P256.publicKey, ASCII_TEXT]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "ECDSA Verify: P-256 with SHA256 (JSON signature)",
|
||||
input: P256.signature.sha256.json,
|
||||
expectedOutput: "Verified OK",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Verify",
|
||||
"args": ["Auto", "SHA-256", P256.publicKey, ASCII_TEXT]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "ECDSA Verify: JSON signature missing r",
|
||||
input: JSON.stringify({s: JSON.parse(P256.signature.sha256.json).s}),
|
||||
expectedOutput: 'No "r" value in the signature JSON',
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Verify",
|
||||
"args": ["Auto", "SHA-256", P256.publicKey, ASCII_TEXT]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "ECDSA Verify: JSON signature missing s",
|
||||
input: JSON.stringify({r: JSON.parse(P256.signature.sha256.json).r}),
|
||||
expectedOutput: 'No "s" value in the signature JSON',
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Verify",
|
||||
"args": ["Auto", "SHA-256", P256.publicKey, ASCII_TEXT]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "ECDSA Verify: Using private key fails",
|
||||
input: P256.signature.sha256.asn1,
|
||||
expectedOutput: "Provided key is not a public key.",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Verify",
|
||||
"args": ["ASN.1 HEX", "SHA-256", P256.privateKeyPkcs1, ASCII_TEXT]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "ECDSA Verify: Using an RSA key fails",
|
||||
input: P256.signature.sha256.asn1,
|
||||
expectedOutput: "Provided key is not an EC key.",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Verify",
|
||||
"args": ["ASN.1 HEX", "SHA-256", PEM_PUB_RSA512, ASCII_TEXT]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
// ECDSA Signatur Conversion
|
||||
{
|
||||
name: "ECDSA Signature Conversion: ASN.1 To ASN.1",
|
||||
input: P256.signature.sha256.asn1,
|
||||
expectedOutput: P256.signature.sha256.asn1,
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Signature Conversion",
|
||||
"args": ["Auto", "ASN.1 HEX"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "ECDSA Signature Conversion: ASN.1 To P1363",
|
||||
input: P256.signature.sha256.asn1,
|
||||
expectedOutput: P256.signature.sha256.p1363,
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Signature Conversion",
|
||||
"args": ["Auto", "P1363 HEX"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "ECDSA Signature Conversion: ASN.1 To JWS",
|
||||
input: P256.signature.sha256.asn1,
|
||||
expectedOutput: P256.signature.sha256.jws,
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Signature Conversion",
|
||||
"args": ["Auto", "JSON Web Signature"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "ECDSA Signature Conversion: ASN.1 To JSON",
|
||||
input: P256.signature.sha256.asn1,
|
||||
expectedOutput: P256.signature.sha256.json,
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Signature Conversion",
|
||||
"args": ["Auto", "Raw JSON"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "ECDSA Signature Conversion: P1363 To ASN.1",
|
||||
input: P256.signature.sha256.p1363,
|
||||
expectedOutput: P256.signature.sha256.asn1,
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Signature Conversion",
|
||||
"args": ["Auto", "ASN.1 HEX"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "ECDSA Signature Conversion: P1363 To P1363",
|
||||
input: P256.signature.sha256.p1363,
|
||||
expectedOutput: P256.signature.sha256.p1363,
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Signature Conversion",
|
||||
"args": ["Auto", "P1363 HEX"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "ECDSA Signature Conversion: P1363 To JWS",
|
||||
input: P256.signature.sha256.p1363,
|
||||
expectedOutput: P256.signature.sha256.jws,
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Signature Conversion",
|
||||
"args": ["Auto", "JSON Web Signature"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "ECDSA Signature Conversion: P1363 To JSON",
|
||||
input: P256.signature.sha256.p1363,
|
||||
expectedOutput: P256.signature.sha256.json,
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Signature Conversion",
|
||||
"args": ["Auto", "Raw JSON"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "ECDSA Signature Conversion: JSON To ASN.1",
|
||||
input: P256.signature.sha256.json,
|
||||
expectedOutput: P256.signature.sha256.asn1,
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Signature Conversion",
|
||||
"args": ["Auto", "ASN.1 HEX"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "ECDSA Signature Conversion: JSON To P1363",
|
||||
input: P256.signature.sha256.json,
|
||||
expectedOutput: P256.signature.sha256.p1363,
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Signature Conversion",
|
||||
"args": ["Auto", "P1363 HEX"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "ECDSA Signature Conversion: JSON To JWS",
|
||||
input: P256.signature.sha256.json,
|
||||
expectedOutput: P256.signature.sha256.jws,
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Signature Conversion",
|
||||
"args": ["Auto", "JSON Web Signature"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "ECDSA Signature Conversion: JSON To JSON",
|
||||
input: P256.signature.sha256.json,
|
||||
expectedOutput: P256.signature.sha256.json,
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "ECDSA Signature Conversion",
|
||||
"args": ["Auto", "Raw JSON"]
|
||||
}
|
||||
]
|
||||
}
|
||||
]);
|
|
@ -14,7 +14,7 @@ import TestRegister from "../../lib/TestRegister.mjs";
|
|||
|
||||
TestRegister.addTests([
|
||||
{
|
||||
name: "GOST Encrypt: Magma",
|
||||
name: "GOST Encrypt: 1989",
|
||||
input: "Hello, World!",
|
||||
expectedOutput: "f124ac5c0853870906dbaf9b56",
|
||||
recipeConfig: [
|
||||
|
@ -25,8 +25,7 @@ TestRegister.addTests([
|
|||
{ "option": "Hex", "string": "0011223344556677" },
|
||||
"Raw",
|
||||
"Hex",
|
||||
"GOST 28147 (Magma, 1989)",
|
||||
"64",
|
||||
"GOST 28147 (1989)",
|
||||
"E-SC",
|
||||
"OFB",
|
||||
"CP",
|
||||
|
@ -48,7 +47,6 @@ TestRegister.addTests([
|
|||
"Raw",
|
||||
"Hex",
|
||||
"GOST R 34.12 (Kuznyechik, 2015)",
|
||||
"128",
|
||||
"E-SC",
|
||||
"CBC",
|
||||
"CP",
|
||||
|
@ -58,7 +56,7 @@ TestRegister.addTests([
|
|||
],
|
||||
},
|
||||
{
|
||||
name: "GOST Decrypt: Magma",
|
||||
name: "GOST Decrypt: 1989",
|
||||
input: "f124ac5c0853870906dbaf9b56",
|
||||
expectedOutput: "Hello, World!",
|
||||
recipeConfig: [
|
||||
|
@ -69,8 +67,7 @@ TestRegister.addTests([
|
|||
{ "option": "Hex", "string": "0011223344556677" },
|
||||
"Hex",
|
||||
"Raw",
|
||||
"GOST 28147 (Magma, 1989)",
|
||||
"128",
|
||||
"GOST 28147 (1989)",
|
||||
"E-SC",
|
||||
"OFB",
|
||||
"CP",
|
||||
|
@ -92,7 +89,6 @@ TestRegister.addTests([
|
|||
"Hex",
|
||||
"Raw",
|
||||
"GOST R 34.12 (Kuznyechik, 2015)",
|
||||
"128",
|
||||
"E-TEST",
|
||||
"CBC",
|
||||
"CP",
|
||||
|
@ -113,8 +109,7 @@ TestRegister.addTests([
|
|||
{ "option": "Hex", "string": "0011223344556677" },
|
||||
"Raw",
|
||||
"Hex",
|
||||
"GOST 28147 (Magma, 1989)",
|
||||
"64",
|
||||
"GOST 28147 (1989)",
|
||||
"E-C",
|
||||
48
|
||||
]
|
||||
|
@ -134,7 +129,6 @@ TestRegister.addTests([
|
|||
{ "option": "Hex", "string": "42b77fb3d6f6bf04" },
|
||||
"Raw",
|
||||
"GOST R 34.12 (Kuznyechik, 2015)",
|
||||
"128",
|
||||
"E-TEST"
|
||||
]
|
||||
}
|
||||
|
@ -152,8 +146,7 @@ TestRegister.addTests([
|
|||
{ "option": "Hex", "string": "0011223344556677" },
|
||||
"Raw",
|
||||
"Hex",
|
||||
"GOST R 34.12 (Kuznyechik, 2015)",
|
||||
"64",
|
||||
"GOST R 34.12 (Magma, 2015)",
|
||||
"E-TEST",
|
||||
"CP"
|
||||
]
|
||||
|
@ -172,8 +165,7 @@ TestRegister.addTests([
|
|||
{ "option": "Latin1", "string": "00112233" },
|
||||
"Hex",
|
||||
"Raw",
|
||||
"GOST 28147 (Magma, 1989)",
|
||||
"64",
|
||||
"GOST 28147 (1989)",
|
||||
"E-Z",
|
||||
"CP"
|
||||
]
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* JA4Fingerprint tests.
|
||||
* JA4 tests.
|
||||
*
|
||||
* @author n1474335 [n1474335@gmail.com]
|
||||
* @copyright Crown Copyright 2024
|
||||
|
@ -52,4 +52,70 @@ TestRegister.addTests([
|
|||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "JA4Server Fingerprint: TLS 1.2 h2 ALPN",
|
||||
input: "16030300640200006003035f0236c07f47bfb12dc2da706ecb3fe7f9eeac9968cc2ddf444f574e4752440120b89ff1ab695278c69b8a73f76242ef755e0b13dc6d459aaaa784fec9c2dfce34cca900001800000000ff01000100000b00020100001000050003026832",
|
||||
expectedOutput: "t1204h2_cca9_1428ce7b4018",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "JA4Server Fingerprint",
|
||||
"args": ["Hex", "JA4S"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "JA4Server Fingerprint: TLS 1.2 h2 ALPN Raw",
|
||||
input: "16030300640200006003035f0236c07f47bfb12dc2da706ecb3fe7f9eeac9968cc2ddf444f574e4752440120b89ff1ab695278c69b8a73f76242ef755e0b13dc6d459aaaa784fec9c2dfce34cca900001800000000ff01000100000b00020100001000050003026832",
|
||||
expectedOutput: "t1204h2_cca9_0000,ff01,000b,0010",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "JA4Server Fingerprint",
|
||||
"args": ["Hex", "JA4S Raw"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "JA4Server Fingerprint: TLS 1.3",
|
||||
input: "160303007a020000760303236d214556452c55a0754487e64b1a8b0262c50ba23004c9d504166a6de3439920d0b0099243c9296a0c84153ea4ada7d87ad017f4211c2ea1350b0b3cc5514d5f130100002e00330024001d002099e3cc43a2c9941ae75af1b2c7a629bee3ee7031973cad85c82f2f23677fb244002b00020304",
|
||||
expectedOutput: "t130200_1301_234ea6891581",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "JA4Server Fingerprint",
|
||||
"args": ["Hex", "JA4S"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "JA4Server Fingerprint: TLS 1.3 Raw",
|
||||
input: "160303007a020000760303236d214556452c55a0754487e64b1a8b0262c50ba23004c9d504166a6de3439920d0b0099243c9296a0c84153ea4ada7d87ad017f4211c2ea1350b0b3cc5514d5f130100002e00330024001d002099e3cc43a2c9941ae75af1b2c7a629bee3ee7031973cad85c82f2f23677fb244002b00020304",
|
||||
expectedOutput: "t130200_1301_0033,002b",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "JA4Server Fingerprint",
|
||||
"args": ["Hex", "JA4S Raw"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "JA4Server Fingerprint: TLS 1.3 non-ascii ALPN",
|
||||
input: "160303007a020000760303897c232e3ee313314f2b662307ff4f7e2cf1caeec1b27711bca77f469519168520bc58b92f865e6b9aa4a6371cadcb0afe1da1c0f705209a11d52357f56d5dd962130100002e00330024001d002076b8b7ed0f96b63a773d85ab6f3a87a151c130529785b41a4defb53184055957002b00020304",
|
||||
expectedOutput: "t130200_1301_234ea6891581",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "JA4Server Fingerprint",
|
||||
"args": ["Hex", "JA4S"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "JA4Server Fingerprint: TLS 1.3 non-ascii ALPN Raw",
|
||||
input: "160303007a020000760303897c232e3ee313314f2b662307ff4f7e2cf1caeec1b27711bca77f469519168520bc58b92f865e6b9aa4a6371cadcb0afe1da1c0f705209a11d52357f56d5dd962130100002e00330024001d002076b8b7ed0f96b63a773d85ab6f3a87a151c130529785b41a4defb53184055957002b00020304",
|
||||
expectedOutput: "t130200_1301_0033,002b",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "JA4Server Fingerprint",
|
||||
"args": ["Hex", "JA4S Raw"]
|
||||
}
|
||||
]
|
||||
},
|
||||
]);
|
359
tests/operations/tests/JWK.mjs
Normal file
359
tests/operations/tests/JWK.mjs
Normal file
|
@ -0,0 +1,359 @@
|
|||
/**
|
||||
* JWK conversion
|
||||
*
|
||||
* @author cplussharp
|
||||
* @copyright Crown Copyright 2021
|
||||
* @license Apache-2.0
|
||||
*/
|
||||
import TestRegister from "../../lib/TestRegister.mjs";
|
||||
|
||||
// test data for RSA key pair
|
||||
const RSA_512 = {
|
||||
private: {
|
||||
pem1: `-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIBOQIBAAJBAPKr0Dp6YdItzOfk6a7ma7L4BF4LnelMYKtboGLrk6ihtqFPZFRL
|
||||
NcJi68Hvnt8stMrP50t6jqwWQ2EjMdkj6fsCAwEAAQJAOJUpM0lv36MAQR3WAwsF
|
||||
F7DOy+LnigteCvaNWiNVxZ6jByB5Qb7sall/Qlu9sFI0ZwrlVcKS0kldee7JTYlL
|
||||
WQIhAP3UKEfOtpTgT1tYmdhaqjxqMfxBom0Ri+rt9ajlzs6vAiEA9L85B8/Gnb7p
|
||||
6Af7/wpmafL277OV4X4xBfzMR+TUzHUCIBq+VLQkInaTH6lXL3ZtLwyIf9W9MJjf
|
||||
RWeuRLjT5bM/AiBF7Kw6kx5Hy1fAtydEApCoDIaIjWJw/kC7WTJ0B+jUUQIgV6dw
|
||||
NSyj0feakeD890gmId+lvl/w/3oUXiczqvl/N9o=
|
||||
-----END RSA PRIVATE KEY-----`,
|
||||
pem8: `-----BEGIN PRIVATE KEY-----
|
||||
MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA8qvQOnph0i3M5+Tp
|
||||
ruZrsvgEXgud6Uxgq1ugYuuTqKG2oU9kVEs1wmLrwe+e3yy0ys/nS3qOrBZDYSMx
|
||||
2SPp+wIDAQABAkA4lSkzSW/fowBBHdYDCwUXsM7L4ueKC14K9o1aI1XFnqMHIHlB
|
||||
vuxqWX9CW72wUjRnCuVVwpLSSV157slNiUtZAiEA/dQoR862lOBPW1iZ2FqqPGox
|
||||
/EGibRGL6u31qOXOzq8CIQD0vzkHz8advunoB/v/CmZp8vbvs5XhfjEF/MxH5NTM
|
||||
dQIgGr5UtCQidpMfqVcvdm0vDIh/1b0wmN9FZ65EuNPlsz8CIEXsrDqTHkfLV8C3
|
||||
J0QCkKgMhoiNYnD+QLtZMnQH6NRRAiBXp3A1LKPR95qR4Pz3SCYh36W+X/D/ehRe
|
||||
JzOq+X832g==
|
||||
-----END PRIVATE KEY-----`,
|
||||
jwk: {
|
||||
"kty": "RSA",
|
||||
"n": "8qvQOnph0i3M5-TpruZrsvgEXgud6Uxgq1ugYuuTqKG2oU9kVEs1wmLrwe-e3yy0ys_nS3qOrBZDYSMx2SPp-w",
|
||||
"e": "AQAB",
|
||||
"d": "OJUpM0lv36MAQR3WAwsFF7DOy-LnigteCvaNWiNVxZ6jByB5Qb7sall_Qlu9sFI0ZwrlVcKS0kldee7JTYlLWQ",
|
||||
"p": "_dQoR862lOBPW1iZ2FqqPGox_EGibRGL6u31qOXOzq8",
|
||||
"q": "9L85B8_Gnb7p6Af7_wpmafL277OV4X4xBfzMR-TUzHU",
|
||||
"dp": "Gr5UtCQidpMfqVcvdm0vDIh_1b0wmN9FZ65EuNPlsz8",
|
||||
"dq": "ReysOpMeR8tXwLcnRAKQqAyGiI1icP5Au1kydAfo1FE",
|
||||
"qi": "V6dwNSyj0feakeD890gmId-lvl_w_3oUXiczqvl_N9o"
|
||||
}
|
||||
},
|
||||
public: {
|
||||
pem1: `-----BEGIN RSA PUBLIC KEY-----
|
||||
MEgCQQDyq9A6emHSLczn5Omu5muy+AReC53pTGCrW6Bi65OoobahT2RUSzXCYuvB
|
||||
757fLLTKz+dLeo6sFkNhIzHZI+n7AgMBAAE=
|
||||
-----END RSA PUBLIC KEY-----`,
|
||||
pem8: `-----BEGIN PUBLIC KEY-----
|
||||
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAPKr0Dp6YdItzOfk6a7ma7L4BF4LnelM
|
||||
YKtboGLrk6ihtqFPZFRLNcJi68Hvnt8stMrP50t6jqwWQ2EjMdkj6fsCAwEAAQ==
|
||||
-----END PUBLIC KEY-----`,
|
||||
cert: `-----BEGIN CERTIFICATE-----
|
||||
MIIBfTCCASegAwIBAgIUeisK5Nwss2DGg5PCs4uSxxXyyNkwDQYJKoZIhvcNAQEL
|
||||
BQAwEzERMA8GA1UEAwwIUlNBIHRlc3QwHhcNMjExMTE5MTcyMDI2WhcNMzExMTE3
|
||||
MTcyMDI2WjATMREwDwYDVQQDDAhSU0EgdGVzdDBcMA0GCSqGSIb3DQEBAQUAA0sA
|
||||
MEgCQQDyq9A6emHSLczn5Omu5muy+AReC53pTGCrW6Bi65OoobahT2RUSzXCYuvB
|
||||
757fLLTKz+dLeo6sFkNhIzHZI+n7AgMBAAGjUzBRMB0GA1UdDgQWBBRO+jvkqq5p
|
||||
pnQgwMMnRoun6e7eiTAfBgNVHSMEGDAWgBRO+jvkqq5ppnQgwMMnRoun6e7eiTAP
|
||||
BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA0EAR/5HAZM5qBhU/ezDUIFx
|
||||
gmUGoFbIb5kJD41YCnaSdrgWglh4He4melSs42G/oxBBjuCJ0bUpqWnLl+lJkv1z
|
||||
IA==
|
||||
-----END CERTIFICATE-----`,
|
||||
jwk: {
|
||||
"kty": "RSA",
|
||||
"n": "8qvQOnph0i3M5-TpruZrsvgEXgud6Uxgq1ugYuuTqKG2oU9kVEs1wmLrwe-e3yy0ys_nS3qOrBZDYSMx2SPp-w",
|
||||
"e": "AQAB"
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// test data for EC key pair
|
||||
const EC_P256 = {
|
||||
private: {
|
||||
pem1: `-----BEGIN EC PRIVATE KEY-----
|
||||
MHcCAQEEINtTjwUkgfAiSwqgcGAXWyE0ueIW6n2k395dmQZ3vGr4oAoGCCqGSM49
|
||||
AwEHoUQDQgAEDUc8A0EDNKoCYIPWMHz1yUzqE5mJgusgcAE8H6810fkJ8ZmTNiCC
|
||||
a6sLgR2vD1VNh2diirWgKPH4PVMKav5e6Q==
|
||||
-----END EC PRIVATE KEY-----`,
|
||||
pem8: `-----BEGIN PRIVATE KEY-----
|
||||
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg21OPBSSB8CJLCqBw
|
||||
YBdbITS54hbqfaTf3l2ZBne8avihRANCAAQNRzwDQQM0qgJgg9YwfPXJTOoTmYmC
|
||||
6yBwATwfrzXR+QnxmZM2IIJrqwuBHa8PVU2HZ2KKtaAo8fg9Uwpq/l7p
|
||||
-----END PRIVATE KEY-----`,
|
||||
jwk: {
|
||||
"kty": "EC",
|
||||
"crv": "P-256",
|
||||
"x": "DUc8A0EDNKoCYIPWMHz1yUzqE5mJgusgcAE8H6810fk",
|
||||
"y": "CfGZkzYggmurC4Edrw9VTYdnYoq1oCjx-D1TCmr-Xuk",
|
||||
"d": "21OPBSSB8CJLCqBwYBdbITS54hbqfaTf3l2ZBne8avg"
|
||||
}
|
||||
},
|
||||
public: {
|
||||
pem8: `-----BEGIN PUBLIC KEY-----
|
||||
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEDUc8A0EDNKoCYIPWMHz1yUzqE5mJ
|
||||
gusgcAE8H6810fkJ8ZmTNiCCa6sLgR2vD1VNh2diirWgKPH4PVMKav5e6Q==
|
||||
-----END PUBLIC KEY-----`,
|
||||
cert: `-----BEGIN CERTIFICATE-----
|
||||
MIIBfzCCASWgAwIBAgIUK4H8J3Hr7NpRLPrACj8Pje4JJJ0wCgYIKoZIzj0EAwIw
|
||||
FTETMBEGA1UEAwwKUC0yNTYgdGVzdDAeFw0yMTExMTkxNzE5NDVaFw0zMTExMTcx
|
||||
NzE5NDVaMBUxEzARBgNVBAMMClAtMjU2IHRlc3QwWTATBgcqhkjOPQIBBggqhkjO
|
||||
PQMBBwNCAAQNRzwDQQM0qgJgg9YwfPXJTOoTmYmC6yBwATwfrzXR+QnxmZM2IIJr
|
||||
qwuBHa8PVU2HZ2KKtaAo8fg9Uwpq/l7po1MwUTAdBgNVHQ4EFgQU/SxodXrpkybM
|
||||
gcIgkxnRKd7HMzowHwYDVR0jBBgwFoAU/SxodXrpkybMgcIgkxnRKd7HMzowDwYD
|
||||
VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAgNIADBFAiBU9PrOa/kXCpTTBInRf/sN
|
||||
ac2iDHmbdpWzcXI+xLKNYAIhAIRR1LRSHVwOTLQ/iBXd+8LCkm5aTB27RW46LN80
|
||||
ylxt
|
||||
-----END CERTIFICATE-----`,
|
||||
jwk: {
|
||||
"kty": "EC",
|
||||
"crv": "P-256",
|
||||
"x": "DUc8A0EDNKoCYIPWMHz1yUzqE5mJgusgcAE8H6810fk",
|
||||
"y": "CfGZkzYggmurC4Edrw9VTYdnYoq1oCjx-D1TCmr-Xuk"
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const PEM_PRIV_DSA1024 = `-----BEGIN DSA PRIVATE KEY-----
|
||||
MIIBuwIBAAKBgQCkFEttBrPHEJRgcvaT8HbZs9h1pVQLHhn2F452izusRox1czMM
|
||||
IC8Z7YQiM1pt6bgEmf0h8ldx6UFT0YL9JWSbyBy1U5pHKfnz/xjeg7ZMReL4F0/T
|
||||
Gwmu4ercqfM//TmEg9nL3nDxb4WmF2al/SmHN3qlzYmYaIDEFfEuu8vWbwIVAMOq
|
||||
7pqQiMGUu6uJY/nQTWW0c3IfAoGARWryStp2AElj538qN9tWRuyobRA93Q1ujrdM
|
||||
EqsqVpMZd1a8qtRyMaZVVdB7N3EweNUuFOoSAp10s/SQEH9qhVo6NwvzhB7lEtm4
|
||||
5FjWW9+9WCuuFOGZpTy8PSFAvQcfUqunP/DeaDliNmgKci+n0nfIBakuQn10Zmqk
|
||||
vGu8NZICgYBUsoQeXSJ19e6XZenk6G8wVI3yXFqnRAwb6s7sAVoPwfDCsOXTxC7W
|
||||
Mlfz0HcYMiifFKEd28NnuAZ2e0ngyPHsb9s5phzTgRfO3GFzOjsjwgx3DmQI2Ck2
|
||||
yOWHSAtaNhH4DoBZEyNsb1akiB50vx9b09EHN4weqbgAu743NMDHRQIVAIG5uiiO
|
||||
OnWUYieHAiVIPkBCrYUd
|
||||
-----END DSA PRIVATE KEY-----`;
|
||||
|
||||
// https://datatracker.ietf.org/doc/html/rfc8037#appendix-A.2
|
||||
const JWK_PUB_ED25591 = {
|
||||
"kty": "OKP",
|
||||
"crv": "Ed25519",
|
||||
"x": "11qYAYKxCrfVS_7TyWQHOg7hcvPapiMlrwIaaPcHURo"
|
||||
};
|
||||
|
||||
TestRegister.addTests([
|
||||
{
|
||||
name: "PEM to JWK: Missing footer",
|
||||
input: RSA_512.private.pem1.substring(0, RSA_512.private.pem1.length / 2),
|
||||
expectedOutput: "PEM footer '-----END RSA PRIVATE KEY-----' not found",
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "PEM to JWK",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "PEM to JWK: DSA not supported",
|
||||
input: PEM_PRIV_DSA1024,
|
||||
expectedOutput: "DSA keys are not supported for JWK",
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "PEM to JWK",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
|
||||
// test RSA key convertion
|
||||
{
|
||||
name: "PEM to JWK: RSA Private Key PKCS1",
|
||||
input: RSA_512.private.pem1,
|
||||
expectedOutput: JSON.stringify(RSA_512.private.jwk),
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "PEM to JWK",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "PEM to JWK: RSA Private Key PKCS8",
|
||||
input: RSA_512.private.pem8,
|
||||
expectedOutput: JSON.stringify(RSA_512.private.jwk),
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "PEM to JWK",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "PEM to JWK: RSA Public Key PKCS1",
|
||||
input: RSA_512.public.pem1,
|
||||
expectedOutput: "Unsupported RSA public key format. Only PKCS#8 is supported.",
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "PEM to JWK",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "PEM to JWK: RSA Public Key PKCS8",
|
||||
input: RSA_512.public.pem8,
|
||||
expectedOutput: JSON.stringify(RSA_512.public.jwk),
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "PEM to JWK",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "PEM to JWK: Certificate with RSA Public Key",
|
||||
input: RSA_512.public.cert,
|
||||
expectedOutput: JSON.stringify(RSA_512.public.jwk),
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "PEM to JWK",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
|
||||
// test EC key conversion
|
||||
{
|
||||
name: "PEM to JWK: EC Private Key PKCS1",
|
||||
input: EC_P256.private.pem1,
|
||||
expectedOutput: JSON.stringify(EC_P256.private.jwk),
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "PEM to JWK",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "PEM to JWK: EC Private Key PKCS8",
|
||||
input: EC_P256.private.pem8,
|
||||
expectedOutput: JSON.stringify(EC_P256.private.jwk),
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "PEM to JWK",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "PEM to JWK: EC Public Key",
|
||||
input: EC_P256.public.pem8,
|
||||
expectedOutput: JSON.stringify(EC_P256.public.jwk),
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "PEM to JWK",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "PEM to JWK: Certificate with EC Public Key",
|
||||
input: EC_P256.public.cert,
|
||||
expectedOutput: JSON.stringify(EC_P256.public.jwk),
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "PEM to JWK",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
name: "JWK to PEM: not a JWK",
|
||||
input: "\"foobar\"",
|
||||
expectedOutput: "Input is not a JSON Web Key",
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "JWK to PEM",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "JWK to PEM: unsupported key type",
|
||||
input: JSON.stringify(JWK_PUB_ED25591),
|
||||
expectedOutput: "Unsupported JWK key type 'OKP'",
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "JWK to PEM",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
|
||||
// test RSA key conversion
|
||||
{
|
||||
name: "JWK to PEM: RSA Private Key",
|
||||
input: JSON.stringify(RSA_512.private.jwk),
|
||||
expectedOutput: RSA_512.private.pem8.replace(/\r/g, "").replace(/\n/g, "\r\n")+"\r\n",
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "JWK to PEM",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "JWK to PEM: RSA Public Key",
|
||||
input: JSON.stringify(RSA_512.public.jwk),
|
||||
expectedOutput: RSA_512.public.pem8.replace(/\r/g, "").replace(/\n/g, "\r\n")+"\r\n",
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "JWK to PEM",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
|
||||
// test EC key conversion
|
||||
{
|
||||
name: "JWK to PEM: EC Private Key",
|
||||
input: JSON.stringify(EC_P256.private.jwk),
|
||||
expectedOutput: EC_P256.private.pem8.replace(/\r/g, "").replace(/\n/g, "\r\n")+"\r\n",
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "JWK to PEM",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "JWK to PEM: EC Public Key",
|
||||
input: JSON.stringify(EC_P256.public.jwk),
|
||||
expectedOutput: EC_P256.public.pem8.replace(/\r/g, "").replace(/\n/g, "\r\n")+"\r\n",
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "JWK to PEM",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
name: "JWK to PEM: Array of keys",
|
||||
input: JSON.stringify([RSA_512.public.jwk, EC_P256.public.jwk]),
|
||||
expectedOutput: (RSA_512.public.pem8 + "\n" + EC_P256.public.pem8 + "\n").replace(/\r/g, "").replace(/\n/g, "\r\n"),
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "JWK to PEM",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "JWK to PEM: JSON Web Key Set",
|
||||
input: JSON.stringify({"keys": [RSA_512.public.jwk, EC_P256.public.jwk]}),
|
||||
expectedOutput: (RSA_512.public.pem8 + "\n" + EC_P256.public.pem8 + "\n").replace(/\r/g, "").replace(/\n/g, "\r\n"),
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "JWK to PEM",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
}
|
||||
]);
|
215
tests/operations/tests/PubKeyFromCert.mjs
Normal file
215
tests/operations/tests/PubKeyFromCert.mjs
Normal file
|
@ -0,0 +1,215 @@
|
|||
/**
|
||||
* Public Key from Certificate
|
||||
*
|
||||
* @author cplussharp
|
||||
* @copyright Crown Copyright 2023
|
||||
* @license Apache-2.0
|
||||
*/
|
||||
import TestRegister from "../../lib/TestRegister.mjs";
|
||||
|
||||
const RSA_CERT = `-----BEGIN CERTIFICATE-----
|
||||
MIIBfTCCASegAwIBAgIUeisK5Nwss2DGg5PCs4uSxxXyyNkwDQYJKoZIhvcNAQEL
|
||||
BQAwEzERMA8GA1UEAwwIUlNBIHRlc3QwHhcNMjExMTE5MTcyMDI2WhcNMzExMTE3
|
||||
MTcyMDI2WjATMREwDwYDVQQDDAhSU0EgdGVzdDBcMA0GCSqGSIb3DQEBAQUAA0sA
|
||||
MEgCQQDyq9A6emHSLczn5Omu5muy+AReC53pTGCrW6Bi65OoobahT2RUSzXCYuvB
|
||||
757fLLTKz+dLeo6sFkNhIzHZI+n7AgMBAAGjUzBRMB0GA1UdDgQWBBRO+jvkqq5p
|
||||
pnQgwMMnRoun6e7eiTAfBgNVHSMEGDAWgBRO+jvkqq5ppnQgwMMnRoun6e7eiTAP
|
||||
BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA0EAR/5HAZM5qBhU/ezDUIFx
|
||||
gmUGoFbIb5kJD41YCnaSdrgWglh4He4melSs42G/oxBBjuCJ0bUpqWnLl+lJkv1z
|
||||
IA==
|
||||
-----END CERTIFICATE-----`;
|
||||
|
||||
const RSA_PUBKEY = `-----BEGIN PUBLIC KEY-----
|
||||
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAPKr0Dp6YdItzOfk6a7ma7L4BF4LnelM
|
||||
YKtboGLrk6ihtqFPZFRLNcJi68Hvnt8stMrP50t6jqwWQ2EjMdkj6fsCAwEAAQ==
|
||||
-----END PUBLIC KEY-----`;
|
||||
|
||||
const EC_P256_CERT = `-----BEGIN CERTIFICATE-----
|
||||
MIIBfzCCASWgAwIBAgIUK4H8J3Hr7NpRLPrACj8Pje4JJJ0wCgYIKoZIzj0EAwIw
|
||||
FTETMBEGA1UEAwwKUC0yNTYgdGVzdDAeFw0yMTExMTkxNzE5NDVaFw0zMTExMTcx
|
||||
NzE5NDVaMBUxEzARBgNVBAMMClAtMjU2IHRlc3QwWTATBgcqhkjOPQIBBggqhkjO
|
||||
PQMBBwNCAAQNRzwDQQM0qgJgg9YwfPXJTOoTmYmC6yBwATwfrzXR+QnxmZM2IIJr
|
||||
qwuBHa8PVU2HZ2KKtaAo8fg9Uwpq/l7po1MwUTAdBgNVHQ4EFgQU/SxodXrpkybM
|
||||
gcIgkxnRKd7HMzowHwYDVR0jBBgwFoAU/SxodXrpkybMgcIgkxnRKd7HMzowDwYD
|
||||
VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAgNIADBFAiBU9PrOa/kXCpTTBInRf/sN
|
||||
ac2iDHmbdpWzcXI+xLKNYAIhAIRR1LRSHVwOTLQ/iBXd+8LCkm5aTB27RW46LN80
|
||||
ylxt
|
||||
-----END CERTIFICATE-----`;
|
||||
|
||||
const EC_P256_PUBKEY = `-----BEGIN PUBLIC KEY-----
|
||||
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEDUc8A0EDNKoCYIPWMHz1yUzqE5mJ
|
||||
gusgcAE8H6810fkJ8ZmTNiCCa6sLgR2vD1VNh2diirWgKPH4PVMKav5e6Q==
|
||||
-----END PUBLIC KEY-----`;
|
||||
|
||||
const DSA_CERT = `-----BEGIN CERTIFICATE-----
|
||||
MIIEXzCCBA2gAwIBAgIUYYcPJB8UQLzUnqkGJvs3J4RI0OgwCwYJYIZIAWUDBAMC
|
||||
MBMxETAPBgNVBAMMCERTQSBUZXN0MB4XDTIzMTAxNTAwMjEzNVoXDTMzMTAxMjAw
|
||||
MjEzNVowEzERMA8GA1UEAwwIRFNBIFRlc3QwggNCMIICNQYHKoZIzjgEATCCAigC
|
||||
ggEBALoLV+uz7vMYZCIuwXNkgZawvDgZAG1T7IiG030WgqesRNncuoUQOmAJCiuN
|
||||
zkjVNSY08rabex/RIkWILvxP91SlzhA9t9+dp87p238ecxGa1sD2re+y35RP7IxN
|
||||
T33633NtwGItZ3BqqAhoMmuwwwxau0E8zwYodTTlwTRp4QVPpMH1eJCUBeEzcWP5
|
||||
ZZ1lRNhR5M2TqzSU3ya5/4c3a9rI86h9VIVgw8yVvw3y6yclzjALm2ntD5riskdM
|
||||
Z6mMkfYQwEbIGRTELX6A7LZ0lX1CislenF9ASb2E4g2nGcMQ0uSGzA4W9mf6wwmP
|
||||
S6iwX5+Qu/i6jCm5i37fQ1H5HHUCHQDA+UnPHM6PZEgfFen8djZpl/cl05MpWk+d
|
||||
nikFAoIBADXOTpBw0WA+UihxDG+6qqM05kxVMYmz6IRZ/06ffZSGVFN6Bx1i0s3v
|
||||
kzM5V8GsKpkKkSk7V8fTQnAIIlMmt1Y7ff+ng7+TfYotMrvvEYlolYK06J2WWoUA
|
||||
8iKp8+n58vdoky+xZmuGmcvCAojVDbEeU2wEqYE1PzrHCSOoOiKB2P4fOhyuF+qx
|
||||
E8nkzURIg2RmSSkqWOkXiWyKyfpUaB+4cEisp4ThENEPmdntE1vLh2r7EOIxpE5D
|
||||
0NAy2wFKqe3ljfgE6XsPZKgVAguRDVpzdmL6WDY7DM/BcS726vx+kX55QDkszvec
|
||||
raNirnir2QrB/a0JQjF6Y62yGmG7GF8DggEFAAKCAQBpN+w0N0b5IIAspXnlJ9yu
|
||||
B6ORk3j/5rZ+DUtTzW1YAJI6xjTcFQvN7FpVLkmLtXKUXF04R+sdGJ7VFwOb0rba
|
||||
L5vQzrqNkBrbgSzuzeloiG+7OLA6VeQtNbQh6OurrZFi9gY+qA5ciT9kQXyrHudV
|
||||
Xu956NDrooRxmv6JIVFvToaNiwe2vcgdkALw8HUbLFYof4SAE9jgU8EpxTp02e8H
|
||||
zvVSVa6yj1nnGhpzLPlEqF8TZvs9pTg2kIk3/zvWojMJoPyTALfbTjbAeiFMMeKN
|
||||
K/CKOOJj23AVAZxpMSR6cUbrIcRdKDnhCTVkkxXUecAIUs6Mk10kSfkuiGl9LjKj
|
||||
o1MwUTAdBgNVHQ4EFgQUE+xZdvgiDIFWKQskMYnNaZ3iPHAwHwYDVR0jBBgwFoAU
|
||||
E+xZdvgiDIFWKQskMYnNaZ3iPHAwDwYDVR0TAQH/BAUwAwEB/zALBglghkgBZQME
|
||||
AwIDPwAwPAIcZbtf4+bjXEGQqNs6IglLrOgIjYF46q7qCNfXmQIcMKUtH3S6sDJE
|
||||
3ds9eL+oC+HPFlfUNfUiU30aDA==
|
||||
-----END CERTIFICATE-----`;
|
||||
|
||||
const DSA_PUBKEY = `-----BEGIN PUBLIC KEY-----
|
||||
MIIDQjCCAjUGByqGSM44BAEwggIoAoIBAQC6C1frs+7zGGQiLsFzZIGWsLw4GQBt
|
||||
U+yIhtN9FoKnrETZ3LqFEDpgCQorjc5I1TUmNPK2m3sf0SJFiC78T/dUpc4QPbff
|
||||
nafO6dt/HnMRmtbA9q3vst+UT+yMTU99+t9zbcBiLWdwaqgIaDJrsMMMWrtBPM8G
|
||||
KHU05cE0aeEFT6TB9XiQlAXhM3Fj+WWdZUTYUeTNk6s0lN8muf+HN2vayPOofVSF
|
||||
YMPMlb8N8usnJc4wC5tp7Q+a4rJHTGepjJH2EMBGyBkUxC1+gOy2dJV9QorJXpxf
|
||||
QEm9hOINpxnDENLkhswOFvZn+sMJj0uosF+fkLv4uowpuYt+30NR+Rx1Ah0AwPlJ
|
||||
zxzOj2RIHxXp/HY2aZf3JdOTKVpPnZ4pBQKCAQA1zk6QcNFgPlIocQxvuqqjNOZM
|
||||
VTGJs+iEWf9On32UhlRTegcdYtLN75MzOVfBrCqZCpEpO1fH00JwCCJTJrdWO33/
|
||||
p4O/k32KLTK77xGJaJWCtOidllqFAPIiqfPp+fL3aJMvsWZrhpnLwgKI1Q2xHlNs
|
||||
BKmBNT86xwkjqDoigdj+HzocrhfqsRPJ5M1ESINkZkkpKljpF4lsisn6VGgfuHBI
|
||||
rKeE4RDRD5nZ7RNby4dq+xDiMaROQ9DQMtsBSqnt5Y34BOl7D2SoFQILkQ1ac3Zi
|
||||
+lg2OwzPwXEu9ur8fpF+eUA5LM73nK2jYq54q9kKwf2tCUIxemOtshphuxhfA4IB
|
||||
BQACggEAaTfsNDdG+SCALKV55SfcrgejkZN4/+a2fg1LU81tWACSOsY03BULzexa
|
||||
VS5Ji7VylFxdOEfrHRie1RcDm9K22i+b0M66jZAa24Es7s3paIhvuziwOlXkLTW0
|
||||
Iejrq62RYvYGPqgOXIk/ZEF8qx7nVV7veejQ66KEcZr+iSFRb06GjYsHtr3IHZAC
|
||||
8PB1GyxWKH+EgBPY4FPBKcU6dNnvB871UlWuso9Z5xoacyz5RKhfE2b7PaU4NpCJ
|
||||
N/871qIzCaD8kwC32042wHohTDHijSvwijjiY9twFQGcaTEkenFG6yHEXSg54Qk1
|
||||
ZJMV1HnACFLOjJNdJEn5LohpfS4yow==
|
||||
-----END PUBLIC KEY-----`;
|
||||
|
||||
const ED25519_CERT = `-----BEGIN CERTIFICATE-----
|
||||
MIIBQjCB9aADAgECAhRjPJhrdNco5LzpsIs0vSLLaZaZ0DAFBgMrZXAwFzEVMBMG
|
||||
A1UEAwwMRWQyNTUxOSBUZXN0MB4XDTIzMTAxNTAwMjMwOFoXDTMzMTAxMjAwMjMw
|
||||
OFowFzEVMBMGA1UEAwwMRWQyNTUxOSBUZXN0MCowBQYDK2VwAyEAELP6AflXwsuZ
|
||||
5q4NDIO0LP2iCdKRvds4nwsUmRhOw3ijUzBRMB0GA1UdDgQWBBRfxS9q0IemWxkH
|
||||
4mwAwzr9dQx2xzAfBgNVHSMEGDAWgBRfxS9q0IemWxkH4mwAwzr9dQx2xzAPBgNV
|
||||
HRMBAf8EBTADAQH/MAUGAytlcANBAI/+03iVq4yJ+DaLVs61w41cVX2UxKvquSzv
|
||||
lllkpkclM9LH5dLrw4ArdTjS9zAjzY/02WkphHhICHXt3KqZTwI=
|
||||
-----END CERTIFICATE-----`;
|
||||
|
||||
/*
|
||||
const ED25519_PUBKEY = `-----BEGIN PUBLIC KEY-----
|
||||
MCowBQYDK2VwAyEAELP6AflXwsuZ5q4NDIO0LP2iCdKRvds4nwsUmRhOw3g=
|
||||
-----END PUBLIC KEY-----`;
|
||||
*/
|
||||
|
||||
const ED448_CERT = `-----BEGIN CERTIFICATE-----
|
||||
MIIBijCCAQqgAwIBAgIUZaCS7zEjOnQ7O4KUFym6fJF5vl8wBQYDK2VxMBUxEzAR
|
||||
BgNVBAMMCkVkNDQ4IFRlc3QwHhcNMjMxMDE1MDAyMzI1WhcNMzMxMDEyMDAyMzI1
|
||||
WjAVMRMwEQYDVQQDDApFZDQ0OCBUZXN0MEMwBQYDK2VxAzoAVN8kG0TMVyGOu/Ov
|
||||
BTe8H0Wi4HJrQAlSv4XLwJbkuoi4EeRlEHQwXsNYLZTtY2Jra6AWhbVYYaEAo1Mw
|
||||
UTAdBgNVHQ4EFgQUJFrepAf9YXrmDMSAzrMeYQmosd0wHwYDVR0jBBgwFoAUJFre
|
||||
pAf9YXrmDMSAzrMeYQmosd0wDwYDVR0TAQH/BAUwAwEB/zAFBgMrZXEDcwA+YiZj
|
||||
puFr2aogfV1qg/ixk7qLi25BbKVNR6+7PEUjo7+4yBn9qnLbAHUGnHn7E96pSey9
|
||||
VkLqpoDNMRcM3Eb6h3AJpQM0oxGj8q9arjDXqJkXgaO2e0tVn8KKVfy7S8qO72Kd
|
||||
rWzZowcOjnWKhXm7JgA=
|
||||
-----END CERTIFICATE-----`;
|
||||
|
||||
/*
|
||||
const ED448_PUBKEY = `-----BEGIN PUBLIC KEY-----
|
||||
MEMwBQYDK2VxAzoAVN8kG0TMVyGOu/OvBTe8H0Wi4HJrQAlSv4XLwJbkuoi4EeRl
|
||||
EHQwXsNYLZTtY2Jra6AWhbVYYaEA
|
||||
-----END PUBLIC KEY-----`
|
||||
*/
|
||||
|
||||
TestRegister.addTests([
|
||||
{
|
||||
name: "Public Key from Certificate: Missing footer",
|
||||
input: RSA_CERT.substring(0, RSA_CERT.length / 2),
|
||||
expectedOutput: "PEM footer '-----END CERTIFICATE-----' not found",
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "Public Key from Certificate",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
|
||||
// test RSA certificate
|
||||
{
|
||||
name: "Public Key from Certificate: RSA",
|
||||
input: RSA_CERT,
|
||||
expectedOutput: (RSA_PUBKEY + "\n").replace(/\r/g, "").replace(/\n/g, "\r\n"),
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "Public Key from Certificate",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
|
||||
// test EC certificate
|
||||
{
|
||||
name: "Public Key from Certificate: EC",
|
||||
input: EC_P256_CERT,
|
||||
expectedOutput: (EC_P256_PUBKEY + "\n").replace(/\r/g, "").replace(/\n/g, "\r\n"),
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "Public Key from Certificate",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
|
||||
// test DSA certificate
|
||||
{
|
||||
name: "Public Key from Certificate: DSA",
|
||||
input: DSA_CERT,
|
||||
expectedOutput: (DSA_PUBKEY + "\n").replace(/\r/g, "").replace(/\n/g, "\r\n"),
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "Public Key from Certificate",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
|
||||
// test EdDSA certificates
|
||||
{
|
||||
name: "Public Key from Certificate: Ed25519",
|
||||
input: ED25519_CERT,
|
||||
expectedOutput: "Unsupported public key type",
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "Public Key from Certificate",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Public Key from Certificate: Ed448",
|
||||
input: ED448_CERT,
|
||||
expectedOutput: "Unsupported public key type",
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "Public Key from Certificate",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
|
||||
// test multi-input
|
||||
{
|
||||
name: "Public Key from Certificate: Multiple certificates",
|
||||
input: RSA_CERT + "\n" + EC_P256_CERT,
|
||||
expectedOutput: (RSA_PUBKEY + "\n" + EC_P256_PUBKEY + "\n").replace(/\r/g, "").replace(/\n/g, "\r\n"),
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "Public Key from Certificate",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
}
|
||||
]);
|
254
tests/operations/tests/PubKeyFromPrivKey.mjs
Normal file
254
tests/operations/tests/PubKeyFromPrivKey.mjs
Normal file
|
@ -0,0 +1,254 @@
|
|||
/**
|
||||
* Public Key from Private Key
|
||||
*
|
||||
* @author cplussharp
|
||||
* @copyright Crown Copyright 2023
|
||||
* @license Apache-2.0
|
||||
*/
|
||||
import TestRegister from "../../lib/TestRegister.mjs";
|
||||
|
||||
const RSA_PRIVKEY_PKCS1 = `-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIBOQIBAAJBAPKr0Dp6YdItzOfk6a7ma7L4BF4LnelMYKtboGLrk6ihtqFPZFRL
|
||||
NcJi68Hvnt8stMrP50t6jqwWQ2EjMdkj6fsCAwEAAQJAOJUpM0lv36MAQR3WAwsF
|
||||
F7DOy+LnigteCvaNWiNVxZ6jByB5Qb7sall/Qlu9sFI0ZwrlVcKS0kldee7JTYlL
|
||||
WQIhAP3UKEfOtpTgT1tYmdhaqjxqMfxBom0Ri+rt9ajlzs6vAiEA9L85B8/Gnb7p
|
||||
6Af7/wpmafL277OV4X4xBfzMR+TUzHUCIBq+VLQkInaTH6lXL3ZtLwyIf9W9MJjf
|
||||
RWeuRLjT5bM/AiBF7Kw6kx5Hy1fAtydEApCoDIaIjWJw/kC7WTJ0B+jUUQIgV6dw
|
||||
NSyj0feakeD890gmId+lvl/w/3oUXiczqvl/N9o=
|
||||
-----END RSA PRIVATE KEY-----`;
|
||||
|
||||
const RSA_PRIVKEY_PKCS8 = `-----BEGIN PRIVATE KEY-----
|
||||
MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA8qvQOnph0i3M5+Tp
|
||||
ruZrsvgEXgud6Uxgq1ugYuuTqKG2oU9kVEs1wmLrwe+e3yy0ys/nS3qOrBZDYSMx
|
||||
2SPp+wIDAQABAkA4lSkzSW/fowBBHdYDCwUXsM7L4ueKC14K9o1aI1XFnqMHIHlB
|
||||
vuxqWX9CW72wUjRnCuVVwpLSSV157slNiUtZAiEA/dQoR862lOBPW1iZ2FqqPGox
|
||||
/EGibRGL6u31qOXOzq8CIQD0vzkHz8advunoB/v/CmZp8vbvs5XhfjEF/MxH5NTM
|
||||
dQIgGr5UtCQidpMfqVcvdm0vDIh/1b0wmN9FZ65EuNPlsz8CIEXsrDqTHkfLV8C3
|
||||
J0QCkKgMhoiNYnD+QLtZMnQH6NRRAiBXp3A1LKPR95qR4Pz3SCYh36W+X/D/ehRe
|
||||
JzOq+X832g==
|
||||
-----END PRIVATE KEY-----`;
|
||||
|
||||
const RSA_PUBKEY = `-----BEGIN PUBLIC KEY-----
|
||||
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAPKr0Dp6YdItzOfk6a7ma7L4BF4LnelM
|
||||
YKtboGLrk6ihtqFPZFRLNcJi68Hvnt8stMrP50t6jqwWQ2EjMdkj6fsCAwEAAQ==
|
||||
-----END PUBLIC KEY-----`;
|
||||
|
||||
const EC_P256_PRIVKEY_SEC1 = `-----BEGIN EC PRIVATE KEY-----
|
||||
MHcCAQEEINtTjwUkgfAiSwqgcGAXWyE0ueIW6n2k395dmQZ3vGr4oAoGCCqGSM49
|
||||
AwEHoUQDQgAEDUc8A0EDNKoCYIPWMHz1yUzqE5mJgusgcAE8H6810fkJ8ZmTNiCC
|
||||
a6sLgR2vD1VNh2diirWgKPH4PVMKav5e6Q==
|
||||
-----END EC PRIVATE KEY-----`;
|
||||
|
||||
const EC_P256_PRIVKEY_PKCS8 = `-----BEGIN PRIVATE KEY-----
|
||||
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg21OPBSSB8CJLCqBw
|
||||
YBdbITS54hbqfaTf3l2ZBne8avihRANCAAQNRzwDQQM0qgJgg9YwfPXJTOoTmYmC
|
||||
6yBwATwfrzXR+QnxmZM2IIJrqwuBHa8PVU2HZ2KKtaAo8fg9Uwpq/l7p
|
||||
-----END PRIVATE KEY-----`;
|
||||
|
||||
const EC_P256_PUBKEY = `-----BEGIN PUBLIC KEY-----
|
||||
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEDUc8A0EDNKoCYIPWMHz1yUzqE5mJ
|
||||
gusgcAE8H6810fkJ8ZmTNiCCa6sLgR2vD1VNh2diirWgKPH4PVMKav5e6Q==
|
||||
-----END PUBLIC KEY-----`;
|
||||
|
||||
const DSA_PRIVKEY_TRAD = `-----BEGIN DSA PRIVATE KEY-----
|
||||
MIIDTQIBAAKCAQEAugtX67Pu8xhkIi7Bc2SBlrC8OBkAbVPsiIbTfRaCp6xE2dy6
|
||||
hRA6YAkKK43OSNU1JjTytpt7H9EiRYgu/E/3VKXOED23352nzunbfx5zEZrWwPat
|
||||
77LflE/sjE1Pffrfc23AYi1ncGqoCGgya7DDDFq7QTzPBih1NOXBNGnhBU+kwfV4
|
||||
kJQF4TNxY/llnWVE2FHkzZOrNJTfJrn/hzdr2sjzqH1UhWDDzJW/DfLrJyXOMAub
|
||||
ae0PmuKyR0xnqYyR9hDARsgZFMQtfoDstnSVfUKKyV6cX0BJvYTiDacZwxDS5IbM
|
||||
Dhb2Z/rDCY9LqLBfn5C7+LqMKbmLft9DUfkcdQIdAMD5Sc8czo9kSB8V6fx2NmmX
|
||||
9yXTkylaT52eKQUCggEANc5OkHDRYD5SKHEMb7qqozTmTFUxibPohFn/Tp99lIZU
|
||||
U3oHHWLSze+TMzlXwawqmQqRKTtXx9NCcAgiUya3Vjt9/6eDv5N9ii0yu+8RiWiV
|
||||
grTonZZahQDyIqnz6fny92iTL7Fma4aZy8ICiNUNsR5TbASpgTU/OscJI6g6IoHY
|
||||
/h86HK4X6rETyeTNREiDZGZJKSpY6ReJbIrJ+lRoH7hwSKynhOEQ0Q+Z2e0TW8uH
|
||||
avsQ4jGkTkPQ0DLbAUqp7eWN+ATpew9kqBUCC5ENWnN2YvpYNjsMz8FxLvbq/H6R
|
||||
fnlAOSzO95yto2KueKvZCsH9rQlCMXpjrbIaYbsYXwKCAQBpN+w0N0b5IIAspXnl
|
||||
J9yuB6ORk3j/5rZ+DUtTzW1YAJI6xjTcFQvN7FpVLkmLtXKUXF04R+sdGJ7VFwOb
|
||||
0rbaL5vQzrqNkBrbgSzuzeloiG+7OLA6VeQtNbQh6OurrZFi9gY+qA5ciT9kQXyr
|
||||
HudVXu956NDrooRxmv6JIVFvToaNiwe2vcgdkALw8HUbLFYof4SAE9jgU8EpxTp0
|
||||
2e8HzvVSVa6yj1nnGhpzLPlEqF8TZvs9pTg2kIk3/zvWojMJoPyTALfbTjbAeiFM
|
||||
MeKNK/CKOOJj23AVAZxpMSR6cUbrIcRdKDnhCTVkkxXUecAIUs6Mk10kSfkuiGl9
|
||||
LjKjAhwpK4MOpkKEu+y308fZ+yZXypZW2m9Y/wOT0L4g
|
||||
-----END DSA PRIVATE KEY-----`;
|
||||
|
||||
const DSA_PRIVKEY_PKCS8 = `-----BEGIN PRIVATE KEY-----
|
||||
MIICXAIBADCCAjUGByqGSM44BAEwggIoAoIBAQC6C1frs+7zGGQiLsFzZIGWsLw4
|
||||
GQBtU+yIhtN9FoKnrETZ3LqFEDpgCQorjc5I1TUmNPK2m3sf0SJFiC78T/dUpc4Q
|
||||
PbffnafO6dt/HnMRmtbA9q3vst+UT+yMTU99+t9zbcBiLWdwaqgIaDJrsMMMWrtB
|
||||
PM8GKHU05cE0aeEFT6TB9XiQlAXhM3Fj+WWdZUTYUeTNk6s0lN8muf+HN2vayPOo
|
||||
fVSFYMPMlb8N8usnJc4wC5tp7Q+a4rJHTGepjJH2EMBGyBkUxC1+gOy2dJV9QorJ
|
||||
XpxfQEm9hOINpxnDENLkhswOFvZn+sMJj0uosF+fkLv4uowpuYt+30NR+Rx1Ah0A
|
||||
wPlJzxzOj2RIHxXp/HY2aZf3JdOTKVpPnZ4pBQKCAQA1zk6QcNFgPlIocQxvuqqj
|
||||
NOZMVTGJs+iEWf9On32UhlRTegcdYtLN75MzOVfBrCqZCpEpO1fH00JwCCJTJrdW
|
||||
O33/p4O/k32KLTK77xGJaJWCtOidllqFAPIiqfPp+fL3aJMvsWZrhpnLwgKI1Q2x
|
||||
HlNsBKmBNT86xwkjqDoigdj+HzocrhfqsRPJ5M1ESINkZkkpKljpF4lsisn6VGgf
|
||||
uHBIrKeE4RDRD5nZ7RNby4dq+xDiMaROQ9DQMtsBSqnt5Y34BOl7D2SoFQILkQ1a
|
||||
c3Zi+lg2OwzPwXEu9ur8fpF+eUA5LM73nK2jYq54q9kKwf2tCUIxemOtshphuxhf
|
||||
BB4CHCkrgw6mQoS77LfTx9n7JlfKllbab1j/A5PQviA=
|
||||
-----END PRIVATE KEY-----`;
|
||||
|
||||
const DSA_PUBKEY = `-----BEGIN PUBLIC KEY-----
|
||||
MIIDQjCCAjUGByqGSM44BAEwggIoAoIBAQC6C1frs+7zGGQiLsFzZIGWsLw4GQBt
|
||||
U+yIhtN9FoKnrETZ3LqFEDpgCQorjc5I1TUmNPK2m3sf0SJFiC78T/dUpc4QPbff
|
||||
nafO6dt/HnMRmtbA9q3vst+UT+yMTU99+t9zbcBiLWdwaqgIaDJrsMMMWrtBPM8G
|
||||
KHU05cE0aeEFT6TB9XiQlAXhM3Fj+WWdZUTYUeTNk6s0lN8muf+HN2vayPOofVSF
|
||||
YMPMlb8N8usnJc4wC5tp7Q+a4rJHTGepjJH2EMBGyBkUxC1+gOy2dJV9QorJXpxf
|
||||
QEm9hOINpxnDENLkhswOFvZn+sMJj0uosF+fkLv4uowpuYt+30NR+Rx1Ah0AwPlJ
|
||||
zxzOj2RIHxXp/HY2aZf3JdOTKVpPnZ4pBQKCAQA1zk6QcNFgPlIocQxvuqqjNOZM
|
||||
VTGJs+iEWf9On32UhlRTegcdYtLN75MzOVfBrCqZCpEpO1fH00JwCCJTJrdWO33/
|
||||
p4O/k32KLTK77xGJaJWCtOidllqFAPIiqfPp+fL3aJMvsWZrhpnLwgKI1Q2xHlNs
|
||||
BKmBNT86xwkjqDoigdj+HzocrhfqsRPJ5M1ESINkZkkpKljpF4lsisn6VGgfuHBI
|
||||
rKeE4RDRD5nZ7RNby4dq+xDiMaROQ9DQMtsBSqnt5Y34BOl7D2SoFQILkQ1ac3Zi
|
||||
+lg2OwzPwXEu9ur8fpF+eUA5LM73nK2jYq54q9kKwf2tCUIxemOtshphuxhfA4IB
|
||||
BQACggEAaTfsNDdG+SCALKV55SfcrgejkZN4/+a2fg1LU81tWACSOsY03BULzexa
|
||||
VS5Ji7VylFxdOEfrHRie1RcDm9K22i+b0M66jZAa24Es7s3paIhvuziwOlXkLTW0
|
||||
Iejrq62RYvYGPqgOXIk/ZEF8qx7nVV7veejQ66KEcZr+iSFRb06GjYsHtr3IHZAC
|
||||
8PB1GyxWKH+EgBPY4FPBKcU6dNnvB871UlWuso9Z5xoacyz5RKhfE2b7PaU4NpCJ
|
||||
N/871qIzCaD8kwC32042wHohTDHijSvwijjiY9twFQGcaTEkenFG6yHEXSg54Qk1
|
||||
ZJMV1HnACFLOjJNdJEn5LohpfS4yow==
|
||||
-----END PUBLIC KEY-----`;
|
||||
|
||||
const ED25519_PRIVKEY = `-----BEGIN PRIVATE KEY-----
|
||||
MC4CAQAwBQYDK2VwBCIEIC18vtoHINC8Mo9dTIqOrBs3J28ZvHrwzRq57g2kpV98
|
||||
-----END PRIVATE KEY-----`;
|
||||
|
||||
/*
|
||||
const ED25519_PUBKEY = `-----BEGIN PUBLIC KEY-----
|
||||
MCowBQYDK2VwAyEAELP6AflXwsuZ5q4NDIO0LP2iCdKRvds4nwsUmRhOw3g=
|
||||
-----END PUBLIC KEY-----`;
|
||||
*/
|
||||
|
||||
const ED448_PRIVKEY = `-----BEGIN PRIVATE KEY-----
|
||||
MEcCAQAwBQYDK2VxBDsEOWdGJ06bDcWznJhBoQqPeTfsCe+AvBv1n7KfIGYzR4tv
|
||||
1kcwHnbxlemnCMgqvbrRXaLuFUBysUZThA==
|
||||
-----END PRIVATE KEY-----`;
|
||||
|
||||
/*
|
||||
const ED448_PUBKEY = `-----BEGIN PUBLIC KEY-----
|
||||
MEMwBQYDK2VxAzoAVN8kG0TMVyGOu/OvBTe8H0Wi4HJrQAlSv4XLwJbkuoi4EeRl
|
||||
EHQwXsNYLZTtY2Jra6AWhbVYYaEA
|
||||
-----END PUBLIC KEY-----`;
|
||||
*/
|
||||
|
||||
TestRegister.addTests([
|
||||
{
|
||||
name: "Public Key from Private Key: Missing footer",
|
||||
input: RSA_PRIVKEY_PKCS1.substring(0, RSA_PRIVKEY_PKCS1.length / 2),
|
||||
expectedOutput: "PEM footer '-----END RSA PRIVATE KEY-----' not found",
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "Public Key from Private Key",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
|
||||
// test RSA
|
||||
{
|
||||
name: "Public Key from Private Key: RSA PKCS#1",
|
||||
input: RSA_PRIVKEY_PKCS1,
|
||||
expectedOutput: (RSA_PUBKEY + "\n").replace(/\r/g, "").replace(/\n/g, "\r\n"),
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "Public Key from Private Key",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Public Key from Private Key: RSA PKCS#8",
|
||||
input: RSA_PRIVKEY_PKCS8,
|
||||
expectedOutput: (RSA_PUBKEY + "\n").replace(/\r/g, "").replace(/\n/g, "\r\n"),
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "Public Key from Private Key",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
|
||||
// test EC certificate
|
||||
{
|
||||
name: "Public Key from Private Key: EC SEC1",
|
||||
input: EC_P256_PRIVKEY_SEC1,
|
||||
expectedOutput: (EC_P256_PUBKEY + "\n").replace(/\r/g, "").replace(/\n/g, "\r\n"),
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "Public Key from Private Key",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Public Key from Private Key: EC PKCS#8",
|
||||
input: EC_P256_PRIVKEY_PKCS8,
|
||||
expectedOutput: (EC_P256_PUBKEY + "\n").replace(/\r/g, "").replace(/\n/g, "\r\n"),
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "Public Key from Private Key",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
|
||||
// test DSA
|
||||
{
|
||||
name: "Public Key from Private Key: DSA Traditional",
|
||||
input: DSA_PRIVKEY_TRAD,
|
||||
expectedOutput: (DSA_PUBKEY + "\n").replace(/\r/g, "").replace(/\n/g, "\r\n"),
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "Public Key from Private Key",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Public Key from Private Key: DSA PKCS#8",
|
||||
input: DSA_PRIVKEY_PKCS8,
|
||||
expectedOutput: "DSA Private Key in PKCS#8 is not supported",
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "Public Key from Private Key",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
|
||||
// test EdDSA
|
||||
{
|
||||
name: "Public Key from Private Key: Ed25519",
|
||||
input: ED25519_PRIVKEY,
|
||||
expectedOutput: "Unsupported key type: Error: malformed PKCS8 private key(code:004)",
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "Public Key from Private Key",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Public Key from Private Key: Ed448",
|
||||
input: ED448_PRIVKEY,
|
||||
expectedOutput: "Unsupported key type: Error: malformed PKCS8 private key(code:004)",
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "Public Key from Private Key",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
},
|
||||
|
||||
// test multi-input
|
||||
{
|
||||
name: "Public Key from Private Key: Multiple keys",
|
||||
input: RSA_PRIVKEY_PKCS8 + "\n" + EC_P256_PRIVKEY_PKCS8,
|
||||
expectedOutput: (RSA_PUBKEY + "\n" + EC_P256_PUBKEY + "\n").replace(/\r/g, "").replace(/\n/g, "\r\n"),
|
||||
recipeConfig: [
|
||||
{
|
||||
op: "Public Key from Private Key",
|
||||
args: [],
|
||||
}
|
||||
],
|
||||
}
|
||||
]);
|
|
@ -1,62 +1,42 @@
|
|||
/**
|
||||
* Base64 tests.
|
||||
* XXTEA tests.
|
||||
*
|
||||
* @author devcydo [devcydo@gmail.com]
|
||||
*
|
||||
* @copyright Crown Copyright 2022
|
||||
* @author n1474335 [n1474335@gmail.com]
|
||||
* @copyright Crown Copyright 2024
|
||||
* @license Apache-2.0
|
||||
*/
|
||||
import TestRegister from "../../lib/TestRegister.mjs";
|
||||
|
||||
TestRegister.addTests([
|
||||
{
|
||||
name: "XXTEA",
|
||||
name: "XXTEA Encrypt and Decrypt",
|
||||
input: "Hello World! 你好,中国!",
|
||||
expectedOutput: "QncB1C0rHQoZ1eRiPM4dsZtRi9pNrp7sqvX76cFXvrrIHXL6",
|
||||
reecipeConfig: [
|
||||
expectedOutput: "Hello World! 你好,中国!",
|
||||
recipeConfig: [
|
||||
{
|
||||
args: "1234567890"
|
||||
"op": "XXTEA Encrypt",
|
||||
"args": [{ "option": "UTF8", "string": "1234567890" }]
|
||||
},
|
||||
{
|
||||
"op": "XXTEA Decrypt",
|
||||
"args": [{ "option": "UTF8", "string": "1234567890" }]
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "XXTEA",
|
||||
name: "XXTEA Encrypt",
|
||||
input: "ნუ პანიკას",
|
||||
expectedOutput: "PbWjnbFmP8Apu2MKOGNbjeW/72IZLlLMS/g82ozLxwE=",
|
||||
reecipeConfig: [
|
||||
expectedOutput: "3db5a39db1663fc029bb630a38635b8de5bfef62192e52cc4bf83cda8ccbc701",
|
||||
recipeConfig: [
|
||||
{
|
||||
args: "1234567890"
|
||||
"op": "XXTEA Encrypt",
|
||||
"args": [{ "option": "UTF8", "string": "1234567890" }]
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "XXTEA",
|
||||
input: "ნუ პანიკას",
|
||||
expectedOutput: "dHrOJ4ClIx6gH33NPSafYR2GG7UqsazY6Xfb0iekBY4=",
|
||||
reecipeConfig: [
|
||||
{
|
||||
args: "ll3kj209d2"
|
||||
},
|
||||
"op": "To Hex",
|
||||
"args": ["None", 0]
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "XXTEA",
|
||||
input: "",
|
||||
expectedOutput: "Invalid input length (0)",
|
||||
reecipeConfig: [
|
||||
{
|
||||
args: "1234567890"
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "XXTEA",
|
||||
input: "",
|
||||
expectedOutput: "Invalid input length (0)",
|
||||
reecipeConfig: [
|
||||
{
|
||||
args: ""
|
||||
},
|
||||
],
|
||||
},
|
||||
}
|
||||
]);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue