---
name: "kcapi_kdf_ctr"
section: "3"
platform: "linux"
package: "libkcapi-dev"
version: "1.4.0-1+b2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/kcapi_kdf_ctr"
---

# kcapi\_kdf\_ctr(3)

Counter Mode Key Derivation Function

## NAME

kcapi\_kdf\_ctr - Counter Mode Key Derivation Function

## SYNOPSIS

**ssize\_t kcapi\_kdf\_ctr(struct kcapi\_handle \*** *handle***, const uint8\_t \*** *src***, size\_t** *slen***, uint8\_t \*** *dst***, size\_t** *dlen***);**

## ARGUMENTS

*handle*

\[in\] cipher handle allocated by caller. This cipher handle must be allocated with **kcapi\_md\_init**. If the caller is interested in a KDF using a keyed message digest, the caller should also call **kcapi\_md\_setkey** before invoking this function.

*src*

\[in\] Input data that should be transformed into a key (see below).

*slen*

\[in\] Length of the src input data.

*dst*

\[out\] Buffer to store the generated key in,

*dlen*

\[in\] Length of the dst buffer. This value defines the number of bytes generated by the KDF.

## DESCRIPTION

This function is an implementation of the KDF in counter mode according to SP800-108 section 5.1 as well as SP800-56A section 5.8.1 (Single-step KDF).

SP800-108: The caller must provide Label \|\| 0x00 \|\| Context in src. This src pointer may also be NULL if the caller wishes not to provide anything.

SP800-56A: If a keyed MAC is used, the key shall NOT be the shared secret from the DH operation, but an independently generated key. The src pointer is defined as Z \|\| other info where Z is the shared secret from DH and other info is an arbitrary string (see SP800-56A section 5.8.1.2).

*return* 0 upon success; a negative errno-style error code if an error occurred

## AUTHOR

**Stephan Mueller** \<smueller@chronox.de\>

Author.

## COPYRIGHT
