@ixily/activ
Version:
Alpha Capture Trade Idea Verification. Blockchain ownership proven trade ideas and strategies.
68 lines • 3.24 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.validateHashedSignedMessage = exports.getHashedSignedMessage = exports.getSignedMessage = exports.splitSignature = exports.getHashedMessage = exports.uInt8ArrayFromString = exports.uInt8ArrayFromHexString = exports.id = exports.randomKeyWithLength = exports.CryptoJs = void 0;
const crypto_js_1 = __importDefault(require("crypto-js"));
Object.defineProperty(exports, "CryptoJs", { enumerable: true, get: function () { return crypto_js_1.default; } });
const ethers_1 = require("ethers");
const randomKeyWithLength = (length) => crypto_js_1.default.lib.WordArray.random(length).toString();
exports.randomKeyWithLength = randomKeyWithLength;
const id = () => {
return (0, exports.randomKeyWithLength)(24);
};
exports.id = id;
const uInt8ArrayFromHexString = (hexString) => Uint8Array.from(hexString.match(/.{1,2}/g).map((byte) => parseInt(byte, 16)));
exports.uInt8ArrayFromHexString = uInt8ArrayFromHexString;
const uInt8ArrayFromString = (str) => {
let utf8Encode = new TextEncoder();
return utf8Encode.encode(str);
};
exports.uInt8ArrayFromString = uInt8ArrayFromString;
const hashString = (valueStr) => {
return ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.toUtf8Bytes(valueStr));
};
const getHashedMessage = (originalMessage) => {
const hashedMessage = hashString(originalMessage);
return {
originalMessage,
hashedMessage,
};
};
exports.getHashedMessage = getHashedMessage;
const splitSignature = (signature) => {
const r = signature.slice(0, 66);
const s = '0x' + signature.slice(66, 130);
const v = parseInt(signature.slice(130, 132), 16);
return { r, s, v };
};
exports.splitSignature = splitSignature;
const getSignedMessage = async (hashedMessage, signer) => {
const signature = await signer.signMessage(hashedMessage.hashedMessage);
return {
...hashedMessage,
signature,
...(0, exports.splitSignature)(signature),
};
};
exports.getSignedMessage = getSignedMessage;
const getHashedSignedMessage = (originalMessage, signer) => {
return (0, exports.getSignedMessage)((0, exports.getHashedMessage)(originalMessage), signer);
};
exports.getHashedSignedMessage = getHashedSignedMessage;
const validateHashedSignedMessage = async (hashedSignedMessage, expectedAddress) => {
const probeHashed = (0, exports.getHashedMessage)(hashedSignedMessage.originalMessage);
if (probeHashed.originalMessage !== hashedSignedMessage.originalMessage) {
throw new Error('The hashed message does not match original message');
}
const signerAddr = await ethers_1.ethers.utils.verifyMessage(hashedSignedMessage.hashedMessage, hashedSignedMessage.signature);
if (expectedAddress !== undefined) {
if (signerAddr !== expectedAddress) {
throw new Error(`Signature address mismatch. Expected ${expectedAddress}, got ${signerAddr}`);
}
}
return signerAddr;
};
exports.validateHashedSignedMessage = validateHashedSignedMessage;
//# sourceMappingURL=crypto.tool.js.map