)]}'
{"trove/common/crypto_utils.py":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"32a837fc65b531f54fded85c6b7f08873283fec8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"da0c15f0_5b5b9387","updated":"2016-03-26 10:59:30.000000000","message":"If data was encrypted before this change, would it be possible to decrypt it with this new code?\n\nConversely, if code is encrypted using this new code, can the old code decrypt it?","commit_id":"dbc75e63125d110ab7943a4cfd074dd304021231"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ff602e677221e508ae72b06c4f25e7690685f887","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"ba0121b8_d4b0388e","in_reply_to":"da0c15f0_5b5b9387","updated":"2016-03-29 08:10:23.000000000","message":"\u003e If data was encrypted before this change, would it be possible to decrypt it with this new code?\n\nYes\n\n\u003e Conversely, if code is encrypted using this new code, can the old code decrypt it?\n\nYes","commit_id":"dbc75e63125d110ab7943a4cfd074dd304021231"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"0dd1e3a2bd3789e0f74669fc16094147a66f5580","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def encode_data(data):"},{"line_number":32,"context_line":"    if isinstance(data, six.text_type):"},{"line_number":33,"context_line":"        data \u003d data.encode(\u0027utf-8\u0027)"},{"line_number":34,"context_line":"    return stream_codecs.Base64Codec().serialize(data)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_905eb3e7","line":33,"range":{"start_line":33,"start_character":15,"end_line":33,"end_character":35},"updated":"2016-03-29 18:14:29.000000000","message":"serialize already returns a UTF-8 encoded string.  Why do we need to do it twice?","commit_id":"b6249268244630e65af2ea5f2e343ca2c7491e03"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"8c064d4382c7976d82692209b728cd471ade4b1c","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def encode_data(data):"},{"line_number":32,"context_line":"    if isinstance(data, six.text_type):"},{"line_number":33,"context_line":"        data \u003d data.encode(\u0027utf-8\u0027)"},{"line_number":34,"context_line":"    return stream_codecs.Base64Codec().serialize(data)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_a24cd242","line":33,"range":{"start_line":33,"start_character":15,"end_line":33,"end_character":35},"in_reply_to":"1a122d0e_94e902ba","updated":"2016-04-27 16:09:19.000000000","message":"Just wondering. Isn\u0027t this something that we could/should do in the Base64Codec.serialize(...) itself?","commit_id":"b6249268244630e65af2ea5f2e343ca2c7491e03"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"a92ae0e92803166f7cfeaf2b71bc649d5c2f4b54","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def encode_data(data):"},{"line_number":32,"context_line":"    if isinstance(data, six.text_type):"},{"line_number":33,"context_line":"        data \u003d data.encode(\u0027utf-8\u0027)"},{"line_number":34,"context_line":"    return stream_codecs.Base64Codec().serialize(data)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_1f718b0c","line":33,"range":{"start_line":33,"start_character":15,"end_line":33,"end_character":35},"in_reply_to":"1a122d0e_a24cd242","updated":"2016-04-28 08:32:03.000000000","message":"That\u0027s a good question. I don\u0027t know what is the most appropriate. But I like incremental changes. First port crypto to Python 3, and later port stream_codecs.","commit_id":"b6249268244630e65af2ea5f2e343ca2c7491e03"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ec1e3e49e44572d1896dde45eeb593961e3e1659","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def encode_data(data):"},{"line_number":32,"context_line":"    if isinstance(data, six.text_type):"},{"line_number":33,"context_line":"        data \u003d data.encode(\u0027utf-8\u0027)"},{"line_number":34,"context_line":"    return stream_codecs.Base64Codec().serialize(data)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_94e902ba","line":33,"range":{"start_line":33,"start_character":15,"end_line":33,"end_character":35},"in_reply_to":"ba0121b8_905eb3e7","updated":"2016-04-20 12:38:38.000000000","message":"stream_codecs.Base64Codec().serialize(data) doesn\u0027t accept Unicode on Python 3.","commit_id":"b6249268244630e65af2ea5f2e343ca2c7491e03"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"0dd1e3a2bd3789e0f74669fc16094147a66f5580","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"# Unpad the data string by stripping off excess characters"},{"line_number":48,"context_line":"def unpad_after_decryption(data):"},{"line_number":49,"context_line":"    return data[:len(data) - ord(data[-1:])]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"def encrypt_data(data, key, iv_bit_count\u003dIV_BIT_COUNT):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_43ba9724","line":49,"range":{"start_line":49,"start_character":40,"end_line":49,"end_character":41},"updated":"2016-03-29 18:14:29.000000000","message":"I think this makes the code less readable - even though it does the exact same thing (except for the extra overhead of creating the copy of course). It makes it look like you want a list back instead of a value.","commit_id":"b6249268244630e65af2ea5f2e343ca2c7491e03"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ec1e3e49e44572d1896dde45eeb593961e3e1659","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"# Unpad the data string by stripping off excess characters"},{"line_number":48,"context_line":"def unpad_after_decryption(data):"},{"line_number":49,"context_line":"    return data[:len(data) - ord(data[-1:])]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"def encrypt_data(data, key, iv_bit_count\u003dIV_BIT_COUNT):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_14d692f0","line":49,"range":{"start_line":49,"start_character":40,"end_line":49,"end_character":41},"in_reply_to":"ba0121b8_3df7b0f6","updated":"2016-04-20 12:38:38.000000000","message":"Done","commit_id":"b6249268244630e65af2ea5f2e343ca2c7491e03"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"d0e06bb8f11616e9b1bd71c606abdca8d2dea767","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"# Unpad the data string by stripping off excess characters"},{"line_number":48,"context_line":"def unpad_after_decryption(data):"},{"line_number":49,"context_line":"    return data[:len(data) - ord(data[-1:])]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"def encrypt_data(data, key, iv_bit_count\u003dIV_BIT_COUNT):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_b5a91a7e","line":49,"range":{"start_line":49,"start_character":40,"end_line":49,"end_character":41},"in_reply_to":"ba0121b8_43ba9724","updated":"2016-03-29 19:19:33.000000000","message":"On Python 2, str[index] gives a string substring (str type). On Python 3, bytes[index] gives an integer (int type).\n\nOn Python 2 and 3, bytes[index:index+1] gives a substring (py2: str type, py3: bytes).\n\nWould you prefer six.indexbytes(data, -1) instead of ord(data[-1:])?","commit_id":"b6249268244630e65af2ea5f2e343ca2c7491e03"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"28751c9d27b89b69b5cb3dd831a24054dde5c967","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"# Unpad the data string by stripping off excess characters"},{"line_number":48,"context_line":"def unpad_after_decryption(data):"},{"line_number":49,"context_line":"    return data[:len(data) - ord(data[-1:])]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"def encrypt_data(data, key, iv_bit_count\u003dIV_BIT_COUNT):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_3df7b0f6","line":49,"range":{"start_line":49,"start_character":40,"end_line":49,"end_character":41},"in_reply_to":"ba0121b8_b5a91a7e","updated":"2016-03-29 21:06:16.000000000","message":"I think the \u0027six.indexbytes(data, -1)\u0027 would be more explicit in that it indicates there\u0027s a difference here for py27 vs py34","commit_id":"b6249268244630e65af2ea5f2e343ca2c7491e03"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"0dd1e3a2bd3789e0f74669fc16094147a66f5580","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"def encrypt_data(data, key, iv_bit_count\u003dIV_BIT_COUNT):"},{"line_number":53,"context_line":"    data \u003d encodeutils.to_utf8(data)"},{"line_number":54,"context_line":"    key \u003d encodeutils.to_utf8(key)"},{"line_number":55,"context_line":"    md5_key \u003d hashlib.md5(key).hexdigest()"},{"line_number":56,"context_line":"    iv \u003d encode_data(Random.new().read(iv_bit_count))"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_573c0d93","line":53,"range":{"start_line":53,"start_character":4,"end_line":53,"end_character":36},"updated":"2016-03-29 18:14:29.000000000","message":"This method is confusingly named, although it\u0027s harmless here.  I had to go read the code to understand that it returns bytes unmodified.","commit_id":"b6249268244630e65af2ea5f2e343ca2c7491e03"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"0dd1e3a2bd3789e0f74669fc16094147a66f5580","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    key \u003d encodeutils.to_utf8(key)"},{"line_number":55,"context_line":"    md5_key \u003d hashlib.md5(key).hexdigest()"},{"line_number":56,"context_line":"    iv \u003d encode_data(Random.new().read(iv_bit_count))"},{"line_number":57,"context_line":"    if six.PY3:"},{"line_number":58,"context_line":"        iv \u003d iv.encode(\u0027ascii\u0027)"},{"line_number":59,"context_line":"    iv \u003d iv[:iv_bit_count]"},{"line_number":60,"context_line":"    aes \u003d AES.new(md5_key, AES.MODE_CBC, iv)"},{"line_number":61,"context_line":"    data \u003d pad_for_encryption(data, iv_bit_count)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_3704f9be","line":58,"range":{"start_line":57,"start_character":0,"end_line":58,"end_character":31},"updated":"2016-03-29 18:14:29.000000000","message":"Not sure why the utf-8 encoded iv is being converted to ascii now (although I don\u0027t remember why I encoded it to utf-8 in the first place ;) )","commit_id":"b6249268244630e65af2ea5f2e343ca2c7491e03"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"d0e06bb8f11616e9b1bd71c606abdca8d2dea767","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    key \u003d encodeutils.to_utf8(key)"},{"line_number":55,"context_line":"    md5_key \u003d hashlib.md5(key).hexdigest()"},{"line_number":56,"context_line":"    iv \u003d encode_data(Random.new().read(iv_bit_count))"},{"line_number":57,"context_line":"    if six.PY3:"},{"line_number":58,"context_line":"        iv \u003d iv.encode(\u0027ascii\u0027)"},{"line_number":59,"context_line":"    iv \u003d iv[:iv_bit_count]"},{"line_number":60,"context_line":"    aes \u003d AES.new(md5_key, AES.MODE_CBC, iv)"},{"line_number":61,"context_line":"    data \u003d pad_for_encryption(data, iv_bit_count)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_954056a7","line":58,"range":{"start_line":57,"start_character":0,"end_line":58,"end_character":31},"in_reply_to":"ba0121b8_3704f9be","updated":"2016-03-29 19:19:33.000000000","message":"On Python 3, encode_data() returns Unicode (str type).\n\nIf encode_data() is used outside crypto.py, it\u0027s a convenient choice. If it\u0027s only used inside cryto.py, we should maybe return bytes.","commit_id":"b6249268244630e65af2ea5f2e343ca2c7491e03"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ec1e3e49e44572d1896dde45eeb593961e3e1659","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    key \u003d encodeutils.to_utf8(key)"},{"line_number":55,"context_line":"    md5_key \u003d hashlib.md5(key).hexdigest()"},{"line_number":56,"context_line":"    iv \u003d encode_data(Random.new().read(iv_bit_count))"},{"line_number":57,"context_line":"    if six.PY3:"},{"line_number":58,"context_line":"        iv \u003d iv.encode(\u0027ascii\u0027)"},{"line_number":59,"context_line":"    iv \u003d iv[:iv_bit_count]"},{"line_number":60,"context_line":"    aes \u003d AES.new(md5_key, AES.MODE_CBC, iv)"},{"line_number":61,"context_line":"    data \u003d pad_for_encryption(data, iv_bit_count)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_948582d0","line":58,"range":{"start_line":57,"start_character":0,"end_line":58,"end_character":31},"in_reply_to":"ba0121b8_3b75f897","updated":"2016-04-20 12:38:38.000000000","message":"iv.encode() is no more needed since encode_data(iv) was removed to enhance the quality of the IV.","commit_id":"b6249268244630e65af2ea5f2e343ca2c7491e03"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"28751c9d27b89b69b5cb3dd831a24054dde5c967","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    key \u003d encodeutils.to_utf8(key)"},{"line_number":55,"context_line":"    md5_key \u003d hashlib.md5(key).hexdigest()"},{"line_number":56,"context_line":"    iv \u003d encode_data(Random.new().read(iv_bit_count))"},{"line_number":57,"context_line":"    if six.PY3:"},{"line_number":58,"context_line":"        iv \u003d iv.encode(\u0027ascii\u0027)"},{"line_number":59,"context_line":"    iv \u003d iv[:iv_bit_count]"},{"line_number":60,"context_line":"    aes \u003d AES.new(md5_key, AES.MODE_CBC, iv)"},{"line_number":61,"context_line":"    data \u003d pad_for_encryption(data, iv_bit_count)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_3b75f897","line":58,"range":{"start_line":57,"start_character":0,"end_line":58,"end_character":31},"in_reply_to":"ba0121b8_954056a7","updated":"2016-03-29 21:06:16.000000000","message":"It\u0027s supposed to return a Unicode(utf-8) str in both versions.\nRight now this method is only used by the module feature, but it\u0027s still called outside of crypto_utils in trove.module.models.py:223\nLet me think about your idea of returning bytes (it might make sense, but would need to be coordinated with the trove client piece).","commit_id":"b6249268244630e65af2ea5f2e343ca2c7491e03"}],"trove/tests/unittests/common/test_crypto_utils.py":[{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"0dd1e3a2bd3789e0f74669fc16094147a66f5580","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_encode_decode_string(self):"},{"line_number":33,"context_line":"        random_data \u003d bytearray(Random.new().read(12))"},{"line_number":34,"context_line":"        data \u003d [b\u0027abc\u0027, b\u0027numbers01234\u0027, b\u0027\\x00\\xFF\\x00\\xFF\\xFF\\x00\u0027,"},{"line_number":35,"context_line":"                random_data]"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        for datum in data:"},{"line_number":38,"context_line":"            encoded_data \u003d crypto_utils.encode_data(datum)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_2dc2f433","line":35,"range":{"start_line":34,"start_character":16,"end_line":35,"end_character":27},"updated":"2016-03-29 18:14:29.000000000","message":"In python3, you\u0027re no longer testing strings, just bytes (the test is misnamed - should be just test_encode_decode - must have missed that originally)","commit_id":"b6249268244630e65af2ea5f2e343ca2c7491e03"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"d0e06bb8f11616e9b1bd71c606abdca8d2dea767","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_encode_decode_string(self):"},{"line_number":33,"context_line":"        random_data \u003d bytearray(Random.new().read(12))"},{"line_number":34,"context_line":"        data \u003d [b\u0027abc\u0027, b\u0027numbers01234\u0027, b\u0027\\x00\\xFF\\x00\\xFF\\xFF\\x00\u0027,"},{"line_number":35,"context_line":"                random_data]"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        for datum in data:"},{"line_number":38,"context_line":"            encoded_data \u003d crypto_utils.encode_data(datum)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_f598b21d","line":35,"range":{"start_line":34,"start_character":16,"end_line":35,"end_character":27},"in_reply_to":"ba0121b8_2dc2f433","updated":"2016-03-29 19:19:33.000000000","message":"The Unicode type wasn\u0027t test before.\n\nWe can enhance the test to test Unicode too, but it\u0027s not obvious, because Unicode is transformed to bytes, it\u0027s not exactly data \u003d\u003d decrypt(encrypt(data)).\n\nIt probably deserves a new test.","commit_id":"b6249268244630e65af2ea5f2e343ca2c7491e03"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ec1e3e49e44572d1896dde45eeb593961e3e1659","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_encode_decode_string(self):"},{"line_number":33,"context_line":"        random_data \u003d bytearray(Random.new().read(12))"},{"line_number":34,"context_line":"        data \u003d [b\u0027abc\u0027, b\u0027numbers01234\u0027, b\u0027\\x00\\xFF\\x00\\xFF\\xFF\\x00\u0027,"},{"line_number":35,"context_line":"                random_data]"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        for datum in data:"},{"line_number":38,"context_line":"            encoded_data \u003d crypto_utils.encode_data(datum)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_3458ee55","line":35,"range":{"start_line":34,"start_character":16,"end_line":35,"end_character":27},"in_reply_to":"ba0121b8_9bca446d","updated":"2016-04-20 12:38:38.000000000","message":"I added an unit test on Unicode string.","commit_id":"b6249268244630e65af2ea5f2e343ca2c7491e03"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"28751c9d27b89b69b5cb3dd831a24054dde5c967","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_encode_decode_string(self):"},{"line_number":33,"context_line":"        random_data \u003d bytearray(Random.new().read(12))"},{"line_number":34,"context_line":"        data \u003d [b\u0027abc\u0027, b\u0027numbers01234\u0027, b\u0027\\x00\\xFF\\x00\\xFF\\xFF\\x00\u0027,"},{"line_number":35,"context_line":"                random_data]"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        for datum in data:"},{"line_number":38,"context_line":"            encoded_data \u003d crypto_utils.encode_data(datum)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_9bca446d","line":35,"range":{"start_line":34,"start_character":16,"end_line":35,"end_character":27},"in_reply_to":"ba0121b8_f598b21d","updated":"2016-03-29 21:06:16.000000000","message":"Yes, I noticed that just now doing some quick manual testing. I\u0027m ok with breaking it out into a new test.","commit_id":"b6249268244630e65af2ea5f2e343ca2c7491e03"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"0dd1e3a2bd3789e0f74669fc16094147a66f5580","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            self.assertEqual(data_str, unpadded_str,"},{"line_number":52,"context_line":"                             \"String mangled after pad/unpad\")"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def test_encryp_decrypt(self):"},{"line_number":55,"context_line":"        key \u003d \u0027my_secure_key\u0027"},{"line_number":56,"context_line":"        for size in range(1, 100):"},{"line_number":57,"context_line":"            orig_data \u003d Random.new().read(size)"},{"line_number":58,"context_line":"            orig_encoded \u003d crypto_utils.encode_data(orig_data)"},{"line_number":59,"context_line":"            encrypted \u003d crypto_utils.encrypt_data(orig_encoded, key)"},{"line_number":60,"context_line":"            encoded \u003d crypto_utils.encode_data(encrypted)"},{"line_number":61,"context_line":"            decoded \u003d crypto_utils.decode_data(encoded)"},{"line_number":62,"context_line":"            decrypted \u003d crypto_utils.decrypt_data(decoded, key)"},{"line_number":63,"context_line":"            final_decoded \u003d crypto_utils.decode_data(decrypted)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"            self.assertEqual(orig_data, final_decoded,"},{"line_number":66,"context_line":"                             \"Decrypted data did not match original\")"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def test_encrypt(self):"},{"line_number":69,"context_line":"        # test encrypt() with an hardcoded IV"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_d7793d31","line":66,"range":{"start_line":54,"start_character":0,"end_line":66,"end_character":69},"updated":"2016-03-29 18:14:29.000000000","message":"We\u0027re missing a test case here.  Since our code currently *only* passes in base64/utf-8 encoded data to encrypt, that\u0027s what I tested here.  We should probably add a test the just encrypts/decrypts data, without first encoding it (since that\u0027s a possible code path).","commit_id":"b6249268244630e65af2ea5f2e343ca2c7491e03"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"28751c9d27b89b69b5cb3dd831a24054dde5c967","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            self.assertEqual(data_str, unpadded_str,"},{"line_number":52,"context_line":"                             \"String mangled after pad/unpad\")"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def test_encryp_decrypt(self):"},{"line_number":55,"context_line":"        key \u003d \u0027my_secure_key\u0027"},{"line_number":56,"context_line":"        for size in range(1, 100):"},{"line_number":57,"context_line":"            orig_data \u003d Random.new().read(size)"},{"line_number":58,"context_line":"            orig_encoded \u003d crypto_utils.encode_data(orig_data)"},{"line_number":59,"context_line":"            encrypted \u003d crypto_utils.encrypt_data(orig_encoded, key)"},{"line_number":60,"context_line":"            encoded \u003d crypto_utils.encode_data(encrypted)"},{"line_number":61,"context_line":"            decoded \u003d crypto_utils.decode_data(encoded)"},{"line_number":62,"context_line":"            decrypted \u003d crypto_utils.decrypt_data(decoded, key)"},{"line_number":63,"context_line":"            final_decoded \u003d crypto_utils.decode_data(decrypted)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"            self.assertEqual(orig_data, final_decoded,"},{"line_number":66,"context_line":"                             \"Decrypted data did not match original\")"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def test_encrypt(self):"},{"line_number":69,"context_line":"        # test encrypt() with an hardcoded IV"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_1b8c7434","line":66,"range":{"start_line":54,"start_character":0,"end_line":66,"end_character":69},"in_reply_to":"ba0121b8_d7793d31","updated":"2016-03-29 21:06:16.000000000","message":"Here\u0027s what I was thinking:\n\n    def test_encryp_decrypt(self):\n        key \u003d \u0027my_secure_key\u0027\n        random_data \u003d bytearray(Random.new().read(12))\n        data \u003d [Random.new().read(size) for size in range(1, 100)]\n        data.extend([\u0027abc\u0027, \u0027numbers01234\u0027, \u0027\\x00\\xFF\\x00\\xFF\\xFF\\x00\u0027,\n                    random_data, b\u0027abc\u0027, b\u0027numbers01234\u0027,\n                    b\u0027\\x00\\xFF\\x00\\xFF\\xFF\\x00\u0027])\n        for datum in data:\n            encrypted \u003d crypto_utils.encrypt_data(datum, key)\n            decrypted \u003d crypto_utils.decrypt_data(encrypted, key)\n\n            self.assertEqual(datum, decrypted,\n                             \"Decrypted data did not match original\")\n\nbut it will suffer from what you mentioned above...","commit_id":"b6249268244630e65af2ea5f2e343ca2c7491e03"}]}
