UNPKG

@okxweb3/coin-stellar

Version:

@ok/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
"use strict"; 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