From a9002933f15a5a60d376b984d2c7233d73605ab3 Mon Sep 17 00:00:00 2001 From: Jackson Walters Date: Sun, 19 Oct 2025 19:10:13 -0400 Subject: [PATCH] add code coverage report --- Makefile | 39 +- README.md | 1 + bin/main_128 | Bin 80056 -> 80056 bytes bin/main_256 | Bin 79768 -> 79768 bytes bin/main_sbox_timing_256 | Bin 80120 -> 80120 bytes bin/main_timing_256 | Bin 80112 -> 80112 bytes bin/test_aes_128 | Bin 79616 -> 79616 bytes bin/test_aes_192 | Bin 79616 -> 79616 bytes bin/test_aes_256 | Bin 79616 -> 79616 bytes bin/test_cbc | Bin 79928 -> 79928 bytes bin/test_ccm | Bin 80312 -> 80312 bytes bin/test_cfb | Bin 79688 -> 79688 bytes bin/test_cmac | Bin 79752 -> 79752 bytes bin/test_ctr | Bin 79832 -> 79832 bytes bin/test_ecb | Bin 79688 -> 79688 bytes bin/test_gcm | Bin 80824 -> 80824 bytes bin/test_gmac | Bin 80824 -> 80824 bytes bin/test_ofb | Bin 79784 -> 79784 bytes bin/test_xts | Bin 79880 -> 79880 bytes coverage-report/amber.png | Bin 0 -> 141 bytes coverage-report/cmd_line | 1 + coverage-report/emerald.png | Bin 0 -> 141 bytes coverage-report/gcov.css | 1125 ++++++++++ coverage-report/glass.png | Bin 0 -> 167 bytes coverage-report/index-sort-f.html | 117 + coverage-report/index-sort-l.html | 117 + coverage-report/index.html | 117 + coverage-report/ruby.png | Bin 0 -> 141 bytes coverage-report/snow.png | Bin 0 -> 141 bytes coverage-report/src/aes_128.c.func-c.html | 164 ++ coverage-report/src/aes_128.c.func.html | 164 ++ coverage-report/src/aes_128.c.gcov.html | 264 +++ coverage-report/src/aes_192.c.func-c.html | 164 ++ coverage-report/src/aes_192.c.func.html | 164 ++ coverage-report/src/aes_192.c.gcov.html | 265 +++ coverage-report/src/aes_256.c.func-c.html | 156 ++ coverage-report/src/aes_256.c.func.html | 156 ++ coverage-report/src/aes_256.c.gcov.html | 242 ++ coverage-report/src/aes_wrapper.c.func-c.html | 92 + coverage-report/src/aes_wrapper.c.func.html | 92 + coverage-report/src/aes_wrapper.c.gcov.html | 116 + coverage-report/src/cbc.c.func-c.html | 116 + coverage-report/src/cbc.c.func.html | 116 + coverage-report/src/cbc.c.gcov.html | 180 ++ coverage-report/src/ccm.c.func-c.html | 124 ++ coverage-report/src/ccm.c.func.html | 124 ++ coverage-report/src/ccm.c.gcov.html | 323 +++ coverage-report/src/cfb.c.func-c.html | 92 + coverage-report/src/cfb.c.func.html | 92 + coverage-report/src/cfb.c.gcov.html | 128 ++ coverage-report/src/cmac.c.func-c.html | 116 + coverage-report/src/cmac.c.func.html | 116 + coverage-report/src/cmac.c.gcov.html | 175 ++ coverage-report/src/ctr.c.func-c.html | 92 + coverage-report/src/ctr.c.func.html | 92 + coverage-report/src/ctr.c.gcov.html | 126 ++ coverage-report/src/ecb.c.func-c.html | 92 + coverage-report/src/ecb.c.func.html | 92 + coverage-report/src/ecb.c.gcov.html | 96 + coverage-report/src/gcm.c.func-c.html | 124 ++ coverage-report/src/gcm.c.func.html | 124 ++ coverage-report/src/gcm.c.gcov.html | 242 ++ coverage-report/src/gmac.c.func-c.html | 92 + coverage-report/src/gmac.c.func.html | 92 + coverage-report/src/gmac.c.gcov.html | 94 + coverage-report/src/index-sort-f.html | 309 +++ coverage-report/src/index-sort-l.html | 309 +++ coverage-report/src/index.html | 309 +++ .../src/key_expansion_128.c.func-c.html | 84 + .../src/key_expansion_128.c.func.html | 84 + .../src/key_expansion_128.c.gcov.html | 125 ++ .../src/key_expansion_192.c.func-c.html | 84 + .../src/key_expansion_192.c.func.html | 84 + .../src/key_expansion_192.c.gcov.html | 130 ++ .../src/key_expansion_256.c.func-c.html | 100 + .../src/key_expansion_256.c.func.html | 100 + .../src/key_expansion_256.c.gcov.html | 145 ++ coverage-report/src/ofb.c.func-c.html | 92 + coverage-report/src/ofb.c.func.html | 92 + coverage-report/src/ofb.c.gcov.html | 120 + coverage-report/src/sbox.c.func-c.html | 92 + coverage-report/src/sbox.c.func.html | 92 + coverage-report/src/sbox.c.gcov.html | 105 + coverage-report/src/xts.c.func-c.html | 116 + coverage-report/src/xts.c.func.html | 116 + coverage-report/src/xts.c.gcov.html | 168 ++ coverage-report/tests/index-sort-f.html | 249 +++ coverage-report/tests/index-sort-l.html | 249 +++ coverage-report/tests/index.html | 249 +++ .../tests/test_aes_128.c.func-c.html | 84 + .../tests/test_aes_128.c.func.html | 84 + .../tests/test_aes_128.c.gcov.html | 109 + .../tests/test_aes_192.c.func-c.html | 84 + .../tests/test_aes_192.c.func.html | 84 + .../tests/test_aes_192.c.gcov.html | 158 ++ .../tests/test_aes_256.c.func-c.html | 84 + .../tests/test_aes_256.c.func.html | 84 + .../tests/test_aes_256.c.gcov.html | 162 ++ coverage-report/tests/test_cbc.c.func-c.html | 92 + coverage-report/tests/test_cbc.c.func.html | 92 + coverage-report/tests/test_cbc.c.gcov.html | 135 ++ coverage-report/tests/test_ccm.c.func-c.html | 92 + coverage-report/tests/test_ccm.c.func.html | 92 + coverage-report/tests/test_ccm.c.gcov.html | 175 ++ coverage-report/tests/test_cfb.c.func-c.html | 84 + coverage-report/tests/test_cfb.c.func.html | 84 + coverage-report/tests/test_cfb.c.gcov.html | 115 + coverage-report/tests/test_cmac.c.func-c.html | 92 + coverage-report/tests/test_cmac.c.func.html | 92 + coverage-report/tests/test_cmac.c.gcov.html | 150 ++ coverage-report/tests/test_ctr.c.func-c.html | 84 + coverage-report/tests/test_ctr.c.func.html | 84 + coverage-report/tests/test_ctr.c.gcov.html | 123 + coverage-report/tests/test_ecb.c.func-c.html | 84 + coverage-report/tests/test_ecb.c.func.html | 84 + coverage-report/tests/test_ecb.c.gcov.html | 142 ++ coverage-report/tests/test_gcm.c.func-c.html | 124 ++ coverage-report/tests/test_gcm.c.func.html | 124 ++ coverage-report/tests/test_gcm.c.gcov.html | 278 +++ coverage-report/tests/test_gmac.c.func-c.html | 124 ++ coverage-report/tests/test_gmac.c.func.html | 124 ++ coverage-report/tests/test_gmac.c.gcov.html | 270 +++ coverage-report/tests/test_ofb.c.func-c.html | 84 + coverage-report/tests/test_ofb.c.func.html | 84 + coverage-report/tests/test_ofb.c.gcov.html | 154 ++ coverage-report/tests/test_xts.c.func-c.html | 92 + coverage-report/tests/test_xts.c.func.html | 92 + coverage-report/tests/test_xts.c.gcov.html | 167 ++ coverage-report/updown.png | Bin 0 -> 117 bytes coverage.info | 1977 +++++++++++++++++ obj/aes_128.gcda | Bin 0 -> 548 bytes obj/aes_128.gcno | Bin 0 -> 6100 bytes obj/aes_192.gcda | Bin 0 -> 548 bytes obj/aes_192.gcno | Bin 0 -> 6100 bytes obj/aes_256.gcda | Bin 0 -> 480 bytes obj/aes_256.gcno | Bin 0 -> 4736 bytes obj/aes_wrapper.gcda | Bin 0 -> 160 bytes obj/aes_wrapper.gcno | Bin 0 -> 1568 bytes obj/cbc.gcda | Bin 0 -> 420 bytes obj/cbc.gcno | Bin 0 -> 4756 bytes obj/ccm.gcda | Bin 0 -> 680 bytes obj/ccm.gcno | Bin 0 -> 8192 bytes obj/cfb.gcda | Bin 0 -> 160 bytes obj/cfb.gcno | Bin 0 -> 1396 bytes obj/cmac.gcda | Bin 0 -> 316 bytes obj/cmac.gcno | Bin 0 -> 3224 bytes obj/ctr.gcda | Bin 0 -> 152 bytes obj/ctr.gcno | Bin 0 -> 1452 bytes obj/ecb.gcda | Bin 0 -> 128 bytes obj/ecb.gcno | Bin 0 -> 932 bytes obj/gcm.gcda | Bin 0 -> 424 bytes obj/gcm.gcno | Bin 0 -> 5948 bytes obj/gmac.gcda | Bin 0 -> 112 bytes obj/gmac.gcno | Bin 0 -> 356 bytes obj/key_expansion_128.gcda | Bin 0 -> 124 bytes obj/key_expansion_128.gcno | Bin 0 -> 2000 bytes obj/key_expansion_192.gcda | Bin 0 -> 124 bytes obj/key_expansion_192.gcno | Bin 0 -> 2004 bytes obj/key_expansion_256.gcda | Bin 0 -> 212 bytes obj/key_expansion_256.gcno | Bin 0 -> 2704 bytes obj/ofb.gcda | Bin 0 -> 136 bytes obj/ofb.gcno | Bin 0 -> 1028 bytes obj/sbox.gcda | Bin 0 -> 128 bytes obj/sbox.gcno | Bin 0 -> 900 bytes obj/xts.gcda | Bin 0 -> 364 bytes obj/xts.gcno | Bin 0 -> 3800 bytes 166 files changed, 16737 insertions(+), 5 deletions(-) create mode 100644 coverage-report/amber.png create mode 100644 coverage-report/cmd_line create mode 100644 coverage-report/emerald.png create mode 100644 coverage-report/gcov.css create mode 100644 coverage-report/glass.png create mode 100644 coverage-report/index-sort-f.html create mode 100644 coverage-report/index-sort-l.html create mode 100644 coverage-report/index.html create mode 100644 coverage-report/ruby.png create mode 100644 coverage-report/snow.png create mode 100644 coverage-report/src/aes_128.c.func-c.html create mode 100644 coverage-report/src/aes_128.c.func.html create mode 100644 coverage-report/src/aes_128.c.gcov.html create mode 100644 coverage-report/src/aes_192.c.func-c.html create mode 100644 coverage-report/src/aes_192.c.func.html create mode 100644 coverage-report/src/aes_192.c.gcov.html create mode 100644 coverage-report/src/aes_256.c.func-c.html create mode 100644 coverage-report/src/aes_256.c.func.html create mode 100644 coverage-report/src/aes_256.c.gcov.html create mode 100644 coverage-report/src/aes_wrapper.c.func-c.html create mode 100644 coverage-report/src/aes_wrapper.c.func.html create mode 100644 coverage-report/src/aes_wrapper.c.gcov.html create mode 100644 coverage-report/src/cbc.c.func-c.html create mode 100644 coverage-report/src/cbc.c.func.html create mode 100644 coverage-report/src/cbc.c.gcov.html create mode 100644 coverage-report/src/ccm.c.func-c.html create mode 100644 coverage-report/src/ccm.c.func.html create mode 100644 coverage-report/src/ccm.c.gcov.html create mode 100644 coverage-report/src/cfb.c.func-c.html create mode 100644 coverage-report/src/cfb.c.func.html create mode 100644 coverage-report/src/cfb.c.gcov.html create mode 100644 coverage-report/src/cmac.c.func-c.html create mode 100644 coverage-report/src/cmac.c.func.html create mode 100644 coverage-report/src/cmac.c.gcov.html create mode 100644 coverage-report/src/ctr.c.func-c.html create mode 100644 coverage-report/src/ctr.c.func.html create mode 100644 coverage-report/src/ctr.c.gcov.html create mode 100644 coverage-report/src/ecb.c.func-c.html create mode 100644 coverage-report/src/ecb.c.func.html create mode 100644 coverage-report/src/ecb.c.gcov.html create mode 100644 coverage-report/src/gcm.c.func-c.html create mode 100644 coverage-report/src/gcm.c.func.html create mode 100644 coverage-report/src/gcm.c.gcov.html create mode 100644 coverage-report/src/gmac.c.func-c.html create mode 100644 coverage-report/src/gmac.c.func.html create mode 100644 coverage-report/src/gmac.c.gcov.html create mode 100644 coverage-report/src/index-sort-f.html create mode 100644 coverage-report/src/index-sort-l.html create mode 100644 coverage-report/src/index.html create mode 100644 coverage-report/src/key_expansion_128.c.func-c.html create mode 100644 coverage-report/src/key_expansion_128.c.func.html create mode 100644 coverage-report/src/key_expansion_128.c.gcov.html create mode 100644 coverage-report/src/key_expansion_192.c.func-c.html create mode 100644 coverage-report/src/key_expansion_192.c.func.html create mode 100644 coverage-report/src/key_expansion_192.c.gcov.html create mode 100644 coverage-report/src/key_expansion_256.c.func-c.html create mode 100644 coverage-report/src/key_expansion_256.c.func.html create mode 100644 coverage-report/src/key_expansion_256.c.gcov.html create mode 100644 coverage-report/src/ofb.c.func-c.html create mode 100644 coverage-report/src/ofb.c.func.html create mode 100644 coverage-report/src/ofb.c.gcov.html create mode 100644 coverage-report/src/sbox.c.func-c.html create mode 100644 coverage-report/src/sbox.c.func.html create mode 100644 coverage-report/src/sbox.c.gcov.html create mode 100644 coverage-report/src/xts.c.func-c.html create mode 100644 coverage-report/src/xts.c.func.html create mode 100644 coverage-report/src/xts.c.gcov.html create mode 100644 coverage-report/tests/index-sort-f.html create mode 100644 coverage-report/tests/index-sort-l.html create mode 100644 coverage-report/tests/index.html create mode 100644 coverage-report/tests/test_aes_128.c.func-c.html create mode 100644 coverage-report/tests/test_aes_128.c.func.html create mode 100644 coverage-report/tests/test_aes_128.c.gcov.html create mode 100644 coverage-report/tests/test_aes_192.c.func-c.html create mode 100644 coverage-report/tests/test_aes_192.c.func.html create mode 100644 coverage-report/tests/test_aes_192.c.gcov.html create mode 100644 coverage-report/tests/test_aes_256.c.func-c.html create mode 100644 coverage-report/tests/test_aes_256.c.func.html create mode 100644 coverage-report/tests/test_aes_256.c.gcov.html create mode 100644 coverage-report/tests/test_cbc.c.func-c.html create mode 100644 coverage-report/tests/test_cbc.c.func.html create mode 100644 coverage-report/tests/test_cbc.c.gcov.html create mode 100644 coverage-report/tests/test_ccm.c.func-c.html create mode 100644 coverage-report/tests/test_ccm.c.func.html create mode 100644 coverage-report/tests/test_ccm.c.gcov.html create mode 100644 coverage-report/tests/test_cfb.c.func-c.html create mode 100644 coverage-report/tests/test_cfb.c.func.html create mode 100644 coverage-report/tests/test_cfb.c.gcov.html create mode 100644 coverage-report/tests/test_cmac.c.func-c.html create mode 100644 coverage-report/tests/test_cmac.c.func.html create mode 100644 coverage-report/tests/test_cmac.c.gcov.html create mode 100644 coverage-report/tests/test_ctr.c.func-c.html create mode 100644 coverage-report/tests/test_ctr.c.func.html create mode 100644 coverage-report/tests/test_ctr.c.gcov.html create mode 100644 coverage-report/tests/test_ecb.c.func-c.html create mode 100644 coverage-report/tests/test_ecb.c.func.html create mode 100644 coverage-report/tests/test_ecb.c.gcov.html create mode 100644 coverage-report/tests/test_gcm.c.func-c.html create mode 100644 coverage-report/tests/test_gcm.c.func.html create mode 100644 coverage-report/tests/test_gcm.c.gcov.html create mode 100644 coverage-report/tests/test_gmac.c.func-c.html create mode 100644 coverage-report/tests/test_gmac.c.func.html create mode 100644 coverage-report/tests/test_gmac.c.gcov.html create mode 100644 coverage-report/tests/test_ofb.c.func-c.html create mode 100644 coverage-report/tests/test_ofb.c.func.html create mode 100644 coverage-report/tests/test_ofb.c.gcov.html create mode 100644 coverage-report/tests/test_xts.c.func-c.html create mode 100644 coverage-report/tests/test_xts.c.func.html create mode 100644 coverage-report/tests/test_xts.c.gcov.html create mode 100644 coverage-report/updown.png create mode 100644 coverage.info create mode 100644 obj/aes_128.gcda create mode 100644 obj/aes_128.gcno create mode 100644 obj/aes_192.gcda create mode 100644 obj/aes_192.gcno create mode 100644 obj/aes_256.gcda create mode 100644 obj/aes_256.gcno create mode 100644 obj/aes_wrapper.gcda create mode 100644 obj/aes_wrapper.gcno create mode 100644 obj/cbc.gcda create mode 100644 obj/cbc.gcno create mode 100644 obj/ccm.gcda create mode 100644 obj/ccm.gcno create mode 100644 obj/cfb.gcda create mode 100644 obj/cfb.gcno create mode 100644 obj/cmac.gcda create mode 100644 obj/cmac.gcno create mode 100644 obj/ctr.gcda create mode 100644 obj/ctr.gcno create mode 100644 obj/ecb.gcda create mode 100644 obj/ecb.gcno create mode 100644 obj/gcm.gcda create mode 100644 obj/gcm.gcno create mode 100644 obj/gmac.gcda create mode 100644 obj/gmac.gcno create mode 100644 obj/key_expansion_128.gcda create mode 100644 obj/key_expansion_128.gcno create mode 100644 obj/key_expansion_192.gcda create mode 100644 obj/key_expansion_192.gcno create mode 100644 obj/key_expansion_256.gcda create mode 100644 obj/key_expansion_256.gcno create mode 100644 obj/ofb.gcda create mode 100644 obj/ofb.gcno create mode 100644 obj/sbox.gcda create mode 100644 obj/sbox.gcno create mode 100644 obj/xts.gcda create mode 100644 obj/xts.gcno diff --git a/Makefile b/Makefile index 2e97c09..ba345f4 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,11 @@ # Compiler CC = gcc CFLAGS = -Wall -Wextra -Iinclude -g +LDFLAGS = + +# Coverage flags +CFLAGS_COVERAGE = -Wall -Wextra -Iinclude -g -O0 -fprofile-arcs -ftest-coverage +LDFLAGS_COVERAGE = -fprofile-arcs -ftest-coverage # Debug toggle ifeq ($(DEBUG),1) @@ -26,7 +31,11 @@ APPS = $(patsubst $(APP_DIR)/%.c, $(BIN_DIR)/%, $(APP_SRCS)) TESTS = $(patsubst $(TEST_DIR)/%.c, $(BIN_DIR)/%, $(TEST_SRCS)) # Default target -all: $(OBJ_DIR) $(BIN_DIR) $(APPS) $(TESTS) +all: $(OBJ_DIR) $(BIN_DIR) apps tests + +# Build apps and tests separately +apps: $(APPS) +tests: $(TESTS) # Compile source files $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c @@ -47,8 +56,8 @@ $(OBJ_DIR): $(BIN_DIR): mkdir -p $(BIN_DIR) -# Run all tests dynamically and fail CI if any test fails -test: $(TESTS) +# Run all tests dynamically +test: tests @echo "Running all tests..." @failed=0; \ for t in $(TESTS); do \ @@ -68,8 +77,28 @@ test: $(TESTS) echo "All tests PASSED."; \ fi +# Coverage targets +coverage: clean_coverage + @echo "Building tests with coverage flags..." + $(MAKE) clean + $(MAKE) CFLAGS="$(CFLAGS_COVERAGE)" LDFLAGS="$(LDFLAGS_COVERAGE)" all + @echo "Running tests for coverage..." + $(MAKE) test + @echo "Capturing coverage..." + lcov --capture --directory . --output-file coverage.info --ignore-errors unsupported,unused + genhtml coverage.info --output-directory coverage-report + @echo "Coverage report generated: coverage-report/index.html" + +clean_coverage: + rm -f *.gcda *.gcno coverage.info + rm -rf coverage-report + +# Optional: quick badge +badge: + @coverage=$(shell lcov --summary coverage.info 2>/dev/null | awk '/lines/ {val=$$3; gsub("%","",val); print int(val)}'); \ + if [ -z "$$coverage" ]; then coverage=0; fi; \ + echo "![Coverage](https://img.shields.io/badge/coverage-$$coverage%25-brightgreen)" + # Clean clean: rm -rf $(OBJ_DIR)/*.o $(BIN_DIR)/* - -.PHONY: all clean test diff --git a/README.md b/README.md index 53ebc06..75e4f6d 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ [![License: MIT](https://img.shields.io/badge/License-MIT-brightgreen.svg)](https://opensource.org/licenses/MIT) ![basic tests](https://github.com/jacksonwalters/aes-block-cipher-standards/actions/workflows/build.yml/badge.svg) +![Coverage](https://img.shields.io/badge/coverage-0%25-brightgreen) This repository implements several cryptographic standards in C. diff --git a/bin/main_128 b/bin/main_128 index 5e9c91de45ef239bfd46d283d900490505a3c250..b3911fd8d03864591e555a39882d05130b880acf 100755 GIT binary patch delta 350 zcmdn-k!8n6mJJy!0#Vvs(x2~HZ_`XdOveUT(o zWs)>RLP>_P52SOG3}YS0Oe0xFKCn?vau5Yf@(?2r$urL6VzV$#GfYm~o~Xrmm0SL@ z=G$#=K15~8z5Q|J>aKGpahJEQ)qmoAHQBTC_m0;E+e6J5A224QS^e_azjg1Yn9@|i z7vcFbOdFfNL`jt-_83HO(s^L&lHY%0*NfFW?ZTb1?g`=Q!bKlb`1F4Jk)D1YdE=k%!-jLHCDl9z=5 delta 350 zcmdn-k!8n6mJJy!0_#5)aQ-$i(B2ipY@3w&rnb3)WqSn+V+J$R{j}|m*ct5@K@25M z#(zv;1`mwE&$tgHGX0StkO5S(NQkixqE>`)ABZviktkF~3?egKNdhb|{Sk!TzDN?P zGD#XDp(MlD2hzDohOrK0rjaZoAJ`}-Ifw!#d5DpR>!u&tRH4sk zRDSDd)3*CbTVAqs9Qwz)E5(pO_UcxJ6*qn*$a2HP%9xD!oolwH@4U3} u6RWc~V|)0~>KxBic0W5~O>8ZW25(NAzTah<_OT^PFW*{mdiqogMr8oMMUy4~ diff --git a/bin/main_256 b/bin/main_256 index d82ab6553e00e863b4f59512b2dae45b88c6eb3e..2cf3b855ef9895be9c4ff2b1913cba2f57016e6e 100755 GIT binary patch delta 355 zcmbR7o@K^+mJJy!0yZ;e-pN$3RavKDDfMCFHjm~CmhBZRj2g^L`}3zSVrSe3q_-z= zF#cl#Gq_<4KA;RpiIN~h$s<9=I!3S(Va9zR#&ji7sEjB?W_pr1SYW!61XKb@gHzS-}iC;aXwz%>DBorvaVuMdDXqU xxeGoYUus!GwZR>~eLRUTV&$3;-mpkSPEF delta 354 zcmbR7o@K^+mJJy!0<+kvB|O#bjh9TS7uC-+$ZM`(*$rnmJK^t1o#g9Jhr{a_|?3E^ApQnE{|(I!Lt1X3!?)w)BgPFTpWz&fb{lT z9E|^%zzl8}gO70^NM!mfK_CODBua>}juEUxm~kJ7F@2UOR7MOUGyRr0SYY}r38;i5 zRHc+OMB*o=(YW! z7UKkNg|@J1;t3wF<2KnpY_icUuu_|GXl>U;QxWdd8!x48x%+JUL^H+*j0tN~`L>5W zo_x7FzSrHcra5BQyOPMpWgq|T+ECiu8OkyazBqNUL7cCgo0esY$ Avj6}9 delta 355 zcmezIk>$rnmJK^t1f*R9q>j$9c(##;zz*ay;?CBs+;GU}BKBOlnPU$PJdyW}7`tK=EQx!H_O%}fjvryCkDdToEG z#W;am;f!0!t1tUSr9>;4BEN^O*DR4=iBL`x|z=3J%7KFpZoa5rANCIxS!Wezi7dz4gdr6 BnZ^JB diff --git a/bin/main_timing_256 b/bin/main_timing_256 index 0c51ec91acb795928c83747401307a55baaee136..d0067d02ead47d5db62f9057fa66643e945e0b68 100755 GIT binary patch delta 355 zcmezHk>$fjmJK^t1d48KxR*7{?q>I2!zo+-v$-~(VA+0xh0%eTX@CB7E)K?XKzjQv z4#s~>UR>?E+a)mhM?CCF1XKmWCUtM+U*O)IQzXZ=Ys-_=taPipQW5)P^F=4&V?JlpZ z((=ZpTOD%`YurqWia3X?Jv5QFQz(KKmB0;?CMrN=b5(7!immy`8Pa#WF-YZ ze)s10u31&~{_CdL|LgoN_40bwE?)g<-z2AQ#}duL&+hWPydJyxmS3NK#)44=061Eg A=Kufz delta 355 zcmezHk>$fjmJK^t1U}6$Rz3LM;^xZr!a@6;k3DHV!Lt1X3!?)w)BUvRTpWz&fb{lT z9E|^%zzl8}gO70^NM!mfK_CODBua>}juEUxm~kJ7F@2UOR7MOUGyRr0SYY}r38;i5 zRHc+OMBWu~%-_;gwH{48rYwrj#d%tG$}K_rL*%tnH^2rn&x{e#U}P1pqvv Bnri?6 diff --git a/bin/test_aes_128 b/bin/test_aes_128 index 48ae0e1433639edcdce7416fb046594811c3647e..a6f1bd577c41a5136c4698c918d7250082b7c59b 100755 GIT binary patch delta 355 zcmZp8$I|eQWkUvwz#Zi?rjmiyvCDhre9o=L>Z zRXRyQB$%Wb`#?G;Nkgm^l40Zn8>J)*QSb;tZ(k(G$jHT(WMX7uVLV;HfYEFFXAQ#%89*gXf{b;HU?swg`#_B8heV(4zZn_9h9a zN+&6Z1d}vlA4umUX^6E#GK_p+qm*PJ3LZh|?Th3X8M)X}&5g}XET;LjPe4U_qR9|Ysn#hVDOP4rqpJ~GQfH6V;zu|%XvD|*@ zf)`}w9BdVCpM5HSe|KPp#qBjK48`4QLtJ_GET|6JmRIrV!SjBCt}tuyKB^kILT*Uu;F1_uunKl2B~B`S!w_mpZr27UbNy)B5?y^qXdk>HxVwkQe{} diff --git a/bin/test_aes_192 b/bin/test_aes_192 index 508c99e82cfb8fcf1085862d6e637f9c42dbf067..b07c00f683a94f384d628da31ba95136eb1cddc7 100755 GIT binary patch delta 355 zcmZp8$I|eQWkUvwKyv%;4IR05v!?1Eo;Yo{2>lndGgcS;+QVJ63GXSW^iJ?D{Mqx$B1y@G+%>d!atCp3n%a&MlHym|Xf6UGOO3GF|wF!>zz z-D~ucQ~tyHtES7X%)KJNmr4m&_E&GHowQivt_eX;q5D-aciE$1n^us#kROvb}k2{P6(f|Up}?gKHV9}+w=a@oWaMH^vNSa{n$B;)=)L{324fqy z!YT=aA4aw&^X5O#DL(V?u9VfGw7%RkBAcfv+SzI@xiw?^OcTZjj0ukNVf>nTjF%3q zd{JlGnHy@qS$5u@TgFQS&n`J-oHixGBHMrdu_zm}OLZmePl}UcKJo3lTlYcdu~M0k wZ-KJ6BHu+Ht2qY5cE&oU{rTIO zI2iviff?K|1|Q=-kjV5y0zd{(Ns}OB9V1wYFylTDWBMTxsEjB?W;&BNSYY}g2)(^Y z0;PR_kwgS`c3-LT#IdD-M<=j}617#}buDF66jFzuy( zd85$G9D@Tn*X;|l#B^NJ#P@M-f55bKipbr*#N|CR(zg6oTXS+j(!Ji}_WxSb{wXi& zF_tu6TcYlI_ti$ delta 355 zcmZp8$I|eQWkUvwfX$K4%gf4b9=CnDk(9P&&V=R)mhBZRj2z5N_tT~~u`|{I>FrD$ zjQ^Ox3~m^Mk8vMJWcnciAOonRNszIQ5v)X*aUX~={g4P$Mie45ok<)lF#QmO-rghu zRp}%JkzkT$>;vhXBn`1vNQRLQY?P8LM8P8ny?v1!BO@1^aZ*}}QQC9?14ggypEVfU zxE0DhTUO4oTbg)ohh^if=vA_^obMMewGU)xxRG*Hp<&AO?K4dnA223F-I=u^x&7ix zz8#Ak6z9CYxq1a}VVN>((sRB}XZ0XTniZxCB#_A2v#D@xDUjb9wiEu5rfD~pCt|!m>wkom5_w0 zyd?#Zm?h2F2hyn}!&nD0YLyHlAK0i}vJeGTauA(X@{9|(*esHbEKCizKhR{n%B}Ee z_tAG8T)$%XzDqXXEvg7S7$g+e(IlkqSLnbI8M``S`&CoM2aE~dgRiWbD=GU^+1kEvY45gY tlPb3bY;R{)oN)S~vg=oI!2&;?J@S3w`(L;9Mbv1_4HR;pE^5K33;;N0ieLZ$ delta 350 zcmdn-fn~=BmJJy!0=HK7A5)lUe0s@Ye_7qt+!4(cEZZws7!#P8?x#(^#m=}7NN=CT z!T65}%;1JG_<%AXB~gM9B~n6+b&Oyo!i@VsjOkILP#H0Z%=B5}V1emT5>N?AsLESX z5Q$mRjC~-TS~84vAfr~vF!F(o+9eB7P$dV^X(i9NfQv23G%Y33Z2JRE#;e>4J}P^b z%-&X{UnjcYjeGxIwJycQvr`3R7q)JQ+M)Gi@sI6SO&K3BCOovfz&Cx(@7X`6&bhtj zqMz-h-*@&MlJsi#Tl}2y*t#?8oUR_zx_+v1jsNFM0(shj{Tv_vSH00%S+GVx=IPrQ su@~L?B_&ll3fKQX*WnDU$yPZc9Bbp!Cn1!oZn(B6EN$C#Q42<80HA!7e*gdg diff --git a/bin/test_ccm b/bin/test_ccm index 509ee945238cb40b1842c106bf4b04cef86a9ddd..688bef51aba43e41b208f203c540aa6d30eb0a55 100755 GIT binary patch delta 351 zcmdn-nPtakmJJy!0`-BD48I&Op1C?VMag8g@yg~3mhBZRj6ax}4&-ky;$ZA!WZIv< zor#O_9}}3t3u6c{?gNQTKO_WX0F^WeGuA=WiZbp4F{U39gUX0QWTrDof(51@g3#NW zq@XIDWFQhuvW$Hoos(o4>p*4-$uaVQjZ%__D0l>+w=Ys)Ji^76m~3W}Xt+H`oAD&K zg4e$cv0xta5dB@d7JkerTJq9WcG~|_EF03_%9%%NS@drYHD`Rln80PL!!T*psh62* z7q-Wie4WyMIX6T(Q+Lg^j`R@Ag#s)WKARqR(8uy;!;U<(Y{572hMC|1FLFemG|P>)LHgr@s1R{8D6s$DXzq)!*+=pK8gd3;dXTogh=Z|@k?DTg zb|x;ye@tKoFN`6;xDO;U{g4ol0aVf?%vc9eE6TVJ#F&0a3@RfIk(tgU2^N@s2tsdf zl7gyql7UDt$ujnVbWW0GtOJ=TB*(}HHcCkzqTmsP-o8kI@dy`Nnt7s$rOEajZN`(_ z3THp0?R#M)*k=6y9;bK3k(9!@ciw*R{dz@qnaazH&)#)x4>f0ez?jhfyzz+J7NPrd zex9Exa4|zNNO@!5%sw(`{8a@32ClN*NvvlylDIJ ytl+XE(kk(j`wseaOxQYW<~jDHn`0#B?Xa?l4k4!>0BiZu~tilkq>N?l`KTTF9^MTmmH%d7n_lhnX#qW^aKM&ukFs7 zj7{7Mg>~m1g@*pR^H$vEc~Mc}S>sPjf{zEqomkub`(Ro&_vh_TO&A|ACZsayEprQ+ zeD!&Rk7fAmqta;_gu`M9#B8LVg1v4Hup9!UC-&Vt77AHRdYsV07l)C A#Q*>R delta 355 zcmX@{j^)HVmJJy!0`W!p94>u!E{pbT4rOEe+}B*evb}S;y^>a&6|d*5ZTLx7Qo3N=;`sS+8k0LFe_2s`A zjMyN-srNPtH_YnZP_)@0C~~I$1egDJqwID~xf{i7yF)tR%*IEXU#(mG#ztwE>64kJ zLWz^F#kkIt7Fc{&@QQq$oV{`Rj|~<6vl-rUyY+Z8o-A4S=#s}1-g(ni%^8&ezUhw~ diff --git a/bin/test_cmac b/bin/test_cmac index 399e5aece10f8efd12cdfa470935d9e082595731..31b7836cc955b577f0c8141369933918994d75e1 100755 GIT binary patch delta 350 zcmeBp&(iUpWkUvwK>W{^$yOcqpI5xUx;BZ!&+gvS zFI~2A1ds-+ zTqFgNNRnpk1L^!E%~%IAsz`>B53Ha`7NWpO4x*Duo>7yF&D6};&?tGkp(f*1ZiT6L zLmPa34Swyux^_!0*Oq5JnUgfuNbV^Xk4fJrE_XL-yP7HE1IC0!3^(_%^ry*)?f2$u z-fLyeB^#f(HEtQ_SF4k*Mbn-%c-&oDH{Iv4*3;S9r-B1F?vs1G{af3t3!JrC%WpM1 u>CMbiW6a%`VaD`IqHWpU-8)iuuKu_Goq*4Zk2~}FC;f7sF+I(kQ3(Kbk&vhW diff --git a/bin/test_ctr b/bin/test_ctr index 2d11a9f50d0dae20bf2269df424dbfb4e4d4a773..c425f0435c8a8369a1010ab2b17c97e4e43db2e3 100755 GIT binary patch delta 355 zcmccdp5?}SmJJy!0v2u$S9*9E9-F;*r`PGv;%}QPShiQNFnTaE9mt=4h@G*HX@CB9 zCl1DcOkf5#jKRma4Adrwf(pz zV;{EyTk)AgUa~&FpQH!fSNo*pqsN`e-#j_$_H4Z!Ij_Y9Cv7h^WqiPxV0zW;%xu%m zJWH}Q0yTZzZ-3sf{f&;`rLNrmn~c1zY)K9`Bc^lq|NkM9FS}f)YLVE#%(R51VQkC7 z-lq3Ho>C`p&iTA)?Sk4R7gWEg&3;&L>`#(l*ks>FGC$r#Cq@4VDxbd9oKYD7LX40w delta 355 zcmccdp5?}SmJJy!0t_ivTN5noxE4&@l;PRsxvsf_WqSn+qX#q7gS6>~*ct1X?x$^c z;$Zy81ZHr<7<`QTKqAwb1c3~ol0$-wb&Oyo!i@VsjOk3GP#IB(%ycJlu)uUC38(~+ z2CHn6f=Di?4>_=IEf3J3Q9o!4D=j%qW-8l^DYe;c`E-}X{d#s`cEYftOnaGCd0 z_Tnn`7kpFIi*oblTwb@wtHoTaWd2eAyZ1%pG;?0xHXdGQvb6}dsl~r|iGi{sIpG)wIlSi@puxzhjVN_sdI*>no7CU1d)BgPJ zQXGu`n7|Bf7=w>-A4p{SEdd|{sAQHPV;v({i7?|n5M%l+5vYtPL}t2_I9Oo%EeO4R zmIPE~loUilN}90`q;r)t#9A#GMn14nRkJu93wKKitjaOIx(#h)EpPDc}U`)`t z<<`*H_QqfNQ0|lftF(@m%*!%64Eq0$?Xh;@ncmwD66a?Mr@z$yT{S<9^S}Eh zmX8Y?k9U6vGvBV#`8<5WG%lO>3s{1ywVD62@Gj^{6@MF26!$_RCz6xn{ui0)s^*N! E0CFynNdN!< delta 360 zcmX@{j^)HVmJJy!0_#^E6pnDWZfHAUEc1qSUrlob%k~NuMg?Z32Wiu1u`|{&-A~&t z#liTG3C!SzG58qwfkdX?5&$xQN@fW%)-i&W2s7>jF{a-Vfy#(NWTs1rg9WDFg3#M% zNkCObNkJr}q#64_I#)?UtksfX!Bv~>PfZvfFea2= zD4h0JZ}IOx&ZRP!z9;mQp6GBbJnpr~aq-g?N&Kx15rQ}WJUTM<8GG{K^{Z#FZdGuW zebr&gCg!Ft*2G?<`2FCfgUyqZca-{U*}=m!BfGN5wD-sT9TGC^#4Gx~e&& FG5}Kzl%oIu diff --git a/bin/test_gcm b/bin/test_gcm index 1b60ab33e956a0143018cee1826f065b536f9467..62ae2969d9aca224797d4d1fbdc92f5672e55681 100755 GIT binary patch delta 351 zcmdn-on^;&mJK^t1PV2+%~n6KuHWLEWEr_QXHWA9mhC547(XyG9mwCli-U0=Bh&u; z?NwZi|CqoGUKm4waUV!zx|J}H0aWr!n6VC`RurOXx|KLoMjRqDy-E@+Fx^TDDgmTH zTBh%kfk;%zGWLP^Tyl(cATzt<82P{oX30YoL@7XYN+~kB^01kuq?(zSY){o?yuhu% z$+6Vd`Sq$LskfHN-m|ompBsK&Cet_b?!~tvht0RS_H7TfWPHGwkaU#qV78^Dgsrql z%#lSM>c>{d2Bx#Gc&x`S>|O1zuq}N}U=hw@`UDTY>pKROqu)J+R8S}^ty3RyW+obNn1~w?)0hFjLHDGm5#&! delta 351 zcmdn-on^;&mJK^t1Pob4Ojq<7u(vMho%K7PS+4m6%k~p2j31bp9;9vG#lg6bk?DTg z_9`yMe@tKoFN`6;xDO;U-AWk904n(<%vc9eD+pKp zEz@_&KqRVU8T&wdE;+_JkeOX_jC^1Pv*aNPq7)!Hr4$)mdDv16Esadfx2NhdUf@=E zUo}Z~Gjmc!Q~AG#*`Ja86Pkvlz(WJU-#>6Q)Org zhq1FiqhI>ADUN^6Txgg5S*N0ZdokZL?>AxF&T1BNO<7Yo?{6tv>IbzQ7hC?988H02 vd&XFCXJB$#Cgyp1hr`hp!mfwoIRD&8Q3jN2HR6 diff --git a/bin/test_gmac b/bin/test_gmac index a8acb9f5fbc97d60ecd64e5eaf0dcbdbcda8bf1d..e89916a33e767130287fa53f59ff2c9b2f7a85dc 100755 GIT binary patch delta 351 zcmdn-on^;&mJK^t1o$mQ56ud){Iu!VV@B@x*(;k*uxvlU!uWxi=|KMWT^x-27@79x zZ?EEF{Ko`l@WL1ZjQc<$)2)Po44{%Kw#=$ArBUTh^*gyuZBLfynuRCqXW1TR$@qXV!A@(3{8J-0m9qcr zk}X@p;-?)lj?d#ic3MA>K|Jh_>iO)jYszPobke?DHeG66Fw13Eh)T)XX5-IEVQ;Q@ vZEtt(KN|3|-Nr1z{F0}U%_^oFT9bUY)n4CPRvI1gVp-0tJ=3RIGb#Z9j**WN delta 351 zcmdn-on^;&mJK^t1kTUf(y)A!#lkgF1|A)Z5B@ZtVA+0xh4BM3(}T3_yEqv4F*4mx z+g`=R_>T$9;Ds>+825ohrdtUE89*h!gc<7~YDFQMrdx?aWyB#e)2k%G0@JOepb|hD zq-FXp8HhxcEMp&t&n3rL2Qsruj*$DV5jF+BVoXFskylQ)xCF29e1cu#O4ZR;Z);w5Q zS2Mr6l|jsuOO;D!i+jJWL+#p3g(+|LcfUU;w~CEr vIeC6*#IEyqr}5{epX)o2P_7W7zjm_B{PQ2JXZKyLzZ`f(?cDTf){II3`8tqo diff --git a/bin/test_ofb b/bin/test_ofb index 194731d4a9ffd16e4ba115f1816e5c06e166e8d6..c13a2bb3c458589d0efb48d11517d334454ea076 100755 GIT binary patch delta 355 zcmZ4So@K>*mJJy!0y&GOS(vAr9bL96e_Gp8u8`&mmhBZRj26sH2lA(HVrQ&l+MmDO zh=cJT6PUpbWAHKV1Bp!kBmiUpm247ZtYZW#5oX*6Vod)e0+kVk$V@j92MbL91fjQY zl7Ol#l7dJWNi+6=bRLq1SnDLi$OkqmNEV_%NDgA;B{{}YF1FN^G$S*M>5V#!UfZW@ zGWKyRq+bhv_0m^UQ+~32>Nl&B1>)AT1aFkvDNE^eD2uRNkl5~O%J_gWL7acp)5YCZ zzqc%oV<|{XeAyJVwqjM*;S`*mJJy!0v5Lg6uPsmjn*WxF$N}N+BR3PY_DKpv|wg>kT!i2J7XQw{j}{y z9E|^%zzl8}gO70^NM!ma0U!gYWRoCc9V1wYFylTDWBMl%sEjB?X1b9$SYY}m2)%ui z1XN{_6hy*Enz0Y0^N=*eS|=GsKCn?ivJeGAau6dg$uX94v6&jASelqkZ`5J*+CE*A zv5#Bf&dw;Q!}E2s-A?E$?+OZyce||RJGHuQs^vA$x`*CoHQQZH86PkvEUw-4G3L^O zB;MeN&j#{Vd|SoO@bDg0e)Z>xvZQ4+`v=Ya52}tv&-m~-A&B8JzsW`CB+WGqSLRMI z4xbpXL2!Z2|CJxwANZ&rPdNX^EH3PX;lh0zE3SqVbB12N>v@D_W!>~vb4FzVU9gWM diff --git a/bin/test_xts b/bin/test_xts index d2e49e37a45acb3b88bf971c00d1311cff4e3ebd..fcce89dde35def9cce943ba29c134f6c49599dae 100755 GIT binary patch delta 350 zcmeD9z|!%7WkUvw0DqeI>O6PboXJn_>BS}ApV3^wvb}qYg?2PxA_UCWk z#KHKF3C!SzG58qwfkdVk2?7~FB}PJwb&Oyo!i@VsjOj(9P#H0Z%=As-V1emH5>N?A zsLD@L5Q$CFjC~-TPBM&jAfpb+F!F(ox+DuxFi8%gGf18>go`cJB*i=>dHWho#+%#< z(^YSLS#0uj;;xx7=f19f=p1tD0pk@51(#43o}*elZTq(`HD!Fjn6M+&Jp8qp^@P-Q z@^CEgy>s3ZKe?R6wQ$k1I_GyQO>8W2o?^y0y>YdXX`29BT wy4Fbz7fzckOy#q7xN9phb_K`&2K-N^xE}3`MkpRP)yPEr{;{x06n^um;e9( delta 350 zcmeD9z|!%7WkUvwK+ClI;Za|VCQNF45SI4SC8oK8WqSn+V+1qPgS6?F*ctCJ-A~)T ziG%SU6PUpbWAHKV1Bpy85(F}UN{oaU>lndGgc&sVdMiFbx9VYV3Hg}XOKK&2p5}4vXN=B<@Pn2j5oOz z)~?;xUCDE4vGp=j#wczt`H!Jvs6U`YTuxV%v+u}S w^Qdb_?w$UJVec+nyQA=XUr?JJr$yinu2@FLH(Pb5nm4!BXr@npYR;$(0AyQ|#sB~S diff --git a/coverage-report/amber.png b/coverage-report/amber.png new file mode 100644 index 0000000000000000000000000000000000000000..2cab170d8359081983a4e343848dfe06bc490f12 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)ga>?NMQuI!iC1^G2tW}LqE04T&+ z;1OBOz`!j8!i<;h*8KqrvZOouIx;Y9?C1WI$O`1M1^9%x{(levWG?NMQuI!iC1^Jb!lvI6;R0X`wF(yt=9xVZRt1vCRixIA4P dLn>}1Cji+@42)0J?}79&c)I$ztaD0e0sy@GAL0N2 literal 0 HcmV?d00001 diff --git a/coverage-report/gcov.css b/coverage-report/gcov.css new file mode 100644 index 0000000..1cacc83 --- /dev/null +++ b/coverage-report/gcov.css @@ -0,0 +1,1125 @@ +/* All views: initial background and text color */ +body +{ + color: #000000; + background-color: #ffffff; +} + +/* All views: standard link format*/ +a:link +{ + color: #284fa8; + text-decoration: underline; +} + +/* All views: standard link - visited format */ +a:visited +{ + color: #00cb40; + text-decoration: underline; +} + +/* All views: standard link - activated format */ +a:active +{ + color: #ff0040; + text-decoration: underline; +} + +/* All views: main title format */ +td.title +{ + text-align: center; + padding-bottom: 10px; + font-family: sans-serif; + font-size: 20pt; + font-style: italic; + font-weight: bold; +} +/* table footnote */ +td.footnote +{ + text-align: left; + padding-left: 100px; + padding-right: 10px; + background-color: #dae7fe; /* light blue table background color */ + /* dark blue table header color + background-color: #6688d4; */ + white-space: nowrap; + font-family: sans-serif; + font-style: italic; + font-size:70%; +} +/* "Line coverage date bins" leader */ +td.subTableHeader +{ + text-align: center; + padding-bottom: 6px; + font-family: sans-serif; + font-weight: bold; + vertical-align: center; +} + +/* All views: header item format */ +td.headerItem +{ + text-align: right; + padding-right: 6px; + font-family: sans-serif; + font-weight: bold; + vertical-align: top; + white-space: nowrap; +} + +/* All views: header item value format */ +td.headerValue +{ + text-align: left; + color: #284fa8; + font-family: sans-serif; + font-weight: bold; + white-space: nowrap; +} + +/* All views: header item coverage table heading */ +td.headerCovTableHead +{ + text-align: center; + padding-right: 6px; + padding-left: 6px; + padding-bottom: 0px; + font-family: sans-serif; + white-space: nowrap; +} + +/* All views: header item coverage table entry */ +td.headerCovTableEntry +{ + text-align: right; + color: #284fa8; + font-family: sans-serif; + font-weight: bold; + white-space: nowrap; + padding-left: 12px; + padding-right: 4px; + background-color: #dae7fe; +} + +/* All views: header item coverage table entry for high coverage rate */ +td.headerCovTableEntryHi +{ + text-align: right; + color: #000000; + font-family: sans-serif; + font-weight: bold; + white-space: nowrap; + padding-left: 12px; + padding-right: 4px; + background-color: #a7fc9d; +} + +/* All views: header item coverage table entry for medium coverage rate */ +td.headerCovTableEntryMed +{ + text-align: right; + color: #000000; + font-family: sans-serif; + font-weight: bold; + white-space: nowrap; + padding-left: 12px; + padding-right: 4px; + background-color: #ffea20; +} + +/* All views: header item coverage table entry for ow coverage rate */ +td.headerCovTableEntryLo +{ + text-align: right; + color: #000000; + font-family: sans-serif; + font-weight: bold; + white-space: nowrap; + padding-left: 12px; + padding-right: 4px; + background-color: #ff0000; +} + +/* All views: header legend value for legend entry */ +td.headerValueLeg +{ + text-align: left; + color: #000000; + font-family: sans-serif; + font-size: 80%; + white-space: nowrap; + padding-top: 4px; +} + +/* All views: color of horizontal ruler */ +td.ruler +{ + background-color: #6688d4; +} + +/* All views: version string format */ +td.versionInfo +{ + text-align: center; + padding-top: 2px; + font-family: sans-serif; + font-style: italic; +} + +/* Directory view/File view (all)/Test case descriptions: + table headline format */ +td.tableHead +{ + text-align: center; + color: #ffffff; + background-color: #6688d4; + font-family: sans-serif; + font-size: 120%; + font-weight: bold; + white-space: nowrap; + padding-left: 4px; + padding-right: 4px; +} + +span.tableHeadSort +{ + padding-right: 4px; +} + +/* Directory view/File view (all): filename entry format */ +td.coverFile +{ + text-align: left; + padding-left: 10px; + padding-right: 20px; + color: #284fa8; + background-color: #dae7fe; + font-family: monospace; +} + +/* Directory view/File view (all): directory name entry format */ +td.coverDirectory +{ + text-align: left; + padding-left: 10px; + padding-right: 20px; + color: #284fa8; + background-color: #b8d0ff; + font-family: monospace; +} + +/* Directory view/File view (all): filename entry format */ +td.overallOwner +{ + text-align: center; + font-weight: bold; + font-family: sans-serif; + background-color: #dae7fe; + padding-right: 10px; + padding-left: 10px; +} + +/* Directory view/File view (all): filename entry format */ +td.ownerName +{ + text-align: right; + font-style: italic; + font-family: sans-serif; + background-color: #E5DBDB; + padding-right: 10px; + padding-left: 20px; +} + +/* Directory view/File view (all): bar-graph entry format*/ +td.coverBar +{ + padding-left: 10px; + padding-right: 10px; + background-color: #dae7fe; +} + +/* Directory view/File view (all): bar-graph entry format*/ +td.owner_coverBar +{ + padding-left: 10px; + padding-right: 10px; + background-color: #E5DBDB; +} + +/* Directory view/File view (all): bar-graph outline color */ +td.coverBarOutline +{ + background-color: #000000; +} + +/* Directory view/File view (all): percentage entry for files with + high coverage rate */ +td.coverPerHi +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #a7fc9d; + font-weight: bold; + font-family: sans-serif; +} + +/* 'owner' entry: slightly lighter color than 'coverPerHi' */ +td.owner_coverPerHi +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #82E0AA; + font-weight: bold; + font-family: sans-serif; +} + +/* Directory view/File view (all): line count entry */ +td.coverNumDflt +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #dae7fe; + white-space: nowrap; + font-family: sans-serif; +} + +/* td background color and font for the 'owner' section of the table */ +td.ownerTla +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #E5DBDB; + white-space: nowrap; + font-family: sans-serif; + font-style: italic; +} + +/* Directory view/File view (all): line count entry for files with + high coverage rate */ +td.coverNumHi +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #a7fc9d; + white-space: nowrap; + font-family: sans-serif; +} + +td.owner_coverNumHi +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #82E0AA; + white-space: nowrap; + font-family: sans-serif; +} + +/* Directory view/File view (all): percentage entry for files with + medium coverage rate */ +td.coverPerMed +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #ffea20; + font-weight: bold; + font-family: sans-serif; +} + +td.owner_coverPerMed +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #F9E79F; + font-weight: bold; + font-family: sans-serif; +} + +/* Directory view/File view (all): line count entry for files with + medium coverage rate */ +td.coverNumMed +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #ffea20; + white-space: nowrap; + font-family: sans-serif; +} + +td.owner_coverNumMed +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #F9E79F; + white-space: nowrap; + font-family: sans-serif; +} + +/* Directory view/File view (all): percentage entry for files with + low coverage rate */ +td.coverPerLo +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #ff0000; + font-weight: bold; + font-family: sans-serif; +} + +td.owner_coverPerLo +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #EC7063; + font-weight: bold; + font-family: sans-serif; +} + +/* Directory view/File view (all): line count entry for files with + low coverage rate */ +td.coverNumLo +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #ff0000; + white-space: nowrap; + font-family: sans-serif; +} + +td.owner_coverNumLo +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #EC7063; + white-space: nowrap; + font-family: sans-serif; +} + +/* File view (all): "show/hide details" link format */ +a.detail:link +{ + color: #b8d0ff; + font-size:80%; +} + +/* File view (all): "show/hide details" link - visited format */ +a.detail:visited +{ + color: #b8d0ff; + font-size:80%; +} + +/* File view (all): "show/hide details" link - activated format */ +a.detail:active +{ + color: #ffffff; + font-size:80%; +} + +/* File view (detail): test name entry */ +td.testName +{ + text-align: right; + padding-right: 10px; + background-color: #dae7fe; + font-family: sans-serif; +} + +/* File view (detail): test percentage entry */ +td.testPer +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #dae7fe; + font-family: sans-serif; +} + +/* File view (detail): test lines count entry */ +td.testNum +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #dae7fe; + font-family: sans-serif; +} + +/* Test case descriptions: test name format*/ +dt +{ + font-family: sans-serif; + font-weight: bold; +} + +/* Test case descriptions: description table body */ +td.testDescription +{ + padding-top: 10px; + padding-left: 30px; + padding-bottom: 10px; + padding-right: 30px; + background-color: #dae7fe; +} + +/* Source code view: function entry */ +td.coverFn +{ + text-align: left; + padding-left: 10px; + padding-right: 20px; + color: #284fa8; + background-color: #dae7fe; + font-family: monospace; +} + +/* Source code view: function entry zero count*/ +td.coverFnLo +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #ff0000; + font-weight: bold; + font-family: sans-serif; +} + +/* Source code view: function entry nonzero count*/ +td.coverFnHi +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #dae7fe; + font-weight: bold; + font-family: sans-serif; +} + +td.coverFnAlias +{ + text-align: right; + padding-left: 10px; + padding-right: 20px; + color: #284fa8; + /* make this a slightly different color than the leader - otherwise, + otherwise the alias is hard to distinguish in the table */ + background-color: #E5DBDB; /* very light pale grey/blue */ + font-family: monospace; +} + +/* Source code view: function entry zero count*/ +td.coverFnAliasLo +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #EC7063; /* lighter red */ + font-family: sans-serif; +} + +/* Source code view: function entry nonzero count*/ +td.coverFnAliasHi +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #dae7fe; + font-weight: bold; + font-family: sans-serif; +} + +/* Source code view: source code format */ +pre.source +{ + font-family: monospace; + white-space: pre; + margin-top: 2px; +} + +/* elided/removed code */ +span.elidedSource +{ + font-family: sans-serif; + /*font-size: 8pt; */ + font-style: italic; + background-color: lightgrey; +} + +/* Source code view: line number format */ +span.lineNum +{ + background-color: #efe383; +} + +/* Source code view: line number format when there are deleted + lines in the corresponding location */ +span.lineNumWithDelete +{ + foreground-color: #efe383; + background-color: lightgrey; +} + +/* Source code view: format for Cov legend */ +span.coverLegendCov +{ + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + background-color: #cad7fe; +} + +/* Source code view: format for NoCov legend */ +span.coverLegendNoCov +{ + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + background-color: #ff6230; +} + +/* Source code view: format for the source code heading line */ +pre.sourceHeading +{ + white-space: pre; + font-family: monospace; + font-weight: bold; + margin: 0px; +} + +/* All views: header legend value for low rate */ +td.headerValueLegL +{ + font-family: sans-serif; + text-align: center; + white-space: nowrap; + padding-left: 4px; + padding-right: 2px; + background-color: #ff0000; + font-size: 80%; +} + +/* All views: header legend value for med rate */ +td.headerValueLegM +{ + font-family: sans-serif; + text-align: center; + white-space: nowrap; + padding-left: 2px; + padding-right: 2px; + background-color: #ffea20; + font-size: 80%; +} + +/* All views: header legend value for hi rate */ +td.headerValueLegH +{ + font-family: sans-serif; + text-align: center; + white-space: nowrap; + padding-left: 2px; + padding-right: 4px; + background-color: #a7fc9d; + font-size: 80%; +} + +/* All views except source code view: legend format for low coverage */ +span.coverLegendCovLo +{ + padding-left: 10px; + padding-right: 10px; + padding-top: 2px; + background-color: #ff0000; +} + +/* All views except source code view: legend format for med coverage */ +span.coverLegendCovMed +{ + padding-left: 10px; + padding-right: 10px; + padding-top: 2px; + background-color: #ffea20; +} + +/* All views except source code view: legend format for hi coverage */ +span.coverLegendCovHi +{ + padding-left: 10px; + padding-right: 10px; + padding-top: 2px; + background-color: #a7fc9d; +} + +a.branchTla:link +{ + color: #000000; +} + +a.branchTla:visited +{ + color: #000000; +} + +a.mcdcTla:link +{ + color: #000000; +} + +a.mcdcTla:visited +{ + color: #000000; +} + +/* Source code view/table entry background: format for lines classified as "Uncovered New Code (+ => 0): +Newly added code is not tested" */ +td.tlaUNC +{ + text-align: right; + background-color: #FF6230; +} +td.tlaBgUNC { + background-color: #FF6230; +} + +/* Source code view/table entry background: format for lines classified as "Uncovered New Code (+ => 0): +Newly added code is not tested" */ +span.tlaUNC +{ + text-align: left; + background-color: #FF6230; +} +span.tlaBgUNC { + background-color: #FF6230; +} +a.tlaBgUNC { + background-color: #FF6230; + color: #000000; +} + +td.headerCovTableHeadUNC { + text-align: center; + padding-right: 6px; + padding-left: 6px; + padding-bottom: 0px; + font-family: sans-serif; + white-space: nowrap; + background-color: #FF6230; +} + +/* Source code view/table entry background: format for lines classified as "Lost Baseline Coverage (1 => 0): +Unchanged code is no longer tested" */ +td.tlaLBC +{ + text-align: right; + background-color: #FF6230; +} +td.tlaBgLBC { + background-color: #FF6230; +} + +/* Source code view/table entry background: format for lines classified as "Lost Baseline Coverage (1 => 0): +Unchanged code is no longer tested" */ +span.tlaLBC +{ + text-align: left; + background-color: #FF6230; +} +span.tlaBgLBC { + background-color: #FF6230; +} +a.tlaBgLBC { + background-color: #FF6230; + color: #000000; +} + +td.headerCovTableHeadLBC { + text-align: center; + padding-right: 6px; + padding-left: 6px; + padding-bottom: 0px; + font-family: sans-serif; + white-space: nowrap; + background-color: #FF6230; +} + +/* Source code view/table entry background: format for lines classified as "Uncovered Included Code (# => 0): +Previously unused code is untested" */ +td.tlaUIC +{ + text-align: right; + background-color: #FF6230; +} +td.tlaBgUIC { + background-color: #FF6230; +} + +/* Source code view/table entry background: format for lines classified as "Uncovered Included Code (# => 0): +Previously unused code is untested" */ +span.tlaUIC +{ + text-align: left; + background-color: #FF6230; +} +span.tlaBgUIC { + background-color: #FF6230; +} +a.tlaBgUIC { + background-color: #FF6230; + color: #000000; +} + +td.headerCovTableHeadUIC { + text-align: center; + padding-right: 6px; + padding-left: 6px; + padding-bottom: 0px; + font-family: sans-serif; + white-space: nowrap; + background-color: #FF6230; +} + +/* Source code view/table entry background: format for lines classified as "Uncovered Baseline Code (0 => 0): +Unchanged code was untested before, is untested now" */ +td.tlaUBC +{ + text-align: right; + background-color: #FF6230; +} +td.tlaBgUBC { + background-color: #FF6230; +} + +/* Source code view/table entry background: format for lines classified as "Uncovered Baseline Code (0 => 0): +Unchanged code was untested before, is untested now" */ +span.tlaUBC +{ + text-align: left; + background-color: #FF6230; +} +span.tlaBgUBC { + background-color: #FF6230; +} +a.tlaBgUBC { + background-color: #FF6230; + color: #000000; +} + +td.headerCovTableHeadUBC { + text-align: center; + padding-right: 6px; + padding-left: 6px; + padding-bottom: 0px; + font-family: sans-serif; + white-space: nowrap; + background-color: #FF6230; +} + +/* Source code view/table entry background: format for lines classified as "Gained Baseline Coverage (0 => 1): +Unchanged code is tested now" */ +td.tlaGBC +{ + text-align: right; + background-color: #CAD7FE; +} +td.tlaBgGBC { + background-color: #CAD7FE; +} + +/* Source code view/table entry background: format for lines classified as "Gained Baseline Coverage (0 => 1): +Unchanged code is tested now" */ +span.tlaGBC +{ + text-align: left; + background-color: #CAD7FE; +} +span.tlaBgGBC { + background-color: #CAD7FE; +} +a.tlaBgGBC { + background-color: #CAD7FE; + color: #000000; +} + +td.headerCovTableHeadGBC { + text-align: center; + padding-right: 6px; + padding-left: 6px; + padding-bottom: 0px; + font-family: sans-serif; + white-space: nowrap; + background-color: #CAD7FE; +} + +/* Source code view/table entry background: format for lines classified as "Gained Included Coverage (# => 1): +Previously unused code is tested now" */ +td.tlaGIC +{ + text-align: right; + background-color: #CAD7FE; +} +td.tlaBgGIC { + background-color: #CAD7FE; +} + +/* Source code view/table entry background: format for lines classified as "Gained Included Coverage (# => 1): +Previously unused code is tested now" */ +span.tlaGIC +{ + text-align: left; + background-color: #CAD7FE; +} +span.tlaBgGIC { + background-color: #CAD7FE; +} +a.tlaBgGIC { + background-color: #CAD7FE; + color: #000000; +} + +td.headerCovTableHeadGIC { + text-align: center; + padding-right: 6px; + padding-left: 6px; + padding-bottom: 0px; + font-family: sans-serif; + white-space: nowrap; + background-color: #CAD7FE; +} + +/* Source code view/table entry background: format for lines classified as "Gained New Coverage (+ => 1): +Newly added code is tested" */ +td.tlaGNC +{ + text-align: right; + background-color: #CAD7FE; +} +td.tlaBgGNC { + background-color: #CAD7FE; +} + +/* Source code view/table entry background: format for lines classified as "Gained New Coverage (+ => 1): +Newly added code is tested" */ +span.tlaGNC +{ + text-align: left; + background-color: #CAD7FE; +} +span.tlaBgGNC { + background-color: #CAD7FE; +} +a.tlaBgGNC { + background-color: #CAD7FE; + color: #000000; +} + +td.headerCovTableHeadGNC { + text-align: center; + padding-right: 6px; + padding-left: 6px; + padding-bottom: 0px; + font-family: sans-serif; + white-space: nowrap; + background-color: #CAD7FE; +} + +/* Source code view/table entry background: format for lines classified as "Covered Baseline Code (1 => 1): +Unchanged code was tested before and is still tested" */ +td.tlaCBC +{ + text-align: right; + background-color: #CAD7FE; +} +td.tlaBgCBC { + background-color: #CAD7FE; +} + +/* Source code view/table entry background: format for lines classified as "Covered Baseline Code (1 => 1): +Unchanged code was tested before and is still tested" */ +span.tlaCBC +{ + text-align: left; + background-color: #CAD7FE; +} +span.tlaBgCBC { + background-color: #CAD7FE; +} +a.tlaBgCBC { + background-color: #CAD7FE; + color: #000000; +} + +td.headerCovTableHeadCBC { + text-align: center; + padding-right: 6px; + padding-left: 6px; + padding-bottom: 0px; + font-family: sans-serif; + white-space: nowrap; + background-color: #CAD7FE; +} + +/* Source code view/table entry background: format for lines classified as "Excluded Uncovered Baseline (0 => #): +Previously untested code is unused now" */ +td.tlaEUB +{ + text-align: right; + background-color: #FFFFFF; +} +td.tlaBgEUB { + background-color: #FFFFFF; +} + +/* Source code view/table entry background: format for lines classified as "Excluded Uncovered Baseline (0 => #): +Previously untested code is unused now" */ +span.tlaEUB +{ + text-align: left; + background-color: #FFFFFF; +} +span.tlaBgEUB { + background-color: #FFFFFF; +} +a.tlaBgEUB { + background-color: #FFFFFF; + color: #000000; +} + +td.headerCovTableHeadEUB { + text-align: center; + padding-right: 6px; + padding-left: 6px; + padding-bottom: 0px; + font-family: sans-serif; + white-space: nowrap; + background-color: #FFFFFF; +} + +/* Source code view/table entry background: format for lines classified as "Excluded Covered Baseline (1 => #): +Previously tested code is unused now" */ +td.tlaECB +{ + text-align: right; + background-color: #FFFFFF; +} +td.tlaBgECB { + background-color: #FFFFFF; +} + +/* Source code view/table entry background: format for lines classified as "Excluded Covered Baseline (1 => #): +Previously tested code is unused now" */ +span.tlaECB +{ + text-align: left; + background-color: #FFFFFF; +} +span.tlaBgECB { + background-color: #FFFFFF; +} +a.tlaBgECB { + background-color: #FFFFFF; + color: #000000; +} + +td.headerCovTableHeadECB { + text-align: center; + padding-right: 6px; + padding-left: 6px; + padding-bottom: 0px; + font-family: sans-serif; + white-space: nowrap; + background-color: #FFFFFF; +} + +/* Source code view/table entry background: format for lines classified as "Deleted Uncovered Baseline (0 => -): +Previously untested code has been deleted" */ +td.tlaDUB +{ + text-align: right; + background-color: #FFFFFF; +} +td.tlaBgDUB { + background-color: #FFFFFF; +} + +/* Source code view/table entry background: format for lines classified as "Deleted Uncovered Baseline (0 => -): +Previously untested code has been deleted" */ +span.tlaDUB +{ + text-align: left; + background-color: #FFFFFF; +} +span.tlaBgDUB { + background-color: #FFFFFF; +} +a.tlaBgDUB { + background-color: #FFFFFF; + color: #000000; +} + +td.headerCovTableHeadDUB { + text-align: center; + padding-right: 6px; + padding-left: 6px; + padding-bottom: 0px; + font-family: sans-serif; + white-space: nowrap; + background-color: #FFFFFF; +} + +/* Source code view/table entry background: format for lines classified as "Deleted Covered Baseline (1 => -): +Previously tested code has been deleted" */ +td.tlaDCB +{ + text-align: right; + background-color: #FFFFFF; +} +td.tlaBgDCB { + background-color: #FFFFFF; +} + +/* Source code view/table entry background: format for lines classified as "Deleted Covered Baseline (1 => -): +Previously tested code has been deleted" */ +span.tlaDCB +{ + text-align: left; + background-color: #FFFFFF; +} +span.tlaBgDCB { + background-color: #FFFFFF; +} +a.tlaBgDCB { + background-color: #FFFFFF; + color: #000000; +} + +td.headerCovTableHeadDCB { + text-align: center; + padding-right: 6px; + padding-left: 6px; + padding-bottom: 0px; + font-family: sans-serif; + white-space: nowrap; + background-color: #FFFFFF; +} + +/* Source code view: format for date/owner bin that is not hit */ +span.missBins +{ + background-color: #ff0000 /* red */ +} diff --git a/coverage-report/glass.png b/coverage-report/glass.png new file mode 100644 index 0000000000000000000000000000000000000000..e1abc00680a3093c49fdb775ae6bdb6764c95af2 GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)gaEa{HEjtmSN`?>!lvI6;R0X`wF z|Ns97GD8ntt^-nxB|(0{3=Yq3q=7g|-tI089jvk*Kn`btM`SSr1Gf+eGhVt|_XjA* zUgGKN%6^Gmn4d%Ph(nkFP>9RZ#WAE}PI3Z}&BVayv3^M*kj3EX>gTe~DWM4f=_Dpv literal 0 HcmV?d00001 diff --git a/coverage-report/index-sort-f.html b/coverage-report/index-sort-f.html new file mode 100644 index 0000000..c165e29 --- /dev/null +++ b/coverage-report/index-sort-f.html @@ -0,0 +1,117 @@ + + + + + + + LCOV - coverage.info + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top levelCoverageTotalHit
Test:coverage.infoLines:92.7 %15501437
Test Date:2025-10-19 19:06:58Functions:98.1 %105103
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Directory Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
tests/ +
83.6%83.6%
+
83.6 %59049392.6 %2725
src/ +
98.3%98.3%
+
98.3 %960944100.0 %7878
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/index-sort-l.html b/coverage-report/index-sort-l.html new file mode 100644 index 0000000..f532773 --- /dev/null +++ b/coverage-report/index-sort-l.html @@ -0,0 +1,117 @@ + + + + + + + LCOV - coverage.info + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top levelCoverageTotalHit
Test:coverage.infoLines:92.7 %15501437
Test Date:2025-10-19 19:06:58Functions:98.1 %105103
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Directory Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
tests/ +
83.6%83.6%
+
83.6 %59049392.6 %2725
src/ +
98.3%98.3%
+
98.3 %960944100.0 %7878
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/index.html b/coverage-report/index.html new file mode 100644 index 0000000..8575b47 --- /dev/null +++ b/coverage-report/index.html @@ -0,0 +1,117 @@ + + + + + + + LCOV - coverage.info + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top levelCoverageTotalHit
Test:coverage.infoLines:92.7 %15501437
Test Date:2025-10-19 19:06:58Functions:98.1 %105103
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Directory Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
src/ +
98.3%98.3%
+
98.3 %960944100.0 %7878
tests/ +
83.6%83.6%
+
83.6 %59049392.6 %2725
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/ruby.png b/coverage-report/ruby.png new file mode 100644 index 0000000000000000000000000000000000000000..991b6d4ec9e78be165e3ef757eed1aada287364d GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)ga>?NMQuI!iC1^FceV#7`HfI^%F z9+AZi4BSE>%y{W;-5;PJOS+@4BLl<6e(pbstUx|nfKQ0)e^Y%R^MdiLxj>4`)5S5Q b;#P73kj=!v_*DHKNFRfztDnm{r-UW|iOwIS literal 0 HcmV?d00001 diff --git a/coverage-report/snow.png b/coverage-report/snow.png new file mode 100644 index 0000000000000000000000000000000000000000..2cdae107fceec6e7f02ac7acb4a34a82a540caa5 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)ga>?NMQuI!iC1^MM!lvI6;R0X`wF|Ns97GD8ntt^-nBo-U3d c6}OTTfNUlP#;5A{K>8RwUHx3vIVCg!071?oo&W#< literal 0 HcmV?d00001 diff --git a/coverage-report/src/aes_128.c.func-c.html b/coverage-report/src/aes_128.c.func-c.html new file mode 100644 index 0000000..a700e45 --- /dev/null +++ b/coverage-report/src/aes_128.c.func-c.html @@ -0,0 +1,164 @@ + + + + + + + LCOV - coverage.info - src/aes_128.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - aes_128.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %126126
Test Date:2025-10-19 19:06:58Functions:100.0 %1111
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
aes128_decrypt_block46
inv_mix_columns414
inv_shift_rows460
inv_sub_bytes460
mul26496
aes128_encrypt_block174832
mix_columns1573488
shift_rows1748320
sub_bytes1748320
add_round_key1923658
xtime25175808
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/aes_128.c.func.html b/coverage-report/src/aes_128.c.func.html new file mode 100644 index 0000000..4dbe5d7 --- /dev/null +++ b/coverage-report/src/aes_128.c.func.html @@ -0,0 +1,164 @@ + + + + + + + LCOV - coverage.info - src/aes_128.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - aes_128.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %126126
Test Date:2025-10-19 19:06:58Functions:100.0 %1111
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
add_round_key1923658
aes128_decrypt_block46
aes128_encrypt_block174832
inv_mix_columns414
inv_shift_rows460
inv_sub_bytes460
mix_columns1573488
mul26496
shift_rows1748320
sub_bytes1748320
xtime25175808
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/aes_128.c.gcov.html b/coverage-report/src/aes_128.c.gcov.html new file mode 100644 index 0000000..ad5f2cd --- /dev/null +++ b/coverage-report/src/aes_128.c.gcov.html @@ -0,0 +1,264 @@ + + + + + + + LCOV - coverage.info - src/aes_128.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - aes_128.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %126126
Test Date:2025-10-19 19:06:58Functions:100.0 %1111
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include "../include/aes_128.h"
+       2              : #include "../include/sbox.h"
+       3              : 
+       4              : // Internal helpers
+       5      1923658 : static void add_round_key(uint8_t state[16], const uint8_t *round_key) {
+       6     32702186 :     for (int i = 0; i < 16; i++) {
+       7     30778528 :         state[i] ^= round_key[i];
+       8     30778528 :     }
+       9      1923658 : }
+      10              : 
+      11      1748320 : static void sub_bytes(uint8_t state[16], const uint8_t sbox[256]) {
+      12     29721440 :     for (int i = 0; i < 16; i++) {
+      13     27973120 :         state[i] = sbox[state[i]];
+      14     27973120 :     }
+      15      1748320 : }
+      16              : 
+      17      1748320 : static void shift_rows(uint8_t state[16]) {
+      18              :     uint8_t tmp;
+      19              : 
+      20              :     // Row 1: shift left by 1
+      21      1748320 :     tmp = state[1];
+      22      1748320 :     state[1] = state[5];
+      23      1748320 :     state[5] = state[9];
+      24      1748320 :     state[9] = state[13];
+      25      1748320 :     state[13] = tmp;
+      26              : 
+      27              :     // Row 2: shift left by 2
+      28      1748320 :     tmp = state[2];
+      29      1748320 :     state[2] = state[10];
+      30      1748320 :     state[10] = tmp;
+      31      1748320 :     tmp = state[6];
+      32      1748320 :     state[6] = state[14];
+      33      1748320 :     state[14] = tmp;
+      34              : 
+      35              :     // Row 3: shift left by 3 (or right by 1)
+      36      1748320 :     tmp = state[3];
+      37      1748320 :     state[3] = state[15];
+      38      1748320 :     state[15] = state[11];
+      39      1748320 :     state[11] = state[7];
+      40      1748320 :     state[7] = tmp;
+      41      1748320 : }
+      42              : 
+      43              : // GF(2^8) multiplication by 2
+      44     25175808 : static uint8_t xtime(uint8_t x) {
+      45     25175808 :     return (x << 1) ^ ((x & 0x80) ? 0x1B : 0);
+      46              : }
+      47              : 
+      48      1573488 : static void mix_columns(uint8_t state[16]) {
+      49      7867440 :     for (int c = 0; c < 4; c++) {
+      50      6293952 :         uint8_t *col = &state[c * 4];
+      51      6293952 :         uint8_t t = col[0] ^ col[1] ^ col[2] ^ col[3];
+      52      6293952 :         uint8_t tmp0 = col[0];
+      53      6293952 :         uint8_t tmp1 = col[1];
+      54      6293952 :         uint8_t tmp2 = col[2];
+      55      6293952 :         uint8_t tmp3 = col[3];
+      56              : 
+      57      6293952 :         col[0] ^= t ^ xtime(tmp0 ^ tmp1);
+      58      6293952 :         col[1] ^= t ^ xtime(tmp1 ^ tmp2);
+      59      6293952 :         col[2] ^= t ^ xtime(tmp2 ^ tmp3);
+      60      6293952 :         col[3] ^= t ^ xtime(tmp3 ^ tmp0);
+      61      6293952 :     }
+      62      1573488 : }
+      63              : 
+      64       174832 : void aes128_encrypt_block(const uint8_t input[16], uint8_t output[16], const uint8_t round_keys[176], const uint8_t sbox[256]) {
+      65              :     uint8_t state[16];
+      66              : 
+      67              :     // Copy input into state
+      68      2972144 :     for (int i = 0; i < 16; i++) {
+      69      2797312 :         state[i] = input[i];
+      70      2797312 :     }
+      71              : 
+      72              :     // Initial round key
+      73       174832 :     add_round_key(state, round_keys);
+      74              : 
+      75              :     // 9 main rounds
+      76      1748320 :     for (int round = 1; round <= 9; round++) {
+      77      1573488 :         sub_bytes(state, sbox);
+      78      1573488 :         shift_rows(state);
+      79      1573488 :         mix_columns(state);
+      80      1573488 :         add_round_key(state, round_keys + round * 16);
+      81      1573488 :     }
+      82              : 
+      83              :     // Final round
+      84       174832 :     sub_bytes(state, sbox);
+      85       174832 :     shift_rows(state);
+      86       174832 :     add_round_key(state, round_keys + 10 * 16);
+      87              : 
+      88              :     // Copy state to output
+      89      2972144 :     for (int i = 0; i < 16; i++) {
+      90      2797312 :         output[i] = state[i];
+      91      2797312 :     }
+      92       174832 : }
+      93              : 
+      94              : // Inverse ShiftRows
+      95          460 : static void inv_shift_rows(uint8_t state[16]) {
+      96              :     uint8_t tmp;
+      97              : 
+      98              :     // Row 1: shift right by 1
+      99          460 :     tmp = state[13];
+     100          460 :     state[13] = state[9];
+     101          460 :     state[9] = state[5];
+     102          460 :     state[5] = state[1];
+     103          460 :     state[1] = tmp;
+     104              : 
+     105              :     // Row 2: shift right by 2
+     106          460 :     tmp = state[2];
+     107          460 :     state[2] = state[10];
+     108          460 :     state[10] = tmp;
+     109          460 :     tmp = state[6];
+     110          460 :     state[6] = state[14];
+     111          460 :     state[14] = tmp;
+     112              : 
+     113              :     // Row 3: shift right by 3 (or left by 1)
+     114          460 :     tmp = state[3];
+     115          460 :     state[3] = state[7];
+     116          460 :     state[7] = state[11];
+     117          460 :     state[11] = state[15];
+     118          460 :     state[15] = tmp;
+     119          460 : }
+     120              : 
+     121              : // GF(2^8) multiplication helper for inverse MixColumns
+     122        26496 : static uint8_t mul(uint8_t a, uint8_t b) {
+     123        26496 :     uint8_t p = 0;
+     124              :     uint8_t hi_bit_set;
+     125       238464 :     for (int i = 0; i < 8; i++) {
+     126       211968 :         if (b & 1)
+     127        72864 :             p ^= a;
+     128       211968 :         hi_bit_set = a & 0x80;
+     129       211968 :         a <<= 1;
+     130       211968 :         if (hi_bit_set)
+     131       105888 :             a ^= 0x1b; // AES irreducible polynomial
+     132       211968 :         b >>= 1;
+     133       211968 :     }
+     134        26496 :     return p;
+     135              : }
+     136              : 
+     137          414 : static void inv_mix_columns(uint8_t state[16]) {
+     138         2070 :     for (int c = 0; c < 4; c++) {
+     139         1656 :         uint8_t *col = &state[c * 4];
+     140         1656 :         uint8_t a0 = col[0], a1 = col[1], a2 = col[2], a3 = col[3];
+     141              : 
+     142         1656 :         col[0] = mul(a0, 0x0e) ^ mul(a1, 0x0b) ^ mul(a2, 0x0d) ^ mul(a3, 0x09);
+     143         1656 :         col[1] = mul(a0, 0x09) ^ mul(a1, 0x0e) ^ mul(a2, 0x0b) ^ mul(a3, 0x0d);
+     144         1656 :         col[2] = mul(a0, 0x0d) ^ mul(a1, 0x09) ^ mul(a2, 0x0e) ^ mul(a3, 0x0b);
+     145         1656 :         col[3] = mul(a0, 0x0b) ^ mul(a1, 0x0d) ^ mul(a2, 0x09) ^ mul(a3, 0x0e);
+     146         1656 :     }
+     147          414 : }
+     148              : 
+     149          460 : static void inv_sub_bytes(uint8_t state[16], const uint8_t inv_sbox[256]) {
+     150         7820 :     for (int i = 0; i < 16; i++) {
+     151         7360 :         state[i] = inv_sbox[state[i]];
+     152         7360 :     }
+     153          460 : }
+     154              : 
+     155           46 : void aes128_decrypt_block(const uint8_t input[16], uint8_t output[16], const uint8_t round_keys[176], const uint8_t sbox[256]) {
+     156              :     uint8_t state[16];
+     157              :     uint8_t inv_sbox[256];
+     158              : 
+     159              :     // Generate inverse S-box
+     160           46 :     initialize_inverse_sbox(sbox, inv_sbox);
+     161              : 
+     162              :     // Copy input to state
+     163          782 :     for (int i = 0; i < 16; i++) {
+     164          736 :         state[i] = input[i];
+     165          736 :     }
+     166              : 
+     167              :     // Initial AddRoundKey with last round key
+     168           46 :     add_round_key(state, round_keys + 10 * 16);
+     169              : 
+     170              :     // 9 rounds
+     171          460 :     for (int round = 9; round >= 1; round--) {
+     172          414 :         inv_shift_rows(state);
+     173          414 :         inv_sub_bytes(state, inv_sbox);
+     174          414 :         add_round_key(state, round_keys + round * 16);
+     175          414 :         inv_mix_columns(state);
+     176          414 :     }
+     177              : 
+     178              :     // Final round
+     179           46 :     inv_shift_rows(state);
+     180           46 :     inv_sub_bytes(state, inv_sbox);
+     181           46 :     add_round_key(state, round_keys);
+     182              : 
+     183              :     // Copy state to output
+     184          782 :     for (int i = 0; i < 16; i++) {
+     185          736 :         output[i] = state[i];
+     186          736 :     }
+     187           46 : }
+     188              : 
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/aes_192.c.func-c.html b/coverage-report/src/aes_192.c.func-c.html new file mode 100644 index 0000000..9f7f39e --- /dev/null +++ b/coverage-report/src/aes_192.c.func-c.html @@ -0,0 +1,164 @@ + + + + + + + LCOV - coverage.info - src/aes_192.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - aes_192.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %126126
Test Date:2025-10-19 19:06:58Functions:100.0 %1111
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
aes192_decrypt_block4
inv_mix_columns44
inv_shift_rows48
inv_sub_bytes48
mul2816
aes192_encrypt_block175142
mix_columns1926562
shift_rows2101704
sub_bytes2101704
add_round_key2276898
xtime30824992
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/aes_192.c.func.html b/coverage-report/src/aes_192.c.func.html new file mode 100644 index 0000000..09829a7 --- /dev/null +++ b/coverage-report/src/aes_192.c.func.html @@ -0,0 +1,164 @@ + + + + + + + LCOV - coverage.info - src/aes_192.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - aes_192.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %126126
Test Date:2025-10-19 19:06:58Functions:100.0 %1111
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
add_round_key2276898
aes192_decrypt_block4
aes192_encrypt_block175142
inv_mix_columns44
inv_shift_rows48
inv_sub_bytes48
mix_columns1926562
mul2816
shift_rows2101704
sub_bytes2101704
xtime30824992
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/aes_192.c.gcov.html b/coverage-report/src/aes_192.c.gcov.html new file mode 100644 index 0000000..9cb3d7f --- /dev/null +++ b/coverage-report/src/aes_192.c.gcov.html @@ -0,0 +1,265 @@ + + + + + + + LCOV - coverage.info - src/aes_192.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - aes_192.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %126126
Test Date:2025-10-19 19:06:58Functions:100.0 %1111
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include "../include/aes_192.h"
+       2              : #include "../include/sbox.h"
+       3              : 
+       4              : // Internal helpers (reused from AES-128)
+       5      2276898 : static void add_round_key(uint8_t state[16], const uint8_t *round_key) {
+       6     38707266 :     for (int i = 0; i < 16; i++) {
+       7     36430368 :         state[i] ^= round_key[i];
+       8     36430368 :     }
+       9      2276898 : }
+      10              : 
+      11      2101704 : static void sub_bytes(uint8_t state[16], const uint8_t sbox[256]) {
+      12     35728968 :     for (int i = 0; i < 16; i++) {
+      13     33627264 :         state[i] = sbox[state[i]];
+      14     33627264 :     }
+      15      2101704 : }
+      16              : 
+      17      2101704 : static void shift_rows(uint8_t state[16]) {
+      18              :     uint8_t tmp;
+      19              : 
+      20              :     // Row 1: shift left by 1
+      21      2101704 :     tmp = state[1];
+      22      2101704 :     state[1] = state[5];
+      23      2101704 :     state[5] = state[9];
+      24      2101704 :     state[9] = state[13];
+      25      2101704 :     state[13] = tmp;
+      26              : 
+      27              :     // Row 2: shift left by 2
+      28      2101704 :     tmp = state[2];
+      29      2101704 :     state[2] = state[10];
+      30      2101704 :     state[10] = tmp;
+      31      2101704 :     tmp = state[6];
+      32      2101704 :     state[6] = state[14];
+      33      2101704 :     state[14] = tmp;
+      34              : 
+      35              :     // Row 3: shift left by 3
+      36      2101704 :     tmp = state[3];
+      37      2101704 :     state[3] = state[15];
+      38      2101704 :     state[15] = state[11];
+      39      2101704 :     state[11] = state[7];
+      40      2101704 :     state[7] = tmp;
+      41      2101704 : }
+      42              : 
+      43     30824992 : static uint8_t xtime(uint8_t x) {
+      44     30824992 :     return (x << 1) ^ ((x & 0x80) ? 0x1B : 0);
+      45              : }
+      46              : 
+      47      1926562 : static void mix_columns(uint8_t state[16]) {
+      48      9632810 :     for (int c = 0; c < 4; c++) {
+      49      7706248 :         uint8_t *col = &state[c * 4];
+      50      7706248 :         uint8_t t = col[0] ^ col[1] ^ col[2] ^ col[3];
+      51      7706248 :         uint8_t tmp0 = col[0];
+      52      7706248 :         uint8_t tmp1 = col[1];
+      53      7706248 :         uint8_t tmp2 = col[2];
+      54      7706248 :         uint8_t tmp3 = col[3];
+      55              : 
+      56      7706248 :         col[0] ^= t ^ xtime(tmp0 ^ tmp1);
+      57      7706248 :         col[1] ^= t ^ xtime(tmp1 ^ tmp2);
+      58      7706248 :         col[2] ^= t ^ xtime(tmp2 ^ tmp3);
+      59      7706248 :         col[3] ^= t ^ xtime(tmp3 ^ tmp0);
+      60      7706248 :     }
+      61      1926562 : }
+      62              : 
+      63              : // AES-192 Encryption (12 rounds)
+      64       175142 : void aes192_encrypt_block(const uint8_t input[16], uint8_t output[16], 
+      65              :                            const uint8_t round_keys[208], const uint8_t sbox[256]) {
+      66              :     uint8_t state[16];
+      67              : 
+      68              :     // Copy input to state
+      69      2977414 :     for (int i = 0; i < 16; i++) {
+      70      2802272 :         state[i] = input[i];
+      71      2802272 :     }
+      72              : 
+      73              :     // Initial round key
+      74       175142 :     add_round_key(state, round_keys);
+      75              : 
+      76              :     // 11 main rounds
+      77      2101704 :     for (int round = 1; round <= 11; round++) {
+      78      1926562 :         sub_bytes(state, sbox);
+      79      1926562 :         shift_rows(state);
+      80      1926562 :         mix_columns(state);
+      81      1926562 :         add_round_key(state, round_keys + round * 16);
+      82      1926562 :     }
+      83              : 
+      84              :     // Final round (no MixColumns)
+      85       175142 :     sub_bytes(state, sbox);
+      86       175142 :     shift_rows(state);
+      87       175142 :     add_round_key(state, round_keys + 12 * 16);
+      88              : 
+      89              :     // Copy state to output
+      90      2977414 :     for (int i = 0; i < 16; i++) {
+      91      2802272 :         output[i] = state[i];
+      92      2802272 :     }
+      93       175142 : }
+      94              : 
+      95              : // Inverse operations for decryption
+      96           48 : static void inv_shift_rows(uint8_t state[16]) {
+      97              :     uint8_t tmp;
+      98              : 
+      99              :     // Row 1: shift right by 1
+     100           48 :     tmp = state[13];
+     101           48 :     state[13] = state[9];
+     102           48 :     state[9] = state[5];
+     103           48 :     state[5] = state[1];
+     104           48 :     state[1] = tmp;
+     105              : 
+     106              :     // Row 2: shift right by 2
+     107           48 :     tmp = state[2];
+     108           48 :     state[2] = state[10];
+     109           48 :     state[10] = tmp;
+     110           48 :     tmp = state[6];
+     111           48 :     state[6] = state[14];
+     112           48 :     state[14] = tmp;
+     113              : 
+     114              :     // Row 3: shift right by 3
+     115           48 :     tmp = state[3];
+     116           48 :     state[3] = state[7];
+     117           48 :     state[7] = state[11];
+     118           48 :     state[11] = state[15];
+     119           48 :     state[15] = tmp;
+     120           48 : }
+     121              : 
+     122         2816 : static uint8_t mul(uint8_t a, uint8_t b) {
+     123         2816 :     uint8_t p = 0;
+     124              :     uint8_t hi_bit_set;
+     125        25344 :     for (int i = 0; i < 8; i++) {
+     126        22528 :         if (b & 1)
+     127         7744 :             p ^= a;
+     128        22528 :         hi_bit_set = a & 0x80;
+     129        22528 :         a <<= 1;
+     130        22528 :         if (hi_bit_set)
+     131        11152 :             a ^= 0x1b;
+     132        22528 :         b >>= 1;
+     133        22528 :     }
+     134         2816 :     return p;
+     135              : }
+     136              : 
+     137           44 : static void inv_mix_columns(uint8_t state[16]) {
+     138          220 :     for (int c = 0; c < 4; c++) {
+     139          176 :         uint8_t *col = &state[c * 4];
+     140          176 :         uint8_t a0 = col[0], a1 = col[1], a2 = col[2], a3 = col[3];
+     141              : 
+     142          176 :         col[0] = mul(a0, 0x0e) ^ mul(a1, 0x0b) ^ mul(a2, 0x0d) ^ mul(a3, 0x09);
+     143          176 :         col[1] = mul(a0, 0x09) ^ mul(a1, 0x0e) ^ mul(a2, 0x0b) ^ mul(a3, 0x0d);
+     144          176 :         col[2] = mul(a0, 0x0d) ^ mul(a1, 0x09) ^ mul(a2, 0x0e) ^ mul(a3, 0x0b);
+     145          176 :         col[3] = mul(a0, 0x0b) ^ mul(a1, 0x0d) ^ mul(a2, 0x09) ^ mul(a3, 0x0e);
+     146          176 :     }
+     147           44 : }
+     148              : 
+     149           48 : static void inv_sub_bytes(uint8_t state[16], const uint8_t inv_sbox[256]) {
+     150          816 :     for (int i = 0; i < 16; i++) {
+     151          768 :         state[i] = inv_sbox[state[i]];
+     152          768 :     }
+     153           48 : }
+     154              : 
+     155              : // AES-192 Decryption (12 rounds)
+     156            4 : void aes192_decrypt_block(const uint8_t input[16], uint8_t output[16], 
+     157              :                            const uint8_t round_keys[208], const uint8_t sbox[256]) {
+     158              :     uint8_t state[16];
+     159              :     uint8_t inv_sbox[256];
+     160              : 
+     161              :     // Generate inverse S-box
+     162            4 :     initialize_inverse_sbox(sbox, inv_sbox);
+     163              : 
+     164              :     // Copy input to state
+     165           68 :     for (int i = 0; i < 16; i++) {
+     166           64 :         state[i] = input[i];
+     167           64 :     }
+     168              : 
+     169              :     // Initial AddRoundKey with last round key
+     170            4 :     add_round_key(state, round_keys + 12 * 16);
+     171              : 
+     172              :     // 11 rounds
+     173           48 :     for (int round = 11; round >= 1; round--) {
+     174           44 :         inv_shift_rows(state);
+     175           44 :         inv_sub_bytes(state, inv_sbox);
+     176           44 :         add_round_key(state, round_keys + round * 16);
+     177           44 :         inv_mix_columns(state);
+     178           44 :     }
+     179              : 
+     180              :     // Final round (no InvMixColumns)
+     181            4 :     inv_shift_rows(state);
+     182            4 :     inv_sub_bytes(state, inv_sbox);
+     183            4 :     add_round_key(state, round_keys);
+     184              : 
+     185              :     // Copy state to output
+     186           68 :     for (int i = 0; i < 16; i++) {
+     187           64 :         output[i] = state[i];
+     188           64 :     }
+     189            4 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/aes_256.c.func-c.html b/coverage-report/src/aes_256.c.func-c.html new file mode 100644 index 0000000..39c7c73 --- /dev/null +++ b/coverage-report/src/aes_256.c.func-c.html @@ -0,0 +1,156 @@ + + + + + + + LCOV - coverage.info - src/aes_256.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - aes_256.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %110110
Test Date:2025-10-19 19:06:58Functions:100.0 %1010
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
aes256_decrypt_block4
inv_mix_columns52
inv_shift_rows56
inv_sub_bytes56
aes256_encrypt_block174668
mix_columns2270684
shift_rows2445352
sub_bytes2445352
add_round_key2620080
gf_mul72665216
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/aes_256.c.func.html b/coverage-report/src/aes_256.c.func.html new file mode 100644 index 0000000..e225508 --- /dev/null +++ b/coverage-report/src/aes_256.c.func.html @@ -0,0 +1,156 @@ + + + + + + + LCOV - coverage.info - src/aes_256.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - aes_256.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %110110
Test Date:2025-10-19 19:06:58Functions:100.0 %1010
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
add_round_key2620080
aes256_decrypt_block4
aes256_encrypt_block174668
gf_mul72665216
inv_mix_columns52
inv_shift_rows56
inv_sub_bytes56
mix_columns2270684
shift_rows2445352
sub_bytes2445352
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/aes_256.c.gcov.html b/coverage-report/src/aes_256.c.gcov.html new file mode 100644 index 0000000..eee99e4 --- /dev/null +++ b/coverage-report/src/aes_256.c.gcov.html @@ -0,0 +1,242 @@ + + + + + + + LCOV - coverage.info - src/aes_256.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - aes_256.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %110110
Test Date:2025-10-19 19:06:58Functions:100.0 %1010
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include <stdint.h>
+       2              : #include <string.h> // for memcpy
+       3              : #include "../include/aes_256.h"
+       4              : #include "../include/aes_defs.h" // for AES-256 constants
+       5              : #include "../include/sbox.h" // for S-box and inverse S-box initialization
+       6              : 
+       7              : // Forward declarations of helper functions
+       8              : static void sub_bytes(uint8_t state[AES256_BLOCK_SIZE], const uint8_t sbox[256]);
+       9              : static void shift_rows(uint8_t state[AES256_BLOCK_SIZE]);
+      10              : static void mix_columns(uint8_t state[AES256_BLOCK_SIZE]);
+      11              : static void add_round_key(uint8_t state[AES256_BLOCK_SIZE], const uint8_t round_key[AES256_BLOCK_SIZE]);
+      12              : 
+      13              : static void inv_sub_bytes(uint8_t state[AES256_BLOCK_SIZE], const uint8_t inv_sbox[256]);
+      14              : static void inv_shift_rows(uint8_t state[AES256_BLOCK_SIZE]);
+      15              : static void inv_mix_columns(uint8_t state[AES256_BLOCK_SIZE]);
+      16              : 
+      17              : // GF(2^8) multiplication helper used in mix_columns and inv_mix_columns
+      18     72665216 : static uint8_t gf_mul(uint8_t a, uint8_t b) {
+      19     72665216 :     uint8_t p = 0;
+      20    653986944 :     for (int i = 0; i < 8; i++) {
+      21    581321728 :         if (b & 1) p ^= a;
+      22    581321728 :         uint8_t hi_bit_set = a & 0x80;
+      23    581321728 :         a <<= 1;
+      24    581321728 :         if (hi_bit_set) a ^= 0x1B; // irreducible polynomial
+      25    581321728 :         b >>= 1;
+      26    581321728 :     }
+      27     72665216 :     return p;
+      28              : }
+      29              : 
+      30      2445352 : void sub_bytes(uint8_t state[AES256_BLOCK_SIZE], const uint8_t sbox[256]) {
+      31     41570984 :     for (int i = 0; i < AES256_BLOCK_SIZE; i++) {
+      32     39125632 :         state[i] = sbox[state[i]];
+      33     39125632 :     }
+      34      2445352 : }
+      35              : 
+      36      2445352 : void shift_rows(uint8_t state[AES256_BLOCK_SIZE]) {
+      37              :     // Row 1: rotate left by 1
+      38      2445352 :     uint8_t tmp = state[1];
+      39      2445352 :     state[1] = state[5];
+      40      2445352 :     state[5] = state[9];
+      41      2445352 :     state[9] = state[13];
+      42      2445352 :     state[13] = tmp;
+      43              : 
+      44              :     // Row 2: rotate left by 2
+      45      2445352 :     tmp = state[2];
+      46      2445352 :     uint8_t tmp2 = state[6];
+      47      2445352 :     state[2] = state[10];
+      48      2445352 :     state[6] = state[14];
+      49      2445352 :     state[10] = tmp;
+      50      2445352 :     state[14] = tmp2;
+      51              : 
+      52              :     // Row 3: rotate left by 3
+      53      2445352 :     tmp = state[3];
+      54      2445352 :     state[3] = state[15];
+      55      2445352 :     state[15] = state[11];
+      56      2445352 :     state[11] = state[7];
+      57      2445352 :     state[7] = tmp;
+      58      2445352 : }
+      59              : 
+      60      2270684 : void mix_columns(uint8_t state[AES256_BLOCK_SIZE]) {
+      61     11353420 :     for (int c = 0; c < 4; c++) {
+      62      9082736 :         uint8_t *col = &state[c * 4];
+      63      9082736 :         uint8_t a0 = col[0], a1 = col[1], a2 = col[2], a3 = col[3];
+      64              : 
+      65      9082736 :         col[0] = gf_mul(a0, 2) ^ gf_mul(a1, 3) ^ a2 ^ a3;
+      66      9082736 :         col[1] = a0 ^ gf_mul(a1, 2) ^ gf_mul(a2, 3) ^ a3;
+      67      9082736 :         col[2] = a0 ^ a1 ^ gf_mul(a2, 2) ^ gf_mul(a3, 3);
+      68      9082736 :         col[3] = gf_mul(a0, 3) ^ a1 ^ a2 ^ gf_mul(a3, 2);
+      69      9082736 :     }
+      70      2270684 : }
+      71              : 
+      72      2620080 : void add_round_key(uint8_t state[AES256_BLOCK_SIZE], const uint8_t round_key[AES256_BLOCK_SIZE]) {
+      73     44541360 :     for (int i = 0; i < AES256_BLOCK_SIZE; i++) {
+      74     41921280 :         state[i] ^= round_key[i];
+      75     41921280 :     }
+      76      2620080 : }
+      77              : 
+      78       174668 : void aes256_encrypt_block(const uint8_t input[AES256_BLOCK_SIZE], uint8_t output[AES256_BLOCK_SIZE],
+      79              :                           const uint8_t round_keys[AES256_EXPANDED_KEY_SIZE], const uint8_t sbox[256]) {
+      80              :     uint8_t state[AES256_BLOCK_SIZE];
+      81       174668 :     memcpy(state, input, AES256_BLOCK_SIZE);
+      82              : 
+      83       174668 :     add_round_key(state, round_keys);
+      84              : 
+      85      2445352 :     for (int round = 1; round < AES256_NUM_ROUNDS; round++) {
+      86      2270684 :         sub_bytes(state, sbox);
+      87      2270684 :         shift_rows(state);
+      88      2270684 :         mix_columns(state);
+      89      2270684 :         add_round_key(state, round_keys + round * AES256_BLOCK_SIZE);
+      90      2270684 :     }
+      91              : 
+      92              :     // Final round (no mix_columns)
+      93       174668 :     sub_bytes(state, sbox);
+      94       174668 :     shift_rows(state);
+      95       174668 :     add_round_key(state, round_keys + AES256_NUM_ROUNDS * AES256_BLOCK_SIZE);
+      96              : 
+      97       174668 :     memcpy(output, state, AES256_BLOCK_SIZE);
+      98       174668 : }
+      99              : 
+     100              : // ---------- Inverse functions ------------
+     101              : 
+     102           56 : void inv_sub_bytes(uint8_t state[AES256_BLOCK_SIZE], const uint8_t inv_sbox[256]) {
+     103          952 :     for (int i = 0; i < AES256_BLOCK_SIZE; i++) {
+     104          896 :         state[i] = inv_sbox[state[i]];
+     105          896 :     }
+     106           56 : }
+     107              : 
+     108           56 : void inv_shift_rows(uint8_t state[AES256_BLOCK_SIZE]) {
+     109              :     // Row 1: rotate right by 1
+     110           56 :     uint8_t tmp = state[13];
+     111           56 :     state[13] = state[9];
+     112           56 :     state[9] = state[5];
+     113           56 :     state[5] = state[1];
+     114           56 :     state[1] = tmp;
+     115              : 
+     116              :     // Row 2: rotate right by 2
+     117           56 :     tmp = state[2];
+     118           56 :     uint8_t tmp2 = state[6];
+     119           56 :     state[2] = state[10];
+     120           56 :     state[6] = state[14];
+     121           56 :     state[10] = tmp;
+     122           56 :     state[14] = tmp2;
+     123              : 
+     124              :     // Row 3: rotate right by 3
+     125           56 :     tmp = state[3];
+     126           56 :     state[3] = state[7];
+     127           56 :     state[7] = state[11];
+     128           56 :     state[11] = state[15];
+     129           56 :     state[15] = tmp;
+     130           56 : }
+     131              : 
+     132           52 : void inv_mix_columns(uint8_t state[AES256_BLOCK_SIZE]) {
+     133          260 :     for (int c = 0; c < 4; c++) {
+     134          208 :         uint8_t *col = &state[c * 4];
+     135          208 :         uint8_t a0 = col[0], a1 = col[1], a2 = col[2], a3 = col[3];
+     136              : 
+     137          208 :         col[0] = gf_mul(a0, 0x0e) ^ gf_mul(a1, 0x0b) ^ gf_mul(a2, 0x0d) ^ gf_mul(a3, 0x09);
+     138          208 :         col[1] = gf_mul(a0, 0x09) ^ gf_mul(a1, 0x0e) ^ gf_mul(a2, 0x0b) ^ gf_mul(a3, 0x0d);
+     139          208 :         col[2] = gf_mul(a0, 0x0d) ^ gf_mul(a1, 0x09) ^ gf_mul(a2, 0x0e) ^ gf_mul(a3, 0x0b);
+     140          208 :         col[3] = gf_mul(a0, 0x0b) ^ gf_mul(a1, 0x0d) ^ gf_mul(a2, 0x09) ^ gf_mul(a3, 0x0e);
+     141          208 :     }
+     142           52 : }
+     143              : 
+     144            4 : void aes256_decrypt_block(const uint8_t input[AES256_BLOCK_SIZE], uint8_t output[AES256_BLOCK_SIZE],
+     145              :                           const uint8_t round_keys[AES256_EXPANDED_KEY_SIZE], const uint8_t sbox[256]) {
+     146              :     uint8_t state[AES256_BLOCK_SIZE];
+     147              :     uint8_t inv_sbox[256];
+     148            4 :     initialize_inverse_sbox(sbox, inv_sbox);
+     149              : 
+     150            4 :     memcpy(state, input, AES256_BLOCK_SIZE);
+     151              : 
+     152            4 :     add_round_key(state, round_keys + AES256_NUM_ROUNDS * AES256_BLOCK_SIZE);
+     153              : 
+     154           56 :     for (int round = AES256_NUM_ROUNDS - 1; round >= 1; round--) {
+     155           52 :         inv_shift_rows(state);
+     156           52 :         inv_sub_bytes(state, inv_sbox);
+     157           52 :         add_round_key(state, round_keys + round * AES256_BLOCK_SIZE);
+     158           52 :         inv_mix_columns(state);
+     159           52 :     }
+     160              : 
+     161            4 :     inv_shift_rows(state);
+     162            4 :     inv_sub_bytes(state, inv_sbox);
+     163            4 :     add_round_key(state, round_keys);
+     164              : 
+     165            4 :     memcpy(output, state, AES256_BLOCK_SIZE);
+     166            4 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/aes_wrapper.c.func-c.html b/coverage-report/src/aes_wrapper.c.func-c.html new file mode 100644 index 0000000..6deead2 --- /dev/null +++ b/coverage-report/src/aes_wrapper.c.func-c.html @@ -0,0 +1,92 @@ + + + + + + + LCOV - coverage.info - src/aes_wrapper.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - aes_wrapper.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:80.0 %2016
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
aes_block_wrapper_dec44
aes_block_wrapper524640
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/aes_wrapper.c.func.html b/coverage-report/src/aes_wrapper.c.func.html new file mode 100644 index 0000000..9d20bff --- /dev/null +++ b/coverage-report/src/aes_wrapper.c.func.html @@ -0,0 +1,92 @@ + + + + + + + LCOV - coverage.info - src/aes_wrapper.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - aes_wrapper.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:80.0 %2016
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
aes_block_wrapper524640
aes_block_wrapper_dec44
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/aes_wrapper.c.gcov.html b/coverage-report/src/aes_wrapper.c.gcov.html new file mode 100644 index 0000000..32ca489 --- /dev/null +++ b/coverage-report/src/aes_wrapper.c.gcov.html @@ -0,0 +1,116 @@ + + + + + + + LCOV - coverage.info - src/aes_wrapper.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - aes_wrapper.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:80.0 %2016
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include <stdint.h>
+       2              : #include <stddef.h>
+       3              : 
+       4              : #include "../include/aes_128.h"
+       5              : #include "../include/aes_192.h"
+       6              : #include "../include/aes_256.h"
+       7              : #include "../include/sbox.h"
+       8              : 
+       9              : /* Context struct to pass round_keys, sbox, and key_len to aes_block_wrapper */
+      10              : struct aes_ctx {
+      11              :     const uint8_t *round_keys;
+      12              :     const uint8_t *sbox;
+      13              :     size_t key_len;  // 16, 24, or 32 bytes
+      14              : };
+      15              : 
+      16              : /* Adapter to match encrypt_block_fn in cbc.h / ctr.h */
+      17       524640 : void aes_block_wrapper(const uint8_t in[16], uint8_t out[16], const void *ctx) {
+      18       524640 :     const struct aes_ctx *aes = (const struct aes_ctx *)ctx;
+      19              :     
+      20       524640 :     if (aes->key_len == 16) {
+      21       174830 :         aes128_encrypt_block(in, out, aes->round_keys, aes->sbox);
+      22       524640 :     } else if (aes->key_len == 24) {
+      23       175138 :         aes192_encrypt_block(in, out, aes->round_keys, aes->sbox);
+      24       349810 :     } else if (aes->key_len == 32) {
+      25       174664 :         aes256_encrypt_block(in, out, aes->round_keys, aes->sbox);
+      26       174664 :     }
+      27       524640 : }
+      28              : 
+      29              : /* Adapter for decryption */
+      30           44 : void aes_block_wrapper_dec(const uint8_t in[16], uint8_t out[16], const void *ctx) {
+      31           44 :     const struct aes_ctx *aes = (const struct aes_ctx *)ctx;
+      32              :     
+      33           44 :     if (aes->key_len == 16) {
+      34           44 :         aes128_decrypt_block(in, out, aes->round_keys, aes->sbox);
+      35           44 :     } else if (aes->key_len == 24) {
+      36            0 :         aes192_decrypt_block(in, out, aes->round_keys, aes->sbox);
+      37            0 :     } else if (aes->key_len == 32) {
+      38            0 :         aes256_decrypt_block(in, out, aes->round_keys, aes->sbox);
+      39            0 :     }
+      40           44 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/cbc.c.func-c.html b/coverage-report/src/cbc.c.func-c.html new file mode 100644 index 0000000..428bc67 --- /dev/null +++ b/coverage-report/src/cbc.c.func-c.html @@ -0,0 +1,116 @@ + + + + + + + LCOV - coverage.info - src/cbc.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - cbc.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:94.8 %5855
Test Date:2025-10-19 19:06:58Functions:100.0 %55
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
aes_cbc_decrypt2
aes_cbc_encrypt2
pkcs7_pad2
pkcs7_unpad2
xor_block12
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/cbc.c.func.html b/coverage-report/src/cbc.c.func.html new file mode 100644 index 0000000..9190f32 --- /dev/null +++ b/coverage-report/src/cbc.c.func.html @@ -0,0 +1,116 @@ + + + + + + + LCOV - coverage.info - src/cbc.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - cbc.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:94.8 %5855
Test Date:2025-10-19 19:06:58Functions:100.0 %55
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
aes_cbc_decrypt2
aes_cbc_encrypt2
pkcs7_pad2
pkcs7_unpad2
xor_block12
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/cbc.c.gcov.html b/coverage-report/src/cbc.c.gcov.html new file mode 100644 index 0000000..690c3ff --- /dev/null +++ b/coverage-report/src/cbc.c.gcov.html @@ -0,0 +1,180 @@ + + + + + + + LCOV - coverage.info - src/cbc.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - cbc.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:94.8 %5855
Test Date:2025-10-19 19:06:58Functions:100.0 %55
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include "cbc.h"
+       2              : #include <string.h>
+       3              : #include <stdlib.h>
+       4              : 
+       5              : /* PKCS#7 padding helper: returns number of padding bytes appended (1..16) */
+       6            2 : static size_t pkcs7_pad(const uint8_t *in, size_t in_len, uint8_t *out) {
+       7            2 :     size_t pad_len = AES_BLOCK - (in_len % AES_BLOCK);
+       8            2 :     if (pad_len == 0) pad_len = AES_BLOCK;
+       9              :     /* copy input */
+      10            2 :     memcpy(out, in, in_len);
+      11              :     /* append pad bytes */
+      12           22 :     for (size_t i = 0; i < pad_len; ++i) out[in_len + i] = (uint8_t)pad_len;
+      13            2 :     return pad_len;
+      14              : }
+      15              : 
+      16              : /* remove PKCS#7 pad; returns 0 on success and sets *out_len to unpadded length.
+      17              :  * Returns non-zero on invalid padding.
+      18              :  */
+      19            2 : static int pkcs7_unpad(uint8_t *buf, size_t buf_len, size_t *out_len) {
+      20            2 :     if (buf_len == 0 || (buf_len % AES_BLOCK) != 0) return -1;
+      21            2 :     uint8_t pad = buf[buf_len - 1];
+      22            2 :     if (pad == 0 || pad > AES_BLOCK) return -2;
+      23              :     /* check that last pad bytes equal pad */
+      24           22 :     for (size_t i = 0; i < pad; ++i) {
+      25           20 :         if (buf[buf_len - 1 - i] != pad) return -3;
+      26           20 :     }
+      27            2 :     *out_len = buf_len - pad;
+      28            2 :     return 0;
+      29            2 : }
+      30              : 
+      31              : /* XOR helper */
+      32           12 : static inline void xor_block(uint8_t out[AES_BLOCK], const uint8_t a[AES_BLOCK], const uint8_t b[AES_BLOCK]) {
+      33          204 :     for (int i = 0; i < AES_BLOCK; ++i) out[i] = a[i] ^ b[i];
+      34           12 : }
+      35              : 
+      36            2 : int aes_cbc_encrypt(const uint8_t *in, size_t in_len,
+      37              :                     uint8_t *out, size_t *out_len,
+      38              :                     const uint8_t iv[AES_BLOCK],
+      39              :                     encrypt_block_fn encrypt, const void *ctx)
+      40              : {
+      41            2 :     if (!in || !out || !out_len || !iv || !encrypt) return -1;
+      42              : 
+      43              :     /* padded buffer size = ceil(in_len/16)*16 + 16 (if in_len %16 ==0, add a full block) */
+      44            2 :     size_t padded_len = ((in_len + AES_BLOCK - 1) / AES_BLOCK) * AES_BLOCK;
+      45            2 :     if (padded_len == in_len) padded_len += AES_BLOCK;
+      46              : 
+      47            2 :     uint8_t *buf = (uint8_t*)malloc(padded_len);
+      48            2 :     if (!buf) return -2;
+      49              : 
+      50              :     /* create padded plaintext in buf */
+      51            2 :     size_t pad_len = pkcs7_pad(in, in_len, buf);
+      52            2 :     (void)pad_len; /* padded_len equals in_len + pad_len */
+      53              : 
+      54              :     uint8_t prev[AES_BLOCK];
+      55            2 :     memcpy(prev, iv, AES_BLOCK);
+      56              : 
+      57            8 :     for (size_t off = 0; off < padded_len; off += AES_BLOCK) {
+      58              :         uint8_t block[AES_BLOCK];
+      59            6 :         xor_block(block, buf + off, prev);
+      60            6 :         encrypt(block, out + off, ctx);
+      61              :         /* new prev = ciphertext block */
+      62            6 :         memcpy(prev, out + off, AES_BLOCK);
+      63            6 :     }
+      64              : 
+      65            2 :     *out_len = padded_len;
+      66              :     /* wipe sensitive buffer */
+      67            2 :     memset(buf, 0, padded_len);
+      68            2 :     free(buf);
+      69            2 :     memset(prev, 0, AES_BLOCK);
+      70            2 :     return 0;
+      71            2 : }
+      72              : 
+      73            2 : int aes_cbc_decrypt(const uint8_t *in, size_t in_len,
+      74              :                     uint8_t *out, size_t *out_len,
+      75              :                     const uint8_t iv[AES_BLOCK],
+      76              :                     decrypt_block_fn decrypt, const void *ctx)
+      77              : {
+      78            2 :     if (!in || !out || !out_len || !iv || !decrypt) return -1;
+      79            2 :     if ((in_len % AES_BLOCK) != 0) return -2;
+      80              : 
+      81              :     uint8_t prev[AES_BLOCK];
+      82            2 :     memcpy(prev, iv, AES_BLOCK);
+      83              : 
+      84            8 :     for (size_t off = 0; off < in_len; off += AES_BLOCK) {
+      85              :         uint8_t tmp[AES_BLOCK];
+      86            6 :         decrypt(in + off, tmp, ctx); /* tmp = AES_DEC(Ci) */
+      87            6 :         xor_block(out + off, tmp, prev); /* plaintext block = tmp XOR prev */
+      88            6 :         memcpy(prev, in + off, AES_BLOCK);
+      89            6 :     }
+      90              : 
+      91              :     /* unpad in-place on out */
+      92            2 :     size_t unpadded_len = 0;
+      93            2 :     int r = pkcs7_unpad(out, in_len, &unpadded_len);
+      94            2 :     if (r != 0) {
+      95              :         /* wipe and return error */
+      96            0 :         memset(out, 0, in_len);
+      97            0 :         memset(prev, 0, AES_BLOCK);
+      98            0 :         return -3;
+      99              :     }
+     100              : 
+     101            2 :     *out_len = unpadded_len;
+     102            2 :     memset(prev, 0, AES_BLOCK);
+     103            2 :     return 0;
+     104            2 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/ccm.c.func-c.html b/coverage-report/src/ccm.c.func-c.html new file mode 100644 index 0000000..da7d42b --- /dev/null +++ b/coverage-report/src/ccm.c.func-c.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - coverage.info - src/ccm.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - ccm.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:95.6 %135129
Test Date:2025-10-19 19:06:58Functions:100.0 %66
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
ccm_decrypt6
ccm_encrypt6
build_b012
format_aad12
build_ctr018
xor_block60
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/ccm.c.func.html b/coverage-report/src/ccm.c.func.html new file mode 100644 index 0000000..f9c11a2 --- /dev/null +++ b/coverage-report/src/ccm.c.func.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - coverage.info - src/ccm.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - ccm.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:95.6 %135129
Test Date:2025-10-19 19:06:58Functions:100.0 %66
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
build_b012
build_ctr018
ccm_decrypt6
ccm_encrypt6
format_aad12
xor_block60
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/ccm.c.gcov.html b/coverage-report/src/ccm.c.gcov.html new file mode 100644 index 0000000..82a11d0 --- /dev/null +++ b/coverage-report/src/ccm.c.gcov.html @@ -0,0 +1,323 @@ + + + + + + + LCOV - coverage.info - src/ccm.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - ccm.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:95.6 %135129
Test Date:2025-10-19 19:06:58Functions:100.0 %66
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include "ccm.h"
+       2              : #include "ctr.h"
+       3              : #include <string.h>
+       4              : #include <stdlib.h>
+       5              : #include <stdio.h>
+       6              : 
+       7              : #define AES_BLK AES_BLOCK_SIZE
+       8              : 
+       9              : /* XOR helper */
+      10           60 : static inline void xor_block(uint8_t out[AES_BLK],
+      11              :                              const uint8_t a[AES_BLK],
+      12              :                              const uint8_t b[AES_BLK]) {
+      13         1020 :     for (int i = 0; i < AES_BLK; i++) out[i] = a[i] ^ b[i];
+      14           60 : }
+      15              : 
+      16              : /* Build B0 block (CCM §6.1) */
+      17           12 : static void build_b0(uint8_t b0[AES_BLK], size_t t, size_t n, size_t payload_len, 
+      18              :                      const uint8_t *nonce, int has_aad) {
+      19           12 :     size_t q = 15 - n;
+      20           12 :     uint8_t flags = 0;
+      21           12 :     if (has_aad) flags |= 0x40;
+      22           12 :     flags |= (uint8_t)(((t - 2) / 2) << 3);
+      23           12 :     flags |= (uint8_t)((q - 1) & 0x07);
+      24           12 :     b0[0] = flags;
+      25              : 
+      26           12 :     memcpy(b0 + 1, nonce, n);
+      27              : 
+      28              :     /* write payload length in q-byte big-endian */
+      29           84 :     for (size_t i = 0; i < q; i++) {
+      30           72 :         b0[15 - i] = (uint8_t)(payload_len >> (8 * i));
+      31           72 :     }
+      32           12 : }
+      33              : 
+      34              : /* Build initial counter block for CTR */
+      35           18 : static void build_ctr0(uint8_t ctr[AES_BLK], size_t n, const uint8_t *nonce) {
+      36           18 :     size_t q = 15 - n;
+      37           18 :     ctr[0] = (uint8_t)(q - 1);
+      38           18 :     memcpy(ctr + 1, nonce, n);
+      39           18 :     memset(ctr + 1 + n, 0, q);
+      40           18 : }
+      41              : 
+      42              : /* Format AAD - simplified for small 'a' to a two-octet length field L(a) */
+      43           12 : static size_t format_aad(uint8_t **out, size_t aad_len, const uint8_t *aad) {
+      44           12 :     if (aad_len == 0) return 0;
+      45              :     
+      46              :     /* In this implementation, we assume a < 2^16 - 2^8, so L(a) is 2 octets (NIST A.2.2).
+      47              :      * This covers the provided test vectors. */
+      48           12 :     size_t len_field_size = 2;
+      49              :     
+      50           12 :     size_t total = len_field_size + aad_len;
+      51           12 :     size_t padded = ((total + AES_BLK - 1) / AES_BLK) * AES_BLK;
+      52           12 :     uint8_t *buf = (uint8_t*)calloc(padded, 1);
+      53           12 :     if (!buf) return 0;
+      54              :     
+      55              :     /* Write L(a) in 2-byte big-endian */
+      56           12 :     buf[0] = (uint8_t)(aad_len >> 8);
+      57           12 :     buf[1] = (uint8_t)(aad_len & 0xff);
+      58              :     
+      59           12 :     memcpy(buf + len_field_size, aad, aad_len);
+      60           12 :     *out = buf;
+      61           12 :     return padded;
+      62           12 : }
+      63              : 
+      64            6 : int ccm_encrypt(const void *key_ctx,
+      65              :                 block_encrypt_fn encrypt,
+      66              :                 const uint8_t *nonce, size_t n,
+      67              :                 const uint8_t *aad, size_t aad_len,
+      68              :                 const uint8_t *plaintext, size_t payload_len,
+      69              :                 uint8_t *ciphertext, size_t *ciphertext_len,
+      70              :                 size_t t)
+      71              : {
+      72            6 :     if (!encrypt || !nonce || !ciphertext || !ciphertext_len) return -1;
+      73            6 :     if (n < 7 || n > 13) return -2;
+      74            6 :     if (!(t == 4 || t == 6 || t == 8 || t == 10 || t == 12 || t == 14 || t == 16)) return -3;
+      75            6 :     if (payload_len > 0 && !plaintext) return -1;
+      76              : 
+      77              : #ifdef CCM_DEBUG
+      78              :     CCM_LOG("Encrypting payload_len=%zu, aad_len=%zu, t=%zu", payload_len, aad_len, t);
+      79              : #endif
+      80              : 
+      81              :     /* Step 1: Build B0 */
+      82              :     uint8_t b0[AES_BLK];
+      83            6 :     build_b0(b0, t, n, payload_len, nonce, aad_len > 0);
+      84              : 
+      85              :     /* Step 2: Format AAD */
+      86            6 :     uint8_t *aad_formatted = NULL;
+      87            6 :     size_t aad_formatted_len = format_aad(&aad_formatted, aad_len, aad);
+      88            6 :     if (aad_len > 0 && aad_formatted_len == 0) return -1;
+      89              : 
+      90              :     /* Step 3: Build CBC-MAC input */
+      91            6 :     size_t mac_len = AES_BLK + aad_formatted_len;
+      92            6 :     if (payload_len > 0) {
+      93            6 :         size_t padded_payload_len = ((payload_len + AES_BLK - 1) / AES_BLK) * AES_BLK;
+      94            6 :         mac_len += padded_payload_len;
+      95            6 :     }
+      96            6 :     uint8_t *mac_input = (uint8_t*)calloc(mac_len, 1);
+      97            6 :     if (!mac_input) {
+      98            0 :         free(aad_formatted);
+      99            0 :         return -1;
+     100              :     }
+     101              :     
+     102            6 :     size_t offset = 0;
+     103            6 :     memcpy(mac_input + offset, b0, AES_BLK);
+     104            6 :     offset += AES_BLK;
+     105            6 :     if (aad_formatted_len > 0) {
+     106            6 :         memcpy(mac_input + offset, aad_formatted, aad_formatted_len);
+     107            6 :         offset += aad_formatted_len;
+     108            6 :     }
+     109            6 :     if (payload_len > 0) {
+     110            6 :         memcpy(mac_input + offset, plaintext, payload_len);
+     111            6 :     }
+     112              : 
+     113              :     /* Step 4: CBC-MAC */
+     114            6 :     uint8_t X[AES_BLK] = {0};
+     115           30 :     for (size_t i = 0; i < mac_len; i += AES_BLK) {
+     116              :         uint8_t blk[AES_BLK];
+     117           24 :         xor_block(blk, X, mac_input + i);
+     118           24 :         encrypt(blk, X, key_ctx);  /* X = CIPH_K(blk) */
+     119           24 :     }
+     120              : 
+     121              :     /* Step 5: CTR encrypt */
+     122              :     uint8_t ctr[AES_BLK];
+     123            6 :     build_ctr0(ctr, n, nonce);
+     124              :     uint8_t s0[AES_BLK];
+     125            6 :     encrypt(ctr, s0, key_ctx);  /* S0 = CIPH_K(Ctr0) */
+     126              : 
+     127              :     /* Encrypt plaintext using CTR mode (uses Ctr1, Ctr2, ...) */
+     128            6 :     if (payload_len > 0) {
+     129            6 :         ctr_increment(ctr); /* ctr now holds Ctr1 */
+     130            6 :         aes_ctr_crypt(plaintext, ciphertext, payload_len, ctr, encrypt, key_ctx);
+     131            6 :     }
+     132              : 
+     133              :     /* Compute and append encrypted tag */
+     134              :     uint8_t tag_buf[AES_BLK];
+     135            6 :     xor_block(tag_buf, X, s0); /* T = T XOR S0 */
+     136            6 :     memcpy(ciphertext + payload_len, tag_buf, t);
+     137            6 :     *ciphertext_len = payload_len + t;
+     138              : 
+     139            6 :     free(aad_formatted);
+     140            6 :     free(mac_input);
+     141              : 
+     142              : #ifdef CCM_DEBUG
+     143              :     CCM_LOG("Encryption complete, ciphertext_len=%zu", *ciphertext_len);
+     144              : #endif
+     145            6 :     return 0;
+     146            6 : }
+     147              : 
+     148            6 : int ccm_decrypt(const void *key_ctx,
+     149              :                 block_encrypt_fn encrypt,
+     150              :                 const uint8_t *nonce, size_t n,
+     151              :                 const uint8_t *aad, size_t aad_len,
+     152              :                 const uint8_t *ciphertext, size_t ciphertext_len,
+     153              :                 uint8_t *plaintext, size_t *plaintext_len,
+     154              :                 size_t t)
+     155              : {
+     156            6 :     if (!encrypt || !nonce || !ciphertext || !plaintext || !plaintext_len) return -1;
+     157            6 :     if (ciphertext_len < t) return -1;
+     158            6 :     if (n < 7 || n > 13) return -2;
+     159            6 :     if (!(t == 4 || t == 6 || t == 8 || t == 10 || t == 12 || t == 14 || t == 16)) return -3;
+     160              :     
+     161            6 :     size_t payload_len = ciphertext_len - t;
+     162              : 
+     163              : #ifdef CCM_DEBUG
+     164              :     CCM_LOG("Decrypting ciphertext_len=%zu, aad_len=%zu, t=%zu", ciphertext_len, aad_len, t);
+     165              : #endif
+     166              : 
+     167              :     /* Step 1: Decrypt payload using CTR mode */
+     168              :     uint8_t ctr[AES_BLK];
+     169            6 :     build_ctr0(ctr, n, nonce);
+     170              :     
+     171            6 :     if (payload_len > 0) {
+     172            6 :         ctr_increment(ctr); /* ctr now holds Ctr1 */
+     173            6 :         aes_ctr_crypt(ciphertext, plaintext, payload_len, ctr, encrypt, key_ctx);
+     174            6 :     }
+     175              : 
+     176              :     /* Step 2: Recompute CBC-MAC on decrypted plaintext */
+     177              :     uint8_t b0[AES_BLK];
+     178            6 :     build_b0(b0, t, n, payload_len, nonce, aad_len > 0);
+     179              :     
+     180            6 :     uint8_t *aad_formatted = NULL;
+     181            6 :     size_t aad_formatted_len = format_aad(&aad_formatted, aad_len, aad);
+     182            6 :     if (aad_len > 0 && aad_formatted_len == 0) return -1;
+     183              : 
+     184            6 :     size_t mac_len = AES_BLK + aad_formatted_len;
+     185            6 :     if (payload_len > 0) {
+     186            6 :         size_t padded_payload_len = ((payload_len + AES_BLK - 1) / AES_BLK) * AES_BLK;
+     187            6 :         mac_len += padded_payload_len;
+     188            6 :     }
+     189              :     
+     190            6 :     uint8_t *mac_input = (uint8_t*)calloc(mac_len, 1);
+     191            6 :     if (!mac_input) {
+     192            0 :         free(aad_formatted);
+     193            0 :         return -1;
+     194              :     }
+     195              :     
+     196            6 :     size_t offset = 0;
+     197            6 :     memcpy(mac_input + offset, b0, AES_BLK);
+     198            6 :     offset += AES_BLK;
+     199            6 :     if (aad_formatted_len > 0) {
+     200            6 :         memcpy(mac_input + offset, aad_formatted, aad_formatted_len);
+     201            6 :         offset += aad_formatted_len;
+     202            6 :     }
+     203            6 :     if (payload_len > 0) {
+     204            6 :         memcpy(mac_input + offset, plaintext, payload_len);
+     205            6 :     }
+     206              : 
+     207            6 :     uint8_t X[AES_BLK] = {0};
+     208           30 :     for (size_t i = 0; i < mac_len; i += AES_BLK) {
+     209              :         uint8_t blk[AES_BLK];
+     210           24 :         xor_block(blk, X, mac_input + i);
+     211           24 :         encrypt(blk, X, key_ctx);  /* X = CIPH_K(blk) */
+     212           24 :     }
+     213              : 
+     214              :     /* Step 3: Verify tag */
+     215            6 :     build_ctr0(ctr, n, nonce);
+     216              :     uint8_t s0[AES_BLK];
+     217            6 :     encrypt(ctr, s0, key_ctx);  /* S0 = CIPH_K(Ctr0) */
+     218              : 
+     219              :     uint8_t expected_tag[AES_BLK];
+     220            6 :     xor_block(expected_tag, X, s0);
+     221              : 
+     222            6 :     const uint8_t *received_tag = ciphertext + payload_len;
+     223            6 :     int diff = 0;
+     224              :     /* Constant-time comparison */
+     225           42 :     for (size_t i = 0; i < t; i++) {
+     226           36 :         diff |= (expected_tag[i] ^ received_tag[i]);
+     227           36 :     }
+     228              : 
+     229            6 :     free(aad_formatted);
+     230            6 :     free(mac_input);
+     231              : 
+     232            6 :     if (diff != 0) {
+     233              :         /* Zero out plaintext to prevent partial disclosure */
+     234            0 :         memset(plaintext, 0, payload_len);
+     235              : #ifdef CCM_DEBUG
+     236              :         CCM_LOG("Authentication failed");
+     237              : #endif
+     238            0 :         return -2;
+     239              :     }
+     240              : 
+     241            6 :     *plaintext_len = payload_len;
+     242              :     
+     243              : #ifdef CCM_DEBUG
+     244              :     CCM_LOG("Decryption successful, plaintext_len=%zu", *plaintext_len);
+     245              : #endif
+     246            6 :     return 0;
+     247            6 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/cfb.c.func-c.html b/coverage-report/src/cfb.c.func-c.html new file mode 100644 index 0000000..ead501d --- /dev/null +++ b/coverage-report/src/cfb.c.func-c.html @@ -0,0 +1,92 @@ + + + + + + + LCOV - coverage.info - src/cfb.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - cfb.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2222
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
aes_cfb_decrypt2
aes_cfb_encrypt2
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/cfb.c.func.html b/coverage-report/src/cfb.c.func.html new file mode 100644 index 0000000..a77a582 --- /dev/null +++ b/coverage-report/src/cfb.c.func.html @@ -0,0 +1,92 @@ + + + + + + + LCOV - coverage.info - src/cfb.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - cfb.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2222
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
aes_cfb_decrypt2
aes_cfb_encrypt2
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/cfb.c.gcov.html b/coverage-report/src/cfb.c.gcov.html new file mode 100644 index 0000000..15c63c0 --- /dev/null +++ b/coverage-report/src/cfb.c.gcov.html @@ -0,0 +1,128 @@ + + + + + + + LCOV - coverage.info - src/cfb.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - cfb.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2222
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include <stdint.h>
+       2              : #include <string.h>
+       3              : #include "../include/cfb.h"
+       4              : #include "../include/aes_wrapper.h"   // for aes_block_wrapper
+       5              : #include "../include/key_expansion_128.h"
+       6              : #include "../include/sbox.h"
+       7              : 
+       8            2 : void aes_cfb_encrypt(
+       9              :     const uint8_t *plaintext,
+      10              :     uint8_t *ciphertext,
+      11              :     size_t length,
+      12              :     const uint8_t *iv,
+      13              :     const void *ctx
+      14              : ) {
+      15              :     uint8_t buffer[16];
+      16              :     uint8_t feedback[16];
+      17              : 
+      18            2 :     memcpy(feedback, iv, 16);
+      19            2 :     aes_block_wrapper(feedback, buffer, &ctx); // encrypt IV
+      20              : 
+      21           44 :     for (size_t i = 0; i < length; i++) {
+      22           42 :         ciphertext[i] = plaintext[i] ^ buffer[i % 16];
+      23           42 :         feedback[i % 16] = ciphertext[i];
+      24              : 
+      25           42 :         if ((i % 16) == 15 && i + 1 < length) {
+      26            2 :             aes_block_wrapper(feedback, buffer, &ctx);
+      27            2 :         }
+      28           42 :     }
+      29            2 : }
+      30              : 
+      31            2 : void aes_cfb_decrypt(
+      32              :     const uint8_t *ciphertext,
+      33              :     uint8_t *plaintext,
+      34              :     size_t length,
+      35              :     const uint8_t *iv,
+      36              :     const void *ctx
+      37              : ) {
+      38              :     uint8_t buffer[16];
+      39              :     uint8_t feedback[16];
+      40              : 
+      41            2 :     memcpy(feedback, iv, 16);
+      42            2 :     aes_block_wrapper(feedback, buffer, &ctx); // encrypt IV
+      43              : 
+      44           44 :     for (size_t i = 0; i < length; i++) {
+      45           42 :         plaintext[i] = ciphertext[i] ^ buffer[i % 16];
+      46           42 :         feedback[i % 16] = ciphertext[i];
+      47              : 
+      48           42 :         if ((i % 16) == 15 && i + 1 < length) {
+      49            2 :             aes_block_wrapper(feedback, buffer, &ctx);
+      50            2 :         }
+      51           42 :     }
+      52            2 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/cmac.c.func-c.html b/coverage-report/src/cmac.c.func-c.html new file mode 100644 index 0000000..b5dfe1e --- /dev/null +++ b/coverage-report/src/cmac.c.func-c.html @@ -0,0 +1,116 @@ + + + + + + + LCOV - coverage.info - src/cmac.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - cmac.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:96.2 %5351
Test Date:2025-10-19 19:06:58Functions:100.0 %55
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
pad_block4
aes_cmac8
generate_subkeys8
shift_left16
xor_block34
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/cmac.c.func.html b/coverage-report/src/cmac.c.func.html new file mode 100644 index 0000000..95019a4 --- /dev/null +++ b/coverage-report/src/cmac.c.func.html @@ -0,0 +1,116 @@ + + + + + + + LCOV - coverage.info - src/cmac.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - cmac.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:96.2 %5351
Test Date:2025-10-19 19:06:58Functions:100.0 %55
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
aes_cmac8
generate_subkeys8
pad_block4
shift_left16
xor_block34
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/cmac.c.gcov.html b/coverage-report/src/cmac.c.gcov.html new file mode 100644 index 0000000..1c7c33a --- /dev/null +++ b/coverage-report/src/cmac.c.gcov.html @@ -0,0 +1,175 @@ + + + + + + + LCOV - coverage.info - src/cmac.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - cmac.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:96.2 %5351
Test Date:2025-10-19 19:06:58Functions:100.0 %55
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include "cmac.h"
+       2              : #include <string.h>
+       3              : #include <stdint.h>
+       4              : #include <stdio.h>
+       5              : 
+       6              : /* XOR two 16-byte blocks */
+       7           34 : static void xor_block(uint8_t out[16], const uint8_t a[16], const uint8_t b[16]) {
+       8          578 :     for (int i = 0; i < 16; i++) out[i] = a[i] ^ b[i];
+       9           34 : }
+      10              : 
+      11              : /* Left shift a 16-byte block by 1 bit */
+      12           16 : static void shift_left(uint8_t out[16], const uint8_t in[16]) {
+      13           16 :     uint8_t carry = 0;
+      14          272 :     for (int i = 15; i >= 0; i--) {
+      15          256 :         uint8_t new_carry = (in[i] & 0x80) ? 1 : 0;
+      16          256 :         out[i] = (in[i] << 1) | carry;
+      17          256 :         carry = new_carry;
+      18          256 :     }
+      19           16 : }
+      20              : 
+      21              : /* Generate subkeys K1 and K2 according to NIST SP 800-38B */
+      22            8 : static void generate_subkeys(uint8_t K1[16], uint8_t K2[16], const void *ctx) {
+      23            8 :     uint8_t L[16] = {0};
+      24            8 :     uint8_t zero[16] = {0};
+      25              :     // Encrypt the zero block to get L
+      26            8 :     aes_block_wrapper(zero, L, ctx);
+      27              : 
+      28            8 :     const uint8_t Rb[16] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+      29              :                             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x87};
+      30              : 
+      31              :     // K1 = L << 1. If MSB(L)=1, K1 XOR Rb
+      32            8 :     shift_left(K1, L);
+      33            8 :     if (L[0] & 0x80) {
+      34            0 :         xor_block(K1, K1, Rb);
+      35            0 :     }
+      36              : 
+      37              :     // K2 = K1 << 1. If MSB(K1)=1, K2 XOR Rb
+      38            8 :     shift_left(K2, K1);
+      39            8 :     if (K1[0] & 0x80) {
+      40            8 :         xor_block(K2, K2, Rb);
+      41            8 :     }
+      42            8 : }
+      43              : 
+      44              : /* Pad a block (0x80 followed by zeros) for partial/empty blocks */
+      45            4 : static void pad_block(uint8_t out[16], const uint8_t *in, size_t len) {
+      46            4 :     memset(out, 0, 16);
+      47            4 :     if (len > 0 && in != NULL) memcpy(out, in, len);
+      48            4 :     if (len < 16) out[len] = 0x80;
+      49            4 : }
+      50              : 
+      51            8 : void aes_cmac(const uint8_t *message, size_t length, uint8_t tag[16], const void *ctx) {
+      52              :     uint8_t K1[16], K2[16];
+      53            8 :     generate_subkeys(K1, K2, ctx);
+      54              : 
+      55              :     // If length == 0, n_blocks = 1. If length = 36, n_blocks = 3.
+      56            8 :     size_t n_blocks = (length == 0) ? 1 : (length + 15) / 16;
+      57            8 :     uint8_t C[16] = {0}; // Current chaining block, C0 is all zeros
+      58              : 
+      59              :     // Calculate the length of the message that is NOT the final block.
+      60              :     // This is 0 if n_blocks=1.
+      61            8 :     size_t processed_len = (n_blocks - 1) * 16;
+      62              :     
+      63              :     // Case 1: Complete final block (L > 0 and L is a multiple of 16) -> use K1
+      64            8 :     int last_is_complete = (length > 0) && (length % 16 == 0);
+      65              : 
+      66              :     // Process all full blocks except the last one
+      67           18 :     for (size_t i = 0; i < processed_len; i += 16) {
+      68              :         uint8_t Y[16];
+      69           10 :         xor_block(Y, C, message + i);
+      70           10 :         aes_block_wrapper(Y, C, ctx);
+      71           10 :     }
+      72              :     
+      73              :     // Prepare the last block M_last (M_n XOR K1 or M_n* XOR K2)
+      74              :     uint8_t M_last[16];
+      75              :     
+      76            8 :     if (last_is_complete) {
+      77              :         // Full block (e.g., L=32): M_last = M_n XOR K1. 
+      78              :         // The last block starts at message + length - 16.
+      79            4 :         memcpy(M_last, message + length - 16, 16);
+      80            4 :         xor_block(M_last, M_last, K1);
+      81            4 :     } else {
+      82              :         // Partial block (e.g., L=36) or L=0: M_last = M_n* XOR K2.
+      83            4 :         size_t last_len = length % 16; // 4 for L=36, 0 for L=0
+      84              :         
+      85            4 :         if (length == 0) {
+      86              :             // Empty message
+      87            2 :             pad_block(M_last, NULL, 0); 
+      88            2 :         } else {
+      89              :             // Partial message: M_last starts at message + processed_len.
+      90            2 :             pad_block(M_last, message + processed_len, last_len);
+      91              :         }
+      92            4 :         xor_block(M_last, M_last, K2);
+      93              :     }
+      94              : 
+      95              :     // Process last block: T = E(C XOR M_last)
+      96              :     uint8_t Y_last[16];
+      97            8 :     xor_block(Y_last, C, M_last);
+      98            8 :     aes_block_wrapper(Y_last, tag, ctx);
+      99            8 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/ctr.c.func-c.html b/coverage-report/src/ctr.c.func-c.html new file mode 100644 index 0000000..2080533 --- /dev/null +++ b/coverage-report/src/ctr.c.func-c.html @@ -0,0 +1,92 @@ + + + + + + + LCOV - coverage.info - src/ctr.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - ctr.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2222
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
aes_ctr_crypt165200
ctr_increment392060
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/ctr.c.func.html b/coverage-report/src/ctr.c.func.html new file mode 100644 index 0000000..be1d890 --- /dev/null +++ b/coverage-report/src/ctr.c.func.html @@ -0,0 +1,92 @@ + + + + + + + LCOV - coverage.info - src/ctr.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - ctr.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2222
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
aes_ctr_crypt165200
ctr_increment392060
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/ctr.c.gcov.html b/coverage-report/src/ctr.c.gcov.html new file mode 100644 index 0000000..8b6a09e --- /dev/null +++ b/coverage-report/src/ctr.c.gcov.html @@ -0,0 +1,126 @@ + + + + + + + LCOV - coverage.info - src/ctr.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - ctr.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2222
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include "ctr.h"
+       2              : #include <string.h>
+       3              : #include <stdint.h>
+       4              : 
+       5              : /* Increment counter block: treat last 4 bytes as big-endian 32-bit counter and add 1.
+       6              :  * This is a common CTR layout: nonce || counter (32-bit). If you need a different
+       7              :  * scheme (e.g., 64-bit counter), modify this function accordingly.
+       8              :  */
+       9       392060 : void ctr_increment(uint8_t counter[CTR_BLOCK_SIZE]) {
+      10              :     /* increment last 4 bytes as big-endian integer */
+      11       393010 :     for (int i = CTR_BLOCK_SIZE - 1; i >= CTR_BLOCK_SIZE - 4; --i) {
+      12       393010 :         if (++counter[i] != 0) {
+      13       392060 :             break;
+      14              :         }
+      15          950 :     }
+      16       392060 : }
+      17              : 
+      18       165200 : void aes_ctr_crypt(const uint8_t *in, uint8_t *out, size_t len,
+      19              :                    const uint8_t counter[CTR_BLOCK_SIZE],
+      20              :                    block_encrypt_fn encrypt, const void *rk)
+      21              : {
+      22              :     uint8_t ctr[CTR_BLOCK_SIZE];
+      23              :     uint8_t keystream[CTR_BLOCK_SIZE];
+      24       165200 :     size_t processed = 0;
+      25              : 
+      26              :     /* copy initial counter so caller's buffer is not modified */
+      27       165200 :     memcpy(ctr, counter, CTR_BLOCK_SIZE);
+      28              : 
+      29       392064 :     while (processed < len) {
+      30              :         /* generate keystream block = AES_encrypt(counter) */
+      31       226864 :         encrypt(ctr, keystream, rk);
+      32              : 
+      33       226864 :         size_t chunk = CTR_BLOCK_SIZE;
+      34       226864 :         if (len - processed < CTR_BLOCK_SIZE)
+      35        56668 :             chunk = len - processed;
+      36              : 
+      37              :         /* XOR chunk bytes */
+      38      3401664 :         for (size_t i = 0; i < chunk; ++i) {
+      39      3174800 :             out[processed + i] = in[processed + i] ^ keystream[i];
+      40      3174800 :         }
+      41              : 
+      42              :         /* advance */
+      43       226864 :         processed += chunk;
+      44       226864 :         ctr_increment(ctr);
+      45              :     }
+      46              : 
+      47              :     /* clear sensitive intermediate buffers */
+      48       165200 :     memset(keystream, 0, sizeof keystream);
+      49       165200 :     memset(ctr, 0, sizeof ctr);
+      50       165200 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/ecb.c.func-c.html b/coverage-report/src/ecb.c.func-c.html new file mode 100644 index 0000000..6d5f76b --- /dev/null +++ b/coverage-report/src/ecb.c.func-c.html @@ -0,0 +1,92 @@ + + + + + + + LCOV - coverage.info - src/ecb.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - ecb.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1212
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
aes_ecb_decrypt2
aes_ecb_encrypt2
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/ecb.c.func.html b/coverage-report/src/ecb.c.func.html new file mode 100644 index 0000000..6bf06f2 --- /dev/null +++ b/coverage-report/src/ecb.c.func.html @@ -0,0 +1,92 @@ + + + + + + + LCOV - coverage.info - src/ecb.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - ecb.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1212
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
aes_ecb_decrypt2
aes_ecb_encrypt2
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/ecb.c.gcov.html b/coverage-report/src/ecb.c.gcov.html new file mode 100644 index 0000000..05e948e --- /dev/null +++ b/coverage-report/src/ecb.c.gcov.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - src/ecb.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - ecb.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1212
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include <string.h>
+       2              : #include "ecb.h"
+       3              : 
+       4            2 : void aes_ecb_encrypt(const uint8_t *plaintext, uint8_t *ciphertext,
+       5              :                      size_t length, const void *ctx)
+       6              : {
+       7            2 :     size_t blocks = length / 16;
+       8            4 :     for (size_t i = 0; i < blocks; ++i) {
+       9            2 :         aes_block_wrapper(plaintext + i*16, ciphertext + i*16, ctx);
+      10            2 :     }
+      11            2 : }
+      12              : 
+      13            2 : void aes_ecb_decrypt(const uint8_t *ciphertext, uint8_t *plaintext,
+      14              :                      size_t length, const void *ctx)
+      15              : {
+      16            2 :     size_t blocks = length / 16;
+      17            4 :     for (size_t i = 0; i < blocks; ++i) {
+      18            2 :         aes_block_wrapper_dec(ciphertext + i*16, plaintext + i*16, ctx);
+      19            2 :     }
+      20            2 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/gcm.c.func-c.html b/coverage-report/src/gcm.c.func-c.html new file mode 100644 index 0000000..666dcd1 --- /dev/null +++ b/coverage-report/src/gcm.c.func-c.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - coverage.info - src/gcm.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - gcm.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:99.0 %9897
Test Date:2025-10-19 19:06:58Functions:100.0 %66
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
gcm_decrypt80398
gcm_encrypt108602
gcm_init108602
ghash261382
ghash_mult1305382
xor_block1305382
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/gcm.c.func.html b/coverage-report/src/gcm.c.func.html new file mode 100644 index 0000000..1c4c8fa --- /dev/null +++ b/coverage-report/src/gcm.c.func.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - coverage.info - src/gcm.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - gcm.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:99.0 %9897
Test Date:2025-10-19 19:06:58Functions:100.0 %66
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
gcm_decrypt80398
gcm_encrypt108602
gcm_init108602
ghash261382
ghash_mult1305382
xor_block1305382
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/gcm.c.gcov.html b/coverage-report/src/gcm.c.gcov.html new file mode 100644 index 0000000..defc46a --- /dev/null +++ b/coverage-report/src/gcm.c.gcov.html @@ -0,0 +1,242 @@ + + + + + + + LCOV - coverage.info - src/gcm.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - gcm.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:99.0 %9897
Test Date:2025-10-19 19:06:58Functions:100.0 %66
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include "gcm.h"
+       2              : #include "ctr.h"
+       3              : #include "sbox.h"
+       4              : #include "key_expansion_128.h"
+       5              : #include "key_expansion_192.h"
+       6              : #include "key_expansion_256.h"
+       7              : #include "aes_wrapper.h"
+       8              : #include <string.h>
+       9              : #include <stdio.h>
+      10              : 
+      11              : /* XOR two 16-byte blocks */
+      12      1305382 : static void xor_block(uint8_t out[16], const uint8_t a[16], const uint8_t b[16]) {
+      13     22191494 :     for (int i = 0; i < 16; i++) out[i] = a[i] ^ b[i];
+      14      1305382 : }
+      15              : 
+      16              : /* GHASH multiplication in GF(2^128) */
+      17      1305382 : static void ghash_mult(uint8_t out[16], const uint8_t X[16], const uint8_t H[16]) {
+      18      1305382 :     uint8_t Z[16] = {0};
+      19      1305382 :     uint8_t V[16]; memcpy(V,H,16);
+      20              : 
+      21     22191494 :     for(int i=0;i<16;i++){
+      22    187975008 :         for(int j=7;j>=0;j--){
+      23   1456153344 :             if((X[i]>>j)&1) for(int k=0;k<16;k++) Z[k]^=V[k];
+      24    167088896 :             int carry=0;
+      25   2840511232 :             for(int k=0;k<16;k++){
+      26   2673422336 :                 int tmp=V[k];
+      27   2673422336 :                 V[k]=(tmp>>1)|carry;
+      28   2673422336 :                 carry=(tmp&1)?0x80:0;
+      29   2673422336 :             }
+      30    167088896 :             if(carry) V[0]^=0xe1;
+      31    167088896 :         }
+      32     20886112 :     }
+      33      1305382 :     memcpy(out,Z,16);
+      34      1305382 : }
+      35              : 
+      36              : /* GHASH over arbitrary data */
+      37       261382 : void ghash(uint8_t out[16], const uint8_t *aad, size_t aad_len,
+      38              :                   const uint8_t *c, size_t c_len, const uint8_t H[16]) {
+      39       261382 :     uint8_t Y[16] = {0};
+      40              :     size_t i;
+      41              : 
+      42              :     /* Process AAD */
+      43       639382 :     for (i=0;i+16<=aad_len;i+=16){
+      44       378000 :         xor_block(Y,Y,aad+i);
+      45       378000 :         ghash_mult(Y,Y,H);
+      46       378000 :     }
+      47       261382 :     if (i<aad_len){
+      48        75600 :         uint8_t tmp[16]={0};
+      49        75600 :         memcpy(tmp,aad+i,aad_len-i);
+      50        75600 :         xor_block(Y,Y,tmp);
+      51        75600 :         ghash_mult(Y,Y,H);
+      52        75600 :     }
+      53              : 
+      54              :     /* Process ciphertext */
+      55       749472 :     for (i=0;i+16<=c_len;i+=16){
+      56       488090 :         xor_block(Y,Y,c+i);
+      57       488090 :         ghash_mult(Y,Y,H);
+      58       488090 :     }
+      59       261382 :     if (i<c_len){
+      60       102310 :         uint8_t tmp[16]={0};
+      61       102310 :         memcpy(tmp,c+i,c_len-i);
+      62       102310 :         xor_block(Y,Y,tmp);
+      63       102310 :         ghash_mult(Y,Y,H);
+      64       102310 :     }
+      65              : 
+      66              :     /* Length block */
+      67       261382 :     uint8_t len_block[16]={0};
+      68       261382 :     uint64_t aad_bits=aad_len*8;
+      69       261382 :     uint64_t c_bits=c_len*8;
+      70      2352438 :     for(int j=0;j<8;j++){
+      71      2091056 :         len_block[7-j]=(aad_bits>>(8*j))&0xFF;
+      72      2091056 :         len_block[15-j]=(c_bits>>(8*j))&0xFF;
+      73      2091056 :     }
+      74       261382 :     xor_block(Y,Y,len_block);
+      75       261382 :     ghash_mult(Y,Y,H);
+      76              : 
+      77       261382 :     memcpy(out,Y,16);
+      78       261382 : }
+      79              : 
+      80              : /* Initialize GCM context - returns 0 on success, -1 on error */
+      81       108602 : int gcm_init(struct gcm_ctx *ctx, const uint8_t *key, size_t key_len,
+      82              :               const uint8_t *iv, size_t iv_len){
+      83              : 
+      84       108602 :     initialize_aes_sbox(ctx->sbox);
+      85              : 
+      86       108602 :     if(key_len == 16) {
+      87        36228 :         aes_key_expansion_128(key, ctx->round_keys, ctx->sbox);
+      88       108602 :     } else if(key_len == 24) {
+      89        36142 :         aes_key_expansion_192(key, ctx->round_keys, ctx->sbox);
+      90        72374 :     } else if(key_len == 32) {
+      91        36232 :         aes_key_expansion_256(key, ctx->round_keys, ctx->sbox);
+      92        36232 :     } else {
+      93            0 :         return -1;  // Unsupported key length
+      94              :     }
+      95              : 
+      96       108602 :     ctx->aes.round_keys = ctx->round_keys;
+      97       108602 :     ctx->aes.sbox = ctx->sbox;
+      98       108602 :     ctx->aes.key_len = key_len;
+      99              : 
+     100              :     /* H = AES(K,0^128) */
+     101       108602 :     uint8_t zero[16] = {0};
+     102       108602 :     aes_block_wrapper(zero, ctx->H, &ctx->aes);
+     103              : 
+     104              :     /* IV -> J0 */
+     105       108602 :     if(iv_len == 12){
+     106        36220 :         memcpy(ctx->J0, iv, 12);
+     107        36220 :         memset(ctx->J0 + 12, 0, 4);  // Zero out all 4 bytes
+     108        36220 :         ctx->J0[15] = 0x01;           // Then set the last byte to 1
+     109        36220 :     } else {
+     110              :         /* GHASH IV */
+     111        72382 :         ghash(ctx->J0, NULL, 0, iv, iv_len, ctx->H);
+     112              :     }
+     113              :     
+     114       108602 :     return 0;  // Success
+     115       108602 : }
+     116              : 
+     117              : /* Encrypt with AES-GCM */
+     118       108602 : void gcm_encrypt(struct gcm_ctx *ctx, const uint8_t *plaintext, size_t len,
+     119              :                  const uint8_t *aad, size_t aad_len,
+     120              :                  uint8_t *ciphertext, uint8_t *tag, size_t tag_len){
+     121              : 
+     122       108602 :     if(tag_len>16) tag_len=16;
+     123              : 
+     124       108602 :     uint8_t counter[16]; memcpy(counter,ctx->J0,16);
+     125       108602 :     ctr_increment(counter);
+     126              : 
+     127       108602 :     aes_ctr_crypt(plaintext,ciphertext,len,counter,aes_block_wrapper,&ctx->aes);
+     128              : 
+     129              :     uint8_t ghash_out[16];
+     130       108602 :     ghash(ghash_out,aad,aad_len,ciphertext,len,ctx->H);
+     131              : 
+     132              :     uint8_t S[16]; 
+     133       108602 :     aes_block_wrapper(ctx->J0,S,&ctx->aes);
+     134              : 
+     135      1380706 :     for(size_t i=0;i<tag_len;i++) tag[i]=ghash_out[i]^S[i];
+     136       108602 : }
+     137              : 
+     138              : /* Decrypt with AES-GCM */
+     139        80398 : int gcm_decrypt(struct gcm_ctx *ctx, const uint8_t *ciphertext, size_t len,
+     140              :                 const uint8_t *aad, size_t aad_len,
+     141              :                 const uint8_t *tag, size_t tag_len,
+     142              :                 uint8_t *plaintext){
+     143              : 
+     144        80398 :     if(tag_len>16) tag_len=16;
+     145              : 
+     146              :     uint8_t ghash_out[16];
+     147        80398 :     ghash(ghash_out,aad,aad_len,ciphertext,len,ctx->H);
+     148              : 
+     149              :     uint8_t S[16]; 
+     150        80398 :     aes_block_wrapper(ctx->J0,S,&ctx->aes);
+     151              : 
+     152              :     uint8_t computed_tag[16];
+     153      1022294 :     for(size_t i=0;i<tag_len;i++) computed_tag[i]=ghash_out[i]^S[i];
+     154              : 
+     155        80398 :     if(memcmp(tag,computed_tag,tag_len)!=0) {
+     156        23816 :         memset(plaintext, 0, len);
+     157        23816 :         return -1;
+     158              :     }
+     159              : 
+     160        56582 :     uint8_t counter[16]; memcpy(counter,ctx->J0,16);
+     161        56582 :     ctr_increment(counter);
+     162              : 
+     163        56582 :     aes_ctr_crypt(ciphertext,plaintext,len,counter,aes_block_wrapper,&ctx->aes);
+     164              : 
+     165        56582 :     return 0;
+     166        80398 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/gmac.c.func-c.html b/coverage-report/src/gmac.c.func-c.html new file mode 100644 index 0000000..0f60bee --- /dev/null +++ b/coverage-report/src/gmac.c.func-c.html @@ -0,0 +1,92 @@ + + + + + + + LCOV - coverage.info - src/gmac.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - gmac.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %55
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
gmac_compute37918
gmac_init37918
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/gmac.c.func.html b/coverage-report/src/gmac.c.func.html new file mode 100644 index 0000000..99f868b --- /dev/null +++ b/coverage-report/src/gmac.c.func.html @@ -0,0 +1,92 @@ + + + + + + + LCOV - coverage.info - src/gmac.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - gmac.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %55
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
gmac_compute37918
gmac_init37918
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/gmac.c.gcov.html b/coverage-report/src/gmac.c.gcov.html new file mode 100644 index 0000000..2646161 --- /dev/null +++ b/coverage-report/src/gmac.c.gcov.html @@ -0,0 +1,94 @@ + + + + + + + LCOV - coverage.info - src/gmac.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - gmac.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %55
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include "gmac.h"
+       2              : #include <string.h>
+       3              : 
+       4              : /* Initialize GMAC context */
+       5        37918 : int gmac_init(struct gmac_ctx *ctx,
+       6              :               const uint8_t *key, size_t key_len,
+       7              :               const uint8_t *iv, size_t iv_len) {
+       8        37918 :     return gcm_init(&ctx->gcm, key, key_len, iv, iv_len);
+       9              : }
+      10              : 
+      11              : /* Compute GMAC tag (wraps GCM with empty plaintext) */
+      12        37918 : void gmac_compute(struct gmac_ctx *ctx,
+      13              :                   const uint8_t *aad, size_t aad_len,
+      14              :                   uint8_t *tag, size_t tag_len) {
+      15              :     // GMAC is just GCM with empty plaintext (len=0)
+      16              :     // We can pass NULL for both plaintext and ciphertext since len=0
+      17        37918 :     gcm_encrypt(&ctx->gcm, NULL, 0, aad, aad_len, NULL, tag, tag_len);
+      18        37918 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/index-sort-f.html b/coverage-report/src/index-sort-f.html new file mode 100644 index 0000000..5702bb6 --- /dev/null +++ b/coverage-report/src/index-sort-f.html @@ -0,0 +1,309 @@ + + + + + + + LCOV - coverage.info - src + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - srcCoverageTotalHit
Test:coverage.infoLines:98.3 %960944
Test Date:2025-10-19 19:06:58Functions:100.0 %7878
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

File Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
key_expansion_128.c +
100.0%
+
100.0 %2626100.0 %11
key_expansion_192.c +
100.0%
+
100.0 %2727100.0 %11
aes_wrapper.c +
80.0%80.0%
+
80.0 %2016100.0 %22
cfb.c +
100.0%
+
100.0 %2222100.0 %22
ctr.c +
100.0%
+
100.0 %2222100.0 %22
ecb.c +
100.0%
+
100.0 %1212100.0 %22
gmac.c +
100.0%
+
100.0 %55100.0 %22
ofb.c +
100.0%
+
100.0 %1717100.0 %22
sbox.c +
100.0%
+
100.0 %1818100.0 %22
key_expansion_256.c +
100.0%
+
100.0 %3838100.0 %33
cbc.c +
94.8%94.8%
+
94.8 %5855100.0 %55
cmac.c +
96.2%96.2%
+
96.2 %5351100.0 %55
xts.c +
100.0%
+
100.0 %4747100.0 %55
ccm.c +
95.6%95.6%
+
95.6 %135129100.0 %66
gcm.c +
99.0%99.0%
+
99.0 %9897100.0 %66
aes_256.c +
100.0%
+
100.0 %110110100.0 %1010
aes_128.c +
100.0%
+
100.0 %126126100.0 %1111
aes_192.c +
100.0%
+
100.0 %126126100.0 %1111
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/index-sort-l.html b/coverage-report/src/index-sort-l.html new file mode 100644 index 0000000..d08eae6 --- /dev/null +++ b/coverage-report/src/index-sort-l.html @@ -0,0 +1,309 @@ + + + + + + + LCOV - coverage.info - src + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - srcCoverageTotalHit
Test:coverage.infoLines:98.3 %960944
Test Date:2025-10-19 19:06:58Functions:100.0 %7878
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

File Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
aes_wrapper.c +
80.0%80.0%
+
80.0 %2016100.0 %22
cbc.c +
94.8%94.8%
+
94.8 %5855100.0 %55
ccm.c +
95.6%95.6%
+
95.6 %135129100.0 %66
cmac.c +
96.2%96.2%
+
96.2 %5351100.0 %55
gcm.c +
99.0%99.0%
+
99.0 %9897100.0 %66
gmac.c +
100.0%
+
100.0 %55100.0 %22
ecb.c +
100.0%
+
100.0 %1212100.0 %22
ofb.c +
100.0%
+
100.0 %1717100.0 %22
sbox.c +
100.0%
+
100.0 %1818100.0 %22
cfb.c +
100.0%
+
100.0 %2222100.0 %22
ctr.c +
100.0%
+
100.0 %2222100.0 %22
key_expansion_128.c +
100.0%
+
100.0 %2626100.0 %11
key_expansion_192.c +
100.0%
+
100.0 %2727100.0 %11
key_expansion_256.c +
100.0%
+
100.0 %3838100.0 %33
xts.c +
100.0%
+
100.0 %4747100.0 %55
aes_256.c +
100.0%
+
100.0 %110110100.0 %1010
aes_128.c +
100.0%
+
100.0 %126126100.0 %1111
aes_192.c +
100.0%
+
100.0 %126126100.0 %1111
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/index.html b/coverage-report/src/index.html new file mode 100644 index 0000000..4b715cf --- /dev/null +++ b/coverage-report/src/index.html @@ -0,0 +1,309 @@ + + + + + + + LCOV - coverage.info - src + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - srcCoverageTotalHit
Test:coverage.infoLines:98.3 %960944
Test Date:2025-10-19 19:06:58Functions:100.0 %7878
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

File Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
aes_128.c +
100.0%
+
100.0 %126126100.0 %1111
aes_192.c +
100.0%
+
100.0 %126126100.0 %1111
aes_256.c +
100.0%
+
100.0 %110110100.0 %1010
aes_wrapper.c +
80.0%80.0%
+
80.0 %2016100.0 %22
cbc.c +
94.8%94.8%
+
94.8 %5855100.0 %55
ccm.c +
95.6%95.6%
+
95.6 %135129100.0 %66
cfb.c +
100.0%
+
100.0 %2222100.0 %22
cmac.c +
96.2%96.2%
+
96.2 %5351100.0 %55
ctr.c +
100.0%
+
100.0 %2222100.0 %22
ecb.c +
100.0%
+
100.0 %1212100.0 %22
gcm.c +
99.0%99.0%
+
99.0 %9897100.0 %66
gmac.c +
100.0%
+
100.0 %55100.0 %22
key_expansion_128.c +
100.0%
+
100.0 %2626100.0 %11
key_expansion_192.c +
100.0%
+
100.0 %2727100.0 %11
key_expansion_256.c +
100.0%
+
100.0 %3838100.0 %33
ofb.c +
100.0%
+
100.0 %1717100.0 %22
sbox.c +
100.0%
+
100.0 %1818100.0 %22
xts.c +
100.0%
+
100.0 %4747100.0 %55
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/key_expansion_128.c.func-c.html b/coverage-report/src/key_expansion_128.c.func-c.html new file mode 100644 index 0000000..62ad49a --- /dev/null +++ b/coverage-report/src/key_expansion_128.c.func-c.html @@ -0,0 +1,84 @@ + + + + + + + LCOV - coverage.info - src/key_expansion_128.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - key_expansion_128.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2626
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
aes_key_expansion_12836284
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/key_expansion_128.c.func.html b/coverage-report/src/key_expansion_128.c.func.html new file mode 100644 index 0000000..f045d73 --- /dev/null +++ b/coverage-report/src/key_expansion_128.c.func.html @@ -0,0 +1,84 @@ + + + + + + + LCOV - coverage.info - src/key_expansion_128.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - key_expansion_128.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2626
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
aes_key_expansion_12836284
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/key_expansion_128.c.gcov.html b/coverage-report/src/key_expansion_128.c.gcov.html new file mode 100644 index 0000000..7e6cd97 --- /dev/null +++ b/coverage-report/src/key_expansion_128.c.gcov.html @@ -0,0 +1,125 @@ + + + + + + + LCOV - coverage.info - src/key_expansion_128.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - key_expansion_128.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2626
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include "key_expansion_128.h"
+       2              : 
+       3              : static uint8_t rcon[11] = {
+       4              :     0x00, // rcon[0] unused
+       5              :     0x01, 0x02, 0x04, 0x08,
+       6              :     0x10, 0x20, 0x40, 0x80,
+       7              :     0x1B, 0x36
+       8              : };
+       9              : 
+      10        36284 : void aes_key_expansion_128(const uint8_t key[16], uint8_t round_keys[176], const uint8_t sbox[256]) {
+      11              :     // First 16 bytes are the original key
+      12       616828 :     for (int i = 0; i < 16; i++) {
+      13       580544 :         round_keys[i] = key[i];
+      14       580544 :     }
+      15              : 
+      16              :     uint8_t temp[4];
+      17        36284 :     int bytes_generated = 16;
+      18        36284 :     int rcon_idx = 1;
+      19              : 
+      20      1487644 :     while (bytes_generated < 176) {
+      21              :         // Last 4 bytes of previous key part
+      22      7256800 :         for (int i = 0; i < 4; i++) {
+      23      5805440 :             temp[i] = round_keys[bytes_generated - 4 + i];
+      24      5805440 :         }
+      25              : 
+      26      1451360 :         if (bytes_generated % 16 == 0) {
+      27              :             // Rotate
+      28       362840 :             uint8_t t = temp[0];
+      29       362840 :             temp[0] = temp[1];
+      30       362840 :             temp[1] = temp[2];
+      31       362840 :             temp[2] = temp[3];
+      32       362840 :             temp[3] = t;
+      33              : 
+      34              :             // Apply S-box
+      35      1814200 :             for (int i = 0; i < 4; i++) {
+      36      1451360 :                 temp[i] = sbox[temp[i]];
+      37      1451360 :             }
+      38              : 
+      39              :             // XOR with rcon
+      40       362840 :             temp[0] ^= rcon[rcon_idx++];
+      41       362840 :         }
+      42              : 
+      43              :         // XOR with 16 bytes earlier
+      44      7256800 :         for (int i = 0; i < 4; i++) {
+      45      5805440 :             round_keys[bytes_generated] = round_keys[bytes_generated - 16] ^ temp[i];
+      46      5805440 :             bytes_generated++;
+      47      5805440 :         }
+      48              :     }
+      49        36284 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/key_expansion_192.c.func-c.html b/coverage-report/src/key_expansion_192.c.func-c.html new file mode 100644 index 0000000..8f23210 --- /dev/null +++ b/coverage-report/src/key_expansion_192.c.func-c.html @@ -0,0 +1,84 @@ + + + + + + + LCOV - coverage.info - src/key_expansion_192.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - key_expansion_192.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2727
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
aes_key_expansion_19236146
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/key_expansion_192.c.func.html b/coverage-report/src/key_expansion_192.c.func.html new file mode 100644 index 0000000..2772a5a --- /dev/null +++ b/coverage-report/src/key_expansion_192.c.func.html @@ -0,0 +1,84 @@ + + + + + + + LCOV - coverage.info - src/key_expansion_192.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - key_expansion_192.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2727
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
aes_key_expansion_19236146
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/key_expansion_192.c.gcov.html b/coverage-report/src/key_expansion_192.c.gcov.html new file mode 100644 index 0000000..fc48373 --- /dev/null +++ b/coverage-report/src/key_expansion_192.c.gcov.html @@ -0,0 +1,130 @@ + + + + + + + LCOV - coverage.info - src/key_expansion_192.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - key_expansion_192.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2727
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include <stdint.h>
+       2              : #include "key_expansion_192.h"
+       3              : #include "sbox.h"
+       4              : 
+       5              : // AES-192 Key Expansion
+       6              : // Input: 24 bytes (192 bits)
+       7              : // Output: 208 bytes (13 round keys * 16 bytes)
+       8        36146 : void aes_key_expansion_192(const uint8_t key[24], uint8_t round_keys[208], const uint8_t sbox[256]) {
+       9        36146 :     const uint8_t rcon[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
+      10              :     
+      11              :     // Copy original key
+      12       903650 :     for (int i = 0; i < 24; i++) {
+      13       867504 :         round_keys[i] = key[i];
+      14       867504 :     }
+      15              : 
+      16              :     // Generate remaining key material
+      17              :     // AES-192 needs 52 words (208 bytes) total
+      18              :     // We have 6 words already, need 46 more
+      19        36146 :     int bytes_generated = 24;
+      20        36146 :     int rcon_iteration = 0;
+      21              : 
+      22      1698862 :     while (bytes_generated < 208) {
+      23              :         uint8_t temp[4];
+      24              :         
+      25              :         // Copy last 4 bytes of previous block
+      26      8313580 :         for (int i = 0; i < 4; i++) {
+      27      6650864 :             temp[i] = round_keys[bytes_generated - 4 + i];
+      28      6650864 :         }
+      29              : 
+      30              :         // Every 6 words (24 bytes), apply core schedule
+      31      1662716 :         if (bytes_generated % 24 == 0) {
+      32              :             // RotWord
+      33       289168 :             uint8_t tmp = temp[0];
+      34       289168 :             temp[0] = temp[1];
+      35       289168 :             temp[1] = temp[2];
+      36       289168 :             temp[2] = temp[3];
+      37       289168 :             temp[3] = tmp;
+      38              : 
+      39              :             // SubWord
+      40      1445840 :             for (int i = 0; i < 4; i++) {
+      41      1156672 :                 temp[i] = sbox[temp[i]];
+      42      1156672 :             }
+      43              : 
+      44              :             // XOR with Rcon
+      45       289168 :             temp[0] ^= rcon[rcon_iteration++];
+      46       289168 :         }
+      47              : 
+      48              :         // XOR with word from 6 positions back (24 bytes)
+      49      8313580 :         for (int i = 0; i < 4; i++) {
+      50      6650864 :             round_keys[bytes_generated] = round_keys[bytes_generated - 24] ^ temp[i];
+      51      6650864 :             bytes_generated++;
+      52      6650864 :         }
+      53              :     }
+      54        36146 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/key_expansion_256.c.func-c.html b/coverage-report/src/key_expansion_256.c.func-c.html new file mode 100644 index 0000000..6351a2a --- /dev/null +++ b/coverage-report/src/key_expansion_256.c.func-c.html @@ -0,0 +1,100 @@ + + + + + + + LCOV - coverage.info - src/key_expansion_256.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - key_expansion_256.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %3838
Test Date:2025-10-19 19:06:58Functions:100.0 %33
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
aes_key_expansion_25636236
rot_word253652
sub_word471068
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/key_expansion_256.c.func.html b/coverage-report/src/key_expansion_256.c.func.html new file mode 100644 index 0000000..ff44dcc --- /dev/null +++ b/coverage-report/src/key_expansion_256.c.func.html @@ -0,0 +1,100 @@ + + + + + + + LCOV - coverage.info - src/key_expansion_256.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - key_expansion_256.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %3838
Test Date:2025-10-19 19:06:58Functions:100.0 %33
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
aes_key_expansion_25636236
rot_word253652
sub_word471068
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/key_expansion_256.c.gcov.html b/coverage-report/src/key_expansion_256.c.gcov.html new file mode 100644 index 0000000..cbc055c --- /dev/null +++ b/coverage-report/src/key_expansion_256.c.gcov.html @@ -0,0 +1,145 @@ + + + + + + + LCOV - coverage.info - src/key_expansion_256.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - key_expansion_256.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %3838
Test Date:2025-10-19 19:06:58Functions:100.0 %33
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include "key_expansion_256.h"
+       2              : #include "aes_defs.h"  // AES256_KEY_SIZE, AES256_EXPANDED_KEY_SIZE
+       3              : #include <stdint.h>
+       4              : 
+       5              : // AES-256 uses 8-word key, 14 rounds → 60 words total
+       6              : // Rcon values
+       7              : static const uint8_t rcon[15] = {
+       8              :     0x00, // rcon[0] unused
+       9              :     0x01, 0x02, 0x04, 0x08,
+      10              :     0x10, 0x20, 0x40, 0x80,
+      11              :     0x1B, 0x36, 0x6C, 0xD8, 0xAB
+      12              : };
+      13              : 
+      14              : // Rotate a 4-byte word left
+      15       253652 : static void rot_word(uint8_t w[4]) {
+      16       253652 :     uint8_t tmp = w[0];
+      17       253652 :     w[0] = w[1];
+      18       253652 :     w[1] = w[2];
+      19       253652 :     w[2] = w[3];
+      20       253652 :     w[3] = tmp;
+      21       253652 : }
+      22              : 
+      23              : // Apply S-box to 4-byte word
+      24       471068 : static void sub_word(uint8_t w[4], const uint8_t sbox[256]) {
+      25      2355340 :     for (int i = 0; i < 4; i++) {
+      26      1884272 :         w[i] = sbox[w[i]];
+      27      1884272 :     }
+      28       471068 : }
+      29              : 
+      30        36236 : void aes_key_expansion_256(const uint8_t key[AES256_KEY_SIZE],
+      31              :                            uint8_t round_keys[AES256_EXPANDED_KEY_SIZE],
+      32              :                            const uint8_t sbox[256])
+      33              : {
+      34        36236 :     int Nk = 8;   // number of 32-bit words in key
+      35        36236 :     int Nr = 14;  // number of rounds
+      36        36236 :     int Nb = 4;   // number of words per block (AES standard)
+      37              : 
+      38              :     // Copy original key (32 bytes) into first 8 words
+      39      1195788 :     for (int i = 0; i < Nk * 4; i++) {
+      40      1159552 :         round_keys[i] = key[i];
+      41      1159552 :     }
+      42              : 
+      43              :     uint8_t temp[4];
+      44        36236 :     int bytes_generated = Nk * 4; // 32
+      45        36236 :     int rcon_idx = 1;
+      46              : 
+      47      1920508 :     while (bytes_generated < Nb * (Nr + 1) * 4) { // 4*(Nr+1)*Nb = 240
+      48              :         // Copy previous word into temp
+      49      9421360 :         for (int i = 0; i < 4; i++) {
+      50      7537088 :             temp[i] = round_keys[bytes_generated - 4 + i];
+      51      7537088 :         }
+      52              : 
+      53      1884272 :         int word_index = bytes_generated / 4;
+      54              : 
+      55      1884272 :         if (word_index % Nk == 0) {
+      56       253652 :             rot_word(temp);
+      57       253652 :             sub_word(temp, sbox);
+      58       253652 :             temp[0] ^= rcon[rcon_idx++];
+      59      1884272 :         } else if (Nk > 6 && word_index % Nk == 4) {
+      60       217416 :             sub_word(temp, sbox);
+      61       217416 :         }
+      62              : 
+      63              :         // XOR with word Nk positions earlier
+      64      9421360 :         for (int i = 0; i < 4; i++) {
+      65      7537088 :             round_keys[bytes_generated] = round_keys[bytes_generated - Nk * 4] ^ temp[i];
+      66      7537088 :             bytes_generated++;
+      67      7537088 :         }
+      68              :     }
+      69        36236 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/ofb.c.func-c.html b/coverage-report/src/ofb.c.func-c.html new file mode 100644 index 0000000..6445d75 --- /dev/null +++ b/coverage-report/src/ofb.c.func-c.html @@ -0,0 +1,92 @@ + + + + + + + LCOV - coverage.info - src/ofb.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - ofb.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1717
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
aes_ofb_decrypt2
aes_ofb_encrypt4
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/ofb.c.func.html b/coverage-report/src/ofb.c.func.html new file mode 100644 index 0000000..17e39f2 --- /dev/null +++ b/coverage-report/src/ofb.c.func.html @@ -0,0 +1,92 @@ + + + + + + + LCOV - coverage.info - src/ofb.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - ofb.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1717
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
aes_ofb_decrypt2
aes_ofb_encrypt4
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/ofb.c.gcov.html b/coverage-report/src/ofb.c.gcov.html new file mode 100644 index 0000000..c3bbf24 --- /dev/null +++ b/coverage-report/src/ofb.c.gcov.html @@ -0,0 +1,120 @@ + + + + + + + LCOV - coverage.info - src/ofb.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - ofb.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1717
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include "ofb.h"
+       2              : #include <string.h>
+       3              : #include "aes_wrapper.h"  // for aes_block_wrapper
+       4              : 
+       5            4 : void aes_ofb_encrypt(
+       6              :     const uint8_t *plaintext,
+       7              :     uint8_t *ciphertext,
+       8              :     size_t length,
+       9              :     const uint8_t iv[16],
+      10              :     const void *ctx
+      11              : ) {
+      12              :     uint8_t feedback[16];
+      13              :     uint8_t keystream[16];
+      14            4 :     size_t processed = 0;
+      15              : 
+      16            4 :     memcpy(feedback, iv, 16);
+      17              : 
+      18           20 :     while (processed < length) {
+      19           16 :         aes_block_wrapper(feedback, keystream, ctx);
+      20              : 
+      21           16 :         size_t chunk = 16;
+      22           16 :         if (length - processed < 16) chunk = length - processed;
+      23              : 
+      24          272 :         for (size_t i = 0; i < chunk; ++i)
+      25          256 :             ciphertext[processed + i] = plaintext[processed + i] ^ keystream[i];
+      26              : 
+      27           16 :         memcpy(feedback, keystream, 16);
+      28           16 :         processed += chunk;
+      29              :     }
+      30              : 
+      31            4 :     memset(feedback, 0, 16);
+      32            4 :     memset(keystream, 0, 16);
+      33            4 : }
+      34              : 
+      35            2 : void aes_ofb_decrypt(
+      36              :     const uint8_t *ciphertext,
+      37              :     uint8_t *plaintext,
+      38              :     size_t length,
+      39              :     const uint8_t iv[16],
+      40              :     const void *ctx
+      41              : ) {
+      42              :     // OFB decryption is identical to encryption
+      43            2 :     aes_ofb_encrypt(ciphertext, plaintext, length, iv, ctx);
+      44            2 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/sbox.c.func-c.html b/coverage-report/src/sbox.c.func-c.html new file mode 100644 index 0000000..8d7f7e9 --- /dev/null +++ b/coverage-report/src/sbox.c.func-c.html @@ -0,0 +1,92 @@ + + + + + + + LCOV - coverage.info - src/sbox.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - sbox.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1818
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
initialize_inverse_sbox54
initialize_aes_sbox108642
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/sbox.c.func.html b/coverage-report/src/sbox.c.func.html new file mode 100644 index 0000000..151c888 --- /dev/null +++ b/coverage-report/src/sbox.c.func.html @@ -0,0 +1,92 @@ + + + + + + + LCOV - coverage.info - src/sbox.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - sbox.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1818
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
initialize_aes_sbox108642
initialize_inverse_sbox54
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/sbox.c.gcov.html b/coverage-report/src/sbox.c.gcov.html new file mode 100644 index 0000000..cd86861 --- /dev/null +++ b/coverage-report/src/sbox.c.gcov.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - src/sbox.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - sbox.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1818
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include "../include/sbox.h"
+       2              : #include <stdint.h>
+       3              : #include <stdio.h>
+       4              : 
+       5              : #define ROTL8(x,shift) ((uint8_t) (((x) << (shift)) | ((x) >> (8 - (shift)))))
+       6              : 
+       7       108642 : void initialize_aes_sbox(uint8_t sbox[256]) {
+       8       108642 :     uint8_t p = 1, q = 1;
+       9              : 
+      10       108642 :     do {
+      11     27703710 :         p = p ^ (p << 1) ^ (p & 0x80 ? 0x1B : 0);
+      12              : 
+      13     27703710 :         q ^= q << 1;
+      14     27703710 :         q ^= q << 2;
+      15     27703710 :         q ^= q << 4;
+      16     27703710 :         q ^= (q & 0x80 ? 0x09 : 0);
+      17              : 
+      18     27703710 :         uint8_t xformed = q ^ ROTL8(q,1) ^ ROTL8(q,2) ^ ROTL8(q,3) ^ ROTL8(q,4);
+      19     27703710 :         sbox[p] = xformed ^ 0x63;
+      20     27703710 :     } while (p != 1);
+      21              : 
+      22       108642 :     sbox[0] = 0x63;
+      23       108642 : }
+      24              : 
+      25           54 : void initialize_inverse_sbox(const uint8_t sbox[256], uint8_t inv_sbox[256]) {
+      26        13878 :     for (int i = 0; i < 256; i++) {
+      27        13824 :         inv_sbox[sbox[i]] = (uint8_t)i;
+      28        13824 :     }
+      29           54 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/xts.c.func-c.html b/coverage-report/src/xts.c.func-c.html new file mode 100644 index 0000000..d7d4589 --- /dev/null +++ b/coverage-report/src/xts.c.func-c.html @@ -0,0 +1,116 @@ + + + + + + + LCOV - coverage.info - src/xts.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - xts.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %4747
Test Date:2025-10-19 19:06:58Functions:100.0 %55
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
xts_decrypt10
encode_data_unit_be6420
xts_encrypt20
multiply_by_x72
xor16144
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/xts.c.func.html b/coverage-report/src/xts.c.func.html new file mode 100644 index 0000000..399184a --- /dev/null +++ b/coverage-report/src/xts.c.func.html @@ -0,0 +1,116 @@ + + + + + + + LCOV - coverage.info - src/xts.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - xts.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %4747
Test Date:2025-10-19 19:06:58Functions:100.0 %55
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
encode_data_unit_be6420
multiply_by_x72
xor16144
xts_decrypt10
xts_encrypt20
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/src/xts.c.gcov.html b/coverage-report/src/xts.c.gcov.html new file mode 100644 index 0000000..1105c62 --- /dev/null +++ b/coverage-report/src/xts.c.gcov.html @@ -0,0 +1,168 @@ + + + + + + + LCOV - coverage.info - src/xts.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - xts.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %4747
Test Date:2025-10-19 19:06:58Functions:100.0 %55
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include "xts.h"
+       2              : #include <string.h>
+       3              : 
+       4              : /* -------------------------------------------------------------------------*/
+       5              : /* local helpers */
+       6              : 
+       7              : /* XOR 16 bytes: out = a ^ b */
+       8          144 : static inline void xor16(const uint8_t a[16], const uint8_t b[16], uint8_t out[16]) {
+       9         2448 :     for (int i = 0; i < 16; ++i) out[i] = a[i] ^ b[i];
+      10          144 : }
+      11              : 
+      12              : /*
+      13              :  * multiply_by_x: multiply 128-bit tweak (MSB in byte 0) by x in GF(2^128)
+      14              :  * Reduction polynomial: x^128 + x^7 + x^2 + x + 1 -> reduction constant 0x87
+      15              :  */
+      16           72 : static void multiply_by_x(uint8_t tweak[16]) {
+      17           72 :     uint8_t carry = 0;
+      18         1224 :     for (int i = 15; i >= 0; --i) {
+      19         1152 :         uint8_t next_carry = (tweak[i] & 0x80) ? 1 : 0;
+      20         1152 :         tweak[i] = (uint8_t)((tweak[i] << 1) | carry);
+      21         1152 :         carry = next_carry;
+      22         1152 :     }
+      23           72 :     if (carry) tweak[15] ^= 0x87;
+      24           72 : }
+      25              : 
+      26              : /*
+      27              :  * encode_data_unit_be64: places 64-bit data_unit into tweak_plain[16] as a
+      28              :  * 128-bit big-endian integer with high 64 bits zero and low 64 bits = data_unit.
+      29              :  */
+      30           20 : static void encode_data_unit_be64(uint8_t tweak_plain[16], uint64_t data_unit) {
+      31           20 :     memset(tweak_plain, 0, 8);
+      32          180 :     for (int i = 0; i < 8; ++i) {
+      33          160 :         tweak_plain[8 + 7 - i] = (uint8_t)(data_unit & 0xFF);
+      34          160 :         data_unit >>= 8;
+      35          160 :     }
+      36           20 : }
+      37              : 
+      38              : /* -------------------------------------------------------------------------*/
+      39              : /* XTS encryption */
+      40              : 
+      41           20 : int xts_encrypt(aes_block_fn aes_enc, const void *key1_ctx,
+      42              :                 aes_block_fn aes_tweak, const void *key2_ctx,
+      43              :                 uint64_t data_unit,
+      44              :                 const uint8_t *plaintext, size_t pt_len, uint8_t *ciphertext)
+      45              : {
+      46           20 :     if (!aes_enc || !aes_tweak || !plaintext || !ciphertext) return XTS_ERR_ARG;
+      47           20 :     if (pt_len < 16 || pt_len % 16 != 0) return XTS_ERR_INVALID;
+      48              : 
+      49           10 :     size_t n_blocks = pt_len / 16;
+      50              : 
+      51              :     uint8_t tweak[16], tweak_plain[16];
+      52           10 :     encode_data_unit_be64(tweak_plain, data_unit);
+      53           10 :     aes_tweak(tweak_plain, tweak, key2_ctx);
+      54              : 
+      55           46 :     for (size_t i = 0; i < n_blocks; ++i) {
+      56              :         uint8_t tmp[16], out[16];
+      57           36 :         xor16(plaintext + i*16, tweak, tmp);
+      58           36 :         aes_enc(tmp, out, key1_ctx);
+      59           36 :         xor16(out, tweak, ciphertext + i*16);
+      60           36 :         multiply_by_x(tweak);
+      61           36 :     }
+      62              : 
+      63           10 :     return XTS_OK;
+      64           20 : }
+      65              : 
+      66              : /* -------------------------------------------------------------------------*/
+      67              : /* XTS decryption */
+      68              : 
+      69           10 : int xts_decrypt(aes_block_fn aes_dec, const void *key1_ctx,
+      70              :                 aes_block_fn aes_tweak, const void *key2_ctx,
+      71              :                 uint64_t data_unit,
+      72              :                 const uint8_t *ciphertext, size_t ct_len, uint8_t *plaintext)
+      73              : {
+      74           10 :     if (!aes_dec || !aes_tweak || !plaintext || !ciphertext) return XTS_ERR_ARG;
+      75           10 :     if (ct_len < 16 || ct_len % 16 != 0) return XTS_ERR_INVALID;
+      76              : 
+      77           10 :     size_t n_blocks = ct_len / 16;
+      78              : 
+      79              :     uint8_t tweak[16], tweak_plain[16];
+      80           10 :     encode_data_unit_be64(tweak_plain, data_unit);
+      81           10 :     aes_tweak(tweak_plain, tweak, key2_ctx);
+      82              : 
+      83           46 :     for (size_t i = 0; i < n_blocks; ++i) {
+      84              :         uint8_t tmp[16], out[16];
+      85           36 :         xor16(ciphertext + i*16, tweak, tmp);
+      86           36 :         aes_dec(tmp, out, key1_ctx);
+      87           36 :         xor16(out, tweak, plaintext + i*16);
+      88           36 :         multiply_by_x(tweak);
+      89           36 :     }
+      90              : 
+      91           10 :     return XTS_OK;
+      92           10 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/index-sort-f.html b/coverage-report/tests/index-sort-f.html new file mode 100644 index 0000000..7609265 --- /dev/null +++ b/coverage-report/tests/index-sort-f.html @@ -0,0 +1,249 @@ + + + + + + + LCOV - coverage.info - tests + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - testsCoverageTotalHit
Test:coverage.infoLines:83.6 %590493
Test Date:2025-10-19 19:06:58Functions:92.6 %2725
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

File Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
test_gcm.c +
81.6%81.6%
+
81.6 %12510283.3 %65
test_gmac.c +
78.4%78.4%
+
78.4 %1169183.3 %65
test_aes_128.c +
93.8%93.8%
+
93.8 %1615100.0 %11
test_aes_192.c +
86.7%86.7%
+
86.7 %4539100.0 %11
test_aes_256.c +
86.7%86.7%
+
86.7 %4539100.0 %11
test_cfb.c +
88.9%88.9%
+
88.9 %1816100.0 %11
test_ctr.c +
90.9%90.9%
+
90.9 %2220100.0 %11
test_ecb.c +
84.6%84.6%
+
84.6 %2622100.0 %11
test_ofb.c +
84.6%84.6%
+
84.6 %2622100.0 %11
test_cbc.c +
80.6%80.6%
+
80.6 %3125100.0 %22
test_ccm.c +
86.7%86.7%
+
86.7 %4539100.0 %22
test_cmac.c +
92.9%92.9%
+
92.9 %2826100.0 %22
test_xts.c +
78.7%78.7%
+
78.7 %4737100.0 %22
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/index-sort-l.html b/coverage-report/tests/index-sort-l.html new file mode 100644 index 0000000..696a829 --- /dev/null +++ b/coverage-report/tests/index-sort-l.html @@ -0,0 +1,249 @@ + + + + + + + LCOV - coverage.info - tests + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - testsCoverageTotalHit
Test:coverage.infoLines:83.6 %590493
Test Date:2025-10-19 19:06:58Functions:92.6 %2725
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

File Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
test_gmac.c +
78.4%78.4%
+
78.4 %1169183.3 %65
test_xts.c +
78.7%78.7%
+
78.7 %4737100.0 %22
test_cbc.c +
80.6%80.6%
+
80.6 %3125100.0 %22
test_gcm.c +
81.6%81.6%
+
81.6 %12510283.3 %65
test_ecb.c +
84.6%84.6%
+
84.6 %2622100.0 %11
test_ofb.c +
84.6%84.6%
+
84.6 %2622100.0 %11
test_aes_192.c +
86.7%86.7%
+
86.7 %4539100.0 %11
test_aes_256.c +
86.7%86.7%
+
86.7 %4539100.0 %11
test_ccm.c +
86.7%86.7%
+
86.7 %4539100.0 %22
test_cfb.c +
88.9%88.9%
+
88.9 %1816100.0 %11
test_ctr.c +
90.9%90.9%
+
90.9 %2220100.0 %11
test_cmac.c +
92.9%92.9%
+
92.9 %2826100.0 %22
test_aes_128.c +
93.8%93.8%
+
93.8 %1615100.0 %11
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/index.html b/coverage-report/tests/index.html new file mode 100644 index 0000000..c3349f3 --- /dev/null +++ b/coverage-report/tests/index.html @@ -0,0 +1,249 @@ + + + + + + + LCOV - coverage.info - tests + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - testsCoverageTotalHit
Test:coverage.infoLines:83.6 %590493
Test Date:2025-10-19 19:06:58Functions:92.6 %2725
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

File Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
test_aes_128.c +
93.8%93.8%
+
93.8 %1615100.0 %11
test_aes_192.c +
86.7%86.7%
+
86.7 %4539100.0 %11
test_aes_256.c +
86.7%86.7%
+
86.7 %4539100.0 %11
test_cbc.c +
80.6%80.6%
+
80.6 %3125100.0 %22
test_ccm.c +
86.7%86.7%
+
86.7 %4539100.0 %22
test_cfb.c +
88.9%88.9%
+
88.9 %1816100.0 %11
test_cmac.c +
92.9%92.9%
+
92.9 %2826100.0 %22
test_ctr.c +
90.9%90.9%
+
90.9 %2220100.0 %11
test_ecb.c +
84.6%84.6%
+
84.6 %2622100.0 %11
test_gcm.c +
81.6%81.6%
+
81.6 %12510283.3 %65
test_gmac.c +
78.4%78.4%
+
78.4 %1169183.3 %65
test_ofb.c +
84.6%84.6%
+
84.6 %2622100.0 %11
test_xts.c +
78.7%78.7%
+
78.7 %4737100.0 %22
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_aes_128.c.func-c.html b/coverage-report/tests/test_aes_128.c.func-c.html new file mode 100644 index 0000000..8df9147 --- /dev/null +++ b/coverage-report/tests/test_aes_128.c.func-c.html @@ -0,0 +1,84 @@ + + + + + + + LCOV - coverage.info - tests/test_aes_128.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_aes_128.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:93.8 %1615
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
main1
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_aes_128.c.func.html b/coverage-report/tests/test_aes_128.c.func.html new file mode 100644 index 0000000..2b4ae15 --- /dev/null +++ b/coverage-report/tests/test_aes_128.c.func.html @@ -0,0 +1,84 @@ + + + + + + + LCOV - coverage.info - tests/test_aes_128.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_aes_128.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:93.8 %1615
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
main1
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_aes_128.c.gcov.html b/coverage-report/tests/test_aes_128.c.gcov.html new file mode 100644 index 0000000..1639e6a --- /dev/null +++ b/coverage-report/tests/test_aes_128.c.gcov.html @@ -0,0 +1,109 @@ + + + + + + + LCOV - coverage.info - tests/test_aes_128.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_aes_128.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:93.8 %1615
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include <stdio.h>
+       2              : #include <stdint.h>
+       3              : #include <string.h>
+       4              : #include "../include/aes_128.h"
+       5              : #include "../include/key_expansion_128.h"
+       6              : #include "../include/sbox.h"
+       7              : 
+       8            1 : int main(void) {
+       9            1 :     uint8_t key[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+      10              :     uint8_t round_keys[176];
+      11              :     uint8_t sbox[256];
+      12            1 :     uint8_t block[16] = "Hello AES Block!";
+      13              :     uint8_t enc[16], dec[16];
+      14              : 
+      15            1 :     initialize_aes_sbox(sbox);
+      16            1 :     aes_key_expansion_128(key, round_keys, sbox);
+      17              : 
+      18            1 :     aes128_encrypt_block(block, enc, round_keys, sbox);
+      19            1 :     aes128_decrypt_block(enc, dec, round_keys, sbox);
+      20              : 
+      21            1 :     if(memcmp(block, dec, 16) == 0) {
+      22            1 :         printf("AES core round-trip OK\n");
+      23            1 :     } else {
+      24            0 :         printf("AES core FAILED\n");
+      25              :     }
+      26              : 
+      27            1 :     printf("Plaintext:  %s\n", block);
+      28            1 :     printf("Ciphertext: ");
+      29           17 :     for(int i=0;i<16;i++) printf("%02x", enc[i]);
+      30            1 :     printf("\n");
+      31              : 
+      32            1 :     return 0;
+      33              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_aes_192.c.func-c.html b/coverage-report/tests/test_aes_192.c.func-c.html new file mode 100644 index 0000000..bc32255 --- /dev/null +++ b/coverage-report/tests/test_aes_192.c.func-c.html @@ -0,0 +1,84 @@ + + + + + + + LCOV - coverage.info - tests/test_aes_192.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_aes_192.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:86.7 %4539
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
main1
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_aes_192.c.func.html b/coverage-report/tests/test_aes_192.c.func.html new file mode 100644 index 0000000..90b4603 --- /dev/null +++ b/coverage-report/tests/test_aes_192.c.func.html @@ -0,0 +1,84 @@ + + + + + + + LCOV - coverage.info - tests/test_aes_192.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_aes_192.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:86.7 %4539
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
main1
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_aes_192.c.gcov.html b/coverage-report/tests/test_aes_192.c.gcov.html new file mode 100644 index 0000000..f0e3492 --- /dev/null +++ b/coverage-report/tests/test_aes_192.c.gcov.html @@ -0,0 +1,158 @@ + + + + + + + LCOV - coverage.info - tests/test_aes_192.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_aes_192.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:86.7 %4539
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include <stdio.h>
+       2              : #include <stdint.h>
+       3              : #include <string.h>
+       4              : #include "../include/aes_192.h"
+       5              : #include "../include/key_expansion_192.h"
+       6              : #include "../include/sbox.h"
+       7              : 
+       8            1 : int main(void) {
+       9              :     // 192-bit key (24 bytes)
+      10            1 :     uint8_t key[24] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23};
+      11              :     uint8_t round_keys[208];  // 13 round keys * 16 bytes
+      12              :     uint8_t sbox[256];
+      13            1 :     uint8_t block[16] = "Hello AES Block!";
+      14              :     uint8_t enc[16], dec[16];
+      15              : 
+      16            1 :     initialize_aes_sbox(sbox);
+      17            1 :     aes_key_expansion_192(key, round_keys, sbox);
+      18              : 
+      19            1 :     printf("=== AES-192 Test ===\n");
+      20            1 :     printf("Key length: 192 bits (24 bytes)\n");
+      21            1 :     printf("Rounds: 12\n\n");
+      22              : 
+      23            1 :     aes192_encrypt_block(block, enc, round_keys, sbox);
+      24            1 :     aes192_decrypt_block(enc, dec, round_keys, sbox);
+      25              : 
+      26            1 :     if(memcmp(block, dec, 16) == 0) {
+      27            1 :         printf("✓ AES-192 core round-trip OK\n");
+      28            1 :     } else {
+      29            0 :         printf("✗ AES-192 core FAILED\n");
+      30            0 :         return 1;
+      31              :     }
+      32              : 
+      33            1 :     printf("\nPlaintext:  %s\n", block);
+      34            1 :     printf("Ciphertext: ");
+      35           17 :     for(int i=0; i<16; i++) printf("%02x", enc[i]);
+      36            1 :     printf("\n");
+      37            1 :     printf("Decrypted:  %s\n", dec);
+      38              : 
+      39              :     // Test with known NIST test vector for AES-192
+      40            1 :     printf("\n=== NIST Test Vector ===\n");
+      41            1 :     uint8_t nist_key[24] = {
+      42              :         0x8e, 0x73, 0xb0, 0xf7, 0xda, 0x0e, 0x64, 0x52,
+      43              :         0xc8, 0x10, 0xf3, 0x2b, 0x80, 0x90, 0x79, 0xe5,
+      44              :         0x62, 0xf8, 0xea, 0xd2, 0x52, 0x2c, 0x6b, 0x7b
+      45              :     };
+      46            1 :     uint8_t nist_pt[16] = {
+      47              :         0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
+      48              :         0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a
+      49              :     };
+      50            1 :     uint8_t nist_expected_ct[16] = {
+      51              :         0xbd, 0x33, 0x4f, 0x1d, 0x6e, 0x45, 0xf2, 0x5f,
+      52              :         0xf7, 0x12, 0xa2, 0x14, 0x57, 0x1f, 0xa5, 0xcc
+      53              :     };
+      54              :     uint8_t nist_ct[16], nist_dec[16];
+      55              : 
+      56            1 :     aes_key_expansion_192(nist_key, round_keys, sbox);
+      57            1 :     aes192_encrypt_block(nist_pt, nist_ct, round_keys, sbox);
+      58            1 :     aes192_decrypt_block(nist_ct, nist_dec, round_keys, sbox);
+      59              : 
+      60            1 :     printf("Expected CT: ");
+      61           17 :     for(int i=0; i<16; i++) printf("%02x", nist_expected_ct[i]);
+      62            1 :     printf("\nComputed CT: ");
+      63           17 :     for(int i=0; i<16; i++) printf("%02x", nist_ct[i]);
+      64            1 :     printf("\n");
+      65              : 
+      66            1 :     if(memcmp(nist_ct, nist_expected_ct, 16) == 0) {
+      67            1 :         printf("✓ NIST test vector PASSED\n");
+      68            1 :     } else {
+      69            0 :         printf("✗ NIST test vector FAILED\n");
+      70            0 :         return 1;
+      71              :     }
+      72              : 
+      73            1 :     if(memcmp(nist_pt, nist_dec, 16) == 0) {
+      74            1 :         printf("✓ NIST decryption PASSED\n");
+      75            1 :     } else {
+      76            0 :         printf("✗ NIST decryption FAILED\n");
+      77            0 :         return 1;
+      78              :     }
+      79              : 
+      80            1 :     printf("\n=== All AES-192 tests passed! ===\n");
+      81            1 :     return 0;
+      82            1 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_aes_256.c.func-c.html b/coverage-report/tests/test_aes_256.c.func-c.html new file mode 100644 index 0000000..8d9fca9 --- /dev/null +++ b/coverage-report/tests/test_aes_256.c.func-c.html @@ -0,0 +1,84 @@ + + + + + + + LCOV - coverage.info - tests/test_aes_256.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_aes_256.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:86.7 %4539
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
main1
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_aes_256.c.func.html b/coverage-report/tests/test_aes_256.c.func.html new file mode 100644 index 0000000..4bfd423 --- /dev/null +++ b/coverage-report/tests/test_aes_256.c.func.html @@ -0,0 +1,84 @@ + + + + + + + LCOV - coverage.info - tests/test_aes_256.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_aes_256.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:86.7 %4539
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
main1
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_aes_256.c.gcov.html b/coverage-report/tests/test_aes_256.c.gcov.html new file mode 100644 index 0000000..5fc7cd4 --- /dev/null +++ b/coverage-report/tests/test_aes_256.c.gcov.html @@ -0,0 +1,162 @@ + + + + + + + LCOV - coverage.info - tests/test_aes_256.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_aes_256.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:86.7 %4539
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include <stdio.h>
+       2              : #include <stdint.h>
+       3              : #include <string.h>
+       4              : #include "../include/aes_256.h"
+       5              : #include "../include/key_expansion_256.h"
+       6              : #include "../include/sbox.h"
+       7              : 
+       8            1 : int main(void) {
+       9              :     // 256-bit key (32 bytes)
+      10            1 :     uint8_t key[32] = {
+      11              :         0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
+      12              :         16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
+      13              :     };
+      14              :     uint8_t round_keys[240];  // 15 round keys * 16 bytes
+      15              :     uint8_t sbox[256];
+      16            1 :     uint8_t block[16] = "Hello AES Block!";
+      17              :     uint8_t enc[16], dec[16];
+      18              : 
+      19            1 :     initialize_aes_sbox(sbox);
+      20            1 :     aes_key_expansion_256(key, round_keys, sbox);
+      21              : 
+      22            1 :     printf("=== AES-256 Test ===\n");
+      23            1 :     printf("Key length: 256 bits (32 bytes)\n");
+      24            1 :     printf("Rounds: 14\n\n");
+      25              : 
+      26            1 :     aes256_encrypt_block(block, enc, round_keys, sbox);
+      27            1 :     aes256_decrypt_block(enc, dec, round_keys, sbox);
+      28              : 
+      29            1 :     if(memcmp(block, dec, 16) == 0) {
+      30            1 :         printf("AES-256 core round-trip OK\n");
+      31            1 :     } else {
+      32            0 :         printf("AES-256 core FAILED\n");
+      33            0 :         return 1;
+      34              :     }
+      35              : 
+      36            1 :     printf("\nPlaintext:  %s\n", block);
+      37            1 :     printf("Ciphertext: ");
+      38           17 :     for(int i=0; i<16; i++) printf("%02x", enc[i]);
+      39            1 :     printf("\n");
+      40            1 :     printf("Decrypted:  %s\n", dec);
+      41              : 
+      42              :     // Test with known NIST test vector for AES-256
+      43            1 :     printf("\n=== NIST Test Vector ===\n");
+      44            1 :     uint8_t nist_key[32] = {
+      45              :         0x60, 0x3d, 0xeb, 0x10, 0x15, 0xca, 0x71, 0xbe,
+      46              :         0x2b, 0x73, 0xae, 0xf0, 0x85, 0x7d, 0x77, 0x81,
+      47              :         0x1f, 0x35, 0x2c, 0x07, 0x3b, 0x61, 0x08, 0xd7,
+      48              :         0x2d, 0x98, 0x10, 0xa3, 0x09, 0x14, 0xdf, 0xf4
+      49              :     };
+      50            1 :     uint8_t nist_pt[16] = {
+      51              :         0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
+      52              :         0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a
+      53              :     };
+      54            1 :     uint8_t nist_expected_ct[16] = {
+      55              :         0xf3, 0xee, 0xd1, 0xbd, 0xb5, 0xd2, 0xa0, 0x3c,
+      56              :         0x06, 0x4b, 0x5a, 0x7e, 0x3d, 0xb1, 0x81, 0xf8
+      57              :     };
+      58              :     uint8_t nist_ct[16], nist_dec[16];
+      59              : 
+      60            1 :     aes_key_expansion_256(nist_key, round_keys, sbox);
+      61            1 :     aes256_encrypt_block(nist_pt, nist_ct, round_keys, sbox);
+      62            1 :     aes256_decrypt_block(nist_ct, nist_dec, round_keys, sbox);
+      63              : 
+      64            1 :     printf("Expected CT: ");
+      65           17 :     for(int i=0; i<16; i++) printf("%02x", nist_expected_ct[i]);
+      66            1 :     printf("\nComputed CT: ");
+      67           17 :     for(int i=0; i<16; i++) printf("%02x", nist_ct[i]);
+      68            1 :     printf("\n");
+      69              : 
+      70            1 :     if(memcmp(nist_ct, nist_expected_ct, 16) == 0) {
+      71            1 :         printf("NIST test vector PASSED\n");
+      72            1 :     } else {
+      73            0 :         printf("NIST test vector FAILED\n");
+      74            0 :         return 1;
+      75              :     }
+      76              : 
+      77            1 :     if(memcmp(nist_pt, nist_dec, 16) == 0) {
+      78            1 :         printf("NIST decryption PASSED\n");
+      79            1 :     } else {
+      80            0 :         printf("NIST decryption FAILED\n");
+      81            0 :         return 1;
+      82              :     }
+      83              : 
+      84            1 :     printf("\n=== All AES-256 tests passed! ===\n");
+      85            1 :     return 0;
+      86            1 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_cbc.c.func-c.html b/coverage-report/tests/test_cbc.c.func-c.html new file mode 100644 index 0000000..c5ed18d --- /dev/null +++ b/coverage-report/tests/test_cbc.c.func-c.html @@ -0,0 +1,92 @@ + + + + + + + LCOV - coverage.info - tests/test_cbc.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_cbc.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:80.6 %3125
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
main1
print_hex1
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_cbc.c.func.html b/coverage-report/tests/test_cbc.c.func.html new file mode 100644 index 0000000..a1536f9 --- /dev/null +++ b/coverage-report/tests/test_cbc.c.func.html @@ -0,0 +1,92 @@ + + + + + + + LCOV - coverage.info - tests/test_cbc.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_cbc.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:80.6 %3125
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
main1
print_hex1
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_cbc.c.gcov.html b/coverage-report/tests/test_cbc.c.gcov.html new file mode 100644 index 0000000..a8a0f4b --- /dev/null +++ b/coverage-report/tests/test_cbc.c.gcov.html @@ -0,0 +1,135 @@ + + + + + + + LCOV - coverage.info - tests/test_cbc.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_cbc.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:80.6 %3125
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include <stdio.h>
+       2              : #include <stdint.h>
+       3              : #include <string.h>
+       4              : 
+       5              : #include "../include/cbc.h"
+       6              : #include "../include/aes_wrapper.h"
+       7              : #include "../include/aes_128.h"
+       8              : #include "../include/key_expansion_128.h"
+       9              : #include "../include/sbox.h"
+      10              : 
+      11              : /* helper to print hex */
+      12            1 : static void print_hex(const uint8_t *buf, size_t len) {
+      13           49 :     for (size_t i = 0; i < len; ++i) printf("%02x", buf[i]);
+      14            1 :     printf("\n");
+      15            1 : }
+      16              : 
+      17            1 : int main(void) {
+      18            1 :     uint8_t key[16] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
+      19              :                        0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
+      20              :     uint8_t round_keys[176];
+      21              :     uint8_t sbox[256];
+      22            1 :     initialize_aes_sbox(sbox);
+      23            1 :     aes_key_expansion_128(key, round_keys, sbox);
+      24              : 
+      25            1 :     struct aes_ctx ctx = { .round_keys = round_keys, .sbox = sbox, .key_len = 16};
+      26              : 
+      27            1 :     const uint8_t pt[] = "Hello AES-CBC, this is 37 bytes long..";
+      28            1 :     size_t pt_len = strlen((const char*)pt);
+      29              : 
+      30            1 :     uint8_t ciphertext[256] = {0};
+      31            1 :     size_t ct_len = 0;
+      32            1 :     uint8_t recovered[256] = {0};
+      33            1 :     size_t rec_len = 0;
+      34              : 
+      35            1 :     uint8_t iv[16] = {0x00,0x01,0x02,0x03, 0x04,0x05,0x06,0x07,
+      36              :                        0x08,0x09,0x0a,0x0b, 0x0c,0x0d,0x0e,0x0f};
+      37              : 
+      38            1 :     if (aes_cbc_encrypt(pt, pt_len, ciphertext, &ct_len, iv, aes_block_wrapper, &ctx) != 0) {
+      39            0 :         fprintf(stderr, "CBC encrypt failed\n");
+      40            0 :         return 2;
+      41              :     }
+      42              : 
+      43            1 :     if (aes_cbc_decrypt(ciphertext, ct_len, recovered, &rec_len, iv, aes_block_wrapper_dec, &ctx) != 0) {
+      44            0 :         fprintf(stderr, "CBC decrypt failed\n");
+      45            0 :         return 3;
+      46              :     }
+      47              : 
+      48            1 :     if (rec_len != pt_len || memcmp(pt, recovered, pt_len) != 0) {
+      49            0 :         fprintf(stderr, "CBC round-trip FAILED\n");
+      50            0 :         return 4;
+      51              :     }
+      52              : 
+      53            1 :     printf("CBC round-trip OK — plaintext recovered correctly.\n");
+      54            1 :     printf("Plaintext: '%s'\n", (char*)pt);
+      55            1 :     printf("Ciphertext (hex): ");
+      56            1 :     print_hex(ciphertext, ct_len);
+      57              : 
+      58            1 :     return 0;
+      59            1 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_ccm.c.func-c.html b/coverage-report/tests/test_ccm.c.func-c.html new file mode 100644 index 0000000..052d0a2 --- /dev/null +++ b/coverage-report/tests/test_ccm.c.func-c.html @@ -0,0 +1,92 @@ + + + + + + + LCOV - coverage.info - tests/test_ccm.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_ccm.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:86.7 %4539
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
main1
run_vector3
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_ccm.c.func.html b/coverage-report/tests/test_ccm.c.func.html new file mode 100644 index 0000000..d2959ae --- /dev/null +++ b/coverage-report/tests/test_ccm.c.func.html @@ -0,0 +1,92 @@ + + + + + + + LCOV - coverage.info - tests/test_ccm.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_ccm.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:86.7 %4539
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
main1
run_vector3
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_ccm.c.gcov.html b/coverage-report/tests/test_ccm.c.gcov.html new file mode 100644 index 0000000..83e0bf3 --- /dev/null +++ b/coverage-report/tests/test_ccm.c.gcov.html @@ -0,0 +1,175 @@ + + + + + + + LCOV - coverage.info - tests/test_ccm.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_ccm.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:86.7 %4539
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include <stdio.h>
+       2              : #include <string.h>
+       3              : #include "ccm.h"
+       4              : #include "aes_wrapper.h"
+       5              : #include "aes_128.h"
+       6              : #include "key_expansion_128.h"
+       7              : #include "sbox.h"
+       8              : #include "test_ccm.h"
+       9              : 
+      10            3 : static int run_vector(struct aes_ctx *ctx,
+      11              :                       const uint8_t *nonce, size_t n,
+      12              :                       const uint8_t *aad, size_t aad_len,
+      13              :                       const uint8_t *pt, size_t pt_len,
+      14              :                       const uint8_t *expected_ct, size_t ct_len,
+      15              :                       size_t tag_len)
+      16              : {
+      17            3 :     uint8_t ciphertext[256] = {0};
+      18            3 :     size_t ciphertext_len = 0;
+      19              : 
+      20            3 :     int ret = ccm_encrypt(
+      21            3 :         (const uint8_t *)ctx,   // pass pointer to aes_ctx
+      22              :         aes_block_wrapper,
+      23            3 :         nonce, n,
+      24            3 :         aad, aad_len,
+      25            3 :         pt, pt_len,
+      26            3 :         ciphertext, &ciphertext_len,
+      27            3 :         tag_len
+      28              :     );
+      29              : 
+      30            3 :     if (ret != 0) { printf("[-] Encryption failed\n"); return 0; }
+      31              : 
+      32            3 :     if (ciphertext_len != ct_len || memcmp(ciphertext, expected_ct, ct_len) != 0) {
+      33            0 :         printf("[-] Ciphertext mismatch\n"); return 0;
+      34              :     }
+      35              : 
+      36            3 :     uint8_t decrypted[256] = {0};
+      37            3 :     size_t decrypted_len = 0;
+      38              : 
+      39            3 :     ret = ccm_decrypt(
+      40            3 :         (const uint8_t *)ctx,
+      41              :         aes_block_wrapper,
+      42            3 :         nonce, n,
+      43            3 :         aad, aad_len,
+      44            3 :         ciphertext, ciphertext_len,
+      45            3 :         decrypted, &decrypted_len,
+      46            3 :         tag_len
+      47              :     );
+      48              : 
+      49            3 :     if (ret != 0) { printf("[-] Decryption failed\n"); return 0; }
+      50              : 
+      51            3 :     if (decrypted_len != pt_len || memcmp(decrypted, pt, pt_len) != 0) {
+      52            0 :         printf("[-] Plaintext mismatch\n"); return 0;
+      53              :     }
+      54              : 
+      55            3 :     return 1;
+      56            3 : }
+      57              : 
+      58            1 : int main(void)
+      59              : {
+      60              :     uint8_t round_keys[176];
+      61              :     uint8_t sbox[256];
+      62            1 :     initialize_aes_sbox(sbox);
+      63            1 :     aes_key_expansion_128(CCM_KEY, round_keys, sbox);
+      64              : 
+      65            1 :     struct aes_ctx ctx = { .round_keys = round_keys, .sbox = sbox, .key_len = 16};
+      66              : 
+      67            1 :     int pass = 1;
+      68              : 
+      69            1 :     printf("[TEST] CCM Example 1\n");
+      70            1 :     if (!run_vector(&ctx,
+      71              :                     CCM_EX1_NONCE, CCM_EX1_NONCE_LEN,
+      72              :                     CCM_EX1_AAD, CCM_EX1_AAD_LEN,
+      73              :                     CCM_EX1_P, CCM_EX1_P_LEN,
+      74              :                     CCM_EX1_C, CCM_EX1_C_LEN,
+      75            0 :                     CCM_EX1_TAG_LEN)) pass = 0;
+      76              : 
+      77            1 :     printf("[TEST] CCM Example 2\n");
+      78            1 :     if (!run_vector(&ctx,
+      79              :                     CCM_EX2_NONCE, CCM_EX2_NONCE_LEN,
+      80              :                     CCM_EX2_AAD, CCM_EX2_AAD_LEN,
+      81              :                     CCM_EX2_P, CCM_EX2_P_LEN,
+      82              :                     CCM_EX2_C, CCM_EX2_C_LEN,
+      83            0 :                     CCM_EX2_TAG_LEN)) pass = 0;
+      84              : 
+      85            1 :     printf("[TEST] CCM Example 3\n");
+      86            1 :     if (!run_vector(&ctx,
+      87              :                     CCM_EX3_NONCE, CCM_EX3_NONCE_LEN,
+      88              :                     CCM_EX3_AAD, CCM_EX3_AAD_LEN,
+      89              :                     CCM_EX3_P, CCM_EX3_P_LEN,
+      90              :                     CCM_EX3_C, CCM_EX3_C_LEN,
+      91            0 :                     CCM_EX3_TAG_LEN)) pass = 0;
+      92              : 
+      93            1 :     if (pass)
+      94            1 :         printf("[+] CCM tests PASSED\n");
+      95              :     else
+      96            0 :         printf("[-] CCM tests FAILED\n");
+      97              : 
+      98            1 :     return pass ? 0 : 1;
+      99              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_cfb.c.func-c.html b/coverage-report/tests/test_cfb.c.func-c.html new file mode 100644 index 0000000..e4c4ca9 --- /dev/null +++ b/coverage-report/tests/test_cfb.c.func-c.html @@ -0,0 +1,84 @@ + + + + + + + LCOV - coverage.info - tests/test_cfb.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_cfb.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:88.9 %1816
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
main1
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_cfb.c.func.html b/coverage-report/tests/test_cfb.c.func.html new file mode 100644 index 0000000..4b5b9af --- /dev/null +++ b/coverage-report/tests/test_cfb.c.func.html @@ -0,0 +1,84 @@ + + + + + + + LCOV - coverage.info - tests/test_cfb.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_cfb.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:88.9 %1816
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
main1
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_cfb.c.gcov.html b/coverage-report/tests/test_cfb.c.gcov.html new file mode 100644 index 0000000..36c2768 --- /dev/null +++ b/coverage-report/tests/test_cfb.c.gcov.html @@ -0,0 +1,115 @@ + + + + + + + LCOV - coverage.info - tests/test_cfb.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_cfb.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:88.9 %1816
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include <stdio.h>
+       2              : #include <stdint.h>
+       3              : #include <string.h>
+       4              : #include "../include/cfb.h"
+       5              : #include "../include/aes_wrapper.h"
+       6              : #include "../include/key_expansion_128.h"
+       7              : #include "../include/sbox.h"
+       8              : 
+       9            1 : int main(void) {
+      10            1 :     uint8_t key[16] = {0};
+      11            1 :     uint8_t iv[16] = {0};
+      12            1 :     uint8_t plaintext[] = "CFB mode test message";
+      13            1 :     size_t len = strlen((char*)plaintext);
+      14              : 
+      15            1 :     uint8_t ciphertext[64] = {0};
+      16            1 :     uint8_t decrypted[64] = {0};
+      17              : 
+      18              :     uint8_t round_keys[176];
+      19              :     uint8_t sbox[256];
+      20              : 
+      21              :     //initialize the sbox
+      22            1 :     initialize_aes_sbox(sbox);
+      23              :     
+      24              :     // Expand the key for encryption
+      25            1 :     aes_key_expansion_128(key, round_keys, sbox);
+      26              : 
+      27            1 :     struct aes_ctx ctx = { .round_keys = round_keys, .sbox = sbox, .key_len = 16};
+      28              : 
+      29            1 :     aes_cfb_encrypt(plaintext, ciphertext, len, iv, &ctx);
+      30            1 :     aes_cfb_decrypt(ciphertext, decrypted, len, iv, &ctx);
+      31              : 
+      32            1 :     if (memcmp(plaintext, decrypted, len) == 0) {
+      33            1 :         printf("[+] CFB test passed: %s\n", decrypted);
+      34            1 :         return 0;
+      35              :     } else {
+      36            0 :         printf("[-] CFB test failed!\n");
+      37            0 :         return 1;
+      38              :     }
+      39            1 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_cmac.c.func-c.html b/coverage-report/tests/test_cmac.c.func-c.html new file mode 100644 index 0000000..d1a1333 --- /dev/null +++ b/coverage-report/tests/test_cmac.c.func-c.html @@ -0,0 +1,92 @@ + + + + + + + LCOV - coverage.info - tests/test_cmac.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_cmac.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:92.9 %2826
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
main1
check_result4
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_cmac.c.func.html b/coverage-report/tests/test_cmac.c.func.html new file mode 100644 index 0000000..0fe1893 --- /dev/null +++ b/coverage-report/tests/test_cmac.c.func.html @@ -0,0 +1,92 @@ + + + + + + + LCOV - coverage.info - tests/test_cmac.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_cmac.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:92.9 %2826
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
check_result4
main1
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_cmac.c.gcov.html b/coverage-report/tests/test_cmac.c.gcov.html new file mode 100644 index 0000000..19205f2 --- /dev/null +++ b/coverage-report/tests/test_cmac.c.gcov.html @@ -0,0 +1,150 @@ + + + + + + + LCOV - coverage.info - tests/test_cmac.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_cmac.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:92.9 %2826
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include <stdio.h>
+       2              : #include <stdint.h>
+       3              : #include <string.h>
+       4              : 
+       5              : #include "../include/cmac.h"
+       6              : #include "../include/aes_wrapper.h"
+       7              : #include "../include/aes_128.h"
+       8              : #include "../include/key_expansion_128.h"
+       9              : #include "../include/sbox.h"
+      10              : 
+      11              : /* Compare and print result; returns 1 if failure, 0 if OK */
+      12            4 : static int check_result(const char *label, const uint8_t *got, const uint8_t *exp, size_t len) {
+      13            4 :     if (memcmp(got, exp, len) == 0) {
+      14            4 :         printf("[+] %s OK\n", label);
+      15            4 :         return 0;
+      16              :     } else {
+      17            0 :         printf("[-] %s FAILED\n", label);
+      18            0 :         return 1;
+      19              :     }
+      20            4 : }
+      21              : 
+      22            1 : int main(void) {
+      23            1 :     uint8_t key[16] = {
+      24              :         0x2b,0x7e,0x15,0x16,0x28,0xae,0xd2,0xa6,
+      25              :         0xab,0xf7,0x15,0x88,0x09,0xcf,0x4f,0x3c
+      26              :     };
+      27              :     uint8_t round_keys[176];
+      28              :     uint8_t sbox[256];
+      29            1 :     initialize_aes_sbox(sbox);
+      30            1 :     aes_key_expansion_128(key, round_keys, sbox);
+      31            1 :     struct aes_ctx ctx = { .round_keys = round_keys, .sbox = sbox, .key_len = 16};
+      32              : 
+      33              :     struct {
+      34              :         const char *name;
+      35              :         uint8_t *msg;
+      36              :         size_t length;
+      37              :         uint8_t *exp_tag;
+      38            3 :     } tests[] = {
+      39            2 :         {"Example 1", NULL, 0,
+      40            1 :          (uint8_t[]){0xbb,0x1d,0x69,0x29,0xe9,0x59,0x37,0x28,
+      41              :                      0x7f,0xa3,0x7d,0x12,0x9b,0x75,0x67,0x46}},
+      42            2 :         {"Example 2", (uint8_t[]){0x6b,0xc1,0xbe,0xe2,0x2e,0x40,0x9f,0x96,
+      43              :                      0xe9,0x3d,0x7e,0x11,0x73,0x93,0x17,0x2a}, 16,
+      44            1 :          (uint8_t[]){0x07,0x0a,0x16,0xb4,0x6b,0x4d,0x41,0x44,
+      45              :                      0xf7,0x9b,0xdd,0x9d,0xd0,0x4a,0x28,0x7c}},
+      46            2 :         {"Example 3", (uint8_t[]){0x6b,0xc1,0xbe,0xe2,0x2e,0x40,0x9f,0x96,
+      47              :                      0xe9,0x3d,0x7e,0x11,0x73,0x93,0x17,0x2a,
+      48              :                      0xae,0x2d,0x8a,0x57,0x1e,0x03,0xac,0x9c,
+      49              :                      0x9e,0xb7,0x6f,0xac,0x45,0xaf,0x8e,0x51,
+      50              :                      0x30,0xc8,0x1c,0x46,0xa3,0x5c,0xe4,0x11}, 40,
+      51            1 :          (uint8_t[]){0xdf,0xa6,0x67,0x47,0xde,0x9a,0xe6,0x30,
+      52              :                      0x30,0xca,0x32,0x61,0x14,0x97,0xc8,0x27}},
+      53            2 :         {"Example 4", (uint8_t[]){0x6b,0xc1,0xbe,0xe2,0x2e,0x40,0x9f,0x96,
+      54              :                      0xe9,0x3d,0x7e,0x11,0x73,0x93,0x17,0x2a,
+      55              :                      0xae,0x2d,0x8a,0x57,0x1e,0x03,0xac,0x9c,
+      56              :                      0x9e,0xb7,0x6f,0xac,0x45,0xaf,0x8e,0x51,
+      57              :                      0x30,0xc8,0x1c,0x46,0xa3,0x5c,0xe4,0x11,
+      58              :                      0xe5,0xfb,0xc1,0x19,0x1a,0x0a,0x52,0xef,
+      59              :                      0xf6,0x9f,0x24,0x45,0xdf,0x4f,0x9b,0x17,
+      60              :                      0xad,0x2b,0x41,0x7b,0xe6,0x6c,0x37,0x10}, 64,
+      61            1 :          (uint8_t[]){0x51,0xf0,0xbe,0xbf,0x7e,0x3b,0x9d,0x92,
+      62              :                      0xfc,0x49,0x74,0x17,0x79,0x36,0x3c,0xfe}}
+      63              :     };
+      64              : 
+      65            1 :     int failed = 0;
+      66              : 
+      67            5 :     for (size_t i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) {
+      68            4 :         uint8_t tag[16] = {0};
+      69            4 :         aes_cmac(tests[i].msg, tests[i].length, tag, &ctx);
+      70            4 :         failed |= check_result(tests[i].name, tag, tests[i].exp_tag, 16);
+      71            4 :     }
+      72              : 
+      73            1 :     return failed ? 1 : 0;
+      74              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_ctr.c.func-c.html b/coverage-report/tests/test_ctr.c.func-c.html new file mode 100644 index 0000000..002f100 --- /dev/null +++ b/coverage-report/tests/test_ctr.c.func-c.html @@ -0,0 +1,84 @@ + + + + + + + LCOV - coverage.info - tests/test_ctr.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_ctr.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:90.9 %2220
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
main1
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_ctr.c.func.html b/coverage-report/tests/test_ctr.c.func.html new file mode 100644 index 0000000..f88b540 --- /dev/null +++ b/coverage-report/tests/test_ctr.c.func.html @@ -0,0 +1,84 @@ + + + + + + + LCOV - coverage.info - tests/test_ctr.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_ctr.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:90.9 %2220
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
main1
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_ctr.c.gcov.html b/coverage-report/tests/test_ctr.c.gcov.html new file mode 100644 index 0000000..5b7a33d --- /dev/null +++ b/coverage-report/tests/test_ctr.c.gcov.html @@ -0,0 +1,123 @@ + + + + + + + LCOV - coverage.info - tests/test_ctr.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_ctr.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:90.9 %2220
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include <stdio.h>
+       2              : #include <stdint.h>
+       3              : #include <string.h>
+       4              : 
+       5              : #include "../include/ctr.h"
+       6              : #include "../include/aes_wrapper.h"
+       7              : #include "../include/aes_128.h"
+       8              : #include "../include/key_expansion_128.h"
+       9              : #include "../include/sbox.h"
+      10              : 
+      11              : 
+      12            1 : int main(void) {
+      13            1 :     uint8_t key[16] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
+      14              :                        0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
+      15              :     uint8_t round_keys[176];
+      16              :     uint8_t sbox[256];
+      17            1 :     initialize_aes_sbox(sbox);
+      18              : 
+      19            1 :     aes_key_expansion_128(key, round_keys, sbox);
+      20              : 
+      21            1 :     struct aes_ctx ctx = { .round_keys = round_keys, .sbox = sbox, .key_len = 16};
+      22              : 
+      23            1 :     const uint8_t pt[] = "The quick brown fox jumps over 13 lazy dogs!";
+      24            1 :     size_t len = strlen((const char*)pt);
+      25              : 
+      26            1 :     uint8_t ciphertext[256] = {0};
+      27            1 :     uint8_t recovered[256] = {0};
+      28              : 
+      29            1 :     uint8_t iv[16] = {0x00,0x01,0x02,0x03, 0x04,0x05,0x06,0x07,
+      30              :                        0x08,0x09,0x0a,0x0b, 0x00,0x00,0x00,0x01};
+      31              : 
+      32            1 :     aes_ctr_crypt(pt, ciphertext, len, iv, aes_block_wrapper, &ctx);
+      33            1 :     aes_ctr_crypt(ciphertext, recovered, len, iv, aes_block_wrapper, &ctx);
+      34              : 
+      35            1 :     if (memcmp(pt, recovered, len) != 0) {
+      36            0 :         fprintf(stderr, "CTR round-trip FAILED\n");
+      37            0 :         return 2;
+      38              :     }
+      39              : 
+      40            1 :     printf("CTR round-trip OK — plaintext recovered correctly.\n");
+      41            1 :     printf("Plaintext: '%s'\n", (const char*)pt);
+      42            1 :     printf("Ciphertext (hex): ");
+      43           45 :     for (size_t i = 0; i < len; ++i) printf("%02x", ciphertext[i]);
+      44            1 :     printf("\n");
+      45              : 
+      46            1 :     return 0;
+      47            1 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_ecb.c.func-c.html b/coverage-report/tests/test_ecb.c.func-c.html new file mode 100644 index 0000000..6bd8be4 --- /dev/null +++ b/coverage-report/tests/test_ecb.c.func-c.html @@ -0,0 +1,84 @@ + + + + + + + LCOV - coverage.info - tests/test_ecb.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_ecb.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:84.6 %2622
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
main1
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_ecb.c.func.html b/coverage-report/tests/test_ecb.c.func.html new file mode 100644 index 0000000..b9d8e35 --- /dev/null +++ b/coverage-report/tests/test_ecb.c.func.html @@ -0,0 +1,84 @@ + + + + + + + LCOV - coverage.info - tests/test_ecb.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_ecb.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:84.6 %2622
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
main1
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_ecb.c.gcov.html b/coverage-report/tests/test_ecb.c.gcov.html new file mode 100644 index 0000000..00f41b4 --- /dev/null +++ b/coverage-report/tests/test_ecb.c.gcov.html @@ -0,0 +1,142 @@ + + + + + + + LCOV - coverage.info - tests/test_ecb.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_ecb.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:84.6 %2622
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include <stdio.h>
+       2              : #include <stdint.h>
+       3              : #include <string.h>
+       4              : 
+       5              : #include "../include/ecb.h"
+       6              : #include "../include/aes_wrapper.h"
+       7              : #include "../include/aes_128.h"
+       8              : #include "../include/key_expansion_128.h"
+       9              : #include "../include/sbox.h"
+      10              : 
+      11            1 : int main(void) {
+      12              :     // NIST SP 800-38A AES-128 ECB test vector
+      13            1 :     const uint8_t key[16] = {
+      14              :         0x2b,0x7e,0x15,0x16,0x28,0xae,0xd2,0xa6,
+      15              :         0xab,0xf7,0x15,0x88,0x09,0xcf,0x4f,0x3c
+      16              :     };
+      17              : 
+      18            1 :     const uint8_t plaintext[16] = {
+      19              :         0x6b,0xc1,0xbe,0xe2,0x2e,0x40,0x9f,0x96,
+      20              :         0xe9,0x3d,0x7e,0x11,0x73,0x93,0x17,0x2a
+      21              :     };
+      22              : 
+      23            1 :     const uint8_t expected_ciphertext[16] = {
+      24              :         0x3a,0xd7,0x7b,0xb4,0x0d,0x7a,0x36,0x60,
+      25              :         0xa8,0x9e,0xca,0xf3,0x24,0x66,0xef,0x97
+      26              :     };
+      27              : 
+      28              :     uint8_t round_keys[176];
+      29              :     uint8_t sbox[256];
+      30            1 :     initialize_aes_sbox(sbox);
+      31            1 :     aes_key_expansion_128(key, round_keys, sbox);
+      32              : 
+      33            1 :     struct aes_ctx ctx = { .round_keys = round_keys, .sbox = sbox, .key_len = 16};
+      34              : 
+      35            1 :     uint8_t ciphertext[16] = {0};
+      36            1 :     uint8_t decrypted[16] = {0};
+      37              : 
+      38              :     // Encrypt
+      39            1 :     aes_ecb_encrypt(plaintext, ciphertext, 16, &ctx);
+      40              : 
+      41              :     // Decrypt
+      42            1 :     aes_ecb_decrypt(ciphertext, decrypted, 16, &ctx);
+      43              : 
+      44              :     // Verify encryption matches NIST vector
+      45            1 :     if (memcmp(ciphertext, expected_ciphertext, 16) != 0) {
+      46            0 :         fprintf(stderr, "ECB encryption FAILED\n");
+      47            0 :         return 1;
+      48              :     }
+      49              : 
+      50              :     // Verify decryption matches plaintext
+      51            1 :     if (memcmp(decrypted, plaintext, 16) != 0) {
+      52            0 :         fprintf(stderr, "ECB decryption FAILED\n");
+      53            0 :         return 2;
+      54              :     }
+      55              : 
+      56            1 :     printf("ECB round-trip OK — plaintext recovered correctly.\n");
+      57            1 :     printf("Plaintext: ");
+      58           17 :     for (size_t i = 0; i < 16; ++i) printf("%02x", plaintext[i]);
+      59            1 :     printf("\n");
+      60              : 
+      61            1 :     printf("Ciphertext (hex): ");
+      62           17 :     for (size_t i = 0; i < 16; ++i) printf("%02x", ciphertext[i]);
+      63            1 :     printf("\n");
+      64              : 
+      65            1 :     return 0;
+      66            1 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_gcm.c.func-c.html b/coverage-report/tests/test_gcm.c.func-c.html new file mode 100644 index 0000000..4ea38e5 --- /dev/null +++ b/coverage-report/tests/test_gcm.c.func-c.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - coverage.info - tests/test_gcm.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_gcm.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:81.6 %125102
Test Date:2025-10-19 19:06:58Functions:83.3 %65
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
log_hex0
main1
parse_vector47256
parse_hex271592
strip_trailing444180
hex_to_byte7404562
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_gcm.c.func.html b/coverage-report/tests/test_gcm.c.func.html new file mode 100644 index 0000000..0eb7822 --- /dev/null +++ b/coverage-report/tests/test_gcm.c.func.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - coverage.info - tests/test_gcm.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_gcm.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:81.6 %125102
Test Date:2025-10-19 19:06:58Functions:83.3 %65
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
hex_to_byte7404562
log_hex0
main1
parse_hex271592
parse_vector47256
strip_trailing444180
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_gcm.c.gcov.html b/coverage-report/tests/test_gcm.c.gcov.html new file mode 100644 index 0000000..8ed5c0d --- /dev/null +++ b/coverage-report/tests/test_gcm.c.gcov.html @@ -0,0 +1,278 @@ + + + + + + + LCOV - coverage.info - tests/test_gcm.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_gcm.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:81.6 %125102
Test Date:2025-10-19 19:06:58Functions:83.3 %65
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include <stdio.h>
+       2              : #include <stdlib.h>
+       3              : #include <string.h>
+       4              : #include <stdint.h>
+       5              : #include <ctype.h>
+       6              : #include "gcm.h"
+       7              : 
+       8              : #define MAX_BYTES 8192
+       9              : #define MAX_LINE 8192
+      10              : 
+      11              : struct gcm_vector {
+      12              :     uint8_t key[MAX_BYTES], iv[MAX_BYTES];
+      13              :     uint8_t pt[MAX_BYTES], aad[MAX_BYTES];
+      14              :     uint8_t ct[MAX_BYTES], tag[MAX_BYTES];
+      15              :     size_t key_len, iv_len, pt_len, aad_len, ct_len, tag_len;
+      16              :     int is_fail;
+      17              : };
+      18              : 
+      19              : /* Convert two hex chars to a byte */
+      20      7404562 : static uint8_t hex_to_byte(const char *hex) {
+      21      7404562 :     uint8_t hi = (uint8_t)((isdigit(hex[0]) ? hex[0]-'0' : tolower(hex[0])-'a'+10) & 0xF);
+      22      7404562 :     uint8_t lo = (uint8_t)((isdigit(hex[1]) ? hex[1]-'0' : tolower(hex[1])-'a'+10) & 0xF);
+      23      7404562 :     return (hi << 4) | lo;
+      24              : }
+      25              : 
+      26              : /* Strip trailing whitespace */
+      27       444180 : static void strip_trailing(char *line) {
+      28       444180 :     size_t len = strlen(line);
+      29      1358491 :     while (len > 0 && isspace((unsigned char)line[len-1])) {
+      30       914311 :         line[len-1] = 0;
+      31       914311 :         len--;
+      32              :     }
+      33       444180 : }
+      34              : 
+      35              : /* Parse hex string into bytes */
+      36       271592 : static size_t parse_hex(const char *hex_str, uint8_t *out) {
+      37       271592 :     size_t out_pos = 0;
+      38       271592 :     size_t len = strlen(hex_str);
+      39              :     
+      40      7676154 :     for (size_t i = 0; i < len; i++) {
+      41      7404562 :         if (!isxdigit((unsigned char)hex_str[i])) continue;
+      42      7404562 :         if (i + 1 < len && isxdigit((unsigned char)hex_str[i+1])) {
+      43      7404562 :             out[out_pos++] = hex_to_byte(&hex_str[i]);
+      44      7404562 :             i++;
+      45      7404562 :         }
+      46      7404562 :     }
+      47       271592 :     return out_pos;
+      48              : }
+      49              : 
+      50              : /* Parse a single vector from a .rsp file */
+      51        47256 : static int parse_vector(FILE *f, struct gcm_vector *v) {
+      52              :     char line[MAX_LINE];
+      53        47256 :     int has_key = 0;
+      54              : 
+      55        47256 :     memset(v, 0, sizeof(*v));
+      56              : 
+      57       444192 :     while (fgets(line, sizeof(line), f)) {
+      58       444180 :         strip_trailing(line);
+      59       444180 :         if (line[0] == 0 || line[0] == '#') continue;
+      60              : 
+      61       393744 :         if (strncasecmp(line, "FAIL", 4) == 0) {
+      62        11908 :             v->is_fail = 1;
+      63        11908 :             continue;
+      64              :         }
+      65              : 
+      66       381836 :         char *eq = strchr(line, '=');
+      67       381836 :         if (!eq) continue;
+      68              : 
+      69       381836 :         *eq = 0;
+      70       381836 :         char *name = line;
+      71       381836 :         char *value = eq + 1;
+      72              : 
+      73       381836 :         while (*name && isspace((unsigned char)*name)) name++;
+      74       381836 :         char *name_end = name + strlen(name) - 1;
+      75       763672 :         while (name_end > name && isspace((unsigned char)*name_end)) *name_end-- = 0;
+      76       737721 :         while (*value && isspace((unsigned char)*value)) value++;
+      77              : 
+      78       381836 :         if (strcasecmp(name, "Count") == 0) {
+      79        47250 :             if (has_key) {
+      80        47244 :                 fseek(f, -(long)(strlen(line) + strlen(value) + 2), SEEK_CUR);
+      81        47244 :                 return 1;
+      82              :             }
+      83       334592 :         } else if (strcasecmp(name, "Key") == 0) {
+      84        47250 :             v->key_len = parse_hex(value, v->key);
+      85        47250 :             has_key = 1;
+      86       334586 :         } else if (strcasecmp(name, "IV") == 0) {
+      87        47250 :             v->iv_len = parse_hex(value, v->iv);
+      88       287336 :         } else if (strcasecmp(name, "PT") == 0) {
+      89        35342 :             v->pt_len = parse_hex(value, v->pt);
+      90       240086 :         } else if (strcasecmp(name, "AAD") == 0) {
+      91        47250 :             v->aad_len = parse_hex(value, v->aad);
+      92       204744 :         } else if (strcasecmp(name, "CT") == 0) {
+      93        47250 :             v->ct_len = parse_hex(value, v->ct);
+      94       157494 :         } else if (strcasecmp(name, "Tag") == 0) {
+      95        47250 :             v->tag_len = parse_hex(value, v->tag);
+      96        47250 :         }
+      97              :     }
+      98              : 
+      99           12 :     return has_key;
+     100        47256 : }
+     101              : 
+     102              : /* Write hex data to file with label */
+     103            0 : static void log_hex(FILE *log, const char *label, const uint8_t *data, size_t len) {
+     104            0 :     fprintf(log, "%s = ", label);
+     105            0 :     for (size_t i = 0; i < len; i++) fprintf(log, "%02X", data[i]);
+     106            0 :     fprintf(log, "\n");
+     107            0 : }
+     108              : 
+     109            1 : int main(void) {
+     110            1 :     const char *files[] = {
+     111              :         "gcmtestvectors/gcmDecrypt128.rsp",
+     112              :         "gcmtestvectors/gcmDecrypt192.rsp",
+     113              :         "gcmtestvectors/gcmDecrypt256.rsp",
+     114              :         "gcmtestvectors/gcmEncryptExtIV128.rsp",
+     115              :         "gcmtestvectors/gcmEncryptExtIV192.rsp",
+     116              :         "gcmtestvectors/gcmEncryptExtIV256.rsp"
+     117              :     };
+     118              : 
+     119              :     struct gcm_vector v;
+     120              :     struct gcm_ctx ctx;
+     121            1 :     int total_vectors = 0, total_passed = 0, total_skipped = 0;
+     122              : 
+     123            1 :     FILE *log = fopen("log/failed_vectors.log", "w");
+     124            1 :     if (!log) { perror("log/failed_vectors.log"); return 1; }
+     125              : 
+     126            7 :     for (size_t fidx = 0; fidx < sizeof(files)/sizeof(files[0]); fidx++) {
+     127            6 :         FILE *fp = fopen(files[fidx], "r");
+     128            6 :         if (!fp) { perror(files[fidx]); continue; }
+     129              : 
+     130            6 :         int vector_count = 0, passed = 0, skipped = 0;
+     131              : 
+     132        47256 :         while (parse_vector(fp, &v)) {
+     133        47250 :             vector_count++;
+     134        47250 :             total_vectors++;
+     135              : 
+     136        47250 :             if (v.is_fail) {
+     137              :                 uint8_t decrypted[MAX_BYTES];
+     138        11908 :                 int res = gcm_decrypt(&ctx, v.ct, v.ct_len, v.aad, v.aad_len, v.tag, v.tag_len, decrypted);
+     139        11908 :                 if (res != 0) {
+     140        11908 :                     passed++;
+     141        11908 :                     total_passed++;
+     142        11908 :                 }
+     143        11908 :                 continue;
+     144              :             }
+     145              : 
+     146        35342 :             if (v.key_len != 16 && v.key_len != 24 && v.key_len != 32) {
+     147            0 :                 skipped++;
+     148            0 :                 total_skipped++;
+     149            0 :                 continue;
+     150              :             }
+     151              : 
+     152        35342 :             gcm_init(&ctx, v.key, v.key_len, v.iv, v.iv_len);
+     153              : 
+     154              :             uint8_t ciphertext[MAX_BYTES], computed_tag[16];
+     155        35342 :             gcm_encrypt(&ctx, v.pt, v.pt_len, v.aad, v.aad_len, ciphertext, computed_tag, v.tag_len);
+     156              : 
+     157        35342 :             int ok = 1;
+     158        35342 :             if (v.ct_len > 0 && memcmp(ciphertext, v.ct, v.ct_len) != 0) ok = 0;
+     159        35342 :             if (v.tag_len > 0 && memcmp(computed_tag, v.tag, v.tag_len) != 0) ok = 0;
+     160              : 
+     161              :             uint8_t decrypted[MAX_BYTES];
+     162        35342 :             if (v.ct_len > 0) {
+     163        28291 :                 if (gcm_decrypt(&ctx, ciphertext, v.ct_len, v.aad, v.aad_len, v.tag, v.tag_len, decrypted) != 0)
+     164            0 :                     ok = 0;
+     165        28291 :                 else if (memcmp(decrypted, v.pt, v.pt_len) != 0)
+     166            0 :                     ok = 0;
+     167        28291 :             }
+     168              : 
+     169        35342 :             if (!ok) {
+     170              :                 // Log the failing vector with expected vs actual
+     171            0 :                 fprintf(log, "# Failure (Count=%d) in %s\n", vector_count, files[fidx]);
+     172            0 :                 log_hex(log, "Key", v.key, v.key_len);
+     173            0 :                 log_hex(log, "IV", v.iv, v.iv_len);
+     174            0 :                 if (v.pt_len) log_hex(log, "PT", v.pt, v.pt_len);
+     175            0 :                 if (v.ct_len) log_hex(log, "CT", ciphertext, v.ct_len);
+     176            0 :                 if (v.tag_len) {
+     177            0 :                     log_hex(log, "Tag_expected", v.tag, v.tag_len);
+     178            0 :                     log_hex(log, "Tag_actual", computed_tag, v.tag_len);
+     179            0 :                 }
+     180            0 :                 fprintf(log, "Decrypted = ");
+     181            0 :                 for (size_t i = 0; i < v.pt_len; i++) fprintf(log, "%02X", decrypted[i]);
+     182            0 :                 fprintf(log, "\n\n");
+     183            0 :             } else {
+     184        35342 :                 passed++;
+     185        35342 :                 total_passed++;
+     186              :             }
+     187              :         }
+     188              : 
+     189            6 :         fclose(fp);
+     190            6 :         int failed = vector_count - passed - skipped;
+     191            6 :         printf("%-45s %5d total | %5d passed | %5d failed | %5d skipped\n", 
+     192            6 :                files[fidx], vector_count, passed, failed, skipped);
+     193            6 :     }
+     194              : 
+     195            1 :     fclose(log);
+     196              : 
+     197            1 :     printf("\n========================================\n");
+     198            1 :     printf("Total: %d | Passed: %d | Failed: %d | Skipped: %d\n", 
+     199            1 :            total_vectors, total_passed, total_vectors - total_passed - total_skipped, total_skipped);
+     200              : 
+     201            1 :     return (total_vectors == total_passed) ? 0 : 1;
+     202            1 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_gmac.c.func-c.html b/coverage-report/tests/test_gmac.c.func-c.html new file mode 100644 index 0000000..2d3bc25 --- /dev/null +++ b/coverage-report/tests/test_gmac.c.func-c.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - coverage.info - tests/test_gmac.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_gmac.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:78.4 %11691
Test Date:2025-10-19 19:06:58Functions:83.3 %65
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
log_hex0
main1
parse_vector47256
parse_hex224342
strip_trailing444180
hex_to_byte5552550
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_gmac.c.func.html b/coverage-report/tests/test_gmac.c.func.html new file mode 100644 index 0000000..1aad9a8 --- /dev/null +++ b/coverage-report/tests/test_gmac.c.func.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - coverage.info - tests/test_gmac.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_gmac.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:78.4 %11691
Test Date:2025-10-19 19:06:58Functions:83.3 %65
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
hex_to_byte5552550
log_hex0
main1
parse_hex224342
parse_vector47256
strip_trailing444180
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_gmac.c.gcov.html b/coverage-report/tests/test_gmac.c.gcov.html new file mode 100644 index 0000000..8de6b67 --- /dev/null +++ b/coverage-report/tests/test_gmac.c.gcov.html @@ -0,0 +1,270 @@ + + + + + + + LCOV - coverage.info - tests/test_gmac.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_gmac.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:78.4 %11691
Test Date:2025-10-19 19:06:58Functions:83.3 %65
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include <stdio.h>
+       2              : #include <stdlib.h>
+       3              : #include <string.h>
+       4              : #include <stdint.h>
+       5              : #include <ctype.h>
+       6              : #include "gmac.h"
+       7              : 
+       8              : #define MAX_BYTES 8192
+       9              : #define MAX_LINE 8192
+      10              : 
+      11              : struct gmac_vector {
+      12              :     uint8_t key[MAX_BYTES], iv[MAX_BYTES];
+      13              :     uint8_t aad[MAX_BYTES];
+      14              :     uint8_t tag[MAX_BYTES];
+      15              :     size_t key_len, iv_len, aad_len, tag_len;
+      16              :     int has_plaintext;
+      17              :     int is_fail;  // Added: indicates this vector should fail authentication
+      18              : };
+      19              : 
+      20              : /* Convert two hex chars to a byte */
+      21      5552550 : static uint8_t hex_to_byte(const char *hex) {
+      22      5552550 :     uint8_t hi = (uint8_t)((isdigit(hex[0]) ? hex[0]-'0' : tolower(hex[0])-'a'+10) & 0xF);
+      23      5552550 :     uint8_t lo = (uint8_t)((isdigit(hex[1]) ? hex[1]-'0' : tolower(hex[1])-'a'+10) & 0xF);
+      24      5552550 :     return (hi << 4) | lo;
+      25              : }
+      26              : 
+      27              : /* Strip trailing whitespace */
+      28       444180 : static void strip_trailing(char *line) {
+      29       444180 :     size_t len = strlen(line);
+      30      1358491 :     while (len > 0 && isspace((unsigned char)line[len-1])) {
+      31       914311 :         line[len-1] = 0;
+      32       914311 :         len--;
+      33              :     }
+      34       444180 : }
+      35              : 
+      36              : /* Parse hex string into bytes */
+      37       224342 : static size_t parse_hex(const char *hex_str, uint8_t *out) {
+      38       224342 :     size_t out_pos = 0;
+      39       224342 :     size_t len = strlen(hex_str);
+      40      6570504 :     for (size_t i = 0; i < len; i++) {
+      41      6346162 :         if (!isxdigit((unsigned char)hex_str[i])) continue;
+      42      6346162 :         if (i + 1 < len && isxdigit((unsigned char)hex_str[i+1])) {
+      43      6346162 :             if (out) out[out_pos] = hex_to_byte(&hex_str[i]);
+      44      6346162 :             out_pos++;
+      45      6346162 :             i++;
+      46      6346162 :         }
+      47      6346162 :     }
+      48       224342 :     return out_pos;
+      49              : }
+      50              : 
+      51              : /* Parse a single vector from a .rsp file */
+      52        47256 : static int parse_vector(FILE *f, struct gmac_vector *v) {
+      53              :     char line[MAX_LINE];
+      54        47256 :     int has_key = 0;
+      55        47256 :     memset(v, 0, sizeof(*v));
+      56              : 
+      57       444192 :     while (fgets(line, sizeof(line), f)) {
+      58       444180 :         strip_trailing(line);
+      59       444180 :         if (line[0] == 0 || line[0] == '#') continue;
+      60              : 
+      61              :         // Check for FAIL marker
+      62       393744 :         if (strncasecmp(line, "FAIL", 4) == 0) {
+      63        11908 :             v->is_fail = 1;
+      64        11908 :             continue;
+      65              :         }
+      66              : 
+      67       381836 :         char *eq = strchr(line, '=');
+      68       381836 :         if (!eq) continue;
+      69              : 
+      70       381836 :         *eq = 0;
+      71       381836 :         char *name = line;
+      72       381836 :         char *value = eq + 1;
+      73              : 
+      74       381836 :         while (*name && isspace((unsigned char)*name)) name++;
+      75       381836 :         char *name_end = name + strlen(name) - 1;
+      76       763672 :         while (name_end > name && isspace((unsigned char)*name_end)) *name_end-- = 0;
+      77       737721 :         while (*value && isspace((unsigned char)*value)) value++;
+      78              : 
+      79       381836 :         if (strcasecmp(name, "Count") == 0) {
+      80        47250 :             if (has_key) {
+      81        47244 :                 fseek(f, -(long)(strlen(line) + strlen(value) + 2), SEEK_CUR);
+      82        47244 :                 return 1;
+      83              :             }
+      84       334592 :         } else if (strcasecmp(name, "Key") == 0) {
+      85        47250 :             v->key_len = parse_hex(value, v->key);
+      86        47250 :             has_key = 1;
+      87       334586 :         } else if (strcasecmp(name, "IV") == 0) {
+      88        47250 :             v->iv_len = parse_hex(value, v->iv);
+      89       287336 :         } else if (strcasecmp(name, "PT") == 0) {
+      90        35342 :             size_t pt_len = parse_hex(value, NULL);
+      91        35342 :             v->has_plaintext = (pt_len > 0);
+      92       240086 :         } else if (strcasecmp(name, "AAD") == 0) {
+      93        47250 :             v->aad_len = parse_hex(value, v->aad);
+      94       204744 :         } else if (strcasecmp(name, "Tag") == 0) {
+      95        47250 :             v->tag_len = parse_hex(value, v->tag);
+      96        47250 :         }
+      97              :     }
+      98              : 
+      99           12 :     return has_key;
+     100        47256 : }
+     101              : 
+     102              : /* Write hex data to file with label */
+     103            0 : static void log_hex(FILE *log, const char *label, const uint8_t *data, size_t len) {
+     104            0 :     fprintf(log, "%s = ", label);
+     105            0 :     for (size_t i = 0; i < len; i++) fprintf(log, "%02X", data[i]);
+     106            0 :     fprintf(log, "\n");
+     107            0 : }
+     108              : 
+     109            1 : int main(void) {
+     110            1 :     const char *files[] = {
+     111              :         "gcmtestvectors/gcmDecrypt128.rsp",
+     112              :         "gcmtestvectors/gcmDecrypt192.rsp",
+     113              :         "gcmtestvectors/gcmDecrypt256.rsp",
+     114              :         "gcmtestvectors/gcmEncryptExtIV128.rsp",
+     115              :         "gcmtestvectors/gcmEncryptExtIV192.rsp",
+     116              :         "gcmtestvectors/gcmEncryptExtIV256.rsp"
+     117              :     };
+     118              : 
+     119              :     struct gmac_vector v;
+     120              :     struct gmac_ctx ctx;
+     121            1 :     int total_vectors = 0, total_passed = 0, total_skipped = 0;
+     122              : 
+     123            1 :     FILE *log = fopen("log/failed_gmac.log", "w");
+     124            1 :     if (!log) { perror("log/failed_gmac.log"); return 1; }
+     125              : 
+     126            7 :     for (size_t fidx = 0; fidx < sizeof(files)/sizeof(files[0]); fidx++) {
+     127            6 :         FILE *fp = fopen(files[fidx], "r");
+     128            6 :         if (!fp) { perror(files[fidx]); continue; }
+     129              : 
+     130            6 :         int vector_count = 0, passed = 0, skipped = 0;
+     131              : 
+     132        47256 :     while (parse_vector(fp, &v)) {
+     133              :         // Only consider vectors with PTlen == 0 (no plaintext = GMAC mode)
+     134        47250 :         if (v.has_plaintext) continue;
+     135              : 
+     136        18959 :         vector_count++;
+     137        18959 :         total_vectors++;
+     138              : 
+     139        18959 :         if (v.key_len != 16 && v.key_len != 24 && v.key_len != 32) {
+     140            0 :             skipped++;
+     141            0 :             total_skipped++;
+     142            0 :             continue;
+     143              :         }
+     144              : 
+     145        18959 :         if (gmac_init(&ctx, v.key, v.key_len, v.iv, v.iv_len) != 0) {
+     146            0 :             skipped++;
+     147            0 :             total_skipped++;
+     148            0 :             continue;
+     149              :         }
+     150              : 
+     151              :         uint8_t computed_tag[16];
+     152        18959 :         gmac_compute(&ctx, v.aad, v.aad_len, computed_tag, v.tag_len);
+     153              : 
+     154        18959 :         int tags_match = (memcmp(computed_tag, v.tag, v.tag_len) == 0);
+     155              : 
+     156              :         // For FAIL vectors: pass if tags DON'T match (expected behavior)
+     157              :         // For normal vectors: pass if tags DO match
+     158        18959 :         int test_passed = v.is_fail ? !tags_match : tags_match;
+     159              : 
+     160        18959 :         if (!test_passed) {
+     161              :             // Log the failing vector
+     162            0 :             fprintf(log, "# Failure (Count=%d) in %s%s\n", 
+     163            0 :                     vector_count, files[fidx], v.is_fail ? " [FAIL vector]" : "");
+     164            0 :             log_hex(log, "Key", v.key, v.key_len);
+     165            0 :             log_hex(log, "IV", v.iv, v.iv_len);
+     166            0 :             if (v.aad_len) log_hex(log, "AAD", v.aad, v.aad_len);
+     167            0 :             if (v.tag_len) {
+     168            0 :                 log_hex(log, "Tag_expected", v.tag, v.tag_len);
+     169            0 :                 log_hex(log, "Tag_actual", computed_tag, v.tag_len);
+     170            0 :             }
+     171            0 :             if (v.is_fail) {
+     172            0 :                 fprintf(log, "ERROR: FAIL vector produced matching tag (should mismatch)\n");
+     173            0 :             }
+     174            0 :             fprintf(log, "\n");
+     175            0 :         } else {
+     176        18959 :             passed++;
+     177        18959 :             total_passed++;
+     178              :         }
+     179              :     }
+     180              : 
+     181            6 :         fclose(fp);
+     182            6 :         int failed = vector_count - passed - skipped;
+     183            6 :         printf("%-45s %5d total | %5d passed | %5d failed | %5d skipped\n", 
+     184            6 :                files[fidx], vector_count, passed, failed, skipped);
+     185            6 :     }
+     186              : 
+     187            1 :     fclose(log);
+     188              : 
+     189            1 :     printf("\n========================================\n");
+     190            1 :     printf("Total: %d | Passed: %d | Failed: %d | Skipped: %d\n", 
+     191            1 :            total_vectors, total_passed, total_vectors - total_passed - total_skipped, total_skipped);
+     192              : 
+     193            1 :     return (total_vectors == total_passed + total_skipped) ? 0 : 1;
+     194            1 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_ofb.c.func-c.html b/coverage-report/tests/test_ofb.c.func-c.html new file mode 100644 index 0000000..33c21c9 --- /dev/null +++ b/coverage-report/tests/test_ofb.c.func-c.html @@ -0,0 +1,84 @@ + + + + + + + LCOV - coverage.info - tests/test_ofb.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_ofb.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:84.6 %2622
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
main1
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_ofb.c.func.html b/coverage-report/tests/test_ofb.c.func.html new file mode 100644 index 0000000..d9bc5ba --- /dev/null +++ b/coverage-report/tests/test_ofb.c.func.html @@ -0,0 +1,84 @@ + + + + + + + LCOV - coverage.info - tests/test_ofb.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_ofb.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:84.6 %2622
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
main1
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_ofb.c.gcov.html b/coverage-report/tests/test_ofb.c.gcov.html new file mode 100644 index 0000000..d1523be --- /dev/null +++ b/coverage-report/tests/test_ofb.c.gcov.html @@ -0,0 +1,154 @@ + + + + + + + LCOV - coverage.info - tests/test_ofb.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_ofb.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:84.6 %2622
Test Date:2025-10-19 19:06:58Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include <stdio.h>
+       2              : #include <stdint.h>
+       3              : #include <string.h>
+       4              : 
+       5              : #include "../include/ofb.h"
+       6              : #include "../include/aes_wrapper.h"
+       7              : #include "../include/aes_128.h"
+       8              : #include "../include/key_expansion_128.h"
+       9              : #include "../include/sbox.h"
+      10              : 
+      11            1 : int main(void) {
+      12            1 :     const uint8_t key[16] = {
+      13              :         0x2b,0x7e,0x15,0x16,0x28,0xae,0xd2,0xa6,
+      14              :         0xab,0xf7,0x15,0x88,0x09,0xcf,0x4f,0x3c
+      15              :     };
+      16              : 
+      17            1 :     const uint8_t iv[16] = {
+      18              :         0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
+      19              :         0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f
+      20              :     };
+      21              : 
+      22            1 :     const uint8_t plaintext[64] = {
+      23              :         0x6b,0xc1,0xbe,0xe2,0x2e,0x40,0x9f,0x96,
+      24              :         0xe9,0x3d,0x7e,0x11,0x73,0x93,0x17,0x2a,
+      25              :         0xae,0x2d,0x8a,0x57,0x1e,0x03,0xac,0x9c,
+      26              :         0x9e,0xb7,0x6f,0xac,0x45,0xaf,0x8e,0x51,
+      27              :         0x30,0xc8,0x1c,0x46,0xa3,0x5c,0xe4,0x11,
+      28              :         0xe5,0xfb,0xc1,0x19,0x1a,0x0a,0x52,0xef,
+      29              :         0xf6,0x9f,0x24,0x45,0xdf,0x4f,0x9b,0x17,
+      30              :         0xad,0x2b,0x41,0x7b,0xe6,0x6c,0x37,0x10
+      31              :     };
+      32              : 
+      33            1 :     const uint8_t expected_ciphertext[64] = {
+      34              :         0x3b,0x3f,0xd9,0x2e,0xb7,0x2d,0xad,0x20,
+      35              :         0x33,0x34,0x49,0xf8,0xe8,0x3c,0xfb,0x4a,
+      36              :         0x77,0x89,0x50,0x8d,0x16,0x91,0x8f,0x03,
+      37              :         0xf5,0x3c,0x52,0xda,0xc5,0x4e,0xd8,0x25,
+      38              :         0x97,0x40,0x05,0x1e,0x9c,0x5f,0xec,0xf6,
+      39              :         0x43,0x44,0xf7,0xa8,0x22,0x60,0xed,0xcc,
+      40              :         0x30,0x4c,0x65,0x28,0xf6,0x59,0xc7,0x78,
+      41              :         0x66,0xa5,0x10,0xd9,0xc1,0xd6,0xae,0x5e
+      42              :     };
+      43              : 
+      44              :     uint8_t round_keys[176];
+      45              :     uint8_t sbox[256];
+      46            1 :     initialize_aes_sbox(sbox);
+      47            1 :     aes_key_expansion_128(key, round_keys, sbox);
+      48            1 :     struct aes_ctx ctx = { .round_keys = round_keys, .sbox = sbox, .key_len = 16};
+      49              : 
+      50            1 :     uint8_t ciphertext[64] = {0};
+      51            1 :     uint8_t decrypted[64] = {0};
+      52              : 
+      53              :     // Encrypt
+      54            1 :     aes_ofb_encrypt(plaintext, ciphertext, sizeof(plaintext), iv, &ctx);
+      55              : 
+      56            1 :     if (memcmp(ciphertext, expected_ciphertext, sizeof(ciphertext)) != 0) {
+      57            0 :         fprintf(stderr, "OFB encryption FAILED\n");
+      58            0 :         return 1;
+      59              :     }
+      60              : 
+      61              :     // Decrypt (same operation)
+      62            1 :     aes_ofb_decrypt(ciphertext, decrypted, sizeof(ciphertext), iv, &ctx);
+      63              : 
+      64            1 :     if (memcmp(decrypted, plaintext, sizeof(decrypted)) != 0) {
+      65            0 :         fprintf(stderr, "OFB decryption FAILED\n");
+      66            0 :         return 2;
+      67              :     }
+      68              : 
+      69            1 :     printf("OFB round-trip OK — plaintext recovered correctly.\n");
+      70              : 
+      71            1 :     printf("Ciphertext (hex): ");
+      72           65 :     for (size_t i = 0; i < sizeof(ciphertext); ++i) {
+      73           64 :         printf("%02x", ciphertext[i]);
+      74           64 :     }
+      75            1 :     printf("\n");
+      76              : 
+      77            1 :     return 0;
+      78            1 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_xts.c.func-c.html b/coverage-report/tests/test_xts.c.func-c.html new file mode 100644 index 0000000..3d44341 --- /dev/null +++ b/coverage-report/tests/test_xts.c.func-c.html @@ -0,0 +1,92 @@ + + + + + + + LCOV - coverage.info - tests/test_xts.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_xts.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:78.7 %4737
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
main1
test_roundtrip10
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_xts.c.func.html b/coverage-report/tests/test_xts.c.func.html new file mode 100644 index 0000000..7c541a4 --- /dev/null +++ b/coverage-report/tests/test_xts.c.func.html @@ -0,0 +1,92 @@ + + + + + + + LCOV - coverage.info - tests/test_xts.c - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_xts.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:78.7 %4737
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
main1
test_roundtrip10
+
+
+ + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/tests/test_xts.c.gcov.html b/coverage-report/tests/test_xts.c.gcov.html new file mode 100644 index 0000000..7b4b304 --- /dev/null +++ b/coverage-report/tests/test_xts.c.gcov.html @@ -0,0 +1,167 @@ + + + + + + + LCOV - coverage.info - tests/test_xts.c + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_xts.c (source / functions)CoverageTotalHit
Test:coverage.infoLines:78.7 %4737
Test Date:2025-10-19 19:06:58Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : /*
+       2              :  * Basic unit test for XTS module.
+       3              :  *
+       4              :  */
+       5              : 
+       6              : #include <stdio.h>
+       7              : #include <string.h>
+       8              : #include <stdint.h>
+       9              : #include "../include/xts.h"
+      10              : #include "../include/aes_wrapper.h"
+      11              : #include "../include/key_expansion_128.h"
+      12              : #include "../include/sbox.h"
+      13              : 
+      14              : static const uint8_t key1[16] = {
+      15              :     0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
+      16              :     0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F
+      17              : };
+      18              : static const uint8_t key2[16] = {
+      19              :     0x0F,0x0E,0x0D,0x0C,0x0B,0x0A,0x09,0x08,
+      20              :     0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00
+      21              : };
+      22              : 
+      23           10 : static int test_roundtrip(const uint8_t *pt, size_t len, uint64_t data_unit) {
+      24              :     uint8_t ct[1024], out[1024];
+      25           10 :     memset(ct, 0, sizeof(ct));
+      26           10 :     memset(out, 0, sizeof(out));
+      27              : 
+      28              :     uint8_t sbox[256];
+      29           10 :     initialize_aes_sbox(sbox);
+      30              : 
+      31              :     uint8_t round_keys1[176], round_keys2[176];
+      32           10 :     aes_key_expansion_128(key1, round_keys1, sbox);
+      33           10 :     aes_key_expansion_128(key2, round_keys2, sbox);
+      34              : 
+      35           10 :     struct aes_ctx ctx_k1 = { round_keys1, sbox, 16 };
+      36           10 :     struct aes_ctx ctx_k2 = { round_keys2, sbox, 16 };
+      37              : 
+      38           10 :     int r = xts_encrypt((aes_block_fn)aes_block_wrapper, &ctx_k1,
+      39              :                         (aes_block_fn)aes_block_wrapper, &ctx_k2,
+      40           10 :                         data_unit, pt, len, ct);
+      41           10 :     if (r != XTS_OK) return r;
+      42              : 
+      43            5 :     r = xts_decrypt((aes_block_fn)aes_block_wrapper_dec, &ctx_k1,
+      44              :                     (aes_block_fn)aes_block_wrapper, &ctx_k2,
+      45            5 :                     data_unit, ct, len, out);
+      46            5 :     if (r != XTS_OK) return r;
+      47              : 
+      48            5 :     if (memcmp(pt, out, len) != 0) return -1;
+      49            5 :     return 1;
+      50           10 : }
+      51              : 
+      52            1 : int main(void) {
+      53              :     uint8_t buf[256];
+      54          257 :     for (size_t i = 0; i < sizeof(buf); ++i) buf[i] = (uint8_t)i;
+      55              : 
+      56            1 :     size_t lengths[] = {1, 7, 15, 16, 17, 31, 32, 33, 48, 63, 64, 65, 128};
+      57            1 :     int all_ok = 1;
+      58              : 
+      59           14 :     for (size_t i = 0; i < sizeof(lengths)/sizeof(lengths[0]); ++i) {
+      60           13 :         size_t len = lengths[i];
+      61           13 :         uint64_t du = 42 + i;
+      62           13 :         printf("Test length=%zu, data_unit=%llu... ", len, (unsigned long long)du);
+      63              : 
+      64           13 :         if (len < 16) {
+      65            3 :             printf("SKIPPED (<16 bytes)\n");
+      66            3 :             continue;
+      67              :         }
+      68              : 
+      69           10 :         int r = test_roundtrip(buf, len, du);
+      70           10 :         if (r == 1) {
+      71           10 :             printf("OK\n");
+      72           10 :         } else if (r == XTS_ERR_INVALID) {
+      73            0 :             printf("INVALID LENGTH\n");
+      74            0 :             all_ok = 0;
+      75            0 :         } else if (r == -1) {
+      76            0 :             printf("ROUNDTRIP MISMATCH\n");
+      77            0 :             all_ok = 0;
+      78            0 :         } else {
+      79            0 :             printf("FAILED (code=%d)\n", r);
+      80            0 :             all_ok = 0;
+      81              :         }
+      82           10 :     }
+      83              : 
+      84            1 :     if (all_ok) {
+      85            1 :         printf("All XTS roundtrip tests passed.\n");
+      86            1 :         return 0;
+      87              :     } else {
+      88            0 :         printf("Some XTS roundtrip tests failed.\n");
+      89            0 :         return 2;
+      90              :     }
+      91            1 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.3.2-1
+
+ + + diff --git a/coverage-report/updown.png b/coverage-report/updown.png new file mode 100644 index 0000000000000000000000000000000000000000..aa56a238b3e6c435265250f9266cd1b8caba0f20 GIT binary patch literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^AT}Qd8;}%R+`Ae`*?77*hG?8mPH5^{)z4*}Q$iB}huR`+ literal 0 HcmV?d00001 diff --git a/coverage.info b/coverage.info new file mode 100644 index 0000000..89667ce --- /dev/null +++ b/coverage.info @@ -0,0 +1,1977 @@ +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/src/aes_128.c +FNL:0,11,15 +FNA:0,1748320,sub_bytes +FNL:1,122,134 +FNA:1,26496,mul +FNL:2,137,147 +FNA:2,414,inv_mix_columns +FNL:3,149,153 +FNA:3,460,inv_sub_bytes +FNL:4,155,187 +FNA:4,46,aes128_decrypt_block +FNL:5,17,41 +FNA:5,1748320,shift_rows +FNL:6,44,45 +FNA:6,25175808,xtime +FNL:7,48,62 +FNA:7,1573488,mix_columns +FNL:8,5,9 +FNA:8,1923658,add_round_key +FNL:9,64,92 +FNA:9,174832,aes128_encrypt_block +FNL:10,95,119 +FNA:10,460,inv_shift_rows +FNF:11 +FNH:11 +DA:5,1923658 +DA:6,32702186 +DA:7,30778528 +DA:8,30778528 +DA:9,1923658 +DA:11,1748320 +DA:12,29721440 +DA:13,27973120 +DA:14,27973120 +DA:15,1748320 +DA:17,1748320 +DA:21,1748320 +DA:22,1748320 +DA:23,1748320 +DA:24,1748320 +DA:25,1748320 +DA:28,1748320 +DA:29,1748320 +DA:30,1748320 +DA:31,1748320 +DA:32,1748320 +DA:33,1748320 +DA:36,1748320 +DA:37,1748320 +DA:38,1748320 +DA:39,1748320 +DA:40,1748320 +DA:41,1748320 +DA:44,25175808 +DA:45,25175808 +DA:48,1573488 +DA:49,7867440 +DA:50,6293952 +DA:51,6293952 +DA:52,6293952 +DA:53,6293952 +DA:54,6293952 +DA:55,6293952 +DA:57,6293952 +DA:58,6293952 +DA:59,6293952 +DA:60,6293952 +DA:61,6293952 +DA:62,1573488 +DA:64,174832 +DA:68,2972144 +DA:69,2797312 +DA:70,2797312 +DA:73,174832 +DA:76,1748320 +DA:77,1573488 +DA:78,1573488 +DA:79,1573488 +DA:80,1573488 +DA:81,1573488 +DA:84,174832 +DA:85,174832 +DA:86,174832 +DA:89,2972144 +DA:90,2797312 +DA:91,2797312 +DA:92,174832 +DA:95,460 +DA:99,460 +DA:100,460 +DA:101,460 +DA:102,460 +DA:103,460 +DA:106,460 +DA:107,460 +DA:108,460 +DA:109,460 +DA:110,460 +DA:111,460 +DA:114,460 +DA:115,460 +DA:116,460 +DA:117,460 +DA:118,460 +DA:119,460 +DA:122,26496 +DA:123,26496 +DA:125,238464 +DA:126,211968 +DA:127,72864 +DA:128,211968 +DA:129,211968 +DA:130,211968 +DA:131,105888 +DA:132,211968 +DA:133,211968 +DA:134,26496 +DA:137,414 +DA:138,2070 +DA:139,1656 +DA:140,1656 +DA:142,1656 +DA:143,1656 +DA:144,1656 +DA:145,1656 +DA:146,1656 +DA:147,414 +DA:149,460 +DA:150,7820 +DA:151,7360 +DA:152,7360 +DA:153,460 +DA:155,46 +DA:160,46 +DA:163,782 +DA:164,736 +DA:165,736 +DA:168,46 +DA:171,460 +DA:172,414 +DA:173,414 +DA:174,414 +DA:175,414 +DA:176,414 +DA:179,46 +DA:180,46 +DA:181,46 +DA:184,782 +DA:185,736 +DA:186,736 +DA:187,46 +LF:126 +LH:126 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/src/aes_192.c +FNL:0,11,15 +FNA:0,2101704,sub_bytes +FNL:1,122,134 +FNA:1,2816,mul +FNL:2,137,147 +FNA:2,44,inv_mix_columns +FNL:3,149,153 +FNA:3,48,inv_sub_bytes +FNL:4,156,189 +FNA:4,4,aes192_decrypt_block +FNL:5,17,41 +FNA:5,2101704,shift_rows +FNL:6,43,44 +FNA:6,30824992,xtime +FNL:7,47,61 +FNA:7,1926562,mix_columns +FNL:8,5,9 +FNA:8,2276898,add_round_key +FNL:9,64,93 +FNA:9,175142,aes192_encrypt_block +FNL:10,96,120 +FNA:10,48,inv_shift_rows +FNF:11 +FNH:11 +DA:5,2276898 +DA:6,38707266 +DA:7,36430368 +DA:8,36430368 +DA:9,2276898 +DA:11,2101704 +DA:12,35728968 +DA:13,33627264 +DA:14,33627264 +DA:15,2101704 +DA:17,2101704 +DA:21,2101704 +DA:22,2101704 +DA:23,2101704 +DA:24,2101704 +DA:25,2101704 +DA:28,2101704 +DA:29,2101704 +DA:30,2101704 +DA:31,2101704 +DA:32,2101704 +DA:33,2101704 +DA:36,2101704 +DA:37,2101704 +DA:38,2101704 +DA:39,2101704 +DA:40,2101704 +DA:41,2101704 +DA:43,30824992 +DA:44,30824992 +DA:47,1926562 +DA:48,9632810 +DA:49,7706248 +DA:50,7706248 +DA:51,7706248 +DA:52,7706248 +DA:53,7706248 +DA:54,7706248 +DA:56,7706248 +DA:57,7706248 +DA:58,7706248 +DA:59,7706248 +DA:60,7706248 +DA:61,1926562 +DA:64,175142 +DA:69,2977414 +DA:70,2802272 +DA:71,2802272 +DA:74,175142 +DA:77,2101704 +DA:78,1926562 +DA:79,1926562 +DA:80,1926562 +DA:81,1926562 +DA:82,1926562 +DA:85,175142 +DA:86,175142 +DA:87,175142 +DA:90,2977414 +DA:91,2802272 +DA:92,2802272 +DA:93,175142 +DA:96,48 +DA:100,48 +DA:101,48 +DA:102,48 +DA:103,48 +DA:104,48 +DA:107,48 +DA:108,48 +DA:109,48 +DA:110,48 +DA:111,48 +DA:112,48 +DA:115,48 +DA:116,48 +DA:117,48 +DA:118,48 +DA:119,48 +DA:120,48 +DA:122,2816 +DA:123,2816 +DA:125,25344 +DA:126,22528 +DA:127,7744 +DA:128,22528 +DA:129,22528 +DA:130,22528 +DA:131,11152 +DA:132,22528 +DA:133,22528 +DA:134,2816 +DA:137,44 +DA:138,220 +DA:139,176 +DA:140,176 +DA:142,176 +DA:143,176 +DA:144,176 +DA:145,176 +DA:146,176 +DA:147,44 +DA:149,48 +DA:150,816 +DA:151,768 +DA:152,768 +DA:153,48 +DA:156,4 +DA:162,4 +DA:165,68 +DA:166,64 +DA:167,64 +DA:170,4 +DA:173,48 +DA:174,44 +DA:175,44 +DA:176,44 +DA:177,44 +DA:178,44 +DA:181,4 +DA:182,4 +DA:183,4 +DA:186,68 +DA:187,64 +DA:188,64 +DA:189,4 +LF:126 +LH:126 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/src/aes_256.c +FNL:0,102,106 +FNA:0,56,inv_sub_bytes +FNL:1,108,130 +FNA:1,56,inv_shift_rows +FNL:2,132,142 +FNA:2,52,inv_mix_columns +FNL:3,144,166 +FNA:3,4,aes256_decrypt_block +FNL:4,18,27 +FNA:4,72665216,gf_mul +FNL:5,30,34 +FNA:5,2445352,sub_bytes +FNL:6,36,58 +FNA:6,2445352,shift_rows +FNL:7,60,70 +FNA:7,2270684,mix_columns +FNL:8,72,76 +FNA:8,2620080,add_round_key +FNL:9,78,98 +FNA:9,174668,aes256_encrypt_block +FNF:10 +FNH:10 +DA:18,72665216 +DA:19,72665216 +DA:20,653986944 +DA:21,581321728 +DA:22,581321728 +DA:23,581321728 +DA:24,581321728 +DA:25,581321728 +DA:26,581321728 +DA:27,72665216 +DA:30,2445352 +DA:31,41570984 +DA:32,39125632 +DA:33,39125632 +DA:34,2445352 +DA:36,2445352 +DA:38,2445352 +DA:39,2445352 +DA:40,2445352 +DA:41,2445352 +DA:42,2445352 +DA:45,2445352 +DA:46,2445352 +DA:47,2445352 +DA:48,2445352 +DA:49,2445352 +DA:50,2445352 +DA:53,2445352 +DA:54,2445352 +DA:55,2445352 +DA:56,2445352 +DA:57,2445352 +DA:58,2445352 +DA:60,2270684 +DA:61,11353420 +DA:62,9082736 +DA:63,9082736 +DA:65,9082736 +DA:66,9082736 +DA:67,9082736 +DA:68,9082736 +DA:69,9082736 +DA:70,2270684 +DA:72,2620080 +DA:73,44541360 +DA:74,41921280 +DA:75,41921280 +DA:76,2620080 +DA:78,174668 +DA:81,174668 +DA:83,174668 +DA:85,2445352 +DA:86,2270684 +DA:87,2270684 +DA:88,2270684 +DA:89,2270684 +DA:90,2270684 +DA:93,174668 +DA:94,174668 +DA:95,174668 +DA:97,174668 +DA:98,174668 +DA:102,56 +DA:103,952 +DA:104,896 +DA:105,896 +DA:106,56 +DA:108,56 +DA:110,56 +DA:111,56 +DA:112,56 +DA:113,56 +DA:114,56 +DA:117,56 +DA:118,56 +DA:119,56 +DA:120,56 +DA:121,56 +DA:122,56 +DA:125,56 +DA:126,56 +DA:127,56 +DA:128,56 +DA:129,56 +DA:130,56 +DA:132,52 +DA:133,260 +DA:134,208 +DA:135,208 +DA:137,208 +DA:138,208 +DA:139,208 +DA:140,208 +DA:141,208 +DA:142,52 +DA:144,4 +DA:148,4 +DA:150,4 +DA:152,4 +DA:154,56 +DA:155,52 +DA:156,52 +DA:157,52 +DA:158,52 +DA:159,52 +DA:161,4 +DA:162,4 +DA:163,4 +DA:165,4 +DA:166,4 +LF:110 +LH:110 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/src/aes_wrapper.c +FNL:0,17,27 +FNA:0,524640,aes_block_wrapper +FNL:1,30,40 +FNA:1,44,aes_block_wrapper_dec +FNF:2 +FNH:2 +DA:17,524640 +DA:18,524640 +DA:20,524640 +DA:21,174830 +DA:22,524640 +DA:23,175138 +DA:24,349810 +DA:25,174664 +DA:26,174664 +DA:27,524640 +DA:30,44 +DA:31,44 +DA:33,44 +DA:34,44 +DA:35,44 +DA:36,0 +DA:37,0 +DA:38,0 +DA:39,0 +DA:40,44 +LF:20 +LH:16 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/src/cbc.c +FNL:0,19,29 +FNA:0,2,pkcs7_unpad +FNL:1,32,34 +FNA:1,12,xor_block +FNL:2,36,71 +FNA:2,2,aes_cbc_encrypt +FNL:3,6,13 +FNA:3,2,pkcs7_pad +FNL:4,73,104 +FNA:4,2,aes_cbc_decrypt +FNF:5 +FNH:5 +DA:6,2 +DA:7,2 +DA:8,2 +DA:10,2 +DA:12,22 +DA:13,2 +DA:19,2 +DA:20,2 +DA:21,2 +DA:22,2 +DA:24,22 +DA:25,20 +DA:26,20 +DA:27,2 +DA:28,2 +DA:29,2 +DA:32,12 +DA:33,204 +DA:34,12 +DA:36,2 +DA:41,2 +DA:44,2 +DA:45,2 +DA:47,2 +DA:48,2 +DA:51,2 +DA:52,2 +DA:55,2 +DA:57,8 +DA:59,6 +DA:60,6 +DA:62,6 +DA:63,6 +DA:65,2 +DA:67,2 +DA:68,2 +DA:69,2 +DA:70,2 +DA:71,2 +DA:73,2 +DA:78,2 +DA:79,2 +DA:82,2 +DA:84,8 +DA:86,6 +DA:87,6 +DA:88,6 +DA:89,6 +DA:92,2 +DA:93,2 +DA:94,2 +DA:96,0 +DA:97,0 +DA:98,0 +DA:101,2 +DA:102,2 +DA:103,2 +DA:104,2 +LF:58 +LH:55 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/src/ccm.c +FNL:0,10,14 +FNA:0,60,xor_block +FNL:1,148,247 +FNA:1,6,ccm_decrypt +FNL:2,17,32 +FNA:2,12,build_b0 +FNL:3,35,40 +FNA:3,18,build_ctr0 +FNL:4,43,62 +FNA:4,12,format_aad +FNL:5,64,146 +FNA:5,6,ccm_encrypt +FNF:6 +FNH:6 +DA:10,60 +DA:13,1020 +DA:14,60 +DA:17,12 +DA:19,12 +DA:20,12 +DA:21,12 +DA:22,12 +DA:23,12 +DA:24,12 +DA:26,12 +DA:29,84 +DA:30,72 +DA:31,72 +DA:32,12 +DA:35,18 +DA:36,18 +DA:37,18 +DA:38,18 +DA:39,18 +DA:40,18 +DA:43,12 +DA:44,12 +DA:48,12 +DA:50,12 +DA:51,12 +DA:52,12 +DA:53,12 +DA:56,12 +DA:57,12 +DA:59,12 +DA:60,12 +DA:61,12 +DA:62,12 +DA:64,6 +DA:72,6 +DA:73,6 +DA:74,6 +DA:75,6 +DA:83,6 +DA:86,6 +DA:87,6 +DA:88,6 +DA:91,6 +DA:92,6 +DA:93,6 +DA:94,6 +DA:95,6 +DA:96,6 +DA:97,6 +DA:98,0 +DA:99,0 +DA:102,6 +DA:103,6 +DA:104,6 +DA:105,6 +DA:106,6 +DA:107,6 +DA:108,6 +DA:109,6 +DA:110,6 +DA:111,6 +DA:114,6 +DA:115,30 +DA:117,24 +DA:118,24 +DA:119,24 +DA:123,6 +DA:125,6 +DA:128,6 +DA:129,6 +DA:130,6 +DA:131,6 +DA:135,6 +DA:136,6 +DA:137,6 +DA:139,6 +DA:140,6 +DA:145,6 +DA:146,6 +DA:148,6 +DA:156,6 +DA:157,6 +DA:158,6 +DA:159,6 +DA:161,6 +DA:169,6 +DA:171,6 +DA:172,6 +DA:173,6 +DA:174,6 +DA:178,6 +DA:180,6 +DA:181,6 +DA:182,6 +DA:184,6 +DA:185,6 +DA:186,6 +DA:187,6 +DA:188,6 +DA:190,6 +DA:191,6 +DA:192,0 +DA:193,0 +DA:196,6 +DA:197,6 +DA:198,6 +DA:199,6 +DA:200,6 +DA:201,6 +DA:202,6 +DA:203,6 +DA:204,6 +DA:205,6 +DA:207,6 +DA:208,30 +DA:210,24 +DA:211,24 +DA:212,24 +DA:215,6 +DA:217,6 +DA:220,6 +DA:222,6 +DA:223,6 +DA:225,42 +DA:226,36 +DA:227,36 +DA:229,6 +DA:230,6 +DA:232,6 +DA:234,0 +DA:238,0 +DA:241,6 +DA:246,6 +DA:247,6 +LF:135 +LH:129 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/src/cfb.c +FNL:0,31,52 +FNA:0,2,aes_cfb_decrypt +FNL:1,8,29 +FNA:1,2,aes_cfb_encrypt +FNF:2 +FNH:2 +DA:8,2 +DA:18,2 +DA:19,2 +DA:21,44 +DA:22,42 +DA:23,42 +DA:25,42 +DA:26,2 +DA:27,2 +DA:28,42 +DA:29,2 +DA:31,2 +DA:41,2 +DA:42,2 +DA:44,44 +DA:45,42 +DA:46,42 +DA:48,42 +DA:49,2 +DA:50,2 +DA:51,42 +DA:52,2 +LF:22 +LH:22 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/src/cmac.c +FNL:0,12,19 +FNA:0,16,shift_left +FNL:1,22,42 +FNA:1,8,generate_subkeys +FNL:2,45,49 +FNA:2,4,pad_block +FNL:3,51,99 +FNA:3,8,aes_cmac +FNL:4,7,9 +FNA:4,34,xor_block +FNF:5 +FNH:5 +DA:7,34 +DA:8,578 +DA:9,34 +DA:12,16 +DA:13,16 +DA:14,272 +DA:15,256 +DA:16,256 +DA:17,256 +DA:18,256 +DA:19,16 +DA:22,8 +DA:23,8 +DA:24,8 +DA:26,8 +DA:28,8 +DA:32,8 +DA:33,8 +DA:34,0 +DA:35,0 +DA:38,8 +DA:39,8 +DA:40,8 +DA:41,8 +DA:42,8 +DA:45,4 +DA:46,4 +DA:47,4 +DA:48,4 +DA:49,4 +DA:51,8 +DA:53,8 +DA:56,8 +DA:57,8 +DA:61,8 +DA:64,8 +DA:67,18 +DA:69,10 +DA:70,10 +DA:71,10 +DA:76,8 +DA:79,4 +DA:80,4 +DA:81,4 +DA:83,4 +DA:85,4 +DA:87,2 +DA:88,2 +DA:90,2 +DA:92,4 +DA:97,8 +DA:98,8 +DA:99,8 +LF:53 +LH:51 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/src/ctr.c +FNL:0,18,50 +FNA:0,165200,aes_ctr_crypt +FNL:1,9,16 +FNA:1,392060,ctr_increment +FNF:2 +FNH:2 +DA:9,392060 +DA:11,393010 +DA:12,393010 +DA:13,392060 +DA:15,950 +DA:16,392060 +DA:18,165200 +DA:24,165200 +DA:27,165200 +DA:29,392064 +DA:31,226864 +DA:33,226864 +DA:34,226864 +DA:35,56668 +DA:38,3401664 +DA:39,3174800 +DA:40,3174800 +DA:43,226864 +DA:44,226864 +DA:48,165200 +DA:49,165200 +DA:50,165200 +LF:22 +LH:22 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/src/ecb.c +FNL:0,13,20 +FNA:0,2,aes_ecb_decrypt +FNL:1,4,11 +FNA:1,2,aes_ecb_encrypt +FNF:2 +FNH:2 +DA:4,2 +DA:7,2 +DA:8,4 +DA:9,2 +DA:10,2 +DA:11,2 +DA:13,2 +DA:16,2 +DA:17,4 +DA:18,2 +DA:19,2 +DA:20,2 +LF:12 +LH:12 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/src/gcm.c +FNL:0,118,136 +FNA:0,108602,gcm_encrypt +FNL:1,12,14 +FNA:1,1305382,xor_block +FNL:2,139,166 +FNA:2,80398,gcm_decrypt +FNL:3,17,34 +FNA:3,1305382,ghash_mult +FNL:4,37,78 +FNA:4,261382,ghash +FNL:5,81,115 +FNA:5,108602,gcm_init +FNF:6 +FNH:6 +DA:12,1305382 +DA:13,22191494 +DA:14,1305382 +DA:17,1305382 +DA:18,1305382 +DA:19,1305382 +DA:21,22191494 +DA:22,187975008 +DA:23,1456153344 +DA:24,167088896 +DA:25,2840511232 +DA:26,2673422336 +DA:27,2673422336 +DA:28,2673422336 +DA:29,2673422336 +DA:30,167088896 +DA:31,167088896 +DA:32,20886112 +DA:33,1305382 +DA:34,1305382 +DA:37,261382 +DA:39,261382 +DA:43,639382 +DA:44,378000 +DA:45,378000 +DA:46,378000 +DA:47,261382 +DA:48,75600 +DA:49,75600 +DA:50,75600 +DA:51,75600 +DA:52,75600 +DA:55,749472 +DA:56,488090 +DA:57,488090 +DA:58,488090 +DA:59,261382 +DA:60,102310 +DA:61,102310 +DA:62,102310 +DA:63,102310 +DA:64,102310 +DA:67,261382 +DA:68,261382 +DA:69,261382 +DA:70,2352438 +DA:71,2091056 +DA:72,2091056 +DA:73,2091056 +DA:74,261382 +DA:75,261382 +DA:77,261382 +DA:78,261382 +DA:81,108602 +DA:84,108602 +DA:86,108602 +DA:87,36228 +DA:88,108602 +DA:89,36142 +DA:90,72374 +DA:91,36232 +DA:92,36232 +DA:93,0 +DA:96,108602 +DA:97,108602 +DA:98,108602 +DA:101,108602 +DA:102,108602 +DA:105,108602 +DA:106,36220 +DA:107,36220 +DA:108,36220 +DA:109,36220 +DA:111,72382 +DA:114,108602 +DA:115,108602 +DA:118,108602 +DA:122,108602 +DA:124,108602 +DA:125,108602 +DA:127,108602 +DA:130,108602 +DA:133,108602 +DA:135,1380706 +DA:136,108602 +DA:139,80398 +DA:144,80398 +DA:147,80398 +DA:150,80398 +DA:153,1022294 +DA:155,80398 +DA:156,23816 +DA:157,23816 +DA:160,56582 +DA:161,56582 +DA:163,56582 +DA:165,56582 +DA:166,80398 +LF:98 +LH:97 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/src/gmac.c +FNL:0,12,18 +FNA:0,37918,gmac_compute +FNL:1,5,8 +FNA:1,37918,gmac_init +FNF:2 +FNH:2 +DA:5,37918 +DA:8,37918 +DA:12,37918 +DA:17,37918 +DA:18,37918 +LF:5 +LH:5 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/src/key_expansion_128.c +FNL:0,10,49 +FNA:0,36284,aes_key_expansion_128 +FNF:1 +FNH:1 +DA:10,36284 +DA:12,616828 +DA:13,580544 +DA:14,580544 +DA:17,36284 +DA:18,36284 +DA:20,1487644 +DA:22,7256800 +DA:23,5805440 +DA:24,5805440 +DA:26,1451360 +DA:28,362840 +DA:29,362840 +DA:30,362840 +DA:31,362840 +DA:32,362840 +DA:35,1814200 +DA:36,1451360 +DA:37,1451360 +DA:40,362840 +DA:41,362840 +DA:44,7256800 +DA:45,5805440 +DA:46,5805440 +DA:47,5805440 +DA:49,36284 +LF:26 +LH:26 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/src/key_expansion_192.c +FNL:0,8,54 +FNA:0,36146,aes_key_expansion_192 +FNF:1 +FNH:1 +DA:8,36146 +DA:9,36146 +DA:12,903650 +DA:13,867504 +DA:14,867504 +DA:19,36146 +DA:20,36146 +DA:22,1698862 +DA:26,8313580 +DA:27,6650864 +DA:28,6650864 +DA:31,1662716 +DA:33,289168 +DA:34,289168 +DA:35,289168 +DA:36,289168 +DA:37,289168 +DA:40,1445840 +DA:41,1156672 +DA:42,1156672 +DA:45,289168 +DA:46,289168 +DA:49,8313580 +DA:50,6650864 +DA:51,6650864 +DA:52,6650864 +DA:54,36146 +LF:27 +LH:27 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/src/key_expansion_256.c +FNL:0,15,21 +FNA:0,253652,rot_word +FNL:1,24,28 +FNA:1,471068,sub_word +FNL:2,30,69 +FNA:2,36236,aes_key_expansion_256 +FNF:3 +FNH:3 +DA:15,253652 +DA:16,253652 +DA:17,253652 +DA:18,253652 +DA:19,253652 +DA:20,253652 +DA:21,253652 +DA:24,471068 +DA:25,2355340 +DA:26,1884272 +DA:27,1884272 +DA:28,471068 +DA:30,36236 +DA:34,36236 +DA:35,36236 +DA:36,36236 +DA:39,1195788 +DA:40,1159552 +DA:41,1159552 +DA:44,36236 +DA:45,36236 +DA:47,1920508 +DA:49,9421360 +DA:50,7537088 +DA:51,7537088 +DA:53,1884272 +DA:55,1884272 +DA:56,253652 +DA:57,253652 +DA:58,253652 +DA:59,1884272 +DA:60,217416 +DA:61,217416 +DA:64,9421360 +DA:65,7537088 +DA:66,7537088 +DA:67,7537088 +DA:69,36236 +LF:38 +LH:38 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/src/ofb.c +FNL:0,35,44 +FNA:0,2,aes_ofb_decrypt +FNL:1,5,33 +FNA:1,4,aes_ofb_encrypt +FNF:2 +FNH:2 +DA:5,4 +DA:14,4 +DA:16,4 +DA:18,20 +DA:19,16 +DA:21,16 +DA:22,16 +DA:24,272 +DA:25,256 +DA:27,16 +DA:28,16 +DA:31,4 +DA:32,4 +DA:33,4 +DA:35,2 +DA:43,2 +DA:44,2 +LF:17 +LH:17 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/src/sbox.c +FNL:0,25,29 +FNA:0,54,initialize_inverse_sbox +FNL:1,7,23 +FNA:1,108642,initialize_aes_sbox +FNF:2 +FNH:2 +DA:7,108642 +DA:8,108642 +DA:10,108642 +DA:11,27703710 +DA:13,27703710 +DA:14,27703710 +DA:15,27703710 +DA:16,27703710 +DA:18,27703710 +DA:19,27703710 +DA:20,27703710 +DA:22,108642 +DA:23,108642 +DA:25,54 +DA:26,13878 +DA:27,13824 +DA:28,13824 +DA:29,54 +LF:18 +LH:18 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/src/xts.c +FNL:0,16,24 +FNA:0,72,multiply_by_x +FNL:1,30,36 +FNA:1,20,encode_data_unit_be64 +FNL:2,41,64 +FNA:2,20,xts_encrypt +FNL:3,69,92 +FNA:3,10,xts_decrypt +FNL:4,8,10 +FNA:4,144,xor16 +FNF:5 +FNH:5 +DA:8,144 +DA:9,2448 +DA:10,144 +DA:16,72 +DA:17,72 +DA:18,1224 +DA:19,1152 +DA:20,1152 +DA:21,1152 +DA:22,1152 +DA:23,72 +DA:24,72 +DA:30,20 +DA:31,20 +DA:32,180 +DA:33,160 +DA:34,160 +DA:35,160 +DA:36,20 +DA:41,20 +DA:46,20 +DA:47,20 +DA:49,10 +DA:52,10 +DA:53,10 +DA:55,46 +DA:57,36 +DA:58,36 +DA:59,36 +DA:60,36 +DA:61,36 +DA:63,10 +DA:64,20 +DA:69,10 +DA:74,10 +DA:75,10 +DA:77,10 +DA:80,10 +DA:81,10 +DA:83,46 +DA:85,36 +DA:86,36 +DA:87,36 +DA:88,36 +DA:89,36 +DA:91,10 +DA:92,10 +LF:47 +LH:47 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/tests/test_aes_128.c +FNL:0,8,32 +FNA:0,1,main +FNF:1 +FNH:1 +DA:8,1 +DA:9,1 +DA:12,1 +DA:15,1 +DA:16,1 +DA:18,1 +DA:19,1 +DA:21,1 +DA:22,1 +DA:23,1 +DA:24,0 +DA:27,1 +DA:28,1 +DA:29,17 +DA:30,1 +DA:32,1 +LF:16 +LH:15 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/tests/test_aes_192.c +FNL:0,8,82 +FNA:0,1,main +FNF:1 +FNH:1 +DA:8,1 +DA:10,1 +DA:13,1 +DA:16,1 +DA:17,1 +DA:19,1 +DA:20,1 +DA:21,1 +DA:23,1 +DA:24,1 +DA:26,1 +DA:27,1 +DA:28,1 +DA:29,0 +DA:30,0 +DA:33,1 +DA:34,1 +DA:35,17 +DA:36,1 +DA:37,1 +DA:40,1 +DA:41,1 +DA:46,1 +DA:50,1 +DA:56,1 +DA:57,1 +DA:58,1 +DA:60,1 +DA:61,17 +DA:62,1 +DA:63,17 +DA:64,1 +DA:66,1 +DA:67,1 +DA:68,1 +DA:69,0 +DA:70,0 +DA:73,1 +DA:74,1 +DA:75,1 +DA:76,0 +DA:77,0 +DA:80,1 +DA:81,1 +DA:82,1 +LF:45 +LH:39 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/tests/test_aes_256.c +FNL:0,8,86 +FNA:0,1,main +FNF:1 +FNH:1 +DA:8,1 +DA:10,1 +DA:16,1 +DA:19,1 +DA:20,1 +DA:22,1 +DA:23,1 +DA:24,1 +DA:26,1 +DA:27,1 +DA:29,1 +DA:30,1 +DA:31,1 +DA:32,0 +DA:33,0 +DA:36,1 +DA:37,1 +DA:38,17 +DA:39,1 +DA:40,1 +DA:43,1 +DA:44,1 +DA:50,1 +DA:54,1 +DA:60,1 +DA:61,1 +DA:62,1 +DA:64,1 +DA:65,17 +DA:66,1 +DA:67,17 +DA:68,1 +DA:70,1 +DA:71,1 +DA:72,1 +DA:73,0 +DA:74,0 +DA:77,1 +DA:78,1 +DA:79,1 +DA:80,0 +DA:81,0 +DA:84,1 +DA:85,1 +DA:86,1 +LF:45 +LH:39 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/tests/test_cbc.c +FNL:0,12,15 +FNA:0,1,print_hex +FNL:1,17,59 +FNA:1,1,main +FNF:2 +FNH:2 +DA:12,1 +DA:13,49 +DA:14,1 +DA:15,1 +DA:17,1 +DA:18,1 +DA:22,1 +DA:23,1 +DA:25,1 +DA:27,1 +DA:28,1 +DA:30,1 +DA:31,1 +DA:32,1 +DA:33,1 +DA:35,1 +DA:38,1 +DA:39,0 +DA:40,0 +DA:43,1 +DA:44,0 +DA:45,0 +DA:48,1 +DA:49,0 +DA:50,0 +DA:53,1 +DA:54,1 +DA:55,1 +DA:56,1 +DA:58,1 +DA:59,1 +LF:31 +LH:25 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/tests/test_ccm.c +FNL:0,10,56 +FNA:0,3,run_vector +FNL:1,58,98 +FNA:1,1,main +FNF:2 +FNH:2 +DA:10,3 +DA:17,3 +DA:18,3 +DA:20,3 +DA:21,3 +DA:23,3 +DA:24,3 +DA:25,3 +DA:26,3 +DA:27,3 +DA:30,3 +DA:32,3 +DA:33,0 +DA:36,3 +DA:37,3 +DA:39,3 +DA:40,3 +DA:42,3 +DA:43,3 +DA:44,3 +DA:45,3 +DA:46,3 +DA:49,3 +DA:51,3 +DA:52,0 +DA:55,3 +DA:56,3 +DA:58,1 +DA:62,1 +DA:63,1 +DA:65,1 +DA:67,1 +DA:69,1 +DA:70,1 +DA:75,0 +DA:77,1 +DA:78,1 +DA:83,0 +DA:85,1 +DA:86,1 +DA:91,0 +DA:93,1 +DA:94,1 +DA:96,0 +DA:98,1 +LF:45 +LH:39 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/tests/test_cfb.c +FNL:0,9,39 +FNA:0,1,main +FNF:1 +FNH:1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:15,1 +DA:16,1 +DA:22,1 +DA:25,1 +DA:27,1 +DA:29,1 +DA:30,1 +DA:32,1 +DA:33,1 +DA:34,1 +DA:36,0 +DA:37,0 +DA:39,1 +LF:18 +LH:16 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/tests/test_cmac.c +FNL:0,12,20 +FNA:0,4,check_result +FNL:1,22,73 +FNA:1,1,main +FNF:2 +FNH:2 +DA:12,4 +DA:13,4 +DA:14,4 +DA:15,4 +DA:17,0 +DA:18,0 +DA:20,4 +DA:22,1 +DA:23,1 +DA:29,1 +DA:30,1 +DA:31,1 +DA:38,3 +DA:39,2 +DA:40,1 +DA:42,2 +DA:44,1 +DA:46,2 +DA:51,1 +DA:53,2 +DA:61,1 +DA:65,1 +DA:67,5 +DA:68,4 +DA:69,4 +DA:70,4 +DA:71,4 +DA:73,1 +LF:28 +LH:26 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/tests/test_ctr.c +FNL:0,12,47 +FNA:0,1,main +FNF:1 +FNH:1 +DA:12,1 +DA:13,1 +DA:17,1 +DA:19,1 +DA:21,1 +DA:23,1 +DA:24,1 +DA:26,1 +DA:27,1 +DA:29,1 +DA:32,1 +DA:33,1 +DA:35,1 +DA:36,0 +DA:37,0 +DA:40,1 +DA:41,1 +DA:42,1 +DA:43,45 +DA:44,1 +DA:46,1 +DA:47,1 +LF:22 +LH:20 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/tests/test_ecb.c +FNL:0,11,66 +FNA:0,1,main +FNF:1 +FNH:1 +DA:11,1 +DA:13,1 +DA:18,1 +DA:23,1 +DA:30,1 +DA:31,1 +DA:33,1 +DA:35,1 +DA:36,1 +DA:39,1 +DA:42,1 +DA:45,1 +DA:46,0 +DA:47,0 +DA:51,1 +DA:52,0 +DA:53,0 +DA:56,1 +DA:57,1 +DA:58,17 +DA:59,1 +DA:61,1 +DA:62,17 +DA:63,1 +DA:65,1 +DA:66,1 +LF:26 +LH:22 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/tests/test_gcm.c +FNL:0,103,107 +FNA:0,0,log_hex +FNL:1,109,202 +FNA:1,1,main +FNL:2,20,23 +FNA:2,7404562,hex_to_byte +FNL:3,27,33 +FNA:3,444180,strip_trailing +FNL:4,36,47 +FNA:4,271592,parse_hex +FNL:5,51,100 +FNA:5,47256,parse_vector +FNF:6 +FNH:5 +DA:20,7404562 +DA:21,7404562 +DA:22,7404562 +DA:23,7404562 +DA:27,444180 +DA:28,444180 +DA:29,1358491 +DA:30,914311 +DA:31,914311 +DA:33,444180 +DA:36,271592 +DA:37,271592 +DA:38,271592 +DA:40,7676154 +DA:41,7404562 +DA:42,7404562 +DA:43,7404562 +DA:44,7404562 +DA:45,7404562 +DA:46,7404562 +DA:47,271592 +DA:51,47256 +DA:53,47256 +DA:55,47256 +DA:57,444192 +DA:58,444180 +DA:59,444180 +DA:61,393744 +DA:62,11908 +DA:63,11908 +DA:66,381836 +DA:67,381836 +DA:69,381836 +DA:70,381836 +DA:71,381836 +DA:73,381836 +DA:74,381836 +DA:75,763672 +DA:76,737721 +DA:78,381836 +DA:79,47250 +DA:80,47244 +DA:81,47244 +DA:83,334592 +DA:84,47250 +DA:85,47250 +DA:86,334586 +DA:87,47250 +DA:88,287336 +DA:89,35342 +DA:90,240086 +DA:91,47250 +DA:92,204744 +DA:93,47250 +DA:94,157494 +DA:95,47250 +DA:96,47250 +DA:99,12 +DA:100,47256 +DA:103,0 +DA:104,0 +DA:105,0 +DA:106,0 +DA:107,0 +DA:109,1 +DA:110,1 +DA:121,1 +DA:123,1 +DA:124,1 +DA:126,7 +DA:127,6 +DA:128,6 +DA:130,6 +DA:132,47256 +DA:133,47250 +DA:134,47250 +DA:136,47250 +DA:138,11908 +DA:139,11908 +DA:140,11908 +DA:141,11908 +DA:142,11908 +DA:143,11908 +DA:146,35342 +DA:147,0 +DA:148,0 +DA:149,0 +DA:152,35342 +DA:155,35342 +DA:157,35342 +DA:158,35342 +DA:159,35342 +DA:162,35342 +DA:163,28291 +DA:164,0 +DA:165,28291 +DA:166,0 +DA:167,28291 +DA:169,35342 +DA:171,0 +DA:172,0 +DA:173,0 +DA:174,0 +DA:175,0 +DA:176,0 +DA:177,0 +DA:178,0 +DA:179,0 +DA:180,0 +DA:181,0 +DA:182,0 +DA:183,0 +DA:184,35342 +DA:185,35342 +DA:189,6 +DA:190,6 +DA:191,6 +DA:192,6 +DA:193,6 +DA:195,1 +DA:197,1 +DA:198,1 +DA:199,1 +DA:201,1 +DA:202,1 +LF:125 +LH:102 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/tests/test_gmac.c +FNL:0,103,107 +FNA:0,0,log_hex +FNL:1,109,194 +FNA:1,1,main +FNL:2,21,24 +FNA:2,5552550,hex_to_byte +FNL:3,28,34 +FNA:3,444180,strip_trailing +FNL:4,37,48 +FNA:4,224342,parse_hex +FNL:5,52,100 +FNA:5,47256,parse_vector +FNF:6 +FNH:5 +DA:21,5552550 +DA:22,5552550 +DA:23,5552550 +DA:24,5552550 +DA:28,444180 +DA:29,444180 +DA:30,1358491 +DA:31,914311 +DA:32,914311 +DA:34,444180 +DA:37,224342 +DA:38,224342 +DA:39,224342 +DA:40,6570504 +DA:41,6346162 +DA:42,6346162 +DA:43,6346162 +DA:44,6346162 +DA:45,6346162 +DA:46,6346162 +DA:47,6346162 +DA:48,224342 +DA:52,47256 +DA:54,47256 +DA:55,47256 +DA:57,444192 +DA:58,444180 +DA:59,444180 +DA:62,393744 +DA:63,11908 +DA:64,11908 +DA:67,381836 +DA:68,381836 +DA:70,381836 +DA:71,381836 +DA:72,381836 +DA:74,381836 +DA:75,381836 +DA:76,763672 +DA:77,737721 +DA:79,381836 +DA:80,47250 +DA:81,47244 +DA:82,47244 +DA:84,334592 +DA:85,47250 +DA:86,47250 +DA:87,334586 +DA:88,47250 +DA:89,287336 +DA:90,35342 +DA:91,35342 +DA:92,240086 +DA:93,47250 +DA:94,204744 +DA:95,47250 +DA:96,47250 +DA:99,12 +DA:100,47256 +DA:103,0 +DA:104,0 +DA:105,0 +DA:106,0 +DA:107,0 +DA:109,1 +DA:110,1 +DA:121,1 +DA:123,1 +DA:124,1 +DA:126,7 +DA:127,6 +DA:128,6 +DA:130,6 +DA:132,47256 +DA:134,47250 +DA:136,18959 +DA:137,18959 +DA:139,18959 +DA:140,0 +DA:141,0 +DA:142,0 +DA:145,18959 +DA:146,0 +DA:147,0 +DA:148,0 +DA:152,18959 +DA:154,18959 +DA:158,18959 +DA:160,18959 +DA:162,0 +DA:163,0 +DA:164,0 +DA:165,0 +DA:166,0 +DA:167,0 +DA:168,0 +DA:169,0 +DA:170,0 +DA:171,0 +DA:172,0 +DA:173,0 +DA:174,0 +DA:175,0 +DA:176,18959 +DA:177,18959 +DA:181,6 +DA:182,6 +DA:183,6 +DA:184,6 +DA:185,6 +DA:187,1 +DA:189,1 +DA:190,1 +DA:191,1 +DA:193,1 +DA:194,1 +LF:116 +LH:91 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/tests/test_ofb.c +FNL:0,11,78 +FNA:0,1,main +FNF:1 +FNH:1 +DA:11,1 +DA:12,1 +DA:17,1 +DA:22,1 +DA:33,1 +DA:46,1 +DA:47,1 +DA:48,1 +DA:50,1 +DA:51,1 +DA:54,1 +DA:56,1 +DA:57,0 +DA:58,0 +DA:62,1 +DA:64,1 +DA:65,0 +DA:66,0 +DA:69,1 +DA:71,1 +DA:72,65 +DA:73,64 +DA:74,64 +DA:75,1 +DA:77,1 +DA:78,1 +LF:26 +LH:22 +end_of_record +TN: +SF:/Users/jacksonwalters/Documents/GitHub/aes-block-cipher-standards/tests/test_xts.c +FNL:0,23,50 +FNA:0,10,test_roundtrip +FNL:1,52,91 +FNA:1,1,main +FNF:2 +FNH:2 +DA:23,10 +DA:25,10 +DA:26,10 +DA:29,10 +DA:32,10 +DA:33,10 +DA:35,10 +DA:36,10 +DA:38,10 +DA:40,10 +DA:41,10 +DA:43,5 +DA:45,5 +DA:46,5 +DA:48,5 +DA:49,5 +DA:50,10 +DA:52,1 +DA:54,257 +DA:56,1 +DA:57,1 +DA:59,14 +DA:60,13 +DA:61,13 +DA:62,13 +DA:64,13 +DA:65,3 +DA:66,3 +DA:69,10 +DA:70,10 +DA:71,10 +DA:72,10 +DA:73,0 +DA:74,0 +DA:75,0 +DA:76,0 +DA:77,0 +DA:78,0 +DA:79,0 +DA:80,0 +DA:82,10 +DA:84,1 +DA:85,1 +DA:86,1 +DA:88,0 +DA:89,0 +DA:91,1 +LF:47 +LH:37 +end_of_record diff --git a/obj/aes_128.gcda b/obj/aes_128.gcda new file mode 100644 index 0000000000000000000000000000000000000000..4525d8f9044502a7f03ce78640e9f41f7ae5ebae GIT binary patch literal 548 zcmYdHNlw?YFfdus`057(0|O&7kN|;Gi<4(S#1=AgfCScSfk=h|CJ8Y8VHFdYhKU0? zV7-h$hD5^pb1=OuK)zR$ELiP=C09YxAOKbiGQl^mT?1Kd!dfY?0)}g=P}G9l_344~ zLzr5SUbtGQc_6zSdzMJR)PVRf_a5L(0P?^9Y&R>AIeCqmAWSXDj}M?;ng_L65279} z4&;LMvH=;jkw%kXdO_OGz+4Me!wwV^leUY7sR6kKrsjYQkOKi=^FVg*)-rsJtQO{m z3Xo+G09MNhWE&Zrc@I+ycCvZ{%yzIEE})t~@4CG(H6ZgF(jkT{kbx*&Fc+%D1{UKC Ni{UJwQka1tT>yhCSt9@d literal 0 HcmV?d00001 diff --git a/obj/aes_128.gcno b/obj/aes_128.gcno new file mode 100644 index 0000000000000000000000000000000000000000..b22f82d79b5198f0e6acfd7fd32a2bba3e05406a GIT binary patch literal 6100 zcmeI0S&Ljn6vz7-2OU8)YCwe;;hO30#Brv(Wx6}bD2c`u zHMk^16MPX8Az(Cu3Tp5Ri1-=wRUZVOeDwdTx@Yd4O6A^`ke9&&|GHJD&Qew9)Y9E) z*SD@-JG|z|?mzyi)oRHS70}Oz>IdMRrTXS(cVu*J+HBWnW?$^36Vsjg6f$QD-I@BW z>Q5zbOI_{zg<5Sax!8SArFbA&l&PPgZ{q5nN1Hz5Eza7E2OeX#KIGsdQ{}%tIe__C*U9^FJ)AQpU zPv~cDpp(VsLEoK~;|XKK78KJ7=J7>4fsE9r1%=^6SNaOn6*)Lf9bWSLQRe=kSotwKcgTt#_vTt#&s$*I{R1VdOA#87VBtAUPb$Um|_h5Q^o-sQ9-D zYlPc{JA^xhyM()idxU$1`-GgT&#!PCRe8QHH%`sHdD%z%j;>rv>^b|gH*cdkz?=6| zto;Axb*o_eoEZ2s9`@;b^K!}?d=bD=zUNZGshsQSMYz7mcJUkf?;IobU`h(GQvasi6Te=LQdY7 zi;o!pqlr=7@?R>=!3b~Jsgui?kvp}?%hjFcWxZr%h`g?WP4lM zt++>1XX5nUqxh%`4WTJ)5w;312vfqe&=T50N0mPJdy?-{yoC`!Uw{K!biehA*bqi zhkmQ#y)QRTE#WNXtREfzXD`^A57La7|YX{`M#D%kFc0+?*Sx z=Kl9$ZW|ui^%LXdcSNf{9UbFKXlRW1`EN9T4*s`F{`)1L^NIg2FgBB4tU7DQzJo{G z`mjOU_N2X=XtVE-<7_R;)3*EE-d?ncTTza7ag5Y$TwZS6#k*|nS-Y2ookC94`5%)n z%l}=uan-8x{FOkSytOrq<>{;H-z~f*Eeh{{L26`QCw_{o3eyX6ivgM%b|7C&+AbQV24ogo4J?qM?grVtTg&h@vRarMHlUfy z3FL=ntUnJ^3$j}w>KZ86K>+MNE+8Y&yKXN`4aj^3ZV&A;DP_0@1A=e_nvd^BWbr9 zyH{^myZ(~{fBaLaRH{qWK))>8v>D#X`rg^>3~pRkZ?+m!vwOPr;fZ!*9GR1Z&QxQK z#_JNezM=l@LZvcPJtzDgOLIr{#Gd*I`mKiV$fM7g@s{-Z%m*HGwlU=3Ba`Quj@Y7T z7rj#ilS797sXgB5xiRd*KP}`EWv4M`3n_3+1wY4g9!xrS}r1JPc4)Wyh6#uR;YEAUPnjufe^Fb~kPkyubTf(R{ z(TBy|(@Eut9r=Si`Fq5_SGZ5uD%>w*6#bEF$kR{#kw0P$dGg!De?WLpcu2@7`m)@6 zx~V*})DYy!Zx{dJFltTo!5kq^C-uQvh#}<3KN5$mty-N?IP#=U6&rSfI_k2qOf z=Y16Iztji0HJ+DStNUobQl)MiUqx}%9 z-^a@TZ{83E+vnsUp7F4c-_&sXy*5Y60@(zZU-+;alN5 zA*1NaYRJ<~<&m{J&yzo-@$WMS`ief7Bjo9%K3I$0!=C)%U}?Sy?_P3RTlv?IoGs{# zwf5FKCHLr#VB+}RqxcvRn!+w&w=gP<3lqYm&=T6h9)Y)9SC|&|3j2f^AxB}o)Z_Aj z+qU^Tej_u^SCzArvwqv?+|T5jdv>NfHpzM6&HGyMc?Vf6LN_!EfBRGSMfW*A zuFDMb75?wV+P2=k|1k69?}*9i33rZ6%@*gYmZE@V_* z|DJqN{qN6=>#MxZpGf4XTZ^Grr%!79fbf)%QS?JRAy4n=IMi$7|648gp8PYCd^XV` U=HvqMbi7!h19|e##i73TUx3^hzW@LL literal 0 HcmV?d00001 diff --git a/obj/aes_256.gcda b/obj/aes_256.gcda new file mode 100644 index 0000000000000000000000000000000000000000..55591a283e4e9ab1a72fcc0dd083de9d4cf9bd88 GIT binary patch literal 480 zcmYdHNlw?YFfb`S?qbQnz`)21BtYQ&t{+Vhv4xB*K)%l^Cb0OOrAlBLNPyKc0vX{m zcgG>C-SA5tqGokHL=#jkh*SH!Q36@5Mt~|yMfvE*a!qftpV7o!? zN>ka*1ycj!!`xRey$i?#1F%|FAk!t3T_0I3NIeLcKqwFiR?7xt@OU0khN%VFZ2^*n z0I(W%Ae*UAc{@xE$Sjze23R0M&Eo*dHQriy23al4&I=GTK_u8*P9Vd0tNtdKT9Dp` k6Cn_%+SY@d#&G0hkRXU=a9O4VrWqI(Bdi1(1Qi5P06uv^&Hw-a literal 0 HcmV?d00001 diff --git a/obj/aes_256.gcno b/obj/aes_256.gcno new file mode 100644 index 0000000000000000000000000000000000000000..e381d0039157a91de132728a7b4ed7db645009eb GIT binary patch literal 4736 zcmds)Nlz3(6vw-90TGRHMNQlwE+jIDf@oZVFhjT_7Yqu-#+~sXWe`}cf>Nab@fgx8BLG$4>*zDRJ4aWb3rB@4WZqELUk17 z6Kt>=?P75cx-{8ya?M4!+v3@+V_CLYR+Bw1S7v|IQQw1XHee;&VqB`Jn+Qrk3La!@9X-b zzZ9MR1=P0#2Xuf4@QKawa-Q0rOtmu)XrrUE(@CeY$xf#yHiELw?h(|_l=v^iNQ2@} zUs~u+Ud(Y<_1OpKiK3gYqo_Y7TIIzYYqbyNVopZBA`$I2O7=5Zz)aUvrF zu?(Jd<6I}+of+S?DX#Qoz3@j~%yCuqO>x}-(;KCEaW}_R?ZXt;O$GKX5m(0YN6F9A z`M7o`;sf|po#%cH}U9+3%YW z#)0_~v?rf<|x%G=XLi2A-JnTJ6`A*M~jhd=h68?tRUz#UaL; zYhCV4(ixk^ndAYj%#bq)_uZgxiM~7pkHBN_6nJ9J0af30E_nvy&%q1u61)PQm}9T& zFKDltgz?wl4R{OQ0iTF-3EwYk`CP$VVBRK@gHFb<&h-i-|972ZA4!k`{ooQvgDe;X zLtq&2>~tB7f-B%ExCX|+IPi(^muKmsiHeT}{u=h{xG*w1);jvq<(ri0taYlsX}|7< z{e-5Epfk7HhiP5ASYY20u`NN}*!Rh={@9xKvFpOl?1(LWxlu4L<~2;!H|=9LVgDAm z4eo%u;2yXSJTb3jYQLsha}KHc%n3P%I{Pcp yz6zA*dT?)UKb%jB?mbnXIV9&^r@tEQYiKMlZXb*VMfZ+wt{5kZPM`k?s{8>@ji0Un literal 0 HcmV?d00001 diff --git a/obj/aes_wrapper.gcda b/obj/aes_wrapper.gcda new file mode 100644 index 0000000000000000000000000000000000000000..250676bc6fb955c3f71fabfb61197dda68b0905a GIT binary patch literal 160 zcmYdHNlw?YFfb8Zcx5F60|O&7kN|;Dfg$ORXKd=|yF8^s4LKi|TlX+zSZBUsbc0mN(3uy?)$2&;xwaw;qTu(?s;4m}_GD?*r`@-xvM# z0rgv#u|XLN)a!#y;cpc_Eb8?^)u&D$Y)kZ=A9DTH2UVXseXuKe_A0sfC;U|(?0<=^ Fn@`W^m>B>7 literal 0 HcmV?d00001 diff --git a/obj/cbc.gcda b/obj/cbc.gcda new file mode 100644 index 0000000000000000000000000000000000000000..d8bdce0941c4309736ced603daa5a832376806b2 GIT binary patch literal 420 zcmYdHNlw?YFffUF8G4?9fq{`3NPxid#R6*~Vhb6CfP5yfC~g`m4X0r0VFGM02GkBl zAb*c|l?==dBzd@9B4~O*W|ls4w1(+n0rGjEY7RhYAO-dV$RGD^P7;EtCC3lQZUPyP pXB@iW>#-5=G5r5)~pzNDQct;VZas<=Tz! z;M$E#!MCu!sq<$hmG0vaTv|{wT~&Wo*K}9c^!!};^7Q4Qi%)(%_||H*ik$=Hz(f z9UaYfdpF}FH{&xWSoTRca!2m#==vKr@aT619kTXXx#7oLii@vg*NqnB%6>rDV;!8T zEP9LjIS8ih@ik{oh1N06!QQRb;$U+Z}&SAb#TYHrtbBh!shBfh0WD}3Y)9{6jptRb#3RdKrp>M`Q*X(je>&6v literal 0 HcmV?d00001 diff --git a/obj/ccm.gcda b/obj/ccm.gcda new file mode 100644 index 0000000000000000000000000000000000000000..cd954ccf77feda689c3000275d066ff870cf726b GIT binary patch literal 680 zcmYdHNlw?YFfg$Yj{VBOz`)21BtRg$H+ca>Y$2lokk1Ad#iXIaaCsP?1dO+b}15wIw02atl^FeZL>z@3AsRh|51XT;9z;0j#GIsptJq%N0 u0_4N|hKoiR0b#+^!Ne(zBXsj{@nPbyxKV*Q07}E;f!xK2paFUuNgV)>h9b}a literal 0 HcmV?d00001 diff --git a/obj/ccm.gcno b/obj/ccm.gcno new file mode 100644 index 0000000000000000000000000000000000000000..9a17532e9b9d5369f5c11ae945536c012a11ccd7 GIT binary patch literal 8192 zcmdUzSBM^E6o&ub7Go0I#ulUgn@!zl3>qO~!6hu%?gSMyuDgGVF=b_wSP;R24fR6t z(t0UsE+k4USg^#35(N=Nv7%mxf(7)(_nGsZnaSCie+RGhg)=kXd*1KN*XDdPGrpy} zesJaT6)XEz|K4h~+B0Y^~0(*?FakF+S%2r_Wr5tz5{{}e!ooHYDFJB^+EK(J2y?&em~;DFOnIo4QLKb z%ygYyPaJsX4l4PG1s`LfnIQv*%gV9feV(HaewGYGAN;|YXR;6ekQyKSp*22uzt3U1 z_IA=Q%CTQ)`()q?mOd6nfh3(HQZ)x^ZWw*F&~|q zdHgWk=J`MeqP|M&&w3Lr;{=*$dFDYA?KG24(w>)iJ6Yd6XT-QwTE+r2(K5~;YR@-1 z9jy(XYno_1_cYOZE^4Cn+|)$txvGiQb5|2BISVw=lFLBUUSM=O+W30TYoaCBfvL32 z133^x?M31)mR%ydR93*+<9RdItJ0D$!Bkq-8+jB&?PcOF&pdt@ZnNgdtsv@Gi@QQL zf-{HZ4$sB0&Xv-Q=2|XHPd)}wKPIl5dHgV(y+4twLDa7kw_bLYY=f+T^@ThRV!f-y zZIo@onZxG6^M0(eIoEMv{UGmysNEuNJoEU$^qo|U`U&w{U7DS(E&Vn6sAb;RKR}GV zUEH;@>u~0<_yegN>r};O-vLp3qqv)7H_Hmx__H5@SmzdTx5{qAnPa$3zVZDl*11!@ zyJUCE?vdRqyI)qo`o!J_V*Lk<_G7lL*#9n^dHZgEFCW{!VbhwCvE_(jeak~b+1}?t zdY^m08?z^Jf9}KC_i)O-UphybebIGXW4=$Z54w-~l-cjf9A)YltZmdsV>)}*>fQtB zf1iw8=s8Z8f{i=(1)R(84^hkh&Q4!v>&7QGk8T?o9bGf|UQ4sOLv4>=gsQsw z_iN1i${J%#nG;_}l*?;}a#>HGeU0f-uy&v+uP5f9ZavY@6J-T@ucN5#wT^gzPm!G} zTOm75R-pGfidybdw~kiIce?Bh*_pDlWCiR#K5lWHoLvaH%GL>*AAi|1+t7MMq04?e%}RcoUhgKMwnd8OAnz{eOD z=)DfAw6qIw?{e;`($ap=L|ZrS{$6a6Z0=~o9Xr1L%jeGalJ2$%Eyj4Sfvn>Vj zvQm)$-{s!pYwOe2efe4NJm$HP`SUdveek}fq7UBJQ1rn&=lihFKm18DgS8J0`wng9 znen#MHu$JVGeZVu%3M#I;GN?caUZeZV=Oej=Go6(Pb_%<_KUvqf2!!?8_>V)q7UA` z<)ROs_Ye?$@Xqm`;_akglw-fp^1gwNcaO5(-$g_VHV6K00^|Rt+~@Bs#HjjT74JRO z|0@6H@%WT^Zy`SKBjvVIj`7iUl8$$svYs+NgY~VW!aNze{&e>BNEx5Oo*~KuGW6a? z%H$n5@{ao$f6qr{Zh?5}7%Z;mE7!5c7Rkt8aD(aWZG&GDILg#9SpTTUI|ng%m+<(s z4Zb{naA+b&nR-^&zUjytfI8*9hkW@EjvT%BwJNRWoEW=G%Q%51TF*&MwB#btL`#kW zQTwpb>1g9X&H_!eGl%_OAV-5(=P7Yd%XZ+*Vc)mp za1iS}BW|bcS=n>40yd|0|IwR%Q28jc(`rtCE!>faFertB@*Zdn2A3;Pg=_1+fuj_h5WIcy#} zsT}LPm+QE&+}vNIeP8?s$!90i`yLl#e<;yMK~Me~NL%lFGzKWbS|?71LnzZUmR=JA8YUXqGY zA7e94gEiXk#D6dQA^GiO^R_f`G5$~Df3DE8w}YtvRoow$#}C$i_I(ibe;U2l@gL^) BLk$1` literal 0 HcmV?d00001 diff --git a/obj/cfb.gcda b/obj/cfb.gcda new file mode 100644 index 0000000000000000000000000000000000000000..413033932960e789bdcc9d34d51013c2d5172eed GIT binary patch literal 160 zcmYdHNlw?YFfhqdv-M(NU|?hh5+K0Cvit}{Y#}2Dkk14b#iX^M;y?D;Z~i1S~Ej;9V|3F+fXFz&VHT*t4>_Ph&u<=Lz?;^Z*akg7$Dso3g5 zjr!cPCL!PEp6^i&^0;5T57&AJ;dOll81Kzs-S%f2*bZ_RIghTVj%wR;mb(cq-^#Gu zJz)FD0~WtS^tCtkjOFtGu_p}6tpcmXiVmW!{j>Z-rNvpe;*;On_MPkrlVNp_1lBS7 zmH*(q@z%3`z0dOfdK^#x`?big?9VB(j%>tU>5%rT<)-|42FWI}rP6Uu`_*z&e!YO+ XWsY`{U$1hwMSivKO!>9_LsvFm-LPJ> literal 0 HcmV?d00001 diff --git a/obj/cmac.gcda b/obj/cmac.gcda new file mode 100644 index 0000000000000000000000000000000000000000..edfc71c2cbcb8e25eb4a346f307ac5245619815d GIT binary patch literal 316 zcmYdHNlw?YFfd7o$Yy3>U|<9hAW$5AF%=@VkdX(-X99~dFt9;sE-1|crD5_g8Ym1l zixJ4+aw`1;GYh1j1F8o`A@RX_KxVKe@A(ST1F}O2s#pPG0az`_y$516e!|p(%);d+ lm^e@gSTBgbxxaiLOfQHp0K{MbaySGmhJ^`;ix6gD001Tu7-Rqd literal 0 HcmV?d00001 diff --git a/obj/cmac.gcno b/obj/cmac.gcno new file mode 100644 index 0000000000000000000000000000000000000000..d041cb84b1bfa8aced5c90456431f4142964959d GIT binary patch literal 3224 zcmdUx+iDa+5Qb;ec!*~O74gCYXbhM{REQTs)@AiZP!Ta`V6!_;qHN5{&Ia`C&< zd<7rI3&9KP>zc~WR(e(iZ!DA(N3?ykQN+uzLAXBQW4t}gd>CrOeXk^(DUe9OTA zJ9*L0-gGi>>ct?Nr#>gh4Zx(4o(RAHs%WN+gY6Pe!&ft%D(ibn434$&jl)sX7;wRi z$2Y#O#P(L&=ue$CHH|@izj!qU^#dh#u+l~h@M(upr;nPhg?^Ur!}4wMi2;7Rf-z?} zM@#HTr42syW8!K$Z@3<#UX4p%tLyl!lzEYNjCQa0Ex{IP+_qNAn&D!;PmGH$*zdUH zfwf~X?rp*Eh%bqcOy`4^nD4g~P%By~+L-1sZqumYS7V!&p6|KjlH6dP+Y;=a_80K zVyoNBKNQe?yi*}YBegvgs?lQnUQ^1S-D`GUl0^B`?e1cp)w_eb?S1&n*SL1Z$$8xw zXFaFI&xoHDKPP@({DSz%RBK{mJ|`CiyA)ciP`<6h^DhhSic!O_@>vV!`7?rD4J}sa z{;+j>{;bjTH@tJKe=7U@-QKzP{Xx6C(a(B<`~Ir!-)mgeh4F~1raDq5C-6)o(+oVO zZ8Zkp)=$UMywz#TI_&O}PchA##pJho-^aLh8pgPF`o*|)+S&aXrYou94r88QS7v^g zc5gc`Yqh%;IyTbrG0SK>ekPw$%TrYszQGMMJ-v=PlQp2iP?wpstga5~Qo}@MF;C;3?SJN_CYtJP{oz}b)yt%xkj5^)@7@Xm{^L>R|-RHbh%R n!t`(e`2np=U_Az95XCWf!CZz3g$57?1H)p3F+hW0qCgq|KM@!S literal 0 HcmV?d00001 diff --git a/obj/ctr.gcno b/obj/ctr.gcno new file mode 100644 index 0000000000000000000000000000000000000000..a0dfc65d7772637a592fde6aff5b06e3f2732fbd GIT binary patch literal 1452 zcmb7^O-lno42Ea?{zUO4h=>X*T5J^$;;q!4J&T7T%OW0JW!sAv@$dPQyoh;bHgpZs zE(S6?N#4m$-hJEGB6~W$?p%F+{Cqp-{JJbyyLEdHT&S3^aYe&9lTT6_x29GJzf#dNjCzB;eP>bHyFh-F^P zVmD&CS|b)7FpEvy7k)5{-Hd5ngP!2<^Wo-R_4Jqz2WToQ-``St+6t$;{_pJCvg!GM zZ7KK6sk%^Ysiugv#>~XZ?Idl1fm78I8mjjo&u^xlBi8SreL2TF>o~n@%=H6Tlk^Fn z+u}RoyW(S;u2YNUoywK{?t4<(7e5#`m)&%|9wxBLsqKH1z$#BoSooWy*JG)jBzo(A eSyOK~p+9D^XOe4)r+DNXX3umacOiaB(bzBg@F|{~8H909hH7~iSvY>>487Nj< zl&lXF(@O@jL24Kn92wccG(N(a5u_Icn1GlO%z}u4_%JyJ24_ZAC?8}tNF5uL2FZcc zfy6;-kj;SU0SW^FL>){YM4c-mH&6y-7YKmNLH7s94;&y#IB;d;1hQdnL)U|@mJ6sB z5+0c5gUkWRBLKu~kh?*Ekl7&pApd{>x>}IGkN`LyL4Mw8+ERxek146x;}H_~Lq8rt o{ty6SL8Jg-V89=b=xXuBqY%(sVJv3jibr&_@x`MEin$OD07EuMxc~qF literal 0 HcmV?d00001 diff --git a/obj/gcm.gcda b/obj/gcm.gcda new file mode 100644 index 0000000000000000000000000000000000000000..c933cd0d807b5979ede0fe02c3d118216f5d6395 GIT binary patch literal 424 zcmYdHNlw?YFfcj4mg_770|O&7kN|WpA|RuMaxUe*uc zv;BqWG-D=!()<5>%yfJU;`?11 zxr{kF$<7?j<(hDs$290z8(1jXL@ay3SwRtdyUFe_-hpyV?w@^!qD}NqESxbE zu{&KndJa1FnKOqXc9+TSG``DtxA7k1OdgYRCEDJdfi`li&i_PM_J z<(S+*c2Kmb#X{~u5qqDDM^E1$_6UmD`%U(M@q@+>89!{CY0xRZkwx1XlRaWQFn-iH zldnZN8to#MHIwI1#6D)S$BmyrIVShdJ%FN3^v@c&A5g?TX|kt`pEiERxS+Il?$hqM z?OUj=*uJ~EHaoYpIy_?I=*!Qe-zgUhUt#FA0AZ_Mx`EdizVlz|CHCAU)}s1AZno+J z>rlSf(8%{2KTuqE4cn>>HEgRU)Ud1riZSFmo7Cy-()xZo{Ef~o^~Krcx0a4>w)b4> zcUL6yQ~5agv%lQJ^7C^a>@j;M8Dm&yeQD4kS8j5~vSTliQwJr(PuVlMqtbz=4w6Hq zjJay5`WJTbTgorl@-5CQl>y9ZNzK5?&lkZv$+q!GSlga&RZNy&wCa7UscWvVx zalgu|=(mPdj!c7X_1l_X@(-HEFL?=_2#Zhh6^hs^O}0I0^zgk<-HP~##jkQcVy`mY z)yCHtUu&GnztQTg@f+-4tG8a4o!ZF#wt8v}+v=&;SNxLaP+Vs%@3?PJ#NLpkdU(9L z4-qT5qX!-5sBcB=ji$RvZvCD52e{|H`uq5}e+-vr7grXodu)#F*<{!6wAX2R(vNzN z;OIGd-vp{>$jdqnzU&d|3&Nwd>@K2c`ml< zaKy3~>@^g9zihHsl12~r-KxbAi|{|e#3atIFt9yR?R(Zz$3;>#>?5rM!uF-?Om;4TeWwsf>n;k^IG44 z?WMXw9{jm)+y1g{%&!dBj=gzw(|Nz0?EC4z_eNK(+2q=wnn0Z8J!P)^)ZJlD9ty`8 zRzAdfQPu|eAlI;Q$~6I>?$_^9>vs_Ae{W>%FF!}(h2nlkEN7^7MeO^g`@r}^cpG^OgPl!Z_39e2rMX)ymf|P4~6& zx7oRkCg*4k+se@zww0qbY%52<3-PkY>Ju@azc<|v0Z*;R28#F}P4<)V&&IzPXYzf~ MSw_2GGjKfm7q6<4cK`qY literal 0 HcmV?d00001 diff --git a/obj/gmac.gcda b/obj/gmac.gcda new file mode 100644 index 0000000000000000000000000000000000000000..764f011095562b605eb25b73979f209645e49f8e GIT binary patch literal 112 zcmYdHNlw?YFfh6P#_9qC0|O&7kN^PB(#6CO=#-V00 L%p9-=5CH`M0Ok>F literal 0 HcmV?d00001 diff --git a/obj/gmac.gcno b/obj/gmac.gcno new file mode 100644 index 0000000000000000000000000000000000000000..2cd37472a3bc9e4662753f9163a438b8706aab05 GIT binary patch literal 356 zcmd1LOHS9aFfh6P#_9qC0|O%ukN^P85mp{xqxh#8f@ls!1aR}jJ#02VjrFbgWSjh mDYSUzE9%8)z;rcY@3p1Y#i|Mh5^LJ}4Rh literal 0 HcmV?d00001 diff --git a/obj/key_expansion_128.gcda b/obj/key_expansion_128.gcda new file mode 100644 index 0000000000000000000000000000000000000000..31033e26f7905ce1245c1fc068da89a952a152fb GIT binary patch literal 124 zcmYdHNlw?YFfd{Jo?*hkz`)21BtRhK($f}**g{4=ApgK^4zT#1UNFUwpehDtG)#>E X(=dKSCo76Lkh2(OCP;!2EDIq3lb#V& literal 0 HcmV?d00001 diff --git a/obj/key_expansion_128.gcno b/obj/key_expansion_128.gcno new file mode 100644 index 0000000000000000000000000000000000000000..1224e3bba5a1a8288fb0d834502f1ea99bbb5785 GIT binary patch literal 2000 zcmcJP$x1^p6owP$d7cm_P(ejoD_wLerElQAlu}fLR_sRiKB4d6Gr0A9IrnhWYmIc_ z4@vI%bN>7pZ?D_Fzo=bTr@kJl&N;s(6}bEOe21Ho?^dVZeCoV4JFm~JZvU~@ZB}k- z!qeA(X_tTWmD+Aj`kcGp<`cdT(q{g$~8Re zdU_gr1Zn)Yi}Z@v$?5*`f;~GN>|a8f%+Tt C1L@WP literal 0 HcmV?d00001 diff --git a/obj/key_expansion_192.gcda b/obj/key_expansion_192.gcda new file mode 100644 index 0000000000000000000000000000000000000000..455b0ba98704bee18bda0fae1cc20721edb39c6e GIT binary patch literal 124 zcmYdHNlw?YFfd{Jo?*hkz`)21BtXFM-(G!)*g{4=Ab*1mFIe2D7fdnyiIW5~K2)cI aX@_NkV0uC(3yL_9vlwP3NP-b83n2h|))Bn` literal 0 HcmV?d00001 diff --git a/obj/key_expansion_192.gcno b/obj/key_expansion_192.gcno new file mode 100644 index 0000000000000000000000000000000000000000..1f90bb35dd2d22765b527ec8ad59445c94a0e035 GIT binary patch literal 2004 zcmcJQ*-8U36oxbI`@W%qxPcb5R*UGRNS~vWQdER0_C_Dh=kiWGU(OsRj`c_{{2`e+ z%b!0vlVqN{?Yqj=S$*u|z8*rzmZSr<&-W_6F?nxwddxvxD%c8D{`^ye)}u$1Lkqld}RmZoj$OH}-ftI&|JQGR_0@1s-o# z;(OBer5#8+ly)SofX>~{n>SXOhd$>Qc)VkYS7MfRs>wMA9=D$+YX=_hMB=A0%R1Gx zJH+GGj1r&9vpZrC9yR680UqyM;uq5R85U4o?kC{!`_0$RlEmJ-EB7Ee z<~)=D^F0Dl`7m`rNwC?BK*rVSy&N#JnSgwl889^sPK<2^#03XmDRsaA1 literal 0 HcmV?d00001 diff --git a/obj/key_expansion_256.gcno b/obj/key_expansion_256.gcno new file mode 100644 index 0000000000000000000000000000000000000000..1fbde9585d133102903bf24739fd882261a2db5b GIT binary patch literal 2704 zcmcJR+inv<42E~gsZh?ev{1waMdBc!Ckj1))HK>R;65rLLI^1f2?*#bR9si$y?6xP zflK_2*V*Ydb(0Hz$+J7Qe|u(j#U#((__r?_QQ=;kq>7&F6_<=+4UfZl~Y+ z*!j`weE+oD?SCk`t(CPGqQ}5}PQEApz~em;`%{rc90$<6tSj*N!+7jz;PIB#rEE2y?cs5F ztSx5(c)S&{uSPFxG$&^Vc-;C}$;n;-9&b(TFQb<=dEhL;2Of7_>>DDRB3mLAbliMj z;KdlmBR?32$9OqIz~j9V`|IdsO&;rSRUgpn_^m#8@wP2Yd@9e*|2RC>ih2S(UPJ6V zB263z(7e%K#m)5tU_YNm7 zmhOwj;J(CPp>>vbtD$y}&?leOS-z?HoRrJ%4Z9bt-b)BWoDcE-{@LHO`SicO9ce!L zf6)k5!z}30=i&M3TvSJHtM_(K(x;Z=#~f3C^wjE9M?a0hyYbX751g-2){Qyc5~-kj o%;I}%Ugwc>lsoCR_{~=dQSlEqD(b?8+Ysg)LC4WuqKO-?A)Y{7c#xdRmG7IHc49Gt zK6st3SFfr&m2|J0-ydIHTz%5mU z)2zIARk<~BU94gKnFH`OP2Mz9@7=H#)oOjyoc`iv*1&r=O|Dk!%S?dx`a3WWejDJu zThg}0rWsNPe9f-3J#k+gLHUOGogas9NB#}n7R_(yux!x!ehYQKpYOx;`h9Q?3?Yl$ O^SA#L{ZGVG(c=r|y-+y- literal 0 HcmV?d00001 diff --git a/obj/sbox.gcda b/obj/sbox.gcda new file mode 100644 index 0000000000000000000000000000000000000000..f1f69fe8c019f302bd65f3440c88abfeac763497 GIT binary patch literal 128 zcmYdHNlw?YFfb{c{q;Tr0|O&7kN|-wmAqVt*g{4YAU|mZBUpUi&Sek=R4s@jmG-C# WS*;mZC6ItK7#73K1xdjS0I>m{VH2DH literal 0 HcmV?d00001 diff --git a/obj/sbox.gcno b/obj/sbox.gcno new file mode 100644 index 0000000000000000000000000000000000000000..1c831f687431c6873e6b790f580961d1ec21ac3d GIT binary patch literal 900 zcma)*%Sr=55JkIu#Roo6QH;8CY zkPB7mdd}^>WZIO^*Y|gWx3AxC=bY@R0}oftE4g(&*G>IiPhRSIHJ()MxP6>{x>e1$ zv+|bUrgW~ykQ>T||IN9PFb7uD#GgWr*lNy&9Pyg(!Honi#N?SJ?(VQS# zDc?=aZBvXW6V09aN_4`v zxnuw7XO2d^c}JtV`KV@X^}kMMe$7yVUOvdU<+Xx4ytyyD;M3KGylG?F+KiSI;afIm w`tdF~{kTV;(TMQo@BryMroHUW>2t2N3zkHL-8qfY-Dq$BgOtZ*+_^aX0qprwCjbBd literal 0 HcmV?d00001 diff --git a/obj/xts.gcda b/obj/xts.gcda new file mode 100644 index 0000000000000000000000000000000000000000..cfc3e868e4b20cb651fe5676d23eaafc6de8735a GIT binary patch literal 364 zcmYdHNlw?YFfdtDyWEI@fq{`3NPvL;FPD7~v4xBRK)wiA6qAMu!{xc40xD1%#s_l2 zW-|gAiCP=|VP>-c`7pB=0NGFgR?7tBtoG>ZM^-xlrh*g3fS3z%cTT$FE|^+2Am0P3 zqyc0J5NJRs5D7LPBz$F`4IfMo$e%FxqSGKvAOI7G@E91d_;WEV3_)r@{)GVmAAKJV literal 0 HcmV?d00001 diff --git a/obj/xts.gcno b/obj/xts.gcno new file mode 100644 index 0000000000000000000000000000000000000000..55d217f9239f9e0bb93a57c6282222e91c21e1a1 GIT binary patch literal 3800 zcmeH}OKTKC5XWbH8#TTkCykGbIV476d_{DL3!;dM#0Lt?X0wFAx(S;NWDkA?{TLqf z;?+Ywg`dWg^_!Yvddum}fG5F%n(nUtSM{U%-#u&H*2?6qYqQ@zez~3`NqSg5$n>v= z+t_wXeXGCGXm?w^!FoTTz0qq;i*2eU^{b*uQcI6z<==i5QsN`KMANLcknYXf*0;~~ zVc(Nslf?I7#~<;1*v+NXznupbpw(K&!QkXsH)X?WsbH``dyM=b1NENoy7iH0#~ zv;Ww}gFf)sk2o7`d{lJr@bhEQCZ>*6PZ^v2MTqV5IhFO;r=Bu@aEQm3VJ#O`u$G%D zSaO0?!ICS)W2e=ee|2q^(<)f@0@(>mzSw8PV`s!RD|$oprf4BLAIqut^H}n4eD&Dd z(sxJnuIRkzJ<&pR9Q+aQ>&IcuoGZj*@2ffgYFs;i9{XSjo1}Iwo0H$4ao3Pvxo6gv z+l}RBzuDOAuJ#*C?K$?!$2y3a;m~2L{7xYr9H3NDj??D+!WFw4l0;+JU7|cv z8|OESLEZd}Z{#z^H`Z}MbV9Tc-A9W{8FF-@07|W%5o83+MoKx-s^3z$V{UC45=fh^Fzq;NTG?oU9t-L=xhx+E%viCu{E6C1VG;SHM zZ2rv0`j{teFrm$S#4MtG#-IFv^KX3ko*Tyvt8tZEG48Vd{8;vW ztMBOlO7i(QkEq3Ho|Iu@JSoG*xKW0Uaia_y3Z(buAHMBj=QqT}F?cwavbYmWU_zRM!mN8{T0 L^KsuBEGT~iyu%DY literal 0 HcmV?d00001