@okxweb3/coin-base
Version:
A base package for @ok/coin-*
95 lines • 3.46 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.sha3_512 = exports.sha3_256 = exports.ripemd160 = exports.sha512 = exports.sha256 = exports.magicHash = exports.blake2 = exports.keccak256 = exports.keccak = exports.hash160 = exports.doubleSha256 = void 0;
const sha256_1 = require("@noble/hashes/sha256");
Object.defineProperty(exports, "sha256", { enumerable: true, get: function () { return sha256_1.sha256; } });
const sha512_1 = require("@noble/hashes/sha512");
Object.defineProperty(exports, "sha512", { enumerable: true, get: function () { return sha512_1.sha512; } });
const ripemd160_1 = require("@noble/hashes/ripemd160");
Object.defineProperty(exports, "ripemd160", { enumerable: true, get: function () { return ripemd160_1.ripemd160; } });
const sha3_1 = require("@noble/hashes/sha3");
Object.defineProperty(exports, "sha3_256", { enumerable: true, get: function () { return sha3_1.sha3_256; } });
Object.defineProperty(exports, "sha3_512", { enumerable: true, get: function () { return sha3_1.sha3_512; } });
const blake2b_1 = require("@noble/hashes/blake2b");
function doubleSha256(data) {
const t = (0, sha256_1.sha256)(data);
return (0, sha256_1.sha256)(t);
}
exports.doubleSha256 = doubleSha256;
function hash160(data) {
const t = (0, sha256_1.sha256)(data);
return (0, ripemd160_1.ripemd160)(t);
}
exports.hash160 = hash160;
const keccak = function (a, bits = 256) {
const b = Buffer.from(a);
switch (bits) {
case 224: {
return Buffer.from((0, sha3_1.keccak_224)(b));
}
case 256: {
return Buffer.from((0, sha3_1.keccak_256)(b));
}
case 384: {
return Buffer.from((0, sha3_1.keccak_384)(b));
}
case 512: {
return Buffer.from((0, sha3_1.keccak_512)(b));
}
default: {
throw new Error(`Invald algorithm: keccak${bits}`);
}
}
};
exports.keccak = keccak;
const keccak256 = function (a) {
return (0, exports.keccak)(a);
};
exports.keccak256 = keccak256;
function blake2(data, bitLength, key) {
const byteLength = Math.ceil(bitLength / 8);
return (0, blake2b_1.blake2b)(data, { dkLen: byteLength, key: key });
}
exports.blake2 = blake2;
function varintBufNum(n) {
let buf;
if (n < 253) {
buf = Buffer.alloc(1);
buf.writeUInt8(n, 0);
}
else if (n < 0x10000) {
buf = Buffer.alloc(1 + 2);
buf.writeUInt8(253, 0);
buf.writeUInt16LE(n, 1);
}
else if (n < 0x100000000) {
buf = Buffer.alloc(1 + 4);
buf.writeUInt8(254, 0);
buf.writeUInt32LE(n, 1);
}
else {
buf = Buffer.alloc(1 + 8);
buf.writeUInt8(255, 0);
buf.writeInt32LE(n & -1, 1);
buf.writeUInt32LE(Math.floor(n / 0x100000000), 5);
}
return buf;
}
const MAGIC_BYTES = Buffer.from('Bitcoin Signed Message:\n');
function magicHash(message, messagePrefix) {
const messagePrefixBuffer = messagePrefix
? Buffer.from(messagePrefix, 'utf8')
: MAGIC_BYTES;
const prefix1 = varintBufNum(messagePrefixBuffer.length);
const messageBuffer = Buffer.from(message);
const prefix2 = varintBufNum(messageBuffer.length);
const buf = Buffer.concat([
prefix1,
messagePrefixBuffer,
prefix2,
messageBuffer,
]);
return doubleSha256(buf);
}
exports.magicHash = magicHash;
//# sourceMappingURL=hash.js.map