wolfSSL provides AES_wrap_key / AES_unwrap_key for RFC 3394 (standard integer key wrap) but does not implement RFC 5649 (padded key wrap, supporting non-block-multiple plaintext lengths).
The existing AES_unwrap_key cannot serve as a building block for RFC 5649 because wolfSSL validates the recovered A register against a caller-supplied IV before returning. RFC 5649 requires recovering the AIV — which encodes the plaintext length — and then validating it. wolfSSL's early validation rejects the RFC 5649 AIV format, so the entire RFC 3394 unwrap loop has to be reimplemented from AES-ECB primitives to support RFC 5649.
RFC 5649 is required for interoperability with JOSE (JSON Web Keys / RFC 7517), CMS (RFC 5652), and other systems that use padded key wrap for arbitrary-length key material.
Workaround in use: Full RFC 5649 wrap and unwrap implemented on top of wolfSSL's AES-ECB primitives. Single-block case uses wolfSSL_AES_ecb_encrypt directly; multi-block wrap uses wolfSSL_AES_wrap_key with a custom IV; multi-block unwrap reimplements the RFC 3394 loop with AES-ECB to recover the AIV before validation.
Requested fix: Add native wolfSSL_AES_wrap_key_padded / wolfSSL_AES_unwrap_key_padded per RFC 5649. OpenSSL exposes this as EVP_aes_128_wrap_pad (and 192/256 variants).
Migrated from internal tracking (ZD-21736).
wolfSSL provides
AES_wrap_key/AES_unwrap_keyfor RFC 3394 (standard integer key wrap) but does not implement RFC 5649 (padded key wrap, supporting non-block-multiple plaintext lengths).The existing
AES_unwrap_keycannot serve as a building block for RFC 5649 because wolfSSL validates the recovered A register against a caller-supplied IV before returning. RFC 5649 requires recovering the AIV — which encodes the plaintext length — and then validating it. wolfSSL's early validation rejects the RFC 5649 AIV format, so the entire RFC 3394 unwrap loop has to be reimplemented from AES-ECB primitives to support RFC 5649.RFC 5649 is required for interoperability with JOSE (JSON Web Keys / RFC 7517), CMS (RFC 5652), and other systems that use padded key wrap for arbitrary-length key material.
Workaround in use: Full RFC 5649 wrap and unwrap implemented on top of wolfSSL's AES-ECB primitives. Single-block case uses
wolfSSL_AES_ecb_encryptdirectly; multi-block wrap useswolfSSL_AES_wrap_keywith a custom IV; multi-block unwrap reimplements the RFC 3394 loop with AES-ECB to recover the AIV before validation.Requested fix: Add native
wolfSSL_AES_wrap_key_padded/wolfSSL_AES_unwrap_key_paddedper RFC 5649. OpenSSL exposes this asEVP_aes_128_wrap_pad(and 192/256 variants).Migrated from internal tracking (ZD-21736).