implemented EncryptedSocketTCP_recvStruct and EncryptedSocketTCP_recvRSA
This commit is contained in:
@@ -4,18 +4,23 @@
|
||||
// write data from src to array and increment array data pointer
|
||||
static inline void __Array_writeNext(Array(u8)* dst, u8* src, size_t size){
|
||||
memcpy(dst->data, src, size);
|
||||
*dst = Array_sliceAfter(*dst, size);
|
||||
*dst = Array_sliceFrom(*dst, size);
|
||||
}
|
||||
|
||||
// read data from array to dst and increment array data pointer
|
||||
static inline void __Array_readNext(u8* dst, Array(u8)* src, size_t size){
|
||||
memcpy(dst, src->data, size);
|
||||
*src = Array_sliceAfter(*src, size);
|
||||
*src = Array_sliceFrom(*src, size);
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// AESBlockEncryptor //
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void AESBlockEncryptor_construct(AESBlockEncryptor* ptr, Array(u8) key, const br_block_cbcenc_class* enc_class){
|
||||
void AESBlockEncryptor_construct(AESBlockEncryptor* ptr,
|
||||
Array(u8) key, const br_block_cbcenc_class* enc_class)
|
||||
{
|
||||
assert(key.size == 16 || key.size == 24 || key.size == 32);
|
||||
|
||||
ptr->enc_class = enc_class;
|
||||
@@ -25,7 +30,15 @@ void AESBlockEncryptor_construct(AESBlockEncryptor* ptr, Array(u8) key, const br
|
||||
rng_init_sha256_seedFromSystem(&ptr->rng_ctx.vtable);
|
||||
}
|
||||
|
||||
Result(u32) AESBlockEncryptor_encrypt(AESBlockEncryptor* ptr, Array(u8) src, Array(u8) dst){
|
||||
void AESBlockEncryptor_changeKey(AESBlockEncryptor* ptr, Array(u8) key)
|
||||
{
|
||||
assert(key.size == 16 || key.size == 24 || key.size == 32);
|
||||
ptr->enc_class->init((void*)ptr->enc_keys, key.data, key.size);
|
||||
}
|
||||
|
||||
Result(u32) AESBlockEncryptor_encrypt(AESBlockEncryptor* ptr,
|
||||
Array(u8) src, Array(u8) dst)
|
||||
{
|
||||
Deferral(4);
|
||||
u32 encrypted_size = AESBlockEncryptor_calcDstSize(src.size);
|
||||
try_assert(dst.size >= encrypted_size);
|
||||
@@ -67,15 +80,28 @@ Result(u32) AESBlockEncryptor_encrypt(AESBlockEncryptor* ptr, Array(u8) src, Arr
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// AESBlockDecryptor //
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void AESBlockDecryptor_construct(AESBlockDecryptor* ptr, Array(u8) key, const br_block_cbcdec_class* dec_class){
|
||||
void AESBlockDecryptor_construct(AESBlockDecryptor* ptr,
|
||||
Array(u8) key, const br_block_cbcdec_class* dec_class)
|
||||
{
|
||||
assert(key.size == 16 || key.size == 24 || key.size == 32);
|
||||
|
||||
ptr->dec_class = dec_class;
|
||||
ptr->dec_class->init((void*)ptr->dec_keys, key.data, key.size);
|
||||
}
|
||||
|
||||
Result(u32) AESBlockDecryptor_decrypt(AESBlockDecryptor* ptr, Array(u8) src, Array(u8) dst){
|
||||
void AESBlockDecryptor_changeKey(AESBlockDecryptor* ptr, Array(u8) key)
|
||||
{
|
||||
assert(key.size == 16 || key.size == 24 || key.size == 32);
|
||||
ptr->dec_class->init((void*)ptr->dec_keys, key.data, key.size);
|
||||
}
|
||||
|
||||
Result(u32) AESBlockDecryptor_decrypt(AESBlockDecryptor* ptr,
|
||||
Array(u8) src, Array(u8) dst)
|
||||
{
|
||||
Deferral(4);
|
||||
try_assert(src.size >= AESBlockEncryptor_calcDstSize(0));
|
||||
try_assert(src.size % 16 == 0 && "src must be array of 16-byte blocks");
|
||||
@@ -116,8 +142,13 @@ Result(u32) AESBlockDecryptor_decrypt(AESBlockDecryptor* ptr, Array(u8) src, Arr
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// AESStreamEncryptor //
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void AESStreamEncryptor_construct(AESStreamEncryptor* ptr, Array(u8) key, const br_block_ctr_class* ctr_class){
|
||||
void AESStreamEncryptor_construct(AESStreamEncryptor* ptr,
|
||||
Array(u8) key, const br_block_ctr_class* ctr_class)
|
||||
{
|
||||
assert(key.size == 16 || key.size == 24 || key.size == 32);
|
||||
|
||||
ptr->ctr_class = ctr_class;
|
||||
@@ -131,7 +162,15 @@ void AESStreamEncryptor_construct(AESStreamEncryptor* ptr, Array(u8) key, const
|
||||
ptr->block_counter = 0;
|
||||
}
|
||||
|
||||
Result(u32) AESStreamEncryptor_encrypt(AESStreamEncryptor* ptr, Array(u8) src, Array(u8) dst){
|
||||
void AESStreamEncryptor_changeKey(AESStreamEncryptor* ptr, Array(u8) key)
|
||||
{
|
||||
assert(key.size == 16 || key.size == 24 || key.size == 32);
|
||||
ptr->ctr_class->init((void*)ptr->ctr_keys, key.data, key.size);
|
||||
}
|
||||
|
||||
Result(u32) AESStreamEncryptor_encrypt(AESStreamEncryptor* ptr,
|
||||
Array(u8) src, Array(u8) dst)
|
||||
{
|
||||
Deferral(4);
|
||||
u32 encrypted_size = AESStreamEncryptor_calcDstSize(src.size);
|
||||
try_assert(dst.size >= encrypted_size);
|
||||
@@ -164,8 +203,13 @@ Result(u32) AESStreamEncryptor_encrypt(AESStreamEncryptor* ptr, Array(u8) src, A
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// AESStreamDecryptor //
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void AESStreamDecryptor_construct(AESStreamDecryptor* ptr, Array(u8) key, const br_block_ctr_class* ctr_class){
|
||||
void AESStreamDecryptor_construct(AESStreamDecryptor* ptr,
|
||||
Array(u8) key, const br_block_ctr_class* ctr_class)
|
||||
{
|
||||
assert(key.size == 16 || key.size == 24 || key.size == 32);
|
||||
|
||||
ptr->ctr_class = ctr_class;
|
||||
@@ -174,7 +218,15 @@ void AESStreamDecryptor_construct(AESStreamDecryptor* ptr, Array(u8) key, const
|
||||
ptr->block_counter = 0;
|
||||
}
|
||||
|
||||
Result(u32) AESStreamDecryptor_decrypt(AESStreamDecryptor* ptr, Array(u8) src, Array(u8) dst){
|
||||
void AESStreamDecryptor_changeKey(AESStreamDecryptor* ptr, Array(u8) key)
|
||||
{
|
||||
assert(key.size == 16 || key.size == 24 || key.size == 32);
|
||||
ptr->ctr_class->init((void*)ptr->ctr_keys, key.data, key.size);
|
||||
}
|
||||
|
||||
Result(u32) AESStreamDecryptor_decrypt(AESStreamDecryptor* ptr,
|
||||
Array(u8) src, Array(u8) dst)
|
||||
{
|
||||
Deferral(4);
|
||||
|
||||
// if it is the beginning of the stream, read IV
|
||||
|
||||
Reference in New Issue
Block a user