# std.crypto: add AES-CCM and CBC-MAC \(\#25526\) · gitcafe/zig

[View on GitCafe](https://git.cafe/gitcafe/zig/commit/2f3234c76ac8465719935bc6ae0e10e0fe59fccd)

Repository: [gitcafe/zig](https://git.cafe/gitcafe/zig)

Visibility: public

Requested revision: 2f3234c76ac8465719935bc6ae0e10e0fe59fccd

Requested commit: 2f3234c76ac8465719935bc6ae0e10e0fe59fccd

Commit: 2f3234c76ac8465719935bc6ae0e10e0fe59fccd

Tree: 58da2925234966c98b4622c05c43e1796025f001

Author: aarvay

Committer: GitHub

## Message

```
std.crypto: add AES-CCM and CBC-MAC (#25526)

* std.crypto: add AES-CCM and CBC-MAC

Add AES-CCM (Counter with CBC-MAC) authenticated encryption and
CBC-MAC message authentication code implementations to the standard
library.

AES-CCM combines CTR mode encryption with CBC-MAC authentication as
specified in NIST SP 800-38C and RFC 3610. It provides authenticated
encryption with support for additional authenticated data (AAD).

CBC-MAC is a simple MAC construction used internally by CCM, specified
in FIPS 113 and ISO/IEC 9797-1.

Includes comprehensive test vectors from RFC 3610 and NIST SP 800-38C.

* std.crypto: add CCM* (encryption-only) support to AES-CCM

Implements CCM* mode per IEEE 802.15.4 specification, extending
AES-CCM to support encryption-only mode when tag_len=0. This is
required by protocols like ZigBee, Thread, and WirelessHART.

Changes:
- Allow tag_len=0 for encryption-only mode (no authentication)
- Skip CBC-MAC computation when tag_len=0 in encrypt/decrypt
- Correctly encode M'=0 in B0 block for CCM* mode
- Add Aes128Ccm0 and Aes256Ccm0 convenience instances
- Add IEEE 802.15.4 test vectors and CCM* tests

* std.crypto: add doc comments for AES-CCM variants
```

## Parents

- [958faa7031c7b50a544e151fea4d486e1c4926c1](https://git.cafe/gitcafe/zig/commit/958faa7031c7b50a544e151fea4d486e1c4926c1?format=markdown)

[Source at this commit](https://git.cafe/gitcafe/zig/tree/2f3234c76ac8465719935bc6ae0e10e0fe59fccd?format=markdown)
