Skip to content

Commit fcd5dc3

Browse files
authored
fix: check y_parity value (#1107)
1 parent 6e65228 commit fcd5dc3

File tree

7 files changed

+28
-0
lines changed

7 files changed

+28
-0
lines changed

src/ethereum/arrow_glacier/transactions.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,10 +241,14 @@ def recover_sender(chain_id: U64, tx: Transaction) -> Address:
241241
signing_hash_155(tx, chain_id),
242242
)
243243
elif isinstance(tx, AccessListTransaction):
244+
if tx.y_parity not in (U256(0), U256(1)):
245+
raise InvalidSignatureError("bad y_parity")
244246
public_key = secp256k1_recover(
245247
r, s, tx.y_parity, signing_hash_2930(tx)
246248
)
247249
elif isinstance(tx, FeeMarketTransaction):
250+
if tx.y_parity not in (U256(0), U256(1)):
251+
raise InvalidSignatureError("bad y_parity")
248252
public_key = secp256k1_recover(
249253
r, s, tx.y_parity, signing_hash_1559(tx)
250254
)

src/ethereum/berlin/transactions.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,8 @@ def recover_sender(chain_id: U64, tx: Transaction) -> Address:
213213
signing_hash_155(tx, chain_id),
214214
)
215215
elif isinstance(tx, AccessListTransaction):
216+
if tx.y_parity not in (U256(0), U256(1)):
217+
raise InvalidSignatureError("bad y_parity")
216218
public_key = secp256k1_recover(
217219
r, s, tx.y_parity, signing_hash_2930(tx)
218220
)

src/ethereum/cancun/transactions.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,14 +280,20 @@ def recover_sender(chain_id: U64, tx: Transaction) -> Address:
280280
signing_hash_155(tx, chain_id),
281281
)
282282
elif isinstance(tx, AccessListTransaction):
283+
if tx.y_parity not in (U256(0), U256(1)):
284+
raise InvalidSignatureError("bad y_parity")
283285
public_key = secp256k1_recover(
284286
r, s, tx.y_parity, signing_hash_2930(tx)
285287
)
286288
elif isinstance(tx, FeeMarketTransaction):
289+
if tx.y_parity not in (U256(0), U256(1)):
290+
raise InvalidSignatureError("bad y_parity")
287291
public_key = secp256k1_recover(
288292
r, s, tx.y_parity, signing_hash_1559(tx)
289293
)
290294
elif isinstance(tx, BlobTransaction):
295+
if tx.y_parity not in (U256(0), U256(1)):
296+
raise InvalidSignatureError("bad y_parity")
291297
public_key = secp256k1_recover(
292298
r, s, tx.y_parity, signing_hash_4844(tx)
293299
)

src/ethereum/gray_glacier/transactions.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,10 +241,14 @@ def recover_sender(chain_id: U64, tx: Transaction) -> Address:
241241
signing_hash_155(tx, chain_id),
242242
)
243243
elif isinstance(tx, AccessListTransaction):
244+
if tx.y_parity not in (U256(0), U256(1)):
245+
raise InvalidSignatureError("bad y_parity")
244246
public_key = secp256k1_recover(
245247
r, s, tx.y_parity, signing_hash_2930(tx)
246248
)
247249
elif isinstance(tx, FeeMarketTransaction):
250+
if tx.y_parity not in (U256(0), U256(1)):
251+
raise InvalidSignatureError("bad y_parity")
248252
public_key = secp256k1_recover(
249253
r, s, tx.y_parity, signing_hash_1559(tx)
250254
)

src/ethereum/london/transactions.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,10 +241,14 @@ def recover_sender(chain_id: U64, tx: Transaction) -> Address:
241241
signing_hash_155(tx, chain_id),
242242
)
243243
elif isinstance(tx, AccessListTransaction):
244+
if tx.y_parity not in (U256(0), U256(1)):
245+
raise InvalidSignatureError("bad y_parity")
244246
public_key = secp256k1_recover(
245247
r, s, tx.y_parity, signing_hash_2930(tx)
246248
)
247249
elif isinstance(tx, FeeMarketTransaction):
250+
if tx.y_parity not in (U256(0), U256(1)):
251+
raise InvalidSignatureError("bad y_parity")
248252
public_key = secp256k1_recover(
249253
r, s, tx.y_parity, signing_hash_1559(tx)
250254
)

src/ethereum/paris/transactions.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,10 +241,14 @@ def recover_sender(chain_id: U64, tx: Transaction) -> Address:
241241
signing_hash_155(tx, chain_id),
242242
)
243243
elif isinstance(tx, AccessListTransaction):
244+
if tx.y_parity not in (U256(0), U256(1)):
245+
raise InvalidSignatureError("bad y_parity")
244246
public_key = secp256k1_recover(
245247
r, s, tx.y_parity, signing_hash_2930(tx)
246248
)
247249
elif isinstance(tx, FeeMarketTransaction):
250+
if tx.y_parity not in (U256(0), U256(1)):
251+
raise InvalidSignatureError("bad y_parity")
248252
public_key = secp256k1_recover(
249253
r, s, tx.y_parity, signing_hash_1559(tx)
250254
)

src/ethereum/shanghai/transactions.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,10 +248,14 @@ def recover_sender(chain_id: U64, tx: Transaction) -> Address:
248248
signing_hash_155(tx, chain_id),
249249
)
250250
elif isinstance(tx, AccessListTransaction):
251+
if tx.y_parity not in (U256(0), U256(1)):
252+
raise InvalidSignatureError("bad y_parity")
251253
public_key = secp256k1_recover(
252254
r, s, tx.y_parity, signing_hash_2930(tx)
253255
)
254256
elif isinstance(tx, FeeMarketTransaction):
257+
if tx.y_parity not in (U256(0), U256(1)):
258+
raise InvalidSignatureError("bad y_parity")
255259
public_key = secp256k1_recover(
256260
r, s, tx.y_parity, signing_hash_1559(tx)
257261
)

0 commit comments

Comments
 (0)