Chromium Code Reviews| Index: net/tools/testserver/device_management.py |
| diff --git a/net/tools/testserver/device_management.py b/net/tools/testserver/device_management.py |
| index bbfb3c5ff08871773c7a0b29c3a130201a6a2bd4..6ad06225ea8dd61edad42f495bd90d9ad88a6e73 100644 |
| --- a/net/tools/testserver/device_management.py |
| +++ b/net/tools/testserver/device_management.py |
| @@ -45,7 +45,8 @@ Example: |
| }, |
| "managed_users" : [ |
| "secret123456" |
| - ] |
| + ], |
| + "current_key_index": 0 |
| } |
| """ |
| @@ -455,18 +456,17 @@ class RequestHandler(object): |
| settings = dp.ChromeDeviceSettingsProto() |
| self.GatherDevicePolicySettings(settings, policy.get(policy_key, {})) |
| - # Figure out the key we want to use. If multiple keys are configured, the |
| - # server will rotate through them in a round-robin fashion. |
| + # Sign with 'current_key_index', defaulting to key 0. |
| signing_key = None |
| req_key = None |
| - key_version = 1 |
| + current_key_index = policy.get('current_key_index', 0) |
| nkeys = len(self._server.keys) |
| - if msg.signature_type == dm.PolicyFetchRequest.SHA1_RSA and nkeys > 0: |
| + if (msg.signature_type == dm.PolicyFetchRequest.SHA1_RSA and |
| + current_key_index in range(nkeys)): |
| + signing_key = self._server.keys[current_key_index] |
| if msg.public_key_version in range(1, nkeys + 1): |
| # requested key exists, use for signing and rotate. |
| req_key = self._server.keys[msg.public_key_version - 1]['private_key'] |
| - key_version = (msg.public_key_version % nkeys) + 1 |
| - signing_key = self._server.keys[key_version - 1] |
| # Fill the policy data protobuf. |
| policy_data = dm.PolicyData() |
| @@ -480,7 +480,7 @@ class RequestHandler(object): |
| policy_data.settings_entity_id = msg.settings_entity_id |
| if signing_key: |
| - policy_data.public_key_version = key_version |
| + policy_data.public_key_version = current_key_index + 1 |
| if msg.policy_type == 'google/chromeos/publicaccount': |
| policy_data.username = msg.settings_entity_id |
| else: |
| @@ -498,7 +498,7 @@ class RequestHandler(object): |
| if signing_key: |
| fetch_response.policy_data_signature = ( |
| signing_key['private_key'].hashAndSign(signed_data).tostring()) |
| - if msg.public_key_version != key_version: |
| + if msg.public_key_version != current_key_index + 1: |
| fetch_response.new_public_key = signing_key['public_key'] |
| if req_key: |
| fetch_response.new_public_key_signature = ( |
| @@ -549,35 +549,23 @@ class RequestHandler(object): |
| class TestServer(object): |
| """Handles requests and keeps global service state.""" |
| - def __init__(self, policy_path, private_key_paths): |
| + def __init__(self, policy_path): |
| """Initializes the server. |
| Args: |
| policy_path: Names the file to read JSON-formatted policy from. |
| - private_key_paths: List of paths to read private keys from. |
| """ |
| self._registered_tokens = {} |
| self.policy_path = policy_path |
| + # Generate 2 private keys. |
| self.keys = [] |
| - if private_key_paths: |
| - # Load specified keys from the filesystem. |
| - for key_path in private_key_paths: |
| - try: |
| - key = tlslite.api.parsePEMKey(open(key_path).read(), private=True) |
| - except IOError: |
| - print 'Failed to load private key from %s' % key_path |
| - continue |
| - |
| - assert key is not None |
| - self.keys.append({ 'private_key' : key }) |
| - else: |
| - # Generate a key if none were specified. |
| - key = tlslite.api.generateRSAKey(1024) |
| + for i in range(2): |
| + key = tlslite.api.generateRSAKey(512) |
|
Mattias Nissler (ping if slow)
2013/02/07 14:12:07
I'd hate to loose the ability to use keys passed o
Joao da Silva
2013/02/07 16:32:00
Reverted.
|
| assert key is not None |
| self.keys.append({ 'private_key' : key }) |
| - # Derive the public keys from the loaded private keys. |
| + # Derive the public keys from the generated private keys. |
| for entry in self.keys: |
| key = entry['private_key'] |