Как сделать Detached GOST R 34.10 CMS подпись на Node.js? Собственно вопрос: как сделать CMS подпись в Node.js? Есть КриптоПРОшный ключ экспортированный в формат PKCS#12. Подпись необходима для протокола OAuth2 для ЕСИА, и хочется обойтись без КриптоПРО. Openssl: GOST2001-GOST89-GOST89, GOST94-GOST89-GOST89 crypto.getCiphers: GOST 28147-89, gost89, gost89-cnt
Для создания Detached GOST R 34.10 CMS подписи на Node.js, вы можете воспользоваться библиотекой node-forge, которая поддерживает работу с CMS. Вот пример кода, который показывает как создать подпись с использованием node-forge:
Обратите внимание, что этот код является примером и нужно будет настроить параметры под ваш ключ и данные. Также убедитесь, что у вас установлена и настроена библиотека node-forge перед использованием этого кода.
Для создания Detached GOST R 34.10 CMS подписи на Node.js, вы можете воспользоваться библиотекой node-forge, которая поддерживает работу с CMS. Вот пример кода, который показывает как создать подпись с использованием node-forge:
const forge = require('node-forge');// Загрузка закрытого ключа из PKCS#12 файла
const p12File = fs.readFileSync('path/to/pkcs12/file.p12', 'binary');
const p12Asn1 = forge.asn1.fromDer(p12File);
const p12 = forge.pkcs12.pkcs12FromAsn1(p12Asn1, false, 'password');
const key = p12.getBags({bagType: forge.pki.oids.pkcs8ShroudedKeyBag})[forge.pki.oids.pkcs8ShroudedKeyBag][0];
// Создание подписи
const md = forge.md.sha256.create();
const content = forge.util.createBuffer('Your data to sign');
const signed = forge.pkcs7.createSignedData();
signed.content = forge.util.createBuffer(content.getBytes());
signed.addCertificate(p12.getBags({bagType: forge.pki.oids.certBag})[forge.pki.oids.certBag][0]);
signed.addSigner({
key: key.key,
certificate: p12.getBags({bagType: forge.pki.oids.certBag})[forge.pki.oids.certBag][0],
digestAlgorithm: forge.pki.oids.sha1
});
signed.sign();
const signedData = signed.toDer();
Обратите внимание, что этот код является примером и нужно будет настроить параметры под ваш ключ и данные. Также убедитесь, что у вас установлена и настроена библиотека node-forge перед использованием этого кода.