Skip to content

RFC: Upstreaming CKM_HKDF_DERIVE — design questions #878

Description

@Hussainity

Hi, I have a working CKM_HKDF_DERIVE implementation against current main and would like to upstream it. Before opening a PR, I'd appreciate input on a few design choices.

What I have

  • CKM_HKDF_DERIVE per PKCS#11 v3, parsing CK_HKDF_PARAMS.
  • All three salt sources (NULL / DATA / KEY) and all four extract/expand combinations.
  • Sensitive/extractable propagation matching CKM_CONCATENATE_BASE_AND_KEY.
  • Support for all PRFs.
  • Some RFC 5869 Test Cases passing as a CppUnit test.

Known gaps:

  • OpenSSL backend only.
  • HKDF logic inline in SoftHSM.cpp, not under src/lib/crypto/.
  • CKK_HKDF not wired into newP11Object / P11Attributes.
  • No CKM_HKDF_KEY_GEN / CKM_HKDF_DATA, no FIPS gating.

Questions

  1. Crypto layer — should I model HKDF after MacAlgorithm (new + OSSL/Botan subclasses via CryptoFactory), or build it on top of existing MacAlgorithm HMAC and skip a new factory entry?
  2. Botan backend — required for merge, or acceptable as follow-up?
  3. FIPS — for WITH_FIPS builds, allow SHA-2 PRFs only and compile out the rest, matching the CKM_DES_* pattern?
  4. CKK_HKDF object representation — reuse P11GenericSecretKeyObj (like the CKK_*_HMAC types), or introduce P11HKDFSecretKeyObj?
  5. Would CKM_HKDF_KEY_GEN / CKM_HKDF_DATA be required to merge?
  6. Tests — anything beyond DeriveTests.cpp and RFC 5869 vectors you'd like to see?

Motivation
My project uses SoftHSM in CI and needs HKDF; we'd rather upstream than maintain a fork.

Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Fields

    No fields configured for Feature.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions