You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When trying to execute forge.pki.encryptRsaPrivateKey(keypair.privateKey, password); in an Electron app, the exception n.randomBytes is not a function is thrown.
I've double checked, and this issue doesn't occur when executed in a Google Chrome tab. Here's the script I'm using:
var rsa = forge.pki.rsa; var password = "(this is retrieved elsewhere)";
rsa.generateKeyPair({bits: 2048, workers: 2}, function(err, keypair) {
var publicKey = forge.pki.publicKeyToPem(keypair.publicKey);
var privateKey = forge.pki.encryptRsaPrivateKey(keypair.privateKey, password);
});
By the looks of it, the exception is occurring when trying to execute the forge.pki.encryptRsaPrivateKey function in Electron.
Here's what the exception looks like in the DevTools:
Might be the node vs browser code path logic. I'm not sure what happens in Electron. Try running with non-minimized code so it's easier to see what it's doing. Maybe that detection code can be fixed up.
Forge is trying to use Node's crypto library, but is instead grabbing Chromium's crypto library. Normally Chromium's version would get overriden in a situation like this, but window.crypto is readonly, so it isn't happening.
I'm looking into making a PR to handle Electron the same way as Node-Webkit.
Activity
KunalOjha commentedon Sep 30, 2019
@bradleyhodges has there been any updates or workarounds to this bug?
davidlehn commentedon Oct 4, 2019
Might be the node vs browser code path logic. I'm not sure what happens in Electron. Try running with non-minimized code so it's easier to see what it's doing. Maybe that detection code can be fixed up.
mattnotmitt commentedon Apr 7, 2020
@davidlehn I'm currently having this issue, I've had a look in the minified JS and no
require('crypto')call exists.ben-yocum commentedon May 22, 2020
Easy workaround:
A quick explanation of what's happening:
Forge is trying to use Node's
cryptolibrary, but is instead grabbing Chromium'scryptolibrary. Normally Chromium's version would get overriden in a situation like this, butwindow.cryptois readonly, so it isn't happening.I'm looking into making a PR to handle Electron the same way as Node-Webkit.
Fix for issue digitalbazaar#602. Chrome's window.crypto property is r…
ben-yocum commentedon May 26, 2020
PR submitted #782
Thulof commentedon Mar 1, 2025
I have created a new PR #1110 to fix it.