|
54 | 54 | # 'rsa/oaep-mgf1/sha384': WrappingAlgorithm.RSA_OAEP_SHA384_MGF1,
|
55 | 55 | # 'rsa/oaep-mgf1/sha512': WrappingAlgorithm.RSA_OAEP_SHA512_MGF1,
|
56 | 56 | }
|
| 57 | +_NOT_YET_IMPLEMENTED = {'rsa/oaep-mgf1/sha384', 'rsa/oaep-mgf1/sha512'} |
57 | 58 | _RAW_ENCRYPTION_KEY_TYPE = {
|
58 | 59 | "symmetric": EncryptionKeyType.SYMMETRIC,
|
59 | 60 | "private": EncryptionKeyType.PRIVATE,
|
@@ -91,9 +92,14 @@ def __attrs_post_init__(self):
|
91 | 92 | raise NotImplementedError("Gap found between known master key types and available master key loaders.")
|
92 | 93 |
|
93 | 94 | if self.type_name == "raw":
|
94 |
| - if None in (self.provider_id, self.encryption_algorithm, self.padding_algorithm): |
| 95 | + if None in (self.provider_id, self.encryption_algorithm): |
95 | 96 | raise ValueError(
|
96 |
| - "Provider ID, encryption algorithm, and padding algorithm are all required for raw keys" |
| 97 | + "Provider ID and encryption algorithm are both required for raw keys" |
| 98 | + ) |
| 99 | + |
| 100 | + if self.encryption_algorithm == "rsa" and self.padding_algorithm is None: |
| 101 | + raise ValueError( |
| 102 | + "Padding algorithm is required for raw RSA keys" |
97 | 103 | )
|
98 | 104 |
|
99 | 105 | if self.padding_algorithm == "oaep-mgf1" and self.padding_hash is None:
|
@@ -140,7 +146,12 @@ def _wrapping_algorithm(self, key_bits):
|
140 | 146 | if self.padding_hash is not None:
|
141 | 147 | key_spec_values.append(self.padding_hash)
|
142 | 148 |
|
143 |
| - return _RAW_WRAPPING_KEY_ALGORITHMS["/".join(key_spec_values)] |
| 149 | + key_spec_name = "/".join(key_spec_values) |
| 150 | + |
| 151 | + if key_spec_name in _NOT_YET_IMPLEMENTED: |
| 152 | + raise NotImplementedError("Key spec \"{}\" is not yet available.") |
| 153 | + |
| 154 | + return _RAW_WRAPPING_KEY_ALGORITHMS[key_spec_name] |
144 | 155 |
|
145 | 156 | def _wrapping_key(self, key_spec):
|
146 | 157 | # type: (KeySpec) -> WrappingKey
|
|
0 commit comments