From 8f9218061197e4045f51f5688c6ff91da98b2bf1 Mon Sep 17 00:00:00 2001 From: morrigan Date: Wed, 5 Feb 2020 22:10:51 +0100 Subject: [PATCH 1/2] Rename protobuf fields --- protos/payload.proto | 7 +++---- src/utils.ts | 13 ++++++------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/protos/payload.proto b/protos/payload.proto index 765fa4d..c337dac 100644 --- a/protos/payload.proto +++ b/protos/payload.proto @@ -2,8 +2,7 @@ syntax = "proto3"; package pb; message NoiseHandshakePayload { - bytes libp2p_key = 1; - bytes noise_static_key_signature = 2; - bytes libp2p_data = 3; - bytes libp2p_data_signature = 4; + bytes identity_key = 1; + bytes identity_sig = 2; + bytes data = 3; } diff --git a/src/utils.ts b/src/utils.ts index 6469215..69778ae 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -46,13 +46,12 @@ export async function createHandshakePayload( const NoiseHandshakePayload = await loadPayloadProto(); const earlyDataPayload = signedEarlyData ? { - libp2pData: signedEarlyData.libp2pData, - libp2pDataSignature: signedEarlyData.libp2pDataSignature, + data: signedEarlyData.libp2pData, } : {}; const payloadInit = NoiseHandshakePayload.create({ - libp2pKey: libp2pPublicKey, - noiseStaticKeySignature: signedPayload, + identityKey: libp2pPublicKey, + identitySig: signedPayload, ...earlyDataPayload, }); @@ -97,15 +96,15 @@ export async function verifySignedPayload(noiseStaticKey: bytes, plaintext: byte throw new Error("Failed to decode received payload."); } - if (!(await isValidPeerId(peerId, receivedPayload.libp2pKey)) ) { + if (!(await isValidPeerId(peerId, receivedPayload.identityKey)) ) { throw new Error("Peer ID doesn't match libp2p public key."); } const generatedPayload = getHandshakePayload(noiseStaticKey); // Unmarshaling from PublicKey protobuf - const publicKey = crypto.keys.unmarshalPublicKey(receivedPayload.libp2pKey); - if (!publicKey.verify(generatedPayload, receivedPayload.noiseStaticKeySignature)) { + const publicKey = crypto.keys.unmarshalPublicKey(receivedPayload.identityKey); + if (!publicKey.verify(generatedPayload, receivedPayload.identitySig)) { throw new Error("Static key doesn't match to peer that signed payload!"); } } From ebb7483109b76f6ebe8f601865ecdc0b6467adf8 Mon Sep 17 00:00:00 2001 From: morrigan Date: Wed, 5 Feb 2020 22:16:48 +0100 Subject: [PATCH 2/2] Remove signing early data payload and prefix --- src/utils.ts | 27 +++++---------------------- 1 file changed, 5 insertions(+), 22 deletions(-) diff --git a/src/utils.ts b/src/utils.ts index 69778ae..34ef121 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -29,24 +29,24 @@ export async function getPayload( earlyData?: bytes, ): Promise { const signedPayload = await signPayload(localPeer, getHandshakePayload(staticPublicKey)); - const signedEarlyDataPayload = await signEarlyDataPayload(localPeer, earlyData || Buffer.alloc(0)); + const earlyDataPayload = earlyData || Buffer.alloc(0); return await createHandshakePayload( localPeer.marshalPubKey(), signedPayload, - signedEarlyDataPayload + earlyDataPayload ); } export async function createHandshakePayload( libp2pPublicKey: bytes, signedPayload: bytes, - signedEarlyData?: EarlyDataPayload, + earlyData?: bytes, ): Promise { const NoiseHandshakePayload = await loadPayloadProto(); - const earlyDataPayload = signedEarlyData ? + const earlyDataPayload = earlyData ? { - data: signedEarlyData.libp2pData, + data: earlyData, } : {}; const payloadInit = NoiseHandshakePayload.create({ @@ -63,25 +63,8 @@ export async function signPayload(peerId: PeerId, payload: bytes): Promise { - const payload = getEarlyDataPayload(earlyData); - const signedPayload = await signPayload(peerId, payload); - - return { - libp2pData: payload, - libp2pDataSignature: signedPayload, - } -} - export const getHandshakePayload = (publicKey: bytes ) => Buffer.concat([Buffer.from("noise-libp2p-static-key:"), publicKey]); -export const getEarlyDataPayload = (earlyData: bytes) => Buffer.concat([Buffer.from("noise-libp2p-early-data:"), earlyData]); - async function isValidPeerId(peerId: bytes, publicKeyProtobuf: bytes) { const generatedPeerId = await PeerId.createFromPubKey(publicKeyProtobuf); return generatedPeerId.id.equals(peerId);