Open
Description
I've an encrypted PEM key that I would like to feed into crypto.subtle.importKey
. I can successfully decrypt the key via pki.decryptRsaPrivateKey
, but I'm failing to make progress beyond that.
import forge from 'node-forge'
const key = `
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIu1+bbUTCodgCAggA
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBCfvVDbZMTGx6A4eXBxXdTtBIIE
0IlJLqI5V1b1CPLHWGlQ2m3TQyQUZv5stxhTgTfyS1+TwldqKOqXEimPISvz63rO
Mz07abeEa7Pz/97uNst9pkd6XMIa/X/B0CdYMt4FQDVvdIRJgsW9t9lxXxNRvzIO
ljXoAywXq5RBSswnPiB/z+luzj3EJeDidaNJ2r9PQAFVcNYZn+1gwSIPe5llkZqM
GjhxscMlIYllUNWo37WoLkock0pJbQ6b+HJJMBxJzo4lefUIgZQ7s4JWwc1OIvHc
K4p16GTd7wz3FcOtrfSr7QsQ2oPMGADkDr603RaQoM13J43prnJxeTnHgnQNhqoe
Aw/19Y8hUyqKJ6ko1PwWCOibmu/oAnEJVR/BeuPD24mIXTqHUDg5RustKiuV7vgD
qD2B1rmZCnls1Liu6Ci4Q56kuC/gedtGOlffc4zYslGyN+MqQyaRbjfqg7gL5l/l
MZamqIcebI3vaWB6d7BvrnJJJVZaTtWYTzdt7btnHcUwDeTrk333GHIJZy2UJjvN
BIgNTmIgrewRKshQfGyx69VLh+eeCrZ+xhlkONtsdrqJs6kCqX4G6+sxAo638a73
h+cYD6+O6yZOD/4XbxbrpfL8WL6vSApjswMPG8jS9ExtTwgR9yoCFoW8cwFdLAUw
mbQaoMHBL83ZiJDr69qEld0d2GDnZUYHTFFyi7NKYch/VnXbsds6N2Bi2NoNb0CD
6ABaG3HaGF2OfQssGKViDM366Jnmki1/1o3SyvFizLns4ZlCo/NXpakyFfseFKrC
7SyHP2mv8YFq/n1VvsL1YL7lhWb3gxqA+yqmkbsDpy2HToHx03RoL7h3r4tN6WyT
TI14gZ0jx934x1lYjasVx3qnGlRQDjOMlYDp41/YVLqQarJX5kpuUOwwBpubPHti
L6bYnkaTytZ/CKR5P2O42qSUMXyY4u2G/oMURukjSB2xZn0+O3BVwjLkx4IsDkCC
cGcygSV1b21CGAuTLDNwPTHTTkl1BzebfHcvkT5TKbNvMDpsKP1Ge5u26uZrhOg2
c+UtLmMU1jroYhJd+qdG7T1w3lbKkyqABbP4HNOCbunDJwHmLFz3414SSxlQHHA7
DBFGu9E1yHXUleshyYq3Tr+Vkod1BptwHvTkvNIPsAKRPZoTAFT0lM7JUE/+P7KF
qlVdguCREQBt6IRL1s8SZdAZp9g/dDljm0SzTgHmSmGkMmNB87cn7nz+VF/7wKMG
KpW28cisUQsOt5NyboJXzFp1YYu2XOPXb9wzP2rj2JyFX9tMy4SzBU373n3J0d4d
5XKg6OYMqXGZuouNBfpd7CvqBJa3K7i5pso3ZIaQ797ZUH/Dq0XRNK9/KZ8G4MXc
BZJOWqBDZp3jQEk0husuE4/Q1jzf+mInfirl9fSNKewKHjsY8PlaeiFWfOuLm7lp
XW/ToHlcVT74c6wVtyZH/OA9M/GsIPJH0rTusT/2MwW/ajlFWPqK7ePGRr/KiB7g
05PZx+6FV8LmQ+SVNCchvoicxjf2O5E2RZsf7RwznVVCiWjy2/aScG02GQTX3f4q
3U+tMx+KhyG14cChq/K3eAuX71EKHpZrK3mbud8ao1+0KWOkXKtaxtWX96N6ek8d
T8mBr83IZ8bx7Ra6tiaYtWWiNf1TVqVhdx7LMDJYwRSq
-----END ENCRYPTED PRIVATE KEY-----`;
const privateKey = forge.pki.decryptRsaPrivateKey(key, '123');
// Convert the private key to a PKCS#8 ASN.1 structure
const privateKeyInfo = forge.pki.wrapRsaPrivateKey(privateKey);
const privateKeyDer = forge.asn1.toDer(privateKeyInfo).getBytes();
// Convert DER to ArrayBuffer
const privateKeyBuffer = new Uint8Array(privateKeyDer.length);
for (let i = 0; i < privateKeyDer.length; i++) {
privateKeyBuffer[i] = privateKeyDer.charCodeAt(i);
}
crypto.subtle.importKey(
"pkcs8", // PKCS#8 format for private keys
privateKeyBuffer.buffer,
{
name: "RSASSA-PKCS1-v1_5",
hash: "SHA-256",
},
false,
["sign"]
).then((privateKey) => {
console.log(privateKey)
});
^ here on line where I call wrapRsaPrivateKey
I'm getting
TypeError: Cannot read properties of undefined (reading 'length')
at util.ByteStringBuffer.putBytes (/Users/gostrolucky/Documents/xxx/node_modules/node-forge/lib/util.js:288:41)
at asn1.toDer (/Users/gostrolucky/Documents/xxx/node_modules/node-forge/lib/asn1.js:711:15)
private key was generated with openssl genrsa -passout pass:123 -aes256
Metadata
Metadata
Assignees
Labels
No labels