diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 1ab66670cd..217de7626b 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -1,16 +1,16 @@ import { keccak256, Message } from "js-sha3"; +import { fromString } from "uint8arrays/from-string"; +import { toString } from "uint8arrays/to-string"; /** * Convert input to a byte array. + * + * Handles both `0x` prefixed and non-prefixed strings. */ export function hexToBytes(hex: string | Uint8Array): Uint8Array { if (typeof hex === "string") { const _hex = hex.replace(/^0x/i, ""); - const bytes = []; - for (let c = 0; c < _hex.length; c += 2) - bytes.push(parseInt(_hex.substring(c, c + 2), 16)); - - return new Uint8Array(bytes); + return fromString(_hex, "base16"); } return hex; } @@ -18,15 +18,8 @@ export function hexToBytes(hex: string | Uint8Array): Uint8Array { /** * Convert byte array to hex string (no `0x` prefix). */ -export function bytesToHex(bytes: Uint8Array): string { - const hex = []; - for (let i = 0; i < bytes.length; i++) { - const current = bytes[i] < 0 ? bytes[i] + 256 : bytes[i]; - hex.push((current >>> 4).toString(16)); - hex.push((current & 0xf).toString(16)); - } - return hex.join(""); -} +export const bytesToHex = (bytes: Uint8Array): string => + toString(bytes, "base16"); /** * Return Keccak-256 of the input.