Skip to content

Missing secrets in documentation and sample secrets file #6

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
0xjjpa opened this issue Mar 14, 2019 · 1 comment
Closed

Missing secrets in documentation and sample secrets file #6

0xjjpa opened this issue Mar 14, 2019 · 1 comment

Comments

@0xjjpa
Copy link
Contributor

0xjjpa commented Mar 14, 2019

If you do a quick grep1 on the project for the word secrets, as of commit 92fb03f, you will see the following output (some have already some changes I'm doing):

./truffle.js:12:let secrets     = '';
./truffle.js:15:    secrets = require('./config/.secrets.json');
./truffle.js:71:        rinkebyProvider = new HDWalletProvider(secrets.rinkeby.mnemonic, secrets.rinkeby.host);
./truffle.js:87:        ropstenProvider = new HDWalletProvider(secrets.ropsten.mnemonic, secrets.ropsten.host);
./test/utils/index.js:43:                let secrets
./test/utils/index.js:45:                    secrets = require('../../config/.secrets.json')
./test/utils/index.js:50:                if (!secrets['demoAccounts'] || secrets['demoAccounts'].length <= n)
./test/utils/index.js:53:                return privKeyToPeerId(secrets.demoAccounts[n].privateKey, (err, peerId) => {
./README.md:26:Setup the configuration file below before preceding. Navigate to the `config/` folder and change the `.secrets.json` similar to the following one:
./.gitignore:23:# Exclude .secrets
./.gitignore:24:.secrets.json
./.gitignore:36:# Exclude .secrets.json and .env file
./.gitignore:37:.secrets.json
./hopr.js:70:            const secrets = require('./config/.secrets.json')
./hopr.js:72:            if (secrets['demoAccounts'] && secrets['demoAccounts'].length > parseInt(options._[0])) {
./hopr.js:73:                privKeyToPeerId(secrets.demoAccounts[options._[0]].privateKey, (err, peerId) => {
./src/constants.js:11:const secrets = require('../config/.secrets.json')
./src/constants.js:49:    INFURA_URL: `https://${NETWORK}.infura.io/v3/${secrets.infuraApiKey || process.env.INFURA_API_KEY}`,
./src/constants.js:50:    INFURA_WSS_URL: `wss://${NETWORK}.infura.io/ws/v3/${secrets.infuraApiKey || process.env.INFURA_API_KEY}`,
./src/constants.js:60:    HARDCODED_ETH_ADDRESS: secrets.fundAccountEthAddress || process.env.FUND_ACCOUNT_ETH_ADDRESS,
./src/constants.js:61:    HARDCODED_PRIV_KEY: secrets.fundAccountPrivateKey || process.env.FUND_ACCOUNT_PRIVATE_KEY
./src/getPeerInfo.js:63:                return privKeyToPeerId(require('../config/.secrets.json').fundAccountPrivateKey || process.env.FUND_ACCOUNT_PRIVATE_KEY, cb)
./src/paymentChannels/keyDerivation.js:47:    static create(secrets) {
./src/paymentChannels/keyDerivation.js:50:                hash(bufferXOR(Header.deriveTransactionKey(secrets[0]), Header.deriveTransactionKeyBlinding(secrets[0]))),
./src/paymentChannels/keyDerivation.js:51:                hash(bufferXOR(Header.deriveTransactionKey(secrets[1]), Header.deriveTransactionKeyBlinding(secrets[0]))),
./src/paymentChannels/keyDerivation.js:52:                hash(KeyDerivation.deriveKey(secrets)),
./src/paymentChannels/keyDerivation.js:62:    static deriveKey(Header, secrets) {
./src/paymentChannels/keyDerivation.js:63:        const k_A = Header.deriveTransactionKey(secrets[0])
./src/paymentChannels/keyDerivation.js:64:        const k_B = Header.deriveTransactionKey(secrets[1])
./src/packet/message.js:55:    onionEncrypt(secrets) {
./src/packet/message.js:56:        if (!Array.isArray(secrets) || secrets.length <= 0)
./src/packet/message.js:59:        forEachRight(secrets, (secret) => {
./src/packet/index.js:27:        const { header, secrets, identifier } = Header.createHeader(path)
./src/packet/index.js:37:        const fee = (new BN(secrets.length - 1, 10)).imul(new BN(RELAY_FEE, 10))
./src/packet/index.js:39:        const challenge = Challenge.createChallenge(Header.deriveTransactionKey(secrets[0]), node.peerInfo.id)
./src/packet/index.js:40:        const message = Message.createMessage(msg).onionEncrypt(secrets)
./src/packet/index.js:46:            log(node.peerInfo.id, `Encrypting with ${hash(bufferXOR(Header.deriveTransactionKey(secrets[0]), Header.deriveTransactionKey(secrets[1]))).toString('base64')}.`)
./src/packet/index.js:47:            const encryptedTx = tx.encrypt(hash(bufferXOR(Header.deriveTransactionKey(secrets[0]), Header.deriveTransactionKey(secrets[1]))))
./src/packet/header/createHeader.js:31:        let done = false, secrets, privKey
./src/packet/header/createHeader.js:45:            secrets = []
./src/packet/header/createHeader.js:75:                secrets.push(secret)
./src/packet/header/createHeader.js:82:        return secrets
./src/packet/header/createHeader.js:85:    function generateFiller(secrets) {
./src/packet/header/createHeader.js:90:            let { key, iv } = Header.derivePRGParameters(secrets[index])
./src/packet/header/createHeader.js:106:    function createBetaAndGamma(secrets, filler, identifier) {
./src/packet/header/createHeader.js:109:        forEachRight(secrets, (secret, index) => {
./src/packet/header/createHeader.js:112:            let paddingLength = (c.MAX_HOPS - secrets.length) * p.PER_HOP_SIZE
./src/packet/header/createHeader.js:114:            if (index === secrets.length - 1) {
./src/packet/header/createHeader.js:139:                    .fill(hash(Header.deriveTransactionKey(secrets[index + 1])), p.ADDRESS_SIZE + p.MAC_SIZE, p.ADDRESS_SIZE + p.MAC_SIZE + p.HASH_LENGTH)
./src/packet/header/createHeader.js:142:                if (secrets.length > 2 && index < secrets.length - 2) {
./src/packet/header/createHeader.js:144:                        .fill(hash(deriveKey(Header, secrets.slice(index, index + 2))), p.ADDRESS_SIZE + p.MAC_SIZE + p.HASH_LENGTH, p.ADDRESS_SIZE + p.MAC_SIZE + p.HASH_LENGTH + p.HASH_LENGTH)
./src/packet/header/createHeader.js:145:                        .fill(deriveKey(Header, secrets.slice(index + 1, index + 3)), p.ADDRESS_SIZE + p.MAC_SIZE + p.HASH_LENGTH + p.HASH_LENGTH, p.ADDRESS_SIZE + p.MAC_SIZE + p.HASH_LENGTH + p.HASH_LENGTH + p.KEY_LENGTH)
./src/packet/header/createHeader.js:160:    function printValues(header, secrets) {
./src/packet/header/createHeader.js:163:                str = str + '\nsecret[' + index + ']: ' + bs58.encode(secrets[index]) + '\n' +
./src/packet/header/createHeader.js:172:    const secrets = generateKeyShares(peerIds)
./src/packet/header/createHeader.js:174:    const filler = generateFiller(secrets)
./src/packet/header/createHeader.js:175:    createBetaAndGamma(secrets, filler, identifier)
./src/packet/header/createHeader.js:177:    // printValues(header, secrets)
./src/packet/header/createHeader.js:181:        secrets: secrets,

Particularly I want to bring your attention to the following lines:

in truffle.js

./truffle.js:15:    secrets = require('./config/.secrets.json');
./truffle.js:71:        rinkebyProvider = new HDWalletProvider(secrets.rinkeby.mnemonic, secrets.rinkeby.host);
./truffle.js:87:        ropstenProvider = new HDWalletProvider(secrets.ropsten.mnemonic, secrets.ropsten.host);

in test/utils/index.js

./test/utils/index.js:45:                    secrets = require('../../config/.secrets.json')
./test/utils/index.js:50:                if (!secrets['demoAccounts'] || secrets['demoAccounts'].length <= n)

in hopr.js

./hopr.js:70:            const secrets = require('./config/.secrets.json')
./hopr.js:72:            if (secrets['demoAccounts'] && secrets['demoAccounts'].length > parseInt(options._[0])) {

As you can see, we are trying to access rinkeby|ropsten.mnemonic and demoAccounts from secrets, even though those are not documented or shown in the documentation. I imagine those are some legacy variables, but might be related to #1 on why I can't get the demo to work.

Probably worth adding those to the documentation and/or expanding the logic behind those. All of those have fallbacks so they don't break the project, but we should at least escape rinkeby|ropsten.mnemonic as they will fail with the current provided .secrets.json example.


  1. grep -rni secrets . --exclude-dir=node_modules.
@0xjjpa
Copy link
Contributor Author

0xjjpa commented Mar 29, 2019

No longer an issue due to #7 🎉

@0xjjpa 0xjjpa closed this as completed Mar 29, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant