From 54b446f2d50b2b77892e8d1a789fac342f4687cb Mon Sep 17 00:00:00 2001 From: Peter Date: Thu, 14 Jan 2016 15:38:46 -0500 Subject: [PATCH] Adding server.crypto package and initial API This changes adds the kmip.services.server.crypto package and the initial API for the CryptographicEngine hierarchy. --- kmip/services/server/crypto/__init__.py | 14 +++++ kmip/services/server/crypto/api.py | 68 +++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 kmip/services/server/crypto/__init__.py create mode 100644 kmip/services/server/crypto/api.py diff --git a/kmip/services/server/crypto/__init__.py b/kmip/services/server/crypto/__init__.py new file mode 100644 index 0000000..c258e8d --- /dev/null +++ b/kmip/services/server/crypto/__init__.py @@ -0,0 +1,14 @@ +# Copyright (c) 2016 The Johns Hopkins University/Applied Physics Laboratory +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. diff --git a/kmip/services/server/crypto/api.py b/kmip/services/server/crypto/api.py new file mode 100644 index 0000000..c15832d --- /dev/null +++ b/kmip/services/server/crypto/api.py @@ -0,0 +1,68 @@ +# Copyright (c) 2016 The Johns Hopkins University/Applied Physics Laboratory +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from abc import ABCMeta +from abc import abstractmethod + +import six + + +@six.add_metaclass(ABCMeta) +class CryptographicEngine(object): + """ + The abstract base class of the cryptographic engine hierarchy. + + A cryptographic engine is responsible for generating all cryptographic + objects and conducting all cryptographic operations for a KMIP server + instance. + """ + + @abstractmethod + def create_symmetric_key(self, algorithm, length): + """ + Create a symmetric key. + + Args: + algorithm(CryptographicAlgorithm): An enumeration specifying the + algorithm for which the created key will be compliant. + length(int): The length of the key to be created. This value must + be compliant with the constraints of the provided algorithm. + + Returns: + dict: A dictionary containing the key data, with the following + key/value fields: + * value - the bytes of the key + * format - a KeyFormatType enumeration for the bytes format + """ + + @abstractmethod + def create_asymmetric_key_pair(self, algorithm, length): + """ + Create an asymmetric key pair. + + Args: + algorithm(CryptographicAlgorithm): An enumeration specifying the + algorithm for which the created keys will be compliant. + length(int): The length of the keys to be created. This value must + be compliant with the constraints of the provided algorithm. + + Returns: + dict: A dictionary containing the public key data, with the + following key/value fields: + * value - the bytes of the key + * format - a KeyFormatType enumeration for the bytes format + dict: A dictionary containing the private key data, identical in + structure to the public key dictionary. + """