Codebase list python-castellan / d7e7bf3
Merge "Fix typo and add name to not_implemented and mock key_manager" Jenkins authored 8 years ago Gerrit Code Review committed 8 years ago
3 changed file(s) with 26 addition(s) and 9 deletion(s). Raw diff Collapse all Expand all
2828 super(NotImplementedKeyManager, self).__init__(configuration)
2929
3030 def create_key(self, context, algorithm='AES', length=256,
31 expiration=None, **kwargs):
31 expiration=None, name=None, **kwargs):
3232 raise NotImplementedError()
3333
34 def create_key_pair(self, context, algorithm, lengthm, expiration=None):
34 def create_key_pair(self, context, algorithm, length,
35 expiration=None, name=None):
3536 raise NotImplementedError()
3637
3738 def store(self, context, managed_object, expiration=None, **kwargs):
6363 return hex_encoded
6464
6565 def _generate_key(self, **kwargs):
66 name = kwargs.get('name', None)
6667 key_length = kwargs.get('key_length', 256)
6768 _hex = self._generate_hex_key(key_length)
6869 return sym_key.SymmetricKey(
6970 'AES',
7071 key_length,
71 bytes(binascii.unhexlify(_hex)))
72 bytes(binascii.unhexlify(_hex)),
73 name)
7274
7375 def create_key(self, context, **kwargs):
7476 """Creates a symmetric key.
8385 key = self._generate_key(**kwargs)
8486 return self.store(context, key)
8587
86 def _generate_public_and_private_key(self, length):
88 def _generate_public_and_private_key(self, length, name):
8789 crypto_private_key = rsa.generate_private_key(
8890 public_exponent=65537,
8991 key_size=length,
103105 private_key = pri_key.PrivateKey(
104106 algorithm='RSA',
105107 bit_length=length,
106 key=bytearray(private_der))
108 key=bytearray(private_der),
109 name=name)
107110
108111 public_key = pub_key.PublicKey(
109112 algorithm='RSA',
110113 bit_length=length,
111 key=bytearray(public_der))
114 key=bytearray(public_der),
115 name=name)
112116
113117 return private_key, public_key
114118
115 def create_key_pair(self, context, algorithm, length, expiration=None):
119 def create_key_pair(self, context, algorithm, length,
120 expiration=None, name=None):
116121 """Creates an asymmetric key pair.
117122
118123 This implementation returns UUIDs for the created keys in the order:
133138 length, valid_lengths)
134139 raise ValueError(msg)
135140
136 private_key, public_key = self._generate_public_and_private_key(length)
141 private_key, public_key = self._generate_public_and_private_key(length,
142 name)
137143
138144 private_key_uuid = self.store(context, private_key)
139145 public_key_uuid = self.store(context, public_key)
6565 key = self.key_mgr.get(self.context, key_id)
6666 self.assertEqual(length / 8, len(key.get_encoded()))
6767
68 def test_create_key_with_name(self):
69 name = 'my key'
70 key_id = self.key_mgr.create_key(self.context, name=name)
71 key = self.key_mgr.get(self.context, key_id)
72 self.assertEqual(name, key.name)
73
6874 def test_create_key_null_context(self):
6975 self.assertRaises(exception.Forbidden,
7076 self.key_mgr.create_key, None)
7177
7278 def test_create_key_pair(self):
7379 for length in [2048, 3072, 4096]:
80 name = str(length) + ' key'
7481 private_key_uuid, public_key_uuid = self.key_mgr.create_key_pair(
75 self.context, 'RSA', length)
82 self.context, 'RSA', length, name=name)
7683
7784 private_key = self.key_mgr.get(self.context, private_key_uuid)
7885 public_key = self.key_mgr.get(self.context, public_key_uuid)
7986
8087 crypto_private_key = get_cryptography_private_key(private_key)
8188 crypto_public_key = get_cryptography_public_key(public_key)
89
90 self.assertEqual(name, private_key.name)
91 self.assertEqual(name, public_key.name)
8292
8393 self.assertEqual(length, crypto_private_key.key_size)
8494 self.assertEqual(length, crypto_public_key.key_size)