File: test_errors.py

package info (click to toggle)
joserfc 1.6.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,468 kB
  • sloc: python: 8,023; makefile: 18
file content (108 lines) | stat: -rw-r--r-- 4,076 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
from unittest import TestCase
from joserfc import jwe
from joserfc.jwk import OctKey, RSAKey
from joserfc.registry import HeaderParameter
from joserfc.errors import (
    InvalidKeyTypeError,
    InvalidKeyLengthError,
    DecodeError,
    UnsupportedAlgorithmError,
    UnsupportedHeaderError,
)
from tests.base import load_key


class TestJWEErrors(TestCase):
    def test_dir_with_invalid_key_type(self):
        key1 = load_key("ec-p256-private.pem")
        protected = {"alg": "dir", "enc": "A128CBC-HS256"}
        self.assertRaises(
            InvalidKeyTypeError,
            jwe.encrypt_compact,
            protected,
            b"i",
            key1,
        )

        protected = {"alg": "A128KW", "enc": "A128CBC-HS256"}
        self.assertRaises(
            InvalidKeyTypeError,
            jwe.encrypt_compact,
            protected,
            b"i",
            key1,
        )

        protected = {"alg": "ECDH-ES+A128KW", "enc": "A128CBC-HS256"}
        key2 = OctKey.import_key("secret")
        self.assertRaises(
            InvalidKeyTypeError,
            jwe.encrypt_compact,
            protected,
            b"i",
            key2,
        )

        protected = {"alg": "PBES2-HS256+A128KW", "enc": "A128CBC-HS256"}
        self.assertRaises(
            InvalidKeyTypeError,
            jwe.encrypt_compact,
            protected,
            b"i",
            key1,
            algorithms=["PBES2-HS256+A128KW", "A128CBC-HS256"],
        )

    def test_rsa_with_invalid_key_type(self):
        key = load_key("ec-p256-private.pem")
        protected = {"alg": "RSA-OAEP", "enc": "A128CBC-HS256"}
        self.assertRaises(
            InvalidKeyTypeError,
            jwe.encrypt_compact,
            protected,
            b"i",
            key,
        )

    def test_A128KW_unwrap_error(self):
        key1 = OctKey.generate_key(128)
        key2 = OctKey.generate_key(128)
        protected = {"alg": "A128KW", "enc": "A128CBC-HS256"}
        value = jwe.encrypt_compact(protected, b"i", key1)
        self.assertRaises(DecodeError, jwe.decrypt_compact, value, key2)

    def test_unsupported_algorithm(self):
        key = OctKey.generate_key(128)
        protected = {"alg": "INVALID", "enc": "A128CBC-HS256"}
        self.assertRaises(UnsupportedAlgorithmError, jwe.encrypt_compact, protected, b"i", key)

        registry = jwe.JWERegistry(algorithms=["A128GCMKW"])
        self.assertRaises(UnsupportedAlgorithmError, jwe.encrypt_compact, protected, b"i", key, registry=registry)

    def test_invalid_key_length(self):
        protected = {"alg": "dir", "enc": "A128CBC-HS256"}
        key = OctKey.import_key("secret")
        self.assertRaises(InvalidKeyLengthError, jwe.encrypt_compact, protected, b"i", key)
        protected = {"alg": "A128KW", "enc": "A128CBC-HS256"}
        self.assertRaises(InvalidKeyLengthError, jwe.encrypt_compact, protected, b"i", key)
        protected = {"alg": "RSA-OAEP", "enc": "A128CBC-HS256"}
        rsa_key = RSAKey.generate_key(1024)
        self.assertRaises(InvalidKeyLengthError, jwe.encrypt_compact, protected, b"i", rsa_key)

    def test_extra_header(self):
        key = OctKey.generate_key(256)
        protected = {"alg": "dir", "enc": "A128CBC-HS256", "custom": "hi"}
        self.assertRaises(UnsupportedHeaderError, jwe.encrypt_compact, protected, b"i", key)

        registry = jwe.JWERegistry(strict_check_header=False)
        jwe.encrypt_compact(protected, b"i", key, registry=registry)

        registry = jwe.JWERegistry(header_registry={"custom": HeaderParameter("Custom", "str")})
        jwe.encrypt_compact(protected, b"i", key, registry=registry)

    def test_strict_check_header_with_more_header_registry(self):
        key = load_key("ec-p256-private.pem")
        protected = {"alg": "ECDH-ES", "enc": "A128CBC-HS256", "custom": "hi"}
        self.assertRaises(UnsupportedHeaderError, jwe.encrypt_compact, protected, b"i", key)
        registry = jwe.JWERegistry(strict_check_header=False)
        jwe.encrypt_compact(protected, b"i", key, registry=registry)