@dioxide-js/silas
Version:
RPC utility for Silas
29 lines (26 loc) • 1.12 kB
JavaScript
import base32Decode from '../_virtual/index.mjs';
import crc32c from '../_virtual/crc32c.mjs';
import { areUint8ArraysEqual, concat } from './buffer.mjs';
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;
}
export { extractPublicKey };
//# sourceMappingURL=extractPublicKey.mjs.map