mirror of https://github.com/waku-org/js-waku.git
Promote dedicated symmetric key generation API
Using the private key API for symmetric key is confusing.
This commit is contained in:
parent
f0183784a3
commit
75352abcac
|
@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
|
||||
### 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.
|
||||
- Renamed and promote the usage of `generateSymmetricKey()` to generate random symmetric keys.
|
||||
|
||||
### Fixed
|
||||
- Buffer concat error when using symmetric encryption in the browser.
|
||||
|
|
|
@ -138,14 +138,14 @@ A quick note on the cryptographic libraries used as it is a not a straightforwar
|
|||
Asymmetric private keys and symmetric keys are expected to be 32 bytes arrays.
|
||||
|
||||
```ts
|
||||
import { generatePrivateKey, getPublicKey } from 'js-waku';
|
||||
import { generatePrivateKey, generateSymmetricKey, getPublicKey } from 'js-waku';
|
||||
|
||||
// Asymmetric
|
||||
const privateKey = generatePrivateKey();
|
||||
const publicKey = getPublicKey(privateKey);
|
||||
|
||||
// Symmetric
|
||||
const symKey = generatePrivateKey();
|
||||
const symKey = generateSymmetricKey();
|
||||
```
|
||||
|
||||
#### Encrypt Waku Messages
|
||||
|
|
|
@ -62,9 +62,9 @@ To use symmetric encryption, you first need to generate a key.
|
|||
You can simply use `generatePrivateKey` for secure key generation:
|
||||
|
||||
```js
|
||||
import { generatePrivateKey } from 'js-waku';
|
||||
import { generateSymmetricKey } from 'js-waku';
|
||||
|
||||
const key = generatePrivateKey();
|
||||
const key = generateSymmetricKey();
|
||||
```
|
||||
|
||||
### Encrypt Message
|
||||
|
|
|
@ -6,7 +6,11 @@ export { Waku, DefaultPubSubTopic } from './lib/waku';
|
|||
|
||||
export { WakuMessage } from './lib/waku_message';
|
||||
|
||||
export { generatePrivateKey, getPublicKey } from './lib/waku_message/version_1';
|
||||
export {
|
||||
generatePrivateKey,
|
||||
generateSymmetricKey,
|
||||
getPublicKey,
|
||||
} from './lib/waku_message/version_1';
|
||||
|
||||
export {
|
||||
WakuLightPush,
|
||||
|
|
|
@ -14,7 +14,11 @@ import { delay } from '../delay';
|
|||
import { hexToBuf } from '../utils';
|
||||
import { Waku } from '../waku';
|
||||
|
||||
import { generatePrivateKey, getPublicKey } from './version_1';
|
||||
import {
|
||||
generatePrivateKey,
|
||||
generateSymmetricKey,
|
||||
getPublicKey,
|
||||
} from './version_1';
|
||||
|
||||
import { WakuMessage } from './index';
|
||||
|
||||
|
@ -122,7 +126,7 @@ describe('Waku Message: Node only', function () {
|
|||
payload: Buffer.from(messageText, 'utf-8').toString('hex'),
|
||||
};
|
||||
|
||||
const symKey = generatePrivateKey();
|
||||
const symKey = generateSymmetricKey();
|
||||
|
||||
waku.relay.addDecryptionKey(symKey);
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { IvSize, SymmetricKeySize } from './index';
|
||||
import { IvSize } from './index';
|
||||
|
||||
declare global {
|
||||
interface Window {
|
||||
|
@ -44,10 +44,6 @@ export async function decrypt(
|
|||
.then(Buffer.from);
|
||||
}
|
||||
|
||||
export function generateKeyForSymmetricEnc(): Buffer {
|
||||
return crypto.getRandomValues(Buffer.alloc(SymmetricKeySize));
|
||||
}
|
||||
|
||||
export function generateIv(): Uint8Array {
|
||||
const iv = new Uint8Array(IvSize);
|
||||
crypto.getRandomValues(iv);
|
||||
|
|
|
@ -15,10 +15,6 @@ export interface Symmetric {
|
|||
* Proceed with symmetric decryption of `cipherText` value.
|
||||
*/
|
||||
decrypt: (iv: Buffer, key: Buffer, cipherText: Buffer) => Promise<Buffer>;
|
||||
/**
|
||||
* Generate a new private key for Symmetric encryption purposes.
|
||||
*/
|
||||
generateKeyForSymmetricEnc: () => Buffer;
|
||||
/**
|
||||
* Generate an Initialization Vector (iv) for for Symmetric encryption purposes.
|
||||
*/
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { createCipheriv, createDecipheriv, randomBytes } from 'crypto';
|
||||
|
||||
import { IvSize, SymmetricKeySize, TagSize } from './index';
|
||||
import { IvSize, TagSize } from './index';
|
||||
|
||||
const Algorithm = 'aes-256-gcm';
|
||||
|
||||
|
@ -31,10 +31,6 @@ export async function decrypt(
|
|||
return Buffer.concat([a, b]);
|
||||
}
|
||||
|
||||
export function generateKeyForSymmetricEnc(): Buffer {
|
||||
return randomBytes(SymmetricKeySize);
|
||||
}
|
||||
|
||||
export function generateIv(): Buffer {
|
||||
return randomBytes(IvSize);
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ import * as secp256k1 from 'secp256k1';
|
|||
|
||||
import { hexToBuf } from '../utils';
|
||||
|
||||
import { IvSize, symmetric } from './symmetric';
|
||||
import { IvSize, symmetric, SymmetricKeySize } from './symmetric';
|
||||
|
||||
const FlagsLength = 1;
|
||||
const FlagMask = 3; // 0011
|
||||
|
@ -15,6 +15,8 @@ const IsSignedMask = 4; // 0100
|
|||
const PaddingTarget = 256;
|
||||
const SignatureLength = 65;
|
||||
|
||||
export const PrivateKeySize = 32;
|
||||
|
||||
/**
|
||||
* Encode the payload pre-encryption.
|
||||
*
|
||||
|
@ -172,14 +174,19 @@ export async function decryptSymmetric(
|
|||
}
|
||||
|
||||
/**
|
||||
* Generate a new key. Can be used as a private key for Asymmetric encryption
|
||||
* or a key for symmetric encryption.
|
||||
* Generate a new private key to be used for asymmetric encryption.
|
||||
*
|
||||
* If using Asymmetric encryption, use {@link getPublicKey} to get the
|
||||
* corresponding Public Key.
|
||||
* Use {@link getPublicKey} to get the corresponding Public Key.
|
||||
*/
|
||||
export function generatePrivateKey(): Uint8Array {
|
||||
return randomBytes(32);
|
||||
return randomBytes(PrivateKeySize);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a new symmetric key to be used for symmetric encryption.
|
||||
*/
|
||||
export function generateSymmetricKey(): Uint8Array {
|
||||
return randomBytes(SymmetricKeySize);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -13,7 +13,11 @@ import {
|
|||
import { delay } from '../delay';
|
||||
import { Waku } from '../waku';
|
||||
import { WakuMessage } from '../waku_message';
|
||||
import { generatePrivateKey, getPublicKey } from '../waku_message/version_1';
|
||||
import {
|
||||
generatePrivateKey,
|
||||
generateSymmetricKey,
|
||||
getPublicKey,
|
||||
} from '../waku_message/version_1';
|
||||
|
||||
import { Direction } from './history_rpc';
|
||||
|
||||
|
@ -160,7 +164,7 @@ describe('Waku Store', () => {
|
|||
'This message is not for and I must not be able to read it';
|
||||
|
||||
const privateKey = generatePrivateKey();
|
||||
const symKey = generatePrivateKey();
|
||||
const symKey = generateSymmetricKey();
|
||||
const publicKey = getPublicKey(privateKey);
|
||||
|
||||
const [
|
||||
|
|
Loading…
Reference in New Issue