@silvana-one/coordination
Version:
Silvana Coordination Client
65 lines • 2.14 kB
JavaScript
import { fromBase58Check, toBase58Check } from "./base58.js";
import { versionNumbers, versionBytes } from "./versions.js";
function assertNonNegativeInteger(n, message) {
if (!Number.isInteger(n) || n < 0)
throw Error(message);
}
function bytesToBigInt(bytes) {
let x = 0n;
let bitPosition = 0n;
for (let byte of bytes) {
x += BigInt(byte) << bitPosition;
bitPosition += 8n;
}
return x;
}
function readBytesInternal(bytes, start) {
const rBytes = bytes.slice(start, start + 32);
const sBytes = bytes.slice(start + 32, start + 64);
const r = bytesToBigInt(rBytes);
const s = bytesToBigInt(sBytes);
return { r, s };
}
function readBytes(bytes, offset, versionNumber) {
let version = bytes[offset++];
if (version !== versionNumber) {
throw Error(`fromBytes: Invalid version byte. Expected ${versionNumber}, got ${version}.`);
}
return readBytesInternal(bytes, offset);
}
let readBytes_ = (bytes, offset) => {
assertNonNegativeInteger(offset, "readBytes: offset must be integer >= 0");
if (offset >= bytes.length)
throw Error("readBytes: offset must be within bytes length");
return readBytes(bytes, offset, versionNumbers.signature);
};
function fromBytes(bytes) {
return readBytes_(bytes, 0);
}
function toBytes(signature) {
const result = new Array(65);
result[0] = versionNumbers.signature;
// Convert r to bytes
let r = signature.r;
for (let i = 0; i < 32; i++) {
result[i + 1] = Number(r & 0xffn);
r >>= 8n;
}
// Convert s to bytes
let s = signature.s;
for (let i = 0; i < 32; i++) {
result[i + 33] = Number(s & 0xffn);
s >>= 8n;
}
return result;
}
export function convertMinaSignatureFromBase58(signature) {
const bytes = fromBase58Check(signature, versionBytes.signature);
const minaSignature = fromBytes(bytes);
return minaSignature;
}
export function convertMinaSignatureToBase58(signature) {
const bytes = toBytes(signature);
return toBase58Check(bytes, versionBytes.signature);
}
//# sourceMappingURL=signature.js.map