@airgap/coinlib-core
Version:
The @airgap/coinlib-core is a protocol agnostic library to prepare, sign and broadcast cryptocurrency transactions.
39 lines • 1.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var createHash = require("../dependencies/src/create-hash-1.2.0/index");
var errors_1 = require("../errors");
var coinlib_error_1 = require("../errors/coinlib-error");
var sha256hash = function (input) {
var hash = createHash('sha256');
hash.update(input);
return hash.digest();
};
var checkSum = function (payload) {
return sha256hash(sha256hash(payload)).slice(0, 4);
};
var bs64check = {
encode: function (input) {
if (!Buffer.isBuffer(input)) {
input = Buffer.from(input);
}
var checksum = checkSum(input);
var payloadWithChecksum = Buffer.concat([input, checksum], input.length + 4);
return payloadWithChecksum.toString('base64');
},
decode: function (input) {
if (!Buffer.isBuffer(input)) {
input = Buffer.from(input, 'base64');
}
var payload = input.slice(0, -4);
var checksum = input.slice(-4);
var newChecksum = checkSum(payload);
// tslint:disable-next-line:no-bitwise
if ((checksum[0] ^ newChecksum[0]) | (checksum[1] ^ newChecksum[1]) | (checksum[2] ^ newChecksum[2]) | (checksum[3] ^ newChecksum[3])) {
throw new errors_1.ConditionViolationError(coinlib_error_1.Domain.UTILS, 'bs64check checksum does not match');
}
return payload;
},
checkSum: checkSum
};
exports.default = bs64check;
//# sourceMappingURL=base64Check.js.map