)]}'
{"barbican/plugin/kmip_secret_store.py":[{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"db2b7c44b901f316045bb90137b83b2b6c184133","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                KMIPSecretStore.KMIP_ALGORITHM_ENUM:"},{"line_number":127,"context_line":"                enums.CryptographicAlgorithm.RSA},"},{"line_number":128,"context_line":"            ss.KeyAlgorithm.ECDSA: {"},{"line_number":129,"context_line":"                KMIPSecretStore.VALID_BIT_LENGTHS: [],"},{"line_number":130,"context_line":"                KMIPSecretStore.KMIP_ALGORITHM_ENUM:"},{"line_number":131,"context_line":"                enums.CryptographicAlgorithm.ECDSA},"},{"line_number":132,"context_line":"            ss.KeyAlgorithm.ECDH: {"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_43cbd952","line":129,"updated":"2015-03-12 21:54:58.000000000","message":"Need to look these up","commit_id":"fffc22ef6b7589479e13cb9c3c86d82b1ca46250"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"55b729167b2b7f8a627a1208811ac14ee4edcd2c","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                KMIPSecretStore.KMIP_ALGORITHM_ENUM:"},{"line_number":127,"context_line":"                enums.CryptographicAlgorithm.RSA},"},{"line_number":128,"context_line":"            ss.KeyAlgorithm.ECDSA: {"},{"line_number":129,"context_line":"                KMIPSecretStore.VALID_BIT_LENGTHS: [],"},{"line_number":130,"context_line":"                KMIPSecretStore.KMIP_ALGORITHM_ENUM:"},{"line_number":131,"context_line":"                enums.CryptographicAlgorithm.ECDSA},"},{"line_number":132,"context_line":"            ss.KeyAlgorithm.ECDH: {"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_0ecf1d80","line":129,"in_reply_to":"9a80dd14_43cbd952","updated":"2015-03-13 16:42:42.000000000","message":"You could ignore these for now if not enough time to lookup. We could say that they are not supported.","commit_id":"fffc22ef6b7589479e13cb9c3c86d82b1ca46250"},{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"db2b7c44b901f316045bb90137b83b2b6c184133","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                KMIPSecretStore.KMIP_ALGORITHM_ENUM:"},{"line_number":131,"context_line":"                enums.CryptographicAlgorithm.ECDSA},"},{"line_number":132,"context_line":"            ss.KeyAlgorithm.ECDH: {"},{"line_number":133,"context_line":"                KMIPSecretStore.VALID_BIT_LENGTHS: [],"},{"line_number":134,"context_line":"                KMIPSecretStore.KMIP_ALGORITHM_ENUM:"},{"line_number":135,"context_line":"                enums.CryptographicAlgorithm.ECDH},"},{"line_number":136,"context_line":"            ss.KeyAlgorithm.ECMQV: {"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_83c15131","line":133,"updated":"2015-03-12 21:54:58.000000000","message":"Need to look these up","commit_id":"fffc22ef6b7589479e13cb9c3c86d82b1ca46250"},{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"db2b7c44b901f316045bb90137b83b2b6c184133","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                KMIPSecretStore.KMIP_ALGORITHM_ENUM:"},{"line_number":135,"context_line":"                enums.CryptographicAlgorithm.ECDH},"},{"line_number":136,"context_line":"            ss.KeyAlgorithm.ECMQV: {"},{"line_number":137,"context_line":"                KMIPSecretStore.VALID_BIT_LENGTHS: [],"},{"line_number":138,"context_line":"                KMIPSecretStore.KMIP_ALGORITHM_ENUM:"},{"line_number":139,"context_line":"                enums.CryptographicAlgorithm.ECMQV}"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_c3dee910","line":137,"updated":"2015-03-12 21:54:58.000000000","message":"need to look these up","commit_id":"fffc22ef6b7589479e13cb9c3c86d82b1ca46250"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"55b729167b2b7f8a627a1208811ac14ee4edcd2c","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        the server."},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        :param key_spec: KeySpec with asymmetric algorithm and bit_length"},{"line_number":220,"context_line":"        :returns: dictionary holding key_id returned by server"},{"line_number":221,"context_line":"        :raises: SecretGeneralException, SecretAlgorithmNotSupportedException"},{"line_number":222,"context_line":"        \"\"\""},{"line_number":223,"context_line":"        LOG.debug(\"Starting asymmetric key generation with KMIP plugin\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_6e7b39be","line":220,"updated":"2015-03-13 16:42:42.000000000","message":"This returns AsymmetricMetaDTO and that contains IDs for each of the stored entries.","commit_id":"fffc22ef6b7589479e13cb9c3c86d82b1ca46250"},{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"db2b7c44b901f316045bb90137b83b2b6c184133","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        :raises: SecretGeneralException, SecretAlgorithmNotSupportedException"},{"line_number":222,"context_line":"        \"\"\""},{"line_number":223,"context_line":"        LOG.debug(\"Starting asymmetric key generation with KMIP plugin\")"},{"line_number":224,"context_line":"        if not self.generate_supports(key_spec):"},{"line_number":225,"context_line":"            raise ss.SecretAlgorithmNotSupportedException("},{"line_number":226,"context_line":"                key_spec.alg)"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_a3d575e6","line":224,"updated":"2015-03-12 21:54:58.000000000","message":"change this to only check if it\u0027s a valid asymmetric algorithm","commit_id":"fffc22ef6b7589479e13cb9c3c86d82b1ca46250"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"55b729167b2b7f8a627a1208811ac14ee4edcd2c","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        algorithm \u003d self._create_cryptographic_algorithm_attribute("},{"line_number":229,"context_line":"            key_spec.alg)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        usage_mask \u003d self._create_usage_mask_attribute()"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        length \u003d self._create_cryptographic_length_attribute("},{"line_number":234,"context_line":"            key_spec.bit_length)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_395269de","line":231,"updated":"2015-03-13 16:42:42.000000000","message":"I could see the keys being used for signing and validation as well. I think what is there now is good enough. I don\u0027t know what I would change.\n\nI think we might want to add the concept of a usage mask to Barbican in the future. It is something to think about.","commit_id":"fffc22ef6b7589479e13cb9c3c86d82b1ca46250"},{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"db2b7c44b901f316045bb90137b83b2b6c184133","unresolved":false,"context_lines":[{"line_number":247,"context_line":"            result \u003d self.client.create_key_pair("},{"line_number":248,"context_line":"                common_template_attribute\u003dcommon,"},{"line_number":249,"context_line":"                private_key_template_attribute\u003dprivate,"},{"line_number":250,"context_line":"                public_key_template_attribute\u003dpublic,"},{"line_number":251,"context_line":"                credential\u003dself.credential)"},{"line_number":252,"context_line":"        except Exception as e:"},{"line_number":253,"context_line":"            LOG.exception(\"Error opening or writing to client\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_83ef91b0","line":250,"updated":"2015-03-12 21:54:58.000000000","message":"Test with appliance: Is it ok to only pass the common template attribute and not all 3?","commit_id":"fffc22ef6b7589479e13cb9c3c86d82b1ca46250"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"55b729167b2b7f8a627a1208811ac14ee4edcd2c","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        except Exception as e:"},{"line_number":253,"context_line":"            LOG.exception(\"Error opening or writing to client\")"},{"line_number":254,"context_line":"            raise ss.SecretGeneralException(str(e))"},{"line_number":255,"context_line":"        else:"},{"line_number":256,"context_line":"            if result.result_status.enum \u003d\u003d enums.ResultStatus.SUCCESS:"},{"line_number":257,"context_line":"                LOG.debug(\"SUCCESS: Asymmetric key pair generated with \""},{"line_number":258,"context_line":"                          \"public key uuid: %s and private key uuid: %s\","}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_d99b0d64","line":255,"updated":"2015-03-13 16:42:42.000000000","message":"The Python language makes me have this quizzical look on my face sometimes.","commit_id":"fffc22ef6b7589479e13cb9c3c86d82b1ca46250"},{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"db2b7c44b901f316045bb90137b83b2b6c184133","unresolved":false,"context_lines":[{"line_number":264,"context_line":"                public_key_metadata \u003d {"},{"line_number":265,"context_line":"                    KMIPSecretStore.PUBLIC_KEY_UUID:"},{"line_number":266,"context_line":"                    result.private_key_uuid.value}"},{"line_number":267,"context_line":"                passphrase_metadata \u003d None"},{"line_number":268,"context_line":"                return ss.AsymmetricKeyMetadataDTO(private_key_metadata,"},{"line_number":269,"context_line":"                                                   public_key_metadata,"},{"line_number":270,"context_line":"                                                   passphrase_metadata)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_8346b1be","line":267,"updated":"2015-03-12 21:54:58.000000000","message":"How to handle passphrase?","commit_id":"fffc22ef6b7589479e13cb9c3c86d82b1ca46250"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"1fb7fc5270bf38bebbdcee4791117c55ef0cb69a","unresolved":false,"context_lines":[{"line_number":117,"context_line":"                enums.CryptographicAlgorithm.TRIPLE_DES},"},{"line_number":118,"context_line":"            ss.KeyAlgorithm.DSA: {"},{"line_number":119,"context_line":"                KMIPSecretStore.VALID_BIT_LENGTHS:"},{"line_number":120,"context_line":"                [x for x in range(512, 1025) if x % 64 \u003d\u003d 0],"},{"line_number":121,"context_line":"                KMIPSecretStore.KMIP_ALGORITHM_ENUM:"},{"line_number":122,"context_line":"                enums.CryptographicAlgorithm.DSA},"},{"line_number":123,"context_line":"            ss.KeyAlgorithm.RSA: {"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_8eda1b76","line":120,"updated":"2015-03-13 22:43:27.000000000","message":"This seems really slow to iterate through all those values. Let\u0027s define a list of acceptable values.","commit_id":"91813ab14b54b28686cccdd95f23eeb1cc38fdba"},{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"2e8dff074756e7140f0fb1803aa8d492f10dadec","unresolved":false,"context_lines":[{"line_number":117,"context_line":"                enums.CryptographicAlgorithm.TRIPLE_DES},"},{"line_number":118,"context_line":"            ss.KeyAlgorithm.DSA: {"},{"line_number":119,"context_line":"                KMIPSecretStore.VALID_BIT_LENGTHS:"},{"line_number":120,"context_line":"                [x for x in range(512, 1025) if x % 64 \u003d\u003d 0],"},{"line_number":121,"context_line":"                KMIPSecretStore.KMIP_ALGORITHM_ENUM:"},{"line_number":122,"context_line":"                enums.CryptographicAlgorithm.DSA},"},{"line_number":123,"context_line":"            ss.KeyAlgorithm.RSA: {"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_bb070317","line":120,"in_reply_to":"9a80dd14_8eda1b76","updated":"2015-03-16 03:20:11.000000000","message":"Done","commit_id":"91813ab14b54b28686cccdd95f23eeb1cc38fdba"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"1fb7fc5270bf38bebbdcee4791117c55ef0cb69a","unresolved":false,"context_lines":[{"line_number":122,"context_line":"                enums.CryptographicAlgorithm.DSA},"},{"line_number":123,"context_line":"            ss.KeyAlgorithm.RSA: {"},{"line_number":124,"context_line":"                KMIPSecretStore.VALID_BIT_LENGTHS:"},{"line_number":125,"context_line":"                [x for x in range(1024, 4097) if x % 64 \u003d\u003d 0],"},{"line_number":126,"context_line":"                KMIPSecretStore.KMIP_ALGORITHM_ENUM:"},{"line_number":127,"context_line":"                enums.CryptographicAlgorithm.RSA},"},{"line_number":128,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_489bbb65","line":125,"updated":"2015-03-13 22:43:27.000000000","message":"Where did you find modulus 64? I think the valid values are 1024, 2048, 3072, and 4096. Let\u0027s limit it to those sizes.\n\nI don\u0027t know about DSA, but it is probably something similar.","commit_id":"91813ab14b54b28686cccdd95f23eeb1cc38fdba"},{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"2e8dff074756e7140f0fb1803aa8d492f10dadec","unresolved":false,"context_lines":[{"line_number":122,"context_line":"                enums.CryptographicAlgorithm.DSA},"},{"line_number":123,"context_line":"            ss.KeyAlgorithm.RSA: {"},{"line_number":124,"context_line":"                KMIPSecretStore.VALID_BIT_LENGTHS:"},{"line_number":125,"context_line":"                [x for x in range(1024, 4097) if x % 64 \u003d\u003d 0],"},{"line_number":126,"context_line":"                KMIPSecretStore.KMIP_ALGORITHM_ENUM:"},{"line_number":127,"context_line":"                enums.CryptographicAlgorithm.RSA},"},{"line_number":128,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_fb425b3c","line":125,"in_reply_to":"9a80dd14_489bbb65","updated":"2015-03-16 03:20:11.000000000","message":"I found those values through this:\n\nhttps://www.dlitz.net/software/pycrypto/api/current/Crypto.PublicKey.DSA-module.html\n\nThough now I looked for a second source to verify and found this:\n\nhttp://security.stackexchange.com/questions/44251/openssl-generate-different-type-of-self-signed-certificate\n\nIt looks like there\u0027s differente value depending on what version you\u0027re using.","commit_id":"91813ab14b54b28686cccdd95f23eeb1cc38fdba"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"c24d6e4447ec820ca063851e725e847b6d7a59da","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        if key_spec.alg.lower() not in ss.KeyAlgorithm.SYMMETRIC_ALGORITHMS:"},{"line_number":170,"context_line":"            raise KMIPSecretStoreError("},{"line_number":171,"context_line":"                u._(\"A non-symmetric algorithm {algorithm} was passed to the \""},{"line_number":172,"context_line":"                    \"\u0027generate_symmetric_key\u0027 method\").format("},{"line_number":173,"context_line":"                        algorithm\u003dkey_spec.alg))"},{"line_number":174,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_be2e848a","line":171,"updated":"2015-03-18 15:50:52.000000000","message":"Maybe say unsupported instead of non-symmetric. That way if new algorithm is out that we do not yet support the user will not say, \"Excuse me. This is a symmetric algorithm.\"","commit_id":"dca3a494f7957fe880a7e13f830b8fceb5e7db18"},{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"7167fbf814ee430c3e02c10d46328ccff9dba8e4","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        if key_spec.alg.lower() not in ss.KeyAlgorithm.SYMMETRIC_ALGORITHMS:"},{"line_number":170,"context_line":"            raise KMIPSecretStoreError("},{"line_number":171,"context_line":"                u._(\"A non-symmetric algorithm {algorithm} was passed to the \""},{"line_number":172,"context_line":"                    \"\u0027generate_symmetric_key\u0027 method\").format("},{"line_number":173,"context_line":"                        algorithm\u003dkey_spec.alg))"},{"line_number":174,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_3970eedb","line":171,"in_reply_to":"9a80dd14_be2e848a","updated":"2015-03-18 16:51:58.000000000","message":"Oh, fair.","commit_id":"dca3a494f7957fe880a7e13f830b8fceb5e7db18"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"c24d6e4447ec820ca063851e725e847b6d7a59da","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                      \"generation\")"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def generate_asymmetric_key(self, key_spec):"},{"line_number":212,"context_line":"        \"\"\"Generate an asymmetric key."},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        Creates KMIP attribute objects based on the given KeySpec to send to"},{"line_number":215,"context_line":"        the server. The KMIP Secret Store currently does not support"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_7e624cda","line":212,"updated":"2015-03-18 15:50:52.000000000","message":"key pair","commit_id":"dca3a494f7957fe880a7e13f830b8fceb5e7db18"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"c24d6e4447ec820ca063851e725e847b6d7a59da","unresolved":false,"context_lines":[{"line_number":292,"context_line":"        LOG.debug(\"Starting secret storage with KMIP plugin\")"},{"line_number":293,"context_line":"        if not self.store_secret_supports(secret_dto.key_spec):"},{"line_number":294,"context_line":"            raise ss.SecretAlgorithmNotSupportedException("},{"line_number":295,"context_line":"                secret_dto.key_spec.alg)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        object_type, key_format_type \u003d ("},{"line_number":298,"context_line":"            self._map_type_ss_to_kmip(secret_dto.type))"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_f9d2d659","line":295,"updated":"2015-03-18 15:50:52.000000000","message":"We will need another CR that raises exception if type is not one of symmetric, private, or public.","commit_id":"dca3a494f7957fe880a7e13f830b8fceb5e7db18"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"c24d6e4447ec820ca063851e725e847b6d7a59da","unresolved":false,"context_lines":[{"line_number":309,"context_line":"        secret_features \u003d {"},{"line_number":310,"context_line":"            \u0027key_format_type\u0027: key_format_type,"},{"line_number":311,"context_line":"            \u0027key_value\u0027: {"},{"line_number":312,"context_line":"                \u0027bytes\u0027: self._convert_base64_to_byte_array(secret_dto.secret)"},{"line_number":313,"context_line":"            },"},{"line_number":314,"context_line":"            \u0027cryptographic_algorithm\u0027: algorithm_value,"},{"line_number":315,"context_line":"            \u0027cryptographic_length\u0027: secret_dto.key_spec.bit_length"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_f9ebb60f","line":312,"updated":"2015-03-18 15:50:52.000000000","message":"You will need a little bit of logic before this. If the secret type is one of private, public, or certificate then it is PEM encoded. That means base64 encoding of bytes with PEM header and footer.\n\nYou will need to check if one of those types and if it is then convert to binary format. This is how store_crypto.py does it for their store operation.\n\n          normalized_secret \u003d secret_dto.secret\n          secret_type \u003d secret_dto.type\n          if (secret_type \u003d\u003d sstore.SecretType.PRIVATE or\n                  secret_type \u003d\u003d sstore.SecretType.PUBLIC or\n                  secret_type \u003d\u003d sstore.SecretType.CERTIFICATE):\n              normalized_secret \u003d translations.get_pem_components(\n                  normalized_secret)[1]\n          normalized_secret \u003d base64.b64decode(normalized_secret)\n\nThen the bytes value is normalized_secret.","commit_id":"dca3a494f7957fe880a7e13f830b8fceb5e7db18"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"c24d6e4447ec820ca063851e725e847b6d7a59da","unresolved":false,"context_lines":[{"line_number":379,"context_line":"                        secret_block.key_value.key_material.value)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"                elif key_value_type \u003d\u003d kmip_objects.KeyMaterial:"},{"line_number":382,"context_line":"                    secret_value \u003d self._convert_byte_array_to_base64("},{"line_number":383,"context_line":"                        secret_block.key_value.key_material.value)"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_3929ce37","line":382,"updated":"2015-03-18 15:50:52.000000000","message":"These two if statements look the same. Can they be combined with an OR statement?","commit_id":"dca3a494f7957fe880a7e13f830b8fceb5e7db18"},{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"7167fbf814ee430c3e02c10d46328ccff9dba8e4","unresolved":false,"context_lines":[{"line_number":379,"context_line":"                        secret_block.key_value.key_material.value)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"                elif key_value_type \u003d\u003d kmip_objects.KeyMaterial:"},{"line_number":382,"context_line":"                    secret_value \u003d self._convert_byte_array_to_base64("},{"line_number":383,"context_line":"                        secret_block.key_value.key_material.value)"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_19124a62","line":382,"in_reply_to":"9a80dd14_3929ce37","updated":"2015-03-18 16:51:58.000000000","message":"Ah, smart","commit_id":"dca3a494f7957fe880a7e13f830b8fceb5e7db18"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"c24d6e4447ec820ca063851e725e847b6d7a59da","unresolved":false,"context_lines":[{"line_number":400,"context_line":"                secret_bit_length \u003d secret_block.cryptographic_length.value"},{"line_number":401,"context_line":"                ret_secret_dto \u003d ss.SecretDTO("},{"line_number":402,"context_line":"                    secret_type,"},{"line_number":403,"context_line":"                    secret_value,"},{"line_number":404,"context_line":"                    ss.KeySpec(secret_alg, secret_bit_length),"},{"line_number":405,"context_line":"                    \u0027content_type\u0027,"},{"line_number":406,"context_line":"                    transport_key\u003dNone)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_99ac7a8e","line":403,"updated":"2015-03-18 15:50:52.000000000","message":"See my comment above in store_secret. If the secret is of the type private, public, certificate then need to add PEM headers.\n\nBelow is the code from store_crypto.get_secret()\n\n          secret \u003d base64.b64encode(secret)\n          if (secret_type \u003d\u003d sstore.SecretType.PRIVATE or\n                  secret_type \u003d\u003d sstore.SecretType.PUBLIC or\n                  secret_type \u003d\u003d sstore.SecretType.CERTIFICATE):\n              secret \u003d translations.to_pem(secret_type, secret, True)","commit_id":"dca3a494f7957fe880a7e13f830b8fceb5e7db18"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"c24d6e4447ec820ca063851e725e847b6d7a59da","unresolved":false,"context_lines":[{"line_number":467,"context_line":"        Specifies whether the plugin supports storage of the secret given"},{"line_number":468,"context_line":"        the attributes included in the KeySpec."},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"        For now, only symmetric and asymmetric keys are supported."},{"line_number":471,"context_line":"        :param key_spec: KeySpec of secret to be stored"},{"line_number":472,"context_line":"        :returns: boolean indicating if secret can be stored"},{"line_number":473,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_bef6845b","line":470,"updated":"2015-03-18 15:50:52.000000000","message":"We should have a future CR to have this take in the SecretType as well. If someone specifies the opaque type but gives valid RSA key spec then this returns true but later the store operation will fail.","commit_id":"dca3a494f7957fe880a7e13f830b8fceb5e7db18"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"c24d6e4447ec820ca063851e725e847b6d7a59da","unresolved":false,"context_lines":[{"line_number":565,"context_line":"        elif object_type \u003d\u003d ss.SecretType.PUBLIC:"},{"line_number":566,"context_line":"            return enums.ObjectType.PUBLIC_KEY, enums.KeyFormatType.PKCS_1"},{"line_number":567,"context_line":"            # TODO(kfarr) verify this is PKCS1 and not X509"},{"line_number":568,"context_line":"        elif object_type \u003d\u003d ss.SecretType.OPAQUE:"},{"line_number":569,"context_line":"            return enums.ObjectType.OPAQUE_DATA, enums.KeyFormatType.OPAQUE"},{"line_number":570,"context_line":"        else:"},{"line_number":571,"context_line":"            return None, None"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_3e5d347a","line":568,"updated":"2015-03-18 15:50:52.000000000","message":"The comment says only supports symmetric and asymmetric, so this should return None, None","commit_id":"dca3a494f7957fe880a7e13f830b8fceb5e7db18"},{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"ba15c1e9ea9ef51ab6ea841beb78297bd1eef404","unresolved":false,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        if key_spec.alg.lower() not in ss.KeyAlgorithm.ASYMMETRIC_ALGORITHMS:"},{"line_number":229,"context_line":"            raise KMIPSecretStoreError("},{"line_number":230,"context_line":"                u._(\"A non-asymmetric algorithm {algorithm} was passed to \""},{"line_number":231,"context_line":"                    \"the \u0027generate_asymmetric_key\u0027 method\").format("},{"line_number":232,"context_line":"                        algorithm\u003dkey_spec.alg))"},{"line_number":233,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_66d562b6","line":230,"updated":"2015-03-18 16:55:49.000000000","message":"unsupported","commit_id":"c836139899d12880b0bdb45c4a2be12268271434"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"755787b2dc7ba2a75de67f8d37120f1f0c9f8795","unresolved":false,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        if key_spec.alg.lower() not in ss.KeyAlgorithm.ASYMMETRIC_ALGORITHMS:"},{"line_number":229,"context_line":"            raise KMIPSecretStoreError("},{"line_number":230,"context_line":"                u._(\"A non-asymmetric algorithm {algorithm} was passed to \""},{"line_number":231,"context_line":"                    \"the \u0027generate_asymmetric_key\u0027 method\").format("},{"line_number":232,"context_line":"                        algorithm\u003dkey_spec.alg))"},{"line_number":233,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_31c3a28b","line":230,"in_reply_to":"9a80dd14_66d562b6","updated":"2015-03-18 17:24:47.000000000","message":"ditto","commit_id":"c836139899d12880b0bdb45c4a2be12268271434"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"a8595efb692e55dd3d8e6486782526178674c9cf","unresolved":false,"context_lines":[{"line_number":392,"context_line":"                key_value_type \u003d type(secret_block.key_value.key_material)"},{"line_number":393,"context_line":"                if (key_value_type \u003d\u003d kmip_objects.KeyMaterialStruct or"},{"line_number":394,"context_line":"                        key_value_type \u003d\u003d kmip_objects.KeyMaterial):"},{"line_number":395,"context_line":"                    secret_value \u003d base64.b64encode(eval("},{"line_number":396,"context_line":"                        secret_block.key_value.key_material.value)[\u0027bytes\u0027])"},{"line_number":397,"context_line":"                else:"},{"line_number":398,"context_line":"                    msg \u003d u._("}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_7c296a9a","line":395,"updated":"2015-03-18 19:44:48.000000000","message":"What does eval do?","commit_id":"a526f87666737518d84a5387898a78618a801bf3"},{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"2859543bbbe69cde634186da51c358ecb1e4d9dd","unresolved":false,"context_lines":[{"line_number":392,"context_line":"                key_value_type \u003d type(secret_block.key_value.key_material)"},{"line_number":393,"context_line":"                if (key_value_type \u003d\u003d kmip_objects.KeyMaterialStruct or"},{"line_number":394,"context_line":"                        key_value_type \u003d\u003d kmip_objects.KeyMaterial):"},{"line_number":395,"context_line":"                    secret_value \u003d base64.b64encode(eval("},{"line_number":396,"context_line":"                        secret_block.key_value.key_material.value)[\u0027bytes\u0027])"},{"line_number":397,"context_line":"                else:"},{"line_number":398,"context_line":"                    msg \u003d u._("}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_fad39ad2","line":395,"in_reply_to":"9a80dd14_7c296a9a","updated":"2015-03-18 19:52:52.000000000","message":"This was the bug I found.  secret_block.key_value.key_material.value is something like:\n\n\"{ bytes: \u0027b\u0027\u003cactual secret here\u0027\u003e}\", so the secret store was treating the whole thing as the secret.  eval turns it into an actual dictionary object and [bytes] pulls out only the secret data","commit_id":"a526f87666737518d84a5387898a78618a801bf3"},{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"414c0075c0cc6673386d798859e488eba848f8fa","unresolved":false,"context_lines":[{"line_number":392,"context_line":"                key_value_type \u003d type(secret_block.key_value.key_material)"},{"line_number":393,"context_line":"                if (key_value_type \u003d\u003d kmip_objects.KeyMaterialStruct or"},{"line_number":394,"context_line":"                        key_value_type \u003d\u003d kmip_objects.KeyMaterial):"},{"line_number":395,"context_line":"                    secret_value \u003d base64.b64encode(eval("},{"line_number":396,"context_line":"                        secret_block.key_value.key_material.value)[\u0027bytes\u0027])"},{"line_number":397,"context_line":"                else:"},{"line_number":398,"context_line":"                    msg \u003d u._("}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_b0b863c8","line":395,"in_reply_to":"9a80dd14_b514d59f","updated":"2015-03-18 20:32:25.000000000","message":"False alarm!  This is just a \"bug\" because I was mocking things wrong...\n\nwill change it back to not use eval..","commit_id":"a526f87666737518d84a5387898a78618a801bf3"},{"author":{"_account_id":7764,"name":"Peter Hamilton","email":"peter.hamilton@jhuapl.edu","username":"Peter"},"change_message_id":"55d54f396f45e328a32c7e6285df66050fdf475f","unresolved":false,"context_lines":[{"line_number":392,"context_line":"                key_value_type \u003d type(secret_block.key_value.key_material)"},{"line_number":393,"context_line":"                if (key_value_type \u003d\u003d kmip_objects.KeyMaterialStruct or"},{"line_number":394,"context_line":"                        key_value_type \u003d\u003d kmip_objects.KeyMaterial):"},{"line_number":395,"context_line":"                    secret_value \u003d base64.b64encode(eval("},{"line_number":396,"context_line":"                        secret_block.key_value.key_material.value)[\u0027bytes\u0027])"},{"line_number":397,"context_line":"                else:"},{"line_number":398,"context_line":"                    msg \u003d u._("}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_b514d59f","line":395,"in_reply_to":"9a80dd14_fad39ad2","updated":"2015-03-18 20:15:33.000000000","message":"That bytes dictionary was how I was feeding the bytes into the secret factory to instantiate the key_material when manually creating a secret. The dictionary itself shouldn\u0027t be the value stored in the key_material object. The key_material.value should just be a byte string (e.g., b\u0027\\x00\\x01\\x02...\u0027).\n\nIf it is returning that dictionary, I\u0027ll need to add that to my list of things to fix, \u0027cause it\u0027s wrong.","commit_id":"a526f87666737518d84a5387898a78618a801bf3"},{"author":{"_account_id":7764,"name":"Peter Hamilton","email":"peter.hamilton@jhuapl.edu","username":"Peter"},"change_message_id":"2a804a8d687ef59a7523df1b566cf5398cd3527f","unresolved":false,"context_lines":[{"line_number":193,"context_line":"                      \"generation\")"},{"line_number":194,"context_line":"            result \u003d self.client.create(object_type\u003dobject_type,"},{"line_number":195,"context_line":"                                        template_attribute\u003dtemplate_attribute,"},{"line_number":196,"context_line":"                                        credential\u003dself.credential)"},{"line_number":197,"context_line":"        except Exception as e:"},{"line_number":198,"context_line":"            LOG.exception(\"Error opening or writing to client\")"},{"line_number":199,"context_line":"            raise ss.SecretGeneralException(str(e))"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_e0ef681b","line":196,"updated":"2015-03-18 22:25:14.000000000","message":"I was worried that this wouldn\u0027t work at first, since the arguments aren\u0027t technically keyword args, but it does. Nice!","commit_id":"72834df0a39495abffbc123dd57fab87941612fa"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"4acf9cea88defbeeecf38190260cfd5a26d622de","unresolved":false,"context_lines":[{"line_number":235,"context_line":"            raise KMIPSecretStoreError("},{"line_number":236,"context_line":"                u._(\u0027KMIP plugin does not currently support protecting the \u0027"},{"line_number":237,"context_line":"                    \u0027private key with a passphrase\u0027))"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        algorithm \u003d self._create_cryptographic_algorithm_attribute("},{"line_number":240,"context_line":"            key_spec.alg)"},{"line_number":241,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_7602590d","line":238,"updated":"2015-03-19 02:43:54.000000000","message":"Is this something that you plan to support?  If not, or if not in the near future, it would be better to add something to the key spec about passphrase_encryption required, so that KMIP Plugin would not be selected in the first place.\n\nOtherwise, as I understand it, KMIPSecretStoreError will result in a 500 error somewhere in the server.","commit_id":"8beb2f4eefb8ed8232e76ce27f49cf6cf4f91b91"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"943776d3988efc78a5c055896166465073858c9d","unresolved":false,"context_lines":[{"line_number":235,"context_line":"            raise KMIPSecretStoreError("},{"line_number":236,"context_line":"                u._(\u0027KMIP plugin does not currently support protecting the \u0027"},{"line_number":237,"context_line":"                    \u0027private key with a passphrase\u0027))"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        algorithm \u003d self._create_cryptographic_algorithm_attribute("},{"line_number":240,"context_line":"            key_spec.alg)"},{"line_number":241,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_ae46e8a4","line":238,"in_reply_to":"9a80dd14_7602590d","updated":"2015-03-20 15:30:54.000000000","message":"We plan to implement this in the near future. The first step is storing KMIP SecretData to store the passphrase. That should not take too long to implement.","commit_id":"8beb2f4eefb8ed8232e76ce27f49cf6cf4f91b91"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"4acf9cea88defbeeecf38190260cfd5a26d622de","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        try:"},{"line_number":252,"context_line":"            self.client.open()"},{"line_number":253,"context_line":"            LOG.debug(\"Opened connection to KMIP client for asymmetric \" +"},{"line_number":254,"context_line":"                      \"secret generation\")"},{"line_number":255,"context_line":"            result \u003d self.client.create_key_pair("},{"line_number":256,"context_line":"                common_template_attribute\u003dcommon,"},{"line_number":257,"context_line":"                credential\u003dself.credential)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_d9041617","line":254,"updated":"2015-03-19 02:43:54.000000000","message":"nit: \"+\" at the end is not needed","commit_id":"8beb2f4eefb8ed8232e76ce27f49cf6cf4f91b91"}],"barbican/tests/plugin/test_kmip.py":[{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"55b729167b2b7f8a627a1208811ac14ee4edcd2c","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            return_value\u003dresults.CreateKeyPairResult("},{"line_number":72,"context_line":"                contents.ResultStatus(enums.ResultStatus.SUCCESS),"},{"line_number":73,"context_line":"                private_key_uuid\u003dattr.UniqueIdentifier(\u0027uuid\u0027),"},{"line_number":74,"context_line":"                public_key_uuid\u003dattr.UniqueIdentifier(\u0027uuid\u0027)))"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        self.secret_store.client.register \u003d mock.MagicMock("},{"line_number":77,"context_line":"            proxy.KMIPProxy.register, return_value\u003dresults.RegisterResult("}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_74a228af","line":74,"updated":"2015-03-13 16:42:42.000000000","message":"I think an identifier that looked more real would be better. Reading the tests made this confusing because it said the expected uuid is \u0027uuid.\u0027 I thought maybe you had the dictionary backwards or incorrect.\n\nMake those instance variables, so you can reference in test.","commit_id":"fffc22ef6b7589479e13cb9c3c86d82b1ca46250"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"55b729167b2b7f8a627a1208811ac14ee4edcd2c","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        self.secret_store.client.create_key_pair.assert_called_once_with("},{"line_number":192,"context_line":"            common_template_attribute\u003dmock.ANY,"},{"line_number":193,"context_line":"            private_key_template_attribute\u003dmock.ANY,"},{"line_number":194,"context_line":"            public_key_template_attribute\u003dmock.ANY,"},{"line_number":195,"context_line":"            credential\u003dmock.ANY)"},{"line_number":196,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_94531c16","line":193,"updated":"2015-03-13 16:42:42.000000000","message":"It might be good to validate that we are passing the correct values.","commit_id":"fffc22ef6b7589479e13cb9c3c86d82b1ca46250"},{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"db2b7c44b901f316045bb90137b83b2b6c184133","unresolved":false,"context_lines":[{"line_number":467,"context_line":"                   secret_store.KeyAlgorithm.DES,"},{"line_number":468,"context_line":"                   secret_store.KeyAlgorithm.DESEDE,"},{"line_number":469,"context_line":"                   secret_store.KeyAlgorithm.RSA,"},{"line_number":470,"context_line":"                   secret_store.KeyAlgorithm.DSA]"},{"line_number":471,"context_line":"        for alg in ss_algs:"},{"line_number":472,"context_line":"            self.assertIsNotNone("},{"line_number":473,"context_line":"                self.secret_store._map_algorithm_ss_to_kmip(alg))"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_636b7d1e","line":470,"updated":"2015-03-12 21:54:58.000000000","message":"add other EC algorithms","commit_id":"fffc22ef6b7589479e13cb9c3c86d82b1ca46250"},{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"660e30c99656768985547cf954bcf009acf287bd","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        self.secret_store.generate_asymmetric_key(key_spec)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        self.secret_store.client.create_key_pair.assert_called_once_with("},{"line_number":212,"context_line":"            common_template_attribute\u003dmock.ANY,"},{"line_number":213,"context_line":"            credential\u003dmock.ANY)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def test_generate_asymmetric_key_return_value(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_b36f4dfb","line":212,"updated":"2015-03-13 20:09:53.000000000","message":"test actual values","commit_id":"91813ab14b54b28686cccdd95f23eeb1cc38fdba"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"755787b2dc7ba2a75de67f8d37120f1f0c9f8795","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        self.secret_store.client.create.assert_called_once_with("},{"line_number":160,"context_line":"            object_type\u003denums.ObjectType.SYMMETRIC_KEY,"},{"line_number":161,"context_line":"            template_attribute\u003dmock.ANY,"},{"line_number":162,"context_line":"            credential\u003dself.credential)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def test_generate_symmetric_key_return_value(self):"},{"line_number":165,"context_line":"        key_spec \u003d secret_store.KeySpec(secret_store.KeyAlgorithm.AES,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_91a44e4c","line":162,"updated":"2015-03-18 17:24:47.000000000","message":"Probably want to check return value. We are expecting the UUID to be returned in the metadata.\n\nNow I see you have that in the next test. Why did you decide to make them separate? I think they could go together.","commit_id":"c836139899d12880b0bdb45c4a2be12268271434"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"755787b2dc7ba2a75de67f8d37120f1f0c9f8795","unresolved":false,"context_lines":[{"line_number":227,"context_line":"            common_template_attribute\u003dmock.ANY,"},{"line_number":228,"context_line":"            credential\u003dself.credential)"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def test_generate_asymmetric_key_return_value(self):"},{"line_number":231,"context_line":"        key_spec \u003d secret_store.KeySpec(secret_store.KeyAlgorithm.RSA,"},{"line_number":232,"context_line":"                                        2048, \u0027mode\u0027)"},{"line_number":233,"context_line":"        return_value \u003d self.secret_store.generate_asymmetric_key(key_spec)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_9100ce03","line":230,"updated":"2015-03-18 17:24:47.000000000","message":"Same comment as above about combining these.","commit_id":"c836139899d12880b0bdb45c4a2be12268271434"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"755787b2dc7ba2a75de67f8d37120f1f0c9f8795","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        self.assertRaises("},{"line_number":299,"context_line":"            secret_store.SecretGeneralException,"},{"line_number":300,"context_line":"            self.secret_store.generate_asymmetric_key,"},{"line_number":301,"context_line":"            key_spec)"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    # ----------------- TEST STORE -------------------------------------------"},{"line_number":304,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_6c3381f6","line":301,"updated":"2015-03-18 17:24:47.000000000","message":"+1 on adding a lot of good test cases.","commit_id":"c836139899d12880b0bdb45c4a2be12268271434"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"755787b2dc7ba2a75de67f8d37120f1f0c9f8795","unresolved":false,"context_lines":[{"line_number":390,"context_line":"            self.secret_store.store_secret,"},{"line_number":391,"context_line":"            secret_dto)"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"    # --------------- TEST GET -----------------------------------------------"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"    def test_get_secret_symmetric_assert_called(self):"},{"line_number":396,"context_line":"        metadata \u003d {kss.KMIPSecretStore.KEY_UUID: self.symmetric_key_uuid}"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_4cbebd01","line":393,"updated":"2015-03-18 17:24:47.000000000","message":"I would like to see a test case for getting a key of type private and public. I want to make sure the return is a PEM encoded secret.","commit_id":"c836139899d12880b0bdb45c4a2be12268271434"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"a8595efb692e55dd3d8e6486782526178674c9cf","unresolved":false,"context_lines":[{"line_number":443,"context_line":"                        \"-----BEGIN PRIVATE KEY-----\""},{"line_number":444,"context_line":"                        \"AAAA\""},{"line_number":445,"context_line":"                        \"-----END PRIVATE KEY-----\"],"},{"line_number":446,"context_line":"        \u0027opaque\u0027: [secret_store.SecretType.OPAQUE,"},{"line_number":447,"context_line":"                   None,"},{"line_number":448,"context_line":"                   \"AAAA\"]"},{"line_number":449,"context_line":"    })"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_9a81be4f","line":446,"updated":"2015-03-18 19:44:48.000000000","message":"Per our conversation please use real public and private keys from utils.\n\nYou can remove this test as well because we will not support opaque data types.","commit_id":"a526f87666737518d84a5387898a78618a801bf3"},{"author":{"_account_id":7764,"name":"Peter Hamilton","email":"peter.hamilton@jhuapl.edu","username":"Peter"},"change_message_id":"2a804a8d687ef59a7523df1b566cf5398cd3527f","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            enums.CryptographicAlgorithm.AES),"},{"line_number":49,"context_line":"        cryptographic_length\u003dattr.CryptographicLength(128),"},{"line_number":50,"context_line":"        key_wrapping_data\u003dNone)"},{"line_number":51,"context_line":"    return secrets.SymmetricKey(key_block)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def get_sample_public_key():"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_a0b650da","line":51,"updated":"2015-03-18 22:25:14.000000000","message":"Yep, this looks great!","commit_id":"72834df0a39495abffbc123dd57fab87941612fa"},{"author":{"_account_id":7764,"name":"Peter Hamilton","email":"peter.hamilton@jhuapl.edu","username":"Peter"},"change_message_id":"2a804a8d687ef59a7523df1b566cf5398cd3527f","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            enums.CryptographicAlgorithm.RSA),"},{"line_number":64,"context_line":"        cryptographic_length\u003dattr.CryptographicLength(1024),"},{"line_number":65,"context_line":"        key_wrapping_data\u003dNone)"},{"line_number":66,"context_line":"    return secrets.PublicKey(key_block)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"def get_sample_private_key():"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_e0acc88a","line":66,"updated":"2015-03-18 22:25:14.000000000","message":"Ditto","commit_id":"72834df0a39495abffbc123dd57fab87941612fa"},{"author":{"_account_id":7764,"name":"Peter Hamilton","email":"peter.hamilton@jhuapl.edu","username":"Peter"},"change_message_id":"2a804a8d687ef59a7523df1b566cf5398cd3527f","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            enums.CryptographicAlgorithm.RSA),"},{"line_number":79,"context_line":"        cryptographic_length\u003dattr.CryptographicLength(1024),"},{"line_number":80,"context_line":"        key_wrapping_data\u003dNone)"},{"line_number":81,"context_line":"    return secrets.PrivateKey(key_block)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"@utils.parameterized_test_case"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_20ca604f","line":81,"updated":"2015-03-18 22:25:14.000000000","message":"And ditto again","commit_id":"72834df0a39495abffbc123dd57fab87941612fa"}],"barbican/tests/utils.py":[{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"7dd0ffff231d38e8aa4fc8b7f914d889cef7c768","unresolved":false,"context_lines":[{"line_number":463,"context_line":"         \"t4FO5IXBaPmb0ltEyFJGOC8oUIhBHvmu5BhT4VfCMCFnXOrVYguAa3SH2HxP54Wb\""},{"line_number":464,"context_line":"         \"xfycCNow5ikujEfdvsAZi1tnKedFRnJhdANCAM+6+fTNUzNElUW6kjuvwWWnRq7C\""},{"line_number":465,"context_line":"         \"iCHqhd5ssVa8vMjPjQJBAPpMz0rXo2DDtYqQLOnWwAbV+djM1+ldmBdh/Q4zETDO\""},{"line_number":466,"context_line":"         \"xgPfUvLBhU40LJt8NQeia6Ce4oYH+W4WRyNYvvmcGz8CQQDQ9V/8IuMJN6vyAKrc\""},{"line_number":467,"context_line":"         \"WMPyLfYFu3wJ74/DX0EZ7lf+UhTlCEwEQaVQ78El1oFJDl7cjnH3Ay5GNsFfHOfd\""},{"line_number":468,"context_line":"         \"uaHnAkAa21MCvNCS+WzpST8IeDpygVMlqBUivSAsoh78/w3BJu6oS7YixhD/qyl+\""},{"line_number":469,"context_line":"         \"JX2rLApQWbwElaZ14X4QlN0o+08RAkEAi79vIDtcx69Z6ZGUs6UR9wfR/+dxf1ue\""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_7a4245ac","side":"PARENT","line":466,"updated":"2015-03-18 21:38:33.000000000","message":"Don\u0027t know how this happened...","commit_id":"f231de64261c8b54d2e0854598f60bd8a396a96b"}],"etc/barbican/barbican-api.conf":[{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"c24d6e4447ec820ca063851e725e847b6d7a59da","unresolved":false,"context_lines":[{"line_number":228,"context_line":"username \u003d \u0027admin\u0027"},{"line_number":229,"context_line":"password \u003d \u0027password\u0027"},{"line_number":230,"context_line":"host \u003d localhost"},{"line_number":231,"context_line":"port \u003d 5696"},{"line_number":232,"context_line":"keyfile \u003d \u0027/path/to/certs/cert.key\u0027"},{"line_number":233,"context_line":"certfile \u003d \u0027/path/to/certs/cert.crt\u0027"},{"line_number":234,"context_line":"ca_certs \u003d \u0027/path/to/certs/LocalCA.crt\u0027"}],"source_content_type":"text/plain","patch_set":3,"id":"9a80dd14_6353996c","line":231,"updated":"2015-03-18 15:50:52.000000000","message":"Did you mean to change this?","commit_id":"dca3a494f7957fe880a7e13f830b8fceb5e7db18"}]}
