From 5695bc0b83d97b23e9fb6f1d9b6c1f71cc604049 Mon Sep 17 00:00:00 2001 From: Piotr Roslaniec Date: Fri, 7 Jul 2023 15:25:45 +0200 Subject: [PATCH] fix!: incorrect condition parsing leading to undefined variables in context --- src/characters/porter.ts | 8 ++------ src/characters/pre-recipient.ts | 18 +++++++++--------- test/utils.ts | 2 +- 3 files changed, 12 insertions(+), 16 deletions(-) diff --git a/src/characters/porter.ts b/src/characters/porter.ts index 1bcc6aa41..2a3ef1d6a 100644 --- a/src/characters/porter.ts +++ b/src/characters/porter.ts @@ -9,7 +9,6 @@ import { import axios, { AxiosResponse } from 'axios'; import qs from 'qs'; -import { ConditionContext } from '../conditions'; import { Base64EncodedBytes, ChecksumAddress, HexEncodedBytes } from '../types'; import { fromBase64, fromHexString, toBase64, toHexString } from '../utils'; @@ -138,18 +137,15 @@ export class Porter { aliceVerifyingKey: PublicKey, bobEncryptingKey: PublicKey, bobVerifyingKey: PublicKey, - conditionsContext?: ConditionContext + conditionContextJSON?: string | undefined ): Promise { - const context = conditionsContext - ? await conditionsContext.toJson() - : undefined; const data: PostRetrieveCFragsRequest = { treasure_map: toBase64(treasureMap.toBytes()), retrieval_kits: retrievalKits.map((rk) => toBase64(rk.toBytes())), alice_verifying_key: toHexString(aliceVerifyingKey.toCompressedBytes()), bob_encrypting_key: toHexString(bobEncryptingKey.toCompressedBytes()), bob_verifying_key: toHexString(bobVerifyingKey.toCompressedBytes()), - context, + context: conditionContextJSON, }; const resp: AxiosResponse = await axios.post( new URL('/retrieve_cfrags', this.porterUrl).toString(), diff --git a/src/characters/pre-recipient.ts b/src/characters/pre-recipient.ts index ae0fc8cda..329d9c627 100644 --- a/src/characters/pre-recipient.ts +++ b/src/characters/pre-recipient.ts @@ -8,7 +8,7 @@ import { } from '@nucypher/nucypher-core'; import { ethers } from 'ethers'; -import { Condition, ConditionContext } from '../conditions'; +import { ConditionContext, ConditionExpression } from '../conditions'; import { Keyring } from '../keyring'; import { PolicyMessageKit } from '../kits/message'; import { RetrievalResult } from '../kits/retrieval'; @@ -103,14 +103,11 @@ export class PreTDecDecrypter { const conditions = messageKits .map((mk) => mk.conditions) .filter((condition): condition is Conditions => !!condition) - .map((condition) => JSON.parse(condition.toString())) - .reduce((acc: Record[], val) => acc.concat(val), []); + .map((condition) => ConditionExpression.fromJSON(condition.toString())) + .reduce((acc: ConditionExpression[], val) => acc.concat(val), []) + .map((condExpr: ConditionExpression) => condExpr.condition); - const conditionsList = conditions.map((ele: Record) => { - return Condition.fromObj(ele); - }); - - const conditionContext = new ConditionContext(conditionsList, provider); + const conditionContext = new ConditionContext(conditions, provider); const policyMessageKits = messageKits.map((mk) => PolicyMessageKit.fromMessageKit( @@ -121,13 +118,16 @@ export class PreTDecDecrypter { ); const retrievalKits = policyMessageKits.map((pk) => pk.asRetrievalKit()); + const conditionContextJSON = conditionContext + ? await conditionContext.toJson() + : undefined; const retrieveCFragsResponses = await this.porter.retrieveCFrags( treasureMap, retrievalKits, this.publisherVerifyingKey, this.decryptingKey, this.keyring.publicKey, - conditionContext + conditionContextJSON ); return zip(policyMessageKits, retrieveCFragsResponses).map((pair) => { diff --git a/test/utils.ts b/test/utils.ts index b79ca46d6..46dce7df5 100644 --- a/test/utils.ts +++ b/test/utils.ts @@ -82,7 +82,7 @@ export const fakeAlice = (aliceKey = 'fake-secret-key-32-bytes-alice-x') => { }; export const fakeWeb3Provider = ( - secretKeyBytes: Uint8Array, + secretKeyBytes = SecretKey.random().toBEBytes(), blockNumber?: number, blockTimestamp?: number ): ethers.providers.Web3Provider => {