)]}'
{"requirements.txt":[{"author":{"_account_id":12261,"name":"Mahati","email":"mahati.chamarthy@gmail.com","username":"Mahati"},"change_message_id":"c52366e31d594e62d50a9b853e17e0972c1820f6","unresolved":false,"context_lines":[{"line_number":11,"context_line":"six\u003e\u003d1.9.0"},{"line_number":12,"context_line":"xattr\u003e\u003d0.4"},{"line_number":13,"context_line":"PyECLib\u003d\u003d1.0.7                          # BSD"},{"line_number":14,"context_line":"cryptography\u003e\u003d1.0                       # Apache-2.0"}],"source_content_type":"text/plain","patch_set":13,"id":"da20952f_e811b254","line":14,"updated":"2015-09-09 07:18:31.000000000","message":"Like you pointed out earlier, do we need this cryptography version in requirements at all? Tests seem to run fine without specifying this. I removed this and did testing.","commit_id":"3dd525f9768a608c62efeef82c2053cfb02ab37a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8480176419a875347d8b06a4a2ef7861bb8e35bf","unresolved":false,"context_lines":[{"line_number":11,"context_line":"six\u003e\u003d1.9.0"},{"line_number":12,"context_line":"xattr\u003e\u003d0.4"},{"line_number":13,"context_line":"PyECLib\u003d\u003d1.0.7                          # BSD"},{"line_number":14,"context_line":"cryptography\u003e\u003d1.0                       # Apache-2.0"}],"source_content_type":"text/plain","patch_set":13,"id":"da20952f_c458485a","line":14,"in_reply_to":"da20952f_e811b254","updated":"2015-09-09 15:48:26.000000000","message":"Jenkins complains if this line differs from global requirements in anyway.","commit_id":"3dd525f9768a608c62efeef82c2053cfb02ab37a"}],"swift/common/middleware/crypto.py":[{"author":{"_account_id":17156,"name":"Hamdi Roumani","email":"roumani@ca.ibm.com","username":"hroumani"},"change_message_id":"ec8aba6a5992fab3055b25dd6f82e90ad0877725","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        :param key: 256-bit key "},{"line_number":37,"context_line":"        :param iv: iv or nonce used for encryption"},{"line_number":38,"context_line":"        \"\"\""},{"line_number":39,"context_line":"        engine \u003d Cipher(algorithms.AES(key), modes.CTR(iv),"},{"line_number":40,"context_line":"                        backend\u003ddefault_backend())"},{"line_number":41,"context_line":"        enc \u003d engine.encryptor()"},{"line_number":42,"context_line":"        return CryptoContext(enc, iv, 0)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_01bea5ad","line":39,"updated":"2015-07-29 19:52:41.000000000","message":"Should we validate key length is 256 or relying on algorithms.AES to catch this ?  It should.","commit_id":"54a23ce1682ff9536d956cac4c4a55dceae2d58d"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"9ec80bfda1aa20681de6d6640d63622495ac87b1","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        :param key: 256-bit key "},{"line_number":37,"context_line":"        :param iv: iv or nonce used for encryption"},{"line_number":38,"context_line":"        \"\"\""},{"line_number":39,"context_line":"        engine \u003d Cipher(algorithms.AES(key), modes.CTR(iv),"},{"line_number":40,"context_line":"                        backend\u003ddefault_backend())"},{"line_number":41,"context_line":"        enc \u003d engine.encryptor()"},{"line_number":42,"context_line":"        return CryptoContext(enc, iv, 0)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_25b53b7d","line":39,"in_reply_to":"3a50d1a3_01bea5ad","updated":"2015-08-01 20:15:34.000000000","message":"yes, this is already checked.  But, I just added a test case to assert the current behavior.","commit_id":"54a23ce1682ff9536d956cac4c4a55dceae2d58d"},{"author":{"_account_id":17156,"name":"Hamdi Roumani","email":"roumani@ca.ibm.com","username":"hroumani"},"change_message_id":"ec8aba6a5992fab3055b25dd6f82e90ad0877725","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        :param offset: offset into the message"},{"line_number":51,"context_line":"                       used for range reads"},{"line_number":52,"context_line":"        \"\"\""},{"line_number":53,"context_line":"        if offset \u003e 0:"},{"line_number":54,"context_line":"            # Adjust IV so that it is correct for decryption at offset"},{"line_number":55,"context_line":"            ivl \u003d long(binascii.hexlify(iv), 16)"},{"line_number":56,"context_line":"            ivl +\u003d int(offset / 16) + (1 \u003c\u003c (16 * 8))"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_04520513","line":53,"updated":"2015-07-29 19:52:41.000000000","message":"So all this logic heavily relies on a 16 byte IV, wonder if we can enforce that / check that here ?","commit_id":"54a23ce1682ff9536d956cac4c4a55dceae2d58d"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"9ec80bfda1aa20681de6d6640d63622495ac87b1","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        :param offset: offset into the message"},{"line_number":51,"context_line":"                       used for range reads"},{"line_number":52,"context_line":"        \"\"\""},{"line_number":53,"context_line":"        if offset \u003e 0:"},{"line_number":54,"context_line":"            # Adjust IV so that it is correct for decryption at offset"},{"line_number":55,"context_line":"            ivl \u003d long(binascii.hexlify(iv), 16)"},{"line_number":56,"context_line":"            ivl +\u003d int(offset / 16) + (1 \u003c\u003c (16 * 8))"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_c5a4974c","line":53,"in_reply_to":"3a50d1a3_04520513","updated":"2015-08-01 20:15:34.000000000","message":"This is already checked.  Like above, I added a test case.","commit_id":"54a23ce1682ff9536d956cac4c4a55dceae2d58d"},{"author":{"_account_id":14926,"name":"Jeff Feng","email":"jianhua@us.ibm.com","username":"jhfeng"},"change_message_id":"f03190ef546b26e5c0d3ce55c98e59c66414d18a","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        :returns: CryptoContext"},{"line_number":39,"context_line":"        :raises: ValueError on invalid key"},{"line_number":40,"context_line":"        \"\"\""},{"line_number":41,"context_line":"        engine \u003d Cipher(algorithms.AES(key), modes.CTR(iv),"},{"line_number":42,"context_line":"                        backend\u003ddefault_backend())"},{"line_number":43,"context_line":"        enc \u003d engine.encryptor()"},{"line_number":44,"context_line":"        return CryptoContext(enc, iv, 0)"}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_da9fe64e","line":41,"updated":"2015-09-02 00:09:41.000000000","message":"need check and enforce  len(key)\u003d\u003d32 here. and in next routine.\nAES accepts 128, 192 and 256 bits key, this call Cipher() will success\nfor all 3 key lengths.","commit_id":"862537584d63a5863ca4044b45aa9de483eeaf38"},{"author":{"_account_id":14926,"name":"Jeff Feng","email":"jianhua@us.ibm.com","username":"jhfeng"},"change_message_id":"f03190ef546b26e5c0d3ce55c98e59c66414d18a","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        return os.urandom(16)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def get_cipher(self):"},{"line_number":72,"context_line":"        return \u0027AES_CTR_256\u0027"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"class CryptoContext(object):"}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_3adce217","line":72,"updated":"2015-09-02 00:09:41.000000000","message":"we return AES_CTR_256, so we need enforce key length in above.","commit_id":"862537584d63a5863ca4044b45aa9de483eeaf38"},{"author":{"_account_id":12261,"name":"Mahati","email":"mahati.chamarthy@gmail.com","username":"Mahati"},"change_message_id":"c52366e31d594e62d50a9b853e17e0972c1820f6","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        if offset \u003e 0:"},{"line_number":67,"context_line":"            # Adjust IV so that it is correct for decryption at offset"},{"line_number":68,"context_line":"            ivl \u003d long(binascii.hexlify(iv), 16)"},{"line_number":69,"context_line":"            ivl +\u003d int(offset / 16) + (1 \u003c\u003c (16 * 8))"},{"line_number":70,"context_line":"            ivstr \u003d format(ivl, \u0027x\u0027)"},{"line_number":71,"context_line":"            iv \u003d str(bytearray.fromhex(ivstr[(len(ivstr) - 2 * 16):]))"},{"line_number":72,"context_line":"        engine \u003d Cipher(algorithms.AES(key), modes.CTR(iv),"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_8866f627","line":69,"updated":"2015-09-09 07:18:31.000000000","message":"+1 it got me thinking as well.","commit_id":"3dd525f9768a608c62efeef82c2053cfb02ab37a"},{"author":{"_account_id":14926,"name":"Jeff Feng","email":"jianhua@us.ibm.com","username":"jhfeng"},"change_message_id":"2d44a29708a22c360f85e736d132b831fdb76219","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        if offset \u003e 0:"},{"line_number":67,"context_line":"            # Adjust IV so that it is correct for decryption at offset"},{"line_number":68,"context_line":"            ivl \u003d long(binascii.hexlify(iv), 16)"},{"line_number":69,"context_line":"            ivl +\u003d int(offset / 16) + (1 \u003c\u003c (16 * 8))"},{"line_number":70,"context_line":"            ivstr \u003d format(ivl, \u0027x\u0027)"},{"line_number":71,"context_line":"            iv \u003d str(bytearray.fromhex(ivstr[(len(ivstr) - 2 * 16):]))"},{"line_number":72,"context_line":"        engine \u003d Cipher(algorithms.AES(key), modes.CTR(iv),"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_95e060ce","line":69,"updated":"2015-09-08 21:13:27.000000000","message":"It would be nice to add one line comment here on why we do this way.\n+ ( 1\u003c\u003c (16 *8)) is to make \u0027ivl\u0027 big enough so that following bytearray.fromhex() can be success in all conditions","commit_id":"3dd525f9768a608c62efeef82c2053cfb02ab37a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8480176419a875347d8b06a4a2ef7861bb8e35bf","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        if offset \u003e 0:"},{"line_number":67,"context_line":"            # Adjust IV so that it is correct for decryption at offset"},{"line_number":68,"context_line":"            ivl \u003d long(binascii.hexlify(iv), 16)"},{"line_number":69,"context_line":"            ivl +\u003d int(offset / 16) + (1 \u003c\u003c (16 * 8))"},{"line_number":70,"context_line":"            ivstr \u003d format(ivl, \u0027x\u0027)"},{"line_number":71,"context_line":"            iv \u003d str(bytearray.fromhex(ivstr[(len(ivstr) - 2 * 16):]))"},{"line_number":72,"context_line":"        engine \u003d Cipher(algorithms.AES(key), modes.CTR(iv),"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_27cfc6b4","line":69,"in_reply_to":"da20952f_95e060ce","updated":"2015-09-09 15:48:26.000000000","message":"Done","commit_id":"3dd525f9768a608c62efeef82c2053cfb02ab37a"},{"author":{"_account_id":17156,"name":"Hamdi Roumani","email":"roumani@ca.ibm.com","username":"hroumani"},"change_message_id":"a6cd7c14965487ad04ac18de35e1c8ded818a697","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            ivl \u003d long(binascii.hexlify(iv), 16)"},{"line_number":69,"context_line":"            ivl +\u003d int(offset / 16) + (1 \u003c\u003c (16 * 8))"},{"line_number":70,"context_line":"            ivstr \u003d format(ivl, \u0027x\u0027)"},{"line_number":71,"context_line":"            iv \u003d str(bytearray.fromhex(ivstr[(len(ivstr) - 2 * 16):]))"},{"line_number":72,"context_line":"        engine \u003d Cipher(algorithms.AES(key), modes.CTR(iv),"},{"line_number":73,"context_line":"                        backend\u003ddefault_backend())"},{"line_number":74,"context_line":"        dec \u003d engine.decryptor()"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_e968ea23","line":71,"updated":"2015-09-08 19:09:42.000000000","message":"NIT - Add blank line.","commit_id":"3dd525f9768a608c62efeef82c2053cfb02ab37a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8480176419a875347d8b06a4a2ef7861bb8e35bf","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            ivl \u003d long(binascii.hexlify(iv), 16)"},{"line_number":69,"context_line":"            ivl +\u003d int(offset / 16) + (1 \u003c\u003c (16 * 8))"},{"line_number":70,"context_line":"            ivstr \u003d format(ivl, \u0027x\u0027)"},{"line_number":71,"context_line":"            iv \u003d str(bytearray.fromhex(ivstr[(len(ivstr) - 2 * 16):]))"},{"line_number":72,"context_line":"        engine \u003d Cipher(algorithms.AES(key), modes.CTR(iv),"},{"line_number":73,"context_line":"                        backend\u003ddefault_backend())"},{"line_number":74,"context_line":"        dec \u003d engine.decryptor()"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_47399aa2","line":71,"in_reply_to":"da20952f_e968ea23","updated":"2015-09-09 15:48:26.000000000","message":"Done","commit_id":"3dd525f9768a608c62efeef82c2053cfb02ab37a"}],"test/unit/common/middleware/test_crypto.py":[{"author":{"_account_id":14926,"name":"Jeff Feng","email":"jianhua@us.ibm.com","username":"jhfeng"},"change_message_id":"2d44a29708a22c360f85e736d132b831fdb76219","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        dec_val \u003d dec_ctxt.update(enc_val)"},{"line_number":40,"context_line":"        self.assertEqual(value, dec_val,"},{"line_number":41,"context_line":"                         \u0027Expected value {%s} but got {%s}\u0027 % (value, dec_val))"},{"line_number":42,"context_line":"        self.assertEqual(iv, enc_ctxt.get_iv())"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_enc_dec_small_chunks(self):"},{"line_number":45,"context_line":"        self.enc_dec_chunks([\u0027encrypt me\u0027, \u0027because I\u0027, \u0027am sensitive\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_759d8d65","line":42,"updated":"2015-09-08 21:13:27.000000000","message":"I think you want to check \u0027iv\u0027 from dec_ctxt here","commit_id":"3dd525f9768a608c62efeef82c2053cfb02ab37a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8480176419a875347d8b06a4a2ef7861bb8e35bf","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        dec_val \u003d dec_ctxt.update(enc_val)"},{"line_number":40,"context_line":"        self.assertEqual(value, dec_val,"},{"line_number":41,"context_line":"                         \u0027Expected value {%s} but got {%s}\u0027 % (value, dec_val))"},{"line_number":42,"context_line":"        self.assertEqual(iv, enc_ctxt.get_iv())"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_enc_dec_small_chunks(self):"},{"line_number":45,"context_line":"        self.enc_dec_chunks([\u0027encrypt me\u0027, \u0027because I\u0027, \u0027am sensitive\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_a7f8b6c5","line":42,"in_reply_to":"da20952f_759d8d65","updated":"2015-09-09 15:48:26.000000000","message":"Yes. thanks!","commit_id":"3dd525f9768a608c62efeef82c2053cfb02ab37a"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"b66cdc4985a5fd4050cb5018f34d5e780e9c9b81","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            except ValueError as err:"},{"line_number":85,"context_line":"                self.assertTrue(err.message.startswith(\u0027Invalid key\u0027))"},{"line_number":86,"context_line":"            try:"},{"line_number":87,"context_line":"                self.crypto.create_decryption_ctxt(key, iv, 0)"},{"line_number":88,"context_line":"                self.fail(\u0027Expected ValueError to be raised for key %s\u0027 % key)"},{"line_number":89,"context_line":"            except ValueError as err:"},{"line_number":90,"context_line":"                self.assertTrue(err.message.startswith(\u0027Invalid key\u0027))"}],"source_content_type":"text/x-python","patch_set":14,"id":"da20952f_8ec3348a","line":87,"updated":"2015-09-10 02:59:52.000000000","message":"nice.  I had fogotten to have it check the decryption_ctxt as well ;-)","commit_id":"4a1d7707d63b173e6faccf3b42137abe337822b1"}]}
