def load_rsa_private_numbers(self, numbers):
rsa._check_private_key_components(
numbers.p,
numbers.q,
numbers.d,
numbers.dmp1,
numbers.dmq1,
numbers.iqmp,
numbers.public_numbers.e,
numbers.public_numbers.n
)
attrs = build_attributes([
(self._binding.CKA_TOKEN, False), # don't persist it
(self._binding.CKA_CLASS, self._binding.CKO_PRIVATE_KEY),
(self._binding.CKA_KEY_TYPE, self._binding.CKK_RSA),
(
self._binding.CKA_MODULUS,
utils.int_to_bytes(numbers.public_numbers.n)
),
(
self._binding.CKA_PUBLIC_EXPONENT,
utils.int_to_bytes(numbers.public_numbers.e)
),
(
self._binding.CKA_PRIVATE_EXPONENT,
utils.int_to_bytes(numbers.d)
),
(self._binding.CKA_PRIME_1, utils.int_to_bytes(numbers.p)),
(self._binding.CKA_PRIME_2, utils.int_to_bytes(numbers.q)),
(self._binding.CKA_EXPONENT_1, utils.int_to_bytes(numbers.dmp1)),
(self._binding.CKA_EXPONENT_2, utils.int_to_bytes(numbers.dmq1)),
(self._binding.CKA_COEFFICIENT, utils.int_to_bytes(numbers.iqmp)),
], self)
session = self._session_pool.acquire()
# TODO: do we want to delete the object from the session when it
# is no longer in scope?
object_handle = self._ffi.new("CK_OBJECT_HANDLE *")
res = self._lib.C_CreateObject(
session[0], attrs.template, len(attrs.template), object_handle
)
self._check_error(res)
return _RSAPrivateKey(self, object_handle[0])
评论列表
文章目录