diff --git a/src/identities/identities.js b/src/identities/identities.js index e19b0fd..59c86e1 100644 --- a/src/identities/identities.js +++ b/src/identities/identities.js @@ -2,7 +2,7 @@ import Identity, { isIdentity, isEqual, decodeIdentity } from './identity.js' import OrbitDBIdentityProvider from './providers/orbitdb.js' // import DIDIdentityProvider from './identity-providers/did.js' // import EthIdentityProvider from './identity-providers/ethereum.js' -import * as KeyStore from '../key-store.js' +import KeyStore, { signMessage, verifyMessage } from '../key-store.js' import { LRUStorage, IPFSBlockStorage, MemoryStorage } from '../storage/index.js' import path from 'path' @@ -16,7 +16,7 @@ const supportedTypes = { } const Identities = async ({ keystore, identityKeysPath, storage, ipfs } = {}) => { - keystore = keystore || new KeyStore(identityKeysPath || DefaultIdentityKeysPath) + keystore = keystore || await KeyStore(identityKeysPath || DefaultIdentityKeysPath) storage = storage || (ipfs ? await IPFSBlockStorage({ ipfs, pin: true }) : await MemoryStorage()) const verifiedIdentitiesCache = await LRUStorage({ size: 1000 }) @@ -38,7 +38,7 @@ const Identities = async ({ keystore, identityKeysPath, storage, ipfs } = {}) => const privateKey = await keystore.getKey(id) || await keystore.createKey(id) const publicKey = keystore.getPublic(privateKey) - const idSignature = await KeyStore.sign(privateKey, id) + const idSignature = await signMessage(privateKey, id) const publicKeyAndIdSignature = await identityProvider.signIdentity(publicKey + idSignature, options) const signatures = { id: idSignature, @@ -86,11 +86,11 @@ const Identities = async ({ keystore, identityKeysPath, storage, ipfs } = {}) => throw new Error('Private signing key not found from KeyStore') } - return KeyStore.sign(signingKey, data) + return await signMessage(signingKey, data) } const verify = async (signature, publicKey, data) => { - return KeyStore.verify(signature, publicKey, data) + return await verifyMessage(signature, publicKey, data) } return { diff --git a/src/identities/providers/orbitdb.js b/src/identities/providers/orbitdb.js index 11f4a40..a438150 100644 --- a/src/identities/providers/orbitdb.js +++ b/src/identities/providers/orbitdb.js @@ -1,5 +1,5 @@ import IdentityProvider from './interface.js' -import * as KeyStore from '../../key-store.js' +import KeyStore, { signMessage, verifyMessage } from '../../key-store.js' const type = 'orbitdb' @@ -35,13 +35,13 @@ class OrbitDBIdentityProvider extends IdentityProvider { throw new Error(`Signing key for '${id}' not found`) } - return KeyStore.sign(key, data) + return signMessage(key, data) } static async verifyIdentity (identity) { const { id, publicKey, signatures } = identity // Verify that identity was signed by the ID - return KeyStore.verify(signatures.publicKey, id, publicKey + signatures.id) + return verifyMessage(signatures.publicKey, id, publicKey + signatures.id) } } diff --git a/src/key-store.js b/src/key-store.js index f181bd8..26aae39 100644 --- a/src/key-store.js +++ b/src/key-store.js @@ -38,7 +38,7 @@ const verifySignature = async (signature, publicKey, data) => { return Promise.resolve(res) } -const sign = async (key, data) => { +const signMessage = async (key, data) => { if (!key) { throw new Error('No signing key given') } @@ -54,7 +54,7 @@ const sign = async (key, data) => { return Buffer.from(await key.sign(data)).toString('hex') } -const verify = async (signature, publicKey, data) => { +const verifyMessage = async (signature, publicKey, data) => { // const cached = verifiedCache.get(signature) const cached = null let res = false @@ -222,6 +222,6 @@ const KeyStore = async ({ storage, cache } = {}) => { export { KeyStore as default, - verify, - sign + verifyMessage, + signMessage } diff --git a/test/identities/did-identity-provider.test.js b/test/identities/did-identity-provider.test.js index c7d842d..8a7d222 100644 --- a/test/identities/did-identity-provider.test.js +++ b/test/identities/did-identity-provider.test.js @@ -1,8 +1,9 @@ import assert from 'assert' import path from 'path' import rmrf from 'rimraf' -import { KeyStore, Identities } from '../../src/index.js' -import { Identity, addIdentityProvider } from '../../src/identities/index.js' +import KeyStore, { signMessage, verifyMessage } from '../../src/key-store.js' +import Identities, { addIdentityProvider } from '../../src/identities/identities.js' +import Identity from '../../src/identities/identity.js' import { Ed25519Provider } from 'key-did-provider-ed25519' import KeyDidResolver from 'key-did-resolver' import DIDIdentityProvider from '../../src/identities/providers/did.js' @@ -16,8 +17,7 @@ describe('DID Identity Provider', function () { let identities before(async () => { - keystore = new KeyStore() - await keystore.open() + keystore = await KeyStore() DIDIdentityProvider.setDIDResolver(KeyDidResolver.getResolver()) addIdentityProvider(DIDIdentityProvider) identities = await Identities({ keystore }) @@ -56,15 +56,15 @@ describe('DID Identity Provider', function () { it('has a signature for the id', async () => { const signingKey = await keystore.getKey(didStr) - const idSignature = await KeyStore.sign(signingKey, didStr) - const verifies = await KeyStore.verify(idSignature, identity.publicKey, didStr) + const idSignature = await signMessage(signingKey, didStr) + const verifies = await verifyMessage(idSignature, identity.publicKey, didStr) assert.strictEqual(verifies, true) assert.strictEqual(identity.signatures.id, idSignature) }) it('has a signature for the publicKey', async () => { const signingKey = await keystore.getKey(didStr) - const idSignature = await KeyStore.sign(signingKey, didStr) + const idSignature = await signMessage(signingKey, didStr) assert.notStrictEqual(idSignature, undefined) }) }) @@ -106,7 +106,7 @@ describe('DID Identity Provider', function () { it('sign data', async () => { const signingKey = await keystore.getKey(identity.id) - const expectedSignature = await KeyStore.sign(signingKey, data) + const expectedSignature = await signMessage(signingKey, data) const signature = await identities.sign(identity, data, keystore) assert.strictEqual(signature, expectedSignature) }) diff --git a/test/identities/ethereum-identity-provider.test.js b/test/identities/ethereum-identity-provider.test.js index 7af290a..39228e2 100644 --- a/test/identities/ethereum-identity-provider.test.js +++ b/test/identities/ethereum-identity-provider.test.js @@ -1,8 +1,9 @@ import assert from 'assert' import path from 'path' import rmrf from 'rimraf' -import { KeyStore, Identities } from '../../src/index.js' -import { Identity, addIdentityProvider } from '../../src/identities/index.js' +import KeyStore, { signMessage, verifyMessage } from '../../src/key-store.js' +import Identities, { addIdentityProvider } from '../../src/identities/identities.js' +import Identity from '../../src/identities/identity.js' import EthIdentityProvider from '../../src/identities/providers/ethereum.js' const type = EthIdentityProvider.type @@ -12,8 +13,8 @@ describe('Ethereum Identity Provider', function () { let identities before(async () => { - keystore = new KeyStore() - await keystore.open() + keystore = await KeyStore() + addIdentityProvider(EthIdentityProvider) identities = await Identities({ keystore }) }) @@ -53,15 +54,15 @@ describe('Ethereum Identity Provider', function () { it('has a signature for the id', async () => { const signingKey = await keystore.getKey(wallet.address) - const idSignature = await KeyStore.sign(signingKey, wallet.address) - const verifies = await KeyStore.verify(idSignature, Buffer.from(signingKey.public.marshal()).toString('hex'), wallet.address) + const idSignature = await signMessage(signingKey, wallet.address) + const verifies = await verifyMessage(idSignature, Buffer.from(signingKey.public.marshal()).toString('hex'), wallet.address) assert.strictEqual(verifies, true) assert.strictEqual(identity.signatures.id, idSignature) }) it('has a signature for the publicKey', async () => { const signingKey = await keystore.getKey(wallet.address) - const idSignature = await KeyStore.sign(signingKey, wallet.address) + const idSignature = await signMessage(signingKey, wallet.address) const publicKeyAndIdSignature = await wallet.signMessage(identity.publicKey + idSignature) assert.strictEqual(identity.signatures.publicKey, publicKeyAndIdSignature) }) @@ -102,7 +103,7 @@ describe('Ethereum Identity Provider', function () { it('sign data', async () => { const signingKey = await keystore.getKey(identity.id) - const expectedSignature = await KeyStore.sign(signingKey, data) + const expectedSignature = await signMessage(signingKey, data) const signature = await identities.sign(identity, data, keystore) assert.strictEqual(signature, expectedSignature) }) diff --git a/test/identities/identities.test.js b/test/identities/identities.test.js index 289df24..2bd21a2 100644 --- a/test/identities/identities.test.js +++ b/test/identities/identities.test.js @@ -1,8 +1,9 @@ import assert from 'assert' import path from 'path' import rmrf from 'rimraf' -import { KeyStore, Identities } from '../../src/index.js' -import { Identity, addIdentityProvider } from '../../src/identities/index.js' +import KeyStore, { signMessage, verifyMessage } from '../../src/key-store.js' +import Identities, { addIdentityProvider } from '../../src/identities/identities.js' +import Identity from '../../src/identities/identity.js' import fs from 'fs-extra' const fixturesPath = path.resolve('./test/identities/fixtures/keys') const savedKeysPath = path.resolve('./test/identities/fixtures/savedKeys') @@ -73,8 +74,8 @@ describe('Identities', function () { let keystore before(async () => { - keystore = new KeyStore(identityKeysPath) - await keystore.open() + keystore = await KeyStore(identityKeysPath) + identities = await Identities({ keystore }) }) @@ -110,9 +111,9 @@ describe('Identities', function () { const key = await keystore.getKey(id) const externalId = Buffer.from(key.public.marshal()).toString('hex') const signingKey = await keystore.getKey(externalId) - const idSignature = await KeyStore.sign(signingKey, externalId) + const idSignature = await signMessage(signingKey, externalId) const publicKey = Buffer.from(signingKey.public.marshal()).toString('hex') - const verifies = await KeyStore.verify(idSignature, publicKey, externalId) + const verifies = await verifyMessage(idSignature, publicKey, externalId) assert.strictEqual(verifies, true) assert.strictEqual(identity.signatures.id, idSignature) }) @@ -121,9 +122,9 @@ describe('Identities', function () { const key = await keystore.getKey(id) const externalId = Buffer.from(key.public.marshal()).toString('hex') const signingKey = await keystore.getKey(externalId) - const idSignature = await KeyStore.sign(signingKey, externalId) + const idSignature = await signMessage(signingKey, externalId) const externalKey = await keystore.getKey(id) - const publicKeyAndIdSignature = await KeyStore.sign(externalKey, identity.publicKey + idSignature) + const publicKeyAndIdSignature = await signMessage(externalKey, identity.publicKey + idSignature) assert.strictEqual(identity.signatures.publicKey, publicKeyAndIdSignature) }) }) @@ -142,8 +143,7 @@ describe('Identities', function () { before(async () => { await fs.copy(fixturesPath, savedKeysPath) - savedKeysKeyStore = new KeyStore(savedKeysPath) - await savedKeysKeyStore.open() + savedKeysKeyStore = await KeyStore(savedKeysPath) identities = await Identities({ keystore: savedKeysKeyStore }) identity = await identities.createIdentity({ id }) @@ -181,8 +181,8 @@ describe('Identities', function () { it('has the correct signatures', async () => { const internalSigningKey = await savedKeysKeyStore.getKey(identity.id) const externalSigningKey = await savedKeysKeyStore.getKey(id) - const idSignature = await KeyStore.sign(internalSigningKey, identity.id) - const publicKeyAndIdSignature = await KeyStore.sign(externalSigningKey, identity.publicKey + idSignature) + const idSignature = await signMessage(internalSigningKey, identity.id) + const publicKeyAndIdSignature = await signMessage(externalSigningKey, identity.publicKey + idSignature) const expectedSignature = { id: idSignature, publicKey: publicKeyAndIdSignature } assert.deepStrictEqual(identity.signatures, expectedSignature) }) @@ -196,8 +196,7 @@ describe('Identities', function () { let keystore before(async () => { - keystore = new KeyStore(identityKeysPath) - await keystore.open() + keystore = await KeyStore(identityKeysPath) }) after(async () => { @@ -209,14 +208,14 @@ describe('Identities', function () { it('identity pkSignature verifies', async () => { identities = await Identities({ keystore }) identity = await identities.createIdentity({ id, type }) - const verified = await KeyStore.verify(identity.signatures.id, identity.publicKey, identity.id) + const verified = await verifyMessage(identity.signatures.id, identity.publicKey, identity.id) assert.strictEqual(verified, true) }) it('identity signature verifies', async () => { identities = await Identities({ keystore }) identity = await identities.createIdentity({ id, type }) - const verified = await KeyStore.verify(identity.signatures.publicKey, identity.id, identity.publicKey + identity.signatures.id) + const verified = await verifyMessage(identity.signatures.publicKey, identity.id, identity.publicKey + identity.signatures.id) assert.strictEqual(verified, true) }) @@ -246,8 +245,8 @@ describe('Identities', function () { let keystore before(async () => { - keystore = new KeyStore(identityKeysPath) - await keystore.open() + keystore = await KeyStore(identityKeysPath) + identities = await Identities({ keystore }) }) @@ -273,8 +272,8 @@ describe('Identities', function () { let keystore before(async () => { - keystore = new KeyStore(identityKeysPath) - await keystore.open() + keystore = await KeyStore(identityKeysPath) + identities = await Identities({ keystore }) identity = await identities.createIdentity({ id }) }) @@ -287,7 +286,7 @@ describe('Identities', function () { it('sign data', async () => { const signingKey = await keystore.getKey(identity.id) - const expectedSignature = await KeyStore.sign(signingKey, data) + const expectedSignature = await signMessage(signingKey, data) const signature = await identities.sign(identity, data, keystore) assert.strictEqual(signature, expectedSignature) }) @@ -318,8 +317,7 @@ describe('Identities', function () { let signature before(async () => { - keystore = new KeyStore(identityKeysPath) - await keystore.open() + keystore = await KeyStore(identityKeysPath) }) after(async () => { diff --git a/test/key-store.test.js b/test/key-store.test.js index 9d00281..2edf2db 100644 --- a/test/key-store.test.js +++ b/test/key-store.test.js @@ -1,6 +1,6 @@ import { strictEqual, deepStrictEqual } from 'assert' import LevelStorage from '../src/storage/level.js' -import KeyStore, { sign, verify } from '../src/key-store.js' +import KeyStore, { signMessage, verifyMessage } from '../src/key-store.js' import { testAPIs } from 'orbit-db-test-utils' import path from 'path' import fs from 'fs-extra' @@ -154,14 +154,14 @@ Object.keys(testAPIs).forEach((IPFS) => { const expected = '304402207eb6e4f4b2c56665c505696c41ec0831c6c2998620589d4b6f405d49134dea5102207e71ba37d94b7a70e3d9fb3bea7c8d8b7082c3c880b6831e9613a0a3e7aabd9f' const key = await keystore.getKey('userA') - const actual = await sign(key, 'data data data') + const actual = await signMessage(key, 'data data data') strictEqual(actual, expected) }) it('throws an error if no key is passed', async () => { let err try { - await sign(null, 'data data data') + await signMessage(null, 'data data data') } catch (e) { err = e.toString() } @@ -173,7 +173,7 @@ Object.keys(testAPIs).forEach((IPFS) => { const key = 'key_1' let err try { - await sign(key) + await signMessage(key) } catch (e) { err = e.toString() } @@ -258,17 +258,17 @@ Object.keys(testAPIs).forEach((IPFS) => { it('verifies content', async () => { const signature = '304402207eb6e4f4b2c56665c505696c41ec0831c6c2998620589d4b6f405d49134dea5102207e71ba37d94b7a70e3d9fb3bea7c8d8b7082c3c880b6831e9613a0a3e7aabd9f' - const verified = await verify(signature, publicKey, 'data data data') + const verified = await verifyMessage(signature, publicKey, 'data data data') strictEqual(verified, true) }) it('verifies content with cache', async () => { const data = 'data'.repeat(1024 * 1024) - const signature = await sign(key, data) + const signature = await signMessage(key, data) const startTime = new Date().getTime() - await verify(signature, publicKey, data) + await verifyMessage(signature, publicKey, data) const first = new Date().getTime() - await verify(signature, publicKey, data) + await verifyMessage(signature, publicKey, data) const after = new Date().getTime() console.log('First pass:', first - startTime, 'ms', 'Cached:', after - first, 'ms') strictEqual(first - startTime > after - first, true) @@ -276,7 +276,7 @@ Object.keys(testAPIs).forEach((IPFS) => { it('does not verify content with bad signature', async () => { const signature = 'xxxxxx' - const verified = await verify(signature, publicKey, 'data data data') + const verified = await verifyMessage(signature, publicKey, 'data data data') strictEqual(verified, false) }) }) diff --git a/test/oplog/append.test.js b/test/oplog/append.test.js index e221cf7..21aaf83 100644 --- a/test/oplog/append.test.js +++ b/test/oplog/append.test.js @@ -28,7 +28,7 @@ Object.keys(testAPIs).forEach((IPFS) => { await copy(identityKeyFixtures, identityKeysPath) await copy(signingKeyFixtures, identityKeysPath) - keystore = new KeyStore(identityKeysPath) + keystore = await KeyStore(identityKeysPath) const storage = await MemoryStorage() diff --git a/test/oplog/crdt.test.js b/test/oplog/crdt.test.js index 3337243..0365b40 100644 --- a/test/oplog/crdt.test.js +++ b/test/oplog/crdt.test.js @@ -28,7 +28,7 @@ Object.keys(testAPIs).forEach((IPFS) => { await copy(identityKeyFixtures, identityKeysPath) await copy(signingKeyFixtures, identityKeysPath) - keystore = new KeyStore(identityKeysPath) + keystore = await KeyStore(identityKeysPath) const storage = await MemoryStorage() diff --git a/test/oplog/entry.test.js b/test/oplog/entry.test.js index 99354ee..2e4ab38 100644 --- a/test/oplog/entry.test.js +++ b/test/oplog/entry.test.js @@ -30,7 +30,7 @@ Object.keys(testAPIs).forEach((IPFS) => { await copy(identityKeyFixtures, identityKeysPath) await copy(signingKeyFixtures, identityKeysPath) - keystore = new KeyStore(identityKeysPath) + keystore = await KeyStore(identityKeysPath) identities = await Identities({ keystore, ipfs }) testIdentity = await identities.createIdentity({ id: 'userA' }) diff --git a/test/oplog/heads.test.js b/test/oplog/heads.test.js index 516784b..c52fe89 100644 --- a/test/oplog/heads.test.js +++ b/test/oplog/heads.test.js @@ -33,7 +33,7 @@ Object.keys(testAPIs).forEach((IPFS) => { await copy(identityKeyFixtures, identityKeysPath) await copy(signingKeyFixtures, identityKeysPath) - keystore = new KeyStore(identityKeysPath) + keystore = await KeyStore(identityKeysPath) const storage = await MemoryStorage() identities = await Identities({ keystore, storage }) diff --git a/test/oplog/iterator.test.js b/test/oplog/iterator.test.js index 6d5279b..9539210 100644 --- a/test/oplog/iterator.test.js +++ b/test/oplog/iterator.test.js @@ -26,8 +26,8 @@ Object.keys(testAPIs).forEach((IPFS) => { let testIdentity, testIdentity2, testIdentity3 before(async () => { - keystore = new KeyStore('./keys_1') - await keystore.open() + keystore = await KeyStore('./keys_1') + for (const [key, value] of Object.entries(identityKeys)) { await keystore.addKey(key, value) } diff --git a/test/oplog/join-concurrent.test.js b/test/oplog/join-concurrent.test.js index ae9da17..963709b 100644 --- a/test/oplog/join-concurrent.test.js +++ b/test/oplog/join-concurrent.test.js @@ -29,7 +29,7 @@ Object.keys(testAPIs).forEach(IPFS => { await copy(identityKeyFixtures, identityKeysPath) await copy(signingKeyFixtures, identityKeysPath) - keystore = new KeyStore(identityKeysPath) + keystore = await KeyStore(identityKeysPath) const storage = await MemoryStorage() diff --git a/test/oplog/join.test.js b/test/oplog/join.test.js index 6b86aea..332916e 100644 --- a/test/oplog/join.test.js +++ b/test/oplog/join.test.js @@ -26,8 +26,8 @@ Object.keys(testAPIs).forEach((IPFS) => { let testIdentity, testIdentity2, testIdentity3, testIdentity4 before(async () => { - keystore = new KeyStore('./keys_1') - await keystore.open() + keystore = await KeyStore('./keys_1') + for (const [key, value] of Object.entries(identityKeys)) { await keystore.addKey(key, value) } diff --git a/test/oplog/load.test.js b/test/oplog/load.test.js index 80efc98..01f402e 100644 --- a/test/oplog/load.test.js +++ b/test/oplog/load.test.js @@ -49,7 +49,7 @@ Object.keys(testAPIs).forEach((IPFS) => { await copy(identityKeyFixtures, identityKeysPath) await copy(signingKeyFixtures, identityKeysPath) - keystore = new KeyStore(identityKeysPath) + keystore = await KeyStore(identityKeysPath) testIdentity = await createIdentity({ id: 'userC', keystore }) testIdentity2 = await createIdentity({ id: 'userB', keystore }) diff --git a/test/oplog/log.test.js b/test/oplog/log.test.js index f469a6b..5df1834 100644 --- a/test/oplog/log.test.js +++ b/test/oplog/log.test.js @@ -28,7 +28,7 @@ Object.keys(testAPIs).forEach((IPFS) => { await copy(identityKeyFixtures, identityKeysPath) await copy(signingKeyFixtures, identityKeysPath) - keystore = new KeyStore(identityKeysPath) + keystore = await KeyStore(identityKeysPath) const storage = await MemoryStorage() diff --git a/test/oplog/references.test.js b/test/oplog/references.test.js index a12416d..cffe9b1 100644 --- a/test/oplog/references.test.js +++ b/test/oplog/references.test.js @@ -29,7 +29,7 @@ Object.keys(testAPIs).forEach((IPFS) => { await copy(identityKeyFixtures, identityKeysPath) await copy(signingKeyFixtures, identityKeysPath) - keystore = new KeyStore(identityKeysPath) + keystore = await KeyStore(identityKeysPath) const storage = await MemoryStorage() diff --git a/test/storage.spec.js b/test/storage.spec.js index b41d9aa..f60f31c 100644 --- a/test/storage.spec.js +++ b/test/storage.spec.js @@ -34,7 +34,7 @@ Object.keys(testAPIs).forEach((_) => { // Start an IPFS instance ipfs1 = await IPFS.create({ ...config.daemon1, repo: './ipfs1' }) - keystore = new KeyStore(identityKeysPath) + keystore = await KeyStore(identityKeysPath) const storage = await MemoryStorage() const identities = await Identities({ keystore, storage })