)]}'
{"nova/crypto.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"2e2929fb77bb489b6ed620d533528ef59d00359e","unresolved":false,"context_lines":[{"line_number":27,"context_line":"import os"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from cryptography import exceptions"},{"line_number":30,"context_line":"from cryptography.hazmat.backends import default_backend"},{"line_number":31,"context_line":"from cryptography.hazmat.primitives.asymmetric import padding"},{"line_number":32,"context_line":"from cryptography.hazmat.primitives import hashes"},{"line_number":33,"context_line":"from cryptography.hazmat.primitives import serialization"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a50d1a3_3fab0d8b","line":30,"updated":"2015-07-27 15:50:45.000000000","message":"Import modules, not objects: http://docs.openstack.org/developer/hacking/#imports","commit_id":"9c765ba8e39d0cf1d9fbfb82ac260ec00890f420"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"e26d75ccc9a5c7f2bf54161a08c65e622e1dd337","unresolved":false,"context_lines":[{"line_number":27,"context_line":"import os"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from cryptography import exceptions"},{"line_number":30,"context_line":"from cryptography.hazmat.backends import default_backend"},{"line_number":31,"context_line":"from cryptography.hazmat.primitives.asymmetric import padding"},{"line_number":32,"context_line":"from cryptography.hazmat.primitives import hashes"},{"line_number":33,"context_line":"from cryptography.hazmat.primitives import serialization"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a50d1a3_465c067d","line":30,"in_reply_to":"3a50d1a3_3fab0d8b","updated":"2015-07-27 21:04:06.000000000","message":"Done","commit_id":"9c765ba8e39d0cf1d9fbfb82ac260ec00890f420"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"08ad789b12ca304a7626763884fb00249e1c4f07","unresolved":false,"context_lines":[{"line_number":133,"context_line":"def generate_fingerprint(public_key):"},{"line_number":134,"context_line":"    try:"},{"line_number":135,"context_line":"        pub_bytes \u003d public_key.encode(\u0027utf-8\u0027)"},{"line_number":136,"context_line":"        serialization.load_ssh_public_key(pub_bytes,"},{"line_number":137,"context_line":"                                          backends.default_backend())"},{"line_number":138,"context_line":"        pub_data \u003d base64.b64decode(public_key.split(\u0027 \u0027)[1])"},{"line_number":139,"context_line":"        digest \u003d hashes.Hash(hashes.MD5(), backends.default_backend())"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a50d1a3_01dca871","line":136,"updated":"2015-07-27 21:27:20.000000000","message":"Why are you calling this method?  You\u0027re ignoring the return value, and as far as I can see from the documentation, it doesn\u0027t have any side effects.","commit_id":"2cf2e9c89ad8a3716ff5534a1848038a190887a5"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"e222f59f6698fef33b1868f03aafe7dfed1e4d7d","unresolved":false,"context_lines":[{"line_number":133,"context_line":"def generate_fingerprint(public_key):"},{"line_number":134,"context_line":"    try:"},{"line_number":135,"context_line":"        pub_bytes \u003d public_key.encode(\u0027utf-8\u0027)"},{"line_number":136,"context_line":"        serialization.load_ssh_public_key(pub_bytes,"},{"line_number":137,"context_line":"                                          backends.default_backend())"},{"line_number":138,"context_line":"        pub_data \u003d base64.b64decode(public_key.split(\u0027 \u0027)[1])"},{"line_number":139,"context_line":"        digest \u003d hashes.Hash(hashes.MD5(), backends.default_backend())"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a50d1a3_8166784f","line":136,"in_reply_to":"3a50d1a3_01dca871","updated":"2015-07-27 21:35:42.000000000","message":"Simply to validate that the given public_key string is a proper ssh public key.  The return (a PublicKey class) isn\u0027t used because python-cryptography does not have a method to generate a fingerprint.","commit_id":"2cf2e9c89ad8a3716ff5534a1848038a190887a5"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"71ab069688f32072c5c74bb7b5302dc4ef8cdfab","unresolved":false,"context_lines":[{"line_number":133,"context_line":"def generate_fingerprint(public_key):"},{"line_number":134,"context_line":"    try:"},{"line_number":135,"context_line":"        pub_bytes \u003d public_key.encode(\u0027utf-8\u0027)"},{"line_number":136,"context_line":"        serialization.load_ssh_public_key(pub_bytes,"},{"line_number":137,"context_line":"                                          backends.default_backend())"},{"line_number":138,"context_line":"        pub_data \u003d base64.b64decode(public_key.split(\u0027 \u0027)[1])"},{"line_number":139,"context_line":"        digest \u003d hashes.Hash(hashes.MD5(), backends.default_backend())"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a50d1a3_a1a7f44e","line":136,"in_reply_to":"3a50d1a3_8166784f","updated":"2015-07-27 21:37:19.000000000","message":"OK, could you add a comment to that effect to clarify the intent?","commit_id":"2cf2e9c89ad8a3716ff5534a1848038a190887a5"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"1f546b161de5f0feb0f70632277db4e8024411e8","unresolved":false,"context_lines":[{"line_number":133,"context_line":"def generate_fingerprint(public_key):"},{"line_number":134,"context_line":"    try:"},{"line_number":135,"context_line":"        pub_bytes \u003d public_key.encode(\u0027utf-8\u0027)"},{"line_number":136,"context_line":"        serialization.load_ssh_public_key(pub_bytes,"},{"line_number":137,"context_line":"                                          backends.default_backend())"},{"line_number":138,"context_line":"        pub_data \u003d base64.b64decode(public_key.split(\u0027 \u0027)[1])"},{"line_number":139,"context_line":"        digest \u003d hashes.Hash(hashes.MD5(), backends.default_backend())"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a50d1a3_f3faafbc","line":136,"in_reply_to":"3a50d1a3_a1a7f44e","updated":"2015-07-27 21:49:15.000000000","message":"Done","commit_id":"2cf2e9c89ad8a3716ff5534a1848038a190887a5"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"08ad789b12ca304a7626763884fb00249e1c4f07","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        data \u003d f.read()"},{"line_number":194,"context_line":"    try:"},{"line_number":195,"context_line":"        priv_key \u003d serialization.load_pem_private_key(data, None,"},{"line_number":196,"context_line":"                                                    backends.default_backend())"},{"line_number":197,"context_line":"        return priv_key.decrypt(text, padding.PKCS1v15())"},{"line_number":198,"context_line":"    except (ValueError, TypeError, exceptions.UnsupportedAlgorithm) as exc:"},{"line_number":199,"context_line":"        raise exception.DecryptionFailure(reason\u003dsix.text_type(exc))"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a50d1a3_a169348e","line":196,"updated":"2015-07-27 21:27:20.000000000","message":"You might try this indentation:\n\n    priv_key \u003d serialization.load_pem_private_key(\n        data, None, backends.default_backend())","commit_id":"2cf2e9c89ad8a3716ff5534a1848038a190887a5"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"e222f59f6698fef33b1868f03aafe7dfed1e4d7d","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        data \u003d f.read()"},{"line_number":194,"context_line":"    try:"},{"line_number":195,"context_line":"        priv_key \u003d serialization.load_pem_private_key(data, None,"},{"line_number":196,"context_line":"                                                    backends.default_backend())"},{"line_number":197,"context_line":"        return priv_key.decrypt(text, padding.PKCS1v15())"},{"line_number":198,"context_line":"    except (ValueError, TypeError, exceptions.UnsupportedAlgorithm) as exc:"},{"line_number":199,"context_line":"        raise exception.DecryptionFailure(reason\u003dsix.text_type(exc))"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a50d1a3_41d390d5","line":196,"in_reply_to":"3a50d1a3_a169348e","updated":"2015-07-27 21:35:42.000000000","message":"Done","commit_id":"2cf2e9c89ad8a3716ff5534a1848038a190887a5"}]}
