
/*

256-bit hex ids look like this:

	8ff8dfbc7c994c5439d2dd327b9898aa6796f97fb396e262985f03f868707e32
	6b99284a2c4a1c5f101502bd009f9fb592ca4427e4375155e411ddd07ed9da6b
	2eb73fb00a2b9e38c855b5aa353b530d820a3a2dcea5013b7e4e277ddfe9d0ad

*/

import {Bytes} from "./bytes.js"

export const Hex = {
	string(bytes: Uint8Array) {
		return [...bytes]
			.map(byte => byte.toString(16).padStart(2, "0"))
			.join("")
	},

	bytes(string: string) {
		if (string.length % 2 !== 0)
			throw new Error("must have even number of hex characters")
		const bytes = new Uint8Array(string.length / 2)
		for (let i = 0; i < string.length; i += 2)
			bytes[i / 2] = parseInt(string.slice(i, i + 2), 16)
		return bytes
	},

	/** generate a random hex string. byteCount defaults to 32. */
	random(byteCount = 32) {
		return this.string(Bytes.random(byteCount))
	},
}

