UNPKG

@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
"use strict"; 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