CKM_NIST_PRF_KDF

NA FIPS

FIPS approved? Yes
Supported functions Derive
Functions restricted from FIPS use None
Minimum key length (bits) 8
Minimum key length for FIPS use (bits) 112
Minimum legacy key length for FIPS use (bits) N/A
Maximum key length (bits) 4096
Block size 0
Digest size 0
Key types Symmetric
Algorithms None
Modes None
Flags None

NA non-FIPS

FIPS approved? Yes
Supported functions Derive
Functions restricted from FIPS use None
Minimum key length (bits) 8
Minimum key length for FIPS use (bits) 112
Minimum legacy key length for FIPS use (bits) N/A
Maximum key length (bits) 4096
Block size 0
Digest size 0
Key types Symmetric
Algorithms None
Modes None
Flags None

EU FIPS

FIPS approved? Yes
Supported functions Derive
Functions restricted from FIPS use None
Minimum key length (bits) 8
Minimum key length for FIPS use (bits) 112
Minimum legacy key length for FIPS use (bits) N/A
Maximum key length (bits) 4096
Block size 0
Digest size 0
Key types Symmetric
Algorithms None
Modes None
Flags None

EU non-FIPS

FIPS approved? Yes
Supported functions Derive
Functions restricted from FIPS use None
Minimum key length (bits) 8
Minimum key length for FIPS use (bits) 112
Minimum legacy key length for FIPS use (bits) N/A
Maximum key length (bits) 4096
Block size 0
Digest size 0
Key types Symmetric
Algorithms None
Modes None
Flags None

Usage

The CKM_NIST_PRF_KDF mechanism only supports counter mode. This mechanism can only be used with DES3_CMAC or AES_CMAC as the PRF. DES3_CMAC is not available in FIPS mode.

The SP 800-108 allows for some variation on how the information is encoded and describes some fields as optional. To accommodate that, there are two encoding schemes you can specify:

> LUNA_PRF_KDF_ENCODING_SCHEME_2: the separator byte and the length of the derived key are not encoded in the input data for the PRF.

> LUNA_PRF_KDF_ENCODING_SCHEME_1: both fields are included.

Example

/* Parameter and values used with CKM_PRF_KDF and CKM_NIST_PRF_KDF. */
typedef CK_ULONG CK_KDF_PRF_TYPE;
typedef CK_ULONG CK_KDF_PRF_ENCODING_SCHEME;
/** PRF KDF schemes */
#define CK_NIST_PRF_KDF_DES3_CMAC      0x00000001
#define CK_NIST_PRF_KDF_AES_CMAC       0x00000002
#define CK_PRF_KDF_ARIA_CMAC           0x00000003
#define CK_PRF_KDF_SEED_CMAC           0x00000004
#define LUNA_PRF_KDF_ENCODING_SCHEME_1     0x00000000
#define LUNA_PRF_KDF_ENCODING_SCHEME_2     0x00000001
typedef struct CK_KDF_PRF_PARAMS {
CK_KDF_PRF_TYPE            prfType;
CK_BYTE_PTR                pLabel;
CK_ULONG                   ulLabelLen;
CK_BYTE_PTR                pContext;
CK_ULONG                   ulContextLen;
CK_ULONG                   ulCounter;
CK_KDF_PRF_ENCODING_SCHEME ulEncodingScheme;
} CK_PRF_KDF_PARAMS;
typedef CK_PRF_KDF_PARAMS CK_PTR CK_KDF_PRF_PARAMS_PTR;