)]}'
{"nova/exception.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"d154b94b18eab124d006f7f15f155983ef73379a","unresolved":false,"context_lines":[{"line_number":1679,"context_line":"class ImageDownloadModuleConfigurationError(ImageDownloadModuleError):"},{"line_number":1680,"context_line":"    msg_fmt \u003d _(\"The module %(module)s is misconfigured: %(reason)s.\")"},{"line_number":1681,"context_line":""},{"line_number":1682,"context_line":"class SignatureVerificationError(NovaException):"},{"line_number":1683,"context_line":"    msg_fmt \u003d _(\"The signature verification for the image\""},{"line_number":1684,"context_line":"                \"failed: %(reason)s.\")"},{"line_number":1685,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_533ddab9","line":1682,"updated":"2015-12-10 20:22:22.000000000","message":"PEP8 error: should be two blank lines before a top-level construct such as a class.","commit_id":"dfde767121813e515e41c92efda80c459167b597"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"5f7f2dcbe3bef455acf2a552631b7cd1f0558e89","unresolved":false,"context_lines":[{"line_number":1681,"context_line":""},{"line_number":1682,"context_line":""},{"line_number":1683,"context_line":"class SignatureVerificationError(NovaException):"},{"line_number":1684,"context_line":"    msg_fmt \u003d _(\"Signature verification for the image\""},{"line_number":1685,"context_line":"                \"failed: %(reason)s.\")"},{"line_number":1686,"context_line":""},{"line_number":1687,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_0db6f8f8","line":1684,"updated":"2015-12-13 07:58:00.000000000","message":"missing space at the end of the line","commit_id":"04e013dc919688692d57e2b22e268498bbcd9d04"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"97c61f75c8e49cab393f07adbe076b3d63121dbc","unresolved":false,"context_lines":[{"line_number":1681,"context_line":""},{"line_number":1682,"context_line":""},{"line_number":1683,"context_line":"class SignatureVerificationError(NovaException):"},{"line_number":1684,"context_line":"    msg_fmt \u003d _(\"Signature verification for the image\""},{"line_number":1685,"context_line":"                \"failed: %(reason)s.\")"},{"line_number":1686,"context_line":""},{"line_number":1687,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_3f817ac3","line":1684,"in_reply_to":"7a740942_0db6f8f8","updated":"2015-12-14 13:13:44.000000000","message":"Done","commit_id":"04e013dc919688692d57e2b22e268498bbcd9d04"}],"nova/signature_utils.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"d154b94b18eab124d006f7f15f155983ef73379a","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from nova import exception"},{"line_number":33,"context_line":"from nova import i18n"},{"line_number":34,"context_line":"from oslo_utils import timeutils"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":37,"context_line":"_ \u003d i18n._"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_5364fae3","line":34,"updated":"2015-12-10 20:22:22.000000000","message":"oslo_utils is a third-party import and should be associated with the middle block of imports, rather than the last block.","commit_id":"dfde767121813e515e41c92efda80c459167b597"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"d154b94b18eab124d006f7f15f155983ef73379a","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    return public_key.verifier("},{"line_number":138,"context_line":"        signature,"},{"line_number":139,"context_line":"        ec.ECDSA(hash_method)"},{"line_number":140,"context_line":"        )"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"def create_verifier_for_dsa(signature, hash_method, public_key,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_d3854a59","line":140,"updated":"2015-12-10 20:22:22.000000000","message":"femtonit: for consistency with create_verifier_for_pss(), this close-paren should be de-dented by 4 spaces.","commit_id":"dfde767121813e515e41c92efda80c459167b597"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"c54d61c5c77e240a1d8475fe3bd05e6a6de2a7b0","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    \u0027SHA-224\u0027: hashes.SHA224(),"},{"line_number":45,"context_line":"    \u0027SHA-256\u0027: hashes.SHA256(),"},{"line_number":46,"context_line":"    \u0027SHA-384\u0027: hashes.SHA384(),"},{"line_number":47,"context_line":"    \u0027SHA-512\u0027: hashes.SHA512()"},{"line_number":48,"context_line":"}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"# These are the currently supported signature key types"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_21b1a247","line":47,"updated":"2015-12-11 17:18:22.000000000","message":"I have a slight preference for including trailing commas in initializers for dictionaries where you\u0027re using a one-entry-per-line style like here.  Same goes for lists, sets, tuples, even function calls, where the closing brace, bracket, or parenthesis is on a line by itself.  The primary advantage is to avoid having to modify a preceding line when someone comes along and adds a new entry.","commit_id":"a50485965a390851e19e84f268f2171eafe560fd"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"4c7d536b6f4c6df2cdb2c042da9c17919548afa9","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    \u0027SHA-224\u0027: hashes.SHA224(),"},{"line_number":45,"context_line":"    \u0027SHA-256\u0027: hashes.SHA256(),"},{"line_number":46,"context_line":"    \u0027SHA-384\u0027: hashes.SHA384(),"},{"line_number":47,"context_line":"    \u0027SHA-512\u0027: hashes.SHA512()"},{"line_number":48,"context_line":"}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"# These are the currently supported signature key types"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_c2753998","line":47,"in_reply_to":"7a740942_21b1a247","updated":"2015-12-11 19:07:12.000000000","message":"Done","commit_id":"a50485965a390851e19e84f268f2171eafe560fd"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"c54d61c5c77e240a1d8475fe3bd05e6a6de2a7b0","unresolved":false,"context_lines":[{"line_number":51,"context_line":"(RSA_PSS, ECC_SECT571K1, ECC_SECT409K1, ECC_SECT571R1, ECC_SECT409R1,"},{"line_number":52,"context_line":" ECC_SECP521R1, ECC_SECP384R1, DSA) \u003d ("},{"line_number":53,"context_line":"    # RSA Options"},{"line_number":54,"context_line":"    \u0027RSA-PSS\u0027,"},{"line_number":55,"context_line":"    # ECC Options -- note that only those with key sizes \u003e\u003d384 are included"},{"line_number":56,"context_line":"    \u0027ECC_SECT571K1\u0027,"},{"line_number":57,"context_line":"    \u0027ECC_SECT409K1\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_863d0cdf","line":54,"updated":"2015-12-11 17:18:22.000000000","message":"Style-wise, I have a slight preference for the constant assignment in, e.g., nova/compute/task_states.py.  That is, I\u0027d like to see these written as:\n\n    # Currently supported signature key types\n    # RSA options\n    RSA_PSS \u003d \u0027RSA-PSS\u0027\n    # ECC options - note that only those with key sizes \u003e\u003d384 are included\n    ECC_SECT571K1 \u003d \u0027ECC_SECT571K1\u0027\n    …","commit_id":"a50485965a390851e19e84f268f2171eafe560fd"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"4c7d536b6f4c6df2cdb2c042da9c17919548afa9","unresolved":false,"context_lines":[{"line_number":51,"context_line":"(RSA_PSS, ECC_SECT571K1, ECC_SECT409K1, ECC_SECT571R1, ECC_SECT409R1,"},{"line_number":52,"context_line":" ECC_SECP521R1, ECC_SECP384R1, DSA) \u003d ("},{"line_number":53,"context_line":"    # RSA Options"},{"line_number":54,"context_line":"    \u0027RSA-PSS\u0027,"},{"line_number":55,"context_line":"    # ECC Options -- note that only those with key sizes \u003e\u003d384 are included"},{"line_number":56,"context_line":"    \u0027ECC_SECT571K1\u0027,"},{"line_number":57,"context_line":"    \u0027ECC_SECT409K1\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_e27ab587","line":54,"in_reply_to":"7a740942_863d0cdf","updated":"2015-12-11 19:07:12.000000000","message":"Done","commit_id":"a50485965a390851e19e84f268f2171eafe560fd"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"3ee0024e5ef1dbdff219b8c7756d6edd9bc42781","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"# These are the currently supported certificate formats"},{"line_number":76,"context_line":"(X_509,) \u003d ("},{"line_number":77,"context_line":"    \u0027X.509\u0027,"},{"line_number":78,"context_line":")"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"CERTIFICATE_FORMATS \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_e21875d5","line":77,"updated":"2015-12-11 19:24:33.000000000","message":"This could also be converted to the style I advocated in the previous patchset, i.e.:\n\n    X_509 \u003d \u0027X.509\u0027","commit_id":"1cf2c3e0da2aa5191a509c1f993497066e17e36c"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"3ee0024e5ef1dbdff219b8c7756d6edd9bc42781","unresolved":false,"context_lines":[{"line_number":87,"context_line":"}"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"# Required image property names"},{"line_number":90,"context_line":"(SIGNATURE, HASH_METHOD, KEY_TYPE, CERT_UUID) \u003d ("},{"line_number":91,"context_line":"    \u0027img_signature\u0027,"},{"line_number":92,"context_line":"    \u0027img_signature_hash_method\u0027,"},{"line_number":93,"context_line":"    \u0027img_signature_key_type\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_021ee1ba","line":90,"updated":"2015-12-11 19:24:33.000000000","message":"ibid.","commit_id":"1cf2c3e0da2aa5191a509c1f993497066e17e36c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"5f7f2dcbe3bef455acf2a552631b7cd1f0558e89","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from nova import i18n"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":37,"context_line":"_ \u003d i18n._"},{"line_number":38,"context_line":"_LE \u003d i18n._LE"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_6dc53c5a","line":37,"updated":"2015-12-13 07:58:00.000000000","message":"why not from nova.i18n import _LE?","commit_id":"04e013dc919688692d57e2b22e268498bbcd9d04"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"97c61f75c8e49cab393f07adbe076b3d63121dbc","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from nova import i18n"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":37,"context_line":"_ \u003d i18n._"},{"line_number":38,"context_line":"_LE \u003d i18n._LE"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_1f6b5e1f","line":37,"in_reply_to":"7a740942_6dc53c5a","updated":"2015-12-14 13:13:44.000000000","message":"Done","commit_id":"04e013dc919688692d57e2b22e268498bbcd9d04"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"5f7f2dcbe3bef455acf2a552631b7cd1f0558e89","unresolved":false,"context_lines":[{"line_number":210,"context_line":"    else:"},{"line_number":211,"context_line":"        # Error creating the verifier"},{"line_number":212,"context_line":"        raise exception.SignatureVerificationError("},{"line_number":213,"context_line":"            \u0027Error occurred while verifying the signature\u0027)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"def get_signature(signature_data):"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_8dc2e851","line":213,"updated":"2015-12-13 07:58:00.000000000","message":"missing translation _()\n\nthis should be:\nexception.SignatureVerificationError(reason\u003d_(\u0027Error occurred whil ...\u0027))","commit_id":"04e013dc919688692d57e2b22e268498bbcd9d04"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"97c61f75c8e49cab393f07adbe076b3d63121dbc","unresolved":false,"context_lines":[{"line_number":210,"context_line":"    else:"},{"line_number":211,"context_line":"        # Error creating the verifier"},{"line_number":212,"context_line":"        raise exception.SignatureVerificationError("},{"line_number":213,"context_line":"            \u0027Error occurred while verifying the signature\u0027)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"def get_signature(signature_data):"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_9f650e46","line":213,"in_reply_to":"7a740942_8dc2e851","updated":"2015-12-14 13:13:44.000000000","message":"Done","commit_id":"04e013dc919688692d57e2b22e268498bbcd9d04"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"5f7f2dcbe3bef455acf2a552631b7cd1f0558e89","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        signature \u003d base64.decode_as_bytes(signature_data)"},{"line_number":225,"context_line":"    except (TypeError, binascii.Error):"},{"line_number":226,"context_line":"        raise exception.SignatureVerificationError("},{"line_number":227,"context_line":"            \u0027The signature data was not properly encoded using base64\u0027)"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    return signature"},{"line_number":230,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_ad96c449","line":227,"updated":"2015-12-13 07:58:00.000000000","message":"ditto","commit_id":"04e013dc919688692d57e2b22e268498bbcd9d04"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"97c61f75c8e49cab393f07adbe076b3d63121dbc","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        signature \u003d base64.decode_as_bytes(signature_data)"},{"line_number":225,"context_line":"    except (TypeError, binascii.Error):"},{"line_number":226,"context_line":"        raise exception.SignatureVerificationError("},{"line_number":227,"context_line":"            \u0027The signature data was not properly encoded using base64\u0027)"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    return signature"},{"line_number":230,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_ff56925a","line":227,"in_reply_to":"7a740942_ad96c449","updated":"2015-12-14 13:13:44.000000000","message":"Done","commit_id":"04e013dc919688692d57e2b22e268498bbcd9d04"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"5f7f2dcbe3bef455acf2a552631b7cd1f0558e89","unresolved":false,"context_lines":[{"line_number":252,"context_line":"    \"\"\""},{"line_number":253,"context_line":"    if signature_key_type not in SIGNATURE_KEY_TYPES:"},{"line_number":254,"context_line":"        raise exception.SignatureVerificationError("},{"line_number":255,"context_line":"            \u0027Invalid signature key type: %s\u0027 % signature_key_type)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    return signature_key_type"},{"line_number":258,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_cd93105a","line":255,"updated":"2015-12-13 07:58:00.000000000","message":"ditto","commit_id":"04e013dc919688692d57e2b22e268498bbcd9d04"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"97c61f75c8e49cab393f07adbe076b3d63121dbc","unresolved":false,"context_lines":[{"line_number":252,"context_line":"    \"\"\""},{"line_number":253,"context_line":"    if signature_key_type not in SIGNATURE_KEY_TYPES:"},{"line_number":254,"context_line":"        raise exception.SignatureVerificationError("},{"line_number":255,"context_line":"            \u0027Invalid signature key type: %s\u0027 % signature_key_type)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    return signature_key_type"},{"line_number":258,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_1f527e67","line":255,"in_reply_to":"7a740942_cd93105a","updated":"2015-12-14 13:13:44.000000000","message":"Done","commit_id":"04e013dc919688692d57e2b22e268498bbcd9d04"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"5f7f2dcbe3bef455acf2a552631b7cd1f0558e89","unresolved":false,"context_lines":[{"line_number":276,"context_line":"    # Confirm the type is of the type expected based on the signature key type"},{"line_number":277,"context_line":"    if not isinstance(public_key, SIGNATURE_KEY_TYPES[signature_key_type]):"},{"line_number":278,"context_line":"        raise exception.SignatureVerificationError("},{"line_number":279,"context_line":"            \u0027Invalid public key type for signature key type: %s\u0027"},{"line_number":280,"context_line":"            % signature_key_type)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    return public_key"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_8d99887b","line":279,"updated":"2015-12-13 07:58:00.000000000","message":"ditto","commit_id":"04e013dc919688692d57e2b22e268498bbcd9d04"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"97c61f75c8e49cab393f07adbe076b3d63121dbc","unresolved":false,"context_lines":[{"line_number":276,"context_line":"    # Confirm the type is of the type expected based on the signature key type"},{"line_number":277,"context_line":"    if not isinstance(public_key, SIGNATURE_KEY_TYPES[signature_key_type]):"},{"line_number":278,"context_line":"        raise exception.SignatureVerificationError("},{"line_number":279,"context_line":"            \u0027Invalid public key type for signature key type: %s\u0027"},{"line_number":280,"context_line":"            % signature_key_type)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    return public_key"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_df4716a1","line":279,"in_reply_to":"7a740942_8d99887b","updated":"2015-12-14 13:13:44.000000000","message":"Done","commit_id":"04e013dc919688692d57e2b22e268498bbcd9d04"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"5f7f2dcbe3bef455acf2a552631b7cd1f0558e89","unresolved":false,"context_lines":[{"line_number":305,"context_line":"               % {\u0027id\u0027: signature_certificate_uuid,"},{"line_number":306,"context_line":"                  \u0027e\u0027: encodeutils.exception_to_unicode(e)})"},{"line_number":307,"context_line":"        LOG.error(msg)"},{"line_number":308,"context_line":"        raise exception.SignatureVerificationError("},{"line_number":309,"context_line":"            \u0027Unable to retrieve certificate with ID: %s\u0027"},{"line_number":310,"context_line":"            % signature_certificate_uuid)"},{"line_number":311,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_2d897426","line":308,"updated":"2015-12-13 07:58:00.000000000","message":"ditto","commit_id":"04e013dc919688692d57e2b22e268498bbcd9d04"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"97c61f75c8e49cab393f07adbe076b3d63121dbc","unresolved":false,"context_lines":[{"line_number":305,"context_line":"               % {\u0027id\u0027: signature_certificate_uuid,"},{"line_number":306,"context_line":"                  \u0027e\u0027: encodeutils.exception_to_unicode(e)})"},{"line_number":307,"context_line":"        LOG.error(msg)"},{"line_number":308,"context_line":"        raise exception.SignatureVerificationError("},{"line_number":309,"context_line":"            \u0027Unable to retrieve certificate with ID: %s\u0027"},{"line_number":310,"context_line":"            % signature_certificate_uuid)"},{"line_number":311,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_7fc94225","line":308,"in_reply_to":"7a740942_2d897426","updated":"2015-12-14 13:13:44.000000000","message":"Done","commit_id":"04e013dc919688692d57e2b22e268498bbcd9d04"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"5f7f2dcbe3bef455acf2a552631b7cd1f0558e89","unresolved":false,"context_lines":[{"line_number":310,"context_line":"            % signature_certificate_uuid)"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    if cert.format not in CERTIFICATE_FORMATS:"},{"line_number":313,"context_line":"        raise exception.SignatureVerificationError("},{"line_number":314,"context_line":"            \u0027Invalid certificate format: %s\u0027 % cert.format)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"    if cert.format \u003d\u003d X_509:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_ed7e0c1a","line":313,"updated":"2015-12-13 07:58:00.000000000","message":"ditto","commit_id":"04e013dc919688692d57e2b22e268498bbcd9d04"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"97c61f75c8e49cab393f07adbe076b3d63121dbc","unresolved":false,"context_lines":[{"line_number":310,"context_line":"            % signature_certificate_uuid)"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    if cert.format not in CERTIFICATE_FORMATS:"},{"line_number":313,"context_line":"        raise exception.SignatureVerificationError("},{"line_number":314,"context_line":"            \u0027Invalid certificate format: %s\u0027 % cert.format)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"    if cert.format \u003d\u003d X_509:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_5fd246d2","line":313,"in_reply_to":"7a740942_ed7e0c1a","updated":"2015-12-14 13:13:44.000000000","message":"Done","commit_id":"04e013dc919688692d57e2b22e268498bbcd9d04"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"5f7f2dcbe3bef455acf2a552631b7cd1f0558e89","unresolved":false,"context_lines":[{"line_number":342,"context_line":"            % certificate.not_valid_before)"},{"line_number":343,"context_line":"    elif now \u003e certificate.not_valid_after:"},{"line_number":344,"context_line":"        raise exception.SignatureVerificationError("},{"line_number":345,"context_line":"            \u0027Certificate is not valid after: %s UTC\u0027"},{"line_number":346,"context_line":"            % certificate.not_valid_after)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_0d84b808","line":345,"updated":"2015-12-13 07:58:00.000000000","message":"ditto","commit_id":"04e013dc919688692d57e2b22e268498bbcd9d04"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"97c61f75c8e49cab393f07adbe076b3d63121dbc","unresolved":false,"context_lines":[{"line_number":342,"context_line":"            % certificate.not_valid_before)"},{"line_number":343,"context_line":"    elif now \u003e certificate.not_valid_after:"},{"line_number":344,"context_line":"        raise exception.SignatureVerificationError("},{"line_number":345,"context_line":"            \u0027Certificate is not valid after: %s UTC\u0027"},{"line_number":346,"context_line":"            % certificate.not_valid_after)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_ffdd32e0","line":345,"in_reply_to":"7a740942_0d84b808","updated":"2015-12-14 13:13:44.000000000","message":"Done","commit_id":"04e013dc919688692d57e2b22e268498bbcd9d04"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"c1e931c62e384b6b1246de24ba73e50b8dd2787b","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"# Note: This is the signature hash method, which is independent from the"},{"line_number":40,"context_line":"# image data checksum hash method (which is handled elsewhere)."},{"line_number":41,"context_line":"HASH_METHODS \u003d {"},{"line_number":42,"context_line":"    \u0027SHA-224\u0027: hashes.SHA224(),"},{"line_number":43,"context_line":"    \u0027SHA-256\u0027: hashes.SHA256(),"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_94aba874","line":40,"updated":"2015-12-14 15:53:35.000000000","message":"Now that there\u0027s only one hash method (with the sign-the-data approach), this note should be removed.","commit_id":"215274e6188554e7b35455de1111c4a6b7c528d3"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"4fadb45099e5b1ea1e25bef910acffabe681e140","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"# Note: This is the signature hash method, which is independent from the"},{"line_number":40,"context_line":"# image data checksum hash method (which is handled elsewhere)."},{"line_number":41,"context_line":"HASH_METHODS \u003d {"},{"line_number":42,"context_line":"    \u0027SHA-224\u0027: hashes.SHA224(),"},{"line_number":43,"context_line":"    \u0027SHA-256\u0027: hashes.SHA256(),"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a710552_415242df","line":40,"in_reply_to":"7a740942_94aba874","updated":"2015-12-14 18:38:53.000000000","message":"Done","commit_id":"215274e6188554e7b35455de1111c4a6b7c528d3"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"c1e931c62e384b6b1246de24ba73e50b8dd2787b","unresolved":false,"context_lines":[{"line_number":92,"context_line":"# each key type will require its own verifier"},{"line_number":93,"context_line":"def create_verifier_for_pss(signature, hash_method, public_key,"},{"line_number":94,"context_line":"                            image_properties):"},{"line_number":95,"context_line":"    \"\"\"Create the verifier to use when the key type is RSA-PSS."},{"line_number":96,"context_line":"    :param signature: the decoded signature to use"},{"line_number":97,"context_line":"    :param hash_method: the hash method to use, as a cryptography object"},{"line_number":98,"context_line":"    :param public_key: the public key to use, as a cryptography object"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_b46fc45e","line":95,"updated":"2015-12-14 15:53:35.000000000","message":"There should be an empty line here (see http://docs.openstack.org/developer/hacking/#docstrings and H405)\n\nThis should be fixed in several of the below methods as well.","commit_id":"215274e6188554e7b35455de1111c4a6b7c528d3"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"4fadb45099e5b1ea1e25bef910acffabe681e140","unresolved":false,"context_lines":[{"line_number":92,"context_line":"# each key type will require its own verifier"},{"line_number":93,"context_line":"def create_verifier_for_pss(signature, hash_method, public_key,"},{"line_number":94,"context_line":"                            image_properties):"},{"line_number":95,"context_line":"    \"\"\"Create the verifier to use when the key type is RSA-PSS."},{"line_number":96,"context_line":"    :param signature: the decoded signature to use"},{"line_number":97,"context_line":"    :param hash_method: the hash method to use, as a cryptography object"},{"line_number":98,"context_line":"    :param public_key: the public key to use, as a cryptography object"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a710552_0163dab2","line":95,"in_reply_to":"7a740942_b46fc45e","updated":"2015-12-14 18:38:53.000000000","message":"Done","commit_id":"215274e6188554e7b35455de1111c4a6b7c528d3"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"c1e931c62e384b6b1246de24ba73e50b8dd2787b","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    :param hash_method: the hash method to use, as a cryptography object"},{"line_number":98,"context_line":"    :param public_key: the public key to use, as a cryptography object"},{"line_number":99,"context_line":"    :param image_properties: the key-value properties about the image"},{"line_number":100,"context_line":"    :return: the verifier to use to verify the signature for RSA-PSS"},{"line_number":101,"context_line":"    :raises: SignatureVerificationError if the RSA-PSS specific properties"},{"line_number":102,"context_line":"                                        are invalid"},{"line_number":103,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_94c2c832","line":100,"updated":"2015-12-14 15:53:35.000000000","message":"I think this should be \"returns\" instead of \"return\"\n\nThis should be fixed in several of the below methods as well.","commit_id":"215274e6188554e7b35455de1111c4a6b7c528d3"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"4fadb45099e5b1ea1e25bef910acffabe681e140","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    :param hash_method: the hash method to use, as a cryptography object"},{"line_number":98,"context_line":"    :param public_key: the public key to use, as a cryptography object"},{"line_number":99,"context_line":"    :param image_properties: the key-value properties about the image"},{"line_number":100,"context_line":"    :return: the verifier to use to verify the signature for RSA-PSS"},{"line_number":101,"context_line":"    :raises: SignatureVerificationError if the RSA-PSS specific properties"},{"line_number":102,"context_line":"                                        are invalid"},{"line_number":103,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a710552_a15766c9","line":100,"in_reply_to":"7a740942_94c2c832","updated":"2015-12-14 18:38:53.000000000","message":"Done","commit_id":"215274e6188554e7b35455de1111c4a6b7c528d3"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"c1e931c62e384b6b1246de24ba73e50b8dd2787b","unresolved":false,"context_lines":[{"line_number":296,"context_line":"    try:"},{"line_number":297,"context_line":"        # The certificate retrieved here is a castellan certificate object"},{"line_number":298,"context_line":"        cert \u003d keymgr_api.get(context, signature_certificate_uuid)"},{"line_number":299,"context_line":"    except Exception as e:"},{"line_number":300,"context_line":"        # The problem encountered may be backend-specific, since castellan"},{"line_number":301,"context_line":"        # can use different backends.  Rather than importing all possible"},{"line_number":302,"context_line":"        # backends here, the generic \"Exception\" is used."}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_3442f40f","line":299,"updated":"2015-12-14 15:53:35.000000000","message":"Castellan now supports using an overall \"KeyManagerError\" instead of re-raising the exception raised by the underlying key manager (see http://git.openstack.org/cgit/openstack/castellan/commit/?id\u003d0be6648f6fd5760f834f8da2a83ff9a1280c5b90 for the commit that made this change; https://github.com/openstack/castellan/blob/master/castellan/key_manager/barbican_key_manager.py for the current version of the code).\n\nThis \"Exception\" should be modified to use \"KeyManagerError\" instead -- note that this requires a version of castellan of at least 0.3.0","commit_id":"215274e6188554e7b35455de1111c4a6b7c528d3"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"70f4a7ef3e1724e3cd157572708ce1bf87fee592","unresolved":false,"context_lines":[{"line_number":296,"context_line":"    try:"},{"line_number":297,"context_line":"        # The certificate retrieved here is a castellan certificate object"},{"line_number":298,"context_line":"        cert \u003d keymgr_api.get(context, signature_certificate_uuid)"},{"line_number":299,"context_line":"    except Exception as e:"},{"line_number":300,"context_line":"        # The problem encountered may be backend-specific, since castellan"},{"line_number":301,"context_line":"        # can use different backends.  Rather than importing all possible"},{"line_number":302,"context_line":"        # backends here, the generic \"Exception\" is used."}],"source_content_type":"text/x-python","patch_set":8,"id":"5a710552_a725365d","line":299,"in_reply_to":"5a710552_21c85674","updated":"2015-12-14 19:14:29.000000000","message":"@Brianna: This is added in patchset 10.","commit_id":"215274e6188554e7b35455de1111c4a6b7c528d3"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"4fadb45099e5b1ea1e25bef910acffabe681e140","unresolved":false,"context_lines":[{"line_number":296,"context_line":"    try:"},{"line_number":297,"context_line":"        # The certificate retrieved here is a castellan certificate object"},{"line_number":298,"context_line":"        cert \u003d keymgr_api.get(context, signature_certificate_uuid)"},{"line_number":299,"context_line":"    except Exception as e:"},{"line_number":300,"context_line":"        # The problem encountered may be backend-specific, since castellan"},{"line_number":301,"context_line":"        # can use different backends.  Rather than importing all possible"},{"line_number":302,"context_line":"        # backends here, the generic \"Exception\" is used."}],"source_content_type":"text/x-python","patch_set":8,"id":"5a710552_21c85674","line":299,"in_reply_to":"7a740942_3442f40f","updated":"2015-12-14 18:38:53.000000000","message":"Forgot to include this in patchset 9, will include in patchset 10.","commit_id":"215274e6188554e7b35455de1111c4a6b7c528d3"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"ed8d3b82d18a711f71f985c037d19955a3405f68","unresolved":false,"context_lines":[{"line_number":188,"context_line":"    \"\"\""},{"line_number":189,"context_line":"    if not should_verify_signature(image_properties):"},{"line_number":190,"context_line":"        raise exception.SignatureVerificationError("},{"line_number":191,"context_line":"            \u0027Required image properties for signature verification do not\u0027"},{"line_number":192,"context_line":"            \u0027 exist. Cannot verify signature.\u0027)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    signature \u003d get_signature(image_properties[SIGNATURE])"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a710552_0ebd0768","line":191,"updated":"2015-12-15 17:15:46.000000000","message":"Missing translation","commit_id":"bdbc4e0778fc7bb03aec08a34d762c948a53849c"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"71d1d7e279c90dd3a9f28e4ede44654d8151e1a4","unresolved":false,"context_lines":[{"line_number":188,"context_line":"    \"\"\""},{"line_number":189,"context_line":"    if not should_verify_signature(image_properties):"},{"line_number":190,"context_line":"        raise exception.SignatureVerificationError("},{"line_number":191,"context_line":"            \u0027Required image properties for signature verification do not\u0027"},{"line_number":192,"context_line":"            \u0027 exist. Cannot verify signature.\u0027)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    signature \u003d get_signature(image_properties[SIGNATURE])"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a710552_341616a8","line":191,"in_reply_to":"5a710552_0ebd0768","updated":"2015-12-15 17:49:39.000000000","message":"Good catch, thanks. Done","commit_id":"bdbc4e0778fc7bb03aec08a34d762c948a53849c"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"ed8d3b82d18a711f71f985c037d19955a3405f68","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        signature \u003d base64.decode_as_bytes(signature_data)"},{"line_number":225,"context_line":"    except (TypeError, binascii.Error):"},{"line_number":226,"context_line":"        raise exception.SignatureVerificationError("},{"line_number":227,"context_line":"            reason \u003d _(\u0027The signature data was not properly \u0027"},{"line_number":228,"context_line":"                       \u0027encoded using base64\u0027))"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    return signature"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a710552_ee475b75","line":227,"updated":"2015-12-15 17:15:46.000000000","message":"This is a keyword argument; the preferred style is to use no spaces around the \u0027\u003d\u0027:\n\n    raise exception.SignatureVerificationError(\n        reason\u003d_(\u0027The signature data was not properly \u0027\n                 \u0027encoded using base64\u0027))","commit_id":"bdbc4e0778fc7bb03aec08a34d762c948a53849c"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"71d1d7e279c90dd3a9f28e4ede44654d8151e1a4","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        signature \u003d base64.decode_as_bytes(signature_data)"},{"line_number":225,"context_line":"    except (TypeError, binascii.Error):"},{"line_number":226,"context_line":"        raise exception.SignatureVerificationError("},{"line_number":227,"context_line":"            reason \u003d _(\u0027The signature data was not properly \u0027"},{"line_number":228,"context_line":"                       \u0027encoded using base64\u0027))"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    return signature"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a710552_f40f2e86","line":227,"in_reply_to":"5a710552_ee475b75","updated":"2015-12-15 17:49:39.000000000","message":"Done","commit_id":"bdbc4e0778fc7bb03aec08a34d762c948a53849c"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"215a0bf5bfc215191cf535e9f236cc7a5ba406d7","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    \"\"\"Retrieve the image properties and use them to create a verifier."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    :param context: the user context for authentication"},{"line_number":184,"context_line":"    :param image_properties: the key-value properties about the image"},{"line_number":185,"context_line":"    :returns: instance of"},{"line_number":186,"context_line":"    cryptography.hazmat.primitives.asymmetric.AsymmetricVerificationContext"},{"line_number":187,"context_line":"    :raises: SignatureVerificationError if we fail to build the verifier"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a7e1126_5499ab77","line":184,"range":{"start_line":184,"start_character":64,"end_line":184,"end_character":69},"updated":"2015-12-22 10:41:55.000000000","message":"This parameter should have been written to take an objects.ImageMeta object instance, rather than an anonymous dict. Likewise for all the other methods here that take the same parameter. Our goal is to eliminate all use of dicts for image props in Nova. Please send a followup patch to convert this code to object based access","commit_id":"60a2383b68c40189bbaee570215698f3ec75ba71"}],"nova/tests/unit/test_signature_utils.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"c54d61c5c77e240a1d8475fe3bd05e6a6de2a7b0","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        cert \u003d self.certs.get(cert_uuid)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        if cert is None:"},{"line_number":73,"context_line":"            raise Exception(\"No matching certificate found.\")"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        return cert"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_01c34658","line":73,"updated":"2015-12-11 17:18:22.000000000","message":"Rather than raising a generic Exception, it would be nice to raise a more specific exception.  That could be TestingException, or it could be something that the key manager might raise.  That way, you can distinguish the expected exception from something else.\n\n(Note: this is generic advice for writing unit tests, and may not be applicable in this case; feel free to tell me so :)","commit_id":"a50485965a390851e19e84f268f2171eafe560fd"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"4c7d536b6f4c6df2cdb2c042da9c17919548afa9","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        cert \u003d self.certs.get(cert_uuid)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        if cert is None:"},{"line_number":73,"context_line":"            raise Exception(\"No matching certificate found.\")"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        return cert"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_a2a7cd09","line":73,"in_reply_to":"7a740942_01c34658","updated":"2015-12-11 19:07:12.000000000","message":"I\u0027m leaving this as is for the moment.","commit_id":"a50485965a390851e19e84f268f2171eafe560fd"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"c54d61c5c77e240a1d8475fe3bd05e6a6de2a7b0","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                                 KEY_TYPE: \u0027SIG_KEY_TYPE\u0027},"},{"line_number":141,"context_line":"                                {HASH_METHOD: \u0027HASH_METHOD\u0027,"},{"line_number":142,"context_line":"                                 SIGNATURE: \u0027SIGNATURE\u0027,"},{"line_number":143,"context_line":"                                 KEY_TYPE: \u0027SIG_KEY_TYPE\u0027}]"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        for bad_props in bad_image_properties:"},{"line_number":146,"context_line":"            result \u003d signature_utils.should_verify_signature(bad_props)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_e1739a4c","line":143,"updated":"2015-12-11 17:18:22.000000000","message":"You might want to try a style like:\n\n    bad_image_properties \u003d [\n        {\n            CERT_UUID: \u0027CERT_UUID\u0027,\n            HASH_METHOD: \u0027HASH_METHOD\u0027,\n            SIGNATURE: \u0027SIGNATURE\u0027,\n        }, {\n            …\n        },\n    ]","commit_id":"a50485965a390851e19e84f268f2171eafe560fd"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"a14537aa33c521ffbc00571c07d7d760d4a80767","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                                 KEY_TYPE: \u0027SIG_KEY_TYPE\u0027},"},{"line_number":141,"context_line":"                                {HASH_METHOD: \u0027HASH_METHOD\u0027,"},{"line_number":142,"context_line":"                                 SIGNATURE: \u0027SIGNATURE\u0027,"},{"line_number":143,"context_line":"                                 KEY_TYPE: \u0027SIG_KEY_TYPE\u0027}]"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        for bad_props in bad_image_properties:"},{"line_number":146,"context_line":"            result \u003d signature_utils.should_verify_signature(bad_props)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_62da45ea","line":143,"in_reply_to":"7a740942_62aec5e7","updated":"2015-12-11 19:23:09.000000000","message":"*shrug* it does, but IMHO, it improves readability.  But, up to you…","commit_id":"a50485965a390851e19e84f268f2171eafe560fd"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"4c7d536b6f4c6df2cdb2c042da9c17919548afa9","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                                 KEY_TYPE: \u0027SIG_KEY_TYPE\u0027},"},{"line_number":141,"context_line":"                                {HASH_METHOD: \u0027HASH_METHOD\u0027,"},{"line_number":142,"context_line":"                                 SIGNATURE: \u0027SIGNATURE\u0027,"},{"line_number":143,"context_line":"                                 KEY_TYPE: \u0027SIG_KEY_TYPE\u0027}]"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        for bad_props in bad_image_properties:"},{"line_number":146,"context_line":"            result \u003d signature_utils.should_verify_signature(bad_props)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_62aec5e7","line":143,"in_reply_to":"7a740942_e1739a4c","updated":"2015-12-11 19:07:12.000000000","message":"Leaving this as is because the other style adds a lot of lines.","commit_id":"a50485965a390851e19e84f268f2171eafe560fd"}]}
