pqp
Version:
NodeJS version of libPQP
135 lines (114 loc) • 4.47 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _asn = require('asn1.js');
var _asn2 = _interopRequireDefault(_asn);
var _nodeBitarray = require('node-bitarray');
var _nodeBitarray2 = _interopRequireDefault(_nodeBitarray);
require('../utils/polyfill');
var _private_key = require('../crypto/private_key');
var _private_key2 = _interopRequireDefault(_private_key);
var _public_key = require('../crypto/public_key');
var _public_key2 = _interopRequireDefault(_public_key);
var _conversion = require('./conversion');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var ASN1PublicKey = _asn2.default.define('ASN1PublicKey', function () {
this.seq().obj(this.key('G').bitstr());
});
var ASN1PrivateKey = _asn2.default.define('ASN1PrivateKey', function () {
this.seq().obj(this.key('H0').bitstr(), this.key('H1').bitstr(), this.key('H1inv').bitstr());
});
var ASN1Ciphertext = _asn2.default.define('ASN1Ciphertext', function () {
this.seq().obj(this.key('C0').bitstr(), this.key('C1').bitstr(), this.key('Sym').octstr());
});
var IO = function () {
function IO() {
_classCallCheck(this, IO);
}
_createClass(IO, [{
key: 'extract_der_priv_key',
value: function extract_der_priv_key(seq) {
var der = ASN1PrivateKey.decode(seq, 'pem', { label: 'PQP PRIVATE KEY' });
var priv_key = new _private_key2.default();
priv_key.H_0 = (0, _conversion.toBitArray)(der['H0']);
priv_key.H_1 = (0, _conversion.toBitArray)(der['H1']);
priv_key.H_1inv = (0, _conversion.toBitArray)(der['H1inv']);
priv_key.block_length = priv_key.H_0.length;
return priv_key;
}
}, {
key: 'get_der_priv_key',
value: function get_der_priv_key(priv_key) {
var der = ASN1PrivateKey.encode({
H0: {
data: _nodeBitarray2.default.toBuffer(priv_key.H_0),
unused: 7
},
H1: {
data: _nodeBitarray2.default.toBuffer(priv_key.H_1),
unused: 7
},
H1inv: {
data: _nodeBitarray2.default.toBuffer(priv_key.H_1inv),
unused: 7
}
}, 'pem', {
label: 'PQP PRIVATE KEY'
});
return der;
}
}, {
key: 'extract_der_pub_key',
value: function extract_der_pub_key(seq) {
var der = ASN1PublicKey.decode(seq, 'pem', { label: 'PQP PUBLIC KEY' });
var pub_key = new _public_key2.default();
pub_key.G = (0, _conversion.toBitArray)(der['G']);
pub_key.block_length = pub_key.G.length;
return pub_key;
}
}, {
key: 'get_der_pub_key',
value: function get_der_pub_key(pub_key) {
return ASN1PublicKey.encode({
G: {
data: _nodeBitarray2.default.toBuffer(pub_key.G),
unused: 7
}
}, 'pem', {
label: 'PQP PUBLIC KEY'
});
}
}, {
key: 'get_der_ciphertext',
value: function get_der_ciphertext(c_0, c_1, symmetric_stream) {
var der = ASN1Ciphertext.encode({
C0: {
data: _nodeBitarray2.default.toBuffer(c_0),
unused: 7
},
C1: {
data: _nodeBitarray2.default.toBuffer(c_1),
unused: 7
},
Sym: symmetric_stream
}, 'pem', {
label: 'PQP MESSAGE'
});
return der;
}
}, {
key: 'extract_der_ciphertext',
value: function extract_der_ciphertext(seq) {
var der = ASN1Ciphertext.decode(seq, 'pem', { label: 'PQP MESSAGE' });
var c_0 = (0, _conversion.toBitArray)(der['C0']);
var c_1 = (0, _conversion.toBitArray)(der['C1']);
var symmetric_stream = der['Sym'];
return [c_0, c_1, symmetric_stream];
}
}]);
return IO;
}();
exports.default = IO;