ton3-core
Version:
TON low-level API tools
50 lines • 1.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.crc32cBytesLe = exports.crc16BytesBe = exports.crc32c = exports.crc16 = void 0;
const crc16 = (data) => {
const POLY = 0x1021;
const bytes = new Uint8Array(data);
const int16 = bytes.reduce((acc, el) => {
let crc = acc ^ (el << 8);
for (let i = 0; i < 8; i++) {
crc = (crc & 0x8000) === 0x8000
? (crc << 1) ^ POLY
: crc << 1;
}
return crc;
}, 0) & 0xffff;
const [uint16] = new Uint16Array([int16]);
return uint16;
};
exports.crc16 = crc16;
const crc16BytesBe = (data) => {
const crc = crc16(data);
const buffer = new ArrayBuffer(2);
const view = new DataView(buffer);
view.setUint16(0, crc, false);
return new Uint8Array(view.buffer, view.byteOffset, view.byteLength);
};
exports.crc16BytesBe = crc16BytesBe;
const crc32c = (data) => {
const POLY = 0x82f63b78;
const bytes = new Uint8Array(data);
const int32 = bytes.reduce((acc, el, i) => {
let crc = acc ^ el;
for (let i = 0; i < 8; i++) {
crc = crc & 1 ? (crc >>> 1) ^ POLY : crc >>> 1;
}
return crc;
}, 0 ^ 0xffffffff) ^ 0xffffffff;
const [uint32] = new Uint32Array([int32]);
return uint32;
};
exports.crc32c = crc32c;
const crc32cBytesLe = (data) => {
const crc = crc32c(data);
const buffer = new ArrayBuffer(4);
const view = new DataView(buffer);
view.setUint32(0, crc, true);
return new Uint8Array(view.buffer, view.byteOffset, view.byteLength);
};
exports.crc32cBytesLe = crc32cBytesLe;
//# sourceMappingURL=checksum.js.map