lcryptowrap v3.0.15
Библиотека с криптографией
win, mac, linux (glibc)
Linux with musl work too
Installation
$ npm install lcryptowrap
or
$ yarn add lcryptowrap
$ yarn build
--arch=ia32
--target=9.0.5 --dist-url=https://atom.io/download/electron
Usage
const crypto = require('lcryptowrap');
Functions
CreateDigest, CreateMac, CreateHmac,
GenRandomCTR, GenRandomHMAC,
GenRandomIntel, GenRandomSystem,
CryptoRandom, CryptoPseudoRandom, RandomFIPS,
GenEncryptKey,
KeyExpansion, KeyConversion,
Encrypt, Decrypt,
CreateToken, DecodeToken,
CreateSignDigest, VerifySignDigest,
CreateSign, VerifySign,
EncryptData, DecryptData,
Protect, Unprotect,
EncryptP7S, DecryptP7S,
CreateSignP7S, VerifySignP7S, ConvertP7S,
GenPrivateKey, SetPrivateKey,
KeyProtect, KeyUnprotect, ChangePassword,
GetKeyBytes, GetPublicKey,
ConvertPrivateKey, ConvertPublicKey,
CreateRequest, VerifyRequest, ConvertRequest, GetRequestInfo,
CreateCertificate, VerifyCertificate, ConvertCertificate, RevokeCertificate,
CreateCRL, VerifyCRL, ConvertCRL,
CreateP7B, ConvertP7B,
BELS_shareKey, BELS_recoveKey
Реализация протокола BPACE двумя сторонами
BPACE_initA
BPACE_sideA_step1
BPACE_sideA_step2
BPACE_sideA_final
BPACE_initB
BPACE_sideB_step1
BPACE_sideB_step2
BPACE_sideB_final
API
CRYPTO.
- CreateDigest(algorithm, data) - вычисление хэш-значения от сообщения
- CreateMac(data, key) - вычисление mac-значения
- CreateHmac(data, key) - вычисление hmac-значения
- GenRandomCTR(number, key, iv) - генерация псевдослучайных чисел в режиме CTR
- GenRandomHMAC(number, key, iv) - генерация псевдослучайных чисел в режиме HMAC
- GenRandomIntel(size) - генерация случайности Intel (если возможно)
- size - REQUIRED - число байт
- GenRandomSystem(size) - генерация случайности системной
- size - REQUIRED - число байт
- CryptoRandom(random) - генерация случайности на основе функции хэширования
- random - REQUIRED - байты случайности (33+)
- CryptoPseudoRandom(number, random) - генерация случайности на СТБ 34.101.47
- RandomFIPS(random) - проверка FIPS 140-2 случайности 2500 байт (optimal)
- random - OPTIONAL - случайность байт для проверки
- GenEncryptKey(random) - генерация 32байтового ключа
- random - OPTIONAL - случайность байт
- KeyExpansion(key) - функция расширения ключа СТБ 34.101.31-2011 п 7.1
- key - REQUIRED - личный ключ 16, 24, 32
- KeyConversion(key, newKeyCount, level, header) - функция преобразования ключа СТБ 34.101.31-2011 п 7.2
- key - REQUIRED - личный ключ 16, 24, 32
- newKeyCount - REQUIRED - размер преобразованного ключа в байтах
- level - OPTIONAL - уровень ключа
- header - OPTIONAL - заголовок преобразованного ключа
- Encrypt(algorithm, data, key, iv) - зашифрование данных
- Decrypt(algorithm, data, key) - расшифрование данных
- CreateToken(key, pubKey) - установка защиты на ключ
- DecodeToken(token, private_token, password) - снятие защиты с ключа
- CreateSignDigest(algorithm, digest, private_token, password) - подпись хэш-значения от сообщения
- VerifySignDigest(algorithm, digest, pubKey, sign) - подпись сообщения
- CreateSign(data, private_token, password) - подпись сообщения
- VerifySign(data, pubKey, sign) - подпись сообщения
- EncryptData(algorithm, data, pubKey) - зашифрование данных с установкой защиты на ключ шифрования для получателя
- DecryptData(algorithm, data, token, private_token, password) - расшифрование данных
- Protect(algorithm, data, private_token, password, pubKey) - зашифрование данных с установкой защиты на ключ шифрования для получателя и подписью отправителя
- Unprotect(algorithm, data, token, private_token, password, pubKey, sign) - снятие защиты с сообщения с проверкой подписи отправителя
- algorithm - REQUIRED - имя алгоритма
- belt-ctr256, belt-ecb256, belt-cbc256, belt-cfb256
- data - REQUIRED - данные
- token - REQUIRED - токен ключа
- private_token - REQUIRED - токен личного ключа получателя
- password - OPTIONAL - пароль к токену личного ключа или null
- pubKey - REQUIRED - открытый ключ или сертификат отправителя
- sign - REQUIRED - подпись
- algorithm - REQUIRED - имя алгоритма
- EncryptP7S(algorithm, data, certificate, format, params) - защита сообщения
- algorithm - REQUIRED - имя алгоритма
- belt-ctr256, belt-ecb256, belt-cbc256, belt-cfb256
- data - REQUIRED - данные
- pubKey - REQUIRED - сертификат получателя в байтах
- format - OPTIONAL - формат выходного сообщение
- 0 - FORMAT_PEM
- 1 - FORMAT_ASN1
- 2 - FORMAT_SMIME
- params - OPTIONAL - формат выходного сообщение
- FORMAT_PKCS7_USE_KEYID - использование subjectKeyIdentifier
- algorithm - REQUIRED - имя алгоритма
- DecryptP7S(data, private_token, password) - снятие защиты с сообщения
- CreateSignP7S(data, private_token, password, certificate, format, params) - подпись сообщения с выходных форматом
- data - REQUIRED - данные
- private_token - REQUIRED - токен личного ключа отправителя
- password - OPTIONAL - пароль к токену личного ключа или null
- certificate - REQUIRED - сертификат отправителя
- format - REQUIRED - выходной формат
- 0 - FORMAT_PEM
- 1 - FORMAT_ASN1
- 2 - FORMAT_SMIME
- params - OPTIONAL - формат выходного сообщение
- VerifySignP7S(sign, data, certificate) - проверка подписи
- *ConvertP7S(format, data) - конвертирование подписанных данные
- GenPrivateKey(level, password, format) - генерация токена личного ключа (защищещнного или незащищенного)
- SetPrivateKey(level, key, password, format) - установка личного ключа в токен
- KeyProtect(private_key, password, format) - установка защиты на личный ключ
- KeyUnprotect(private_key, password, format) - снятие защиты с личного ключа
- ChangePassword(private_key, passwordOld, passwordNew, format) - изменение пароля
- GetKeyBytes(private_token, password) - получение байтов личного и открытого ключей
- GetPublicKey(data, format) - получение открытого ключа из сертификата или запроса на выпуск сертификата
- *ConvertPrivateKey(format, key) - конвертирование личного ключа
- *ConvertPublicKey(format, key) - конвертирование открытого ключа
- CreateRequest(private_token, password, data, config, format) - генерация запроса на выпуск сертификата
- private_token - REQUIRED - токен личного ключа
- password - OPTIONAL - пароль к токену личного ключа или null
- data - OPTIONAL - данные для запроса на выпуск сертификата. Заполнить RequestINFO требуемыми параметрами.
- config - OPTIONAL - дополнительный файл конфигурации,
- format - OPTIONAL - дополнительный файл конфигурации
- VerifyRequest(data) - проверка запроса на выпуска сертификата
- data - REQUIRED - запрос на выпуск сертификата
- *ConvertRequest(format, data) - конвертирование запроса на сертификат
- format - вариант выходной кодировки
- 0 - FORMAT_PEM
- 1 - FORMAT_ASN1
- data - запроса на сертификат
- format - вариант выходной кодировки
- GetRequestInfo(data) - получение данных и запроса на выпуск сертификата
- data - REQUIRED - запрос на выпуск сертификата
- CreateCertificate(request, private_token, password, certificate, config, db, serial, selfsign, format) - выпуск сертификата
- request - REQUIRED - запрос на выпуск сертификата
- private_token - REQUIRED - токен личного ключа издателя
- password - OPTIONAL - пароль к токену личного ключа или null
- certificate - OPTIONAL - сертификат издателя или null при самоподписанном сертификате
- config - OPTIONAL - файл дополнительной конфигурации или null
- db - OPTIONAL - файл БД или null при первоначальном старте
- serial - OPTIONAL - серийный номер в HEX или null если в файле конфигурации установлен параметр генерации
- selfsign - OPTIONAL - самоподписанный сертификат (true or false)
- format - OPTIONAL - выходной формат
- 0 - FORMAT_PEM
- 1 - FORMAT_ASN1
- VerifyCertificate(certificate, chain, crl) - проверка сертификата
- *ConvertCertificate(format, data) - конвертирование сертификата
- format - вариант выходной кодировки
- 0 - FORMAT_PEM
- 1 - FORMAT_ASN1
- data - сертификат
- format - вариант выходной кодировки
- RevokeCertificate(certificate, db, reason, config) - отзыв сертификата
- certificate - REQUIRED - отзываемый сертификат
- db - REQUIRED - файл БД
- reason - причина отзыва сертификата
- ReasonUnspecified - "unspecified";
- ReasonKeyCompromise - "keyCompromise";
- ReasonCACompromise - "CACompromise";
- ReasonAffiliationChanged - "affiliationChanged";
- ReasonSuperseded - "superseded";
- ReasonCessationOfOperation - "cessationOfOperation";
- ReasonCertificateHold - "certificateHold";
- ReasonRemoveFromCRL - "removeFromCRL";
- config - OPTIONAL - файл дополнительной конфигурации или null
- CreateCRL(private_token, password, certificate, config, db, serial, format) - выпуск списка отозванных сертификатов
- private_token - REQUIRED - токен личного ключа издателя
- password - OPTIONAL - пароль к токену личного ключа или null
- certificate - REQUIRED - сертификат издателя
- config - OPTIONAL - файл дополнительной конфигурации или null
- db - REQUIRED - файл БД или null при пустой БД
- serial - REQUIRED - серийный номер по порядку
- format - вариант выходной кодировки
- 0 - FORMAT_PEM
- 1 - FORMAT_ASN1
- *VerifyCRL(datam certificate) - проверка списка отозванных сертификатов
- *ConvertCRL(format, data) - конвертирование списка отозванных сертификатов
- *CreateP7B(certificate, crl, format) - создание цепочки доверия
- certificate - массив сертификатов
- crl - массив списков отозванных сертификатов
- format - вариант выходной кодировки
- 0 - FORMAT_PEM
- 1 - FORMAT_ASN1
- *ConvertP7B(format, data) - конвертирование цепочки доверия
- *BELS_shareKey(users, threshold, key, format) - разделение секрета
- *BELS_recoveKey(secret) - восстановление секрета
- secret - REQUIRED - массив частичных секретов и паролей к ним
Примеры использования в example.js
CreateDigest
var incomeData = "some data";
var createDigest = crypto.CreateDigest("bash256", incomeData);
console.log(`CreateDigest: ${createDigest.digest.toString("hex")}`);
//=> '020e726d12bf9bb143e8932224f2744e29c7976558640d5d77736d04a06de5cd'
GenEncryptKey
var genEncryptKey = crypto.GenEncryptKey();
console.log(`GenEncryptKey ${genEncryptKey.privKey.toString("hex")}`);
// => 'c4e274feb88e44cf6397682dd9f25b7fd3777b1995b9a777cfebb48ac4fd3692'
CreateMac
var createMac = crypto.CreateMac(incomeData, genEncryptKey.privKey);
console.log(`CreateMac: ${createMac.digest.toString("hex")}`);
//=> 'a885f24aa247b2f5'
CreateHmac
var createHmac = crypto.CreateHmac(incomeData, genEncryptKey.privKey);
console.log(`CreateHmac: ${createHmac.digest.toString("hex")}`);
//=> 'e4c7dc93cb3606a9db174d84e932d8e6f53f5b10ecbe4fbbd9d506e63738c6d3'
GenPrivateKey
var genPrivateKey = crypto.GenPrivateKey(128, "12345678");
console.log(`${genPrivateKey.privKey.toString()}`);
console.log(`${genPrivateKey.pubKey.toString()}`);
/*=>
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIGdMFgGCSqGSIb3DQEFDTBLMCoGCSqGSIb3DQEFDDAdBAjZnQpHOsPPAwICCAAw
DQYJKnAAAgAiZS8MBQAwHQYJKnAAAgAiZR8rBBD/r17X+dSCKOfk922d7MWyBEE1
FBW22GOCHBoygxwVPH5OMwXQr8lGFOPxmO3jHcnl3vcx0ioCLOp08Jsx2tI490/f
gQaaSyc3yW3g3q4RF+YYCA==
-----END ENCRYPTED PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MF0wGAYKKnAAAgAiZS0CAQYKKnAAAgAiZS0DAQNBAPE4W1JJZfRCQRsv+qptCTHX
fsCEsuFKANXmQtQ5yXvqiFdgWITUAGp6QUr71lIoCoErbhcMg8KcJkZiEkdW1+4=
-----END PUBLIC KEY-----
*/
GetPrivateKey
var getPrivateKey = crypto.GetPrivateKey(genPrivateKey.privKey, "12345678");
console.log(`GetPrivateKey: ${getPrivateKey.privKey.toString("hex")}`);
//=> '62eb4b2541fde9134cdd14de142a0f8df0f552f3696aeb9d90d60d84a65b1b54'
Encrypt + CreateToken - DecodeToken + Decrypt
// Encrypt + CreateToken
var encrypt = crypto.Encrypt("belt-ctr256", incomeData, genEncryptKey.privKey);
console.log(`Encrypt: ${encrypt.data.toString("hex")}`);
//=> 'b34dd30531982655ab'
var createToken = crypto.CreateToken(
genEncryptKey.privKey,
genPrivateKey.pubKey
);
console.log(`CreateToken: ${createToken.token.toString("hex")}`);
//=> '36035533f4f5be514abec2b988479b945d7789f3bd0f10ab23e722b457dc945ff93a39a9bc5605cc7d96ef1f67f1d8e6f58b687d9166bbe7df434ea715e2beb5b34df1719a2f59f8663b13db157f32c4'
// DecodeToken + Decrypt
var decodeToken = crypto.DecodeToken(
createToken.token,
genPrivateKey.privKey,
"12345678"
);
console.log(`DecodeToken: ${decodeToken.privKey.toString("hex")}`);
//=> '6cc3769390b36ee80dee04809ed5a0cd8be9c0da5df92079070390631f17eedf7'
var decrypta = crypto.Decrypt("belt-ctr256", encrypt.data, decodeToken.privKey);
console.log(`Decrypt: ${decrypt.data.toString()}`);
//=> 'some data'
EncryptData - DecryptData
var encryptData = crypto.EncryptData(
"belt-ctr256",
incomeData,
genPrivateKey.pubKey
);
console.log(`EncryptData: ${encryptData.data.toString("hex")}`);
console.log(`EncryptData: ${encryptData.token.toString("hex")}`);
//=> '57cbd4dcccaaab3d2e'
//=> '8710303c75969f6a44024fdd75e3f18048f6f6b52e2f6e486e7880d8e82289510b0f2c9eabc837928ce106167f09188616b72b08272c6c61b5badeea9275dadfbddca50d0afd955b35c8ebd7916bc036'
var decryptData = crypto.DecryptData(
"belt-ctr256",
encryptData.data,
encryptData.token,
genPrivateKey.privKey,
"12345678"
);
console.log(`DecryptData: ${decryptData.data.toString()}`);
//=> 'some data'
CreateSign - VerifySign
var createSign = crypto.CreateSign(
incomeData,
genPrivateKey.privKey,
"12345678"
);
console.log(`${createSign.sign.toString("hex")}`);
//=> 'f55974f0dc08c7357d05e120be4ac6bd09c171edf54fdf38f48642e974e604a785f0384a44c0ee12c758ad0d8ccf3f8b'
var verifySign = crypto.VerifySign(
incomeData,
genPrivateKey.pubKey,
createSign.sign
);
console.log(`VerifySign ... ${verifySign.status}`);
//=> '0'
Configuration File
Readme config.md
RequestINFO
commonName = 2.5.4.3;
surname = 2.5.4.4;
serialNumber = 2.5.4.5;
countryName = 2.5.4.6;
localityName = 2.5.4.7;
stateOrProvinceName = 2.5.4.8;
streetAddress = 2.5.4.9;
organizationName = 2.5.4.10;
organizationalUnitName = 2.5.4.11;
title = 2.5.4.12;
description = 2.5.4.13;
searchGuide = 2.5.4.14;
businessCategory = 2.5.4.15;
postalAddress = 2.5.4.16;
postalCode = 2.5.4.17;
postOfficeBox = 2.5.4.18;
physicalDeliveryOfficeName = 2.5.4.19;
telephoneNumber = 2.5.4.20;
telexNumber = 2.5.4.21;
teletexTerminalIdentifier = 2.5.4.22;
facsimileTelephoneNumber = 2.5.4.23;
x121Address = 2.5.4.24;
internationaliSDNNumber = 2.5.4.25;
registeredAddress = 2.5.4.26;
destinationIndicator = 2.5.4.27;
preferredDeliveryMethod = 2.5.4.28;
presentationAddress = 2.5.4.29;
supportedApplicationContext = 2.5.4.30;
roleOccupant = 2.5.4.33;
seeAlso = 2.5.4.34;
userPassword = 2.5.4.35;
userCertificate = 2.5.4.36;
cACertificate = 2.5.4.37;
authorityRevocationList = 2.5.4.38;
certificateRevocationList = 2.5.4.39;
crossCertificatePair = 2.5.4.40;
name = 2.5.4.41;
givenName = 2.5.4.42;
initials = 2.5.4.43;
generationQualifier = 2.5.4.44;
x500UniqueIdentifier = 2.5.4.45;
dnQualifier = 2.5.4.46;
enhancedSearchGuide = 2.5.4.47;
protocolInformation = 2.5.4.48;
distinguishedName = 2.5.4.49;
uniqueMember = 2.5.4.50;
houseIdentifier = 2.5.4.51
supportedAlgorithms = 2.5.4.52;
deltaRevocationList = 2.5.4.53;
pseudonym = 2.5.4.65;
role = 2.5.4.72;
organizationIdentifier = 2.5.4.97
countryCode3c = 2.5.4.98;
countryCode3n = 2.5.4.99;
dnsName = 2.5.4.100;
GenRequest + VerifyRequest + GetRequestInfo
var INFO = new crypto.RequestINFO();
INFO.organizationIdentifier = "OrganizationIndentifier";
INFO.houseIdentifier = "houseIdentifier";
var genRequest = crypto.GenRequest(
genPrivateKey.privKey,
"12345678",
INFO,
null
);
console.log(`GenRequest: ${genRequest.data.toString()}`);
/*=>
-----BEGIN CERTIFICATE REQUEST-----
MIIBRjCCAQACAQIwSTELMAkGA1UEBhMCQlkxGDAWBgNVBDMMD2hvdXNlSWRlbnRp
ZmllcjEgMB4GA1UEYQwXT3JnYW5pemF0aW9uSW5kZW50aWZpZXIwXTAYBgoqcAAC
ACJlLQIBBgoqcAACACJlLQMBA0EA5qlUY94Gak/WKobNPOfN8klWHhtSWjwwNe0M
anxGaM+bKBnxHupTbLbkRjOMbGuoOxd79xfHMvpwG1eNzZbxPKBRME8GCSqGSIb3
DQEJDjFCMEAwCwYDVR0PBAQDAgSwMDEGA1UdJQQqMCgGCCsGAQUFBwMBBggrBgEF
BQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEMA0GCSpwAAIAImUtDAUAAzEAW3jYaIQW
UCgG92Fjwri3SxYlWy7+Ckm+mRRBIc4pUY7krT4J2ZitbBuzLxml2UNx
-----END CERTIFICATE REQUEST-----
*/
var verifyRequest = crypto.VerifyRequest(genRequest.data);
console.log(`VerifyRequest ... ${verifyRequest.status}`);
// => '0'
var ReqInfo = crypto.GetRequestInfo(genRequest.data);
console.log(`GetRequestInfo ... ${ReqInfo.status}`);
console.log(`${ReqInfo.data.toString()}`);
/*=>
C=BY
houseIdentifier=houseIdentifier
organizationIdentifier=OrganizationIndentifier
*/
5 months ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago