)]}'
{"test/unit/common/middleware/test_encrypter_decrypter.py":[{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"5138076d6d50f5d7ecccf09be78af92fb41cbb31","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        # Verify that at least the request body was indeed encrypted."},{"line_number":50,"context_line":"        # Otherwise, checking that input matches output after decryption is"},{"line_number":51,"context_line":"        # not sufficient if encryption and decryption were both just the"},{"line_number":52,"context_line":"        # identity function! (i.e. if they did nothing)"},{"line_number":53,"context_line":"        encrypt_get_req \u003d Request.blank(\u0027/v1/a/c/o\u0027,"},{"line_number":54,"context_line":"                                        environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027})"},{"line_number":55,"context_line":"        encrypt_get_resp \u003d encrypt_get_req.get_response(app)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a1b2928_42b73839","line":52,"updated":"2016-04-11 19:56:38.000000000","message":"I know this is not a part of this review.  But the comment here would imply that we need to assert that an encrypted text does not equal the plaintext.  I don\u0027t see that check here anywhere.  I think that all of this would still pass if the encrypt and decrypt were the identity function.","commit_id":"411528687c034e364c2b21d548cb93c88489ed28"},{"author":{"_account_id":12261,"name":"Mahati","email":"mahati.chamarthy@gmail.com","username":"Mahati"},"change_message_id":"b489c4d041042f97c8470eb98fab86aef7321d7b","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        # Verify that at least the request body was indeed encrypted."},{"line_number":50,"context_line":"        # Otherwise, checking that input matches output after decryption is"},{"line_number":51,"context_line":"        # not sufficient if encryption and decryption were both just the"},{"line_number":52,"context_line":"        # identity function! (i.e. if they did nothing)"},{"line_number":53,"context_line":"        encrypt_get_req \u003d Request.blank(\u0027/v1/a/c/o\u0027,"},{"line_number":54,"context_line":"                                        environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027})"},{"line_number":55,"context_line":"        encrypt_get_resp \u003d encrypt_get_req.get_response(app)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a18252c_ed94a0e9","line":52,"in_reply_to":"7a1b2928_42b73839","updated":"2016-04-12 07:47:01.000000000","message":"I think it implies that we manually verify the encrypted body version (which lines 59-61 do) instead of relying on blackbox testing i.e. input matches output","commit_id":"411528687c034e364c2b21d548cb93c88489ed28"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"5138076d6d50f5d7ecccf09be78af92fb41cbb31","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        # identity function! (i.e. if they did nothing)"},{"line_number":53,"context_line":"        encrypt_get_req \u003d Request.blank(\u0027/v1/a/c/o\u0027,"},{"line_number":54,"context_line":"                                        environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027})"},{"line_number":55,"context_line":"        encrypt_get_resp \u003d encrypt_get_req.get_response(app)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        crypto_meta \u003d decrypter._load_crypto_meta("},{"line_number":58,"context_line":"            encrypt_get_resp.headers[\u0027X-Object-Sysmeta-Crypto-Meta\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a1b2928_b781304d","line":55,"updated":"2016-04-11 19:56:38.000000000","message":"I know this isn\u0027t a part of this review either, but here is another place where a register for a different method may cover another action.  The register for \"PUT\" covers the registration for the GET.  I just want to learn about this.  What is the purpose of registration if it covers different calls?  what exactly is it testing?  (btw - i say another place because there was a place in the if-match patch - and I am not sure if that was changed)","commit_id":"411528687c034e364c2b21d548cb93c88489ed28"},{"author":{"_account_id":12261,"name":"Mahati","email":"mahati.chamarthy@gmail.com","username":"Mahati"},"change_message_id":"b489c4d041042f97c8470eb98fab86aef7321d7b","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        # identity function! (i.e. if they did nothing)"},{"line_number":53,"context_line":"        encrypt_get_req \u003d Request.blank(\u0027/v1/a/c/o\u0027,"},{"line_number":54,"context_line":"                                        environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027})"},{"line_number":55,"context_line":"        encrypt_get_resp \u003d encrypt_get_req.get_response(app)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        crypto_meta \u003d decrypter._load_crypto_meta("},{"line_number":58,"context_line":"            encrypt_get_resp.headers[\u0027X-Object-Sysmeta-Crypto-Meta\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a18252c_2d6df804","line":55,"in_reply_to":"7a1b2928_b781304d","updated":"2016-04-12 07:47:01.000000000","message":"It is a good question, but I don\u0027t think registering for PUT covers for GET. Instead GET processing is done here: https://github.com/openstack/swift/blob/master/test/unit/common/middleware/helpers.py#L101","commit_id":"411528687c034e364c2b21d548cb93c88489ed28"},{"author":{"_account_id":12261,"name":"Mahati","email":"mahati.chamarthy@gmail.com","username":"Mahati"},"change_message_id":"b489c4d041042f97c8470eb98fab86aef7321d7b","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        encrypt_get_resp \u003d encrypt_get_req.get_response(app)"},{"line_number":89,"context_line":"        crypto_meta \u003d decrypter._load_crypto_meta("},{"line_number":90,"context_line":"            encrypt_get_resp.headers["},{"line_number":91,"context_line":"                \u0027X-Object-Transient-Sysmeta-Crypto-Meta-Test\u0027])"},{"line_number":92,"context_line":"        exp_header_value \u003d base64.b64encode(encrypt("},{"line_number":93,"context_line":"            \u0027encrypt me is updated\u0027, fetch_crypto_keys()[\u0027object\u0027],"},{"line_number":94,"context_line":"            crypto_meta[\u0027iv\u0027]))"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a18252c_7254f153","line":91,"updated":"2016-04-12 07:47:01.000000000","message":"Nice! Now we have transient sysmeta","commit_id":"411528687c034e364c2b21d548cb93c88489ed28"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"2bf3d87f2f2ed7c4e23621eab19b4fac82270a1c","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            encrypt_get_resp.headers[\u0027X-Object-Sysmeta-Crypto-Meta\u0027])"},{"line_number":59,"context_line":"        exp_enc_body \u003d encrypt("},{"line_number":60,"context_line":"            body, fetch_crypto_keys()[\u0027object\u0027], crypto_meta[\u0027iv\u0027])"},{"line_number":61,"context_line":"        self.assertNotEqual(body, encrypt_get_resp.body)  # sanity check"},{"line_number":62,"context_line":"        self.assertEqual(exp_enc_body, encrypt_get_resp.body)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        decrypt_env \u003d {\u0027REQUEST_METHOD\u0027: \u0027GET\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a18252c_25d5f542","line":61,"updated":"2016-04-12 15:30:43.000000000","message":"thanks!  The comment makes more sense now, IMHO.  And we get to be extra careful.","commit_id":"328965d7493af897155ad2f523e8aecf04c43bce"}]}
