mirror of
https://github.com/logicog/RTLPlayground.git
synced 2026-08-30 14:52:51 +08:00
Add an implementation in 8051 assembler for the generation of a ChaCha20 keystream and an encryption function using the keystream in C. A test function using the example from RFC7539 is provided in chacha20_test. Keys, nonce, and block counter and the pointers to the input plaintext, its length and the output pointer are provided via a struct chacha20, which also holds the working state of the ChaCha20 algorithm
24 lines
596 B
C
24 lines
596 B
C
#ifndef _CHACHA_H_
|
|
#define _CHACHA_H_
|
|
|
|
#include <stdint.h>
|
|
|
|
struct chacha20_t {
|
|
uint8_t wstate[64]; // 64 bytes written here
|
|
uint8_t constant[16]; // 128 bit constant
|
|
uint8_t key[32]; // 256-bit secret key
|
|
uint32_t cnt; // 32-bit block counter 1, 2.. Big Endian!
|
|
uint8_t nonce[12]; // 96-bit nonce
|
|
__xdata uint8_t *plaintext;
|
|
uint16_t length;
|
|
__xdata uint8_t *cyphertext;
|
|
};
|
|
|
|
// Encrypt a plaintext with ChaCha20 as per RFC7539
|
|
void chacha20_encrypt(void);
|
|
|
|
// Test ChaCha20 using the example from RFC7539
|
|
void chacha20_test(void);
|
|
|
|
#endif
|