|
1 | 1 | # pylint: disable=missing-docstring,no-self-use |
2 | 2 | import json |
3 | 3 | import os |
4 | | -import pytest |
5 | 4 | import shutil |
6 | 5 | import time |
7 | 6 |
|
| 7 | +import pytest |
8 | 8 | from cryptography.hazmat.primitives.asymmetric import rsa |
9 | 9 |
|
10 | 10 | from cryptojwt.jwk.ec import new_ec_key |
11 | | - |
| 11 | +from cryptojwt.jwk.hmac import SYMKey |
| 12 | +from cryptojwt.jwk.rsa import RSAKey |
12 | 13 | from cryptojwt.jwk.rsa import import_rsa_key_from_cert_file |
13 | 14 | from cryptojwt.jwk.rsa import new_rsa_key |
14 | | -from cryptojwt.jwk.rsa import RSAKey |
15 | | -from cryptojwt.jwk.hmac import SYMKey |
16 | | - |
17 | | -from cryptojwt.key_bundle import build_key_bundle, update_key_bundle, \ |
18 | | - key_rollover |
| 15 | +from cryptojwt.key_bundle import KeyBundle |
| 16 | +from cryptojwt.key_bundle import build_key_bundle |
19 | 17 | from cryptojwt.key_bundle import dump_jwks |
20 | 18 | from cryptojwt.key_bundle import key_diff |
21 | | -from cryptojwt.key_bundle import rsa_init |
| 19 | +from cryptojwt.key_bundle import key_rollover |
22 | 20 | from cryptojwt.key_bundle import keybundle_from_local_file |
23 | | -from cryptojwt.key_bundle import KeyBundle |
| 21 | +from cryptojwt.key_bundle import rsa_init |
| 22 | +from cryptojwt.key_bundle import unique_keys |
| 23 | +from cryptojwt.key_bundle import update_key_bundle |
24 | 24 |
|
25 | 25 | __author__ = 'Roland Hedberg' |
26 | 26 |
|
@@ -116,13 +116,16 @@ def full_path(local_file): |
116 | 116 | "x5c": [ |
117 | 117 | "MIIC4jCCAcqgAwIBAgIQQNXrmzhLN4VGlUXDYCRT3zANBgkqhkiG9w0BAQsFADAtMSswKQYDVQQDEyJhY2NvdW50cy5hY2Nlc3Njb" |
118 | 118 | "250cm9sLndpbmRvd3MubmV0MB4XDTE0MTAyODAwMDAwMFoXDTE2MTAyNzAwMDAwMFowLTErMCkGA1UEAxMiYWNjb3VudHMuYWNjZX" |
119 | | - "NzY29udHJvbC53aW5kb3dzLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALyKs/uPhEf7zVizjfcr/ISGFe9+yUO" |
| 119 | + "NzY29udHJvbC53aW5kb3dzLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALyKs" |
| 120 | + "/uPhEf7zVizjfcr/ISGFe9+yUO" |
120 | 121 | "qwpel38zgutvLHmFD39E2hpPdQhcXn4c4dt1fU5KvkbcDdVbP8+e4TvNpJMy" |
121 | 122 | "/nEB2V92zCQ/hhBjilwhF1ETe1TMmVjALs0KFvbxW" |
122 | 123 | "9ZN3EdUVvxFvz/gvG29nQhl4QWKj3x8opr89lmq14Z7T0mzOV8kub+cgsOU" |
123 | 124 | "/1bsKqrIqN1fMKKFhjKaetctdjYTfGzVQ0AJAzzbtg" |
124 | | - "0/Q1wdYNAnhSDafygEv6kNiquk0r0RyasUUevEXs2LY3vSgKsKseI8ZZlQEMtE9/k/iAG7JNcEbVg53YTurNTrPnXJOU88mf3TToX" |
125 | | - "14HpYsS1ECAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAfolx45w0i8CdAUjjeAaYdhG9+NDHxop0UvNOqlGqYJexqPLuvX8iyUaYxNG" |
| 125 | + "0/Q1wdYNAnhSDafygEv6kNiquk0r0RyasUUevEXs2LY3vSgKsKseI8ZZlQEMtE9/k" |
| 126 | + "/iAG7JNcEbVg53YTurNTrPnXJOU88mf3TToX" |
| 127 | + "14HpYsS1ECAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAfolx45w0i8CdAUjjeAaYdhG9" |
| 128 | + "+NDHxop0UvNOqlGqYJexqPLuvX8iyUaYxNG" |
126 | 129 | "zZxFgGI3GpKfmQP2JQWQ1E5JtY/n8iNLOKRMwqkuxSCKJxZJq4Sl/m" |
127 | 130 | "/Yv7TS1P5LNgAj8QLCypxsWrTAmq2HSpkeSk4JBtsYxX6uh" |
128 | 131 | "bGM/K1sEktKybVTHu22/7TmRqWTmOUy9wQvMjJb2IXdMGLG3hVntN" |
@@ -175,7 +178,8 @@ def full_path(local_file): |
175 | 178 | "x5c": [ |
176 | 179 | "MIICWzCCAcSgAwIBAgIJAL3MzqqEFMYjMA0GCSqGSIb3DQEBBQUAMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVib" |
177 | 180 | "GljIEtleTAeFw0xMzExMTExOTA1MDJaFw0xOTExMTAxOTA1MDJaMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibG" |
178 | | - "ljIEtleTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAx7HNcD9ZxTFRaAgZ7+gdYLkgQua3zvQseqBJIt8Uq3MimInMZoE9QGQ" |
| 181 | + "ljIEtleTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAx7HNcD9ZxTFRaAgZ7" |
| 182 | + "+gdYLkgQua3zvQseqBJIt8Uq3MimInMZoE9QGQ" |
179 | 183 | "eSML7qZPlowb5BUakdLI70ayM4vN36++0ht8+oCHhl8YjGFQkU" |
180 | 184 | "+Iv2yahWHEP+1EK6eOEYu6INQP9Lk0HMk3QViLwshwb+KXVD02j" |
181 | 185 | "dmX2HNdYJdPyc0cCAwEAAaOBijCBhzAdBgNVHQ4EFgQULR0aj9AtiNMgqIY8ZyXZGsHcJ5gwWQYDVR0jBFIwUIAULR0aj9AtiNMgq" |
@@ -261,14 +265,14 @@ def test_unknown_source(): |
261 | 265 |
|
262 | 266 | def test_ignore_unknown_types(): |
263 | 267 | kb = KeyBundle({ |
264 | | - "kid": "q-H9y8iuh3BIKZBbK6S0mH_isBlJsk" |
265 | | - "-u6VtZ5rAdBo5fCjjy3LnkrsoK_QWrlKB08j_PcvwpAMfTEDHw5spepw", |
266 | | - "use": "sig", |
267 | | - "alg": "EdDSA", |
268 | | - "kty": "OKP", |
269 | | - "crv": "Ed25519", |
270 | | - "x": "FnbcUAXZ4ySvrmdXK1MrDuiqlqTXvGdAaE4RWZjmFIQ" |
271 | | - }) |
| 268 | + "kid": "q-H9y8iuh3BIKZBbK6S0mH_isBlJsk" |
| 269 | + "-u6VtZ5rAdBo5fCjjy3LnkrsoK_QWrlKB08j_PcvwpAMfTEDHw5spepw", |
| 270 | + "use": "sig", |
| 271 | + "alg": "EdDSA", |
| 272 | + "kty": "OKP", |
| 273 | + "crv": "Ed25519", |
| 274 | + "x": "FnbcUAXZ4ySvrmdXK1MrDuiqlqTXvGdAaE4RWZjmFIQ" |
| 275 | + }) |
272 | 276 |
|
273 | 277 | assert len(kb) == 0 |
274 | 278 |
|
@@ -529,13 +533,15 @@ def test_loads_1(): |
529 | 533 | 'kty': 'RSA', |
530 | 534 | 'use': 'sig', |
531 | 535 | 'e': 'AQAB', |
532 | | - "n": 'wf-wiusGhA-gleZYQAOPQlNUIucPiqXdPVyieDqQbXXOPBe3nuggtVzeq7pVFH1dZz4dY2Q2LA5DaegvP8kRvoSB_87ds3dy3Rfym_GUSc5B0l1TgEobcyaep8jguRoHto6GWHfCfKqoUYZq4N8vh4LLMQwLR6zi6Jtu82nB5k8', |
| 536 | + "n": |
| 537 | + 'wf-wiusGhA-gleZYQAOPQlNUIucPiqXdPVyieDqQbXXOPBe3nuggtVzeq7pVFH1dZz4dY2Q2LA5DaegvP8kRvoSB_87ds3dy3Rfym_GUSc5B0l1TgEobcyaep8jguRoHto6GWHfCfKqoUYZq4N8vh4LLMQwLR6zi6Jtu82nB5k8', |
533 | 538 | 'kid': "1" |
534 | 539 | }, { |
535 | 540 | 'kty': 'RSA', |
536 | 541 | 'use': 'enc', |
537 | 542 | 'e': 'AQAB', |
538 | | - "n": 'wf-wiusGhA-gleZYQAOPQlNUIucPiqXdPVyieDqQbXXOPBe3nuggtVzeq7pVFH1dZz4dY2Q2LA5DaegvP8kRvoSB_87ds3dy3Rfym_GUSc5B0l1TgEobcyaep8jguRoHto6GWHfCfKqoUYZq4N8vh4LLMQwLR6zi6Jtu82nB5k8', |
| 543 | + "n": |
| 544 | + 'wf-wiusGhA-gleZYQAOPQlNUIucPiqXdPVyieDqQbXXOPBe3nuggtVzeq7pVFH1dZz4dY2Q2LA5DaegvP8kRvoSB_87ds3dy3Rfym_GUSc5B0l1TgEobcyaep8jguRoHto6GWHfCfKqoUYZq4N8vh4LLMQwLR6zi6Jtu82nB5k8', |
539 | 545 | 'kid': "2" |
540 | 546 | } |
541 | 547 | ] |
@@ -567,7 +573,8 @@ def test_dump_jwk(): |
567 | 573 |
|
568 | 574 | JWKS_DICT = {"keys": [ |
569 | 575 | { |
570 | | - "n": u"zkpUgEgXICI54blf6iWiD2RbMDCOO1jV0VSff1MFFnujM4othfMsad7H1kRo50YM5S_X9TdvrpdOfpz5aBaKFhT6Ziv0nhtcekq1eRl8mjBlvGKCE5XGk-0LFSDwvqgkJoFYInq7bu0a4JEzKs5AyJY75YlGh879k1Uu2Sv3ZZOunfV1O1Orta-NvS-aG_jN5cstVbCGWE20H0vFVrJKNx0Zf-u-aA-syM4uX7wdWgQ-owoEMHge0GmGgzso2lwOYf_4znanLwEuO3p5aabEaFoKNR4K6GjQcjBcYmDEE4CtfRU9AEmhcD1kleiTB9TjPWkgDmT9MXsGxBHf3AKT5w", |
| 576 | + "n": |
| 577 | + u"zkpUgEgXICI54blf6iWiD2RbMDCOO1jV0VSff1MFFnujM4othfMsad7H1kRo50YM5S_X9TdvrpdOfpz5aBaKFhT6Ziv0nhtcekq1eRl8mjBlvGKCE5XGk-0LFSDwvqgkJoFYInq7bu0a4JEzKs5AyJY75YlGh879k1Uu2Sv3ZZOunfV1O1Orta-NvS-aG_jN5cstVbCGWE20H0vFVrJKNx0Zf-u-aA-syM4uX7wdWgQ-owoEMHge0GmGgzso2lwOYf_4znanLwEuO3p5aabEaFoKNR4K6GjQcjBcYmDEE4CtfRU9AEmhcD1kleiTB9TjPWkgDmT9MXsGxBHf3AKT5w", |
571 | 578 | "e": u"AQAB", |
572 | 579 | "kty": "RSA", |
573 | 580 | "kid": "5-VBFv40P8D4I-7SFz7hMugTbPs", |
@@ -626,43 +633,38 @@ def test_jwks_url(): |
626 | 633 | KEYSPEC = [ |
627 | 634 | {"type": "RSA", "use": ["sig"]}, |
628 | 635 | {"type": "EC", "crv": "P-256", "use": ["sig"]} |
629 | | - ] |
630 | | - |
| 636 | +] |
631 | 637 |
|
632 | 638 | KEYSPEC_2 = [ |
633 | 639 | {"type": "RSA", "use": ["sig"]}, |
634 | 640 | {"type": "EC", "crv": "P-256", "use": ["sig"]}, |
635 | 641 | {"type": "EC", "crv": "P-384", "use": ["sig"]} |
636 | | - ] |
637 | | - |
| 642 | +] |
638 | 643 |
|
639 | 644 | KEYSPEC_3 = [ |
640 | 645 | {"type": "RSA", "use": ["sig"]}, |
641 | 646 | {"type": "EC", "crv": "P-256", "use": ["sig"]}, |
642 | 647 | {"type": "EC", "crv": "P-384", "use": ["sig"]}, |
643 | 648 | {"type": "EC", "crv": "P-521", "use": ["sig"]} |
644 | | - ] |
645 | | - |
| 649 | +] |
646 | 650 |
|
647 | 651 | KEYSPEC_4 = [ |
648 | 652 | {"type": "RSA", "use": ["sig"]}, |
649 | 653 | {"type": "RSA", "use": ["sig"]}, |
650 | 654 | {"type": "EC", "crv": "P-256", "use": ["sig"]}, |
651 | 655 | {"type": "EC", "crv": "P-384", "use": ["sig"]} |
652 | | - ] |
653 | | - |
| 656 | +] |
654 | 657 |
|
655 | 658 | KEYSPEC_5 = [ |
656 | 659 | {"type": "EC", "crv": "P-256", "use": ["sig"]}, |
657 | 660 | {"type": "EC", "crv": "P-384", "use": ["sig"]} |
658 | | - ] |
659 | | - |
| 661 | +] |
660 | 662 |
|
661 | 663 | KEYSPEC_6 = [ |
662 | | - {"type": "oct", "bytes": "24", "use": ["enc"], 'kid':'code'}, |
| 664 | + {"type": "oct", "bytes": "24", "use": ["enc"], 'kid': 'code'}, |
663 | 665 | {"type": "oct", "bytes": "24", "use": ["enc"], 'kid': 'token'}, |
664 | 666 | {"type": "oct", "bytes": "24", "use": ["enc"], 'kid': 'refresh_token'} |
665 | | - ] |
| 667 | +] |
666 | 668 |
|
667 | 669 |
|
668 | 670 | def test_key_diff_none(): |
@@ -782,3 +784,42 @@ def test_build_key_bundle_sym(): |
782 | 784 | assert len(_kb.get('RSA')) == 0 |
783 | 785 | assert len(_kb.get('EC')) == 0 |
784 | 786 | assert len(_kb.get('OCT')) == 3 |
| 787 | + |
| 788 | + |
| 789 | +def test_key_bundle_difference_none(): |
| 790 | + _kb0 = build_key_bundle(key_conf=KEYSPEC_6) |
| 791 | + _kb1 = KeyBundle() |
| 792 | + _kb1.extend(_kb0.keys()) |
| 793 | + |
| 794 | + assert _kb0.difference(_kb1) == [] |
| 795 | + |
| 796 | + |
| 797 | +def test_key_bundle_difference(): |
| 798 | + _kb0 = build_key_bundle(key_conf=KEYSPEC_6) |
| 799 | + _kb1 = build_key_bundle(key_conf=KEYSPEC_2) |
| 800 | + |
| 801 | + assert _kb0.difference(_kb1) == _kb0.keys() |
| 802 | + assert _kb1.difference(_kb0) == _kb1.keys() |
| 803 | + |
| 804 | + |
| 805 | +def test_unique_keys_1(): |
| 806 | + _kb0 = build_key_bundle(key_conf=KEYSPEC_6) |
| 807 | + _kb1 = build_key_bundle(key_conf=KEYSPEC_6) |
| 808 | + |
| 809 | + keys = _kb0.keys() |
| 810 | + keys.extend(_kb1.keys()) |
| 811 | + |
| 812 | + # All of them |
| 813 | + assert len(unique_keys(keys)) == 6 |
| 814 | + |
| 815 | + |
| 816 | +def test_unique_keys_2(): |
| 817 | + _kb0 = build_key_bundle(key_conf=KEYSPEC_6) |
| 818 | + _kb1 = KeyBundle() |
| 819 | + _kb1.extend(_kb0.keys()) |
| 820 | + |
| 821 | + keys = _kb0.keys() |
| 822 | + keys.extend(_kb1.keys()) |
| 823 | + |
| 824 | + # 3 of 6 |
| 825 | + assert len(unique_keys(keys)) == 3 |
0 commit comments