@okxweb3/coin-stellar
Version:
@okxweb3/coin-stellar is a Stellar SDK for building Web3 wallets and applications. It supports Stellar and PI blockchains, enabling private key management, address generation, transaction signing, trustline creation, and asset transfers
80 lines • 2.78 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.generate = exports.verify = exports.sign = exports.FastSigning = void 0;
const actualMethods = {};
exports.FastSigning = checkFastSigning();
function sign(data, secretKey) {
return actualMethods.sign(data, secretKey);
}
exports.sign = sign;
function verify(data, signature, publicKey) {
return actualMethods.verify(data, signature, publicKey);
}
exports.verify = verify;
function generate(secretKey) {
return actualMethods.generate(secretKey);
}
exports.generate = generate;
function checkFastSigning() {
return typeof window === 'undefined'
? checkFastSigningNode()
: checkFastSigningBrowser();
}
function checkFastSigningNode() {
let sodium;
try {
sodium = require('sodium-native');
}
catch (err) {
return checkFastSigningBrowser();
}
if (!Object.keys(sodium).length) {
return checkFastSigningBrowser();
}
actualMethods.generate = (secretKey) => {
const pk = Buffer.alloc(sodium.crypto_sign_PUBLICKEYBYTES);
const sk = Buffer.alloc(sodium.crypto_sign_SECRETKEYBYTES);
sodium.crypto_sign_seed_keypair(pk, sk, secretKey);
return pk;
};
actualMethods.sign = (data, secretKey) => {
data = Buffer.from(data);
const signature = Buffer.alloc(sodium.crypto_sign_BYTES);
sodium.crypto_sign_detached(signature, data, secretKey);
return signature;
};
actualMethods.verify = (data, signature, publicKey) => {
data = Buffer.from(data);
try {
return sodium.crypto_sign_verify_detached(signature, data, publicKey);
}
catch (e) {
return false;
}
};
return true;
}
function checkFastSigningBrowser() {
const nacl = require('tweetnacl');
actualMethods.generate = (secretKey) => {
const secretKeyUint8 = new Uint8Array(secretKey);
const naclKeys = nacl.sign.keyPair.fromSeed(secretKeyUint8);
return Buffer.from(naclKeys.publicKey);
};
actualMethods.sign = (data, secretKey) => {
data = Buffer.from(data);
data = new Uint8Array(data.toJSON().data);
secretKey = new Uint8Array(secretKey.toJSON().data);
const signature = nacl.sign.detached(data, secretKey);
return Buffer.from(signature);
};
actualMethods.verify = (data, signature, publicKey) => {
data = Buffer.from(data);
data = new Uint8Array(data.toJSON().data);
signature = new Uint8Array(signature.toJSON().data);
publicKey = new Uint8Array(publicKey.toJSON().data);
return nacl.sign.detached.verify(data, signature, publicKey);
};
return false;
}
//# sourceMappingURL=signing.js.map