Skip to content

Commit 98d3920

Browse files
R3SOL-1765 privacy salt provider (#6410)
- added privacySalt member variable to UtxoTransactionBuilderInternal so that it can be set from dlt and use it for transaction in dlt. - made conditionally use available privacySalt depending on platform (dlt or c5) --------- Co-authored-by: Will Vigor <[email protected]>
1 parent 5703c44 commit 98d3920

File tree

5 files changed

+30
-1
lines changed

5 files changed

+30
-1
lines changed

components/ledger/ledger-utxo-flow/src/main/kotlin/net/corda/ledger/utxo/flow/impl/transaction/verifier/UtxoBaselinedTransactionBuilder.kt

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.corda.ledger.utxo.flow.impl.transaction.verifier
22

3+
import net.corda.ledger.common.data.transaction.PrivacySalt
34
import net.corda.ledger.lib.utxo.flow.impl.timewindow.TimeWindowBetweenImpl
45
import net.corda.ledger.lib.utxo.flow.impl.timewindow.TimeWindowUntilImpl
56
import net.corda.ledger.lib.utxo.flow.impl.transaction.ContractStateAndEncumbranceTag
@@ -40,6 +41,7 @@ class UtxoBaselinedTransactionBuilder private constructor(
4041
get() = currentTransactionBuilder.referenceStateRefs
4142
override val outputStates: List<ContractStateAndEncumbranceTag>
4243
get() = currentTransactionBuilder.outputStates
44+
override var privacySalt: PrivacySalt? = null
4345

4446
override fun getNotaryName(): MemberX500Name? = currentTransactionBuilder.notaryName
4547

libs/ledger-lib-utxo-flow/src/main/kotlin/net/corda/ledger/lib/utxo/flow/impl/transaction/UtxoTransactionBuilderImpl.kt

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.corda.ledger.lib.utxo.flow.impl.transaction
22

3+
import net.corda.ledger.common.data.transaction.PrivacySalt
34
import net.corda.ledger.lib.utxo.flow.impl.timewindow.TimeWindowBetweenImpl
45
import net.corda.ledger.lib.utxo.flow.impl.timewindow.TimeWindowUntilImpl
56
import net.corda.ledger.lib.utxo.flow.impl.transaction.factory.UtxoSignedTransactionFactory
@@ -31,6 +32,8 @@ class UtxoTransactionBuilderImpl(
3132
override val outputStates: MutableList<ContractStateAndEncumbranceTag> = mutableListOf()
3233
) : UtxoTransactionBuilderInternal {
3334

35+
override var privacySalt: PrivacySalt? = null
36+
3437
private var alreadySigned = false
3538

3639
override fun addCommand(command: Command): UtxoTransactionBuilder {

libs/ledger-lib-utxo-flow/src/main/kotlin/net/corda/ledger/lib/utxo/flow/impl/transaction/UtxoTransactionBuilderInternal.kt

+6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.corda.ledger.lib.utxo.flow.impl.transaction
22

3+
import net.corda.ledger.common.data.transaction.PrivacySalt
34
import net.corda.v5.ledger.utxo.transaction.UtxoTransactionBuilder
45

56
interface UtxoTransactionBuilderInternal : UtxoTransactionBuilder, UtxoTransactionBuilderData {
@@ -21,4 +22,9 @@ interface UtxoTransactionBuilderInternal : UtxoTransactionBuilder, UtxoTransacti
2122
* But keeps potential duplications in user-defined types. (commands and output states)
2223
*/
2324
fun append(other: UtxoTransactionBuilderData): UtxoTransactionBuilderInternal
25+
26+
/**
27+
* Privacy salt used in the transaction. If not set, the privacy salt will be generated.
28+
*/
29+
var privacySalt: PrivacySalt?
2430
}

libs/ledger-lib-utxo-flow/src/main/kotlin/net/corda/ledger/lib/utxo/flow/impl/transaction/factory/impl/UtxoSignedTransactionFactoryImpl.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ class UtxoSignedTransactionFactoryImpl(
6060
val metadataBytes = serializeMetadata(metadata)
6161
val componentGroups = calculateComponentGroups(utxoTransactionBuilder, metadataBytes)
6262

63-
val privacySalt = privacySaltProviderService.generatePrivacySalt()
63+
val privacySalt = utxoTransactionBuilder.privacySalt ?: privacySaltProviderService.generatePrivacySalt()
6464
val wireTransaction = wireTransactionFactory.create(componentGroups, privacySalt)
6565

6666
utxoLedgerTransactionVerificationService.verify(utxoLedgerTransactionFactory.create(wireTransaction))

libs/ledger-lib-utxo-flow/src/test/kotlin/net/corda/ledger/lib/utxo/flow/impl/transaction/UtxoTransactionBuilderImplTest.kt

+18
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package net.corda.ledger.lib.utxo.flow.impl.transaction
22

33
import net.corda.crypto.core.SecureHashImpl
44
import net.corda.ledger.common.data.transaction.CordaPackageSummaryImpl
5+
import net.corda.ledger.common.data.transaction.PrivacySaltImpl
56
import net.corda.ledger.common.data.transaction.TransactionMetadataInternal
67
import net.corda.ledger.common.test.dummyCpkSignerSummaryHash
78
import net.corda.ledger.common.testkit.publicKeyExample
@@ -451,4 +452,21 @@ class UtxoTransactionBuilderImplTest : UtxoLedgerTest() {
451452
.addReferenceStates(List(2) { stateRef1 })
452453
}.isInstanceOf(IllegalArgumentException::class.java)
453454
}
455+
456+
@Test
457+
fun `Privacy salt should return null by default`() {
458+
val privacySalt = utxoTransactionBuilder.privacySalt
459+
460+
assertThat(privacySalt).isNull()
461+
}
462+
463+
@Test
464+
fun `Privacy salt should return the value set`() {
465+
val privacySalt = PrivacySaltImpl("longlonglonglonglonglonglonglongbytes".toByteArray())
466+
val builder = utxoTransactionBuilder.also {
467+
it.privacySalt = privacySalt
468+
}
469+
470+
assertThat(builder.privacySalt).isEqualTo(privacySalt)
471+
}
454472
}

0 commit comments

Comments
 (0)