diff --git a/index.js b/index.js index 3d05fae..4b257ad 100644 --- a/index.js +++ b/index.js @@ -1,40 +1,66 @@ -var messages = require('bitmessage').messages; -var objects = require('bitmessage').objects; -var Address = require('bitmessage').Address; -var TcpTransport = require('bitmessage-transports').TcpTransport; + +// var messages = require('bitmessage').messages; +// var objects = require('bitmessage').objects; +// var Address = require('bitmessage').Address; +// var TcpTransport = require('bitmessage-transports').TcpTransport; var eccrypto = require("eccrypto"); +var assert = exports.assert = function(condition, message) { + if (!condition) { + throw new Error(message || "Assertion failed"); + } +}; + (async () => { - const from = Address.fromPassphrase('loremipsum1'); - console.log('[from]', from.encode()); - console.log('[from sign priv key]', from.signPrivateKey.toString('hex')); - console.log('[from version]', from.version); - console.log('[from stream]', from.stream); - console.log('[from behaviour]', from.behavior); - const toAddr = Address.fromPassphrase('gru'); - console.log('[toAddr]', toAddr.encode()); - console.log('[toAddr enc pub key]', toAddr.encPublicKey.toString('hex')); - console.log('[toAddr version]', toAddr.version); - console.log('[toAddr stream]', toAddr.stream); - console.log('[toAddr ripe]', toAddr.ripe); - const encodedMsg = await objects.msg.encodePayloadAsync({ - ttl: 1800, - from: from, - to: toAddr, - message: 'hey there!', - subject: 'Lorem Ipsum', - encoding: 2, - friend: true, - skipPow: true, - }); - const strippedMsg = encodedMsg.slice(8); - console.log('[check messages]', strippedMsg); - console.log('[check messages]', strippedMsg.toString('hex')); - var d = await objects.msg.decodePayloadAsync(encodedMsg, { - skipPow: true, - identities: toAddr, - }); - console.log('[decoded]', d.message); + const encPublicKey = Buffer.from( + '0409d4e5c0ab3d25fe048c64c9da1a242c7f19417e9517cd266950d72c755713585c6178e97fe092fc897c9a1f1720d5770ae8eaad2fa8fcbd08e9324a5dde1857', 'hex' + ); + const message = Buffer.from('The quick brown fox jumps over the lazy dog.'); + const sampleOpts = { + iv: Buffer.from('bddb7c2829b08038753084a2f3991681', 'hex'), + ephemPrivateKey: Buffer.from( + '5be6facd941b76e9d3ead03029fbdb6b6e0809293f7fb197d0c51f84e96b8ba4', + 'hex' + ) + }; + const sampleCiphertext = '64203d5b24688e2547bba345fa139a5a1d962220d4d48a0cf3b1572c0d95b61643a6f9a0d75af7eacc1bd957147bf723'; + const sampleMAC = 'f2526d61b4851fb23409863826fd206165edc021368c7946571cead69046e619'; + var encrypted = await eccrypto.encrypt(encPublicKey, message, sampleOpts); + console.log('[ciphertext]', encrypted.ciphertext.toString('hex')); + console.log('[mac]', encrypted.mac.toString('hex')); + + assert(encrypted.ciphertext.toString('hex') == sampleCiphertext, 'Bad ciphertext!'); + assert(encrypted.mac.toString('hex') == sampleMAC, 'Bad MAC!'); + // const from = Address.fromPassphrase('loremipsum1'); + // console.log('[from]', from.encode()); + // console.log('[from sign priv key]', from.signPrivateKey.toString('hex')); + // console.log('[from version]', from.version); + // console.log('[from stream]', from.stream); + // console.log('[from behaviour]', from.behavior); + // const toAddr = Address.fromPassphrase('gru'); + // console.log('[toAddr]', toAddr.encode()); + // console.log('[toAddr enc pub key]', toAddr.encPublicKey.toString('hex')); + // console.log('[toAddr version]', toAddr.version); + // console.log('[toAddr stream]', toAddr.stream); + // console.log('[toAddr ripe]', toAddr.ripe); + // const encodedMsg = await objects.msg.encodePayloadAsync({ + // ttl: 1800, + // from: from, + // to: toAddr, + // message: 'hey there!', + // subject: 'Lorem Ipsum', + // encoding: 2, + // friend: true, + // skipPow: true, + // }); + // const strippedMsg = encodedMsg.slice(8); + // console.log('[check messages]', strippedMsg); + // console.log('[check messages]', strippedMsg.toString('hex')); + // var d = await objects.msg.decodePayloadAsync(encodedMsg, { + // skipPow: true, + // identities: toAddr, + // }); + // console.log('[decoded]', d.message); // const encPublicKey = '04a60f6cd97ecd16768215ef059ccfbb1840b736bcdb0763872ddfeef4c417d2ec8439383ce68de9a2b30ad44e9f0e56a13fc2895a6e41f7cf3757e46181d32dd0'; // const encPrivateKey = '2cb5ae4e8cf8c71d1221f5c6c46810b448207cacedd86cc52219c3f107048c10'; // const dec = await objects.msg.decPayloadTest(encPrivateKey, e);