@aeternity/aepp-calldata
Version:
Aeternity data serialization library
54 lines (51 loc) • 1.8 kB
JavaScript
;
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;