From b5100f3e4794aa1a5c6803dcb3bb489655713a5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marin=20Petruni=C4=87?= Date: Thu, 6 Feb 2020 09:51:39 +0100 Subject: [PATCH] switch proto definitions into json definitions --- protos/payload.proto | 9 --------- src/proto/payload.json | 24 ++++++++++++++++++++++++ src/utils.ts | 16 +++++++++++----- tsconfig.json | 1 + 4 files changed, 36 insertions(+), 14 deletions(-) delete mode 100644 protos/payload.proto create mode 100644 src/proto/payload.json diff --git a/protos/payload.proto b/protos/payload.proto deleted file mode 100644 index 765fa4d..0000000 --- a/protos/payload.proto +++ /dev/null @@ -1,9 +0,0 @@ -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; -} diff --git a/src/proto/payload.json b/src/proto/payload.json new file mode 100644 index 0000000..94a6924 --- /dev/null +++ b/src/proto/payload.json @@ -0,0 +1,24 @@ +{ + "nested": { + "NoiseHandshakePayload": { + "fields": { + "libp2pKey": { + "type": "bytes", + "id": 1 + }, + "noiseStaticKeySignature": { + "type": "bytes", + "id": 2 + }, + "libp2pData": { + "type": "bytes", + "id": 3 + }, + "libp2pDataSignature": { + "type": "bytes", + "id": 4 + } + } + } + } +} diff --git a/src/utils.ts b/src/utils.ts index 6469215..35e0e51 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -3,14 +3,14 @@ import protobuf from "protobufjs"; import { Buffer } from "buffer"; import PeerId from "peer-id"; import * as crypto from 'libp2p-crypto'; - import { KeyPair } from "./@types/libp2p"; import {bytes, bytes32} from "./@types/basic"; import {Hkdf} from "./@types/handshake"; +import payloadProto from "./proto/payload.json"; export async function loadPayloadProto () { - const payloadProtoBuf = await protobuf.load("protos/payload.proto"); - return payloadProtoBuf.lookupType("pb.NoiseHandshakePayload"); + const payloadProtoBuf = await protobuf.Root.fromJSON(payloadProto); + return payloadProtoBuf.lookupType("NoiseHandshakePayload"); } export function generateKeypair(): KeyPair { @@ -92,9 +92,15 @@ export async function verifySignedPayload(noiseStaticKey: bytes, plaintext: byte let receivedPayload; try { const NoiseHandshakePayload = await loadPayloadProto(); - receivedPayload = NoiseHandshakePayload.toObject(NoiseHandshakePayload.decode(plaintext)); + receivedPayload = NoiseHandshakePayload.toObject( + NoiseHandshakePayload.decode(plaintext) + ); + //temporary fix until protobufsjs conversion options starts working + //by default it ends up as Uint8Array + receivedPayload.libp2pKey = Buffer.from(receivedPayload.libp2pKey); + receivedPayload.noiseStaticKeySignature = Buffer.from(receivedPayload.noiseStaticKeySignature); } catch (e) { - throw new Error("Failed to decode received payload."); + throw new Error("Failed to decode received payload. Reason: " + e.message); } if (!(await isValidPeerId(peerId, receivedPayload.libp2pKey)) ) { diff --git a/tsconfig.json b/tsconfig.json index 20d8e0c..034987e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,6 +3,7 @@ "target": "es6", "module": "commonjs", "strict": true, + "resolveJsonModule": true, "esModuleInterop": true, "noImplicitAny": false, "typeRoots": [