Skip to content

Commit

Permalink
fix!: incorrect condition parsing leading to undefined variables in c…
Browse files Browse the repository at this point in the history
…ontext
  • Loading branch information
piotr-roslaniec committed Jul 7, 2023
1 parent de6dfaf commit 298fe22
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 16 deletions.
8 changes: 2 additions & 6 deletions src/characters/porter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand Down Expand Up @@ -138,18 +137,15 @@ export class Porter {
aliceVerifyingKey: PublicKey,
bobEncryptingKey: PublicKey,
bobVerifyingKey: PublicKey,
conditionsContext?: ConditionContext
conditionContextJSON?: string | undefined
): Promise<readonly RetrieveCFragsResult[]> {
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<PostRetrieveCFragsResponse> = await axios.post(
new URL('/retrieve_cfrags', this.porterUrl).toString(),
Expand Down
18 changes: 9 additions & 9 deletions src/characters/pre-recipient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -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<string, string>[], 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<string, string>) => {
return Condition.fromObj(ele);
});

const conditionContext = new ConditionContext(conditionsList, provider);
const conditionContext = new ConditionContext(conditions, provider);

const policyMessageKits = messageKits.map((mk) =>
PolicyMessageKit.fromMessageKit(
Expand All @@ -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) => {
Expand Down
2 changes: 1 addition & 1 deletion test/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 => {
Expand Down

0 comments on commit 298fe22

Please sign in to comment.