tools/verified-boot/signing/pyfdt/pkcs11.py (36 lines of code) (raw):
# Copyright (c) 2014-present, Facebook, Inc.
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree. An additional grant
# of patent rights can be found in the PATENTS file in the same directory.
import os
import sys
from . import pyfdt
MODULES = ["/usr/lib/x86_64-linux-gnu/opensc-pkcs11.so", "/usr/lib64/opensc-pkcs11.so"]
ENGINES = ["/usr/lib/ssl/engines", "/usr/lib64/openssl/engines/"]
TOKEN_URL = [
"model=PKCS%2315%20emulated;manufacturer=ZeitControl",
"serial=%s",
"token=OpenPGP%20card%20%28User%20PIN%20%28sig%29%29",
"id=%01",
"object=Signature%20key",
]
def get_url(serial):
token = TOKEN_URL
token[1] = token[1] % (serial)
return ";".join(token)
def clear_environment():
if "PKCS11_MODULE" in os.environ:
del os.environ["PKCS11_MODULE"]
def enforce_environment():
if "PKCS11_MODULE" not in os.environ or not os.environ["PKCS11_MODULE"]:
for mod in MODULES:
if os.path.exists(mod):
os.environ["PKCS11_MODULE"] = mod
break
if "PKCS11_MODULE" not in os.environ or not os.environ["PKCS11_MODULE"]:
print("Cannot find OpenSC PKCS#11 module library")
sys.exit(1)
if "OPENSSL_ENGINES" not in os.environ or not os.environ["OPENSSL_ENGINES"]:
for engine in ENGINES:
if os.path.exists(mod):
os.environ["PKCS11_MODULE"] = mod
break
if "OPENSSL_ENGINES" not in os.environ or not os.environ["OPENSSL_ENGINES"]:
print("Cannot find OpenSSL engine libraries")
sys.exit(1)