Skip to content
This repository was archived by the owner on Dec 21, 2021. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
d6f8fa6
test: Fix SubscriberResends uncontrolled setTimeout. Fix enableAutoC…
timoxley Mar 16, 2021
4ea7856
test(subscribe, iterators): Fix error handling.
timoxley Mar 17, 2021
4769eba
Add initial version of GroupKey persistence. WIP.
timoxley Feb 23, 2021
a069df5
Fix browser shimming of PersistentStore.
timoxley Feb 23, 2021
fa49c41
Fix BrowserStore method return values.
timoxley Feb 24, 2021
1eeeac1
Prevent premature access to client.publisherId in unauthenticated cli…
timoxley Feb 24, 2021
ff256ad
Add initial version of GroupKey persistence. WIP.
timoxley Feb 23, 2021
020ddb5
fix(keyexchange): Correct localStorage method calls.
timoxley Mar 18, 2021
4c550f6
test: Fix connection.on event value. Fix test typing.
timoxley Mar 19, 2021
b5c708e
fix(keyexchange): Use sync client.id instead of async publisherId in …
timoxley Mar 22, 2021
f1afa5b
types: Add types to KeyExchange.
timoxley May 3, 2021
259d6d1
refactor(keyexchange): Make group key store async on top of level-party.
timoxley May 4, 2021
a7fa7a3
fix(keyexchange): Improve subscriber async cleanup.
timoxley May 4, 2021
6ef29fb
test(keyexchange): Add EncryptionKeyPersistence.test.ts
timoxley May 4, 2021
703ef73
test(keyexchange): Fix conflicts from NET-208-revocation branch.
timoxley May 5, 2021
adf864e
feat(keyexchange): Use sqlite for serverside persistent storage.
timoxley May 5, 2021
fbb62bf
fix: Improve group key store.
timoxley May 5, 2021
378ef96
fix: fs/promises not supported on node 12.
timoxley May 6, 2021
49c44cb
refactor: Move encryption and key exchange files under stream/encrypt…
timoxley May 6, 2021
4f62e4b
fix: Reimplement browser group key persistence on top of idb.
timoxley May 6, 2021
aeb68ef
refactor: Split key exchange publisher/subscriber into separate files.
timoxley May 6, 2021
3b809ef
refactor: Convert key exchange publisher/subscriber into classes.
timoxley May 6, 2021
c43250f
types: Type resolved value from Defer.
timoxley May 6, 2021
cc23d7d
refactor: Simplify key exchange subscriber by removing buffering & pe…
timoxley May 6, 2021
bc64e3f
refactor: Convert integration/Encryption test to typescript.
timoxley May 7, 2021
d9d1771
fix: Increase encryption test robustness & improve decryption failure…
timoxley May 7, 2021
13f3d4e
types: Fix Encryption test types.
timoxley May 10, 2021
3b58f50
test: Fix EncryptionKeyPersistence test name.
timoxley May 11, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
637 changes: 515 additions & 122 deletions package-lock.json

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,9 @@
"@ethersproject/wallet": "^5.1.0",
"@ethersproject/web": "^5.1.0",
"debug": "^4.3.2",
"env-paths": "^2.2.1",
"eventemitter3": "^4.0.7",
"idb-keyval": "^5.0.5",
"lodash": "^4.17.21",
"mem": "^8.1.1",
"node-abort-controller": "^1.2.1",
Expand All @@ -165,6 +167,8 @@
"qs": "^6.10.1",
"quick-lru": "^6.0.0",
"readable-stream": "^3.6.0",
"sqlite": "^4.0.21",
"sqlite3": "^5.0.2",
"streamr-client-protocol": "^8.0.2",
"streamr-test-utils": "^1.3.2",
"ts-toolbelt": "^9.6.0",
Expand Down
4 changes: 2 additions & 2 deletions src/Connection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -425,7 +425,7 @@ export default class Connection extends EventEmitter {
}
}

enableAutoDisconnect(autoDisconnect = true) {
enableAutoDisconnect(autoDisconnect: boolean | number = true) {
let delay
if (typeof autoDisconnect === 'number') {
delay = autoDisconnect
Expand All @@ -443,7 +443,7 @@ export default class Connection extends EventEmitter {
}
}

enableAutoConnect(autoConnect = true) {
enableAutoConnect(autoConnect: boolean | number = true) {
autoConnect = !!autoConnect // eslint-disable-line no-param-reassign
if (this.options.autoConnect && !autoConnect) {
this.didDisableAutoConnect = true
Expand Down
3 changes: 1 addition & 2 deletions src/StreamrClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,7 @@ import { DataUnion, DataUnionDeployOptions } from './dataunion/DataUnion'
import { BigNumber } from '@ethersproject/bignumber'
import { getAddress } from '@ethersproject/address'
import { Contract } from '@ethersproject/contracts'
import { StreamPartDefinition } from './stream'
import type { GroupKey } from './stream/Encryption'
import { StreamPartDefinition, GroupKey } from './stream'

// TODO get metadata type from streamr-protocol-js project (it doesn't export the type definitions yet)
export type OnMessageCallback = MaybeAsync<(message: any, metadata: any) => void>
Expand Down
2 changes: 1 addition & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { StreamrClient } from './StreamrClient'
export * from './StreamrClient'
export * from './Config'
export * from './stream'
export * from './stream/Encryption'
export * from './stream/encryption/Encryption'
export * from './stream/StreamPart'
export * from './stream/StorageNode'
export * from './subscribe'
Expand Down
32 changes: 22 additions & 10 deletions src/publish/Encrypt.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
import { MessageLayer } from 'streamr-client-protocol'

import EncryptionUtil from '../stream/Encryption'
import EncryptionUtil from '../stream/encryption/Encryption'
import { Stream } from '../stream'
import { StreamrClient } from '../StreamrClient'
import { PublisherKeyExhange } from '../stream/KeyExchange'
import { PublisherKeyExhange } from '../stream/encryption/KeyExchangePublisher'

const { StreamMessage } = MessageLayer

type PublisherKeyExhangeAPI = ReturnType<typeof PublisherKeyExhange>

export default function Encrypt(client: StreamrClient) {
let publisherKeyExchange: ReturnType<typeof PublisherKeyExhange>
let publisherKeyExchange: PublisherKeyExhange

function getPublisherKeyExchange() {
if (!publisherKeyExchange) {
publisherKeyExchange = PublisherKeyExhange(client, {
publisherKeyExchange = new PublisherKeyExhange(client, {
groupKeys: {
...client.options.groupKeys,
}
Expand All @@ -28,9 +26,19 @@ export default function Encrypt(client: StreamrClient) {
return
}

const { messageType } = streamMessage
if (
messageType === StreamMessage.MESSAGE_TYPES.GROUP_KEY_RESPONSE
|| messageType === StreamMessage.MESSAGE_TYPES.GROUP_KEY_REQUEST
|| messageType === StreamMessage.MESSAGE_TYPES.GROUP_KEY_ERROR_RESPONSE
) {
// never encrypt
return
}

if (
!stream.requireEncryptedData
&& !getPublisherKeyExchange().hasAnyGroupKey(stream.id)
&& !(await (getPublisherKeyExchange().hasAnyGroupKey(stream.id)))
) {
// not needed
return
Expand All @@ -41,17 +49,21 @@ export default function Encrypt(client: StreamrClient) {
}

const [groupKey, nextGroupKey] = await getPublisherKeyExchange().useGroupKey(stream.id)
if (!groupKey) {
throw new Error(`Tried to use group key but no group key found for stream: ${stream.id}`)
}

await EncryptionUtil.encryptStreamMessage(streamMessage, groupKey, nextGroupKey)
}

return Object.assign(encrypt, {
setNextGroupKey(...args: Parameters<PublisherKeyExhangeAPI['setNextGroupKey']>) {
setNextGroupKey(...args: Parameters<PublisherKeyExhange['setNextGroupKey']>) {
return getPublisherKeyExchange().setNextGroupKey(...args)
},
rotateGroupKey(...args: Parameters<PublisherKeyExhangeAPI['rotateGroupKey']>) {
rotateGroupKey(...args: Parameters<PublisherKeyExhange['rotateGroupKey']>) {
return getPublisherKeyExchange().rotateGroupKey(...args)
},
rekey(...args: Parameters<PublisherKeyExhangeAPI['rekey']>) {
rekey(...args: Parameters<PublisherKeyExhange['rekey']>) {
return getPublisherKeyExchange().rekey(...args)
},
start() {
Expand Down
2 changes: 1 addition & 1 deletion src/rest/StreamEndpoints.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { getEndpointUrl } from '../utils'
import { validateOptions } from '../stream/utils'
import { Stream, StreamOperation, StreamProperties } from '../stream'
import { StreamPart } from '../stream/StreamPart'
import { isKeyExchangeStream } from '../stream/KeyExchange'
import { isKeyExchangeStream } from '../stream/encryption/KeyExchangeUtils'

import authFetch, { ErrorCode, NotFoundError } from './authFetch'
import { EthereumAddress } from '../types'
Expand Down
Loading