// Copyright (c) 2020-2021 Drew Lemmy
// This file is part of KristWeb 2 under GPL-3.0.
// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt
import { sha256, doubleSHA256 } from "@utils/crypto";
const hexToBase36 = (input: number): string => {
const byte = 48 + Math.floor(input / 7);
return String.fromCharCode(byte + 39 > 122 ? 101 : byte > 57 ? byte + 39 : byte);
};
export const makeV2Address = async (addressPrefix: string, key: string): Promise<string> => {
const chars = ["", "", "", "", "", "", "", "", ""];
let chain = addressPrefix;
let hash = await doubleSHA256(key);
for (let i = 0; i <= 8; i++) {
chars[i] = hash.substring(0, 2);
hash = await doubleSHA256(hash);
}
for (let i = 0; i <= 8;) {
const index = parseInt(hash.substring(2 * i, 2 + (2 * i)), 16) % 9;
if (chars[index] === "") {
hash = await sha256(hash);
} else {
chain += hexToBase36(parseInt(chars[index], 16));
chars[index] = "";
i++;
}
}
return chain;
};