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 => {