)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11716,"name":"Tim Kelsey","email":"timothy.kelsey@uk.ibm.com","username":"tkelsey"},"change_message_id":"f98fabe377d6f9d6c9c971db20b21905065c99c8","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2014-09-08 13:36:18 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add asymmtric order validator"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I9d2bf700535458fd53c569830e3e177770688b4d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"fa98f980_f9204bfa","line":8,"updated":"2014-09-09 12:00:36.000000000","message":"More info please, whats it for, where is it used?","commit_id":"6569ef965872897d619cf3c76fba3572484e9c37"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"e57955d078813a2a7cda5d8e7c400461e96d87d6","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2014-09-08 13:36:18 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add asymmtric order validator"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I9d2bf700535458fd53c569830e3e177770688b4d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"fa98f980_6abc746d","line":8,"in_reply_to":"fa98f980_f9204bfa","updated":"2014-09-09 14:46:38.000000000","message":"sure","commit_id":"6569ef965872897d619cf3c76fba3572484e9c37"},{"author":{"_account_id":11716,"name":"Tim Kelsey","email":"timothy.kelsey@uk.ibm.com","username":"tkelsey"},"change_message_id":"0a1b4e78bfeb59fb7d65bd2050faa53a7f983c55","unresolved":false,"context_lines":[{"line_number":10,"context_line":"asymmetric type order processing. This is"},{"line_number":11,"context_line":"part of multi phase implementation of"},{"line_number":12,"context_line":"api-orders-add-more-types BP."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I9d2bf700535458fd53c569830e3e177770688b4d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"fa98f980_a5eccd2a","line":13,"updated":"2014-09-09 14:55:28.000000000","message":"I think it is typical to add a white-space separated line such as \"Implements: blueprint api-orders-add-more-types\" so that it can be auto tracked back to that bp in launchpad. Though I\u0027m not completely sure for partial implementations?","commit_id":"b1ab549cd6f2e4a7d2a7902f5718c72ddb592adf"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"eae450c146978b3d2a7fa912de86e3c5acb001b7","unresolved":false,"context_lines":[{"line_number":10,"context_line":"asymmetric type order processing. This is"},{"line_number":11,"context_line":"part of multi phase implementation of"},{"line_number":12,"context_line":"api-orders-add-more-types BP."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I9d2bf700535458fd53c569830e3e177770688b4d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"fa98f980_c0829fff","line":13,"in_reply_to":"fa98f980_a5eccd2a","updated":"2014-09-09 15:31:34.000000000","message":"done, please check","commit_id":"b1ab549cd6f2e4a7d2a7902f5718c72ddb592adf"}],"barbican/common/validators.py":[{"author":{"_account_id":10873,"name":"Juan Antonio Osorio Robles","email":"jaosorior@redhat.com","username":"ejuaoso"},"change_message_id":"9d2b0adb173dbdb2395278a2027f44b5b17eda4f","unresolved":false,"context_lines":[{"line_number":343,"context_line":"                              schema_name,"},{"line_number":344,"context_line":"                              u._(\"\u0027meta\u0027 attributes is required\"), \"meta\")"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"    def _extract_expiration(self, json_data, schema_name):"},{"line_number":347,"context_line":"        \"\"\"Extracts and returns the expiration date from the JSON data.\"\"\""},{"line_number":348,"context_line":"        expiration \u003d None"},{"line_number":349,"context_line":"        expiration_raw \u003d json_data.get(\u0027expiration\u0027, None)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa98f980_0cd0f6f4","side":"PARENT","line":346,"updated":"2014-09-04 09:32:57.000000000","message":"Could you please specify in your commit message why you deleted this function? even though it is not used in this class, I would rather have this in a separate CR, since it\u0027s not related to what you\u0027re adding. Or, at least I would like to have this mentioned in the commit message.","commit_id":"afade8637917a988f40114acbda5b3ad06b5a85f"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"f61c3517761465c66f5ffc0b0e97de68cb3cd17b","unresolved":false,"context_lines":[{"line_number":343,"context_line":"                              schema_name,"},{"line_number":344,"context_line":"                              u._(\"\u0027meta\u0027 attributes is required\"), \"meta\")"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"    def _extract_expiration(self, json_data, schema_name):"},{"line_number":347,"context_line":"        \"\"\"Extracts and returns the expiration date from the JSON data.\"\"\""},{"line_number":348,"context_line":"        expiration \u003d None"},{"line_number":349,"context_line":"        expiration_raw \u003d json_data.get(\u0027expiration\u0027, None)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa98f980_29120162","side":"PARENT","line":346,"in_reply_to":"fa98f980_0cd0f6f4","updated":"2014-09-04 14:39:43.000000000","message":"done","commit_id":"afade8637917a988f40114acbda5b3ad06b5a85f"},{"author":{"_account_id":10873,"name":"Juan Antonio Osorio Robles","email":"jaosorior@redhat.com","username":"ejuaoso"},"change_message_id":"9d2b0adb173dbdb2395278a2027f44b5b17eda4f","unresolved":false,"context_lines":[{"line_number":341,"context_line":"        secret_validator.validate(asymmetric_meta, parent_schema\u003dself.name)"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        if asymmetric_meta.get(\u0027payload_content_type\u0027, \u0027\u0027).lower() !\u003d\\"},{"line_number":344,"context_line":"                \u0027application/octet-stream\u0027:"},{"line_number":345,"context_line":"            raise exception.UnsupportedField(field\u003d\u0027payload_content_type\u0027,"},{"line_number":346,"context_line":"                                             schema\u003dschema_name,"},{"line_number":347,"context_line":"                                             reason\u003du._(\"Only \u0027application/oc\""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa98f980_acc8caa8","line":344,"updated":"2014-09-04 09:32:57.000000000","message":"the newer hacking checks disallow the usage of \u0027\\\u0027, please use parentheses instead.","commit_id":"afc41c77b63cf5250cf90ea41c23b8f8606458bd"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"f61c3517761465c66f5ffc0b0e97de68cb3cd17b","unresolved":false,"context_lines":[{"line_number":341,"context_line":"        secret_validator.validate(asymmetric_meta, parent_schema\u003dself.name)"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        if asymmetric_meta.get(\u0027payload_content_type\u0027, \u0027\u0027).lower() !\u003d\\"},{"line_number":344,"context_line":"                \u0027application/octet-stream\u0027:"},{"line_number":345,"context_line":"            raise exception.UnsupportedField(field\u003d\u0027payload_content_type\u0027,"},{"line_number":346,"context_line":"                                             schema\u003dschema_name,"},{"line_number":347,"context_line":"                                             reason\u003du._(\"Only \u0027application/oc\""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa98f980_e91b997e","line":344,"in_reply_to":"fa98f980_acc8caa8","updated":"2014-09-04 14:39:43.000000000","message":"done","commit_id":"afc41c77b63cf5250cf90ea41c23b8f8606458bd"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"954a4c39afa85f5be8e6f652f1d738c1ce46e434","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        self._assert_validity(asymmetric_meta is not None,"},{"line_number":336,"context_line":"                              schema_name,"},{"line_number":337,"context_line":"                              u._(\"\u0027meta\u0027 attributes is required\"), \"meta\")"},{"line_number":338,"context_line":"        # Note (atiwari): NewSecretValidator can be used for common"},{"line_number":339,"context_line":"        # validations."},{"line_number":340,"context_line":"        secret_validator \u003d NewSecretValidator()"},{"line_number":341,"context_line":"        secret_validator.validate(asymmetric_meta, parent_schema\u003dself.name)"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_18163b49","line":338,"updated":"2014-09-15 23:07:02.000000000","message":"Since this is not a temporary note, but rather a comment, please replace with something like this:\n# Validate secret metadata.","commit_id":"1d8e5d0a369bd80a3e576eaba779a33c4ee07dc7"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"98474484f7d7b6b8f3bf1f99ef23081781e0d0f2","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        self._assert_validity(asymmetric_meta is not None,"},{"line_number":336,"context_line":"                              schema_name,"},{"line_number":337,"context_line":"                              u._(\"\u0027meta\u0027 attributes is required\"), \"meta\")"},{"line_number":338,"context_line":"        # Note (atiwari): NewSecretValidator can be used for common"},{"line_number":339,"context_line":"        # validations."},{"line_number":340,"context_line":"        secret_validator \u003d NewSecretValidator()"},{"line_number":341,"context_line":"        secret_validator.validate(asymmetric_meta, parent_schema\u003dself.name)"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_12460150","line":338,"in_reply_to":"fa98f980_18163b49","updated":"2014-09-16 20:19:20.000000000","message":"I will fix it","commit_id":"1d8e5d0a369bd80a3e576eaba779a33c4ee07dc7"}],"barbican/plugin/interface/secret_store.py":[{"author":{"_account_id":10873,"name":"Juan Antonio Osorio Robles","email":"jaosorior@redhat.com","username":"ejuaoso"},"change_message_id":"9d2b0adb173dbdb2395278a2027f44b5b17eda4f","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                return SecretType.SYMMETRIC"},{"line_number":204,"context_line":"            elif alg.lower() in self.ASYMMETRIC_ALGORITHMS:"},{"line_number":205,"context_line":"                # Need better constant to represent ASYMMETRIC"},{"line_number":206,"context_line":"                # keys ASYMMETRIC/KEYPAIR (Please vote)"},{"line_number":207,"context_line":"                return SecretType.PRIVATE"},{"line_number":208,"context_line":"            else:"},{"line_number":209,"context_line":"                return None"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa98f980_ec73b27d","line":206,"updated":"2014-09-04 09:32:57.000000000","message":"I agree. Though, could you please add \"NOTE\" with your username there?","commit_id":"afc41c77b63cf5250cf90ea41c23b8f8606458bd"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"9c01b63ac8a4ebf5348e14fa5bc10b889afa0012","unresolved":false,"context_lines":[{"line_number":204,"context_line":"            elif alg.lower() in self.ASYMMETRIC_ALGORITHMS:"},{"line_number":205,"context_line":"                # Note (atiwari): Need better constant to represent"},{"line_number":206,"context_line":"                # ASYMMETRIC keys ASYMMETRIC/KEYPAIR (Please vote)"},{"line_number":207,"context_line":"                return SecretType.PRIVATE"},{"line_number":208,"context_line":"            else:"},{"line_number":209,"context_line":"                return None"},{"line_number":210,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa98f980_daf6925c","line":207,"updated":"2014-09-04 17:24:21.000000000","message":"I vote for SecretType.ASYMMETRIC\nBut then I think we need to remove PUBLIC and PRIVATE above.","commit_id":"d6bf391eafcde9d7b5636035af50466d2aae2136"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"ba957cc0efa98918c4dc61e22177f654b3a6ba5d","unresolved":false,"context_lines":[{"line_number":204,"context_line":"            elif alg.lower() in self.ASYMMETRIC_ALGORITHMS:"},{"line_number":205,"context_line":"                # Note (atiwari): Need better constant to represent"},{"line_number":206,"context_line":"                # ASYMMETRIC keys ASYMMETRIC/KEYPAIR (Please vote)"},{"line_number":207,"context_line":"                return SecretType.PRIVATE"},{"line_number":208,"context_line":"            else:"},{"line_number":209,"context_line":"                return None"},{"line_number":210,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa98f980_11c8df53","line":207,"in_reply_to":"fa98f980_daf6925c","updated":"2014-09-05 14:57:09.000000000","message":"Made changes as per Ade Lee\u0027s vote. Did not remove other.","commit_id":"d6bf391eafcde9d7b5636035af50466d2aae2136"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"9b349da5a9fbbf6fd8bd6f8d912dde955869fb56","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    \"\"\""},{"line_number":158,"context_line":"    SYMMETRIC \u003d \"symmetric\""},{"line_number":159,"context_line":"    \"\"\"Constant to define the asymmetric key type. Used by getSecret to"},{"line_number":160,"context_line":"    retrieve a asymmetric key."},{"line_number":161,"context_line":"    \"\"\""},{"line_number":162,"context_line":"    ASYMMETRIC \u003d \"asymmetric\""},{"line_number":163,"context_line":"    \"\"\"Constant to define the public key type. Used by getSecret to retrieve a"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_03b87129","line":160,"updated":"2014-09-07 21:50:26.000000000","message":"nit - \"an asymmetric\"","commit_id":"ccf61561d4e8df073f1502c129e7ce08f8834a04"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"a04e9a6b6a8d9493e200c094a8010b5d0060919b","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    \"\"\""},{"line_number":158,"context_line":"    SYMMETRIC \u003d \"symmetric\""},{"line_number":159,"context_line":"    \"\"\"Constant to define the asymmetric key type. Used by getSecret to"},{"line_number":160,"context_line":"    retrieve a asymmetric key."},{"line_number":161,"context_line":"    \"\"\""},{"line_number":162,"context_line":"    ASYMMETRIC \u003d \"asymmetric\""},{"line_number":163,"context_line":"    \"\"\"Constant to define the public key type. Used by getSecret to retrieve a"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_eb240ab1","line":160,"in_reply_to":"fa98f980_03b87129","updated":"2014-09-08 17:29:10.000000000","message":"fixed","commit_id":"ccf61561d4e8df073f1502c129e7ce08f8834a04"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"9b349da5a9fbbf6fd8bd6f8d912dde955869fb56","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        if alg and isinstance(alg, six.string_types):"},{"line_number":205,"context_line":"            if alg.lower() in self.SYMMETRIC_ALGORITHMS:"},{"line_number":206,"context_line":"                return SecretType.SYMMETRIC"},{"line_number":207,"context_line":"            elif alg.lower() in self.ASYMMETRIC_ALGORITHMS:"},{"line_number":208,"context_line":"                return SecretType.ASYMMETRIC"},{"line_number":209,"context_line":"            else:"},{"line_number":210,"context_line":"                return None"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_4381994c","line":207,"updated":"2014-09-07 21:50:26.000000000","message":"calling alg.lower twice here","commit_id":"ccf61561d4e8df073f1502c129e7ce08f8834a04"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"fc272bf5fde82b1f1c4ee9575675bb66fc732d0a","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        if alg and isinstance(alg, six.string_types):"},{"line_number":205,"context_line":"            if alg.lower() in self.SYMMETRIC_ALGORITHMS:"},{"line_number":206,"context_line":"                return SecretType.SYMMETRIC"},{"line_number":207,"context_line":"            elif alg.lower() in self.ASYMMETRIC_ALGORITHMS:"},{"line_number":208,"context_line":"                return SecretType.ASYMMETRIC"},{"line_number":209,"context_line":"            else:"},{"line_number":210,"context_line":"                return None"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_1801a639","line":207,"in_reply_to":"fa98f980_4381994c","updated":"2014-09-08 17:28:34.000000000","message":"I think I am not getting your comment.","commit_id":"ccf61561d4e8df073f1502c129e7ce08f8834a04"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"13791b7b6b678017bdf07c1f3e0916002a0fe45f","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    \"\"\"Constant to define the asymmetric key type. Used by getSecret to"},{"line_number":160,"context_line":"    retrieve an asymmetric key."},{"line_number":161,"context_line":"    \"\"\""},{"line_number":162,"context_line":"    ASYMMETRIC \u003d \"asymmetric\""},{"line_number":163,"context_line":"    \"\"\"Constant to define the public key type. Used by getSecret to retrieve a"},{"line_number":164,"context_line":"    public key."},{"line_number":165,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_253764e4","line":162,"updated":"2014-09-15 13:34:18.000000000","message":"Asymmetric keys are represented by public and private key types. This should be removed. If you want a public key specify public, similar for private.","commit_id":"1d8e5d0a369bd80a3e576eaba779a33c4ee07dc7"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"954a4c39afa85f5be8e6f652f1d738c1ce46e434","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    \"\"\"Constant to define the asymmetric key type. Used by getSecret to"},{"line_number":160,"context_line":"    retrieve an asymmetric key."},{"line_number":161,"context_line":"    \"\"\""},{"line_number":162,"context_line":"    ASYMMETRIC \u003d \"asymmetric\""},{"line_number":163,"context_line":"    \"\"\"Constant to define the public key type. Used by getSecret to retrieve a"},{"line_number":164,"context_line":"    public key."},{"line_number":165,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_8d390bf4","line":162,"in_reply_to":"fa98f980_253764e4","updated":"2014-09-15 23:07:02.000000000","message":"I agree with these comments as well. The SecretType is used with the secret_store.py module, which is used to store individual secrets, not Containers where the \u0027asymmetric\u0027 type would make sense. If we ever do go the route of making containers a type of secret, \u0027asymmetric\u0027 might make more sense to consider.","commit_id":"1d8e5d0a369bd80a3e576eaba779a33c4ee07dc7"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"e4029767c289eb24dfea05d09ed256d5327aba28","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    \"\"\"Constant to define the asymmetric key type. Used by getSecret to"},{"line_number":160,"context_line":"    retrieve an asymmetric key."},{"line_number":161,"context_line":"    \"\"\""},{"line_number":162,"context_line":"    ASYMMETRIC \u003d \"asymmetric\""},{"line_number":163,"context_line":"    \"\"\"Constant to define the public key type. Used by getSecret to retrieve a"},{"line_number":164,"context_line":"    public key."},{"line_number":165,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_8380e1f8","line":162,"in_reply_to":"fa98f980_52296988","updated":"2014-09-16 17:25:21.000000000","message":"This is the problem with not requiring type to be passed as an argument to the Barbican API for storing a key. For asymmetric algorithms we can never know the type for sure.\n\nget_secret_type was added as a convenience method for KMIP, which does require a type to be specified. Without this method then KMIP would never be able to store a key because the type is not passed in. At least with get_secret_type we can deduce the key type from the algorithm.\n\nWe have said that if None is returned then some secret stores can support that. Barbican HSM can support that.","commit_id":"1d8e5d0a369bd80a3e576eaba779a33c4ee07dc7"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"1ce9fe50e4463ce2d9b64348c9da5f1498b017f2","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    \"\"\"Constant to define the asymmetric key type. Used by getSecret to"},{"line_number":160,"context_line":"    retrieve an asymmetric key."},{"line_number":161,"context_line":"    \"\"\""},{"line_number":162,"context_line":"    ASYMMETRIC \u003d \"asymmetric\""},{"line_number":163,"context_line":"    \"\"\"Constant to define the public key type. Used by getSecret to retrieve a"},{"line_number":164,"context_line":"    public key."},{"line_number":165,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_52296988","line":162,"in_reply_to":"fa98f980_59a434b9","updated":"2014-09-16 15:32:52.000000000","message":"OK - I stand corrected.  \n\nIn that case, we should be passing in PUBLIC/PRIVATE.  I\u0027m curious how we would know that?  Certainly, one cannot determine this just from the algorithm.\n\nThe other place Arvind is calling it is in store_crypto() (which is not in barbican-core) in generate_supports(), but I think that the way its being used here is a little hacky.","commit_id":"1d8e5d0a369bd80a3e576eaba779a33c4ee07dc7"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"59608d7457363077b01bb0e9f596ecddfbb57090","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    \"\"\"Constant to define the asymmetric key type. Used by getSecret to"},{"line_number":160,"context_line":"    retrieve an asymmetric key."},{"line_number":161,"context_line":"    \"\"\""},{"line_number":162,"context_line":"    ASYMMETRIC \u003d \"asymmetric\""},{"line_number":163,"context_line":"    \"\"\"Constant to define the public key type. Used by getSecret to retrieve a"},{"line_number":164,"context_line":"    public key."},{"line_number":165,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_59a434b9","line":162,"in_reply_to":"fa98f980_6e24da5f","updated":"2014-09-16 14:40:54.000000000","message":"get_secret_type is not used to determine which generateX() function to call. get_secret_type is used in resources.py store_secret(). In fact that is the only place in Barbican core where it is invoked in Arvind\u0027s patch.\n\nIn store_secret it makes a call to get_secret_type, so that the SecretDTO can have a type. The type is used by plugins to determine which type of key is being passed to them. The plugins need to know if symmetric, public, private.\n\nThe SecretType class is only used by the SecretDTO to determine the exact type of a single key being passed to a plugin.","commit_id":"1d8e5d0a369bd80a3e576eaba779a33c4ee07dc7"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"98474484f7d7b6b8f3bf1f99ef23081781e0d0f2","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    \"\"\"Constant to define the asymmetric key type. Used by getSecret to"},{"line_number":160,"context_line":"    retrieve an asymmetric key."},{"line_number":161,"context_line":"    \"\"\""},{"line_number":162,"context_line":"    ASYMMETRIC \u003d \"asymmetric\""},{"line_number":163,"context_line":"    \"\"\"Constant to define the public key type. Used by getSecret to retrieve a"},{"line_number":164,"context_line":"    public key."},{"line_number":165,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_491537e4","line":162,"in_reply_to":"fa98f980_8380e1f8","updated":"2014-09-16 20:19:20.000000000","message":"resources.generate_asymmetric_secret() calls \n\tsecret_store.get_plugin_generate(self, key_spec) calls\n\t\tstore_crepto.generate_supports() calls\n\t\t\t\tstore_crepto.KeyAlgorithm.get_secret_type()\n\nBased on boolean value return by store_crepto.generate_supports(), secret_store.get_plugin_generate(self, key_spec) return the \nplugin object to resources.generate_asymmetric_secret(). \n\nMy code will work as long as I am returning any on KeyAlgorithm().get_secret_type(key_spec.alg)).\n\nNow my question is, for asymmetric algorithms (rsa, dsa ...) what will be the correct? I am open\nPUBLIC\nPRIVATE\nPUBLIC_PRIVATE\nASYMMETRIC\n\nPlease vote again and lets move on. Sooner the better.","commit_id":"1d8e5d0a369bd80a3e576eaba779a33c4ee07dc7"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"f04aa072436aaa9b0fd4404e87a627c1405d7a16","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    \"\"\"Constant to define the asymmetric key type. Used by getSecret to"},{"line_number":160,"context_line":"    retrieve an asymmetric key."},{"line_number":161,"context_line":"    \"\"\""},{"line_number":162,"context_line":"    ASYMMETRIC \u003d \"asymmetric\""},{"line_number":163,"context_line":"    \"\"\"Constant to define the public key type. Used by getSecret to retrieve a"},{"line_number":164,"context_line":"    public key."},{"line_number":165,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_6e24da5f","line":162,"in_reply_to":"fa98f980_8d390bf4","updated":"2014-09-16 03:17:37.000000000","message":"Arvind is trying to specify a type to be returned in get_secret_type(alg) below.  IIRC, this is used to determine which generateX() function to call.  \n\nThere he returns SYMMETRIC or what? (PUBLIC is one possibility, but probably not the best).\n\nSo, the distinction here is that we are Arvind is looking for something to represent symmetric/asymmetric ALGORITHMS.\n\nIn some sense, it makes sense to keep SYMMETRIC/ASYMMETRIC here - and remove PUBLIC and PRIVATE. The plugins will determine what to call the types they generate,  A plugin could call them \"Fred\" and \"Marcy\" for all Barbican-core cares.\n\nFor Barbican-core, PUBLIC/ PRIVATE only matter insofar as they are defined for containers, whereas SYMMETRIC/ASYMMETRIC are defined and used here in secret_store,py to distinguish algorithms.","commit_id":"1d8e5d0a369bd80a3e576eaba779a33c4ee07dc7"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"13791b7b6b678017bdf07c1f3e0916002a0fe45f","unresolved":false,"context_lines":[{"line_number":206,"context_line":"            if alg in self.SYMMETRIC_ALGORITHMS:"},{"line_number":207,"context_line":"                return SecretType.SYMMETRIC"},{"line_number":208,"context_line":"            elif alg in self.ASYMMETRIC_ALGORITHMS:"},{"line_number":209,"context_line":"                return SecretType.ASYMMETRIC"},{"line_number":210,"context_line":"            else:"},{"line_number":211,"context_line":"                return None"},{"line_number":212,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_a5527410","line":209,"updated":"2014-09-15 13:34:18.000000000","message":"See comment above.","commit_id":"1d8e5d0a369bd80a3e576eaba779a33c4ee07dc7"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"98474484f7d7b6b8f3bf1f99ef23081781e0d0f2","unresolved":false,"context_lines":[{"line_number":206,"context_line":"            if alg in self.SYMMETRIC_ALGORITHMS:"},{"line_number":207,"context_line":"                return SecretType.SYMMETRIC"},{"line_number":208,"context_line":"            elif alg in self.ASYMMETRIC_ALGORITHMS:"},{"line_number":209,"context_line":"                return SecretType.ASYMMETRIC"},{"line_number":210,"context_line":"            else:"},{"line_number":211,"context_line":"                return None"},{"line_number":212,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_89d63f26","line":209,"in_reply_to":"fa98f980_a5527410","updated":"2014-09-16 20:19:20.000000000","message":"I will fix it based on feedback","commit_id":"1d8e5d0a369bd80a3e576eaba779a33c4ee07dc7"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"06618fb963ba715042d50603986575457e7fc469","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    \"\"\"Constant to define the asymmetric key type. Used by getSecret to"},{"line_number":160,"context_line":"    retrieve an asymmetric key."},{"line_number":161,"context_line":"    \"\"\""},{"line_number":162,"context_line":"    ASYMMETRIC \u003d \"asymmetric\""},{"line_number":163,"context_line":"    \"\"\"Constant to define the public key type. Used by getSecret to retrieve a"},{"line_number":164,"context_line":"    public key."},{"line_number":165,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"fa98f980_a9422366","line":162,"updated":"2014-09-16 20:37:01.000000000","message":"Please remove this type as we have discussed previously.","commit_id":"4d03b0ba7a92c14d0c62b99f686566e66295f35e"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"983c06c02470bf48bc77d633161b2cb2569b1d20","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    \"\"\"Constant to define the asymmetric key type. Used by getSecret to"},{"line_number":160,"context_line":"    retrieve an asymmetric key."},{"line_number":161,"context_line":"    \"\"\""},{"line_number":162,"context_line":"    ASYMMETRIC \u003d \"asymmetric\""},{"line_number":163,"context_line":"    \"\"\"Constant to define the public key type. Used by getSecret to retrieve a"},{"line_number":164,"context_line":"    public key."},{"line_number":165,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"fa98f980_b40c3a3d","line":162,"in_reply_to":"fa98f980_a9422366","updated":"2014-09-16 20:40:40.000000000","message":"Nathan please take a look at my comment/question.\nI will remove it waiting for your response.\n\nThanks","commit_id":"4d03b0ba7a92c14d0c62b99f686566e66295f35e"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"a78063f8f362980c1287b893c0cd92ebd5d0078f","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    \"\"\"Constant to define the asymmetric key type. Used by getSecret to"},{"line_number":160,"context_line":"    retrieve an asymmetric key."},{"line_number":161,"context_line":"    \"\"\""},{"line_number":162,"context_line":"    ASYMMETRIC \u003d \"asymmetric\""},{"line_number":163,"context_line":"    \"\"\"Constant to define the public key type. Used by getSecret to retrieve a"},{"line_number":164,"context_line":"    public key."},{"line_number":165,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"fa98f980_f91e8b73","line":162,"in_reply_to":"fa98f980_b40c3a3d","updated":"2014-09-18 12:48:00.000000000","message":"In store crypto just check that key_spec.alg in KeyAlgorithm.ASYMMETRIC_ALGORITHMS. You do not need to call get_secret_type.\n\nI think you might be better off listing which algorithms that you specifically are going to support. That list may change in the future and you may not support all of them.","commit_id":"4d03b0ba7a92c14d0c62b99f686566e66295f35e"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"dd2c8692ad4579638eee09a9921858862557db5a","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    \"\"\"Constant to define the asymmetric key type. Used by getSecret to"},{"line_number":160,"context_line":"    retrieve an asymmetric key."},{"line_number":161,"context_line":"    \"\"\""},{"line_number":162,"context_line":"    ASYMMETRIC \u003d \"asymmetric\""},{"line_number":163,"context_line":"    \"\"\"Constant to define the public key type. Used by getSecret to retrieve a"},{"line_number":164,"context_line":"    public key."},{"line_number":165,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"fa98f980_b48245c6","line":162,"in_reply_to":"fa98f980_f91e8b73","updated":"2014-09-18 14:44:37.000000000","message":"Sure, we will see if we need to in future.\n\nthanks","commit_id":"4d03b0ba7a92c14d0c62b99f686566e66295f35e"}],"barbican/tests/common/test_validators.py":[{"author":{"_account_id":10873,"name":"Juan Antonio Osorio Robles","email":"jaosorior@redhat.com","username":"ejuaoso"},"change_message_id":"9d2b0adb173dbdb2395278a2027f44b5b17eda4f","unresolved":false,"context_lines":[{"line_number":1085,"context_line":"        del self.key_order_req[\u0027meta\u0027][\u0027mode\u0027]"},{"line_number":1086,"context_line":""},{"line_number":1087,"context_line":"        result \u003d self.validator.validate(self.key_order_req)"},{"line_number":1088,"context_line":"        self.assertTrue(result is not None)"},{"line_number":1089,"context_line":""},{"line_number":1090,"context_line":""},{"line_number":1091,"context_line":"class WhenTestingAsymmetricTypeOrderValidator(testtools.TestCase):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa98f980_6c07c2ca","line":1088,"updated":"2014-09-04 09:32:57.000000000","message":"What else should there be in the result? perhaps it would be better to check for more fields inside the result? Even though this is being skipped.","commit_id":"afc41c77b63cf5250cf90ea41c23b8f8606458bd"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"f61c3517761465c66f5ffc0b0e97de68cb3cd17b","unresolved":false,"context_lines":[{"line_number":1085,"context_line":"        del self.key_order_req[\u0027meta\u0027][\u0027mode\u0027]"},{"line_number":1086,"context_line":""},{"line_number":1087,"context_line":"        result \u003d self.validator.validate(self.key_order_req)"},{"line_number":1088,"context_line":"        self.assertTrue(result is not None)"},{"line_number":1089,"context_line":""},{"line_number":1090,"context_line":""},{"line_number":1091,"context_line":"class WhenTestingAsymmetricTypeOrderValidator(testtools.TestCase):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa98f980_d4b82c13","line":1088,"in_reply_to":"fa98f980_6c07c2ca","updated":"2014-09-04 14:39:43.000000000","message":"I will enhance it","commit_id":"afc41c77b63cf5250cf90ea41c23b8f8606458bd"},{"author":{"_account_id":10873,"name":"Juan Antonio Osorio Robles","email":"jaosorior@redhat.com","username":"ejuaoso"},"change_message_id":"9d2b0adb173dbdb2395278a2027f44b5b17eda4f","unresolved":false,"context_lines":[{"line_number":1106,"context_line":""},{"line_number":1107,"context_line":"    def test_should_pass_good_meta_in_order_refs(self):"},{"line_number":1108,"context_line":"        result \u003d self.validator.validate(self.asymmetric_order_req)"},{"line_number":1109,"context_line":"        self.assertTrue(result[\u0027meta\u0027][\u0027expiration\u0027] is None)"},{"line_number":1110,"context_line":""},{"line_number":1111,"context_line":"    def test_should_raise_with_no_algorithm_in_order_refs(self):"},{"line_number":1112,"context_line":"        del self.asymmetric_order_req[\u0027meta\u0027][\u0027algorithm\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa98f980_cce0aefc","line":1109,"updated":"2014-09-04 09:32:57.000000000","message":"For my education: how does checking that the expiration is None actually verify that the meta was validated correctly?","commit_id":"afc41c77b63cf5250cf90ea41c23b8f8606458bd"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"f61c3517761465c66f5ffc0b0e97de68cb3cd17b","unresolved":false,"context_lines":[{"line_number":1106,"context_line":""},{"line_number":1107,"context_line":"    def test_should_pass_good_meta_in_order_refs(self):"},{"line_number":1108,"context_line":"        result \u003d self.validator.validate(self.asymmetric_order_req)"},{"line_number":1109,"context_line":"        self.assertTrue(result[\u0027meta\u0027][\u0027expiration\u0027] is None)"},{"line_number":1110,"context_line":""},{"line_number":1111,"context_line":"    def test_should_raise_with_no_algorithm_in_order_refs(self):"},{"line_number":1112,"context_line":"        del self.asymmetric_order_req[\u0027meta\u0027][\u0027algorithm\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa98f980_943864d4","line":1109,"in_reply_to":"fa98f980_cce0aefc","updated":"2014-09-04 14:39:43.000000000","message":"Response itself validate that meta got validated.","commit_id":"afc41c77b63cf5250cf90ea41c23b8f8606458bd"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"c4a18c09da5dc0b04ead94d499ce8c34bee729d6","unresolved":false,"context_lines":[{"line_number":1107,"context_line":""},{"line_number":1108,"context_line":"    def test_should_pass_good_meta_in_order_refs(self):"},{"line_number":1109,"context_line":"        result \u003d self.validator.validate(self.asymmetric_order_req)"},{"line_number":1110,"context_line":"        self.assertTrue(result[\u0027meta\u0027][\u0027expiration\u0027] is None)"},{"line_number":1111,"context_line":""},{"line_number":1112,"context_line":"    def test_should_raise_with_no_algorithm_in_order_refs(self):"},{"line_number":1113,"context_line":"        del self.asymmetric_order_req[\u0027meta\u0027][\u0027algorithm\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_ae8b22c1","line":1110,"updated":"2014-09-05 21:59:14.000000000","message":"self.assertIsNone(result[\u0027meta\u0027][\u0027expiration\u0027]) is a thing. :)","commit_id":"ccf61561d4e8df073f1502c129e7ce08f8834a04"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"fc272bf5fde82b1f1c4ee9575675bb66fc732d0a","unresolved":false,"context_lines":[{"line_number":1107,"context_line":""},{"line_number":1108,"context_line":"    def test_should_pass_good_meta_in_order_refs(self):"},{"line_number":1109,"context_line":"        result \u003d self.validator.validate(self.asymmetric_order_req)"},{"line_number":1110,"context_line":"        self.assertTrue(result[\u0027meta\u0027][\u0027expiration\u0027] is None)"},{"line_number":1111,"context_line":""},{"line_number":1112,"context_line":"    def test_should_raise_with_no_algorithm_in_order_refs(self):"},{"line_number":1113,"context_line":"        del self.asymmetric_order_req[\u0027meta\u0027][\u0027algorithm\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_b84eda94","line":1110,"in_reply_to":"fa98f980_ae8b22c1","updated":"2014-09-08 17:28:34.000000000","message":"I will surly change with that thing but practically this thing is also works.\n\n:)","commit_id":"ccf61561d4e8df073f1502c129e7ce08f8834a04"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"c4a18c09da5dc0b04ead94d499ce8c34bee729d6","unresolved":false,"context_lines":[{"line_number":1129,"context_line":"        # supports method."},{"line_number":1130,"context_line":"        self.asymmetric_order_req[\u0027meta\u0027][\u0027algorithm\u0027] \u003d \u0027aes\u0027"},{"line_number":1131,"context_line":"        result \u003d self.validator.validate(self.asymmetric_order_req)"},{"line_number":1132,"context_line":"        self.assertTrue(result[\u0027meta\u0027][\u0027expiration\u0027] is None)"},{"line_number":1133,"context_line":""},{"line_number":1134,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"},{"line_number":1135,"context_line":"    unittest.main()"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_0e8d0ed3","line":1132,"updated":"2014-09-05 21:59:14.000000000","message":"Same as above.","commit_id":"ccf61561d4e8df073f1502c129e7ce08f8834a04"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"954a4c39afa85f5be8e6f652f1d738c1ce46e434","unresolved":false,"context_lines":[{"line_number":1124,"context_line":"                          self.validator.validate,"},{"line_number":1125,"context_line":"                          self.asymmetric_order_req)"},{"line_number":1126,"context_line":""},{"line_number":1127,"context_line":"    def test_should_pass_with_wrong_algorithm_in_asymmetric_order_refs(self):"},{"line_number":1128,"context_line":"        # Note (atiwari): because validator should not check"},{"line_number":1129,"context_line":"        # algorithm but that should checked at crypto_plugin"},{"line_number":1130,"context_line":"        # supports method."}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_38c93f26","line":1127,"updated":"2014-09-15 23:07:02.000000000","message":"I don\u0027t think we need this test method, as we intend (for Juno) to just pass data through to the plugins to determine if they can support the args or not. Eventually plugins will do the validation work.","commit_id":"1d8e5d0a369bd80a3e576eaba779a33c4ee07dc7"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"98474484f7d7b6b8f3bf1f99ef23081781e0d0f2","unresolved":false,"context_lines":[{"line_number":1124,"context_line":"                          self.validator.validate,"},{"line_number":1125,"context_line":"                          self.asymmetric_order_req)"},{"line_number":1126,"context_line":""},{"line_number":1127,"context_line":"    def test_should_pass_with_wrong_algorithm_in_asymmetric_order_refs(self):"},{"line_number":1128,"context_line":"        # Note (atiwari): because validator should not check"},{"line_number":1129,"context_line":"        # algorithm but that should checked at crypto_plugin"},{"line_number":1130,"context_line":"        # supports method."}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_898b9f1d","line":1127,"in_reply_to":"fa98f980_38c93f26","updated":"2014-09-16 20:19:20.000000000","message":"IMO, we should not validate all the plugins against the input meta.\nI think it will be cleaner to have plugin discovery as I suggested in etherpad. Its clients responsibility to discover the plugin before hand and call with correct param.\n\nthoughts?","commit_id":"1d8e5d0a369bd80a3e576eaba779a33c4ee07dc7"}],"barbican/tests/plugin/test_store_crypto.py":[{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"0e6bf2e2fb6100c11e1b6d5f134d943988c2cc0d","unresolved":false,"context_lines":[{"line_number":292,"context_line":"        key_spec \u003d secret_store.KeySpec(alg\u003d\u0027aes\u0027, bit_length\u003d64, mode\u003d\u0027CBC\u0027)"},{"line_number":293,"context_line":"        self.assertTrue(self.plugin_to_test.generate_supports(key_spec))"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"        # RSA KeySpec should not be supported."},{"line_number":296,"context_line":"        key_spec \u003d secret_store.KeySpec(alg\u003d\u0027RSA\u0027, bit_length\u003d2048)"},{"line_number":297,"context_line":"        self.assertTrue(self.plugin_to_test.generate_supports(key_spec))"},{"line_number":298,"context_line":"        self.key_spec \u003d secret_store.KeySpec(\u0027Camellia\u0027, 64)"}],"source_content_type":"text/x-python","patch_set":15,"id":"da9df570_58b823e5","line":295,"updated":"2014-09-25 19:34:51.000000000","message":"Please change this to:\n# RSA KeySpec should be supported.","commit_id":"137a2cb4ca9927565b56578a9f3e597d9dd07035"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"74105388511ccb942b68846876200f91c722c05b","unresolved":false,"context_lines":[{"line_number":292,"context_line":"        key_spec \u003d secret_store.KeySpec(alg\u003d\u0027aes\u0027, bit_length\u003d64, mode\u003d\u0027CBC\u0027)"},{"line_number":293,"context_line":"        self.assertTrue(self.plugin_to_test.generate_supports(key_spec))"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"        # RSA KeySpec should not be supported."},{"line_number":296,"context_line":"        key_spec \u003d secret_store.KeySpec(alg\u003d\u0027RSA\u0027, bit_length\u003d2048)"},{"line_number":297,"context_line":"        self.assertTrue(self.plugin_to_test.generate_supports(key_spec))"},{"line_number":298,"context_line":"        self.key_spec \u003d secret_store.KeySpec(\u0027Camellia\u0027, 64)"}],"source_content_type":"text/x-python","patch_set":15,"id":"da9df570_03f1cc01","line":295,"in_reply_to":"da9df570_58b823e5","updated":"2014-09-25 20:02:08.000000000","message":"done","commit_id":"137a2cb4ca9927565b56578a9f3e597d9dd07035"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"0e6bf2e2fb6100c11e1b6d5f134d943988c2cc0d","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        # RSA KeySpec should not be supported."},{"line_number":296,"context_line":"        key_spec \u003d secret_store.KeySpec(alg\u003d\u0027RSA\u0027, bit_length\u003d2048)"},{"line_number":297,"context_line":"        self.assertTrue(self.plugin_to_test.generate_supports(key_spec))"},{"line_number":298,"context_line":"        self.key_spec \u003d secret_store.KeySpec(\u0027Camellia\u0027, 64)"},{"line_number":299,"context_line":"        self.assertFalse(self.plugin_to_test.generate_supports(self.key_spec))"},{"line_number":300,"context_line":"        # Bogus KeySpec should not be supported."},{"line_number":301,"context_line":"        key_spec \u003d secret_store.KeySpec(alg\u003d\u0027bogus\u0027, bit_length\u003d2048)"}],"source_content_type":"text/x-python","patch_set":15,"id":"da9df570_d8c33355","line":298,"updated":"2014-09-25 19:34:51.000000000","message":"Please add a line-space/comment above this saying:\n# Camellia KeySpec should not be supported.","commit_id":"137a2cb4ca9927565b56578a9f3e597d9dd07035"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"74105388511ccb942b68846876200f91c722c05b","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        # RSA KeySpec should not be supported."},{"line_number":296,"context_line":"        key_spec \u003d secret_store.KeySpec(alg\u003d\u0027RSA\u0027, bit_length\u003d2048)"},{"line_number":297,"context_line":"        self.assertTrue(self.plugin_to_test.generate_supports(key_spec))"},{"line_number":298,"context_line":"        self.key_spec \u003d secret_store.KeySpec(\u0027Camellia\u0027, 64)"},{"line_number":299,"context_line":"        self.assertFalse(self.plugin_to_test.generate_supports(self.key_spec))"},{"line_number":300,"context_line":"        # Bogus KeySpec should not be supported."},{"line_number":301,"context_line":"        key_spec \u003d secret_store.KeySpec(alg\u003d\u0027bogus\u0027, bit_length\u003d2048)"}],"source_content_type":"text/x-python","patch_set":15,"id":"da9df570_c38b4466","line":298,"in_reply_to":"da9df570_d8c33355","updated":"2014-09-25 20:02:08.000000000","message":"done","commit_id":"137a2cb4ca9927565b56578a9f3e597d9dd07035"}]}
