11import { MessageLayer } from 'streamr-client-protocol'
22
3- import EncryptionUtil from '../stream/Encryption'
3+ import EncryptionUtil from '../stream/encryption/ Encryption'
44import { Stream } from '../stream'
55import { StreamrClient } from '../StreamrClient'
6- import { PublisherKeyExhange } from '../stream/KeyExchange '
6+ import { PublisherKeyExhange } from '../stream/encryption/KeyExchangePublisher '
77
88const { StreamMessage } = MessageLayer
99
10- type PublisherKeyExhangeAPI = ReturnType < typeof PublisherKeyExhange >
11-
1210export default function Encrypt ( client : StreamrClient ) {
13- let publisherKeyExchange : ReturnType < typeof PublisherKeyExhange >
11+ let publisherKeyExchange : PublisherKeyExhange
1412
1513 function getPublisherKeyExchange ( ) {
1614 if ( ! publisherKeyExchange ) {
17- publisherKeyExchange = PublisherKeyExhange ( client , {
15+ publisherKeyExchange = new PublisherKeyExhange ( client , {
1816 groupKeys : {
1917 ...client . options . groupKeys ,
2018 }
@@ -28,9 +26,19 @@ export default function Encrypt(client: StreamrClient) {
2826 return
2927 }
3028
29+ const { messageType } = streamMessage
30+ if (
31+ messageType === StreamMessage . MESSAGE_TYPES . GROUP_KEY_RESPONSE
32+ || messageType === StreamMessage . MESSAGE_TYPES . GROUP_KEY_REQUEST
33+ || messageType === StreamMessage . MESSAGE_TYPES . GROUP_KEY_ERROR_RESPONSE
34+ ) {
35+ // never encrypt
36+ return
37+ }
38+
3139 if (
3240 ! stream . requireEncryptedData
33- && ! getPublisherKeyExchange ( ) . hasAnyGroupKey ( stream . id )
41+ && ! ( await ( getPublisherKeyExchange ( ) . hasAnyGroupKey ( stream . id ) ) )
3442 ) {
3543 // not needed
3644 return
@@ -41,17 +49,21 @@ export default function Encrypt(client: StreamrClient) {
4149 }
4250
4351 const [ groupKey , nextGroupKey ] = await getPublisherKeyExchange ( ) . useGroupKey ( stream . id )
52+ if ( ! groupKey ) {
53+ throw new Error ( `Tried to use group key but no group key found for stream: ${ stream . id } ` )
54+ }
55+
4456 await EncryptionUtil . encryptStreamMessage ( streamMessage , groupKey , nextGroupKey )
4557 }
4658
4759 return Object . assign ( encrypt , {
48- setNextGroupKey ( ...args : Parameters < PublisherKeyExhangeAPI [ 'setNextGroupKey' ] > ) {
60+ setNextGroupKey ( ...args : Parameters < PublisherKeyExhange [ 'setNextGroupKey' ] > ) {
4961 return getPublisherKeyExchange ( ) . setNextGroupKey ( ...args )
5062 } ,
51- rotateGroupKey ( ...args : Parameters < PublisherKeyExhangeAPI [ 'rotateGroupKey' ] > ) {
63+ rotateGroupKey ( ...args : Parameters < PublisherKeyExhange [ 'rotateGroupKey' ] > ) {
5264 return getPublisherKeyExchange ( ) . rotateGroupKey ( ...args )
5365 } ,
54- rekey ( ...args : Parameters < PublisherKeyExhangeAPI [ 'rekey' ] > ) {
66+ rekey ( ...args : Parameters < PublisherKeyExhange [ 'rekey' ] > ) {
5567 return getPublisherKeyExchange ( ) . rekey ( ...args )
5668 } ,
5769 start ( ) {
0 commit comments