|  | #!/usr/bin/env python | 
|  | # Copyright 2016 The Chromium Authors | 
|  | # Use of this source code is governed by a BSD-style license that can be | 
|  | # found in the LICENSE file. | 
|  |  | 
|  | """Certificates for testing issuer lookup. | 
|  |  | 
|  | Root | 
|  | /|   |   |\\ | 
|  | / |   |   | \\ | 
|  | /  |   |   |  \\ | 
|  | /   |   |   |   \\ | 
|  | /    |   |   |    \\ | 
|  | v     v   v   v     v | 
|  | I1_1  i1_2  I2  I3_1 I3_2 | 
|  | |    |    |   |    | | 
|  | |    |    |   |    | | 
|  | |    |    |   |    | | 
|  | |    |    |   |    | | 
|  | v    v    v   |    | | 
|  | C1    C2   D   E1   E2 | 
|  |  | 
|  | I1 (i1_1.pem) and i1 (i1_2.pem) have subjects that are equal after | 
|  | normalization. | 
|  |  | 
|  | I3_1 and I3_2 have subjects that are exactly equal. | 
|  |  | 
|  | C1 and C2 should (attempt to) chain up through both I1 and i1, since I1 and i1 | 
|  | have the same the name (after normalization). | 
|  |  | 
|  | E1 and E3 should (attempt to) chain up through both I3 intermediates. | 
|  | """ | 
|  |  | 
|  | import os | 
|  | import sys | 
|  | sys.path += ['..'] | 
|  |  | 
|  | import gencerts | 
|  |  | 
|  |  | 
|  | def write_cert_to_file(cert, filename): | 
|  | gencerts.write_string_to_file( | 
|  | "Generated by %s.\n" | 
|  | "Refer to generator script docstring for details.\n%s" % ( | 
|  | sys.argv[0], cert.get_cert_pem()), | 
|  | filename) | 
|  |  | 
|  |  | 
|  | # Self-signed root certificate | 
|  | root = gencerts.create_self_signed_root_certificate('Root') | 
|  | write_cert_to_file(root, 'root.pem') | 
|  |  | 
|  |  | 
|  | # Intermediate certificates | 
|  | i1_1 = gencerts.create_intermediate_certificate('I1', root) | 
|  | write_cert_to_file(i1_1, 'i1_1.pem') | 
|  |  | 
|  | # same name (after normalization), different key | 
|  | i1_2 = gencerts.create_intermediate_certificate('i1', root) | 
|  | write_cert_to_file(i1_2, 'i1_2.pem') | 
|  |  | 
|  | # different name | 
|  | i2 = gencerts.create_intermediate_certificate('I2', root) | 
|  | write_cert_to_file(i2, 'i2.pem') | 
|  |  | 
|  | # Two intermediates with exactly the same name. | 
|  | i3_1 = gencerts.create_intermediate_certificate('I3', root) | 
|  | write_cert_to_file(i3_1, 'i3_1.pem') | 
|  | i3_2 = gencerts.create_intermediate_certificate('I3', root) | 
|  | write_cert_to_file(i3_2, 'i3_2.pem') | 
|  |  | 
|  | # target certs | 
|  |  | 
|  | c1 = gencerts.create_end_entity_certificate('C1', i1_1) | 
|  | write_cert_to_file(c1, 'c1.pem') | 
|  |  | 
|  | c2 = gencerts.create_end_entity_certificate('C2', i1_2) | 
|  | write_cert_to_file(c2, 'c2.pem') | 
|  |  | 
|  | d = gencerts.create_end_entity_certificate('D', i2) | 
|  | write_cert_to_file(d, 'd.pem') | 
|  |  | 
|  | e1 = gencerts.create_end_entity_certificate('E1', i3_1) | 
|  | write_cert_to_file(e1, 'e1.pem') | 
|  |  | 
|  | e2 = gencerts.create_end_entity_certificate('E2', i3_2) | 
|  | write_cert_to_file(e2, 'e2.pem') | 
|  |  |