ciphers.py 文件源码

python
阅读 28 收藏 0 点赞 0 评论 0

项目:cryptography-pkcs11 作者: reaperhulk 项目源码 文件源码
def __init__(self, backend, cipher, mode, operation):
        self._backend = backend
        # TODO: softhsm only supports AES/3DES with ECB/CBC
        if not backend.cipher_supported(cipher, mode):
            raise UnsupportedAlgorithm(
                "cipher {0} in {1} mode is not supported "
                "by this backend.".format(
                    cipher.name, mode.name if mode else mode),
                _Reasons.UNSUPPORTED_CIPHER
            )

        if isinstance(cipher, KeyHandle):
            self._key_handle = cipher.key
        else:
            self._key_handle = key_handle_from_bytes(cipher.key, backend)

        self._cipher = cipher
        self._mode = mode
        self._operation = operation
        self._buffer = b""

        if isinstance(self._cipher, ciphers.BlockCipherAlgorithm):
            self._block_size = self._cipher.block_size // 8
        else:
            self._block_size = 1

        if isinstance(mode, modes.ModeWithInitializationVector):
            iv_nonce = self._backend._ffi.new(
                "CK_BYTE[]", mode.initialization_vector
            )
            iv_nonce_len = len(mode.initialization_vector)
        elif isinstance(mode, modes.ModeWithNonce):
            iv_nonce = self._backend._ffi.new("CK_BYTE[]", mode.nonce)
            iv_nonce_len = len(mode.nonce)
        else:
            iv_nonce = self._backend._ffi.NULL
            iv_nonce_len = 0

        mech = self._backend._ffi.new("CK_MECHANISM *")
        mech.mechanism = self._get_mechanism(cipher, mode)
        mech.parameter = iv_nonce
        mech.parameter_len = iv_nonce_len
        self._session = self._backend._session_pool.acquire_and_init(
            backend, self._operation["init"], mech, self._key_handle._handle
        )
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号