{"id":15833664,"url":"https://github.com/itzmeanjan/elephant","last_synced_at":"2025-05-12T15:44:34.512Z","repository":{"id":49379300,"uuid":"517517139","full_name":"itzmeanjan/elephant","owner":"itzmeanjan","description":"Elephant - Fast, Parallelizable, Lightweight Authenticated Encryption Scheme","archived":false,"fork":false,"pushed_at":"2022-08-01T08:56:35.000Z","size":110,"stargazers_count":3,"open_issues_count":0,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-10-05T13:41:17.906Z","etag":null,"topics":["authenticated-encryption","delirium","dumbo","elephant","encrypt-then-mac","jumbo","lightweight-cryptography","nist","nist-lwc","verified-decryption"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc0-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/itzmeanjan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-07-25T04:30:42.000Z","updated_at":"2023-12-04T19:18:48.000Z","dependencies_parsed_at":"2022-09-10T23:12:59.293Z","dependency_job_id":null,"html_url":"https://github.com/itzmeanjan/elephant","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itzmeanjan%2Felephant","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itzmeanjan%2Felephant/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itzmeanjan%2Felephant/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itzmeanjan%2Felephant/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/itzmeanjan","download_url":"https://codeload.github.com/itzmeanjan/elephant/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253767510,"owners_count":21961120,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["authenticated-encryption","delirium","dumbo","elephant","encrypt-then-mac","jumbo","lightweight-cryptography","nist","nist-lwc","verified-decryption"],"created_at":"2024-10-05T13:41:01.256Z","updated_at":"2025-05-12T15:44:34.485Z","avatar_url":"https://github.com/itzmeanjan.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# elephant\nElephant - Fast, Parallelizable, Lightweight Authenticated Encryption Scheme\n\n## Motivation\n\nElephant is a fast, parallelizable, lightweight authenticated encryption scheme ( with support for also authenticating associated data ), which is competing in final round of NIST Light Weight Cryptography ( LWC ) standardization effort.\n\n\u003e Find NIST LWC finalists [here](https://csrc.nist.gov/Projects/lightweight-cryptography/finalists)\n\nElephant is the 9th light weight AEAD scheme that I've decided to implement as a zero-dependency, header-only C++ library, which is fairly easy to use\n\n- Import header files \u0026 start using namespaced routines.\n- During compilation, let your compiler know where it can find these header files.\n\n\u003e Learn more about AEAD [here](https://en.wikipedia.org/wiki/Authenticated_encryption)\n\nElephant cipher suite offers three authenticated encryption/ verified decryption algorithms\n\nScheme | Nature | Based on Permutation | Secret Key Size | Nonce Size | Authentication Tag Size\n--- | --: | :-: | --: | --: | --:\nDumbo ( **primary candidate** ) | H/W friendly | Spongent-π[160] | 16 -bytes | 12 -bytes | 8 -bytes\nJumbo | H/W friendly | Spongent-π[176] | 16 -bytes | 12 -bytes | 8 -bytes\nDelirium | S/W friendly | Keccak-f[200] | 16 -bytes | 12 -bytes | 16 -bytes\n\n**Dumbo** uses 80 -rounds of `Spongent-π[160]` permutation as its underlying construction. Dumbo encryption algorithm takes 16 -bytes secret key, 12 -bytes public message nonce, N -bytes associated data \u0026 M -bytes plain text, while computing M -bytes cipher text \u0026 8 -bytes authentication tag. On the other hand Dumbo verified decryption algorithm takes 16 -bytes secret key, 12 -bytes nonce, 8 -bytes authentication tag, N -bytes associated data \u0026 M -bytes cipher text, producing M -bytes decrypted text \u0026 boolean verification flag.\n\n**Jumbo** is built on top of 90 -rounds of `Spongent-π[176]` permutation. Encrypt/ decrypt interfaces look same as Dumbo.\n\n**Delirium** is powered by 18 -rounds of `Keccak-f[200]` permutation, which works with 16 -bytes secret key, 12 -bytes public message nonce \u0026 16 -bytes authentication tag.\n\n\u003e Note, in all of the above cases N, M \u003e= 0 ( bytes ).\n\n\u003e Asssociated data is never encrypted. AEAD schemes provide secrecy only for plain text, while they provide integrity check for associated data \u0026 cipher text.\n\n\u003e Boolean verification flag must hold truth value ( i.e. authentication check must pass ) for decryption algorithm to release plain text.\n\n\u003e If boolean verification flag is false, decrypted plain text is zeroed.\n\nDuring encryption using any of the above schemes, don't reuse same nonce, under same secret key.\n\nWhile implementing Elephant, I followed the specification submitted to NIST LWC final round call, which can be retrieved from [here](https://csrc.nist.gov/CSRC/media/Projects/lightweight-cryptography/documents/finalist-round/updated-spec-doc/elephant-spec-final.pdf). I suggest you go through this document to better understand the scheme.\n\nPrevious eight AEAD schemes, that I've worked on, can be found\n\n- [Ascon](https://github.com/itzmeanjan/ascon)\n- [TinyJambu](https://github.com/itzmeanjan/tinyjambu)\n- [Xoodyak](https://github.com/itzmeanjan/xoodyak)\n- [Sparkle](https://github.com/itzmeanjan/sparkle)\n- [Photon-Beetle](https://github.com/itzmeanjan/photon-beetle)\n- [ISAP](https://github.com/itzmeanjan/isap)\n- [Romulus](https://github.com/itzmeanjan/romulus)\n- [GIFT-COFB](https://github.com/itzmeanjan/gift-cofb)\n\n\u003e Track progress of NIST LWC standardization effort [here](https://csrc.nist.gov/Projects/lightweight-cryptography)\n\n## Prerequisites\n\n- C++ compiler such as `g++`/ `clang++`, with support for C++20 standard library\n\n```bash\n$ g++ --version\ng++ (Ubuntu 11.2.0-19ubuntu1) 11.2.0\n\n$ clang++ --version\nUbuntu clang version 14.0.0-1ubuntu1\nTarget: aarch64-unknown-linux-gnu\nThread model: posix\nInstalledDir: /usr/bin\n```\n\n- System development utilities such as `make`, `cmake`, `git`.\n\n```bash\n$ make --version\nGNU Make 3.81\n\n$ cmake --version\ncmake version 3.23.2\n```\n\n- For testing functional correctness of Elephant AEAD schemes, you'll need to install `python3`, `wget` \u0026 `unzip`.\n\n```bash\n$ python3 --version\nPython 3.10.4\n\n$ wget --version\nGNU Wget 1.21.3 built on darwin21.3.0.\n\n$ unzip -v\nUnZip 6.00 of 20 April 2009\n```\n\n- There are some python dependencies, which can be installed by issuing\n\n```bash\npython3 -m pip install --user -r wrapper/python/requirements.txt\n```\n\n- For benchmark Elephant AEAD schemes \u0026 underlying permutations, you need to globally install `google-benchmark`; see [this](https://github.com/google/benchmark/tree/60b16f1#installation) guide.\n\n## Testing\n\nFor ensuring functional correctness and compatibility with Elephantv2 specification ( as submitted to NIST LWC final round call ), I make use of Known Answer Tests ( KAT ) in NIST submission package.\n\nGiven 16 -bytes secret key, 12 -bytes public message nonce, plain text and associated data, I use Dumbo, Jumbo `encrypt` routine for computing cipher text and 8 -bytes authentication tag, which is byte-by-byte compared against KATs. Finally an attempt to decrypt back to plain text, using Dumbo, Jumbo verified decryption algorithm, is also made, while ensuring presence of truth value in boolean verification flag. \n\nSimilarly Delirium AEAD implementation is tested against KATs, only difference is that it uses 16 -bytes authentication tag.\n\n\u003e Note, if authentication verification fails ( during decryption phase ), decrypted plain text is not released ( i.e. zeroed ).\n\nFor executing test cases, issue\n\n```bash\nmake\n```\n\n## Benchmarking\n\nBenchmarking following listed routines, can be done by issuing\n\n```bash\nmake benchmark\n```\n\n\u003e For disabling CPU scaling, when benchmarking, see [this](https://github.com/google/benchmark/blob/60b16f1/docs/user_guide.md#disabling-cpu-frequency-scaling)\n\n- Spongent-π[160], Spongent-π[176] permutation\n- Keccak-f[200] permutation\n- Dumbo encrypt/ decrypt\n- Jumbo encrypt/ decrypt\n- Delirium encrypt/ decrypt\n\n\u003e Note, benchmarking of encrypt/ decrypt routines are done with constant sized ( 32 -bytes ) associated data \u0026 varied length ( power of 2 values from 64 to 4096 -bytes ) plain/ cipher text. Both associated data \u0026 plain texts are randomly generated.\n\n\u003e Also note, neither Dumbo nor Jumbo is software platform friendly, but Keccak-f[200] based Delirium is; see section 1 of Elephant [specification](https://csrc.nist.gov/CSRC/media/Projects/lightweight-cryptography/documents/finalist-round/updated-spec-doc/elephant-spec-final.pdf)\n\n\u003e You'll be able to notice that Delirium AEAD performs much better compared to Dumbo \u0026 Jumbo, in following benchmark results.\n\n\u003e Elephant is an encrypt-then-mac style construction, which makes it possible to parallelly {en, de}crypt different plain/ cipher text blocks, though parallelization is not yet implemented here.\n\n### On Intel(R) Core(TM) i5-8279U CPU @ 2.40GHz\n\n```bash\n2022-07-29T10:50:25+04:00\nRunning ./bench/a.out\nRun on (8 X 2400 MHz CPU s)\nCPU Caches:\n  L1 Data 32 KiB\n  L1 Instruction 32 KiB\n  L2 Unified 256 KiB (x4)\n  L3 Unified 6144 KiB\nLoad Average: 1.55, 2.30, 2.46\n--------------------------------------------------------------------------------------------------------\nBenchmark                                              Time             CPU   Iterations UserCounters...\n--------------------------------------------------------------------------------------------------------\nbench_elephant::spongent_permutation\u003c160, 1\u003e         321 ns          320 ns      2245079 bytes_per_second=59.6076M/s\nbench_elephant::spongent_permutation\u003c160, 80\u003e      25128 ns        25111 ns        26192 bytes_per_second=777.795k/s\nbench_elephant::spongent_permutation\u003c176, 1\u003e         360 ns          360 ns      1949839 bytes_per_second=58.2627M/s\nbench_elephant::spongent_permutation\u003c176, 90\u003e      32259 ns        32233 ns        21536 bytes_per_second=666.524k/s\nbench_elephant::keccak_permutation\u003c1\u003e               33.0 ns         33.0 ns     21486959 bytes_per_second=723.122M/s\nbench_elephant::keccak_permutation\u003c18\u003e               587 ns          587 ns      1182532 bytes_per_second=40.6443M/s\nbench_elephant::dumbo_encrypt/32/64               374786 ns       374613 ns         1860 bytes_per_second=250.258k/s\nbench_elephant::dumbo_decrypt/32/64               374672 ns       374325 ns         1855 bytes_per_second=250.451k/s\nbench_elephant::dumbo_encrypt/32/128              525021 ns       524773 ns         1317 bytes_per_second=297.748k/s\nbench_elephant::dumbo_decrypt/32/128              524771 ns       524514 ns         1319 bytes_per_second=297.895k/s\nbench_elephant::dumbo_encrypt/32/256              827981 ns       827412 ns          839 bytes_per_second=339.915k/s\nbench_elephant::dumbo_decrypt/32/256              822066 ns       821595 ns          838 bytes_per_second=342.322k/s\nbench_elephant::dumbo_encrypt/32/512             1498709 ns      1484817 ns          469 bytes_per_second=357.788k/s\nbench_elephant::dumbo_decrypt/32/512             1475760 ns      1474851 ns          476 bytes_per_second=360.206k/s\nbench_elephant::dumbo_encrypt/32/1024            2778663 ns      2776486 ns          253 bytes_per_second=371.423k/s\nbench_elephant::dumbo_decrypt/32/1024            2798333 ns      2795474 ns          253 bytes_per_second=368.9k/s\nbench_elephant::dumbo_encrypt/32/2048            5319518 ns      5317122 ns          131 bytes_per_second=382.021k/s\nbench_elephant::dumbo_decrypt/32/2048            5344753 ns      5341140 ns          129 bytes_per_second=380.303k/s\nbench_elephant::dumbo_encrypt/32/4096           10429979 ns     10423667 ns           66 bytes_per_second=386.74k/s\nbench_elephant::dumbo_decrypt/32/4096           10396952 ns     10393299 ns           67 bytes_per_second=387.87k/s\nbench_elephant::jumbo_encrypt/32/64               418585 ns       418348 ns         1660 bytes_per_second=224.096k/s\nbench_elephant::jumbo_decrypt/32/64               417875 ns       417763 ns         1672 bytes_per_second=224.41k/s\nbench_elephant::jumbo_encrypt/32/128              615919 ns       615390 ns         1124 bytes_per_second=253.904k/s\nbench_elephant::jumbo_decrypt/32/128              612780 ns       612581 ns         1044 bytes_per_second=255.068k/s\nbench_elephant::jumbo_encrypt/32/256             1002065 ns      1001263 ns          691 bytes_per_second=280.895k/s\nbench_elephant::jumbo_decrypt/32/256             1001474 ns      1001072 ns          696 bytes_per_second=280.949k/s\nbench_elephant::jumbo_encrypt/32/512             1783778 ns      1781651 ns          395 bytes_per_second=298.179k/s\nbench_elephant::jumbo_decrypt/32/512             1773050 ns      1772175 ns          394 bytes_per_second=299.773k/s\nbench_elephant::jumbo_encrypt/32/1024            3248714 ns      3247397 ns          214 bytes_per_second=317.562k/s\nbench_elephant::jumbo_decrypt/32/1024            3269078 ns      3267090 ns          200 bytes_per_second=315.648k/s\nbench_elephant::jumbo_encrypt/32/2048            6564727 ns      6530101 ns          109 bytes_per_second=311.06k/s\nbench_elephant::jumbo_decrypt/32/2048            6869725 ns      6788796 ns           93 bytes_per_second=299.206k/s\nbench_elephant::jumbo_encrypt/32/4096           12411939 ns     12372536 ns           56 bytes_per_second=325.822k/s\nbench_elephant::jumbo_decrypt/32/4096           12581601 ns     12511566 ns           53 bytes_per_second=322.202k/s\nbench_elephant::delirium_encrypt/32/64              7372 ns         7366 ns        92195 bytes_per_second=12.4295M/s\nbench_elephant::delirium_decrypt/32/64              7999 ns         7850 ns        86856 bytes_per_second=11.6628M/s\nbench_elephant::delirium_encrypt/32/128            12077 ns        11862 ns        59221 bytes_per_second=12.8633M/s\nbench_elephant::delirium_decrypt/32/128            11187 ns        11167 ns        58189 bytes_per_second=13.6643M/s\nbench_elephant::delirium_encrypt/32/256            17422 ns        17406 ns        40019 bytes_per_second=15.7797M/s\nbench_elephant::delirium_decrypt/32/256            17511 ns        17491 ns        38418 bytes_per_second=15.703M/s\nbench_elephant::delirium_encrypt/32/512            29989 ns        29967 ns        23113 bytes_per_second=17.3123M/s\nbench_elephant::delirium_decrypt/32/512            30111 ns        30084 ns        23126 bytes_per_second=17.245M/s\nbench_elephant::delirium_encrypt/32/1024           55462 ns        55321 ns        12292 bytes_per_second=18.2043M/s\nbench_elephant::delirium_decrypt/32/1024           55125 ns        55073 ns        12068 bytes_per_second=18.2864M/s\nbench_elephant::delirium_encrypt/32/2048          106736 ns       106697 ns         6470 bytes_per_second=18.5914M/s\nbench_elephant::delirium_decrypt/32/2048          108815 ns       108366 ns         6091 bytes_per_second=18.305M/s\nbench_elephant::delirium_encrypt/32/4096          216919 ns       215549 ns         3119 bytes_per_second=18.2639M/s\nbench_elephant::delirium_decrypt/32/4096          218069 ns       216541 ns         3213 bytes_per_second=18.1802M/s\n```\n\n### On AWS Graviton2\n\n```bash\n2022-07-29T06:52:15+00:00\nRunning ./bench/a.out\nRun on (16 X 166.66 MHz CPU s)\nCPU Caches:\n  L1 Data 32 KiB (x16)\n  L1 Instruction 48 KiB (x16)\n  L2 Unified 2048 KiB (x4)\nLoad Average: 0.15, 0.03, 0.01\n--------------------------------------------------------------------------------------------------------\nBenchmark                                              Time             CPU   Iterations UserCounters...\n--------------------------------------------------------------------------------------------------------\nbench_elephant::spongent_permutation\u003c160, 1\u003e         675 ns          675 ns      1036164 bytes_per_second=28.2462M/s\nbench_elephant::spongent_permutation\u003c160, 80\u003e      54064 ns        54063 ns        12944 bytes_per_second=361.265k/s\nbench_elephant::spongent_permutation\u003c176, 1\u003e         639 ns          639 ns      1095754 bytes_per_second=32.8431M/s\nbench_elephant::spongent_permutation\u003c176, 90\u003e      56916 ns        56915 ns        12297 bytes_per_second=377.48k/s\nbench_elephant::keccak_permutation\u003c1\u003e               64.4 ns         64.4 ns     10870294 bytes_per_second=370.269M/s\nbench_elephant::keccak_permutation\u003c18\u003e              1012 ns         1012 ns       691370 bytes_per_second=23.5483M/s\nbench_elephant::dumbo_encrypt/32/64               810610 ns       810605 ns          864 bytes_per_second=115.654k/s\nbench_elephant::dumbo_decrypt/32/64               810542 ns       810538 ns          864 bytes_per_second=115.664k/s\nbench_elephant::dumbo_encrypt/32/128             1134860 ns      1134833 ns          617 bytes_per_second=137.685k/s\nbench_elephant::dumbo_decrypt/32/128             1134771 ns      1134763 ns          617 bytes_per_second=137.694k/s\nbench_elephant::dumbo_encrypt/32/256             1783373 ns      1783331 ns          393 bytes_per_second=157.71k/s\nbench_elephant::dumbo_decrypt/32/256             1783303 ns      1783277 ns          393 bytes_per_second=157.715k/s\nbench_elephant::dumbo_encrypt/32/512             3188341 ns      3188320 ns          220 bytes_per_second=166.624k/s\nbench_elephant::dumbo_decrypt/32/512             3188489 ns      3188416 ns          220 bytes_per_second=166.619k/s\nbench_elephant::dumbo_encrypt/32/1024            5998457 ns      5998376 ns          117 bytes_per_second=171.922k/s\nbench_elephant::dumbo_decrypt/32/1024            5998382 ns      5998342 ns          117 bytes_per_second=171.923k/s\nbench_elephant::dumbo_encrypt/32/2048           11509963 ns     11509888 ns           61 bytes_per_second=176.479k/s\nbench_elephant::dumbo_decrypt/32/2048           11510028 ns     11509950 ns           61 bytes_per_second=176.478k/s\nbench_elephant::dumbo_encrypt/32/4096           22533223 ns     22533082 ns           31 bytes_per_second=178.904k/s\nbench_elephant::dumbo_decrypt/32/4096           22535620 ns     22534223 ns           31 bytes_per_second=178.895k/s\nbench_elephant::jumbo_encrypt/32/64               746437 ns       746411 ns          938 bytes_per_second=125.601k/s\nbench_elephant::jumbo_decrypt/32/64               747161 ns       747156 ns          937 bytes_per_second=125.476k/s\nbench_elephant::jumbo_encrypt/32/128             1090978 ns      1090970 ns          642 bytes_per_second=143.221k/s\nbench_elephant::jumbo_decrypt/32/128             1091762 ns      1091738 ns          641 bytes_per_second=143.12k/s\nbench_elephant::jumbo_encrypt/32/256             1780147 ns      1780136 ns          393 bytes_per_second=157.994k/s\nbench_elephant::jumbo_decrypt/32/256             1780949 ns      1780918 ns          393 bytes_per_second=157.924k/s\nbench_elephant::jumbo_encrypt/32/512             3158472 ns      3158452 ns          222 bytes_per_second=168.199k/s\nbench_elephant::jumbo_decrypt/32/512             3159294 ns      3159275 ns          222 bytes_per_second=168.156k/s\nbench_elephant::jumbo_encrypt/32/1024            5800189 ns      5800151 ns          121 bytes_per_second=177.797k/s\nbench_elephant::jumbo_decrypt/32/1024            5801250 ns      5801213 ns          121 bytes_per_second=177.765k/s\nbench_elephant::jumbo_encrypt/32/2048           11198258 ns     11198077 ns           63 bytes_per_second=181.393k/s\nbench_elephant::jumbo_decrypt/32/2048           11199316 ns     11199241 ns           63 bytes_per_second=181.374k/s\nbench_elephant::jumbo_encrypt/32/4096           21879577 ns     21879278 ns           32 bytes_per_second=184.25k/s\nbench_elephant::jumbo_decrypt/32/4096           21880699 ns     21880551 ns           32 bytes_per_second=184.239k/s\nbench_elephant::delirium_encrypt/32/64             13094 ns        13094 ns        53458 bytes_per_second=6.99216M/s\nbench_elephant::delirium_decrypt/32/64             12744 ns        12743 ns        54900 bytes_per_second=7.18428M/s\nbench_elephant::delirium_encrypt/32/128            19910 ns        19910 ns        35157 bytes_per_second=7.66388M/s\nbench_elephant::delirium_decrypt/32/128            19100 ns        19100 ns        36646 bytes_per_second=7.98878M/s\nbench_elephant::delirium_encrypt/32/256            31313 ns        31312 ns        22361 bytes_per_second=8.77156M/s\nbench_elephant::delirium_decrypt/32/256            29666 ns        29665 ns        23596 bytes_per_second=9.25853M/s\nbench_elephant::delirium_encrypt/32/512            54065 ns        54064 ns        12944 bytes_per_second=9.59593M/s\nbench_elephant::delirium_decrypt/32/512            50740 ns        50737 ns        13804 bytes_per_second=10.2252M/s\nbench_elephant::delirium_encrypt/32/1024           99556 ns        99556 ns         7031 bytes_per_second=10.1157M/s\nbench_elephant::delirium_decrypt/32/1024           92935 ns        92932 ns         7532 bytes_per_second=10.8367M/s\nbench_elephant::delirium_encrypt/32/2048          192850 ns       192849 ns         3630 bytes_per_second=10.286M/s\nbench_elephant::delirium_decrypt/32/2048          179465 ns       179462 ns         3900 bytes_per_second=11.0533M/s\nbench_elephant::delirium_encrypt/32/4096          379266 ns       379263 ns         1845 bytes_per_second=10.38M/s\nbench_elephant::delirium_decrypt/32/4096          352195 ns       352193 ns         1988 bytes_per_second=11.1779M/s\n```\n\n### On AWS Graviton3\n\n```bash\n2022-07-29T06:54:03+00:00\nRunning ./bench/a.out\nRun on (64 X 2100 MHz CPU s)\nCPU Caches:\n  L1 Data 64 KiB (x64)\n  L1 Instruction 64 KiB (x64)\n  L2 Unified 1024 KiB (x64)\n  L3 Unified 32768 KiB (x1)\nLoad Average: 0.08, 0.02, 0.01\n--------------------------------------------------------------------------------------------------------\nBenchmark                                              Time             CPU   Iterations UserCounters...\n--------------------------------------------------------------------------------------------------------\nbench_elephant::spongent_permutation\u003c160, 1\u003e         361 ns          361 ns      1941443 bytes_per_second=52.8981M/s\nbench_elephant::spongent_permutation\u003c160, 80\u003e      27873 ns        27873 ns        25115 bytes_per_second=700.731k/s\nbench_elephant::spongent_permutation\u003c176, 1\u003e         316 ns          316 ns      2213373 bytes_per_second=66.3474M/s\nbench_elephant::spongent_permutation\u003c176, 90\u003e      28464 ns        28464 ns        24597 bytes_per_second=754.802k/s\nbench_elephant::keccak_permutation\u003c1\u003e               41.1 ns         41.1 ns     17020969 bytes_per_second=579.426M/s\nbench_elephant::keccak_permutation\u003c18\u003e               520 ns          520 ns      1346944 bytes_per_second=45.8723M/s\nbench_elephant::dumbo_encrypt/32/64               422299 ns       422290 ns         1658 bytes_per_second=222.004k/s\nbench_elephant::dumbo_decrypt/32/64               418785 ns       418774 ns         1672 bytes_per_second=223.868k/s\nbench_elephant::dumbo_encrypt/32/128              592426 ns       592413 ns         1181 bytes_per_second=263.752k/s\nbench_elephant::dumbo_decrypt/32/128              586248 ns       586235 ns         1194 bytes_per_second=266.531k/s\nbench_elephant::dumbo_encrypt/32/256              932741 ns       932721 ns          751 bytes_per_second=301.537k/s\nbench_elephant::dumbo_decrypt/32/256              921221 ns       921183 ns          760 bytes_per_second=305.314k/s\nbench_elephant::dumbo_encrypt/32/512             1670313 ns      1670234 ns          419 bytes_per_second=318.069k/s\nbench_elephant::dumbo_decrypt/32/512             1646950 ns      1646914 ns          418 bytes_per_second=322.573k/s\nbench_elephant::dumbo_encrypt/32/1024            3143817 ns      3143749 ns          223 bytes_per_second=328.032k/s\nbench_elephant::dumbo_decrypt/32/1024            3097916 ns      3097848 ns          226 bytes_per_second=332.892k/s\nbench_elephant::dumbo_encrypt/32/2048            6035157 ns      6035025 ns          116 bytes_per_second=336.577k/s\nbench_elephant::dumbo_decrypt/32/2048            5944662 ns      5944533 ns          118 bytes_per_second=341.701k/s\nbench_elephant::dumbo_encrypt/32/4096           11818049 ns     11817791 ns           59 bytes_per_second=341.117k/s\nbench_elephant::dumbo_decrypt/32/4096           11636729 ns     11636475 ns           60 bytes_per_second=346.432k/s\nbench_elephant::jumbo_encrypt/32/64               369705 ns       369697 ns         1891 bytes_per_second=253.586k/s\nbench_elephant::jumbo_decrypt/32/64               370411 ns       370401 ns         1894 bytes_per_second=253.104k/s\nbench_elephant::jumbo_encrypt/32/128              541387 ns       541365 ns         1289 bytes_per_second=288.622k/s\nbench_elephant::jumbo_decrypt/32/128              543241 ns       543220 ns         1294 bytes_per_second=287.637k/s\nbench_elephant::jumbo_encrypt/32/256              882570 ns       882551 ns          793 bytes_per_second=318.678k/s\nbench_elephant::jumbo_decrypt/32/256              885685 ns       885666 ns          792 bytes_per_second=317.558k/s\nbench_elephant::jumbo_encrypt/32/512             1566715 ns      1566675 ns          447 bytes_per_second=339.094k/s\nbench_elephant::jumbo_decrypt/32/512             1567668 ns      1567620 ns          447 bytes_per_second=338.89k/s\nbench_elephant::jumbo_encrypt/32/1024            2877745 ns      2877659 ns          243 bytes_per_second=358.364k/s\nbench_elephant::jumbo_decrypt/32/1024            2878913 ns      2878850 ns          243 bytes_per_second=358.216k/s\nbench_elephant::jumbo_encrypt/32/2048            5557484 ns      5557337 ns          126 bytes_per_second=365.508k/s\nbench_elephant::jumbo_decrypt/32/2048            5558373 ns      5558252 ns          126 bytes_per_second=365.448k/s\nbench_elephant::jumbo_encrypt/32/4096           10867850 ns     10867613 ns           64 bytes_per_second=370.942k/s\nbench_elephant::jumbo_decrypt/32/4096           10858323 ns     10858086 ns           64 bytes_per_second=371.267k/s\nbench_elephant::delirium_encrypt/32/64              8771 ns         8771 ns        79922 bytes_per_second=10.4385M/s\nbench_elephant::delirium_decrypt/32/64              8909 ns         8909 ns        78592 bytes_per_second=10.2769M/s\nbench_elephant::delirium_encrypt/32/128            13450 ns        13450 ns        52055 bytes_per_second=11.3449M/s\nbench_elephant::delirium_decrypt/32/128            13641 ns        13640 ns        51361 bytes_per_second=11.1866M/s\nbench_elephant::delirium_encrypt/32/256            21275 ns        21274 ns        32901 bytes_per_second=12.9105M/s\nbench_elephant::delirium_decrypt/32/256            21470 ns        21470 ns        32617 bytes_per_second=12.7929M/s\nbench_elephant::delirium_encrypt/32/512            36902 ns        36901 ns        18969 bytes_per_second=14.059M/s\nbench_elephant::delirium_decrypt/32/512            37090 ns        37090 ns        18870 bytes_per_second=13.9877M/s\nbench_elephant::delirium_encrypt/32/1024           68152 ns        68150 ns        10276 bytes_per_second=14.7774M/s\nbench_elephant::delirium_decrypt/32/1024           68361 ns        68359 ns        10241 bytes_per_second=14.7322M/s\nbench_elephant::delirium_encrypt/32/2048          132156 ns       132153 ns         5298 bytes_per_second=15.0102M/s\nbench_elephant::delirium_decrypt/32/2048          132476 ns       132471 ns         5284 bytes_per_second=14.9741M/s\nbench_elephant::delirium_encrypt/32/4096          260077 ns       260071 ns         2692 bytes_per_second=15.1373M/s\nbench_elephant::delirium_decrypt/32/4096          260673 ns       260668 ns         2686 bytes_per_second=15.1026M/s\n```\n\n### On Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz\n\n```bash\n2022-07-29T06:55:46+00:00\nRunning ./bench/a.out\nRun on (4 X 2300 MHz CPU s)\nCPU Caches:\n  L1 Data 32 KiB (x2)\n  L1 Instruction 32 KiB (x2)\n  L2 Unified 256 KiB (x2)\n  L3 Unified 46080 KiB (x1)\nLoad Average: 0.08, 0.02, 0.01\n--------------------------------------------------------------------------------------------------------\nBenchmark                                              Time             CPU   Iterations UserCounters...\n--------------------------------------------------------------------------------------------------------\nbench_elephant::spongent_permutation\u003c160, 1\u003e         406 ns          406 ns      1724557 bytes_per_second=46.9871M/s\nbench_elephant::spongent_permutation\u003c160, 80\u003e      32410 ns        32410 ns        21594 bytes_per_second=602.634k/s\nbench_elephant::spongent_permutation\u003c176, 1\u003e         438 ns          438 ns      1596130 bytes_per_second=47.8561M/s\nbench_elephant::spongent_permutation\u003c176, 90\u003e      40568 ns        40566 ns        17252 bytes_per_second=529.611k/s\nbench_elephant::keccak_permutation\u003c1\u003e               86.7 ns         86.7 ns      8086390 bytes_per_second=274.973M/s\nbench_elephant::keccak_permutation\u003c18\u003e              1468 ns         1468 ns       476544 bytes_per_second=16.2379M/s\nbench_elephant::dumbo_encrypt/32/64               482460 ns       482443 ns         1451 bytes_per_second=194.323k/s\nbench_elephant::dumbo_decrypt/32/64               488780 ns       488737 ns         1433 bytes_per_second=191.821k/s\nbench_elephant::dumbo_encrypt/32/128              675070 ns       675062 ns         1036 bytes_per_second=231.46k/s\nbench_elephant::dumbo_decrypt/32/128              683127 ns       683118 ns         1024 bytes_per_second=228.731k/s\nbench_elephant::dumbo_encrypt/32/256             1060730 ns      1060660 ns          660 bytes_per_second=265.165k/s\nbench_elephant::dumbo_decrypt/32/256             1071774 ns      1071708 ns          653 bytes_per_second=262.432k/s\nbench_elephant::dumbo_encrypt/32/512             1895863 ns      1895742 ns          369 bytes_per_second=280.233k/s\nbench_elephant::dumbo_decrypt/32/512             1913229 ns      1913143 ns          366 bytes_per_second=277.684k/s\nbench_elephant::dumbo_encrypt/32/1024            3566629 ns      3566373 ns          196 bytes_per_second=289.159k/s\nbench_elephant::dumbo_decrypt/32/1024            3596799 ns      3596427 ns          195 bytes_per_second=286.743k/s\nbench_elephant::dumbo_encrypt/32/2048            6844614 ns      6843861 ns          102 bytes_per_second=296.799k/s\nbench_elephant::dumbo_decrypt/32/2048            6897452 ns      6897017 ns          101 bytes_per_second=294.511k/s\nbench_elephant::dumbo_encrypt/32/4096           13405258 ns     13404917 ns           52 bytes_per_second=300.729k/s\nbench_elephant::dumbo_decrypt/32/4096           13494411 ns     13494493 ns           52 bytes_per_second=298.733k/s\nbench_elephant::jumbo_encrypt/32/64               520698 ns       520676 ns         1345 bytes_per_second=180.054k/s\nbench_elephant::jumbo_decrypt/32/64               519027 ns       519000 ns         1349 bytes_per_second=180.636k/s\nbench_elephant::jumbo_encrypt/32/128              760177 ns       760161 ns          921 bytes_per_second=205.549k/s\nbench_elephant::jumbo_decrypt/32/128              757816 ns       757821 ns          924 bytes_per_second=206.183k/s\nbench_elephant::jumbo_encrypt/32/256             1239241 ns      1239249 ns          564 bytes_per_second=226.952k/s\nbench_elephant::jumbo_decrypt/32/256             1236019 ns      1235975 ns          567 bytes_per_second=227.553k/s\nbench_elephant::jumbo_encrypt/32/512             2198475 ns      2198465 ns          319 bytes_per_second=241.646k/s\nbench_elephant::jumbo_decrypt/32/512             2192996 ns      2192930 ns          319 bytes_per_second=242.256k/s\nbench_elephant::jumbo_encrypt/32/1024            4036555 ns      4036586 ns          173 bytes_per_second=255.476k/s\nbench_elephant::jumbo_decrypt/32/1024            4025258 ns      4025103 ns          174 bytes_per_second=256.205k/s\nbench_elephant::jumbo_encrypt/32/2048            7791302 ns      7790816 ns           90 bytes_per_second=260.724k/s\nbench_elephant::jumbo_decrypt/32/2048            7773041 ns      7772543 ns           90 bytes_per_second=261.337k/s\nbench_elephant::jumbo_encrypt/32/4096           15226107 ns     15224531 ns           46 bytes_per_second=264.786k/s\nbench_elephant::jumbo_decrypt/32/4096           15185116 ns     15184138 ns           46 bytes_per_second=265.491k/s\nbench_elephant::delirium_encrypt/32/64             18888 ns        18887 ns        37064 bytes_per_second=4.84736M/s\nbench_elephant::delirium_decrypt/32/64             18976 ns        18975 ns        36959 bytes_per_second=4.8249M/s\nbench_elephant::delirium_encrypt/32/128            28135 ns        28133 ns        24871 bytes_per_second=5.42383M/s\nbench_elephant::delirium_decrypt/32/128            28174 ns        28172 ns        24862 bytes_per_second=5.41629M/s\nbench_elephant::delirium_encrypt/32/256            43560 ns        43556 ns        16072 bytes_per_second=6.3058M/s\nbench_elephant::delirium_decrypt/32/256            43471 ns        43469 ns        16100 bytes_per_second=6.31853M/s\nbench_elephant::delirium_encrypt/32/512            74289 ns        74284 ns         9426 bytes_per_second=6.98401M/s\nbench_elephant::delirium_decrypt/32/512            74207 ns        74203 ns         9432 bytes_per_second=6.99158M/s\nbench_elephant::delirium_encrypt/32/1024          135961 ns       135958 ns         5156 bytes_per_second=7.40732M/s\nbench_elephant::delirium_decrypt/32/1024          135209 ns       135208 ns         5173 bytes_per_second=7.4484M/s\nbench_elephant::delirium_encrypt/32/2048          261226 ns       261223 ns         2679 bytes_per_second=7.59367M/s\nbench_elephant::delirium_decrypt/32/2048          260364 ns       260362 ns         2688 bytes_per_second=7.61879M/s\nbench_elephant::delirium_encrypt/32/4096          512829 ns       512786 ns         1365 bytes_per_second=7.67722M/s\nbench_elephant::delirium_decrypt/32/4096          512671 ns       512642 ns         1366 bytes_per_second=7.67937M/s\n```\n\n## Usage\n\nElephant is a zero-dependency, header-only C++ library ( with additional support for C wrapper [interface](wrapper/elephant.cpp), which is used for generating shared library object with C-ABI ), which can be pretty easily used in your project. \n\nThere are three AEAD schemes in Elephant cipher suite, which are implemented here. All of them have common `encrypt`/ `decrypt` interfaces, just one difference to note that, Delirium uses 16 -bytes authentication tag, while both Dumbo \u0026 Jumbo uses 8 -bytes authentication tag.\n\nScheme | Namespace | Header\n--- | --- | ---\nDumbo AEAD | `dumbo::` | [dumbo.hpp](./include/dumbo.hpp)\nJumbo AEAD | `jumbo::` | [jumbo.hpp](./include/jumbo.hpp)\nDelirium AEAD | `delirium::` | [delirium.hpp](./include/delirium.hpp)\n\nI keep usage example of Dumbo, Jumbo \u0026 Delirium AEAD\n\n- [Dumbo](./example/dumbo.cpp)\n- [Jumbo](./example/jumbo.cpp)\n- [Delirium](./example/delirium.cpp)\n\n```bash\nDumbo AEAD\n\nKey       : 4ea28a82a329104a5f32b31dbb3a8f04\nNonce     : 9dc8e14a149ab54744b2159b\nData      : 76d53bd2945b8f9c7b22cbec6a7ff9d0fad3e37bd6b1288eb860124539852932\nText      : 04cd0f374ea2224945b301b302ce3fea68803c76a7944fbabebe1e9e2102d9c6\nEncrypted : 48a9807d4178baccaf0fc7ecd9a4a625217e67457b0671cc4e540a92db4a41f8\nDecrypted : 04cd0f374ea2224945b301b302ce3fea68803c76a7944fbabebe1e9e2102d9c6\nTag       : e594cf2b6a7db6c0\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fitzmeanjan%2Felephant","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fitzmeanjan%2Felephant","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fitzmeanjan%2Felephant/lists"}