|
5 | 5 |
|
6 | 6 | from pyeudiw.tools.utils import exp_from_now, iat_now |
7 | 7 | from pyeudiw.tests.x509.test_x509 import gen_chain |
| 8 | +from ssl import DER_cert_to_PEM_cert |
8 | 9 |
|
9 | 10 | from pyeudiw.tests.federation.base import ta_jwk |
| 11 | +from cryptography.hazmat.primitives.asymmetric import rsa |
10 | 12 |
|
11 | 13 | BASE_URL = "https://example.com" |
12 | 14 | AUTHZ_PAGE = "example.com" |
13 | 15 | AUTH_ENDPOINT = "https://example.com/auth" |
14 | 16 | CLIENT_ID = "client_id" |
15 | 17 |
|
| 18 | + |
| 19 | +def base64url_to_int(val): |
| 20 | + import base64 |
| 21 | + import binascii |
| 22 | + return int.from_bytes(base64.urlsafe_b64decode(val + '=='), 'big') |
| 23 | + |
| 24 | +jwk = { |
| 25 | + "kty": "RSA", |
| 26 | + "use": "sig", |
| 27 | + "alg": "RS256", |
| 28 | + "kid": "m00NPAelNBnG_wK2R5EpI_k-GWCHEUySamQYubgFjCg", |
| 29 | + "d": "nMsnqz0lPHNGBgUqyuJ5nXQ0jh-mzs6d2xOY_QhpkRW1kEbexRJDdVV3fqMxj_s0MiF8mn-s8ea3e8cbNDgIy000Wvx05y1rMkB6KaZX2ZL5jwU7i_xP6NlLh8itikqJz7kKQSILgibQFFQDcScpEk8gUKa6fmSJQVwTII6GoJCdiJflv-FI2OQ_TCBQEEVVLpeUiVSP0n3OMUKGBlbaHOQkArUpla_ke_mtdfIrl7uB74Rxrin68KtFHkGDGdJPs-PPO1yJ2paFZI9QR_ettZ22v45c-qIgmCjsEnITDMaO9724PU_umlWsWe36Y9RAAzofKsjKqvA1OIzU03ob9Q", |
| 30 | + "n": "sP6jt1XwJE0JDKxy4B7r3Jdb8W6bSRoVunyjWMgl5IafqFwHsJlYgCAWPeTrAL-iyjdnWC1csHuTqWjdndDL-oqEarrqoDAycVkfFTUTD81_wVhWUzAwxhQHiT7PTUIsV7m9VGlfC_kdCpQl5CcK1yx2nQ1KbqWOV1_5WnMgnN_EpNmztkZDnJmKedVduOb2dKWwnLS3fcGvUxXc87DjAzC2vfgQSoQfXAZbwItyS6OinFiUnBxRvt9ZY2IapjI1-wwDKKeRrqPC-fV2oWTrMqoYAvIDnf9AjKHAbIw7q301-7-eaUMF1hVtAz1XeXvMp0wK8_uSo9Vgv1vHhBpOwQ", |
| 31 | + "e": "AQAB", |
| 32 | + "p": "0ViKTSyZdLtvbLBpTvVAXTdrhTwGXuh16PadQMAVmkoxOPiExRB5uLiy2ADaVKSglia5aQBUp9v0ygEEOmkiUtn5A26D9ui0dkPR0hx4fwqCOOmA2ZyDUNFJ_qrGSwT1SxGQDHeRteymJG7uN9QekS3XiBDgFJxwl-vVpoSTBJM", |
| 33 | + "q": "2HBr9qhVd3zZUQuNb7ro06ErLl4fhL-DiKsNqXB772tDNTJYeog1nOWgS22tcv5WHrSoYF1x5Q74YVoA6yVj6DwFx2Hc2pYZazzhYMRC3NAWkTEdroy9IjtpzKIpQIqw-sq8CbWVBXzho8uQBCdg8h73z11_HPyXT9BqQCmxJ9s", |
| 34 | + "dp": "WsQ32rQuqNUnv4lRb4GYcZI41SCsZnQFw4dBsTRXaXknlFr0PfkhvXyfVlYwU6i5U8DgfO0-xzTwErGUIrs4vZFyjRFauDA3JlvLWn0rpXFp-sELM87PhLfpjDiBFz_EFtM7kJw7GhTMCFnsgVpAEpQ8sesXLPiTPNts2_D5SW8", |
| 35 | + "dq": "jWlucLrtFGOjDRuyLjT9l__uWZ4vk6kZRHsWMwWGRBhd0ezx-CT0em1hPMcNE1vvYqKAfG2xU4pjaB_JB9nnG73TvMBI7xwwwWsGihXQ5bqjc_uWPAxCKpKM_qFYuI2lMkaxctqL4gkE1-LRVpVv9uGa4YZh3ct_BSvTr9ZNpA8", |
| 36 | + "qi": "kn9Etj4a2erCUmoZUQalPjHxCRYm5Q3wAkFIRGSQADA51mkwQHyTYqXbHcmXn2ZgXBVI6XDWJB51Me-NCPfITTlusqxvATF7Q-QJtdK_FbgNtcVRNc1FMq_M7VBHA1i9wJR7T4t57aywfXPmlsA5TToTDRe-ybdw0C3ys4KQATs" |
| 37 | +} |
| 38 | + |
| 39 | +# Extract components from JWK |
| 40 | +_n = base64url_to_int(jwk['n']) |
| 41 | +_e = base64url_to_int(jwk['e']) |
| 42 | +_d = base64url_to_int(jwk['d']) |
| 43 | +_p = base64url_to_int(jwk['p']) |
| 44 | +_q = base64url_to_int(jwk['q']) |
| 45 | +_dp = base64url_to_int(jwk['dp']) |
| 46 | +_dq = base64url_to_int(jwk['dq']) |
| 47 | +_qi = base64url_to_int(jwk['qi']) |
| 48 | + |
| 49 | +# Create RSA private key |
| 50 | +private_key = rsa.RSAPrivateNumbers( |
| 51 | + p=_p, |
| 52 | + q=_q, |
| 53 | + d=_d, |
| 54 | + dmp1=_dp, |
| 55 | + dmq1=_dq, |
| 56 | + iqmp=_qi, |
| 57 | + public_numbers=rsa.RSAPublicNumbers(e=_e, n=_n) |
| 58 | +).private_key() |
| 59 | + |
| 60 | +DEFAULT_X509_CHAIN = gen_chain(leaf_private_key=private_key) |
| 61 | +DEFAULT_X509_LEAF_JWK = jwk |
| 62 | + |
16 | 63 | httpc_params = { |
17 | 64 | "connection": {"ssl": True}, |
18 | 65 | "session": {"timeout": 1}, |
|
267 | 314 | "relying_party_certificate_chains_by_ca":{ |
268 | 315 | "ca.example.com": gen_chain(leaf_cn="example.com"), |
269 | 316 | }, |
| 317 | + "certificate_authorities": { |
| 318 | + "ca.example.com": DER_cert_to_PEM_cert(DEFAULT_X509_CHAIN[-1]), |
| 319 | + "https://credential-issuer.example.org": "-----BEGIN CERTIFICATE-----\nMIIB/jCCAaSgAwIBAgIUUMBi34bUh6gnoMbxypdmBk/JeUMwCgYIKoZIzj0EAwIw\nZDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNh\nbiBGcmFuY2lzY28xEzARBgNVBAoMCk15IENvbXBhbnkxEzARBgNVBAMMCm15c2l0\nZS5jb20wHhcNMjUwMzI1MTQyMTE0WhcNMjUwNDA0MTQyMTE0WjBkMQswCQYDVQQG\nEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNj\nbzETMBEGA1UECgwKTXkgQ29tcGFueTETMBEGA1UEAwwKbXlzaXRlLmNvbTBZMBMG\nByqGSM49AgEGCCqGSM49AwEHA0IABEXbtJ1tl7OFv1FF4q3BSy7kFlDUxvdQr03c\ncT72OoZw/BR+q735qhltuHSuDeAt5O7yNbSbS0KQbQvf4HQWzDujNDAyMDAGA1Ud\nEQQpMCeGJWh0dHBzOi8vY3JlZGVudGlhbC1pc3N1ZXIuZXhhbXBsZS5vcmcwCgYI\nKoZIzj0EAwIDSAAwRQIgFgMjgF11XRv0E1rtNmWWOarprjbmu6tqOsulAMFXxV4C\nIQDrpFoPCc2uDlEY4BzS10prwAgonpZeg/lm8/ll0IjVkQ==\n-----END CERTIFICATE-----\n" |
| 320 | + }, |
270 | 321 | "private_keys": [ |
271 | 322 | { |
272 | 323 | "kty": "RSA", |
|
0 commit comments