Для пошаговой отладки рекомендуется установить debugger
github.com/node-inspector/node-inspector
реализация PKCS #7 «Cryptographic Message Syntax Standard»
получилась такой:
var forge = require('node-forge');
var fs = require('fs');
var keyFile = fs.readFileSync("./RSA256_......p12", 'binary');
var p12Asn1 = forge.asn1.fromDer(keyFile);
// pkcs12 с паролем
var p12 = forge.pkcs12.pkcs12FromAsn1(p12Asn1, '123456');
var bags = p12.getBags({bagType: forge.pki.oids.certBag});
// Сертификат
var certBag = bags[forge.pki.oids.certBag][0];
var cert = certBag.cert;
//console.log(forge.pki.certificateToPem(cert));
//-----BEGIN CERTIFICATE-----
// Приватный ключ
var keyBags = p12.getBags({bagType: forge.pki.oids.pkcs8ShroudedKeyBag});
var keyBag = keyBags[forge.pki.oids.pkcs8ShroudedKeyBag][0];
var privateKey = keyBag.key;
//console.log(forge.pki.privateKeyToPem(privateKey));
//-----BEGIN RSA PRIVATE KEY-----
// Публичный ключ, если нужно
var publicKey = forge.pki.setRsaPublicKey(privateKey.n, privateKey.e);
//console.log(forge.pki.publicKeyToPem(publicKey));
//-----BEGIN PUBLIC KEY-----
// create a p7 enveloped message
var p7 = forge.pkcs7.createEnvelopedData();
// add certificate as recipient
// шифруем сертификатом от соответствующего приватного ключа
p7.addRecipient(cert);
// set content
p7.content = forge.util.createBuffer();
p7.content.putString('content to be encrypted');
// encrypt
p7.encrypt();
//convert a message to PEM
var pem = forge.pkcs7.messageToPem(p7);
//console.log(pem);
//-----BEGIN PKCS7-----
// обратная операция. Дешифровка
// convert a message from PEM
p7 = forge.pkcs7.messageFromPem(pem);
var recipient = p7.findRecipient(cert);
// decrypt
// дешифруем приватным ключом от соответствующего сертификата
p7.decrypt(p7.recipients[0], privateKey);
console.log(p7.content.data);
// Должно показать
//content to be encrypted