Skip to content

Commit 2476ce2

Browse files
committed
Bug 1990581 [wpt PR 55048] - Update JWT contents for DBSC, a=testonly
Automatic update from web-platform-tests Update JWT contents for DBSC This CL splits the header and payload functions in session_binding_utils.h in order to allow for three different JWT schemas for DBSC: - OTFeedback disabled (both registration and refresh) - OTFeedback enabled, registration - OTFeedback enabled, refresh We can clean up the Legacy* functions when removing the OTFeedback flag. Fixed: 442623885 Change-Id: If6700157859aaa669d4fd7a7775687654b6d025a Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6977530 Commit-Queue: Daniel Rubery <druberychromium.org> Reviewed-by: thefrog <thefrogchromium.org> Cr-Commit-Position: refs/heads/main{#1520715} -- wpt-commits: 5ca066a68da1ca0bccbc955d2725d922bb699405 wpt-pr: 55048 UltraBlame original commit: 7bc605a49417ce338e2717352bf664792fe9c1e3
1 parent 92eee86 commit 2476ce2

File tree

3 files changed

+26
-5
lines changed

3 files changed

+26
-5
lines changed

testing/web-platform/tests/device-bound-session-credentials/jwt_helper.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def decode_jwt(token, key=None):
2222

2323

2424
if key == None:
25-
key = decoded_payload.get('key')
25+
key = decoded_header.get('jwk')
2626
public_key = serialization.load_pem_public_key(jwk_to_pem(key))
2727

2828
verify_rs256_signature(header, payload, signature, public_key)
@@ -74,3 +74,27 @@ def decode_base64(encoded_data):
7474

7575
def decode_base64_json(encoded_data):
7676
return json.loads(decode_base64(encoded_data))
77+
78+
def thumbprint_for_jwk(jwk):
79+
filtered_jwk = None
80+
if jwk['kty'] == 'RSA':
81+
filtered_jwk = dict()
82+
filtered_jwk['kty'] = jwk['kty']
83+
filtered_jwk['n'] = jwk['n']
84+
filtered_jwk['e'] = jwk['e']
85+
elif jwk['kty'] == 'EC':
86+
filtered_jwk = dict()
87+
filtered_jwk['kty'] = jwk['kty']
88+
filtered_jwk['crv'] = jwk['crv']
89+
filtered_jwk['x'] = jwk['x']
90+
filtered_jwk['y'] = jwk['y']
91+
else:
92+
return None
93+
94+
serialized_jwk = json.dumps(filtered_jwk, sort_keys=True, separators=(',',':'))
95+
96+
digest = hashes.Hash(hashes.SHA256())
97+
digest.update(serialized_jwk.encode("utf-8"))
98+
99+
thumbprint_base64 = base64.b64encode(digest.finalize(), altchars=b"-_").rstrip(b"=")
100+
return thumbprint_base64.decode('ascii')

testing/web-platform/tests/device-bound-session-credentials/refresh_session.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,4 @@ def main(request, response):
4141
if not verified or jwt_payload.get("jti") != challenge:
4242
return (400, response.headers, "")
4343

44-
if jwt_payload.get("sub") != session_id_header:
45-
return (400, response.headers, "")
46-
4744
return test_session_manager.get_session_instructions_response(session_id, request)

testing/web-platform/tests/device-bound-session-credentials/start_session.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ def main(request, response):
1111

1212
jwt_header, jwt_payload, verified = jwt_helper.decode_jwt(request.headers.get("Secure-Session-Response").decode('utf-8'))
1313
session_id = test_session_manager.create_new_session()
14-
test_session_manager.set_session_key(session_id, jwt_payload.get('key'))
14+
test_session_manager.set_session_key(session_id, jwt_header.get('jwk'))
1515

1616
if not verified or jwt_payload.get("jti") != "login_challenge_value":
1717
return (400, response.headers, "")

0 commit comments

Comments
 (0)