| Index: client/cros/ownership.py
|
| diff --git a/client/cros/ownership.py b/client/cros/ownership.py
|
| index 462c247f4e7b3505b3a20d35b5070b2fe1f3f0f4..f9338e3e65c424f40c3fc7c539e1473ad0211c24 100644
|
| --- a/client/cros/ownership.py
|
| +++ b/client/cros/ownership.py
|
| @@ -47,6 +47,19 @@ def system_output_on_fail(cmd):
|
| raise
|
|
|
|
|
| +def __unlink(filename):
|
| + try:
|
| + os.unlink(filename)
|
| + except (IOError, OSError) as error:
|
| + logging.info(error)
|
| +
|
| +
|
| +def clear_ownership():
|
| + __unlink(constants.OWNER_KEY_FILE)
|
| + __unlink(constants.SIGNED_PREFERENCES_FILE)
|
| + __unlink(constants.SIGNED_POLICY_FILE)
|
| +
|
| +
|
| NSSDB = constants.CRYPTOHOME_MOUNT_PT + '/.pki/nssdb'
|
| PK12UTIL = 'nsspk12util'
|
| OPENSSLP12 = 'openssl pkcs12'
|
| @@ -73,13 +86,26 @@ def pairgen():
|
| return (keyfile, certfile)
|
|
|
|
|
| +def pairgen_as_data():
|
| + """Generates keypair, returns keys as data.
|
| +
|
| + Generates a fresh owner keypair and then passes back the
|
| + PEM-formatted private key and the DER-encoded public key.
|
| + """
|
| + (keypath, certpath) = pairgen()
|
| + keyfile = scoped_tempfile(keypath)
|
| + certfile = scoped_tempfile(certpath)
|
| + return (utils.read_file(keyfile.name),
|
| + cert_extract_pubkey_der(certfile.name))
|
| +
|
| +
|
| def push_to_nss(keyfile, certfile, nssdb):
|
| """Takes a pre-generated key pair and pushes them to an NSS DB.
|
|
|
| Given paths to a private key and cert in PEM format, stores the pair
|
| in the provided nssdb.
|
| """
|
| - for_push = scoped_tempfile(scoped_tempfile.tempdir.name + 'for_push.p12')
|
| + for_push = scoped_tempfile(scoped_tempfile.tempdir.name + '/for_push.p12')
|
| cmd = '%s -export -in %s -inkey %s -out %s ' % (
|
| OPENSSLP12, certfile, keyfile, for_push.name)
|
| cmd += '-passin pass: -passout pass:'
|
| @@ -109,7 +135,7 @@ def cert_extract_pubkey_der(pem):
|
| Pass in an X509 certificate in PEM format, and you'll get back the
|
| DER-formatted public key as a string.
|
| """
|
| - outfile = scoped_tempfile(scoped_tempfile.tempdir.name + 'pubkey.der')
|
| + outfile = scoped_tempfile(scoped_tempfile.tempdir.name + '/pubkey.der')
|
| cmd = '%s -in %s -pubkey -noout ' % (OPENSSLX509, pem)
|
| cmd += '| %s -outform DER -pubin -out %s' % (OPENSSLRSA,
|
| outfile.name)
|
| @@ -118,27 +144,31 @@ def cert_extract_pubkey_der(pem):
|
| return der
|
|
|
|
|
| -def generate_and_register_owner_keypair(testuser, testpass):
|
| - """Generates keypair, registers with NSS, sets owner key, returns pkey.
|
| +def generate_and_register_keypair(testuser, testpass):
|
| + """Generates keypair, registers with NSS, sets owner key, returns keypair.
|
|
|
| Generates a fresh owner keypair. Registers keys with NSS,
|
| puts the owner public key in the right place, ensures that the
|
| session_manager picks it up, ensures the owner's home dir is
|
| - mounted, and then passes back paths to a file containing the
|
| - PEM-formatted private key.
|
| + mounted, and then passes back the PEM-formatted private key and the
|
| + DER-encoded public key.
|
| """
|
| - (keyfile, certfile) = generate_owner_creds()
|
| - utils.open_write_close(constants.OWNER_KEY_FILE,
|
| - cert_extract_pubkey_der(certfile))
|
| + (keypath, certpath) = generate_owner_creds()
|
| + keyfile = scoped_tempfile(keypath)
|
| + certfile = scoped_tempfile(certpath)
|
| +
|
| + pubkey = cert_extract_pubkey_der(certfile.name)
|
| + utils.open_write_close(constants.OWNER_KEY_FILE, pubkey)
|
| +
|
| login.refresh_login_screen()
|
| cryptohome.mount_vault(testuser, testpass, create=False)
|
| - return keyfile
|
| + return (utils.read_file(keyfile.name), pubkey)
|
|
|
|
|
| -def sign(pem_key_file, data):
|
| - """Signs |data| with key from |pem_key_file|, returns signature.
|
| +def sign(pem_key, data):
|
| + """Signs |data| with key from |pem_key|, returns signature.
|
|
|
| - Using the PEM-formatted private key in |pem_key_file|, generates an
|
| + Using the PEM-formatted private key in |pem_key|, generates an
|
| RSA-with-SHA1 signature over |data| and returns the signature in
|
| a string.
|
| """
|
| @@ -148,7 +178,10 @@ def sign(pem_key_file, data):
|
| data_file.fo.write(data)
|
| data_file.fo.seek(0)
|
|
|
| - cmd = '%s -sign %s' % (OPENSSLCRYPTO, pem_key_file)
|
| + pem_key_file = scoped_tempfile(scoped_tempfile.tempdir.name + '/pkey.pem')
|
| + utils.open_write_close(pem_key_file.name, pem_key)
|
| +
|
| + cmd = '%s -sign %s' % (OPENSSLCRYPTO, pem_key_file.name)
|
| try:
|
| utils.run(cmd,
|
| stdin=data_file.fo,
|
|
|