mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Implement ChaCha20 Crypto in stdlib (#2643)
* ChaCha20 implementation, first pass * fix bug with clone_slice when length is 0 * final ChaCha20 crypto tidying * final adjustments; add benchmark * add guards everywhere else or w/e * stdlib 'i++' conformity * release notes & security warning updates * update tests; cleanup; default counter should be 0 not 1 * remove prints in test file * add extra unit tests for unaligned buffers Co-authored-by: Manu Linares <mbarriolinares@gmail.com> * one final alignment test * nice contraction of tests w/ some paranoia sprinkled in * nearly double the efficiency of chacha20's transform Co-authored-by: Manu Linares <mbarriolinares@gmail.com> * fix memory leak in test case * improve one of the unit tests to cover more cases * greatly simplify chacha20 'transform' Co-authored-by: Manu Linares <mbarriolinares@gmail.com> --------- Co-authored-by: Manu Linares <mbarriolinares@gmail.com>
This commit is contained in:
25
benchmarks/stdlib/crypto/chacha20.c3
Normal file
25
benchmarks/stdlib/crypto/chacha20.c3
Normal file
@@ -0,0 +1,25 @@
|
||||
// Copyright (c) 2025 Zack Puhl <github@xmit.xyz>. All rights reserved.
|
||||
// Use of this source code is governed by the MIT license
|
||||
// a copy of which can be found in the LICENSE_STDLIB file.
|
||||
module chacha20_benchmarks;
|
||||
import std::crypto::chacha20;
|
||||
|
||||
|
||||
fn void initialize_bench() @init
|
||||
{
|
||||
set_benchmark_warmup_iterations(3);
|
||||
set_benchmark_max_iterations(1024);
|
||||
}
|
||||
|
||||
const char[] KEY = x'98bef1469be7269837a45bfbc92a5a6ac762507cf96443bf33b96b1bd4c6f8f6';
|
||||
const char[] NONCE = x'44e792d63335abb1582e9253';
|
||||
const uint COUNTER = 42;
|
||||
|
||||
char[] one_megabyte = { [0..1024*1024] = 0xA5 };
|
||||
|
||||
// This doesn't test both encryption + decryption, because it's a symmetric operation that shares
|
||||
// a single common data transformation. Testing one limb is enough.
|
||||
fn void gogo_chacha20() @benchmark
|
||||
{
|
||||
chacha20::encrypt_mut(one_megabyte[..], KEY, NONCE, COUNTER);
|
||||
}
|
||||
Reference in New Issue
Block a user