Skip to content
Snippets Groups Projects
Commit 0bfb0d15 authored by Dmitriy A. Gerasimov's avatar Dmitriy A. Gerasimov
Browse files

[+] na - no allocation enc/dec functions

[*] Returned back old enc/dec signatures
parent fd59fea8
No related branches found
No related tags found
No related merge requests found
......@@ -25,6 +25,7 @@
#include <stdint.h>
#include <string.h>
#include <time.h>
#include <assert.h>
#include "dap_enc.h"
#include "dap_enc_base64.h"
#include "dap_enc_key.h"
......@@ -50,36 +51,70 @@ void dap_enc_deinit()
}
/**
* @brief dap_enc_code_out_size
* @param a_key
* @param a_buf_in_size
* @return
*/
size_t dap_enc_code_out_size(dap_enc_key_t a_key, const size_t a_buf_in_size)
{
(void) a_key;
(void) a_buf_in_size;
assert(0); // TODO make out buf size calculations
return 0;
}
/**
* @brief dap_enc_decode_out_size
* @param a_key
* @param a_buf_in_size
* @return
*/
size_t dap_enc_decode_out_size(dap_enc_key_t a_key, const size_t a_buf_in_size)
{
(void) a_key;
(void) a_buf_in_size;
assert(0); // TODO make out buf size calculations
return 0;
}
/**
* @brief dap_enc_code Encode data with key
* @param key_private Private key
* @param buf Input buffer
* @param buf_size Input buffer size
* @param buf_out Output buffer
* @param a_key Private key
* @param a_buf Input buffer
* @param a_buf_size Input buffer size
* @param a_buf_out Output buffer
* @param a_buf_out_size_max
* @return bytes actualy written in the output buffer
*/
size_t dap_enc_code(struct dap_enc_key * key,const void * buf,const size_t buf_size,
void ** buf_out, dap_enc_data_type_t data_type_out)
size_t dap_enc_code(struct dap_enc_key * a_key,const void * a_buf_in,const size_t a_buf_size,
void * a_buf_out, const size_t a_buf_out_size_max, dap_enc_data_type_t a_data_type_out)
{
if(key->enc) {
if(data_type_out == DAP_ENC_DATA_TYPE_RAW) {
return key->enc(key, buf, buf_size, buf_out);
if(a_key->enc_na) {
if(a_data_type_out == DAP_ENC_DATA_TYPE_RAW) {
return a_key->enc_na(a_key, a_buf_in, a_buf_size, a_buf_out, a_buf_out_size_max);
}else{
void *l_proc_buf;
l_proc_buf = DAP_NEW_SIZE (void, a_buf_out_size_max );
size_t l_proc_buf_size = a_key->enc_na(a_key, a_buf_in, a_buf_size, l_proc_buf,a_buf_out_size_max);
if(a_data_type_out == DAP_ENC_DATA_TYPE_B64 || a_data_type_out == DAP_ENC_DATA_TYPE_B64_URLSAFE) {
if( DAP_ENC_BASE64_ENCODE_SIZE ( l_proc_buf_size) < a_buf_out_size_max ){
size_t l_buf_out_size=dap_enc_base64_encode(l_proc_buf, l_proc_buf_size, a_buf_out, a_data_type_out);
DAP_DELETE(l_proc_buf);
return l_buf_out_size;
}
} else {
log_it(L_ERROR, "Unknown dap_enc_data_type");
DAP_DELETE(l_proc_buf);
return 0;
}
return l_proc_buf_size;
}
void *proc_buf;
size_t ret = key->enc(key, buf, buf_size, &proc_buf);
if(data_type_out == DAP_ENC_DATA_TYPE_B64 || data_type_out == DAP_ENC_DATA_TYPE_B64_URLSAFE) {
*buf_out = malloc(DAP_ENC_BASE64_ENCODE_SIZE(ret));
ret=dap_enc_base64_encode(proc_buf, ret, *buf_out, data_type_out);
free(proc_buf);
} else {
log_it(L_ERROR, "Unknown dap_enc_data_type");
return 0;
}
return ret;
} else {
log_it(L_ERROR, "key->enc is NULL");
log_it(L_ERROR, "key->enc_na is NULL");
return 0;
}
}
......@@ -93,39 +128,39 @@ size_t dap_enc_code(struct dap_enc_key * key,const void * buf,const size_t buf_s
* @param buf_out_max Maximum size of output buffer
* @return bytes actualy written in the output buffer
*/
size_t dap_enc_decode(struct dap_enc_key * key,const void * buf, const size_t buf_size,
void ** buf_out, dap_enc_data_type_t data_type_in)
size_t dap_enc_decode(struct dap_enc_key * a_key,const void * a_buf_in, const size_t a_buf_in_size,
void * a_buf_out, const size_t a_buf_out_size_max, dap_enc_data_type_t a_data_type_in)
{
void *proc_buf = NULL;
const void *proc_buf_const = NULL;
size_t proc_buf_size = 0;
switch(data_type_in){
void *l_proc_buf = NULL;
const void *l_proc_buf_const = NULL;
size_t l_proc_buf_size = 0;
switch(a_data_type_in){
case DAP_ENC_DATA_TYPE_B64:
case DAP_ENC_DATA_TYPE_B64_URLSAFE:
proc_buf=calloc(1,DAP_ENC_BASE64_ENCODE_SIZE(buf_size));
proc_buf_size= dap_enc_base64_decode((const char*) buf,buf_size,proc_buf,data_type_in);
proc_buf_const=proc_buf;
l_proc_buf=DAP_NEW_SIZE(void,DAP_ENC_BASE64_ENCODE_SIZE(a_buf_in_size));
l_proc_buf_size= dap_enc_base64_decode((const char*) a_buf_in,a_buf_in_size,l_proc_buf,a_data_type_in);
l_proc_buf_const=l_proc_buf;
break;
case DAP_ENC_DATA_TYPE_RAW:{
proc_buf_const=buf;
proc_buf_size=buf_size;
l_proc_buf_const=a_buf_in;
l_proc_buf_size=a_buf_in_size;
}break;
}
if(key->dec) {
if(proc_buf_size == 0) {
if(a_key->dec_na) {
if(l_proc_buf_size == 0) {
log_it(L_ERROR, "Buf is null. dap_enc_base64_decode is failed");
return 0;
}
size_t ret = key->dec(key,proc_buf_const,proc_buf_size, buf_out);
size_t ret = a_key->dec_na(a_key,l_proc_buf_const,l_proc_buf_size, a_buf_out,a_buf_out_size_max);
if(data_type_in==DAP_ENC_DATA_TYPE_B64 || data_type_in == DAP_ENC_DATA_TYPE_B64_URLSAFE)
free(proc_buf);
if(a_data_type_in==DAP_ENC_DATA_TYPE_B64 || a_data_type_in == DAP_ENC_DATA_TYPE_B64_URLSAFE)
free(l_proc_buf);
return ret;
} else {
log_it(L_WARNING, "key->dec is NULL");
if(proc_buf_size)
free(proc_buf);
log_it(L_WARNING, "key->dec_na is NULL");
if(l_proc_buf_size)
free(l_proc_buf);
return 0;
}
}
......@@ -32,10 +32,14 @@ extern "C" {
int dap_enc_init(void);
void dap_enc_deinit(void);
size_t dap_enc_code(struct dap_enc_key * key, const void * buf, const size_t buf_size, void ** buf_out,
dap_enc_data_type_t data_type_out);
size_t dap_enc_decode(struct dap_enc_key * key, const void * buf, const size_t buf_size, void ** buf_out,
dap_enc_data_type_t data_type_in);
size_t dap_enc_code_out_size(dap_enc_key_t a_key, const size_t a_buf_in_size);
size_t dap_enc_decode_out_size(dap_enc_key_t a_key, const size_t a_buf_in_size);
size_t dap_enc_code(struct dap_enc_key * a_key, const void * a_buf_in, const size_t a_buf_in_size, void * a_buf_out, const size_t a_buf_out_size_max,
dap_enc_data_type_t a_data_type_out);
size_t dap_enc_decode(struct dap_enc_key * a_key, const void * a_buf_in, const size_t a_buf_in_size, void * a_buf_out, const size_t a_buf_out_size_max,
dap_enc_data_type_t a_data_type_in);
#ifdef __cplusplus
}
......
......@@ -266,7 +266,7 @@ size_t dap_enc_base64_encode(const void * a_in, size_t a_in_size, char * a_out,
a_out[size++] = '=';
}
}
a_out[size+1]='0';
return size;
}
......
......@@ -54,7 +54,9 @@ struct dap_enc_key_callbacks{
[DAP_ENC_KEY_TYPE_IAES]={
.name = "IAES",
.enc = dap_enc_iaes256_cbc_encrypt,
.enc_na = dap_enc_iaes256_cbc_encrypt_fast ,
.dec = dap_enc_iaes256_cbc_decrypt,
.dec_na = dap_enc_iaes256_cbc_decrypt_fast ,
.new_callback = dap_enc_aes_key_new,
.delete_callback = dap_enc_aes_key_delete,
.new_generate_callback = dap_enc_aes_key_generate,
......
......@@ -166,8 +166,8 @@ typedef struct dap_enc_key {
dap_enc_key_type_t type;
dap_enc_callback_dataop_t enc;
dap_enc_callback_dataop_t dec;
dap_enc_callback_dataop_t enc_na;
dap_enc_callback_dataop_t dec_na;
dap_enc_callback_dataop_na_t enc_na;
dap_enc_callback_dataop_na_t dec_na;
dap_enc_gen_alice_shared_key gen_alice_shared_key;
dap_enc_gen_bob_shared_key gen_bob_shared_key;
......
Subproject commit 982e8d9e7726918ce622b42b5335f324e738c6dc
Subproject commit 269a48d990a010dc778067fa88a7c2b793eec647
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment