mirror of https://github.com/waku-org/js-waku.git
Merge pull request #282 from status-im/encrypt-eth-pm
This commit is contained in:
commit
6dd54d2458
|
@ -7,9 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
|
||||
## [Unreleased]
|
||||
|
||||
### Added
|
||||
- Examples (eth-pm): Encrypt Public Key Messages using symmetric encryption.
|
||||
|
||||
### Changed
|
||||
- **Breaking**: Moved `startTime` and `endTime` for history queries to a `timeFilter` property as both or neither must be passed; passing only one parameter is not supported.
|
||||
|
||||
### Fixed
|
||||
- Buffer concat error when using symmetric encryption in the browser.
|
||||
|
||||
## [0.11.0] - 2021-08-20
|
||||
|
||||
### Added
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
- Waku Light Push
|
||||
- Signature with Web3
|
||||
- Asymmetric Encryption
|
||||
- Symmetric Encryption
|
||||
|
||||
A PoC implementation of [20/ETH-DM](https://rfc.vac.dev/spec/20/).
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ import '@ethersproject/shims';
|
|||
import React, { useEffect, useState } from 'react';
|
||||
import './App.css';
|
||||
import { Waku } from 'js-waku';
|
||||
import { KeyPair } from './crypto';
|
||||
import { KeyPair, PublicKeyMessageEncryptionKey } from './crypto';
|
||||
import { Message } from './messaging/Messages';
|
||||
import 'fontsource-roboto';
|
||||
import { AppBar, IconButton, Toolbar, Typography } from '@material-ui/core';
|
||||
|
@ -108,10 +108,13 @@ function App() {
|
|||
setPublicKeys
|
||||
);
|
||||
|
||||
waku.relay.addDecryptionKey(PublicKeyMessageEncryptionKey);
|
||||
waku.relay.addObserver(observerPublicKeyMessage, [PublicKeyContentTopic]);
|
||||
|
||||
return function cleanUp() {
|
||||
if (!waku) return;
|
||||
|
||||
waku.relay.deleteDecryptionKey(PublicKeyMessageEncryptionKey);
|
||||
waku.relay.deleteObserver(observerPublicKeyMessage, [
|
||||
PublicKeyContentTopic,
|
||||
]);
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
import { Button } from '@material-ui/core';
|
||||
import React, { useState } from 'react';
|
||||
import { createPublicKeyMessage, KeyPair } from './crypto';
|
||||
import {
|
||||
createPublicKeyMessage,
|
||||
KeyPair,
|
||||
PublicKeyMessageEncryptionKey,
|
||||
} from './crypto';
|
||||
import { PublicKeyMessage } from './messaging/wire';
|
||||
import { WakuMessage, Waku } from 'js-waku';
|
||||
import { PublicKeyContentTopic } from './waku';
|
||||
|
@ -35,8 +39,8 @@ export default function BroadcastPublicKey({
|
|||
console.error('Failed to send Public Key Message', e);
|
||||
});
|
||||
})
|
||||
.catch(() => {
|
||||
console.log('Failed to encode Public Key Message in Waku Message');
|
||||
.catch((e) => {
|
||||
console.log('Failed to encode Public Key Message in Waku Message', e);
|
||||
});
|
||||
} else {
|
||||
createPublicKeyMessage(
|
||||
|
@ -55,9 +59,10 @@ export default function BroadcastPublicKey({
|
|||
console.error('Failed to send Public Key Message', e);
|
||||
});
|
||||
})
|
||||
.catch(() => {
|
||||
.catch((e) => {
|
||||
console.log(
|
||||
'Failed to encode Public Key Message in Waku Message'
|
||||
'Failed to encode Public Key Message in Waku Message',
|
||||
e
|
||||
);
|
||||
});
|
||||
})
|
||||
|
@ -83,5 +88,7 @@ async function encodePublicKeyWakuMessage(
|
|||
publicKeyMessage: PublicKeyMessage
|
||||
): Promise<WakuMessage> {
|
||||
const payload = publicKeyMessage.encode();
|
||||
return await WakuMessage.fromBytes(payload, PublicKeyContentTopic);
|
||||
return await WakuMessage.fromBytes(payload, PublicKeyContentTopic, {
|
||||
symKey: PublicKeyMessageEncryptionKey,
|
||||
});
|
||||
}
|
||||
|
|
|
@ -4,6 +4,12 @@ import { PublicKeyMessage } from './messaging/wire';
|
|||
import { hexToBuf, equalByteArrays, bufToHex } from 'js-waku/lib/utils';
|
||||
import { generatePrivateKey, getPublicKey } from 'js-waku';
|
||||
import * as sigUtil from 'eth-sig-util';
|
||||
import { PublicKeyContentTopic } from './waku';
|
||||
import { keccak256 } from 'ethers/lib/utils';
|
||||
|
||||
export const PublicKeyMessageEncryptionKey = hexToBuf(
|
||||
keccak256(Buffer.from(PublicKeyContentTopic, 'utf-8'))
|
||||
);
|
||||
|
||||
export interface KeyPair {
|
||||
privateKey: Uint8Array;
|
||||
|
|
|
@ -147,7 +147,7 @@ export async function encryptSymmetric(
|
|||
|
||||
// Returns `cipher | tag`
|
||||
const cipher = await symmetric.encrypt(iv, hexToBuf(key), Buffer.from(data));
|
||||
return Buffer.concat([cipher, iv]);
|
||||
return Buffer.concat([cipher, Buffer.from(iv)]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue