initial commit

This commit is contained in:
2025-07-18 22:24:05 +03:00
commit a44810a181
13 changed files with 582 additions and 0 deletions

66
src/main.c Executable file
View File

@@ -0,0 +1,66 @@
#include <tlibc/include/std.h>
#include <BearSSL/inc/bearssl_block.h>
#include <BearSSL/inc/bearssl_hash.h>
#include <BearSSL/inc/bearssl_rand.h>
char *print_hex_memory(u8 *p, u32 len) {
char tmp[3];
u32 output_len = len*2+1;
char *output = (char*)malloc(output_len);
memset(output, 0, output_len);
for (u32 i=0; i < len; i++) {
sprintf(tmp, "%02x", p[i]);
strcat(output, tmp);
}
return output;
}
int main(){
const char key_raw[] = "abobus";
const u32 key_raw_len = ARRAY_SIZE(key_raw)-1;
const char data[] = "0123456789_hii_"; // must be multiple of 16
const u32 data_len = ARRAY_SIZE(data);
u8 hash_buffer[br_sha256_SIZE];
const u32 hash_buffer_len = ARRAY_SIZE(hash_buffer);
memset(hash_buffer, 0, hash_buffer_len);
memcpy(hash_buffer, key_raw, key_raw_len);
br_sha256_context sha256_ctx;
br_sha256_init(&sha256_ctx);
// hash multiple times
for(i32 i = 0; i < 8; i++){
br_sha256_update(&sha256_ctx, hash_buffer, hash_buffer_len);
br_sha256_out(&sha256_ctx, hash_buffer);
printf("hash(i=%i) %s\n", i, print_hex_memory(hash_buffer, hash_buffer_len));
}
u8 key_padded[32]; // must be 16 or 24 or 32
const u32 key_padded_len = ARRAY_SIZE(key_padded);
memset(key_padded, 0, key_padded_len);
memcpy(key_padded, hash_buffer, key_padded_len);
u8 buffer[512];
const u32 buffer_len = ARRAY_SIZE(buffer);
memset(buffer, 0, buffer_len);
memcpy(buffer, data, data_len);
br_aes_ct64_cbcenc_keys enc_ctx;
br_aes_ct64_cbcenc_init(&enc_ctx, key_padded, key_padded_len);
u8 iv[16];
memset(iv, 0, ARRAY_SIZE(iv));
br_aes_ct64_cbcenc_run(&enc_ctx, iv, buffer, buffer_len);
printf("data encrypted\n");
br_aes_ct64_cbcdec_keys dec_ctx;
br_aes_ct64_cbcdec_init(&dec_ctx, key_padded, key_padded_len);
memset(iv, 0, ARRAY_SIZE(iv));
br_aes_ct64_cbcdec_run(&dec_ctx, iv, buffer, buffer_len);
printf("data decrypted\n");
fwrite(buffer, 1, buffer_len, stdout);
return 0;
}