)]}'
{"swift/cli/info.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"786bb57f1afcefa2d7d2e983dc724bd350757059","unresolved":false,"context_lines":[{"line_number":411,"context_line":"            continue"},{"line_number":412,"context_line":"        print(\u0027%s: %s\u0027 % (label, json.dumps("},{"line_number":413,"context_line":"            json.loads(urllib.parse.unquote_plus(meta)),"},{"line_number":414,"context_line":"            indent\u003d2)))"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"def print_info(db_type, db_file, swift_dir\u003d\u0027/etc/swift\u0027, stale_reads_ok\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_42c1c34e","line":414,"updated":"2018-07-27 17:32:51.000000000","message":"Oops -- left over from my own testing purposes, but maybe could be proposed as its own patch. Would need to use swift/common/middleware/crypto/crypto_utils.py:load_crypto_meta for the deserializing. I\u0027m not sure I like the json.dumps(..., indent\u003d2) formatting though...","commit_id":"d454179a457bbfbe4c7d45be5a7ee670b98d9ffd"}],"swift/common/middleware/crypto/keymaster.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"786bb57f1afcefa2d7d2e983dc724bd350757059","unresolved":false,"context_lines":[{"line_number":189,"context_line":"                continue"},{"line_number":190,"context_line":"            suffix \u003d k[len(prefix):]"},{"line_number":191,"context_line":"            if suffix and (suffix[0] !\u003d \u0027_\u0027 or len(suffix) \u003c 2):"},{"line_number":192,"context_line":"                raise ValueError(\u0027Malformed root secret option name %s\u0027 % k)"},{"line_number":193,"context_line":"            result.append((k, suffix[1:] or None, v))"},{"line_number":194,"context_line":"        return sorted(result)"},{"line_number":195,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_4296a34c","line":192,"range":{"start_line":192,"start_character":44,"end_line":192,"end_character":55},"updated":"2018-07-27 17:32:51.000000000","message":"s/root secret/multi-key/","commit_id":"d454179a457bbfbe4c7d45be5a7ee670b98d9ffd"}],"swift/common/middleware/crypto/kmip_keymaster.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"786bb57f1afcefa2d7d2e983dc724bd350757059","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"The value of the ``key_ids`` option should be a space-delimited list of"},{"line_number":58,"context_line":"unique identifiers for secrets that will be retrieved from the KMIP service."},{"line_number":59,"context_line":"Any of these secrets may be used for *decryption*."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"The value of the ``active_root_secret_id`` option should be the unique"},{"line_number":62,"context_line":"identifier for the secret that should be used for all new *encryption*."}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_424783a5","line":59,"updated":"2018-07-27 17:32:51.000000000","message":"Bah, lies! I thought I\u0027d written up something better, but I must\u0027ve lost track of it at some point.\n\nThis all uses a secret_id set of key_ids, similar to the parent patch. I *think* having that extra mapping of secret_id -\u003e KMIP key_id is useful? Key ids are assigned by the server, so if you ever need to migrate from one KMIP server to another, IDK that you\u0027d be able to keep the same key ids...","commit_id":"d454179a457bbfbe4c7d45be5a7ee670b98d9ffd"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"786bb57f1afcefa2d7d2e983dc724bd350757059","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    for all proxies. Next, set the ``active_root_secret_id`` option to the"},{"line_number":70,"context_line":"    new key and restart the proxy. Again, do this for all proxies. This process"},{"line_number":71,"context_line":"    ensures that all proxies will have the new key available for *decryption*"},{"line_number":72,"context_line":"    before any proxy uses it for *encryption*."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"The keymaster configuration can alternatively be defined in a separate config"},{"line_number":75,"context_line":"file by using the ``keymaster_config_path`` option::"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_c2c87321","line":72,"updated":"2018-07-27 17:32:51.000000000","message":"The trivial keymaster could use a similar note.","commit_id":"d454179a457bbfbe4c7d45be5a7ee670b98d9ffd"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"786bb57f1afcefa2d7d2e983dc724bd350757059","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"class KmipKeyMaster(keymaster.KeyMaster):"},{"line_number":100,"context_line":"    def _get_root_secret(self, conf):"},{"line_number":101,"context_line":"        self.logger \u003d get_logger(conf, log_route\u003d\u0027kmip_keymaster\u0027)"},{"line_number":102,"context_line":"        if self.keymaster_config_path:"},{"line_number":103,"context_line":"            keymaster_opts \u003d [\u0027host\u0027, \u0027port\u0027, \u0027certfile\u0027, \u0027keyfile\u0027,"},{"line_number":104,"context_line":"                              \u0027ca_certs\u0027, \u0027username\u0027, \u0027password\u0027, \u0027key_id*\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_82791b31","line":101,"updated":"2018-07-27 17:32:51.000000000","message":"Ugh, this line just bugs me.","commit_id":"d454179a457bbfbe4c7d45be5a7ee670b98d9ffd"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"786bb57f1afcefa2d7d2e983dc724bd350757059","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                                 \u0027are other config options specified: %s\u0027 %"},{"line_number":109,"context_line":"                                 \", \".join(list("},{"line_number":110,"context_line":"                                     set(keymaster_opts).intersection(conf))))"},{"line_number":111,"context_line":"            conf \u003d readconf(self.keymaster_config_path, section)"},{"line_number":112,"context_line":"        else:"},{"line_number":113,"context_line":"            section \u003d conf[\u0027__name__\u0027]"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_02b42bd3","line":111,"updated":"2018-07-27 17:32:51.000000000","message":"The more I mess with this, it really feels like this conf overriding doesn\u0027t belong in _get_root_secret, but in __init__.","commit_id":"d454179a457bbfbe4c7d45be5a7ee670b98d9ffd"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"786bb57f1afcefa2d7d2e983dc724bd350757059","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                    # secret_ids for a single kmip_id"},{"line_number":138,"context_line":"                    root_secrets[secret_id] \u003d root_secrets["},{"line_number":139,"context_line":"                        kmip_to_secret[kmip_id]]"},{"line_number":140,"context_line":"                    continue"},{"line_number":141,"context_line":"                secret \u003d client.get(kmip_id)"},{"line_number":142,"context_line":"                algo \u003d secret.cryptographic_algorithm.name"},{"line_number":143,"context_line":"                length \u003d secret.cryptographic_length"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_c2de330e","line":140,"updated":"2018-07-27 17:32:51.000000000","message":"Needs a test.","commit_id":"d454179a457bbfbe4c7d45be5a7ee670b98d9ffd"}],"test/unit/common/middleware/crypto/test_kmip_keymaster.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"786bb57f1afcefa2d7d2e983dc724bd350757059","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        if args:"},{"line_number":59,"context_line":"            raise Exception(\u0027unexpected args provided: %r\u0027 % (args,))"},{"line_number":60,"context_line":"        client \u003d MockProxyKmipClient(secrets, calls)"},{"line_number":61,"context_line":"        calls.append((\u0027__init__\u0027, kwargs))"},{"line_number":62,"context_line":"        return client"},{"line_number":63,"context_line":"    return mock_client"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_7d9342a5","line":61,"updated":"2018-07-27 17:32:51.000000000","message":"Move this into actual __init__ above.","commit_id":"d454179a457bbfbe4c7d45be5a7ee670b98d9ffd"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"786bb57f1afcefa2d7d2e983dc724bd350757059","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                \u0027active_root_secret_id\u0027: \u0027secret_id\u0027}"},{"line_number":172,"context_line":"        secrets \u003d {\u00274321\u0027: create_secret(\u0027AES\u0027, 256, b\u0027x\u0027 * 32),"},{"line_number":173,"context_line":"                   \u0027some unique identifier\u0027: create_secret("},{"line_number":174,"context_line":"                        \u0027AES\u0027, 256, b\u0027y\u0027 * 32)}"},{"line_number":175,"context_line":"        calls \u003d []"},{"line_number":176,"context_line":"        klass \u003d \u0027swift.common.middleware.crypto.kmip_keymaster.ProxyKmipClient\u0027"},{"line_number":177,"context_line":"        with mock.patch(klass, create_mock_client(secrets, calls)):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_5ddbe678","line":174,"updated":"2018-07-27 17:32:51.000000000","message":"*grumble, grumble*","commit_id":"d454179a457bbfbe4c7d45be5a7ee670b98d9ffd"}]}
