Skip to content

Commit 644fdc2

Browse files
vvillait88claude
andcommitted
fix(identity): align UCPPaymentHandler config emission with Node optional convention
Two cross-language parity fixes: 1. UCPPaymentHandler.to_dict() now omits the `config` key when empty. Node's `UCPPaymentHandler.config` is a TypeScript optional property and `buildUCPProfile` passes the array verbatim, so a Node caller writing `{ name: 'tempo' }` shipped a wire profile WITHOUT `config`. Python was force-emitting `config: {}` for that same input, producing different canonical bytes between SDKs for the same logical input. Explicit `config={}` is semantically identical to absent and follows the same omit rule. 2. Standalone int-boundary fixture script now uses build_ucp_profile(extras=...) instead of hand-building a profile dict with a top-level `extras` key. The orchestrator was already correct; the standalone version (used for one-off debug regen of a single fixture) was producing canonical bytes with a nested `extras` block while the orchestrator-produced fixture was flat. Mirrors how the data-driven-claims and typed-claims standalone scripts already work. Cross-lang fixture corpus regenerated; new tests cover the omit behavior. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent bd81dfe commit 644fdc2

13 files changed

Lines changed: 69 additions & 62 deletions

agentscore_commerce/identity/ucp.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -169,12 +169,17 @@ class UCPPaymentHandler:
169169
config: dict[str, Any] = field(default_factory=dict)
170170

171171
def to_dict(self) -> dict[str, Any]:
172-
# Always emit `config` (even when empty) so a Python-built handler matches
173-
# the Node sibling byte-for-byte: TypeScript serializes
174-
# `{name: 'tempo', config: {}}` with `config` preserved, and the dataclass
175-
# default is `field(default_factory=dict)` so the field is always a dict.
176-
# Cross-language verify drifts otherwise on explicit `config={}` callers.
177-
return {"name": self.name, "config": self.config}
172+
# Match Node SDK: omit `config` when empty (TypeScript optional-property
173+
# convention). Node's `UCPPaymentHandler.config` is `Record<string, unknown>?`
174+
# and `buildUCPProfile` passes the array verbatim, so a Node caller writing
175+
# `{ name: 'tempo' }` ships a wire profile WITHOUT the `config` key. Python
176+
# must do the same or the same logical input produces different canonical
177+
# bytes between SDKs. Callers who explicitly pass `config={}` get the same
178+
# treatment because an empty dict is semantically identical to "absent".
179+
out: dict[str, Any] = {"name": self.name}
180+
if self.config:
181+
out["config"] = self.config
182+
return out
178183

179184

180185
@dataclass

scripts/generate_int_boundary_fixture.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@
1212
import json
1313
from pathlib import Path
1414

15+
from agentscore_commerce.identity import (
16+
UCPService,
17+
UCPSigningKey,
18+
build_ucp_profile,
19+
)
1520
from agentscore_commerce.identity.ucp_jwks import (
1621
build_jwks_response,
1722
generate_ucp_signing_key,
@@ -26,24 +31,21 @@
2631
def main() -> None:
2732
key = generate_ucp_signing_key(kid=KID)
2833

29-
profile = {
30-
"version": "2026-04-17",
31-
"spec": "https://ucp.dev/",
32-
"name": "Int Boundary Merchant",
33-
"services": [{"type": "rest", "url": "https://i.example.com"}],
34-
"capabilities": [],
35-
"payment_handlers": [],
36-
"signing_keys": [key.public_jwk],
37-
"extras": {
34+
profile = build_ucp_profile(
35+
name="Int Boundary Merchant",
36+
services=[UCPService(type="rest", url="https://i.example.com")],
37+
payment_handlers=[],
38+
signing_keys=[UCPSigningKey.from_jwk(key.public_jwk)],
39+
extras={
3840
"max_safe_int": 9007199254740991,
3941
"min_safe_int": -9007199254740991,
4042
"small_int": 42,
4143
"neg_small_int": -42,
4244
"zero": 0,
4345
},
44-
}
46+
)
4547

46-
signed = sign_ucp_profile(profile, signing_key=key.private_key, kid=KID)
48+
signed = sign_ucp_profile(profile.to_dict(), signing_key=key.private_key, kid=KID)
4749

4850
fixture = {
4951
"profile": signed,

tests/fixtures/cross-lang/py-capability.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,17 @@
3232
"alg": "EdDSA",
3333
"use": "sig",
3434
"crv": "Ed25519",
35-
"x": "TMBp_r4E06Pdu0h-53QW7ncMNSYwPXLem6kMjY-3We8"
35+
"x": "mrV_IopnC9X6Y7B7sVWRa0hauxmLjiGMtmBpcoD9Nrg"
3636
}
3737
],
3838
"name": "Capability Merchant",
39-
"signature": "eyJhbGciOiJFZERTQSIsImtpZCI6InB5LWNhcGFiaWxpdHktRWREU0EiLCJ0eXAiOiJhZ2VudHNjb3JlLXByb2ZpbGUrandzIn0.eyJjYXBhYmlsaXRpZXMiOlt7Imt5Y19yZXF1aXJlZCI6dHJ1ZSwibmFtZSI6InNoLmFnZW50c2NvcmUuaWRlbnRpdHkiLCJzY2hlbWEiOiJodHRwczovL2FnZW50c2NvcmUuc2gvc2NoZW1hcy91Y3Avc2gtYWdlbnRzY29yZS1pZGVudGl0eS12MS5qc29uIiwidmVyc2lvbiI6IjEifV0sIm5hbWUiOiJDYXBhYmlsaXR5IE1lcmNoYW50IiwicGF5bWVudF9oYW5kbGVycyI6W3siY29uZmlnIjp7ImNoYWluX2lkIjo0MjE3LCJyYWlsIjoidGVtcG8tbWFpbm5ldCJ9LCJuYW1lIjoidGVtcG8ifV0sInNlcnZpY2VzIjpbeyJ0eXBlIjoicmVzdCIsInVybCI6Imh0dHBzOi8vYy5leGFtcGxlLmNvbSJ9XSwic2lnbmluZ19rZXlzIjpbeyJhbGciOiJFZERTQSIsImNydiI6IkVkMjU1MTkiLCJraWQiOiJweS1jYXBhYmlsaXR5LUVkRFNBIiwia3R5IjoiT0tQIiwidXNlIjoic2lnIiwieCI6IlRNQnBfcjRFMDZQZHUwaC01M1FXN25jTU5TWXdQWExlbTZrTWpZLTNXZTgifV0sInNwZWMiOiJodHRwczovL3VjcC5kZXYvIiwidmVyc2lvbiI6IjIwMjYtMDQtMTcifQ.tFu690kDz0E2Iy45Y0MgpUS3G2ocaBgeWFUwwPQSjsXXroi1T4GFZROrA_6MntaKb07CfjLgWoMh9z8Cl3ecBA"
39+
"signature": "eyJhbGciOiJFZERTQSIsImtpZCI6InB5LWNhcGFiaWxpdHktRWREU0EiLCJ0eXAiOiJhZ2VudHNjb3JlLXByb2ZpbGUrandzIn0.eyJjYXBhYmlsaXRpZXMiOlt7Imt5Y19yZXF1aXJlZCI6dHJ1ZSwibmFtZSI6InNoLmFnZW50c2NvcmUuaWRlbnRpdHkiLCJzY2hlbWEiOiJodHRwczovL2FnZW50c2NvcmUuc2gvc2NoZW1hcy91Y3Avc2gtYWdlbnRzY29yZS1pZGVudGl0eS12MS5qc29uIiwidmVyc2lvbiI6IjEifV0sIm5hbWUiOiJDYXBhYmlsaXR5IE1lcmNoYW50IiwicGF5bWVudF9oYW5kbGVycyI6W3siY29uZmlnIjp7ImNoYWluX2lkIjo0MjE3LCJyYWlsIjoidGVtcG8tbWFpbm5ldCJ9LCJuYW1lIjoidGVtcG8ifV0sInNlcnZpY2VzIjpbeyJ0eXBlIjoicmVzdCIsInVybCI6Imh0dHBzOi8vYy5leGFtcGxlLmNvbSJ9XSwic2lnbmluZ19rZXlzIjpbeyJhbGciOiJFZERTQSIsImNydiI6IkVkMjU1MTkiLCJraWQiOiJweS1jYXBhYmlsaXR5LUVkRFNBIiwia3R5IjoiT0tQIiwidXNlIjoic2lnIiwieCI6Im1yVl9Jb3BuQzlYNlk3QjdzVldSYTBoYXV4bUxqaUdNdG1CcGNvRDlOcmcifV0sInNwZWMiOiJodHRwczovL3VjcC5kZXYvIiwidmVyc2lvbiI6IjIwMjYtMDQtMTcifQ.P38VWqceyAly7lFhP7vYluyI8PK0_9GbPX9AccaODPtxanuloyOaajrV_O_efVyw8PUsFyyo5AkIDWrApTvIDg"
4040
},
4141
"jwks": {
4242
"keys": [
4343
{
4444
"crv": "Ed25519",
45-
"x": "TMBp_r4E06Pdu0h-53QW7ncMNSYwPXLem6kMjY-3We8",
45+
"x": "mrV_IopnC9X6Y7B7sVWRa0hauxmLjiGMtmBpcoD9Nrg",
4646
"kid": "py-capability-EdDSA",
4747
"alg": "EdDSA",
4848
"use": "sig",

tests/fixtures/cross-lang/py-data-driven-claims.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,17 @@
3333
"alg": "EdDSA",
3434
"use": "sig",
3535
"crv": "Ed25519",
36-
"x": "DAaVG_-gxUtcNYUOizP4YJNRwhHhnDWn-stsD7jPO4w"
36+
"x": "NwAu8PpEQhrEI9Nqdm8GUCMVHpReceNUlBHxZozOf3g"
3737
}
3838
],
3939
"name": "Data Driven Claims Merchant",
40-
"signature": "eyJhbGciOiJFZERTQSIsImtpZCI6InB5LWRhdGEtZHJpdmVuLWNsYWltcy1FZERTQSIsInR5cCI6ImFnZW50c2NvcmUtcHJvZmlsZStqd3MifQ.eyJjYXBhYmlsaXRpZXMiOlt7ImNsYWltcyI6eyJhZ2VfYnJhY2tldCI6InVua25vd24iLCJpc3N1ZXIiOiJodHRwczovL2FnZW50c2NvcmUuc2giLCJqdXJpc2RpY3Rpb24iOiIiLCJreWNfbGV2ZWwiOiJub25lIiwib3BlcmF0b3JfaWQiOiJvcF9kYXRhX2RyaXZlbiIsInNhbmN0aW9uc19jbGVhciI6ZmFsc2UsInZlcmlmaWVkX2F0IjpudWxsLCJ2ZXJpZnlfdXJsIjoiaHR0cHM6Ly9hZ2VudHNjb3JlLnNoL3ZlcmlmeS9vcF9kYXRhX2RyaXZlbiJ9LCJuYW1lIjoic2guYWdlbnRzY29yZS5pZGVudGl0eSIsInNjaGVtYSI6Imh0dHBzOi8vYWdlbnRzY29yZS5zaC9zY2hlbWFzL3VjcC9zaC1hZ2VudHNjb3JlLWlkZW50aXR5LXYxLmpzb24iLCJ2ZXJzaW9uIjoiMSJ9XSwibmFtZSI6IkRhdGEgRHJpdmVuIENsYWltcyBNZXJjaGFudCIsInBheW1lbnRfaGFuZGxlcnMiOltdLCJzZXJ2aWNlcyI6W3sidHlwZSI6InJlc3QiLCJ1cmwiOiJodHRwczovL2QuZXhhbXBsZS5jb20ifV0sInNpZ25pbmdfa2V5cyI6W3siYWxnIjoiRWREU0EiLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoicHktZGF0YS1kcml2ZW4tY2xhaW1zLUVkRFNBIiwia3R5IjoiT0tQIiwidXNlIjoic2lnIiwieCI6IkRBYVZHXy1neFV0Y05ZVU9pelA0WUpOUndoSGhuRFduLXN0c0Q3alBPNHcifV0sInNwZWMiOiJodHRwczovL3VjcC5kZXYvIiwidmVyc2lvbiI6IjIwMjYtMDQtMTcifQ.Bo9sH1eHbuXfl6XMp43smJDrGd6KFFoEMejcmgAYTScOiBzgRk9bs7s7YgNSjM4QXnZ-2YXtrI58d1n7tu-4BA"
40+
"signature": "eyJhbGciOiJFZERTQSIsImtpZCI6InB5LWRhdGEtZHJpdmVuLWNsYWltcy1FZERTQSIsInR5cCI6ImFnZW50c2NvcmUtcHJvZmlsZStqd3MifQ.eyJjYXBhYmlsaXRpZXMiOlt7ImNsYWltcyI6eyJhZ2VfYnJhY2tldCI6InVua25vd24iLCJpc3N1ZXIiOiJodHRwczovL2FnZW50c2NvcmUuc2giLCJqdXJpc2RpY3Rpb24iOiIiLCJreWNfbGV2ZWwiOiJub25lIiwib3BlcmF0b3JfaWQiOiJvcF9kYXRhX2RyaXZlbiIsInNhbmN0aW9uc19jbGVhciI6ZmFsc2UsInZlcmlmaWVkX2F0IjpudWxsLCJ2ZXJpZnlfdXJsIjoiaHR0cHM6Ly9hZ2VudHNjb3JlLnNoL3ZlcmlmeS9vcF9kYXRhX2RyaXZlbiJ9LCJuYW1lIjoic2guYWdlbnRzY29yZS5pZGVudGl0eSIsInNjaGVtYSI6Imh0dHBzOi8vYWdlbnRzY29yZS5zaC9zY2hlbWFzL3VjcC9zaC1hZ2VudHNjb3JlLWlkZW50aXR5LXYxLmpzb24iLCJ2ZXJzaW9uIjoiMSJ9XSwibmFtZSI6IkRhdGEgRHJpdmVuIENsYWltcyBNZXJjaGFudCIsInBheW1lbnRfaGFuZGxlcnMiOltdLCJzZXJ2aWNlcyI6W3sidHlwZSI6InJlc3QiLCJ1cmwiOiJodHRwczovL2QuZXhhbXBsZS5jb20ifV0sInNpZ25pbmdfa2V5cyI6W3siYWxnIjoiRWREU0EiLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoicHktZGF0YS1kcml2ZW4tY2xhaW1zLUVkRFNBIiwia3R5IjoiT0tQIiwidXNlIjoic2lnIiwieCI6Ik53QXU4UHBFUWhyRUk5TnFkbThHVUNNVkhwUmVjZU5VbEJIeFpvek9mM2cifV0sInNwZWMiOiJodHRwczovL3VjcC5kZXYvIiwidmVyc2lvbiI6IjIwMjYtMDQtMTcifQ.zo-SMwEWYEGiqerQZJ9m8eAZpdzN-hFfSLAhx8R8JTlCArnfaxdmH6XjLj_glztXUhy4LHs740ikLAhNDOEyDw"
4141
},
4242
"jwks": {
4343
"keys": [
4444
{
4545
"crv": "Ed25519",
46-
"x": "DAaVG_-gxUtcNYUOizP4YJNRwhHhnDWn-stsD7jPO4w",
46+
"x": "NwAu8PpEQhrEI9Nqdm8GUCMVHpReceNUlBHxZozOf3g",
4747
"kid": "py-data-driven-claims-EdDSA",
4848
"alg": "EdDSA",
4949
"use": "sig",

tests/fixtures/cross-lang/py-emoji-keys.json

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@
1111
"capabilities": [],
1212
"payment_handlers": [
1313
{
14-
"name": "tempo",
15-
"config": {}
14+
"name": "tempo"
1615
}
1716
],
1817
"signing_keys": [
@@ -22,21 +21,21 @@
2221
"alg": "EdDSA",
2322
"use": "sig",
2423
"crv": "Ed25519",
25-
"x": "rI2JPvoFJRRLd3EbGgoiKut82R3us1TTAIpwhp97BSY"
24+
"x": "kf2p5k_gqFL8d38h9gdlAtdvPnYIPITUcLLjzGrwgjo"
2625
}
2726
],
2827
"name": "Emoji Keys Merchant",
2928
"a": 1,
3029
"豈": 2,
3130
"": 3,
3231
"🍷": 4,
33-
"signature": "eyJhbGciOiJFZERTQSIsImtpZCI6InB5LWVtb2ppLWtleXMtRWREU0EiLCJ0eXAiOiJhZ2VudHNjb3JlLXByb2ZpbGUrandzIn0.eyJhIjoxLCJjYXBhYmlsaXRpZXMiOltdLCJuYW1lIjoiRW1vamkgS2V5cyBNZXJjaGFudCIsInBheW1lbnRfaGFuZGxlcnMiOlt7ImNvbmZpZyI6e30sIm5hbWUiOiJ0ZW1wbyJ9XSwic2VydmljZXMiOlt7InR5cGUiOiJyZXN0IiwidXJsIjoiaHR0cHM6Ly9lbW9qaS5leGFtcGxlLmNvbSJ9XSwic2lnbmluZ19rZXlzIjpbeyJhbGciOiJFZERTQSIsImNydiI6IkVkMjU1MTkiLCJraWQiOiJweS1lbW9qaS1rZXlzLUVkRFNBIiwia3R5IjoiT0tQIiwidXNlIjoic2lnIiwieCI6InJJMkpQdm9GSlJSTGQzRWJHZ29pS3V0ODJSM3VzMVRUQUlwd2hwOTdCU1kifV0sInNwZWMiOiJodHRwczovL3VjcC5kZXYvIiwidmVyc2lvbiI6IjIwMjYtMDQtMTciLCLosYgiOjIsIu6AgCI6Mywi8J-NtyI6NH0.1zOHof4cekmU2iphy-mp5DQHS66klN45KOrJ87bKsQYnO6_o2cL6iCEH6GOuQ9qBFTBUfzOWapK1hCAIX3vOAQ"
32+
"signature": "eyJhbGciOiJFZERTQSIsImtpZCI6InB5LWVtb2ppLWtleXMtRWREU0EiLCJ0eXAiOiJhZ2VudHNjb3JlLXByb2ZpbGUrandzIn0.eyJhIjoxLCJjYXBhYmlsaXRpZXMiOltdLCJuYW1lIjoiRW1vamkgS2V5cyBNZXJjaGFudCIsInBheW1lbnRfaGFuZGxlcnMiOlt7Im5hbWUiOiJ0ZW1wbyJ9XSwic2VydmljZXMiOlt7InR5cGUiOiJyZXN0IiwidXJsIjoiaHR0cHM6Ly9lbW9qaS5leGFtcGxlLmNvbSJ9XSwic2lnbmluZ19rZXlzIjpbeyJhbGciOiJFZERTQSIsImNydiI6IkVkMjU1MTkiLCJraWQiOiJweS1lbW9qaS1rZXlzLUVkRFNBIiwia3R5IjoiT0tQIiwidXNlIjoic2lnIiwieCI6ImtmMnA1a19ncUZMOGQzOGg5Z2RsQXRkdlBuWUlQSVRVY0xManpHcndnam8ifV0sInNwZWMiOiJodHRwczovL3VjcC5kZXYvIiwidmVyc2lvbiI6IjIwMjYtMDQtMTciLCLosYgiOjIsIu6AgCI6Mywi8J-NtyI6NH0.-Gzvmm1BCE8IvcvM6D9Th7wlTl0bHn3hfdEwu9KaHRLdVjdmlWfFLkTnls6r1-tQQK_NGbNYDs7YMmE_IEHiCQ"
3433
},
3534
"jwks": {
3635
"keys": [
3736
{
3837
"crv": "Ed25519",
39-
"x": "rI2JPvoFJRRLd3EbGgoiKut82R3us1TTAIpwhp97BSY",
38+
"x": "kf2p5k_gqFL8d38h9gdlAtdvPnYIPITUcLLjzGrwgjo",
4039
"kid": "py-emoji-keys-EdDSA",
4140
"alg": "EdDSA",
4241
"use": "sig",

tests/fixtures/cross-lang/py-es256-rails.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,19 +37,19 @@
3737
"alg": "ES256",
3838
"use": "sig",
3939
"crv": "P-256",
40-
"x": "_2HJ2FjbKQFI-uVpxIY8ZIS3htpNb-92IGfIY8kpQhk",
41-
"y": "0KlKsjssFxnAPoozOr2CvYXbuoXih_IzMv-wHQCsBXA"
40+
"x": "2Ghew5w2FeQeIYwRUBpI3sWQGhzI1SEBiqMhQhhuNZo",
41+
"y": "6LmrMRZkHKGADmavYFDDSYn2PJID4vY-D6XNXwQPE3E"
4242
}
4343
],
4444
"name": "ES256 Merchant",
45-
"signature": "eyJhbGciOiJFUzI1NiIsImtpZCI6InB5LWVzMjU2LXJhaWxzLUVTMjU2IiwidHlwIjoiYWdlbnRzY29yZS1wcm9maWxlK2p3cyJ9.eyJjYXBhYmlsaXRpZXMiOltdLCJuYW1lIjoiRVMyNTYgTWVyY2hhbnQiLCJwYXltZW50X2hhbmRsZXJzIjpbeyJjb25maWciOnsiY2hhaW5faWQiOjQyMTcsInJhaWwiOiJ0ZW1wby1tYWlubmV0In0sIm5hbWUiOiJ0ZW1wbyJ9LHsiY29uZmlnIjp7Im5ldHdvcmtzIjpbImJhc2UtODQ1MyJdfSwibmFtZSI6Ing0MDIifV0sInNlcnZpY2VzIjpbeyJ0eXBlIjoicmVzdCIsInVybCI6Imh0dHBzOi8vYS5leGFtcGxlLmNvbSJ9LHsidHlwZSI6ImEyYSIsInVybCI6Imh0dHBzOi8vYS5leGFtcGxlLmNvbS9hZ2VudC1jYXJkLmpzb24ifV0sInNpZ25pbmdfa2V5cyI6W3siYWxnIjoiRVMyNTYiLCJjcnYiOiJQLTI1NiIsImtpZCI6InB5LWVzMjU2LXJhaWxzLUVTMjU2Iiwia3R5IjoiRUMiLCJ1c2UiOiJzaWciLCJ4IjoiXzJISjJGamJLUUZJLXVWcHhJWThaSVMzaHRwTmItOTJJR2ZJWThrcFFoayIsInkiOiIwS2xLc2pzc0Z4bkFQb296T3IyQ3ZZWGJ1b1hpaF9Jek12LXdIUUNzQlhBIn1dLCJzcGVjIjoiaHR0cHM6Ly91Y3AuZGV2LyIsInZlcnNpb24iOiIyMDI2LTA0LTE3In0.MmqXHAzDEAPjH6wmOvwDq-yyq-0TCyMXVDwZlgryCN0O2E1sDS4jVeOb69F05uWdiPrLBP-HpJGTxruvHJre-g"
45+
"signature": "eyJhbGciOiJFUzI1NiIsImtpZCI6InB5LWVzMjU2LXJhaWxzLUVTMjU2IiwidHlwIjoiYWdlbnRzY29yZS1wcm9maWxlK2p3cyJ9.eyJjYXBhYmlsaXRpZXMiOltdLCJuYW1lIjoiRVMyNTYgTWVyY2hhbnQiLCJwYXltZW50X2hhbmRsZXJzIjpbeyJjb25maWciOnsiY2hhaW5faWQiOjQyMTcsInJhaWwiOiJ0ZW1wby1tYWlubmV0In0sIm5hbWUiOiJ0ZW1wbyJ9LHsiY29uZmlnIjp7Im5ldHdvcmtzIjpbImJhc2UtODQ1MyJdfSwibmFtZSI6Ing0MDIifV0sInNlcnZpY2VzIjpbeyJ0eXBlIjoicmVzdCIsInVybCI6Imh0dHBzOi8vYS5leGFtcGxlLmNvbSJ9LHsidHlwZSI6ImEyYSIsInVybCI6Imh0dHBzOi8vYS5leGFtcGxlLmNvbS9hZ2VudC1jYXJkLmpzb24ifV0sInNpZ25pbmdfa2V5cyI6W3siYWxnIjoiRVMyNTYiLCJjcnYiOiJQLTI1NiIsImtpZCI6InB5LWVzMjU2LXJhaWxzLUVTMjU2Iiwia3R5IjoiRUMiLCJ1c2UiOiJzaWciLCJ4IjoiMkdoZXc1dzJGZVFlSVl3UlVCcEkzc1dRR2h6STFTRUJpcU1oUWhodU5abyIsInkiOiI2TG1yTVJaa0hLR0FEbWF2WUZERFNZbjJQSklENHZZLUQ2WE5Yd1FQRTNFIn1dLCJzcGVjIjoiaHR0cHM6Ly91Y3AuZGV2LyIsInZlcnNpb24iOiIyMDI2LTA0LTE3In0.2lhHbFsTMxpK4Vrm8zE3wLPQna6syr7hiI0hSV7C-_gtGcf4UruXjeHaEq58jP5D1bdh-ftyFkZQwx0naBIASw"
4646
},
4747
"jwks": {
4848
"keys": [
4949
{
5050
"crv": "P-256",
51-
"x": "_2HJ2FjbKQFI-uVpxIY8ZIS3htpNb-92IGfIY8kpQhk",
52-
"y": "0KlKsjssFxnAPoozOr2CvYXbuoXih_IzMv-wHQCsBXA",
51+
"x": "2Ghew5w2FeQeIYwRUBpI3sWQGhzI1SEBiqMhQhhuNZo",
52+
"y": "6LmrMRZkHKGADmavYFDDSYn2PJID4vY-D6XNXwQPE3E",
5353
"kid": "py-es256-rails-ES256",
5454
"alg": "ES256",
5555
"use": "sig",

tests/fixtures/cross-lang/py-extras-int.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,17 @@
2525
"alg": "EdDSA",
2626
"use": "sig",
2727
"crv": "Ed25519",
28-
"x": "rSdbpACnhv_GVb7R01lDjmO7kUUvZR6GKBYR0AhW4go"
28+
"x": "hvngLt3fgbEzbSmgFeeUpV1t5M-SU6T0M5bicVxPDJU"
2929
}
3030
],
3131
"name": "Extras Merchant",
32-
"signature": "eyJhbGciOiJFZERTQSIsImtpZCI6InB5LWV4dHJhcy1pbnQtRWREU0EiLCJ0eXAiOiJhZ2VudHNjb3JlLXByb2ZpbGUrandzIn0.eyJjYXBhYmlsaXRpZXMiOltdLCJuYW1lIjoiRXh0cmFzIE1lcmNoYW50IiwicGF5bWVudF9oYW5kbGVycyI6W3siY29uZmlnIjp7ImNvdW50Ijo3LCJwcm9maWxlX2lkIjoiYWJjIn0sIm5hbWUiOiJzdHJpcGUifV0sInNlcnZpY2VzIjpbeyJ0eXBlIjoicmVzdCIsInVybCI6Imh0dHBzOi8vZS5leGFtcGxlLmNvbSJ9XSwic2lnbmluZ19rZXlzIjpbeyJhbGciOiJFZERTQSIsImNydiI6IkVkMjU1MTkiLCJraWQiOiJweS1leHRyYXMtaW50LUVkRFNBIiwia3R5IjoiT0tQIiwidXNlIjoic2lnIiwieCI6InJTZGJwQUNuaHZfR1ZiN1IwMWxEam1PN2tVVXZaUjZHS0JZUjBBaFc0Z28ifV0sInNwZWMiOiJodHRwczovL3VjcC5kZXYvIiwidmVyc2lvbiI6IjIwMjYtMDQtMTcifQ.SW6CJuYzFh5PJ_AQJ89iUINqhW7O1kZvDQo1zuhqtjtU-Gj48XI2pykZph04lBcBS8r4mVEvNrUzVxVi44hXCw"
32+
"signature": "eyJhbGciOiJFZERTQSIsImtpZCI6InB5LWV4dHJhcy1pbnQtRWREU0EiLCJ0eXAiOiJhZ2VudHNjb3JlLXByb2ZpbGUrandzIn0.eyJjYXBhYmlsaXRpZXMiOltdLCJuYW1lIjoiRXh0cmFzIE1lcmNoYW50IiwicGF5bWVudF9oYW5kbGVycyI6W3siY29uZmlnIjp7ImNvdW50Ijo3LCJwcm9maWxlX2lkIjoiYWJjIn0sIm5hbWUiOiJzdHJpcGUifV0sInNlcnZpY2VzIjpbeyJ0eXBlIjoicmVzdCIsInVybCI6Imh0dHBzOi8vZS5leGFtcGxlLmNvbSJ9XSwic2lnbmluZ19rZXlzIjpbeyJhbGciOiJFZERTQSIsImNydiI6IkVkMjU1MTkiLCJraWQiOiJweS1leHRyYXMtaW50LUVkRFNBIiwia3R5IjoiT0tQIiwidXNlIjoic2lnIiwieCI6Imh2bmdMdDNmZ2JFemJTbWdGZWVVcFYxdDVNLVNVNlQwTTViaWNWeFBESlUifV0sInNwZWMiOiJodHRwczovL3VjcC5kZXYvIiwidmVyc2lvbiI6IjIwMjYtMDQtMTcifQ.5rf3kusXgoEIqGzovksKlA9nYgszetmSefSRRycOLcRELqhVr88Di37CivlGravHNtXEXS_vheCEtb2uWXobAg"
3333
},
3434
"jwks": {
3535
"keys": [
3636
{
3737
"crv": "Ed25519",
38-
"x": "rSdbpACnhv_GVb7R01lDjmO7kUUvZR6GKBYR0AhW4go",
38+
"x": "hvngLt3fgbEzbSmgFeeUpV1t5M-SU6T0M5bicVxPDJU",
3939
"kid": "py-extras-int-EdDSA",
4040
"alg": "EdDSA",
4141
"use": "sig",

tests/fixtures/cross-lang/py-int-boundary.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
"alg": "EdDSA",
1818
"use": "sig",
1919
"crv": "Ed25519",
20-
"x": "2hWtYbSpkVrFTzo_rccrGWAYf_jrreq8wB1D_z_IZOc"
20+
"x": "3xm2hM4-PRbWmQhJ8fDZGIwBoTf1aVXJp11uSgbvDbs"
2121
}
2222
],
2323
"name": "Int Boundary Merchant",
@@ -26,13 +26,13 @@
2626
"small_int": 42,
2727
"neg_small_int": -42,
2828
"zero": 0,
29-
"signature": "eyJhbGciOiJFZERTQSIsImtpZCI6InB5LWludC1ib3VuZGFyeS1FZERTQSIsInR5cCI6ImFnZW50c2NvcmUtcHJvZmlsZStqd3MifQ.eyJjYXBhYmlsaXRpZXMiOltdLCJtYXhfc2FmZV9pbnQiOjkwMDcxOTkyNTQ3NDA5OTEsIm1pbl9zYWZlX2ludCI6LTkwMDcxOTkyNTQ3NDA5OTEsIm5hbWUiOiJJbnQgQm91bmRhcnkgTWVyY2hhbnQiLCJuZWdfc21hbGxfaW50IjotNDIsInBheW1lbnRfaGFuZGxlcnMiOltdLCJzZXJ2aWNlcyI6W3sidHlwZSI6InJlc3QiLCJ1cmwiOiJodHRwczovL2kuZXhhbXBsZS5jb20ifV0sInNpZ25pbmdfa2V5cyI6W3siYWxnIjoiRWREU0EiLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoicHktaW50LWJvdW5kYXJ5LUVkRFNBIiwia3R5IjoiT0tQIiwidXNlIjoic2lnIiwieCI6IjJoV3RZYlNwa1ZyRlR6b19yY2NyR1dBWWZfanJyZXE4d0IxRF96X0laT2MifV0sInNtYWxsX2ludCI6NDIsInNwZWMiOiJodHRwczovL3VjcC5kZXYvIiwidmVyc2lvbiI6IjIwMjYtMDQtMTciLCJ6ZXJvIjowfQ.1qtHiT04A_A0asQx3jJWeeNEfY9lQ6haBf6JDMoaOz3NmWLg70Yvad0wStR8wQcaDDqPgi7-mmMZMnu8XxvyCQ"
29+
"signature": "eyJhbGciOiJFZERTQSIsImtpZCI6InB5LWludC1ib3VuZGFyeS1FZERTQSIsInR5cCI6ImFnZW50c2NvcmUtcHJvZmlsZStqd3MifQ.eyJjYXBhYmlsaXRpZXMiOltdLCJtYXhfc2FmZV9pbnQiOjkwMDcxOTkyNTQ3NDA5OTEsIm1pbl9zYWZlX2ludCI6LTkwMDcxOTkyNTQ3NDA5OTEsIm5hbWUiOiJJbnQgQm91bmRhcnkgTWVyY2hhbnQiLCJuZWdfc21hbGxfaW50IjotNDIsInBheW1lbnRfaGFuZGxlcnMiOltdLCJzZXJ2aWNlcyI6W3sidHlwZSI6InJlc3QiLCJ1cmwiOiJodHRwczovL2kuZXhhbXBsZS5jb20ifV0sInNpZ25pbmdfa2V5cyI6W3siYWxnIjoiRWREU0EiLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoicHktaW50LWJvdW5kYXJ5LUVkRFNBIiwia3R5IjoiT0tQIiwidXNlIjoic2lnIiwieCI6IjN4bTJoTTQtUFJiV21RaEo4ZkRaR0l3Qm9UZjFhVlhKcDExdVNnYnZEYnMifV0sInNtYWxsX2ludCI6NDIsInNwZWMiOiJodHRwczovL3VjcC5kZXYvIiwidmVyc2lvbiI6IjIwMjYtMDQtMTciLCJ6ZXJvIjowfQ.853XGWyMf4YL7K0sGA_j0BYCjrX8cdHvzyHX5GSyEEYHL4ZMtSENQR3lw5LszLo2HwU6J93MNKA6d4qx0v1aAQ"
3030
},
3131
"jwks": {
3232
"keys": [
3333
{
3434
"crv": "Ed25519",
35-
"x": "2hWtYbSpkVrFTzo_rccrGWAYf_jrreq8wB1D_z_IZOc",
35+
"x": "3xm2hM4-PRbWmQhJ8fDZGIwBoTf1aVXJp11uSgbvDbs",
3636
"kid": "py-int-boundary-EdDSA",
3737
"alg": "EdDSA",
3838
"use": "sig",

tests/fixtures/cross-lang/py-minimal.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,17 @@
1717
"alg": "EdDSA",
1818
"use": "sig",
1919
"crv": "Ed25519",
20-
"x": "Jal9VgyjKMP3MguusxxOZJDOb6U7nToLMa7C3hCqu2o"
20+
"x": "_oUdVFWSZkqVC-uORY2G34I0xuVXJ78ywa3qYywtWc8"
2121
}
2222
],
2323
"name": "Minimal Merchant",
24-
"signature": "eyJhbGciOiJFZERTQSIsImtpZCI6InB5LW1pbmltYWwtRWREU0EiLCJ0eXAiOiJhZ2VudHNjb3JlLXByb2ZpbGUrandzIn0.eyJjYXBhYmlsaXRpZXMiOltdLCJuYW1lIjoiTWluaW1hbCBNZXJjaGFudCIsInBheW1lbnRfaGFuZGxlcnMiOltdLCJzZXJ2aWNlcyI6W3sidHlwZSI6InJlc3QiLCJ1cmwiOiJodHRwczovL20uZXhhbXBsZS5jb20ifV0sInNpZ25pbmdfa2V5cyI6W3siYWxnIjoiRWREU0EiLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoicHktbWluaW1hbC1FZERTQSIsImt0eSI6Ik9LUCIsInVzZSI6InNpZyIsIngiOiJKYWw5Vmd5aktNUDNNZ3V1c3h4T1pKRE9iNlU3blRvTE1hN0MzaENxdTJvIn1dLCJzcGVjIjoiaHR0cHM6Ly91Y3AuZGV2LyIsInZlcnNpb24iOiIyMDI2LTA0LTE3In0.isXdp4CcyRr9lh9yHQwjAH-MDgj6ZqUfJjLr3rj6KTBaE_nRIjR_HO4hM44uMnh8RUYm5-JCNVh8m1-lsLGxDQ"
24+
"signature": "eyJhbGciOiJFZERTQSIsImtpZCI6InB5LW1pbmltYWwtRWREU0EiLCJ0eXAiOiJhZ2VudHNjb3JlLXByb2ZpbGUrandzIn0.eyJjYXBhYmlsaXRpZXMiOltdLCJuYW1lIjoiTWluaW1hbCBNZXJjaGFudCIsInBheW1lbnRfaGFuZGxlcnMiOltdLCJzZXJ2aWNlcyI6W3sidHlwZSI6InJlc3QiLCJ1cmwiOiJodHRwczovL20uZXhhbXBsZS5jb20ifV0sInNpZ25pbmdfa2V5cyI6W3siYWxnIjoiRWREU0EiLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoicHktbWluaW1hbC1FZERTQSIsImt0eSI6Ik9LUCIsInVzZSI6InNpZyIsIngiOiJfb1VkVkZXU1prcVZDLXVPUlkyRzM0STB4dVZYSjc4eXdhM3FZeXd0V2M4In1dLCJzcGVjIjoiaHR0cHM6Ly91Y3AuZGV2LyIsInZlcnNpb24iOiIyMDI2LTA0LTE3In0.8hLu64spf73Z1aDO95MEqkpsZ2uFP0rHzIWFsOkZkrNq81xcAEcwGYTU1MCtoh7DCfdsb6jXrhvmrFxdhGxPAw"
2525
},
2626
"jwks": {
2727
"keys": [
2828
{
2929
"crv": "Ed25519",
30-
"x": "Jal9VgyjKMP3MguusxxOZJDOb6U7nToLMa7C3hCqu2o",
30+
"x": "_oUdVFWSZkqVC-uORY2G34I0xuVXJ78ywa3qYywtWc8",
3131
"kid": "py-minimal-EdDSA",
3232
"alg": "EdDSA",
3333
"use": "sig",

0 commit comments

Comments
 (0)