Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"Cannot read properties of undefined (reading 'length')" when trying to work with output of pki.decryptRsaPrivateKey #1109

Open
ostrolucky opened this issue Feb 16, 2025 · 0 comments

Comments

@ostrolucky
Copy link

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

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

No branches or pull requests

1 participant