Skip to content

Commit da8d5f1

Browse files
committed
fix: correct signer key equality checks
1 parent 66e41cb commit da8d5f1

3 files changed

Lines changed: 19 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Release History
55
- refactor!: remove deprecated `StrKey.encode_muxed_account` and `StrKey.decode_muxed_account`, use `stellar_sdk.MuxedAccount` instead.
66
- refactor!: remove `TransactionBuilder.append_create_stellar_asset_contract_from_address_op`, use `TransactionBuilder.append_create_contract_op` instead.
77
- feat!: add `max_content_size` parameter to `BaseSyncClient.get()` and `BaseAsyncClient.get()` to prevent DoS via memory exhaustion. `fetch_stellar_toml`, `fetch_stellar_toml_async` and federation resolve functions now enforce response size limits. Custom client implementations must update their `get()` signature to include `max_content_size: int | None = None`.
8+
- fix: correct equality checks for `SignedPayloadSigner` and `SignerKey`.
89
- fix: xdr-generator security hardening:
910
- validate `Opaque`/`String` max sizes on unpack.
1011
- add remaining-input-length checks for variable-length arrays.

stellar_sdk/signer_key.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def __hash__(self):
3131
def __eq__(self, other: object) -> bool:
3232
if not isinstance(other, self.__class__):
3333
return NotImplemented
34-
return self.account_id == other.account_id and self.payload == self.payload
34+
return self.account_id == other.account_id and self.payload == other.payload
3535

3636
def __repr__(self):
3737
return f"<SignedPayloadSigner [account_id={self.account_id}, payload={self.payload}]>"
@@ -249,7 +249,7 @@ def __eq__(self, other: object) -> bool:
249249
return NotImplemented
250250
return (
251251
self.signer_key == other.signer_key
252-
and self.signer_key_type == self.signer_key_type
252+
and self.signer_key_type == other.signer_key_type
253253
)
254254

255255
def __repr__(self):

tests/test_signer_key.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,15 @@ def test_ed25519_signed_payload(self):
182182
assert SignerKey.ed25519_signed_payload(ed25519_signed_payload) == signer_key
183183
assert SignerKey.ed25519_signed_payload(signer_key_data) == signer_key
184184

185+
def test_eq_compares_signer_key_type(self):
186+
signer_key_data = b"\x85\xba{e\xeb\x92\x83r\xb2\xf5\xc4Z$\xc2\x84b\xc6\x8a\xa6\x04\x86dg$x6\x0c\xeb\x9aW\x13W"
187+
ed25519_signer = SignerKey(
188+
signer_key_data, SignerKeyType.SIGNER_KEY_TYPE_ED25519
189+
)
190+
hash_x_signer = SignerKey(signer_key_data, SignerKeyType.SIGNER_KEY_TYPE_HASH_X)
191+
192+
assert ed25519_signer != hash_x_signer
193+
185194

186195
class TestSignedPayloadSigner:
187196
@pytest.mark.parametrize(
@@ -253,3 +262,10 @@ def test_to_signed_payload_signer_raise(self):
253262
"<SignerKeyType.SIGNER_KEY_TYPE_ED25519_SIGNED_PAYLOAD: 3>",
254263
):
255264
signer_key.to_signed_payload_signer()
265+
266+
def test_eq_compares_payload(self):
267+
account_id = "GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVSGZ"
268+
signer1 = SignedPayloadSigner(account_id, b"cat")
269+
signer2 = SignedPayloadSigner(account_id, b"dog")
270+
271+
assert signer1 != signer2

0 commit comments

Comments
 (0)