UNPKG

@aeternity/aepp-calldata

Version:
54 lines (51 loc) 1.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getPayload = exports.encode = exports.decode = exports.addChecksum = void 0; var _sha = _interopRequireDefault(require("sha.js/sha256.js")); var _safeBuffer = require("safe-buffer"); var _FormatError = _interopRequireDefault(require("../Errors/FormatError.cjs")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const sha256hash = input => { return new _sha.default().update(input).digest(); }; const checkSumFn = payload => { return sha256hash(sha256hash(payload)).slice(0, 4); }; const addChecksum = payload => { const buffer = _safeBuffer.Buffer.from(payload); const checksum = checkSumFn(payload); return _safeBuffer.Buffer.concat([buffer, checksum], buffer.length + 4); }; exports.addChecksum = addChecksum; const getPayload = payloadWithChecksumData => { const payloadWithChecksum = _safeBuffer.Buffer.from(payloadWithChecksumData); const payload = payloadWithChecksum.slice(0, -4); const checksum = payloadWithChecksum.slice(-4); const newChecksum = checkSumFn(payload); if (!checksum.equals(newChecksum)) { throw new _FormatError.default('Invalid checksum'); } return new Uint8Array(payload); }; /** * Base64check encode given `input` * @param {String|Uint8Array} input - Data to encode * @return {String} Base64check encoded data */ exports.getPayload = getPayload; const encode = input => { return addChecksum(input).toString('base64'); }; /** * Base64check decode given `str` * @param {String} str - Data to decode * @return {Uint8Array} Base64check decoded data */ exports.encode = encode; const decode = str => { const data = _safeBuffer.Buffer.from(str, 'base64'); return getPayload(data); }; exports.decode = decode;