def load_rsa_public_numbers(self, numbers): rsa._check_public_key_components(numbers.e, numbers.n) rsa_cdata = self._lib.RSA_new() assert rsa_cdata != self._ffi.NULL rsa_cdata = self._ffi.gc(rsa_cdata, self._lib.RSA_free) rsa_cdata.e = self._int_to_bn(numbers.e) rsa_cdata.n = self._int_to_bn(numbers.n) res = self._lib.RSA_blinding_on(rsa_cdata, self._ffi.NULL) assert res == 1 return _RSAPublicKey(self, rsa_cdata)
def load_rsa_public_numbers(self, numbers): rsa._check_public_key_components(numbers.e, numbers.n) attrs = build_attributes([ (self._binding.CKA_TOKEN, False), # don't persist it (self._binding.CKA_CLASS, self._binding.CKO_PUBLIC_KEY), (self._binding.CKA_KEY_TYPE, self._binding.CKK_RSA), (self._binding.CKA_MODULUS, utils.int_to_bytes(numbers.n)), (self._binding.CKA_PUBLIC_EXPONENT, utils.int_to_bytes(numbers.e)), ], 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 _RSAPublicKey(self, object_handle[0])