From 2524db2a865c32e404823dd363f7bc712502f9a6 Mon Sep 17 00:00:00 2001 From: matiasbzurovski <164921079+matiasbzurovski@users.noreply.github.com> Date: Wed, 29 Jan 2025 17:14:06 +0100 Subject: [PATCH] Refactored inits from Signatures (#363) * wip * lint and missing tests --- ...pInteractionAuthProof+Wrap+Functions.swift | 6 +- ...ctionProofOfOwnership+Wrap+Functions.swift | 8 ++ .../MFA/SecurityShieldsBuilderTests.swift | 1 - ...alletToDappInteractionAuthProofTests.swift | 22 +++++- ...DappInteractionProofOfOwnershipTests.swift | 65 ++++++++++++++++ .../proof_of_ownership/proof.rs | 64 +++++++++++++++ .../success_response/auth/auth_proof.rs | 9 +-- .../proof_of_ownership/proof.rs | 14 ++++ .../WalletToDappInteractionAuthProof.kt | 8 +- ...WalletToDappInteractionProofOfOwnership.kt | 8 ++ .../WalletToDappInteractionAuthProof.kt | 33 -------- .../WalletToDappInteractionAuthProofTest | 29 +++++++ ...etToDappInteractionProofOfOwnershipTest.kt | 77 +++++++++++++++++++ 13 files changed, 296 insertions(+), 48 deletions(-) create mode 100644 apple/Sources/Sargon/Extensions/Methods/RadixConnect/WalletInteraction/WalletToDappInteractionProofOfOwnership+Wrap+Functions.swift create mode 100644 apple/Tests/TestCases/RadixConnect/WalletInteraction/WalletToDappInteractionProofOfOwnershipTests.swift create mode 100644 jvm/sargon-android/src/main/java/com/radixdlt/sargon/extensions/WalletToDappInteractionProofOfOwnership.kt delete mode 100644 jvm/sargon-android/src/test/java/com/radixdlt/sargon/WalletToDappInteractionAuthProof.kt create mode 100644 jvm/sargon-android/src/test/java/com/radixdlt/sargon/WalletToDappInteractionAuthProofTest create mode 100644 jvm/sargon-android/src/test/java/com/radixdlt/sargon/WalletToDappInteractionProofOfOwnershipTest.kt diff --git a/apple/Sources/Sargon/Extensions/Methods/RadixConnect/WalletInteraction/WalletToDappInteractionAuthProof+Wrap+Functions.swift b/apple/Sources/Sargon/Extensions/Methods/RadixConnect/WalletInteraction/WalletToDappInteractionAuthProof+Wrap+Functions.swift index 01901e020..b38e597cf 100644 --- a/apple/Sources/Sargon/Extensions/Methods/RadixConnect/WalletInteraction/WalletToDappInteractionAuthProof+Wrap+Functions.swift +++ b/apple/Sources/Sargon/Extensions/Methods/RadixConnect/WalletInteraction/WalletToDappInteractionAuthProof+Wrap+Functions.swift @@ -2,7 +2,11 @@ import Foundation import SargonUniFFI extension WalletToDappInteractionAuthProof { + public init(signatureWithPublicKey: SignatureWithPublicKey) { + self = newWalletToDappInteractionAuthProofFromSignatureWithPublicKey(signatureWithPublicKey: signatureWithPublicKey) + } + public init(intentSignatureOfOwner: IntentSignatureOfOwner) { - self = newWalletToDappInteractionAuthProofFromIntentSignatureOfOwner(intentSignatureOfOwner: intentSignatureOfOwner) + self.init(signatureWithPublicKey: intentSignatureOfOwner.intentSignature.signatureWithPublicKey) } } diff --git a/apple/Sources/Sargon/Extensions/Methods/RadixConnect/WalletInteraction/WalletToDappInteractionProofOfOwnership+Wrap+Functions.swift b/apple/Sources/Sargon/Extensions/Methods/RadixConnect/WalletInteraction/WalletToDappInteractionProofOfOwnership+Wrap+Functions.swift new file mode 100644 index 000000000..6b02fc1b6 --- /dev/null +++ b/apple/Sources/Sargon/Extensions/Methods/RadixConnect/WalletInteraction/WalletToDappInteractionProofOfOwnership+Wrap+Functions.swift @@ -0,0 +1,8 @@ +import Foundation +import SargonUniFFI + +extension WalletToDappInteractionProofOfOwnership { + public init(intentSignatureOfOwner: IntentSignatureOfOwner) { + self = newWalletToDappInteractionProofOfOwnershipFromIntentSignatureOfOwner(intentSignatureOfOwner: intentSignatureOfOwner) + } +} diff --git a/apple/Tests/TestCases/Profile/MFA/SecurityShieldsBuilderTests.swift b/apple/Tests/TestCases/Profile/MFA/SecurityShieldsBuilderTests.swift index 7507ce7c1..7204e32d8 100644 --- a/apple/Tests/TestCases/Profile/MFA/SecurityShieldsBuilderTests.swift +++ b/apple/Tests/TestCases/Profile/MFA/SecurityShieldsBuilderTests.swift @@ -67,7 +67,6 @@ struct ShieldTests { // ]) // } - @Test("Auto lowering of threshold upon deletion") func deleteFactorSourceFromPrimaryLowersThreshold() { let x: FactorSourceID = .sampleDevice diff --git a/apple/Tests/TestCases/RadixConnect/WalletInteraction/WalletToDappInteractionAuthProofTests.swift b/apple/Tests/TestCases/RadixConnect/WalletInteraction/WalletToDappInteractionAuthProofTests.swift index a29947b5c..938173bfd 100644 --- a/apple/Tests/TestCases/RadixConnect/WalletInteraction/WalletToDappInteractionAuthProofTests.swift +++ b/apple/Tests/TestCases/RadixConnect/WalletInteraction/WalletToDappInteractionAuthProofTests.swift @@ -7,15 +7,31 @@ import XCTest final class WalletToDappInteractionAuthProofTests: TestCase { typealias SUT = WalletToDappInteractionAuthProof - func testNewFromIntentSignatures_Ed25519() throws { - let intentSignature = IntentSignature.sample // Ed25519 + func testNewFromSignatureWithPublicKey_Ed25519() throws { + let signatureWithPublicKey = SignatureWithPublicKey.sample // Ed25519 + let sut = SUT(signatureWithPublicKey: signatureWithPublicKey) + XCTAssertEqual(sut.curve, .curve25519) + XCTAssertEqual(sut.publicKey, signatureWithPublicKey.publicKey) + XCTAssertEqual(sut.signature, signatureWithPublicKey.signature) + } + + func testNewFromSignatureWithPublicKey_Secp256k1() throws { + let signatureWithPublicKey = SignatureWithPublicKey.sampleOther // Secp256k1 + let sut = SUT(signatureWithPublicKey: signatureWithPublicKey) + XCTAssertEqual(sut.curve, .secp256k1) + XCTAssertEqual(sut.publicKey, signatureWithPublicKey.publicKey) + XCTAssertEqual(sut.signature, signatureWithPublicKey.signature) + } + + func testNewFromIntentSignatureOfOwner_Ed25519() throws { + let intentSignature = IntentSignature.sampleOther // Secp256k1 let sut = SUT(intentSignatureOfOwner: .init(owner: .sample, intentSignature: intentSignature)) XCTAssertEqual(sut.curve, .curve25519) XCTAssertEqual(sut.publicKey, intentSignature.signatureWithPublicKey.publicKey) XCTAssertEqual(sut.signature, intentSignature.signatureWithPublicKey.signature) } - func testNewFromIntentSignatures_Secp256k1() throws { + func testNewFromIntentSignatureOfOwner_Secp256k1() throws { let intentSignature = IntentSignature.sampleOther // Secp256k1 let sut = SUT(intentSignatureOfOwner: .init(owner: .sample, intentSignature: intentSignature)) XCTAssertEqual(sut.curve, .secp256k1) diff --git a/apple/Tests/TestCases/RadixConnect/WalletInteraction/WalletToDappInteractionProofOfOwnershipTests.swift b/apple/Tests/TestCases/RadixConnect/WalletInteraction/WalletToDappInteractionProofOfOwnershipTests.swift new file mode 100644 index 000000000..a84ce627d --- /dev/null +++ b/apple/Tests/TestCases/RadixConnect/WalletInteraction/WalletToDappInteractionProofOfOwnershipTests.swift @@ -0,0 +1,65 @@ +import CustomDump +import Foundation +import Sargon +import SargonUniFFI +import XCTest + +final class WalletToDappInteractionProofOfOwnershipTests: TestCase { + typealias SUT = WalletToDappInteractionProofOfOwnership + + func testNewFromIntentSignatures_Ed25519_Account() throws { + let owner = AddressOfAccountOrPersona.account(.sample) + let intentSignature = IntentSignature.sample // Ed25519 + let sut = SUT(intentSignatureOfOwner: .init(owner: owner, intentSignature: intentSignature)) + switch sut { + case let .account(value): + XCTAssertEqual(value.proof.curve, .curve25519) + XCTAssertEqual(value.proof.publicKey, intentSignature.signatureWithPublicKey.publicKey) + XCTAssertEqual(value.proof.signature, intentSignature.signatureWithPublicKey.signature) + case .persona: + XCTFail("Expected account proof") + } + } + + func testNewFromIntentSignatures_Ed25519_Persona() throws { + let owner = AddressOfAccountOrPersona.identity(.sample) + let intentSignature = IntentSignature.sample // Ed25519 + let sut = SUT(intentSignatureOfOwner: .init(owner: owner, intentSignature: intentSignature)) + switch sut { + case .account: + XCTFail("Expected persona proof") + case let .persona(value): + XCTAssertEqual(value.proof.curve, .curve25519) + XCTAssertEqual(value.proof.publicKey, intentSignature.signatureWithPublicKey.publicKey) + XCTAssertEqual(value.proof.signature, intentSignature.signatureWithPublicKey.signature) + } + } + + func testNewFromIntentSignatures_Secp256k1_Account() throws { + let owner = AddressOfAccountOrPersona.account(.sample) + let intentSignature = IntentSignature.sampleOther // Secp256k1 + let sut = SUT(intentSignatureOfOwner: .init(owner: owner, intentSignature: intentSignature)) + switch sut { + case let .account(value): + XCTAssertEqual(value.proof.curve, .secp256k1) + XCTAssertEqual(value.proof.publicKey, intentSignature.signatureWithPublicKey.publicKey) + XCTAssertEqual(value.proof.signature, intentSignature.signatureWithPublicKey.signature) + case .persona: + XCTFail("Expected account proof") + } + } + + func testNewFromIntentSignatures_Secp256k1_Persona() throws { + let owner = AddressOfAccountOrPersona.identity(.sample) + let intentSignature = IntentSignature.sampleOther // Secp256k1 + let sut = SUT(intentSignatureOfOwner: .init(owner: owner, intentSignature: intentSignature)) + switch sut { + case .account: + XCTFail("Expected persona proof") + case let .persona(value): + XCTAssertEqual(value.proof.curve, .secp256k1) + XCTAssertEqual(value.proof.publicKey, intentSignature.signatureWithPublicKey.publicKey) + XCTAssertEqual(value.proof.signature, intentSignature.signatureWithPublicKey.signature) + } + } +} diff --git a/crates/app/radix-connect/src/wallet_interaction/dapp_wallet_interaction/wallet_to_dapp/success_response/proof_of_ownership/proof.rs b/crates/app/radix-connect/src/wallet_interaction/dapp_wallet_interaction/wallet_to_dapp/success_response/proof_of_ownership/proof.rs index 6c5afa805..af27e711b 100644 --- a/crates/app/radix-connect/src/wallet_interaction/dapp_wallet_interaction/wallet_to_dapp/success_response/proof_of_ownership/proof.rs +++ b/crates/app/radix-connect/src/wallet_interaction/dapp_wallet_interaction/wallet_to_dapp/success_response/proof_of_ownership/proof.rs @@ -26,6 +26,34 @@ impl From } } +impl From<(AddressOfAccountOrPersona, SignatureWithPublicKey)> + for WalletToDappInteractionProofOfOwnership +{ + fn from( + value: (AddressOfAccountOrPersona, SignatureWithPublicKey), + ) -> Self { + let (owner, signature_with_public_key) = value; + match owner { + AddressOfAccountOrPersona::Account(account_address) => { + WalletToDappInteractionProofOfOwnership::Account( + WalletToDappInteractionAccountProof::new( + account_address, + signature_with_public_key.into(), + ), + ) + } + AddressOfAccountOrPersona::Identity(identity_address) => { + WalletToDappInteractionProofOfOwnership::Persona( + WalletToDappInteractionPersonaProof::new( + identity_address, + signature_with_public_key.into(), + ), + ) + } + } + } +} + impl HasSampleValues for WalletToDappInteractionProofOfOwnership { fn sample() -> Self { Self::Account(WalletToDappInteractionAccountProof::sample()) @@ -70,6 +98,42 @@ mod tests { ) } + #[test] + fn from_account_address_and_signature() { + let signature_with_public_key = SignatureWithPublicKey::sample(); + let account_address = AccountAddress::sample(); + let result = + SUT::from((account_address.into(), signature_with_public_key)); + match result { + SUT::Account(account_proof) => { + assert_eq!(account_proof.account_address, account_address); + assert_eq!( + account_proof.proof, + signature_with_public_key.into() + ); + } + _ => panic!("Expected Account proof"), + } + } + + #[test] + fn from_persona_address_and_signature() { + let signature_with_public_key = SignatureWithPublicKey::sample(); + let identity_address = IdentityAddress::sample(); + let result = + SUT::from((identity_address.into(), signature_with_public_key)); + match result { + SUT::Persona(persona_proof) => { + assert_eq!(persona_proof.identity_address, identity_address); + assert_eq!( + persona_proof.proof, + signature_with_public_key.into() + ); + } + _ => panic!("Expected Persona proof"), + } + } + #[test] fn json_roundtrip() { assert_eq_after_json_roundtrip( diff --git a/crates/uniffi/uniffi_SPLIT_ME/src/radix_connect/wallet_interaction/dapp_wallet_interaction/wallet_to_dapp/success_response/auth/auth_proof.rs b/crates/uniffi/uniffi_SPLIT_ME/src/radix_connect/wallet_interaction/dapp_wallet_interaction/wallet_to_dapp/success_response/auth/auth_proof.rs index 2e669017f..c6d625e5d 100644 --- a/crates/uniffi/uniffi_SPLIT_ME/src/radix_connect/wallet_interaction/dapp_wallet_interaction/wallet_to_dapp/success_response/auth/auth_proof.rs +++ b/crates/uniffi/uniffi_SPLIT_ME/src/radix_connect/wallet_interaction/dapp_wallet_interaction/wallet_to_dapp/success_response/auth/auth_proof.rs @@ -9,14 +9,11 @@ pub struct WalletToDappInteractionAuthProof { } #[uniffi::export] -pub fn new_wallet_to_dapp_interaction_auth_proof_from_intent_signature_of_owner( - intent_signature_of_owner: IntentSignatureOfOwner, +pub fn new_wallet_to_dapp_interaction_auth_proof_from_signature_with_public_key( + signature_with_public_key: SignatureWithPublicKey, ) -> WalletToDappInteractionAuthProof { InternalWalletToDappInteractionAuthProof::from( - intent_signature_of_owner - .intent_signature - .value - .into_internal(), + signature_with_public_key.into_internal(), ) .into() } diff --git a/crates/uniffi/uniffi_SPLIT_ME/src/radix_connect/wallet_interaction/dapp_wallet_interaction/wallet_to_dapp/success_response/proof_of_ownership/proof.rs b/crates/uniffi/uniffi_SPLIT_ME/src/radix_connect/wallet_interaction/dapp_wallet_interaction/wallet_to_dapp/success_response/proof_of_ownership/proof.rs index 830142a0d..ab5ff8f0f 100644 --- a/crates/uniffi/uniffi_SPLIT_ME/src/radix_connect/wallet_interaction/dapp_wallet_interaction/wallet_to_dapp/success_response/proof_of_ownership/proof.rs +++ b/crates/uniffi/uniffi_SPLIT_ME/src/radix_connect/wallet_interaction/dapp_wallet_interaction/wallet_to_dapp/success_response/proof_of_ownership/proof.rs @@ -7,3 +7,17 @@ pub enum WalletToDappInteractionProofOfOwnership { Account(WalletToDappInteractionAccountProof), Persona(WalletToDappInteractionPersonaProof), } + +#[uniffi::export] +pub fn new_wallet_to_dapp_interaction_proof_of_ownership_from_intent_signature_of_owner( + intent_signature_of_owner: IntentSignatureOfOwner, +) -> WalletToDappInteractionProofOfOwnership { + InternalWalletToDappInteractionProofOfOwnership::from(( + intent_signature_of_owner.owner.into_internal(), + intent_signature_of_owner + .intent_signature + .value + .into_internal(), + )) + .into() +} diff --git a/jvm/sargon-android/src/main/java/com/radixdlt/sargon/extensions/WalletToDappInteractionAuthProof.kt b/jvm/sargon-android/src/main/java/com/radixdlt/sargon/extensions/WalletToDappInteractionAuthProof.kt index 994818dc3..7e7cddece 100644 --- a/jvm/sargon-android/src/main/java/com/radixdlt/sargon/extensions/WalletToDappInteractionAuthProof.kt +++ b/jvm/sargon-android/src/main/java/com/radixdlt/sargon/extensions/WalletToDappInteractionAuthProof.kt @@ -1,8 +1,8 @@ package com.radixdlt.sargon.extensions import com.radixdlt.sargon.WalletToDappInteractionAuthProof -import com.radixdlt.sargon.newWalletToDappInteractionAuthProofFromIntentSignatureOfOwner -import com.radixdlt.sargon.IntentSignatureOfOwner +import com.radixdlt.sargon.SignatureWithPublicKey +import com.radixdlt.sargon.newWalletToDappInteractionAuthProofFromSignatureWithPublicKey -fun WalletToDappInteractionAuthProof.Companion.init(intentSignatureOfOwner: IntentSignatureOfOwner) = - newWalletToDappInteractionAuthProofFromIntentSignatureOfOwner(intentSignatureOfOwner = intentSignatureOfOwner) \ No newline at end of file +fun WalletToDappInteractionAuthProof.Companion.init(signatureWithPublicKey: SignatureWithPublicKey) = + newWalletToDappInteractionAuthProofFromSignatureWithPublicKey(signatureWithPublicKey = signatureWithPublicKey) \ No newline at end of file diff --git a/jvm/sargon-android/src/main/java/com/radixdlt/sargon/extensions/WalletToDappInteractionProofOfOwnership.kt b/jvm/sargon-android/src/main/java/com/radixdlt/sargon/extensions/WalletToDappInteractionProofOfOwnership.kt new file mode 100644 index 000000000..dd72048ca --- /dev/null +++ b/jvm/sargon-android/src/main/java/com/radixdlt/sargon/extensions/WalletToDappInteractionProofOfOwnership.kt @@ -0,0 +1,8 @@ +package com.radixdlt.sargon.extensions + +import com.radixdlt.sargon.IntentSignatureOfOwner +import com.radixdlt.sargon.WalletToDappInteractionProofOfOwnership +import com.radixdlt.sargon.newWalletToDappInteractionProofOfOwnershipFromIntentSignatureOfOwner + +fun WalletToDappInteractionProofOfOwnership.Companion.init(intentSignatureOfOwner: IntentSignatureOfOwner) = + newWalletToDappInteractionProofOfOwnershipFromIntentSignatureOfOwner(intentSignatureOfOwner = intentSignatureOfOwner) \ No newline at end of file diff --git a/jvm/sargon-android/src/test/java/com/radixdlt/sargon/WalletToDappInteractionAuthProof.kt b/jvm/sargon-android/src/test/java/com/radixdlt/sargon/WalletToDappInteractionAuthProof.kt deleted file mode 100644 index f7cd47cc7..000000000 --- a/jvm/sargon-android/src/test/java/com/radixdlt/sargon/WalletToDappInteractionAuthProof.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.radixdlt.sargon - -import com.radixdlt.sargon.extensions.init -import com.radixdlt.sargon.extensions.publicKey -import com.radixdlt.sargon.extensions.signature -import com.radixdlt.sargon.extensions.signatureWithPublicKey -import com.radixdlt.sargon.samples.sample -import com.radixdlt.sargon.samples.sampleStokenet -import org.junit.jupiter.api.Assertions.assertEquals -import org.junit.jupiter.api.Test - -class WalletToDappInteractionAuthProofTest { - - @Test - fun testNewFromIntentSignatures_Ed25519() { - val intentSignature = IntentSignature.sample.invoke() // Ed25519 - val intentSignatureOfOwner = IntentSignatureOfOwner(owner = AddressOfAccountOrPersona.sampleStokenet.invoke(), intentSignature = intentSignature ) - val sut = WalletToDappInteractionAuthProof.init(intentSignatureOfOwner = intentSignatureOfOwner) - assertEquals(sut.curve, Slip10Curve.CURVE25519) - assertEquals(sut.publicKey, intentSignature.signatureWithPublicKey.publicKey) - assertEquals(sut.signature, intentSignature.signatureWithPublicKey.signature) - } - - @Test - fun testNewFromIntentSignatures_Secp256k1() { - val intentSignature = IntentSignature.sample.other() // Secp256k1 - val intentSignatureOfOwner = IntentSignatureOfOwner(owner = AddressOfAccountOrPersona.sampleStokenet.invoke(), intentSignature = intentSignature ) - val sut = WalletToDappInteractionAuthProof.init(intentSignatureOfOwner = intentSignatureOfOwner) - assertEquals(sut.curve, Slip10Curve.SECP256K1) - assertEquals(sut.publicKey, intentSignature.signatureWithPublicKey.publicKey) - assertEquals(sut.signature, intentSignature.signatureWithPublicKey.signature) - } -} \ No newline at end of file diff --git a/jvm/sargon-android/src/test/java/com/radixdlt/sargon/WalletToDappInteractionAuthProofTest b/jvm/sargon-android/src/test/java/com/radixdlt/sargon/WalletToDappInteractionAuthProofTest new file mode 100644 index 000000000..da0fc10fd --- /dev/null +++ b/jvm/sargon-android/src/test/java/com/radixdlt/sargon/WalletToDappInteractionAuthProofTest @@ -0,0 +1,29 @@ +package com.radixdlt.sargon + +import com.radixdlt.sargon.extensions.init +import com.radixdlt.sargon.extensions.publicKey +import com.radixdlt.sargon.extensions.signature +import com.radixdlt.sargon.samples.sample +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test + +class WalletToDappInteractionAuthProofTest { + + @Test + fun testNewFromIntentSignatures_Ed25519() { + val signatureWithPublicKey = SignatureWithPublicKey.sample() // Ed25519 + val sut = WalletToDappInteractionAuthProof.init(signatureWithPublicKey = signatureWithPublicKey) + assertEquals(sut.curve, Slip10Curve.CURVE25519) + assertEquals(sut.publicKey, signatureWithPublicKey.publicKey) + assertEquals(sut.signature, signatureWithPublicKey.signature) + } + + @Test + fun testNewFromIntentSignatures_Secp256k1() { + val signatureWithPublicKey = SignatureWithPublicKey.sample.other() // Secp256k1 + val sut = WalletToDappInteractionAuthProof.init(signatureWithPublicKey = signatureWithPublicKey) + assertEquals(sut.curve, Slip10Curve.SECP256K1) + assertEquals(sut.publicKey, signatureWithPublicKey.publicKey) + assertEquals(sut.signature, signatureWithPublicKey.signature) + } +} \ No newline at end of file diff --git a/jvm/sargon-android/src/test/java/com/radixdlt/sargon/WalletToDappInteractionProofOfOwnershipTest.kt b/jvm/sargon-android/src/test/java/com/radixdlt/sargon/WalletToDappInteractionProofOfOwnershipTest.kt new file mode 100644 index 000000000..f6684046c --- /dev/null +++ b/jvm/sargon-android/src/test/java/com/radixdlt/sargon/WalletToDappInteractionProofOfOwnershipTest.kt @@ -0,0 +1,77 @@ +package com.radixdlt.sargon + +import com.radixdlt.sargon.extensions.init +import com.radixdlt.sargon.extensions.publicKey +import com.radixdlt.sargon.extensions.signature +import com.radixdlt.sargon.extensions.signatureWithPublicKey +import com.radixdlt.sargon.samples.sample +import com.radixdlt.sargon.samples.sampleStokenet +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.fail +import org.junit.jupiter.api.Test + +class WalletToDappInteractionProofOfOwnershipTest { + @Test + fun testNewFromIntentSignatures_Ed25519_Account() { + val owner = AddressOfAccountOrPersona.Account(AccountAddress.sampleStokenet.invoke()) + val intentSignature = IntentSignature.sample() // Ed25519 + val intentSignatureOfOwner = IntentSignatureOfOwner(owner = owner, intentSignature = intentSignature) + val sut = WalletToDappInteractionProofOfOwnership.init(intentSignatureOfOwner = intentSignatureOfOwner) + when (sut) { + is WalletToDappInteractionProofOfOwnership.Account -> { + assertEquals(sut.v1.proof.curve, Slip10Curve.CURVE25519) + assertEquals(sut.v1.proof.publicKey, intentSignature.signatureWithPublicKey.publicKey) + assertEquals(sut.v1.proof.signature, intentSignature.signatureWithPublicKey.signature) + } + is WalletToDappInteractionProofOfOwnership.Persona -> fail("Expected account proof") + } + } + + @Test + fun testNewFromIntentSignatures_Ed25519_Persona() { + val owner = AddressOfAccountOrPersona.Identity(IdentityAddress.sampleStokenet.invoke()) + val intentSignature = IntentSignature.sample() // Ed25519 + val intentSignatureOfOwner = IntentSignatureOfOwner(owner = owner, intentSignature = intentSignature) + val sut = WalletToDappInteractionProofOfOwnership.init(intentSignatureOfOwner = intentSignatureOfOwner) + when (sut) { + is WalletToDappInteractionProofOfOwnership.Account -> fail("Expected Persona proof") + is WalletToDappInteractionProofOfOwnership.Persona -> { + assertEquals(sut.v1.proof.curve, Slip10Curve.CURVE25519) + assertEquals(sut.v1.proof.publicKey, intentSignature.signatureWithPublicKey.publicKey) + assertEquals(sut.v1.proof.signature, intentSignature.signatureWithPublicKey.signature) + } + } + } + + @Test + fun testNewFromIntentSignatures_Secp256k1_Account() { + val owner = AddressOfAccountOrPersona.Account(AccountAddress.sampleStokenet.invoke()) + val intentSignature = IntentSignature.sample.other() // Secp256k1 + val intentSignatureOfOwner = IntentSignatureOfOwner(owner = owner, intentSignature = intentSignature) + val sut = WalletToDappInteractionProofOfOwnership.init(intentSignatureOfOwner = intentSignatureOfOwner) + when (sut) { + is WalletToDappInteractionProofOfOwnership.Account -> { + assertEquals(sut.v1.proof.curve, Slip10Curve.SECP256K1) + assertEquals(sut.v1.proof.publicKey, intentSignature.signatureWithPublicKey.publicKey) + assertEquals(sut.v1.proof.signature, intentSignature.signatureWithPublicKey.signature) + } + is WalletToDappInteractionProofOfOwnership.Persona -> fail("Expected account proof") + } + } + + @Test + fun testNewFromIntentSignatures_Secp256k1_Persona() { + val owner = AddressOfAccountOrPersona.Identity(IdentityAddress.sampleStokenet.invoke()) + val intentSignature = IntentSignature.sample.other() // Secp256k1 + val intentSignatureOfOwner = IntentSignatureOfOwner(owner = owner, intentSignature = intentSignature) + val sut = WalletToDappInteractionProofOfOwnership.init(intentSignatureOfOwner = intentSignatureOfOwner) + when (sut) { + is WalletToDappInteractionProofOfOwnership.Account -> fail("Expected Persona proof") + is WalletToDappInteractionProofOfOwnership.Persona -> { + assertEquals(sut.v1.proof.curve, Slip10Curve.SECP256K1) + assertEquals(sut.v1.proof.publicKey, intentSignature.signatureWithPublicKey.publicKey) + assertEquals(sut.v1.proof.signature, intentSignature.signatureWithPublicKey.signature) + } + } + } +} \ No newline at end of file