@stellot/crypto
Version:
Crypto libraries for front and backend
55 lines (54 loc) • 2.31 kB
JavaScript
;
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;