Skip to content

Commit

Permalink
Unhashed -> Create
Browse files Browse the repository at this point in the history
  • Loading branch information
diehuxx committed Apr 1, 2024
1 parent da99f4c commit 7b88980
Show file tree
Hide file tree
Showing 8 changed files with 65 additions and 78 deletions.
15 changes: 6 additions & 9 deletions httpclient/src/test/kotlin/tbdex/sdk/httpclient/E2ETest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,9 @@ import tbdex.sdk.protocol.models.Order
import tbdex.sdk.protocol.models.OrderStatus
import tbdex.sdk.protocol.models.Quote
import tbdex.sdk.protocol.models.Rfq
import tbdex.sdk.protocol.models.RfqData
import tbdex.sdk.protocol.models.SelectedPayinMethod
import tbdex.sdk.protocol.models.SelectedPayoutMethod
import tbdex.sdk.protocol.models.UnhashedRfqData
import tbdex.sdk.protocol.models.UnhashedSelectedPayinMethod
import tbdex.sdk.protocol.models.UnhashedSelectedPayoutMethod
import tbdex.sdk.protocol.models.CreateRfqData
import tbdex.sdk.protocol.models.CreateSelectedPayinMethod
import tbdex.sdk.protocol.models.CreateSelectedPayoutMethod
import web5.sdk.credentials.VerifiableCredential
import web5.sdk.crypto.InMemoryKeyManager
import web5.sdk.crypto.JwaCurve
Expand Down Expand Up @@ -257,14 +254,14 @@ class E2ETest {
private fun buildRfqData(
firstOfferingId: String,
vcJwt: String
) = UnhashedRfqData(
) = CreateRfqData(
offeringId = firstOfferingId,
payin = UnhashedSelectedPayinMethod(
payin = CreateSelectedPayinMethod(
kind = "NGN_ADDRESS",
paymentDetails = mapOf("walletAddress" to "ngn-wallet-address"),
amount = "1.00"
),
payout = UnhashedSelectedPayoutMethod(
payout = CreateSelectedPayoutMethod(
kind = "BANK_Access Bank",
paymentDetails = mapOf(
"accountNumber" to "1234567890",
Expand Down
15 changes: 6 additions & 9 deletions httpclient/src/test/kotlin/tbdex/sdk/httpclient/TestData.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,9 @@ import tbdex.sdk.protocol.models.QuoteData
import tbdex.sdk.protocol.models.QuoteDetails
import tbdex.sdk.protocol.models.ResourceKind
import tbdex.sdk.protocol.models.Rfq
import tbdex.sdk.protocol.models.RfqData
import tbdex.sdk.protocol.models.SelectedPayinMethod
import tbdex.sdk.protocol.models.SelectedPayoutMethod
import tbdex.sdk.protocol.models.UnhashedRfqData
import tbdex.sdk.protocol.models.UnhashedSelectedPayinMethod
import tbdex.sdk.protocol.models.UnhashedSelectedPayoutMethod
import tbdex.sdk.protocol.models.CreateRfqData
import tbdex.sdk.protocol.models.CreateSelectedPayinMethod
import tbdex.sdk.protocol.models.CreateSelectedPayoutMethod
import web5.sdk.credentials.VcDataModel
import web5.sdk.credentials.VerifiableCredential
import web5.sdk.credentials.model.ConstraintsV2
Expand Down Expand Up @@ -97,10 +94,10 @@ object TestData {
val rfq = Rfq.create(
to = to,
from = ALICE_DID.uri,
unhashedRfqData = UnhashedRfqData(
rfqData = CreateRfqData(
offeringId = offeringId,
payin = UnhashedSelectedPayinMethod("BTC_ADDRESS", mapOf("address" to 123456), amount = "10.00"),
payout = UnhashedSelectedPayoutMethod("MOMO", mapOf("phone_number" to 123456)),
payin = CreateSelectedPayinMethod("BTC_ADDRESS", mapOf("address" to 123456), amount = "10.00"),
payout = CreateSelectedPayoutMethod("MOMO", mapOf("phone_number" to 123456)),
claims = claims
)
)
Expand Down
15 changes: 6 additions & 9 deletions httpserver/src/test/kotlin/TestData.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,9 @@ import tbdex.sdk.protocol.models.Quote
import tbdex.sdk.protocol.models.QuoteData
import tbdex.sdk.protocol.models.QuoteDetails
import tbdex.sdk.protocol.models.Rfq
import tbdex.sdk.protocol.models.RfqData
import tbdex.sdk.protocol.models.SelectedPayinMethod
import tbdex.sdk.protocol.models.SelectedPayoutMethod
import tbdex.sdk.protocol.models.UnhashedRfqData
import tbdex.sdk.protocol.models.UnhashedSelectedPayinMethod
import tbdex.sdk.protocol.models.UnhashedSelectedPayoutMethod
import tbdex.sdk.protocol.models.CreateRfqData
import tbdex.sdk.protocol.models.CreateSelectedPayinMethod
import tbdex.sdk.protocol.models.CreateSelectedPayoutMethod
import web5.sdk.crypto.InMemoryKeyManager
import web5.sdk.dids.methods.dht.DidDht
import java.time.OffsetDateTime
Expand All @@ -29,14 +26,14 @@ object TestData {
return Rfq.create(
to = pfiDid.uri,
from = aliceDid.uri,
unhashedRfqData = UnhashedRfqData(
rfqData = CreateRfqData(
offeringId = offering?.metadata?.id ?: TypeId.generate("offering").toString(),
payin = UnhashedSelectedPayinMethod(
payin = CreateSelectedPayinMethod(
kind = offering?.data?.payin?.methods?.first()?.kind ?: "DEBIT_CARD",
paymentDetails = mapOf("foo" to "bar"),
amount = "1.00"
),
payout = UnhashedSelectedPayoutMethod(
payout = CreateSelectedPayoutMethod(
kind = offering?.data?.payout?.methods?.first()?.kind ?: "BTC_ADDRESS",
paymentDetails = mapOf("foo" to "bar")
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@ import tbdex.sdk.protocol.models.PayinMethod
import tbdex.sdk.protocol.models.PayoutDetails
import tbdex.sdk.protocol.models.PayoutMethod
import tbdex.sdk.protocol.models.Rfq
import tbdex.sdk.protocol.models.UnhashedRfqData
import tbdex.sdk.protocol.models.UnhashedSelectedPayinMethod
import tbdex.sdk.protocol.models.UnhashedSelectedPayoutMethod
import tbdex.sdk.protocol.models.CreateRfqData
import tbdex.sdk.protocol.models.CreateSelectedPayinMethod
import tbdex.sdk.protocol.models.CreateSelectedPayoutMethod
import tbdex.sdk.protocol.serialization.Json
import kotlin.test.Ignore
import kotlin.test.assertContains
Expand Down Expand Up @@ -132,14 +132,14 @@ class CreateExchangeTest {
private val rfq: Rfq = Rfq.create(
to = "did:ex:pfi",
from = "did:ex:alice",
unhashedRfqData = UnhashedRfqData(
rfqData = CreateRfqData(
offeringId = offeringId,
payin = UnhashedSelectedPayinMethod(
payin = CreateSelectedPayinMethod(
kind = "BTC_ADDRESS",
paymentDetails = mapOf(),
amount = "0.001"
),
payout = UnhashedSelectedPayoutMethod(
payout = CreateSelectedPayoutMethod(
kind = "ETH_ADDRESS",
paymentDetails = mapOf()
),
Expand Down
34 changes: 17 additions & 17 deletions protocol/src/main/kotlin/tbdex/sdk/protocol/models/MessageData.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ class RfqData(
* Private data contained in a RFQ message, including data which will be placed in {@link RfqPrivateData}
*
* @property salt Randomly generated cryptographic salt used to hash privateData fields
* @property payin A container for the unhashed `payin.paymentDetails`
* @property payout A container for the unhashed `payout.paymentDetails`
* @property payin A container for the cleartext `payin.paymentDetails`
* @property payout A container for the cleartext `payout.paymentDetails`
* @property claims claims that fulfill the requirements declared in an Offering
*/
class RfqPrivateData(
Expand All @@ -45,24 +45,24 @@ class RfqPrivateData(
* Used for creating an RFQ.
*
* @property offeringId Offering which Alice would like to get a quote for
* @property payin selected payin amount, method, and unhashed payment details
* @property payout selected payout method, and unhashed payment details
* @property payin selected payin amount, method, and cleartext payment details
* @property payout selected payout method, and cleartext payment details
* @property claims an array of hashes claims that fulfill the requirements declared in the referenced Offering
*/
class UnhashedRfqData(
class CreateRfqData(
val offeringId: String,
val payin: UnhashedSelectedPayinMethod,
val payout: UnhashedSelectedPayoutMethod,
val payin: CreateSelectedPayinMethod,
val payout: CreateSelectedPayoutMethod,
val claims: List<String>
)

/**
* A container for the unhashed `paymentDetails`
* A container for the cleartext `paymentDetails`
*
* @property paymentDetails An object containing the properties defined in the
* respective Offering's requiredPaymentDetails json schema.
* When creating an Rfq, this value is taken from
* UnhashedSelectedPaymentMethod.paymentDetails.
* CreateSelectedPaymentMethod.paymentDetails.
*/
class PrivatePaymentDetails(
val paymentDetails: Map<String, Any>? = null
Expand All @@ -81,13 +81,13 @@ sealed class SelectedPaymentMethod(
) : MessageData

/**
* A data class representing the payment method selected, including the unhashed payment details.
* A data class representing the payment method selected, including the cleartext payment details.
* Used for creating an RFQ.
* @property kind type of payment method
* @property paymentDetails An object containing the properties
* defined in an Offering's requiredPaymentDetails json schema
*/
sealed class UnhashedSelectedPaymentMethod(
sealed class CreateSelectedPaymentMethod(
val kind: String,
val paymentDetails: Map<String, Any>? = null
)
Expand All @@ -107,17 +107,17 @@ class SelectedPayinMethod(
) : SelectedPaymentMethod(kind, paymentDetailsHash)

/**
* A data class representing the payin method selected, including the unhashed payin details.
* A data class representing the payin method selected, including the cleartext payin details.
* @property kind type of payment method
* @property paymentDetails An object containing the properties
* defined in an Offering's requiredPaymentDetails json schema
* @property amount Amount of currency Alice wants to pay in exchange for payout currency
*/
class UnhashedSelectedPayinMethod(
class CreateSelectedPayinMethod(
kind: String,
paymentDetails: Map<String, Any>? = null,
val amount: String
) : UnhashedSelectedPaymentMethod(kind, paymentDetails)
) : CreateSelectedPaymentMethod(kind, paymentDetails)

/**
* A data class representing the payout method selected.
Expand All @@ -132,15 +132,15 @@ class SelectedPayoutMethod(
) : SelectedPaymentMethod(kind, paymentDetailsHash)

/**
* A data class representing the payin method selected, including the unhashed payout details.
* A data class representing the payin method selected, including the cleartext payout details.
* @property kind type of payment method
* @property paymentDetails An object containing the properties
* defined in an Offering's requiredPaymentDetails json schema
*/
class UnhashedSelectedPayoutMethod(
class CreateSelectedPayoutMethod(
kind: String,
paymentDetails: Map<String, Any>? = null,
) : UnhashedSelectedPaymentMethod(kind, paymentDetails)
) : CreateSelectedPaymentMethod(kind, paymentDetails)

/**
* A data class implementing [MessageData] that represents the contents of a [Quote].
Expand Down
30 changes: 15 additions & 15 deletions protocol/src/main/kotlin/tbdex/sdk/protocol/models/Rfq.kt
Original file line number Diff line number Diff line change
Expand Up @@ -190,15 +190,15 @@ class Rfq private constructor(
*
* @param to DID that the message is being sent to.
* @param from DID of the sender.
* @param unhashedRfqData Specific parameters relevant to a Rfq.
* @param rfqData Specific parameters relevant to a Rfq.
* @param protocol version of the tbdex protocol.
* @param externalId external reference for the Rfq. Optional.
* @return Rfq instance.
*/
fun create(
to: String,
from: String,
unhashedRfqData: UnhashedRfqData,
rfqData: CreateRfqData,
protocol: String = "1.0",
externalId: String? = null,
): Rfq {
Expand All @@ -214,7 +214,7 @@ class Rfq private constructor(
externalId = externalId
)

val (data, privateData) = hashPrivateData(unhashedRfqData)
val (data, privateData) = hashPrivateData(rfqData)

Validator.validateData(data, "rfq")

Expand Down Expand Up @@ -257,36 +257,36 @@ class Rfq private constructor(
return rfq
}

private fun hashPrivateData(unhashedRfqData: UnhashedRfqData): Pair<RfqData, RfqPrivateData> {
private fun hashPrivateData(createRfqData: CreateRfqData): Pair<RfqData, RfqPrivateData> {
val salt = generateRandomSalt()

val payinPaymentDetailsHash = unhashedRfqData.payin.paymentDetails?.let { digestPrivateData(salt, it) }
val payoutPaymentDetailsHash = unhashedRfqData.payout.paymentDetails?.let { digestPrivateData(salt, it) }
val claimsHash = if (unhashedRfqData.claims.isEmpty()) {
val payinPaymentDetailsHash = createRfqData.payin.paymentDetails?.let { digestPrivateData(salt, it) }
val payoutPaymentDetailsHash = createRfqData.payout.paymentDetails?.let { digestPrivateData(salt, it) }
val claimsHash = if (createRfqData.claims.isEmpty()) {
null
} else {
digestPrivateData(salt, unhashedRfqData.claims)
digestPrivateData(salt, createRfqData.claims)
}

val hashedRfqData = RfqData(
offeringId = unhashedRfqData.offeringId,
offeringId = createRfqData.offeringId,
payin = SelectedPayinMethod(
kind = unhashedRfqData.payin.kind,
kind = createRfqData.payin.kind,
paymentDetailsHash = payinPaymentDetailsHash,
amount = unhashedRfqData.payin.amount
amount = createRfqData.payin.amount
),
payout = SelectedPayoutMethod(
kind = unhashedRfqData.payout.kind,
kind = createRfqData.payout.kind,
paymentDetailsHash = payoutPaymentDetailsHash
),
claimsHash = claimsHash
)

val privateRfqData = RfqPrivateData(
salt = salt,
payin = PrivatePaymentDetails(unhashedRfqData.payin.paymentDetails),
payout = PrivatePaymentDetails(unhashedRfqData.payout.paymentDetails),
claims = unhashedRfqData.claims
payin = PrivatePaymentDetails(createRfqData.payin.paymentDetails),
payout = PrivatePaymentDetails(createRfqData.payout.paymentDetails),
claims = createRfqData.claims
)

return Pair(hashedRfqData, privateRfqData)
Expand Down
15 changes: 6 additions & 9 deletions protocol/src/test/kotlin/tbdex/sdk/protocol/TestData.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,9 @@ import tbdex.sdk.protocol.models.QuoteData
import tbdex.sdk.protocol.models.QuoteDetails
import tbdex.sdk.protocol.models.ResourceKind
import tbdex.sdk.protocol.models.Rfq
import tbdex.sdk.protocol.models.RfqData
import tbdex.sdk.protocol.models.SelectedPayinMethod
import tbdex.sdk.protocol.models.SelectedPayoutMethod
import tbdex.sdk.protocol.models.UnhashedRfqData
import tbdex.sdk.protocol.models.UnhashedSelectedPayinMethod
import tbdex.sdk.protocol.models.UnhashedSelectedPayoutMethod
import tbdex.sdk.protocol.models.CreateRfqData
import tbdex.sdk.protocol.models.CreateSelectedPayinMethod
import tbdex.sdk.protocol.models.CreateSelectedPayoutMethod
import web5.sdk.credentials.VcDataModel
import web5.sdk.credentials.VerifiableCredential
import web5.sdk.credentials.model.ConstraintsV2
Expand Down Expand Up @@ -99,10 +96,10 @@ object TestData {
) = Rfq.create(
to = PFI_DID.uri,
from = ALICE_DID.uri,
unhashedRfqData = UnhashedRfqData(
rfqData = CreateRfqData(
offeringId = offeringId,
payin = UnhashedSelectedPayinMethod("BTC_ADDRESS", mapOf("address" to "123456"), amount = "10.00"),
payout = UnhashedSelectedPayoutMethod(
payin = CreateSelectedPayinMethod("BTC_ADDRESS", mapOf("address" to "123456"), amount = "10.00"),
payout = CreateSelectedPayoutMethod(
"MOMO", mapOf(
"phoneNumber" to "+254712345678",
"accountHolderName" to "Alfred Holder"
Expand Down
7 changes: 3 additions & 4 deletions protocol/src/test/kotlin/tbdex/sdk/protocol/models/RfqTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import org.junit.jupiter.api.Nested
import org.junit.jupiter.api.assertDoesNotThrow
import org.junit.jupiter.api.assertThrows
import tbdex.sdk.protocol.TestData
import tbdex.sdk.protocol.ValidatorException
import tbdex.sdk.protocol.serialization.Json
import kotlin.test.Test
import kotlin.test.assertIs
Expand All @@ -24,10 +23,10 @@ class RfqTest {
val rfq = Rfq.create(
to = TestData.PFI,
from = TestData.ALICE,
unhashedRfqData = UnhashedRfqData(
rfqData = CreateRfqData(
offeringId = TypeId.generate(ResourceKind.offering.name).toString(),
payin = UnhashedSelectedPayinMethod("BTC_ADDRESS", mapOf("address" to 123456), amount = "10.00"),
payout = UnhashedSelectedPayoutMethod("MOMO", mapOf("phone_number" to 123456)),
payin = CreateSelectedPayinMethod("BTC_ADDRESS", mapOf("address" to 123456), amount = "10.00"),
payout = CreateSelectedPayoutMethod("MOMO", mapOf("phone_number" to 123456)),
claims = emptyList()
),
externalId = "P_12345"
Expand Down

0 comments on commit 7b88980

Please sign in to comment.