@dioxide-js/web3.js
Version:
dioxide javascript API
26 lines • 1.12 kB
JavaScript
// import base32Encode from "base32-encode"
import base32Decode from 'base32-decode';
import crc32c from 'crc-32/crc32c.js';
import { areUint8ArraysEqual, concat } from './buffer.js';
export function extractPublicKey(address) {
const [splitAddr] = address.split(':');
const addressUintArr = new Uint8Array(base32Decode(splitAddr, 'Crockford'));
const publicKey = addressUintArr.slice(0, 32);
const checkAddrUintArr = PK2Addr(publicKey);
if (areUint8ArraysEqual(addressUintArr, checkAddrUintArr)) {
return publicKey;
}
return null;
}
function PK2Addr(publicKey) {
const rollingCRC = 3;
const encryptMethod = 0x3;
let errorCorrectingCode = crc32c.buf(publicKey, rollingCRC);
errorCorrectingCode = (errorCorrectingCode & 0xfffffff0) | encryptMethod;
errorCorrectingCode = errorCorrectingCode >>> 0;
const buffer = new Int32Array([errorCorrectingCode]).buffer;
const errorCorrectingCodeBuffer = new Uint8Array(buffer);
const mergedBuffer = concat(publicKey, errorCorrectingCodeBuffer);
return mergedBuffer;
}
//# sourceMappingURL=extractPublicKey.js.map