SM4 block cipher helpers using Erlang :crypto.
:crypto
@type error_reason() :: :invalid_key_size | :invalid_iv_size | :invalid_block_size | :invalid_padding | :unsupported
@spec decrypt(binary(), binary(), keyword()) :: {:ok, binary()} | {:error, error_reason()}
@spec decrypt_cbc(binary(), binary(), binary(), keyword()) :: {:ok, binary()} | {:error, error_reason()}
@spec encrypt(binary(), binary(), keyword()) :: {:ok, binary()} | {:error, error_reason()}
@spec encrypt_cbc(binary(), binary(), binary(), keyword()) :: {:ok, binary()} | {:error, error_reason()}
@spec supported?() :: boolean()