UNPKG

@stellot/crypto

Version:

Crypto libraries for front and backend

55 lines (54 loc) 2.31 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.decodeTransactionMemo = exports.decodeMemo = exports.encodeMemo = void 0; const stellarBox_1 = require("./stellarBox"); const long_1 = __importDefault(require("long")); const stellar_sdk_1 = require("stellar-sdk"); const padding = Buffer.alloc(8); async function work(fn, sequenceNumber, keys, to, memo) { if (!memo.value) { throw new Error('Invalid memo value'); } const seqNum = long_1.default.fromString(sequenceNumber); const nonce = Buffer.concat([ padding, Buffer.from(seqNum.mul(2).toBytesBE()) ]); if (memo.type === stellar_sdk_1.MemoText) { const data = Buffer.from(memo.value); const res = await fn(keys, to, data, nonce, false); const value = Buffer.from(res); return new stellar_sdk_1.Memo(memo.type, value); } else if (memo.type === stellar_sdk_1.MemoID) { const data = Buffer.from(long_1.default.fromString(memo.value, true).toBytesBE()); const res = await fn(keys, to, data, nonce, false); const value = long_1.default.fromBytesBE(res, true).toString(); return new stellar_sdk_1.Memo(memo.type, value); } else if ((memo.type === stellar_sdk_1.MemoHash) || (memo.type === stellar_sdk_1.MemoReturn)) { const data = memo.value; const res = await fn(keys, to, data, nonce, false); const value = Buffer.from(res); return new stellar_sdk_1.Memo(memo.type, value); } else { throw new Error('Invalid memo type'); } } function encodeMemo(sequenceNumber, keys, to, memo) { const sequence = long_1.default.fromString(sequenceNumber).add(1).toString(); return work(stellarBox_1.encrypt, sequence, keys, to, memo); } exports.encodeMemo = encodeMemo; function decodeMemo(sequenceNumber, keys, from, memo) { return work(stellarBox_1.decrypt, sequenceNumber, keys, from, memo); } exports.decodeMemo = decodeMemo; function decodeTransactionMemo(tx, keys) { return work(stellarBox_1.decrypt, tx.sequence, keys, tx.source, tx.memo); } exports.decodeTransactionMemo = decodeTransactionMemo;