def test_contains_private_key_material(self):
        jwk_json = """
        {
            "kty": "EC",
            "use": "sig",
            "alg": "ES256",
            "kid": "54M7LspsUfvbirxoLfGeTQp8oCVducfvt0DEU8W4Wcc",
            "crv": "P-256",
            "x": "SM85B9i8alfba9WcWehUYY5WTn6lnRQ9ivlOGrIELzY",
            "y": "I9Agmt_PyqNv3LLkcCBA3iNmi9dieDNrXHnQdplNvHI",
            "d": "kmCdd0MVkSDEWlhesvOMEkx99hSA5ZFcvpaqCvEUI9o"
        }
        """

        jwk = json.loads(jwk_json)

        (actual_is_valid, actual_issues) = validate_key(jwk)
        actual_issue_types = [issue.type for issue in actual_issues]

        expected_is_valid = False
        expected_issue_types = [
            IssueType.KEY_CONTAINS_PRIVATE_MATERIAL
        ]

        self.assertEqual(actual_is_valid, expected_is_valid)
        self.assertEqual(actual_issue_types, expected_issue_types)
    def test_valid_enc_key(self):
        jwk_json = """
        {
            "kty": "EC",
            "use": "enc",
            "alg": "ECDH-ES",
            "kid": "UoGD6QXSfg5glPtfg9sgKQzmUkUtCYb9Df2oidXXkeA",
            "crv": "P-256",
            "x": "ULq4jmu0kzCgJRSUuR2hvKGJfXZmX0ckGIRpYYdvbQw",
            "y": "wNv2WCwH3if340DrtfpO9netZt_Cr9Po4FcYkNWFxf0"
        }
        """

        jwk = json.loads(jwk_json)

        (actual_is_valid, actual_issues) = validate_key(jwk)
        actual_issue_types = [issue.type for issue in actual_issues]

        expected_is_valid = False
        expected_issue_types = [
            IssueType.KEY_USE_IS_INCORRECT,
            IssueType.KEY_ALG_IS_INCORRECT
        ]

        self.assertEqual(actual_is_valid, expected_is_valid)
        self.assertEqual(actual_issue_types, expected_issue_types)
    def test_valid_sig_key(self):
        jwk_json = """
        {
            "kty": "EC",
            "use": "sig",
            "alg": "ES256",
            "kid": "54M7LspsUfvbirxoLfGeTQp8oCVducfvt0DEU8W4Wcc",
            "crv": "P-256",
            "x": "SM85B9i8alfba9WcWehUYY5WTn6lnRQ9ivlOGrIELzY",
            "y": "I9Agmt_PyqNv3LLkcCBA3iNmi9dieDNrXHnQdplNvHI"
        }
        """

        jwk = json.loads(jwk_json)

        (actual_is_valid, actual_issues) = validate_key(jwk)
        actual_issue_types = [issue.type for issue in actual_issues]

        expected_is_valid = True
        expected_issue_types = []
        self.assertEqual(actual_is_valid, expected_is_valid)
        self.assertEqual(actual_issue_types, expected_issue_types)
    def test_kid_missing(self):
        jwk_json = """
        {
            "kty": "EC",
            "use": "sig",
            "alg": "ES256",
            "crv": "P-256",
            "x": "SM85B9i8alfba9WcWehUYY5WTn6lnRQ9ivlOGrIELzY",
            "y": "I9Agmt_PyqNv3LLkcCBA3iNmi9dieDNrXHnQdplNvHI"
        }
        """

        jwk = json.loads(jwk_json)

        (actual_is_valid, actual_issues) = validate_key(jwk)
        actual_issue_types = [issue.type for issue in actual_issues]

        expected_is_valid = False
        expected_issue_types = [
            IssueType.KID_IS_MISSING
        ]
        self.assertEqual(actual_is_valid, expected_is_valid)
        self.assertEqual(actual_issue_types, expected_issue_types)
    def test_malformed_key(self):
        jwk_json = """
        {
            "kty": "EC",
            "use": "sig",
            "alg": "ES256",
            "kid": "54M7LspsUfvbirxoLfGeTQp8oCVducfvt0DEU8W4Wcc",
            "crv": "P-256",
            "x": "SM85B9i8alfba9WcWehUYY5WTn6lnRQ9ivlOGrIELzY"
        }
        """

        jwk = json.loads(jwk_json)

        (actual_is_valid, actual_issues) = validate_key(jwk)
        actual_issue_types = [issue.type for issue in actual_issues]

        expected_is_valid = False
        expected_issue_types = [
            IssueType.KEY_IS_INVALID
        ]
        self.assertEqual(actual_is_valid, expected_is_valid)
        self.assertEqual(actual_issue_types, expected_issue_types)