From fa16916e820ee461e8e5d55d700a745a0138af4d Mon Sep 17 00:00:00 2001 From: Andre Staltz Date: Wed, 14 Jun 2023 10:48:54 +0300 Subject: [PATCH] use ppppp-keypair instead of ssb-keys --- lib/encryption.js | 19 ++++++++- lib/index.js | 38 +++++++++++------ lib/msg-v2/index.js | 37 ++++++---------- lib/msg-v2/validation.js | 6 +-- package.json | 7 ++-- test/add.test.js | 14 +++---- test/del.test.js | 6 +-- test/erase.test.js | 6 +-- test/feed-get-id.test.js | 8 ++-- test/feed-publish.test.js | 16 +++---- test/get.test.js | 6 +-- test/getTangle.test.js | 22 +++++----- test/group-add.test.js | 32 +++++++------- test/group-create.test.js | 22 +++++----- test/msg-v2/create.test.js | 34 +++++++-------- test/msg-v2/invalid-prev.test.js | 72 ++++++++++++++++---------------- test/msg-v2/invalid-type.test.js | 22 +++++----- test/msg-v2/lipmaa.test.js | 22 +++++----- test/msg-v2/tangles.test.js | 38 ++++++++--------- test/msg-v2/validate.test.js | 44 +++++++++---------- test/msgs-iterator.test.js | 8 ++-- test/on-record-added.test.js | 6 +-- test/re-open.test.js | 8 ++-- test/records-iterator.test.js | 8 ++-- test/util.js | 14 ------- 25 files changed, 259 insertions(+), 256 deletions(-) delete mode 100644 test/util.js diff --git a/lib/encryption.js b/lib/encryption.js index 759738b..313fa22 100644 --- a/lib/encryption.js +++ b/lib/encryption.js @@ -1,7 +1,9 @@ const MsgV2 = require('./msg-v2') +const base58 = require('bs58') /** * @typedef {import('./index').Rec} Rec + * @typedef {import('ppppp-keypair').Keypair} Keypair */ function ciphertextStrToBuffer(str) { @@ -9,6 +11,21 @@ function ciphertextStrToBuffer(str) { return Buffer.from(str.slice(0, dot), 'base64') } +/** + * TODO: eventually get rid of this + * @param {Keypair} keypair + */ +function keypairToSSBKeys(keypair) { + const public = Buffer.from(base58.decode(keypair.public)).toString('base64') + const private = Buffer.from(base58.decode(keypair.private)).toString('base64') + return { + id: `@${public}.ed25519`, + curve: keypair.curve, + public, + private, + } +} + /** * @param {Rec} rec * @param {any} peer @@ -25,7 +42,7 @@ function decrypt(rec, peer, config) { // Decrypt const ciphertextBuf = ciphertextStrToBuffer(data) - const opts = { keys: config.keys } + const opts = { keys: keypairToSSBKeys(config.keypair) } const plaintextBuf = encryptionFormat.decrypt(ciphertextBuf, opts) if (!plaintextBuf) return rec diff --git a/lib/index.js b/lib/index.js index 91c5b44..f4ab433 100644 --- a/lib/index.js +++ b/lib/index.js @@ -2,6 +2,7 @@ const path = require('path') const push = require('push-stream') const AAOL = require('async-append-only-log') const promisify = require('promisify-4loc') +const base58 = require('bs58') const Obz = require('obz') const MsgV2 = require('./msg-v2') const { ReadyGate } = require('./utils') @@ -222,13 +223,13 @@ exports.init = function initDB(peer, config) { } function initializeFeed(opts, cb) { - const keys = opts.keys ?? config.keys + const keypair = opts.keypair ?? config.keypair const { group, type } = opts const feedRootHash = getFeedId(group, type) if (feedRootHash) return cb(null, feedRootHash) - const feedRoot = MsgV2.createRoot(group, type, keys) + const feedRoot = MsgV2.createRoot(group, type, keypair) add(feedRoot, MsgV2.getMsgHash(feedRoot), (err, rec) => { // prettier-ignore if (err) return cb(new Error('initializeFeed() failed to add root', { cause: err })); @@ -237,11 +238,11 @@ exports.init = function initDB(peer, config) { } function createGroup(opts, cb) { - const keys = opts?.keys ?? config.keys + const keypair = opts?.keypair ?? config.keypair let msg try { - msg = MsgV2.createGroup(keys, opts?._nonce) + msg = MsgV2.createGroup(keypair, opts?._nonce) } catch (err) { return cb(new Error('group.create() failed', { cause: err })) } @@ -256,10 +257,10 @@ exports.init = function initDB(peer, config) { } function addToGroup(opts, cb) { - if (!opts?.keys) return cb(new Error('group.add() requires a `keys`')) + if (!opts?.keypair) return cb(new Error('group.add() requires a `keypair`')) if (!opts?.group) return cb(new Error('group.add() requires a `group`')) - const addedKeys = opts.keys - const signingKeys = config.keys + const addedKeypair = opts.keypair + const signingKeypair = config.keypair // Fill-in tangle opts: const tangles = populateTangles([opts.group]) @@ -267,8 +268,8 @@ exports.init = function initDB(peer, config) { group: null, groupTips: null, tangles, - keys: signingKeys, - data: { add: addedKeys.id }, + keypair: signingKeypair, + data: { add: addedKeypair.public }, type: 'group', } @@ -290,7 +291,8 @@ exports.init = function initDB(peer, config) { } function publishToFeed(opts, cb) { - const keys = opts.keys ?? config.keys + if (!opts) return cb(new Error('feed.publish() requires an `opts`')) + const keypair = opts.keypair ?? config.keypair const encryptionFormat = encryptionFormats.get(opts.encryptionFormat) if (opts.data.recps) { @@ -313,19 +315,29 @@ exports.init = function initDB(peer, config) { const tangles = populateTangles(tangleTemplates) const groupTangle = new DBTangle(opts.group, records()) const groupTips = [...groupTangle.getTips()] - const fullOpts = { ...opts, tangles, groupTips, keys } + const fullOpts = { ...opts, tangles, groupTips, keypair } // If opts ask for encryption, encrypt and put ciphertext in opts.data const recps = fullOpts.data.recps if (Array.isArray(recps) && recps.length > 0) { const plaintext = MsgV2.toPlaintextBuffer(fullOpts) - const encryptOpts = { ...fullOpts, recps } + const encryptOpts = { + ...fullOpts, + recps: recps.map( + (recp) => + // TODO: temporary until our encryption formats are ppppp not SSB + `@${Buffer.from(base58.decode(recp)).toString('base64')}.ed25519` + ), + } let ciphertextBuf try { ciphertextBuf = encryptionFormat.encrypt(plaintext, encryptOpts) } catch (err) { // prettier-ignore - return cb(new Error('feed.publish() failed to encrypt data', {cause: err})); + console.log(err); + return cb( + new Error('feed.publish() failed to encrypt data', { cause: err }) + ) } if (!ciphertextBuf) { // prettier-ignore diff --git a/lib/msg-v2/index.js b/lib/msg-v2/index.js index 7a71679..f6685bc 100644 --- a/lib/msg-v2/index.js +++ b/lib/msg-v2/index.js @@ -1,6 +1,6 @@ const crypto = require('crypto') const stringify = require('json-canon') -const ed25519 = require('ssb-keys/sodium') +const Keypair = require('ppppp-keypair') const base58 = require('bs58') const union = require('set.prototype.union') const { stripGroup } = require('./strip') @@ -18,6 +18,7 @@ const Tangle = require('./tangle') /** * @typedef {Iterator & {values: () => Iterator}} MsgIter + * @typedef {import('ppppp-keypair').Keypair} Keypair */ /** @@ -41,17 +42,11 @@ const Tangle = require('./tangle') * @property {string} sig */ -/** - * @typedef {Object} Keys - * @property {string} keys.id - * @property {string} keys.private - */ - /** * @typedef {Object} CreateOpts * @property {*} data * @property {string} type - * @property {Keys} keys + * @property {Keypair} keypair * @property {string | null} group * @property {Array | null} groupTips * @property {Record} tangles @@ -122,17 +117,14 @@ function create(opts) { type: opts.type, v: 2, }, - pubkey: opts.keys.id, + pubkey: opts.keypair.public, sig: '', } if ((err = validateData(msg))) throw err - const privateKey = Buffer.from(opts.keys.private, 'base64') // TODO: add a label prefix to the metadata before signing const metadataBuf = Buffer.from(stringify(msg.metadata), 'utf8') - // TODO: when signing, what's the point of a customizable hmac? - const sigBuf = ed25519.sign(privateKey, metadataBuf) - msg.sig = base58.encode(sigBuf) + msg.sig = Keypair.sign(opts.keypair, metadataBuf) return msg } @@ -140,10 +132,10 @@ function create(opts) { /** * @param {string} group * @param {string} type - * @param {Keys} keys + * @param {Keypair} keypair * @returns {Msg} */ -function createRoot(group, type, keys) { +function createRoot(group, type, keypair) { let err if ((err = validateType(type))) throw err @@ -158,31 +150,28 @@ function createRoot(group, type, keys) { type, v: 2, }, - pubkey: keys.id, + pubkey: keypair.public, sig: '', } - const privateKey = Buffer.from(keys.private, 'base64') // TODO: add a label prefix to the metadata before signing const metadataBuf = Buffer.from(stringify(msg.metadata), 'utf8') - // TODO: when signing, what's the point of a customizable hmac? - const sigBuf = ed25519.sign(privateKey, metadataBuf) - msg.sig = base58.encode(sigBuf) + msg.sig = Keypair.sign(keypair, metadataBuf) return msg } /** - * @param {Keys} keys + * @param {Keypair} keypair * @param {string} nonce * @returns {Msg} */ -function createGroup(keys, nonce = base58.encode(crypto.randomBytes(32))) { +function createGroup(keypair, nonce = base58.encode(crypto.randomBytes(32))) { return create({ - data: { add: keys.id, nonce }, + data: { add: keypair.public, nonce }, group: null, groupTips: null, - keys, + keypair, tangles: {}, type: 'group', }) diff --git a/lib/msg-v2/validation.js b/lib/msg-v2/validation.js index ff7ecfe..c9f4c85 100644 --- a/lib/msg-v2/validation.js +++ b/lib/msg-v2/validation.js @@ -1,5 +1,5 @@ const base58 = require('bs58') -const ed25519 = require('ssb-keys/sodium') +const Keypair = require('ppppp-keypair') const stringify = require('json-canon') const Tangle = require('./tangle') const representData = require('./represent-data') @@ -112,9 +112,9 @@ function validateSignature(msg) { return `invalid message: sig "${sig}" should have been a base58 string\n` + JSON.stringify(msg) } - const publicKeyBuf = Buffer.from(base58.decode(msg.pubkey)) const signableBuf = Buffer.from(stringify(msg.metadata), 'utf8') - const verified = ed25519.verify(publicKeyBuf, sigBuf, signableBuf) + const keypair = {curve: 'ed25519', public: msg.pubkey} + const verified = Keypair.verify(keypair, signableBuf, sig) if (!verified) { return 'invalid message: sig is invalid\n' + JSON.stringify(msg) } diff --git a/package.json b/package.json index 6f018c2..0d4f845 100644 --- a/package.json +++ b/package.json @@ -35,10 +35,10 @@ "bs58": "^5.0.0", "json-canon": "^1.0.0", "obz": "^1.1.0", + "ppppp-keypair": "github:staltz/ppppp-keypair", "promisify-4loc": "^1.0.0", "push-stream": "^11.2.0", - "set.prototype.union": "^1.0.2", - "ssb-uri2": "^2.4.1" + "set.prototype.union": "^1.0.2" }, "devDependencies": { "c8": "^7.11.0", @@ -46,12 +46,11 @@ "prettier": "^2.6.2", "pretty-quick": "^3.1.3", "rimraf": "^4.4.0", - "secret-stack": "^6.4.1", + "secret-stack": "^6.4.2", "ssb-bendy-butt": "^1.0.0", "ssb-box": "^1.0.1", "ssb-caps": "^1.1.0", "ssb-classic": "^1.1.0", - "ssb-keys": "^8.5.0", "tap-arc": "^0.3.5", "tape": "^5.6.3" }, diff --git a/test/add.test.js b/test/add.test.js index 377bcd7..0862c8f 100644 --- a/test/add.test.js +++ b/test/add.test.js @@ -1,31 +1,31 @@ const test = require('tape') const path = require('path') const os = require('os') +const p = require('util').promisify const rimraf = require('rimraf') const SecretStack = require('secret-stack') const caps = require('ssb-caps') +const Keypair = require('ppppp-keypair') const MsgV2 = require('../lib/msg-v2') -const p = require('util').promisify -const { generateKeypair } = require('./util') const DIR = path.join(os.tmpdir(), 'ppppp-db-add') rimraf.sync(DIR) test('add()', async (t) => { - const keys = generateKeypair('alice') + const keypair = Keypair.generate('ed25519', 'alice') const peer = SecretStack({ appKey: caps.shs }) .use(require('../lib')) .use(require('ssb-box')) - .call(null, { keys, path: DIR }) + .call(null, { keypair, path: DIR }) await peer.db.loaded() - const groupMsg0 = MsgV2.createGroup(keys) + const groupMsg0 = MsgV2.createGroup(keypair) const group = MsgV2.getMsgHash(groupMsg0) await p(peer.db.add)(groupMsg0, group) - const rootMsg = MsgV2.createRoot(group, 'post', keys) + const rootMsg = MsgV2.createRoot(group, 'post', keypair) const rootHash = MsgV2.getMsgHash(rootMsg) const recRoot = await p(peer.db.add)(rootMsg, rootHash) @@ -34,7 +34,7 @@ test('add()', async (t) => { tangle.add(recRoot.hash, recRoot.msg) const inputMsg = MsgV2.create({ - keys, + keypair, type: 'post', data: { text: 'This is the first post!' }, group, diff --git a/test/del.test.js b/test/del.test.js index eb0bb1d..50a92ba 100644 --- a/test/del.test.js +++ b/test/del.test.js @@ -6,17 +6,17 @@ const SecretStack = require('secret-stack') const AAOL = require('async-append-only-log') const push = require('push-stream') const caps = require('ssb-caps') +const Keypair = require('ppppp-keypair') const p = require('util').promisify -const { generateKeypair } = require('./util') const DIR = path.join(os.tmpdir(), 'ppppp-db-del') rimraf.sync(DIR) test('del', async (t) => { - const keys = generateKeypair('alice') + const keypair = Keypair.generate('ed25519', 'alice') const peer = SecretStack({ appKey: caps.shs }) .use(require('../lib')) - .call(null, { keys, path: DIR }) + .call(null, { keypair, path: DIR }) await peer.db.loaded() diff --git a/test/erase.test.js b/test/erase.test.js index 4277920..8cba4db 100644 --- a/test/erase.test.js +++ b/test/erase.test.js @@ -6,17 +6,17 @@ const SecretStack = require('secret-stack') const AAOL = require('async-append-only-log') const push = require('push-stream') const caps = require('ssb-caps') +const Keypair = require('ppppp-keypair') const p = require('util').promisify -const { generateKeypair } = require('./util') const DIR = path.join(os.tmpdir(), 'ppppp-db-erase') rimraf.sync(DIR) test('erase', async (t) => { - const keys = generateKeypair('alice') + const keypair = Keypair.generate('ed25519', 'alice') const peer = SecretStack({ appKey: caps.shs }) .use(require('../lib')) - .call(null, { keys, path: DIR }) + .call(null, { keypair, path: DIR }) await peer.db.loaded() diff --git a/test/feed-get-id.test.js b/test/feed-get-id.test.js index 4db5f95..ccb9bcb 100644 --- a/test/feed-get-id.test.js +++ b/test/feed-get-id.test.js @@ -5,13 +5,13 @@ const rimraf = require('rimraf') const SecretStack = require('secret-stack') const caps = require('ssb-caps') const p = require('util').promisify +const Keypair = require('ppppp-keypair') const MsgV2 = require('../lib/msg-v2') -const { generateKeypair } = require('./util') const DIR = path.join(os.tmpdir(), 'ppppp-db-feed-publish') rimraf.sync(DIR) -const keys = generateKeypair('alice') +const keypair = Keypair.generate('ed25519', 'alice') let peer let group let rootMsg @@ -20,12 +20,12 @@ test('setup', async (t) => { peer = SecretStack({ appKey: caps.shs }) .use(require('../lib')) .use(require('ssb-box')) - .call(null, { keys, path: DIR }) + .call(null, { keypair, path: DIR }) await peer.db.loaded() group = (await p(peer.db.group.create)(null)).hash - rootMsg = MsgV2.createRoot(group, 'post', keys) + rootMsg = MsgV2.createRoot(group, 'post', keypair) rootHash = MsgV2.getMsgHash(rootMsg) await p(peer.db.add)(rootMsg, rootHash) diff --git a/test/feed-publish.test.js b/test/feed-publish.test.js index 955aa2b..58cf06f 100644 --- a/test/feed-publish.test.js +++ b/test/feed-publish.test.js @@ -5,14 +5,14 @@ const rimraf = require('rimraf') const SecretStack = require('secret-stack') const caps = require('ssb-caps') const p = require('util').promisify +const Keypair = require('ppppp-keypair') const MsgV2 = require('../lib/msg-v2') -const { generateKeypair } = require('./util') const DIR = path.join(os.tmpdir(), 'ppppp-db-feed-publish') rimraf.sync(DIR) -const keys = generateKeypair('alice') -const bobKeys = generateKeypair('bob') +const keypair = Keypair.generate('ed25519', 'alice') +const bobKeypair = Keypair.generate('ed25519', 'bob') let peer let group let rootMsg @@ -21,12 +21,12 @@ test('setup', async (t) => { peer = SecretStack({ appKey: caps.shs }) .use(require('../lib')) .use(require('ssb-box')) - .call(null, { keys, path: DIR }) + .call(null, { keypair, path: DIR }) await peer.db.loaded() group = (await p(peer.db.group.create)(null)).hash - rootMsg = MsgV2.createRoot(group, 'post', keys) + rootMsg = MsgV2.createRoot(group, 'post', keypair) rootHash = MsgV2.getMsgHash(rootMsg) }) @@ -78,7 +78,7 @@ test('add() forked then feed.publish() merged', async (t) => { tangle.add(rec1.hash, rec1.msg) const msg3 = MsgV2.create({ - keys, + keypair, group, groupTips: [group], type: 'post', @@ -120,7 +120,7 @@ test('feed.publish() encrypted with box', async (t) => { const recEncrypted = await p(peer.db.feed.publish)({ group, type: 'post', - data: { text: 'I am chewing food', recps: [peer.id] }, + data: { text: 'I am chewing food', recps: [keypair.public] }, encryptionFormat: 'box', }) t.equal(typeof recEncrypted.msg.data, 'string') @@ -143,7 +143,7 @@ test('feed.publish() with tangles', async (t) => { type: 'comment', data: { text: 'I am comment 1' }, tangles: [recA.hash], - keys: bobKeys, + keypair: bobKeypair, }) t.equal(recB.msg.metadata.tangles[recA.hash].depth, 1, 'tangle depth 1') t.deepEquals( diff --git a/test/get.test.js b/test/get.test.js index 004fa86..b7bcde3 100644 --- a/test/get.test.js +++ b/test/get.test.js @@ -5,13 +5,13 @@ const rimraf = require('rimraf') const SecretStack = require('secret-stack') const caps = require('ssb-caps') const p = require('util').promisify +const Keypair = require('ppppp-keypair') const MsgV2 = require('../lib/msg-v2') -const { generateKeypair } = require('./util') const DIR = path.join(os.tmpdir(), 'ppppp-db-get') rimraf.sync(DIR) -const keys = generateKeypair('alice') +const keypair = Keypair.generate('ed25519', 'alice') let peer let group let msgHash1 @@ -20,7 +20,7 @@ test('setup', async (t) => { peer = SecretStack({ appKey: caps.shs }) .use(require('../lib')) .use(require('ssb-box')) - .call(null, { keys, path: DIR }) + .call(null, { keypair, path: DIR }) await peer.db.loaded() diff --git a/test/getTangle.test.js b/test/getTangle.test.js index 5a5b886..de59cde 100644 --- a/test/getTangle.test.js +++ b/test/getTangle.test.js @@ -5,7 +5,7 @@ const rimraf = require('rimraf') const SecretStack = require('secret-stack') const caps = require('ssb-caps') const p = require('util').promisify -const { generateKeypair } = require('./util') +const Keypair = require('ppppp-keypair') const DIR = path.join(os.tmpdir(), 'ppppp-db-tangle') rimraf.sync(DIR) @@ -14,14 +14,14 @@ let peer let rootPost, reply1Lo, reply1Hi, reply2A, reply3Lo, reply3Hi let tangle test('setup', async (t) => { - const keysA = generateKeypair('alice') - const keysB = generateKeypair('bob') - const keysC = generateKeypair('carol') + const keypairA = Keypair.generate('ed25519', 'alice') + const keypairB = Keypair.generate('ed25519', 'bob') + const keypairC = Keypair.generate('ed25519', 'carol') peer = SecretStack({ appKey: caps.shs }) .use(require('../lib')) .use(require('ssb-box')) - .call(null, { keys: keysA, path: DIR }) + .call(null, { keypair: keypairA, path: DIR }) await peer.db.loaded() @@ -36,7 +36,7 @@ test('setup', async (t) => { rootPost = ( await p(peer.db.feed.publish)({ group, - keys: keysA, + keypair: keypairA, type: 'comment', data: { text: 'root' }, }) @@ -45,14 +45,14 @@ test('setup', async (t) => { const [{ hash: reply1B }, { hash: reply1C }] = await Promise.all([ p(peer.db.feed.publish)({ group, - keys: keysB, + keypair: keypairB, type: 'comment', data: { text: 'reply 1B' }, tangles: [rootPost], }), p(peer.db.feed.publish)({ group, - keys: keysC, + keypair: keypairC, type: 'comment', data: { text: 'reply 1C' }, tangles: [rootPost], @@ -64,7 +64,7 @@ test('setup', async (t) => { reply2A = ( await p(peer.db.feed.publish)({ group, - keys: keysA, + keypair: keypairA, type: 'comment', data: { text: 'reply 2' }, tangles: [rootPost], @@ -74,14 +74,14 @@ test('setup', async (t) => { const [{ hash: reply3B }, { hash: reply3C }] = await Promise.all([ p(peer.db.feed.publish)({ group, - keys: keysB, + keypair: keypairB, type: 'comment', data: { text: 'reply 3B' }, tangles: [rootPost], }), p(peer.db.feed.publish)({ group, - keys: keysC, + keypair: keypairC, type: 'comment', data: { text: 'reply 3C' }, tangles: [rootPost], diff --git a/test/group-add.test.js b/test/group-add.test.js index 2afb80b..b0ef334 100644 --- a/test/group-add.test.js +++ b/test/group-add.test.js @@ -5,29 +5,29 @@ const rimraf = require('rimraf') const SecretStack = require('secret-stack') const caps = require('ssb-caps') const p = require('util').promisify -const { generateKeypair } = require('./util') +const Keypair = require('ppppp-keypair') const DIR = path.join(os.tmpdir(), 'ppppp-db-group-add') rimraf.sync(DIR) test('group.add()', async (t) => { - const keys1 = generateKeypair('alice') - const keys2 = generateKeypair('bob') + const keypair1 = Keypair.generate('ed25519', 'alice') + const keypair2 = Keypair.generate('ed25519', 'bob') const peer = SecretStack({ appKey: caps.shs }) .use(require('../lib')) .use(require('ssb-box')) - .call(null, { keys: keys1, path: DIR }) + .call(null, { keypair: keypair1, path: DIR }) await peer.db.loaded() - const groupRec0 = await p(peer.db.group.create)({ keys: keys1 }) + const groupRec0 = await p(peer.db.group.create)({ keypair: keypair1 }) const group = groupRec0.hash - const groupRec1 = await p(peer.db.group.add)({ group, keys: keys2 }) + const groupRec1 = await p(peer.db.group.add)({ group, keypair: keypair2 }) t.ok(groupRec1, 'groupRec1 exists') const { hash, msg } = groupRec1 t.ok(hash, 'hash exists') - t.equals(msg.data.add, keys2.id, 'msg.data.add NEW KEY') + t.equals(msg.data.add, keypair2.public, 'msg.data.add NEW KEY') t.equals(msg.metadata.group, null, 'msg.metadata.group') t.equals(msg.metadata.groupTips, null, 'msg.metadata.groupTips') t.deepEquals( @@ -35,7 +35,7 @@ test('group.add()', async (t) => { { [group]: { depth: 1, prev: [group] } }, 'msg.metadata.tangles' ) - t.equals(msg.pubkey, keys1.id, 'msg.pubkey OLD KEY') + t.equals(msg.pubkey, keypair1.public, 'msg.pubkey OLD KEY') await p(peer.close)() }) @@ -43,25 +43,25 @@ test('group.add()', async (t) => { test('publish with a key in the group', async (t) => { rimraf.sync(DIR) - const keys1 = generateKeypair('alice') - const keys2 = generateKeypair('bob') + const keypair1 = Keypair.generate('ed25519', 'alice') + const keypair2 = Keypair.generate('ed25519', 'bob') let peer = SecretStack({ appKey: caps.shs }) .use(require('../lib')) .use(require('ssb-box')) - .call(null, { keys: keys1, path: DIR }) + .call(null, { keypair: keypair1, path: DIR }) await peer.db.loaded() - const groupRec0 = await p(peer.db.group.create)({ keys: keys1 }) + const groupRec0 = await p(peer.db.group.create)({ keypair: keypair1 }) const group = groupRec0.hash - const groupRec1 = await p(peer.db.group.add)({ group, keys: keys2 }) + const groupRec1 = await p(peer.db.group.add)({ group, keypair: keypair2 }) const postRec = await p(peer.db.feed.publish)({ group, type: 'post', data: { text: 'hello' }, - keys: keys2, + keypair: keypair2, }) t.equal(postRec.msg.data.text, 'hello', 'post text correct') const postsId = peer.db.feed.getId(group, 'post') @@ -87,12 +87,12 @@ test('publish with a key in the group', async (t) => { // Re-load as Carol, add the msgs to validate them rimraf.sync(DIR) - const keys3 = generateKeypair('carol') + const keypair3 = Keypair.generate('ed25519', 'carol') const carol = SecretStack({ appKey: caps.shs }) .use(require('../lib')) .use(require('ssb-box')) - .call(null, { keys: keys3, path: DIR }) + .call(null, { keypair: keypair3, path: DIR }) await carol.db.loaded() diff --git a/test/group-create.test.js b/test/group-create.test.js index 73a079f..b7982e9 100644 --- a/test/group-create.test.js +++ b/test/group-create.test.js @@ -5,50 +5,50 @@ const rimraf = require('rimraf') const SecretStack = require('secret-stack') const caps = require('ssb-caps') const p = require('util').promisify -const { generateKeypair } = require('./util') +const Keypair = require('ppppp-keypair') const DIR = path.join(os.tmpdir(), 'ppppp-db-group-create') rimraf.sync(DIR) test('group.create() without args', async (t) => { - const keys = generateKeypair('alice') + const keypair = Keypair.generate('ed25519', 'alice') const peer = SecretStack({ appKey: caps.shs }) .use(require('../lib')) .use(require('ssb-box')) - .call(null, { keys, path: DIR }) + .call(null, { keypair, path: DIR }) await peer.db.loaded() const groupRec0 = await p(peer.db.group.create)({}) t.ok(groupRec0, 'groupRec0 exists') const { hash, msg } = groupRec0 t.ok(hash, 'hash exists') - t.equals(msg.data.add, keys.id, 'msg.data.add') + t.equals(msg.data.add, keypair.public, 'msg.data.add') t.equals(msg.metadata.group, null, 'msg.metadata.group') t.equals(msg.metadata.groupTips, null, 'msg.metadata.groupTips') t.deepEquals(Object.keys(msg.metadata.tangles), [], 'msg.metadata.tangles') - t.equals(msg.pubkey, keys.id, 'msg.pubkey') + t.equals(msg.pubkey, keypair.public, 'msg.pubkey') await p(peer.close)() }) -test('group.create() with "keys" arg', async (t) => { - const keys = generateKeypair('alice') +test('group.create() with "keypair" arg', async (t) => { + const keypair = Keypair.generate('ed25519', 'alice') const peer = SecretStack({ appKey: caps.shs }) .use(require('../lib')) .use(require('ssb-box')) - .call(null, { keys, path: DIR }) + .call(null, { keypair, path: DIR }) await peer.db.loaded() - const groupRec0 = await p(peer.db.group.create)({ keys }) + const groupRec0 = await p(peer.db.group.create)({ keypair }) t.ok(groupRec0, 'groupRec0 exists') const { hash, msg } = groupRec0 t.ok(hash, 'hash exists') - t.equals(msg.data.add, keys.id, 'msg.data.add') + t.equals(msg.data.add, keypair.public, 'msg.data.add') t.equals(msg.metadata.group, null, 'msg.metadata.group') t.equals(msg.metadata.groupTips, null, 'msg.metadata.groupTips') t.deepEquals(Object.keys(msg.metadata.tangles), [], 'msg.metadata.tangles') - t.equals(msg.pubkey, keys.id, 'msg.pubkey') + t.equals(msg.pubkey, keypair.public, 'msg.pubkey') await p(peer.close)() }) diff --git a/test/msg-v2/create.test.js b/test/msg-v2/create.test.js index ad72b8f..790becb 100644 --- a/test/msg-v2/create.test.js +++ b/test/msg-v2/create.test.js @@ -1,15 +1,15 @@ const tape = require('tape') +const Keypair = require('ppppp-keypair') const MsgV2 = require('../../lib/msg-v2') -const { generateKeypair } = require('../util') let group tape('MsgV2.createGroup()', (t) => { - const keys = generateKeypair('alice') + const keypair = Keypair.generate('ed25519', 'alice') - const groupMsg0 = MsgV2.createGroup(keys, 'MYNONCE') + const groupMsg0 = MsgV2.createGroup(keypair, 'MYNONCE') console.log(JSON.stringify(groupMsg0, null, 2)) - t.equals(groupMsg0.data.add, keys.id, 'data.add') + t.equals(groupMsg0.data.add, keypair.public, 'data.add') t.equals(groupMsg0.metadata.dataHash, 'THi3VkJeaf8aTkLSNJUdFD', 'hash') t.equals(groupMsg0.metadata.dataSize, 72, 'size') t.equals(groupMsg0.metadata.group, null, 'group') @@ -17,7 +17,7 @@ tape('MsgV2.createGroup()', (t) => { t.deepEquals(groupMsg0.metadata.tangles, {}, 'tangles') t.equals(groupMsg0.metadata.type, 'group', 'type') t.equals(groupMsg0.metadata.v, 2, 'v') - t.equals(groupMsg0.pubkey, keys.id, 'pubkey') + t.equals(groupMsg0.pubkey, keypair.public, 'pubkey') group = MsgV2.getMsgHash(groupMsg0) t.equals(group, 'XKKmEBmqKGa5twQ2HNSk7t', 'group ID') @@ -28,9 +28,9 @@ tape('MsgV2.createGroup()', (t) => { let rootMsg = null let rootHash = null tape('MsgV2.createRoot()', (t) => { - const keys = generateKeypair('alice') + const keypair = Keypair.generate('ed25519', 'alice') - rootMsg = MsgV2.createRoot(group, 'post', keys) + rootMsg = MsgV2.createRoot(group, 'post', keypair) console.log(JSON.stringify(rootMsg, null, 2)) t.equals(rootMsg.data, null, 'data') @@ -41,7 +41,7 @@ tape('MsgV2.createRoot()', (t) => { t.deepEquals(rootMsg.metadata.tangles, {}, 'tangles') t.equals(rootMsg.metadata.type, 'post', 'type') t.equals(rootMsg.metadata.v, 2, 'v') - t.equals(rootMsg.pubkey, keys.id, 'pubkey') + t.equals(rootMsg.pubkey, keypair.public, 'pubkey') rootHash = MsgV2.getMsgHash(rootMsg) t.equals(rootHash, 'PzuT1Dwbbgn6a8NeLuHuKw', 'root hash') @@ -49,14 +49,14 @@ tape('MsgV2.createRoot()', (t) => { }) tape('MsgV2.create()', (t) => { - const keys = generateKeypair('alice') + const keypair = Keypair.generate('ed25519', 'alice') const data = { text: 'Hello world!' } const tangle1 = new MsgV2.Tangle(rootHash) tangle1.add(rootHash, rootMsg) const msg1 = MsgV2.create({ - keys, + keypair, data, group, groupTips: [group], @@ -116,7 +116,7 @@ tape('MsgV2.create()', (t) => { const data2 = { text: 'Ola mundo!' } const msg2 = MsgV2.create({ - keys, + keypair, data: data2, group, groupTips: [group], @@ -171,12 +171,12 @@ tape('MsgV2.create()', (t) => { }) tape('create() handles DAG tips correctly', (t) => { - const keys = generateKeypair('alice') + const keypair = Keypair.generate('ed25519', 'alice') const tangle = new MsgV2.Tangle(rootHash) tangle.add(rootHash, rootMsg) const msg1 = MsgV2.create({ - keys, + keypair, data: { text: '1' }, group, groupTips: [group], @@ -195,7 +195,7 @@ tape('create() handles DAG tips correctly', (t) => { tangle.add(msgHash1, msg1) const msg2A = MsgV2.create({ - keys, + keypair, data: { text: '2A' }, group, groupTips: [group], @@ -211,7 +211,7 @@ tape('create() handles DAG tips correctly', (t) => { ) const msg2B = MsgV2.create({ - keys, + keypair, data: { text: '2B' }, group, groupTips: [group], @@ -230,7 +230,7 @@ tape('create() handles DAG tips correctly', (t) => { tangle.add(msgHash2B, msg2B) const msg3 = MsgV2.create({ - keys, + keypair, data: { text: '3' }, group, groupTips: [group], @@ -252,7 +252,7 @@ tape('create() handles DAG tips correctly', (t) => { t.pass('msg2A comes into awareness') const msg4 = MsgV2.create({ - keys, + keypair, data: { text: '4' }, group, groupTips: [group], diff --git a/test/msg-v2/invalid-prev.test.js b/test/msg-v2/invalid-prev.test.js index cba4536..bc6deba 100644 --- a/test/msg-v2/invalid-prev.test.js +++ b/test/msg-v2/invalid-prev.test.js @@ -1,23 +1,23 @@ const tape = require('tape') const base58 = require('bs58') +const Keypair = require('ppppp-keypair') const MsgV2 = require('../../lib/msg-v2') -const { generateKeypair } = require('../util') -const keys = generateKeypair('alice') -const group = MsgV2.getMsgHash(MsgV2.createGroup(keys, 'MYNONCE')) -const pubkeys = new Set([keys.id]) +const keypair = Keypair.generate('ed25519', 'alice') +const group = MsgV2.getMsgHash(MsgV2.createGroup(keypair, 'MYNONCE')) +const pubkeys = new Set([keypair.public]) tape('invalid msg with non-array prev', (t) => { - const keys = generateKeypair('alice') + const keypair = Keypair.generate('ed25519', 'alice') - const rootMsg = MsgV2.createRoot(group, 'post', keys) + const rootMsg = MsgV2.createRoot(group, 'post', keypair) const rootHash = MsgV2.getMsgHash(rootMsg) const tangle = new MsgV2.Tangle(rootHash) tangle.add(rootHash, rootMsg) const msg = MsgV2.create({ - keys, + keypair, data: { text: 'Hello world!' }, group, groupTips: [group], @@ -40,16 +40,16 @@ tape('invalid msg with non-array prev', (t) => { }) tape('invalid msg with bad prev', (t) => { - const keys = generateKeypair('alice') + const keypair = Keypair.generate('ed25519', 'alice') - const rootMsg = MsgV2.createRoot(group, 'post', keys) + const rootMsg = MsgV2.createRoot(group, 'post', keypair) const rootHash = MsgV2.getMsgHash(rootMsg) const tangle = new MsgV2.Tangle(rootHash) tangle.add(rootHash, rootMsg) const msg1 = MsgV2.create({ - keys, + keypair, data: { text: 'Hello world!' }, group, groupTips: [group], @@ -62,7 +62,7 @@ tape('invalid msg with bad prev', (t) => { tangle.add(msgHash1, msg1) const msg2 = MsgV2.create({ - keys, + keypair, data: { text: 'Hello world!' }, group, groupTips: [group], @@ -86,16 +86,16 @@ tape('invalid msg with bad prev', (t) => { }) tape('invalid msg with URI in prev', (t) => { - const keys = generateKeypair('alice') + const keypair = Keypair.generate('ed25519', 'alice') - const rootMsg = MsgV2.createRoot(group, 'post', keys) + const rootMsg = MsgV2.createRoot(group, 'post', keypair) const rootHash = MsgV2.getMsgHash(rootMsg) const tangle = new MsgV2.Tangle(rootHash) tangle.add(rootHash, rootMsg) const msg1 = MsgV2.create({ - keys, + keypair, data: { text: 'Hello world!' }, group, groupTips: [group], @@ -108,7 +108,7 @@ tape('invalid msg with URI in prev', (t) => { tangle.add(msgHash1, msg1) const msg2 = MsgV2.create({ - keys, + keypair, data: { text: 'Hello world!' }, group, groupTips: [group], @@ -130,16 +130,16 @@ tape('invalid msg with URI in prev', (t) => { }) tape('invalid msg with unknown prev', (t) => { - const keys = generateKeypair('alice') + const keypair = Keypair.generate('ed25519', 'alice') - const rootMsg = MsgV2.createRoot(group, 'post', keys) + const rootMsg = MsgV2.createRoot(group, 'post', keypair) const rootHash = MsgV2.getMsgHash(rootMsg) const tangle = new MsgV2.Tangle(rootHash) tangle.add(rootHash, rootMsg) const msg1 = MsgV2.create({ - keys, + keypair, data: { text: 'Hello world!' }, group, groupTips: [group], @@ -152,7 +152,7 @@ tape('invalid msg with unknown prev', (t) => { tangle.add(msgHash1, msg1) const unknownMsg = MsgV2.create({ - keys, + keypair, data: { text: 'Alien' }, group, groupTips: [group], @@ -169,7 +169,7 @@ tape('invalid msg with unknown prev', (t) => { tangle2.add(unknownMsgHash, unknownMsg) const msg2 = MsgV2.create({ - keys, + keypair, data: { text: 'Hello world!' }, group, groupTips: [group], @@ -187,18 +187,18 @@ tape('invalid msg with unknown prev', (t) => { }) tape('invalid feed msg with a different pubkey', (t) => { - const keysA = generateKeypair('alice') - const keysB = generateKeypair('bob') + const keypairA = Keypair.generate('ed25519', 'alice') + const keypairB = Keypair.generate('ed25519', 'bob') - const groupB = MsgV2.getMsgHash(MsgV2.createGroup(keysB, 'MYNONCE')) + const groupB = MsgV2.getMsgHash(MsgV2.createGroup(keypairB, 'MYNONCE')) - const rootMsg = MsgV2.createRoot(group, 'post', keys) + const rootMsg = MsgV2.createRoot(group, 'post', keypair) const rootHash = MsgV2.getMsgHash(rootMsg) const feedTangle = new MsgV2.Tangle(rootHash) feedTangle.add(rootHash, rootMsg) const msg = MsgV2.create({ - keys: keysB, + keypair: keypairB, data: { text: 'Hello world!' }, group: groupB, groupTips: [groupB], @@ -219,15 +219,15 @@ tape('invalid feed msg with a different pubkey', (t) => { }) tape('invalid feed msg with a different type', (t) => { - const keysA = generateKeypair('alice') + const keypairA = Keypair.generate('ed25519', 'alice') - const rootMsg = MsgV2.createRoot(group, 'post', keys) + const rootMsg = MsgV2.createRoot(group, 'post', keypair) const rootHash = MsgV2.getMsgHash(rootMsg) const feedTangle = new MsgV2.Tangle(rootHash) feedTangle.add(rootHash, rootMsg) const msg = MsgV2.create({ - keys: keysA, + keypair: keypairA, data: { text: 'Hello world!' }, group, groupTips: [group], @@ -248,16 +248,16 @@ tape('invalid feed msg with a different type', (t) => { }) tape('invalid feed msg with non-alphabetical prev', (t) => { - const keys = generateKeypair('alice') + const keypair = Keypair.generate('ed25519', 'alice') - const rootMsg = MsgV2.createRoot(group, 'post', keys) + const rootMsg = MsgV2.createRoot(group, 'post', keypair) const rootHash = MsgV2.getMsgHash(rootMsg) const tangle = new MsgV2.Tangle(rootHash) tangle.add(rootHash, rootMsg) const msg1 = MsgV2.create({ - keys, + keypair, data: { text: '1' }, group, groupTips: [group], @@ -269,7 +269,7 @@ tape('invalid feed msg with non-alphabetical prev', (t) => { const msgHash1 = MsgV2.getMsgHash(msg1) const msg2 = MsgV2.create({ - keys, + keypair, data: { text: '2' }, group, groupTips: [group], @@ -284,7 +284,7 @@ tape('invalid feed msg with non-alphabetical prev', (t) => { tangle.add(msgHash2, msg2) const msg3 = MsgV2.create({ - keys, + keypair, data: { text: '3' }, group, groupTips: [group], @@ -314,16 +314,16 @@ tape('invalid feed msg with non-alphabetical prev', (t) => { }) tape('invalid feed msg with duplicate prev', (t) => { - const keys = generateKeypair('alice') + const keypair = Keypair.generate('ed25519', 'alice') - const rootMsg = MsgV2.createRoot(group, 'post', keys) + const rootMsg = MsgV2.createRoot(group, 'post', keypair) const rootHash = MsgV2.getMsgHash(rootMsg) const tangle = new MsgV2.Tangle(rootHash) tangle.add(rootHash, rootMsg) const msg1 = MsgV2.create({ - keys, + keypair, data: { text: '1' }, group, groupTips: [group], diff --git a/test/msg-v2/invalid-type.test.js b/test/msg-v2/invalid-type.test.js index 9a7427f..151ab1f 100644 --- a/test/msg-v2/invalid-type.test.js +++ b/test/msg-v2/invalid-type.test.js @@ -1,14 +1,14 @@ const tape = require('tape') +const Keypair = require('ppppp-keypair') const MsgV2 = require('../../lib/msg-v2') -const { generateKeypair } = require('../util') tape('invalid type not a string', (t) => { - const keys = generateKeypair('alice') + const keypair = Keypair.generate('ed25519', 'alice') t.throws( () => { MsgV2.create({ - keys, + keypair, data: { text: 'Hello world!' }, type: 123, }) @@ -20,12 +20,12 @@ tape('invalid type not a string', (t) => { }) tape('invalid type with "/" character', (t) => { - const keys = generateKeypair('alice') + const keypair = Keypair.generate('ed25519', 'alice') t.throws( () => { MsgV2.create({ - keys, + keypair, data: { text: 'Hello world!' }, type: 'group/init', }) @@ -37,12 +37,12 @@ tape('invalid type with "/" character', (t) => { }) tape('invalid type with "*" character', (t) => { - const keys = generateKeypair('alice') + const keypair = Keypair.generate('ed25519', 'alice') t.throws( () => { MsgV2.create({ - keys, + keypair, data: { text: 'Hello world!' }, type: 'star*', }) @@ -54,12 +54,12 @@ tape('invalid type with "*" character', (t) => { }) tape('invalid type too short', (t) => { - const keys = generateKeypair('alice') + const keypair = Keypair.generate('ed25519', 'alice') t.throws( () => { MsgV2.create({ - keys, + keypair, data: { text: 'Hello world!' }, type: 'xy', }) @@ -71,12 +71,12 @@ tape('invalid type too short', (t) => { }) tape('invalid type too long', (t) => { - const keys = generateKeypair('alice') + const keypair = Keypair.generate('ed25519', 'alice') t.throws( () => { MsgV2.create({ - keys, + keypair, data: { text: 'Hello world!' }, type: 'a'.repeat(120), }) diff --git a/test/msg-v2/lipmaa.test.js b/test/msg-v2/lipmaa.test.js index d8c54ee..cd5a8d5 100644 --- a/test/msg-v2/lipmaa.test.js +++ b/test/msg-v2/lipmaa.test.js @@ -1,13 +1,13 @@ const tape = require('tape') +const Keypair = require('ppppp-keypair') const MsgV2 = require('../../lib/msg-v2') -const { generateKeypair } = require('../util') tape('lipmaa prevs', (t) => { - const keys = generateKeypair('alice') - const group = MsgV2.getMsgHash(MsgV2.createGroup(keys, 'MYNONCE')) + const keypair = Keypair.generate('ed25519', 'alice') + const group = MsgV2.getMsgHash(MsgV2.createGroup(keypair, 'MYNONCE')) const data = { text: 'Hello world!' } - const rootMsg = MsgV2.createRoot(group, 'post', keys) + const rootMsg = MsgV2.createRoot(group, 'post', keypair) const rootHash = MsgV2.getMsgHash(rootMsg) const tangle = new MsgV2.Tangle(rootHash) tangle.add(rootHash, rootMsg) @@ -20,7 +20,7 @@ tape('lipmaa prevs', (t) => { tangles: { [rootHash]: tangle, }, - keys, + keypair, }) const msgHash1 = MsgV2.getMsgHash(msg1) tangle.add(msgHash1, msg1) @@ -35,7 +35,7 @@ tape('lipmaa prevs', (t) => { tangles: { [rootHash]: tangle, }, - keys, + keypair, }) const msgHash2 = MsgV2.getMsgHash(msg2) tangle.add(msgHash2, msg2) @@ -50,7 +50,7 @@ tape('lipmaa prevs', (t) => { tangles: { [rootHash]: tangle, }, - keys, + keypair, }) const msgHash3 = MsgV2.getMsgHash(msg3) tangle.add(msgHash3, msg3) @@ -65,7 +65,7 @@ tape('lipmaa prevs', (t) => { group, groupTips: [group], type: 'post', - keys, + keypair, tangles: { [rootHash]: tangle, }, @@ -84,7 +84,7 @@ tape('lipmaa prevs', (t) => { tangles: { [rootHash]: tangle, }, - keys, + keypair, }) const msgHash5 = MsgV2.getMsgHash(msg5) tangle.add(msgHash5, msg5) @@ -99,7 +99,7 @@ tape('lipmaa prevs', (t) => { tangles: { [rootHash]: tangle, }, - keys, + keypair, }) const msgHash6 = MsgV2.getMsgHash(msg6) tangle.add(msgHash6, msg6) @@ -114,7 +114,7 @@ tape('lipmaa prevs', (t) => { tangles: { [rootHash]: tangle, }, - keys, + keypair, }) const msgHash7 = MsgV2.getMsgHash(msg7) tangle.add(msgHash7, msg7) diff --git a/test/msg-v2/tangles.test.js b/test/msg-v2/tangles.test.js index 93a7612..9415fca 100644 --- a/test/msg-v2/tangles.test.js +++ b/test/msg-v2/tangles.test.js @@ -1,19 +1,19 @@ const tape = require('tape') +const Keypair = require('ppppp-keypair') const MsgV2 = require('../../lib/msg-v2') -const { generateKeypair } = require('../util') tape('simple multi-author tangle', (t) => { - const keysA = generateKeypair('alice') - const keysB = generateKeypair('bob') - const groupA = MsgV2.getMsgHash(MsgV2.createGroup(keysA, 'alice')) - const groupB = MsgV2.getMsgHash(MsgV2.createGroup(keysB, 'bob')) + const keypairA = Keypair.generate('ed25519', 'alice') + const keypairB = Keypair.generate('ed25519', 'bob') + const groupA = MsgV2.getMsgHash(MsgV2.createGroup(keypairA, 'alice')) + const groupB = MsgV2.getMsgHash(MsgV2.createGroup(keypairB, 'bob')) - const rootMsgA = MsgV2.createRoot(groupA, 'post', keysA) + const rootMsgA = MsgV2.createRoot(groupA, 'post', keypairA) const rootHashA = MsgV2.getMsgHash(rootMsgA) const tangleA = new MsgV2.Tangle(rootHashA) tangleA.add(rootHashA, rootMsgA) - const rootMsgB = MsgV2.createRoot(groupB, 'post', keysB) + const rootMsgB = MsgV2.createRoot(groupB, 'post', keypairB) const rootHashB = MsgV2.getMsgHash(rootMsgB) const tangleB = new MsgV2.Tangle(rootHashB) tangleB.add(rootHashB, rootMsgB) @@ -26,7 +26,7 @@ tape('simple multi-author tangle', (t) => { tangles: { [rootHashA]: tangleA, }, - keys: keysA, + keypair: keypairA, }) const msgHash1 = MsgV2.getMsgHash(msg1) t.deepEquals( @@ -47,7 +47,7 @@ tape('simple multi-author tangle', (t) => { [rootHashB]: tangleB, [msgHash1]: tangleX, }, - keys: keysB, + keypair: keypairB, }) t.deepEquals( @@ -73,19 +73,19 @@ tape('simple multi-author tangle', (t) => { }) tape('lipmaa in multi-author tangle', (t) => { - const keysA = generateKeypair('alice') - const keysB = generateKeypair('bob') - const groupA = MsgV2.getMsgHash(MsgV2.createGroup(keysA, 'alice')) - const groupB = MsgV2.getMsgHash(MsgV2.createGroup(keysB, 'bob')) + const keypairA = Keypair.generate('ed25519', 'alice') + const keypairB = Keypair.generate('ed25519', 'bob') + const groupA = MsgV2.getMsgHash(MsgV2.createGroup(keypairA, 'alice')) + const groupB = MsgV2.getMsgHash(MsgV2.createGroup(keypairB, 'bob')) const data = { text: 'Hello world!' } - const rootMsgA = MsgV2.createRoot(groupA, 'post', keysA) + const rootMsgA = MsgV2.createRoot(groupA, 'post', keypairA) const rootHashA = MsgV2.getMsgHash(rootMsgA) const tangleA = new MsgV2.Tangle(rootHashA) tangleA.add(rootHashA, rootMsgA) - const rootMsgB = MsgV2.createRoot(groupB, 'post', keysB) + const rootMsgB = MsgV2.createRoot(groupB, 'post', keypairB) const rootHashB = MsgV2.getMsgHash(rootMsgB) const tangleB = new MsgV2.Tangle(rootHashB) tangleB.add(rootHashB, rootMsgB) @@ -98,7 +98,7 @@ tape('lipmaa in multi-author tangle', (t) => { tangles: { [rootHashA]: tangleA, }, - keys: keysA, + keypair: keypairA, }) const msgHash1 = MsgV2.getMsgHash(msg1) tangleA.add(msgHash1, msg1) @@ -120,7 +120,7 @@ tape('lipmaa in multi-author tangle', (t) => { [rootHashB]: tangleB, [msgHash1]: tangleThread, }, - keys: keysB, + keypair: keypairB, }) const msgHash2 = MsgV2.getMsgHash(msg2) tangleB.add(msgHash2, msg2) @@ -141,7 +141,7 @@ tape('lipmaa in multi-author tangle', (t) => { [rootHashB]: tangleB, [msgHash1]: tangleThread, }, - keys: keysB, + keypair: keypairB, }) const msgHash3 = MsgV2.getMsgHash(msg3) tangleB.add(msgHash3, msg3) @@ -162,7 +162,7 @@ tape('lipmaa in multi-author tangle', (t) => { [rootHashA]: tangleA, [msgHash1]: tangleThread, }, - keys: keysA, + keypair: keypairA, }) const msgHash4 = MsgV2.getMsgHash(msg4) tangleB.add(msgHash4, msg4) diff --git a/test/msg-v2/validate.test.js b/test/msg-v2/validate.test.js index f24e10c..5039f26 100644 --- a/test/msg-v2/validate.test.js +++ b/test/msg-v2/validate.test.js @@ -1,13 +1,13 @@ const tape = require('tape') +const Keypair = require('ppppp-keypair') const MsgV2 = require('../../lib/msg-v2') -const { generateKeypair } = require('../util') tape('validate root msg', (t) => { - const keys = generateKeypair('alice') - const group = MsgV2.getMsgHash(MsgV2.createGroup(keys, 'alice')) - const pubkeys = new Set([keys.id]) + const keypair = Keypair.generate('ed25519', 'alice') + const group = MsgV2.getMsgHash(MsgV2.createGroup(keypair, 'alice')) + const pubkeys = new Set([keypair.public]) - const rootMsg = MsgV2.createRoot(group, 'post', keys) + const rootMsg = MsgV2.createRoot(group, 'post', keypair) const rootHash = MsgV2.getMsgHash(rootMsg) const tangle = new MsgV2.Tangle(rootHash) @@ -19,10 +19,10 @@ tape('validate root msg', (t) => { tape('validate group tangle', (t) => { const pubkeys = new Set() - const keys1 = generateKeypair('alice') - pubkeys.add(keys1.id) + const keypair1 = Keypair.generate('ed25519', 'alice') + pubkeys.add(keypair1.public) - const groupMsg0 = MsgV2.createGroup(keys1, 'alice') + const groupMsg0 = MsgV2.createGroup(keypair1, 'alice') const group = MsgV2.getMsgHash(groupMsg0) const groupMsg0Hash = group @@ -34,17 +34,17 @@ tape('validate group tangle', (t) => { tangle.add(group, groupMsg0) - const keys2 = generateKeypair('bob') + const keypair2 = Keypair.generate('ed25519', 'bob') const groupMsg1 = MsgV2.create({ group: null, groupTips: null, type: 'group', - data: { add: keys2.id }, + data: { add: keypair2.public }, tangles: { [group]: tangle, }, - keys: keys1, // announcing keys2 but signing with keys1 + keypair: keypair1, // announcing keypair2 but signing with keypair1 }) const groupMsg1Hash = MsgV2.getMsgHash(groupMsg1) @@ -55,11 +55,11 @@ tape('validate group tangle', (t) => { }) tape('validate 2nd msg with existing root', (t) => { - const keys = generateKeypair('alice') - const group = MsgV2.getMsgHash(MsgV2.createGroup(keys, 'alice')) - const pubkeys = new Set([keys.id]) + const keypair = Keypair.generate('ed25519', 'alice') + const group = MsgV2.getMsgHash(MsgV2.createGroup(keypair, 'alice')) + const pubkeys = new Set([keypair.public]) - const rootMsg = MsgV2.createRoot(group, 'post', keys) + const rootMsg = MsgV2.createRoot(group, 'post', keypair) const rootHash = MsgV2.getMsgHash(rootMsg) const tangle = new MsgV2.Tangle(rootHash) tangle.add(rootHash, rootMsg) @@ -72,7 +72,7 @@ tape('validate 2nd msg with existing root', (t) => { tangles: { [rootHash]: tangle, }, - keys, + keypair, }) const msgHash1 = MsgV2.getMsgHash(msg1) tangle.add(msgHash1, msg1) @@ -84,11 +84,11 @@ tape('validate 2nd msg with existing root', (t) => { }) tape('validate 2nd forked msg', (t) => { - const keys = generateKeypair('alice') - const group = MsgV2.getMsgHash(MsgV2.createGroup(keys, 'alice')) - const pubkeys = new Set([keys.id]) + const keypair = Keypair.generate('ed25519', 'alice') + const group = MsgV2.getMsgHash(MsgV2.createGroup(keypair, 'alice')) + const pubkeys = new Set([keypair.public]) - const rootMsg = MsgV2.createRoot(group, 'post', keys) + const rootMsg = MsgV2.createRoot(group, 'post', keypair) const rootHash = MsgV2.getMsgHash(rootMsg) const tangle = new MsgV2.Tangle(rootHash) tangle.add(rootHash, rootMsg) @@ -101,7 +101,7 @@ tape('validate 2nd forked msg', (t) => { tangles: { [rootHash]: tangle, }, - keys, + keypair, }) const msgHash1A = MsgV2.getMsgHash(msg1A) @@ -113,7 +113,7 @@ tape('validate 2nd forked msg', (t) => { tangles: { [rootHash]: tangle, }, - keys, + keypair, }) const msgHash1B = MsgV2.getMsgHash(msg1B) diff --git a/test/msgs-iterator.test.js b/test/msgs-iterator.test.js index 0b0d227..8fb8395 100644 --- a/test/msgs-iterator.test.js +++ b/test/msgs-iterator.test.js @@ -5,16 +5,16 @@ const rimraf = require('rimraf') const SecretStack = require('secret-stack') const caps = require('ssb-caps') const p = require('util').promisify -const { generateKeypair } = require('./util') +const Keypair = require('ppppp-keypair') const DIR = path.join(os.tmpdir(), 'ppppp-db-msgs-iter') rimraf.sync(DIR) test('msgs() iterator', async (t) => { - const keys = generateKeypair('alice') + const keypair = Keypair.generate('ed25519', 'alice') const peer = SecretStack({ appKey: caps.shs }) .use(require('../lib')) - .call(null, { keys, path: DIR }) + .call(null, { keypair, path: DIR }) await peer.db.loaded() @@ -27,7 +27,7 @@ test('msgs() iterator', async (t) => { data: i % 2 === 0 ? { text: 'hello ' + i } - : { about: peer.id, name: 'Mr. #' + i }, + : { about: keypair.public, name: 'Mr. #' + i }, }) } diff --git a/test/on-record-added.test.js b/test/on-record-added.test.js index 65edc41..fe75b59 100644 --- a/test/on-record-added.test.js +++ b/test/on-record-added.test.js @@ -5,16 +5,16 @@ const os = require('os') const SecretStack = require('secret-stack') const caps = require('ssb-caps') const p = require('util').promisify -const { generateKeypair } = require('./util') +const Keypair = require('ppppp-keypair') const DIR = path.join(os.tmpdir(), 'ppppp-db-on-msg-added') rimraf.sync(DIR) test('onRecordAdded', async (t) => { - const keys = generateKeypair('alice') + const keypair = Keypair.generate('ed25519', 'alice') const peer = SecretStack({ appKey: caps.shs }) .use(require('../lib')) - .call(null, { keys, path: DIR }) + .call(null, { keypair, path: DIR }) await peer.db.loaded() diff --git a/test/re-open.test.js b/test/re-open.test.js index 9612558..e659928 100644 --- a/test/re-open.test.js +++ b/test/re-open.test.js @@ -5,17 +5,17 @@ const rimraf = require('rimraf') const SecretStack = require('secret-stack') const caps = require('ssb-caps') const p = require('util').promisify -const { generateKeypair } = require('./util') +const Keypair = require('ppppp-keypair') const DIR = path.join(os.tmpdir(), 'ppppp-db-re-open') rimraf.sync(DIR) test('publish some msgs, close, re-open', async (t) => { - const keys = generateKeypair('alice') + const keypair = Keypair.generate('ed25519', 'alice') const peer = SecretStack({ appKey: caps.shs }) .use(require('../lib')) .use(require('ssb-box')) - .call(null, { keys, path: DIR }) + .call(null, { keypair, path: DIR }) await peer.db.loaded() const group = (await p(peer.db.group.create)(null)).hash @@ -41,7 +41,7 @@ test('publish some msgs, close, re-open', async (t) => { const peer2 = SecretStack({ appKey: caps.shs }) .use(require('../lib')) .use(require('ssb-box')) - .call(null, { keys, path: DIR }) + .call(null, { keypair, path: DIR }) t.pass('re-opened') await peer2.db.loaded() diff --git a/test/records-iterator.test.js b/test/records-iterator.test.js index a7363f7..852ae4a 100644 --- a/test/records-iterator.test.js +++ b/test/records-iterator.test.js @@ -5,16 +5,16 @@ const rimraf = require('rimraf') const SecretStack = require('secret-stack') const caps = require('ssb-caps') const p = require('util').promisify -const { generateKeypair } = require('./util') +const Keypair = require('ppppp-keypair') const DIR = path.join(os.tmpdir(), 'ppppp-db-records-iter') rimraf.sync(DIR) test('records() iterator', async (t) => { - const keys = generateKeypair('alice') + const keypair = Keypair.generate('ed25519', 'alice') const peer = SecretStack({ appKey: caps.shs }) .use(require('../lib')) - .call(null, { keys, path: DIR }) + .call(null, { keypair, path: DIR }) await peer.db.loaded() const group = (await p(peer.db.group.create)(null)).hash @@ -26,7 +26,7 @@ test('records() iterator', async (t) => { data: i % 2 === 0 ? { text: 'hello ' + i } - : { about: peer.id, name: 'Mr. #' + i }, + : { about: keypair.public, name: 'Mr. #' + i }, }) } diff --git a/test/util.js b/test/util.js deleted file mode 100644 index 5d30062..0000000 --- a/test/util.js +++ /dev/null @@ -1,14 +0,0 @@ -const ssbKeys = require('ssb-keys') -const SSBURI = require('ssb-uri2') -const base58 = require('bs58') - -function generateKeypair(seed) { - const keys = ssbKeys.generate('ed25519', seed, 'buttwoo-v1') - const { data } = SSBURI.decompose(keys.id) - keys.id = base58.encode(Buffer.from(data, 'base64')) - return keys -} - -module.exports = { - generateKeypair, -}