Index: net/data/verify_certificate_chain_unittest/target-serverauth-various-keyusages/generate-chains.py |
diff --git a/net/data/verify_certificate_chain_unittest/target-serverauth-various-keyusages/generate-chains.py b/net/data/verify_certificate_chain_unittest/target-serverauth-various-keyusages/generate-chains.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..6b81970161a2dbc233a453389d0d926138a4b286 |
--- /dev/null |
+++ b/net/data/verify_certificate_chain_unittest/target-serverauth-various-keyusages/generate-chains.py |
@@ -0,0 +1,52 @@ |
+#!/usr/bin/python |
+# Copyright (c) 2017 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+"""Generates a variety of chains where the target certificate varies in its key |
+type and key usages.""" |
+ |
+import sys |
+sys.path += ['..'] |
+ |
+import common |
+ |
+# Self-signed root certificate (used as trust anchor). |
+root = common.create_self_signed_root_certificate('Root') |
+ |
+# Intermediate certificate. |
+intermediate = common.create_intermediate_certificate('Intermediate', root) |
+ |
+# Use either an RSA key, or an EC key for the target certificate. Generate the |
+# possible keys ahead of time so as not to duplicate the work. |
+ |
+KEYS = { |
+ 'rsa': common.get_or_generate_rsa_key(2048, |
+ common.create_key_path('Target-rsa')), |
+ 'ec': common.get_or_generate_ec_key('secp384r1', |
+ common.create_key_path('Target-ec')) |
+}; |
+ |
+KEY_USAGES = [ 'decipherOnly', |
+ 'digitalSignature', |
+ 'keyAgreement', |
+ 'keyEncipherment' ] |
+ |
+# The proper key usage depends on the key purpose (serverAuth in this case), |
+# and the key type. Generate a variety of combinations. |
+for key_type in sorted(KEYS.keys()): |
+ for key_usage in KEY_USAGES: |
+ # Target certificate. |
+ target = common.create_end_entity_certificate('Target', intermediate) |
+ target.get_extensions().set_property('extendedKeyUsage', 'serverAuth') |
+ target.get_extensions().set_property('keyUsage', |
+ 'critical,%s' % (key_usage)) |
+ |
+ # Set the key. |
+ target.set_key(KEYS[key_type]) |
+ |
+ # Write the chain. |
+ chain = [target, intermediate, root] |
+ description = ('Certificate chain where the target uses a %s key and has ' |
+ 'the single key usage %s') % (key_type.upper(), key_usage) |
+ common.write_chain(description, chain, '%s-%s.pem' % (key_type, key_usage)) |