From ff3f092b9152fe3829e3f29946ec624530dd965d Mon Sep 17 00:00:00 2001 From: Pyry Lahtinen Date: Fri, 22 Dec 2023 10:21:54 +0200 Subject: [PATCH] added empirical time requirement plot --- docs/implementation.md | 6 +++++- docs/misc/aes_comparison.png | Bin 0 -> 28511 bytes 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 docs/misc/aes_comparison.png diff --git a/docs/implementation.md b/docs/implementation.md index fa70446..d735960 100644 --- a/docs/implementation.md +++ b/docs/implementation.md @@ -80,6 +80,10 @@ This small module provides a function that rounds floats in a "traditional" way, ## Time and space requirement -The complexity of all key generation, encryption and decryption is `O(1)` with fixed payload length of 32 bytes. However, when variable-length payload is en/decrypted, function must be called repeatedly for each 32-byte chunk of payload. Therefore real time requirement of encryption and decryption functions is `O(n)` where n is the length of the payload. +The complexity of all key generation, encryption and decryption is `O(1)` with fixed payload length of 32 bytes. However, when variable-length payload is en/decrypted, function must be called repeatedly for each 32-byte chunk of payload. Therefore real complexity of encryption and decryption functions is `O(n)` where n is the length of the payload. This linear time requirement can be empirically tested as the orange plot below shows. All functions are expected to run in constant memory space. + +![](misc/aes_comparison.png) + +(_Plot created with `analysis/aes_comparison.py`_) diff --git a/docs/misc/aes_comparison.png b/docs/misc/aes_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..870e2ffdc401bf4a3a19547dcf755a45be9e1d72 GIT binary patch literal 28511 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 literal 0 HcmV?d00001