Added redeem decryption support to message board. (#68)

* Added redeem decryption support.
* Used updated evernode lib package.
This commit is contained in:
Ravin Perera
2021-10-13 07:58:22 +05:30
committed by GitHub
parent 05c275cd7b
commit 3903cf6897
6 changed files with 46 additions and 24 deletions

View File

@@ -59,6 +59,7 @@ class MessageBoard {
catch (e) { throw e; }
this.xrplAcc = new XrplAccount(this.rippleAPI, this.cfg.xrpl.address, this.cfg.xrpl.secret);
this.accKeyPair = this.xrplAcc.deriveKeypair();
if (IS_DEREGISTER) {
await this.deregisterHost();
@@ -136,7 +137,15 @@ class MessageBoard {
// The last validated ledger when we receive the redeem request.
const startingValidatedLedger = this.lastValidatedLedgerSequence;
const createRes = await this.sashiCli.createInstance(JSON.parse(memo.data));
// Decrypt redeem requirements using the decryption key derived from host secret.
const instanceRequirements = await EncryptionHelper.decrypt(this.accKeyPair.privateKey, memo.data);
if (!instanceRequirements) {
console.log('Failed to decrypt redeem data.');
break;
}
const createRes = await this.sashiCli.createInstance(instanceRequirements);
// Number of validated ledgers passed while the instance is created.
const diff = this.lastValidatedLedgerSequence - startingValidatedLedger;
@@ -207,6 +216,16 @@ class MessageBoard {
this.cfg.xrpl.regFeeHash = res.txHash;
this.persistConfig();
console.log('Registration payment made for evernode account.');
// Set the encryption key to be used when sending encrypted redeem requirements (MessageKey account field).
console.log("Setting message key...");
if (await this.xrplAcc.setMessageKey(this.accKeyPair.publicKey))
console.log("Host account message key set.");
else
console.log("Failed to set host account message key.");
}
else {
console.log("Registration payment failed.");
}
}
}
@@ -225,8 +244,8 @@ class MessageBoard {
async sendRedeemResponse(txHash, txPubkey, txAccount, response, encrypt = true) {
// Verifying the pubkey.
if (!(await this.rippleAPI.isValidAddress(txPubkey, txAccount)))
throw 'Invalid public key for encryption';
if (!(await this.rippleAPI.isValidKeyForAddress(txPubkey, txAccount)))
throw 'Invalid public key for redeem response encryption.';
// Encrypt response with user pubkey.
if (encrypt)

View File

@@ -9,9 +9,9 @@
"integrity": "sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw=="
},
"@types/node": {
"version": "16.10.3",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz",
"integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ=="
"version": "16.10.4",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.4.tgz",
"integrity": "sha512-EITwVTX5B4nDjXjGeQAfXOrm+Jn+qNjDmyDRtWoD+wZsl/RDPRTFRKivs4Mt74iOFlLOrE5+Kf+p5yjyhm3+cA=="
},
"@types/ws": {
"version": "7.4.7",
@@ -176,9 +176,9 @@
}
},
"big-integer": {
"version": "1.6.49",
"resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.49.tgz",
"integrity": "sha512-KJ7VhqH+f/BOt9a3yMwJNmcZjG53ijWMTjSAGMveQWyLwqIiwkjNP5PFgDob3Snnx86SjDj6I89fIbv0dkQeNw=="
"version": "1.6.50",
"resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.50.tgz",
"integrity": "sha512-+O2uoQWFRo8ysZNo/rjtri2jIwjr3XfeAgRjAUADRqGG+ZITvyn8J1kvXLTaKVr3hhGXk+f23tKfdzmklVM9vQ=="
},
"bignumber.js": {
"version": "9.0.1",
@@ -490,9 +490,9 @@
"integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="
},
"evernode-js-client": {
"version": "0.0.19-alpha",
"resolved": "https://registry.npmjs.org/evernode-js-client/-/evernode-js-client-0.0.19-alpha.tgz",
"integrity": "sha512-0ErIuURPkYdt3eOhy8RV2H5+OrLtcrWS0+ARhSadQvkM6svQRd4bsS9Scvp6gikRjcZ6qPPSDP1IUVTnJkFkSw==",
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/evernode-js-client/-/evernode-js-client-0.1.0.tgz",
"integrity": "sha512-ZFdHFzDZ7E5V7xl7UTab0ZXGd7nrWNgyDYHzND7fa6GgGD88hTVqlL+qX7pVY0oA7ZMubsiE4U6w1CwoY6T2lg==",
"requires": {
"eccrypto": "1.1.6",
"ripple-lib": "1.9.8"

View File

@@ -4,7 +4,7 @@
"build": "ncc build mb-xrpl.js -o dist"
},
"dependencies": {
"evernode-js-client": "0.0.19-alpha",
"evernode-js-client": "0.1.0",
"sqlite3": "5.0.2"
}
}

View File

@@ -2,6 +2,7 @@ import fetch from "node-fetch";
import { exec } from "child_process";
import fs from "fs";
import evernode from "evernode-js-client";
import { exit } from "process";
const { EvernodeClient, XrplAccount, RippleAPIWrapper } = evernode;
const REDEEM_AMOUNT = 18000; // 18000 Moments ~ 60days
@@ -152,7 +153,7 @@ async function initHosts() {
await Promise.all(hosts.map(host => initHostAccountData(host)))
for (const host of hosts) {
const { ownsTokens, acc } = hostAccounts[host];
const { ownsTokens, hostAccount: acc } = hostAccounts[host];
if (!ownsTokens)
await transferHostingTokens(acc.token, acc.address, acc.secret);
}
@@ -250,6 +251,8 @@ async function main() {
var args = process.argv.slice(2);
process.on('SIGINT', () => {
if (shouldAbort)
exit();
console.log('Received SIGINT. Aborting...');
shouldAbort = true;
});

View File

@@ -9,9 +9,9 @@
"integrity": "sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw=="
},
"@types/node": {
"version": "16.10.3",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz",
"integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ=="
"version": "16.10.4",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.4.tgz",
"integrity": "sha512-EITwVTX5B4nDjXjGeQAfXOrm+Jn+qNjDmyDRtWoD+wZsl/RDPRTFRKivs4Mt74iOFlLOrE5+Kf+p5yjyhm3+cA=="
},
"@types/ws": {
"version": "7.4.7",
@@ -64,9 +64,9 @@
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
},
"big-integer": {
"version": "1.6.49",
"resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.49.tgz",
"integrity": "sha512-KJ7VhqH+f/BOt9a3yMwJNmcZjG53ijWMTjSAGMveQWyLwqIiwkjNP5PFgDob3Snnx86SjDj6I89fIbv0dkQeNw=="
"version": "1.6.50",
"resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.50.tgz",
"integrity": "sha512-+O2uoQWFRo8ysZNo/rjtri2jIwjr3XfeAgRjAUADRqGG+ZITvyn8J1kvXLTaKVr3hhGXk+f23tKfdzmklVM9vQ=="
},
"bignumber.js": {
"version": "9.0.1",
@@ -285,9 +285,9 @@
"integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="
},
"evernode-js-client": {
"version": "0.0.19-alpha",
"resolved": "https://registry.npmjs.org/evernode-js-client/-/evernode-js-client-0.0.19-alpha.tgz",
"integrity": "sha512-0ErIuURPkYdt3eOhy8RV2H5+OrLtcrWS0+ARhSadQvkM6svQRd4bsS9Scvp6gikRjcZ6qPPSDP1IUVTnJkFkSw==",
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/evernode-js-client/-/evernode-js-client-0.1.0.tgz",
"integrity": "sha512-ZFdHFzDZ7E5V7xl7UTab0ZXGd7nrWNgyDYHzND7fa6GgGD88hTVqlL+qX7pVY0oA7ZMubsiE4U6w1CwoY6T2lg==",
"requires": {
"eccrypto": "1.1.6",
"ripple-lib": "1.9.8"

View File

@@ -2,7 +2,7 @@
"name": "evcluster",
"type": "module",
"dependencies": {
"evernode-js-client": "0.0.19-alpha",
"evernode-js-client": "0.1.0",
"node-fetch": "3.0.0"
}
}