Skip to content

Commit

Permalink
claimsHashes -> claimsHash
Browse files Browse the repository at this point in the history
  • Loading branch information
diehuxx committed Mar 30, 2024
1 parent aa08adb commit cb54ad2
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 38 deletions.
40 changes: 20 additions & 20 deletions packages/protocol/src/message-kinds/rfq.ts
Original file line number Diff line number Diff line change
Expand Up @@ -140,17 +140,19 @@ export class Rfq extends Message {
const { paymentDetails: payinDetails, ...remainingPayin } = payin
const { paymentDetails: payoutDetails, ...remainingPayout } = payout

const data = {
const data: RfqData = {
...remainingRfqData,
payin : remainingPayin,
payout : remainingPayout,
claimsHashes : claims.map((claim) => Rfq.digestPrivateData(salt, claim))
}
if (payinDetails !== undefined) {
data.payin.paymentDetailsHash = Rfq.digestPrivateData(salt, payinDetails)
data.payin!.paymentDetailsHash = Rfq.digestPrivateData(salt, payinDetails)
}
if (payoutDetails !== undefined) {
data.payout.paymentDetailsHash = Rfq.digestPrivateData(salt, payoutDetails)
data.payout!.paymentDetailsHash = Rfq.digestPrivateData(salt, payoutDetails)
}
if (claims !== undefined && claims?.length > 0) {
data.claimsHash = Rfq.digestPrivateData(salt, claims)
}

const privateData: RfqPrivateData = {
Expand Down Expand Up @@ -191,8 +193,8 @@ export class Rfq extends Message {
}

// Verify claims
if (this.data.claimsHashes.length > 0) {
this.verifyClaimsHashes()
if (this.data.claimsHash !== undefined) {
this.verifyClaimsHash()
}
}

Expand All @@ -213,8 +215,8 @@ export class Rfq extends Message {
}

// Verify claims
if (this.data.claimsHashes.length > 0 && this.privateData?.claims !== undefined) {
this.verifyClaimsHashes()
if (this.data.claimsHash !== undefined && this.privateData?.claims !== undefined) {
this.verifyClaimsHash()
}
}

Expand Down Expand Up @@ -248,22 +250,20 @@ export class Rfq extends Message {
}
}

private verifyClaimsHashes(): void {
private verifyClaimsHash(): void {
if (this?.privateData?.salt === undefined) {
throw new Error('Salt must be present to verify data.claimsHashes')
throw new Error('Salt must be present to verify data.claimsHash')
}

for (let i = 0; i < this.data.claimsHashes.length; i++) {
const claimsHash = this.data.claimsHashes[i]
const claim = this.privateData?.claims?.[i]
const digest = Rfq.digestPrivateData(this.privateData.salt, claim)
const claimsHash = this.data.claimsHash!
const claims = this.privateData?.claims
const digest = Rfq.digestPrivateData(this.privateData.salt, claims)

if (digest !== claimsHash) {
throw new Error(
'Private data integrity check failed: ' +
`data.claimsHashes[${i}] does not match digest of privateData.claims[${i}]`
)
}
if (digest !== claimsHash) {
throw new Error(
'Private data integrity check failed: ' +
`data.claimsHash does not match digest of privateData.claims`
)
}
}

Expand Down
6 changes: 3 additions & 3 deletions packages/protocol/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,7 @@ export type RfqData = {
/** Selected payment method that the PFI will use to send the listed base currency to Alice */
payout: SelectedPayoutMethod
/** Hashes of claims that fulfill the requirements declared in an Offering */
claimsHashes: string[]
claimsHash?: string
}

/**
Expand All @@ -267,10 +267,10 @@ export type RfqPrivateData = {
* Data contained in a RFQ message, including data which will be placed in {@link RfqPrivateData}
* @beta
*/
export type UnhashedRfqData = Omit<RfqData, 'payin' | 'payout' | 'claimsHashes'> & {
export type UnhashedRfqData = Omit<RfqData, 'payin' | 'payout' | 'claimsHash'> & {
payin: Omit<SelectedPayinMethod, keyof PrivatePaymentDetails> & PrivatePaymentDetails
payout: Omit<SelectedPayoutMethod, keyof PrivatePaymentDetails> & PrivatePaymentDetails,
claims: string[]
claims?: string[]
}

/**
Expand Down
10 changes: 5 additions & 5 deletions packages/protocol/tests/generate-test-vectors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -211,13 +211,13 @@ const overWriteTestVectors = async () => {

// Add more test vector generators as you need them. This is not a complete list.
const vectorFilePair: { filename: string, vector: TestVector }[] = [
{ filename: 'parse-offering.json', vector: await generateParseOfferingVector() },
{ filename: 'parse-quote.json', vector: await generateParseQuoteVector() },
{ filename: 'parse-close.json', vector: await generateParseCloseVector() },
// { filename: 'parse-offering.json', vector: await generateParseOfferingVector() },
// { filename: 'parse-quote.json', vector: await generateParseQuoteVector() },
// { filename: 'parse-close.json', vector: await generateParseCloseVector() },
{ filename: 'parse-rfq.json', vector: await generateParseRfqVector() },
{ filename: 'parse-rfq-omit-private-data.json', vector: await generateParseRfqOmitPrivateDataVector() },
{ filename: 'parse-order.json', vector: await generateParseOrderVector() },
{ filename: 'parse-orderstatus.json', vector: await generateParseOrderStatusVector() },
// { filename: 'parse-order.json', vector: await generateParseOrderVector() },
// { filename: 'parse-orderstatus.json', vector: await generateParseOrderStatusVector() },
]

for (const { filename, vector } of vectorFilePair) {
Expand Down
16 changes: 8 additions & 8 deletions packages/protocol/tests/rfq.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -206,13 +206,13 @@ describe('Rfq', () => {
}
})

it('throws if Rfq.privateData.claims is missing but Rfq.data.claimsHashes is present', async () => {
it('throws if Rfq.privateData.claims is missing but Rfq.data.claimsHash is present', async () => {
const aliceDid = await DidJwk.create()
const rfq = Rfq.create({
metadata : { from: aliceDid.uri, to: 'did:ex:pfi' },
data : await DevTools.createRfqData()
})
rfq.data.claimsHashes = ['not right']
rfq.data.claimsHash = 'not right'
await rfq.sign(aliceDid)

const rfqJson = rfq.toJSON()
Expand All @@ -221,7 +221,7 @@ describe('Rfq', () => {
await Rfq.parse(rfqJson, { requireAllPrivateData: true })
expect.fail()
} catch(e) {
expect(e.message).to.include('data.claimsHashes[0] does not match digest of privateData.claims[0]')
expect(e.message).to.include('data.claimsHash does not match digest of privateData.claims')
}
})

Expand Down Expand Up @@ -263,7 +263,7 @@ describe('Rfq', () => {
}
})

it('throws if Rfq.privateData.claims is missing but Rfq.data.claimsHashes is present', async () => {
it('throws if Rfq.privateData.claims is missing but Rfq.data.claimsHash is present', async () => {
const aliceDid = await DidJwk.create()
const rfq = Rfq.create({
metadata : { from: aliceDid.uri, to: 'did:ex:pfi' },
Expand All @@ -278,7 +278,7 @@ describe('Rfq', () => {
await Rfq.parse(rfqJson, { requireAllPrivateData: true })
expect.fail()
} catch(e) {
expect(e.message).to.include('data.claimsHashes[0] does not match digest of privateData.claims[0]')
expect(e.message).to.include('data.claimsHash does not match digest of privateData.claims')
}
})
})
Expand Down Expand Up @@ -341,13 +341,13 @@ describe('Rfq', () => {
}
})

it('throws if Rfq.privateData.claims is missing but Rfq.data.claimsHashes is present', async () => {
it('throws if Rfq.privateData.claims is missing but Rfq.data.claimsHash is present', async () => {
const aliceDid = await DidJwk.create()
const rfq = Rfq.create({
metadata : { from: aliceDid.uri, to: 'did:ex:pfi' },
data : await DevTools.createRfqData()
})
rfq.data.claimsHashes = ['not right']
rfq.data.claimsHash = 'not right'
await rfq.sign(aliceDid)

const rfqJson = rfq.toJSON()
Expand All @@ -356,7 +356,7 @@ describe('Rfq', () => {
await Rfq.parse(rfqJson, { requireAllPrivateData: false })
expect.fail()
} catch(e) {
expect(e.message).to.include('data.claimsHashes[0] does not match digest of privateData.claims[0]')
expect(e.message).to.include('data.claimsHash does not match digest of privateData.claims')
}
})
})
Expand Down
2 changes: 1 addition & 1 deletion packages/protocol/tests/test-vectors.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ describe('TbdexTestVectorsProtocol', function () {
expect(close.toJSON()).to.deep.eq(ParseClose.output)
})

it.skip('parse_offering', async() => {
it('parse_offering', async() => {
// Parse with parseResource()
const resource = await Parser.parseResource(ParseOffering.input)
expect(resource.isOffering()).to.be.true
Expand Down

0 comments on commit cb54ad2

Please sign in to comment.