Skip to content

Commit

Permalink
Refactored inits from Signatures (#363)
Browse files Browse the repository at this point in the history
* wip

* lint and missing tests
  • Loading branch information
matiasbzurovski authored Jan 29, 2025
1 parent 276143f commit 2524db2
Show file tree
Hide file tree
Showing 13 changed files with 296 additions and 48 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import Foundation
import SargonUniFFI

extension WalletToDappInteractionProofOfOwnership {
public init(intentSignatureOfOwner: IntentSignatureOfOwner) {
self = newWalletToDappInteractionProofOfOwnershipFromIntentSignatureOfOwner(intentSignatureOfOwner: intentSignatureOfOwner)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@ struct ShieldTests {
// ])
// }


@Test("Auto lowering of threshold upon deletion")
func deleteFactorSourceFromPrimaryLowersThreshold() {
let x: FactorSourceID = .sampleDevice
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
@@ -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)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,34 @@ impl From<WalletToDappInteractionPersonaProof>
}
}

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())
Expand Down Expand Up @@ -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(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()
}
Original file line number Diff line number Diff line change
Expand Up @@ -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()
}
Original file line number Diff line number Diff line change
@@ -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)
fun WalletToDappInteractionAuthProof.Companion.init(signatureWithPublicKey: SignatureWithPublicKey) =
newWalletToDappInteractionAuthProofFromSignatureWithPublicKey(signatureWithPublicKey = signatureWithPublicKey)
Original file line number Diff line number Diff line change
@@ -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)

This file was deleted.

Original file line number Diff line number Diff line change
@@ -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)
}
}
Loading

0 comments on commit 2524db2

Please sign in to comment.