Cryptographic Token Interface Standard

PKCS#11


General block cipher CBC with PKCS padding

Cipher <NAME> has a cipher-block chaining mode with PKCS padding, "<NAME>-CBC with PKCS padding", denoted CKM_<NAME>_CBC_PAD. It is a mechanism for single- and multiple-part encryption and decryption; key wrapping; and key unwrapping with <NAME>. All ciphertext is padded with PKCS padding.

It has a parameter, an initialization vector for cipher block chaining mode. The initialization vector has the same length as <NAME>'s blocksize.

The PKCS padding in this mechanism allows the length of the plaintext value to be recovered from the ciphertext value. Therefore, when unwrapping keys with this mechanism, no value should be specified for the CKA_VALUE_LEN attribute.

In addition to being able to wrap and unwrap secret keys, this mechanism can wrap and unwrap RSA, Diffie-Hellman, and DSA private keys (see Section 12.9 for details). The entries in Table 82 for data length constraints when wrapping and unwrapping keys do not apply to wrapping and unwrapping private keys.

Constraints on key types and the length of data are summarized in the following table:

Table 82, General Block Cipher CBC with PKCS Padding: Key And Data Length
Function Key type
Input length
Output length
C_Encrypt <NAME>
any
input length rounded up to multiple of blocksize
C_Decrypt <NAME>
multiple of blocksize
between 1 and blocksize bytes shorter than input length
C_WrapKey <NAME>
any
input length rounded up to multiple of blocksize
C_UnwrapKey <NAME>
multiple of blocksize
between 1 and blocksize bytes shorter than input length


RSA Security Inc. Public-Key Cryptography Standards - PKCS#11 - v210