)]}'
{"nova/crypto.py":[{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"af800d4ea190602eebcbdcd4ac3a03c1402c2b53","unresolved":false,"context_lines":[{"line_number":280,"context_line":"    return CONF.user_cert_subject % (project_id, user_id, utils.isotime())"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"def generate_x509_cert(user_id, project_id, bits\u003d2048):"},{"line_number":284,"context_line":"    \"\"\"Generate and sign a cert for user in project.\"\"\""},{"line_number":285,"context_line":"    subject \u003d _user_cert_subject(user_id, project_id)"},{"line_number":286,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bae84128_872bf393","line":283,"range":{"start_line":283,"start_character":4,"end_line":283,"end_character":22},"updated":"2016-02-22 04:45:50.000000000","message":"This entire function should be replaced by pyca in my opinion, but that\u0027s another patch.","commit_id":"45a1e0a6f35535dcbba7452b7d7febd9faacebde"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"68dea26e4207adcaf3b7f828587427eda22f812f","unresolved":false,"context_lines":[{"line_number":280,"context_line":"    return CONF.user_cert_subject % (project_id, user_id, utils.isotime())"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"def generate_x509_cert(user_id, project_id, bits\u003d2048):"},{"line_number":284,"context_line":"    \"\"\"Generate and sign a cert for user in project.\"\"\""},{"line_number":285,"context_line":"    subject \u003d _user_cert_subject(user_id, project_id)"},{"line_number":286,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bae84128_4e73bb4d","line":283,"range":{"start_line":283,"start_character":4,"end_line":283,"end_character":22},"in_reply_to":"bae84128_872bf393","updated":"2016-02-22 10:39:10.000000000","message":"Done， thanks for your comment.","commit_id":"45a1e0a6f35535dcbba7452b7d7febd9faacebde"}],"nova/tests/unit/test_crypto.py":[{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"05c1ebd8a4890c095f038647ec7eecc04988d73c","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                              crypto.ensure_ca_filesystem)"},{"line_number":91,"context_line":"            self.assertEqual(start, os.getcwd())"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def test_certificate_signature_algorithm(self):"},{"line_number":94,"context_line":"        def get_signature_algorithm_from_cert_str(cert_str):"},{"line_number":95,"context_line":"            algo \u003d None"},{"line_number":96,"context_line":"            for line in cert_str.splitlines():"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_80be98fd","line":93,"range":{"start_line":93,"start_character":8,"end_line":93,"end_character":44},"updated":"2016-03-07 07:35:46.000000000","message":"I think a more appropriate name would be test_generate_x509_cert","commit_id":"c71ba7e9849446a140ddf21826344d244a788c38"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"05c1ebd8a4890c095f038647ec7eecc04988d73c","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            self.assertEqual(start, os.getcwd())"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def test_certificate_signature_algorithm(self):"},{"line_number":94,"context_line":"        def get_signature_algorithm_from_cert_str(cert_str):"},{"line_number":95,"context_line":"            algo \u003d None"},{"line_number":96,"context_line":"            for line in cert_str.splitlines():"},{"line_number":97,"context_line":"                if \u0027Signature Algorithm:\u0027 in line:"},{"line_number":98,"context_line":"                    algo \u003d line.split(\u0027 \u0027)[-1]"},{"line_number":99,"context_line":"                    break"},{"line_number":100,"context_line":"            return algo"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        with utils.tempdir() as tmpdir:"},{"line_number":103,"context_line":"            self.flags(ca_path\u003dtmpdir)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_c0dc201b","line":100,"range":{"start_line":94,"start_character":7,"end_line":100,"end_character":23},"updated":"2016-03-07 07:35:46.000000000","message":"This won\u0027t work since the CSR is PEM encoded base64. You should decode the csr using a library and check for the signature algorithm.\n\nFor example:\n\n-----BEGIN CERTIFICATE REQUEST-----\nMIICijCCAXICAQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUx\nITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDCCASIwDQYJKoZIhvcN\nAQEBBQADggEPADCCAQoCggEBALMg83rgSorg5VCqPQPbqd+ygZgzMqzl8qoAF2jd\n0y7U6g+VHpTVgM4ycB7T+LyhunGG32IG8XGu3xDge83HDElEMbKB4WgPhveZHG28\nYWVn6RkMvs9fxzQ93cx8+0vYcvcqt81Cc+K+P8QJdjBnbPFM9TGVGpyX+kYUCrI+\ni9dx4YdKoP5aIJlMBp5cVVBRPuBeE+qv8VxzuyJzQFNdCPI7HaIuwohXulnfUKa0\nFTlHqnSSnNscddZ4oJ1AW1MIjHfXSx47O15BP8DeCunoMkw/+L2hGwHY766m8XhT\ndYCdGTJ0/p77cqBIlOrI7nPqhX4BHCJkUKSEv7XWHBIwZosCAwEAAaAAMA0GCSqG\nSIb3DQEBCwUAA4IBAQBrKBHEjTw8uAUMWQp+mtL+76kpqzNmWcI8P8Bce0sqW2Km\nf+mX5wNx5cAY1ekfYe5kq4PD6tCjXb45x25JEWEEmikOXAVxJaISbtkeFkZhyuW+\nq1sdnRKKVJcL/Q9IVwiS6jhJtly5Kr63LKWGpa5BXOlbFPFXgM0EhEekt0o7m17/\nDi5LXJCRiQox/s1KI3ovIVHBFxQtz3/y7S2yGIveukw2UFzpv84XZPfBbUfeXi7M\nWLSQSfkvPDdenDeVS4ROPqbJw80xufqG+6FDOlavF5GxLrpXstPUlCQZuPmLJBFN\nerxuE3n9lBJTUBiHty3rBCmtNisXQEi1jaNO9M6E\n-----END CERTIFICATE REQUEST-----","commit_id":"c71ba7e9849446a140ddf21826344d244a788c38"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"05c1ebd8a4890c095f038647ec7eecc04988d73c","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        with utils.tempdir() as tmpdir:"},{"line_number":103,"context_line":"            self.flags(ca_path\u003dtmpdir)"},{"line_number":104,"context_line":"            crypto.ensure_ca_filesystem()"},{"line_number":105,"context_line":"            _key, cert_str \u003d crypto.generate_x509_cert(\u0027fake\u0027, \u0027fake\u0027)"},{"line_number":106,"context_line":"            sign_algo \u003d get_signature_algorithm_from_cert_str(cert_str)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"            self.assertEqual(\u0027sha256WithRSAEncryption\u0027, sign_algo)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_c00420c8","line":105,"range":{"start_line":105,"start_character":18,"end_line":105,"end_character":26},"updated":"2016-03-07 07:35:46.000000000","message":"Technically, this is not a cert, but a CSR (certificate signing request)","commit_id":"c71ba7e9849446a140ddf21826344d244a788c38"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"05c1ebd8a4890c095f038647ec7eecc04988d73c","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        with utils.tempdir() as tmpdir:"},{"line_number":103,"context_line":"            self.flags(ca_path\u003dtmpdir)"},{"line_number":104,"context_line":"            crypto.ensure_ca_filesystem()"},{"line_number":105,"context_line":"            _key, cert_str \u003d crypto.generate_x509_cert(\u0027fake\u0027, \u0027fake\u0027)"},{"line_number":106,"context_line":"            sign_algo \u003d get_signature_algorithm_from_cert_str(cert_str)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"            self.assertEqual(\u0027sha256WithRSAEncryption\u0027, sign_algo)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_00b448f0","line":105,"range":{"start_line":105,"start_character":64,"end_line":105,"end_character":68},"updated":"2016-03-07 07:35:46.000000000","message":"This second parameter is for the bits, should leave it as 2048, not \u0027fake\u0027.","commit_id":"c71ba7e9849446a140ddf21826344d244a788c38"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"babfd5752689c95c11d6ff379028b6ea8d1ad7cf","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        with utils.tempdir() as tmpdir:"},{"line_number":103,"context_line":"            self.flags(ca_path\u003dtmpdir)"},{"line_number":104,"context_line":"            crypto.ensure_ca_filesystem()"},{"line_number":105,"context_line":"            _key, cert_str \u003d crypto.generate_x509_cert(\u0027fake\u0027, \u0027fake\u0027)"},{"line_number":106,"context_line":"            sign_algo \u003d get_signature_algorithm_from_cert_str(cert_str)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"            self.assertEqual(\u0027sha256WithRSAEncryption\u0027, sign_algo)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_d434d4df","line":105,"range":{"start_line":105,"start_character":64,"end_line":105,"end_character":68},"in_reply_to":"5aef4532_00b448f0","updated":"2016-03-07 13:34:14.000000000","message":"Looks like the user and project ids for generate_x509_cert, but it is bits for generate_winrm_x509_cert. So I think the existing \u0027fake\u0027 value is okay.","commit_id":"c71ba7e9849446a140ddf21826344d244a788c38"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"05c1ebd8a4890c095f038647ec7eecc04988d73c","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"            self.assertEqual(\u0027sha256WithRSAEncryption\u0027, sign_algo)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"class RevokeCertsTest(test.NoDBTestCase):"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    @mock.patch(\u0027nova.crypto.revoke_cert\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_608d4c7b","line":110,"updated":"2016-03-07 07:35:46.000000000","message":"Please also add a test for changed function generate_winrm_x509_cert","commit_id":"c71ba7e9849446a140ddf21826344d244a788c38"}]}
