diff --git a/.gitignore b/.gitignore index 2d8045f..3450f12 100644 --- a/.gitignore +++ b/.gitignore @@ -105,3 +105,4 @@ dist lib/* *.gpg.key +*.salt diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml new file mode 100644 index 0000000..d23208f --- /dev/null +++ b/.idea/jsLibraryMappings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/test_clients.js b/test_clients.js new file mode 100644 index 0000000..96aac32 --- /dev/null +++ b/test_clients.js @@ -0,0 +1,47 @@ +const fs = require('fs') +const openpgp = require('openpgp') +const bcrypt = require('bcrypt') + +class TestClient { + constructor(keyName, id) { + this.keyName = keyName + this.id = id + this.publicKey = fs.readFileSync(`./${this.keyName}.public.gpg.key`).toString('utf-8') + this.privateKey = fs.readFileSync(`./${this.keyName}.private.gpg.key`).toString('utf-8') + this.salt = fs.readFileSync(`./${this.keyName}.salt`).toString('utf-8') + } + + getHash(otherClientId) { + const [lesserId, greaterId] = [otherClientId, this.id].sort() + return bcrypt.hashSync(`${lesserId}-${greaterId}`, this.salt) + } + + async interactWith(otherClient) { + const hash = this.getHash(otherClient.id) + const message = openpgp.Message.fromText(hash) + const signature = (await openpgp.sign({ + message, privateKeys: await openpgp.readKey({ + armoredKey: this.privateKey + }) + })).toString() + + return { + combinedHash: hash, + timestamp: (new Date).getTime(), + encodedGPSLocation: JSON.stringify({ none: true }), + partnerPublicKey: otherClient.publicKey, + validationSignature: signature + } + } +} + +;(async () => { + const client_a = new TestClient('test_a', 'a893irwe') + const client_b = new TestClient('test_b', 'bawesfdi') + + const a_transact = await client_a.interactWith(client_b) + const b_transact = await client_b.interactWith(client_a) + + console.log(a_transact, b_transact) +})() +