From f6bc40baf48f8e7161ba9edef7078b53f09b910f Mon Sep 17 00:00:00 2001 From: morrigan Date: Wed, 20 Nov 2019 22:52:08 +0100 Subject: [PATCH] handshake propose --- src/handshake.ts | 20 +++++++++++++++----- src/noise.ts | 7 ++++--- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/handshake.ts b/src/handshake.ts index 77f5e81..78907fb 100644 --- a/src/handshake.ts +++ b/src/handshake.ts @@ -1,7 +1,7 @@ import { bytes, bytes32 } from "./@types/basic"; import { NoiseSession, XXHandshake } from "./xx"; -import { KeyPair, PeerId } from "./@types/libp2p"; -import {Buffer} from "buffer"; +import { KeyPair } from "./@types/libp2p"; +import { Buffer } from "buffer"; type handshakeType = "XX"; @@ -11,6 +11,7 @@ export class Handshake { private signedPayload: bytes; private prologue: bytes32; private staticKeys: KeyPair; + private connection: any; constructor( type: handshakeType, @@ -18,23 +19,32 @@ export class Handshake { prologue: bytes32, signedPayload: bytes, staticKeys: KeyPair, + connection, ) { this.type = type; this.remotePublicKey = remotePublicKey; this.signedPayload = signedPayload; this.prologue = prologue; this.staticKeys = staticKeys; + this.connection = connection; } + // stage 0 async propose(isInitiator: boolean) : Promise { const xx = new XXHandshake(); - const nsInit = await xx.initSession(isInitiator, this.prologue, this.staticKeys, this.remotePublicKey); + const ns = await xx.initSession(isInitiator, this.prologue, this.staticKeys, this.remotePublicKey); + if (isInitiator) { const message = Buffer.concat([Buffer.alloc(0), this.signedPayload]); - const messageBuffer = await xx.sendMessage(nsInit, message); + const messageBuffer = await xx.sendMessage(ns, message); + this.connection.writeLP(messageBuffer); + } else { + const receivedMessageBuffer = (await this.connection.readLP()).slice(); + const plaintext = await xx.recvMessage(ns, receivedMessageBuffer); } - return nsInit; + + return ns; } async exchange() : Promise { diff --git a/src/noise.ts b/src/noise.ts index bb6056e..d10c54c 100644 --- a/src/noise.ts +++ b/src/noise.ts @@ -3,7 +3,7 @@ import { Buffer } from "buffer"; import Wrap from 'it-pb-rpc'; import { Handshake } from "./handshake"; -import { createHandshakePayload, generateKeypair, getHandshakePayload } from "./utils"; +import { createHandshakePayload, generateKeypair, getHandshakePayload, signPayload } from "./utils"; import { decryptStreams, encryptStreams } from "./crypto"; import { bytes } from "./@types/basic"; import { NoiseConnection, PeerId, KeyPair, SecureOutbound } from "./@types/libp2p"; @@ -69,10 +69,11 @@ export class Noise implements NoiseConnection { } const payload = getHandshakePayload(this.staticKeys.publicKey); - const signedPayload = signHandshakePayload(this.staticKeys.privateKey, payload); + const signedPayload = signPayload(this.staticKeys.privateKey, payload); const handshakePayload = await createHandshakePayload(this.staticKeys, signedPayload); + const prologue = Buffer.from(this.protocol); - const handshake = new Handshake('XX', remotePublicKey, prologue, handshakePayload, this.staticKeys); + const handshake = new Handshake('XX', remotePublicKey, prologue, handshakePayload, this.staticKeys, connection); const session = await handshake.propose(isInitiator); return await encryptStreams(connection, session);