diff --git a/crypto/dap_enc_bliss.c b/crypto/dap_enc_bliss.c
index 557e2ae7b00f5c16660a2e20e03014198ad8cd0f..e7a1e0cad0053585db72a97c5bfd2fc4b25eadcc 100644
--- a/crypto/dap_enc_bliss.c
+++ b/crypto/dap_enc_bliss.c
@@ -6,6 +6,12 @@
 #include "dap_common.h"
 #include "dap_rand.h"
 
+static enum DAP_BLISS_SIGN_SECURITY _bliss_type = MAX_SECURITY; // by default
+
+void dap_enc_sig_bliss_set_type(enum DAP_BLISS_SIGN_SECURITY type)
+{
+    _bliss_type = type;
+}
 
 void dap_enc_sig_bliss_key_new(struct dap_enc_key *key) {
 
@@ -45,39 +51,53 @@ void dap_enc_sig_bliss_key_new_generate(struct dap_enc_key * key, const void *ke
      * type = 3 - good speed and good security (160 bits)
      * type = 4 - max securiry                 (192 bits)
     */
-    int32_t type = 4;
+    //int32_t type = 4;
     key->priv_key_data = malloc(sizeof(bliss_private_key_t));
-    retcode = bliss_b_private_key_gen( (bliss_private_key_t *) &(*key->priv_key_data), type, &entropy);
+    retcode = bliss_b_private_key_gen((bliss_private_key_t *) key->priv_key_data, _bliss_type, &entropy);
     if (retcode != BLISS_B_NO_ERROR) {
-        bliss_b_private_key_delete( &(*key->priv_key_data));
+        bliss_b_private_key_delete(key->priv_key_data);
         log_it(L_CRITICAL, "Error");
         return;
     }
 
     key->pub_key_data = malloc(sizeof(bliss_public_key_t));
-    retcode = bliss_b_public_key_extract( (bliss_public_key_t *) &(*key->pub_key_data), (bliss_public_key_t *) &(*key->priv_key_data));
+    retcode = bliss_b_public_key_extract( (bliss_public_key_t *) key->pub_key_data, (const bliss_private_key_t *) key->priv_key_data);
     if (retcode != BLISS_B_NO_ERROR) {
-        bliss_b_private_key_delete(&(*key->priv_key_data));
-        bliss_b_public_key_delete(&(*key->pub_key_data));
+        bliss_b_private_key_delete(key->priv_key_data);
+        bliss_b_public_key_delete(key->pub_key_data);
         log_it(L_CRITICAL, "Error");
         return;
     }
 }
 
 
-size_t dap_enc_sig_bliss_get_sign(struct dap_enc_key * key, const void * msg, size_t msg_size, void ** signature)
+size_t dap_enc_sig_bliss_get_sign(struct dap_enc_key * key,const void * msg,
+                                  const size_t msg_size, void * signature, const size_t signature_size)
 {
+    if(signature_size < sizeof (bliss_signature_t)) {
+        log_it(L_ERROR, "bad signature size");
+        return 0;
+    }
     uint8_t seed_tmp[SHA3_512_DIGEST_LENGTH];
     entropy_t entropy;
-    randombytes( &seed_tmp, 64);
-    entropy_init( &entropy, seed_tmp);
-
-    return bliss_b_sign( &(*signature), &(*key->priv_key_data), msg, msg_size, &entropy);
+    randombytes(&seed_tmp, 64);
+    entropy_init(&entropy, seed_tmp);
+
+    return bliss_b_sign((bliss_signature_t *)signature,
+                        (const bliss_private_key_t *)key->priv_key_data,
+                        (const uint8_t *)msg,
+                        msg_size,
+                        &entropy);
 }
 
-size_t dap_enc_sig_bliss_verify_sign(struct dap_enc_key * key, const void * msg, size_t msg_size, void ** signature)
+size_t dap_enc_sig_bliss_verify_sign(struct dap_enc_key * key,const void * msg,
+                                     const size_t msg_size, void * signature, const size_t signature_size)
 {
-    return bliss_b_verify( &(*signature), &(*key->pub_key_data), msg, msg_size);
+    if(signature_size < sizeof (bliss_signature_t)) {
+        log_it(L_ERROR, "bad signature size");
+        return 0;
+    }
+    return bliss_b_verify(signature, key->pub_key_data, msg, msg_size);
 }
 
 void dap_enc_sig_bliss_key_delete(struct dap_enc_key *key)
diff --git a/crypto/dap_enc_bliss.h b/crypto/dap_enc_bliss.h
index 31e16ba36c1ed00ace7a02bc5fc4c61c32a48535..9b4d0317629860862e492bdf50140e024a13bbad 100644
--- a/crypto/dap_enc_bliss.h
+++ b/crypto/dap_enc_bliss.h
@@ -5,17 +5,26 @@
 #include "sig_bliss/bliss_b_params.h"
 #include "dap_enc_key.h"
 
+#undef LOG_TAG
 #define LOG_TAG "dap_enc_sig_bliss"
 
+enum DAP_BLISS_SIGN_SECURITY {
+    TOY = 0, MAX_SPEED, MIN_SIZE, SPEED_AND_SECURITY, MAX_SECURITY
+};
+
+void dap_enc_sig_bliss_set_type(enum DAP_BLISS_SIGN_SECURITY type);
+
 void dap_enc_sig_bliss_key_new(struct dap_enc_key *key);
 
 void dap_enc_sig_bliss_key_new_generate(struct dap_enc_key * key, const void *kex_buf,
                                     size_t kex_size, const void * seed, size_t seed_size,
                                     size_t key_size);
 
-size_t dap_enc_sig_bliss_get_sign(struct dap_enc_key * key, const void * msg, size_t msg_size, void ** signature);
+size_t dap_enc_sig_bliss_get_sign(struct dap_enc_key * key,const void * msg,
+                                  const size_t msg_size, void * signature, const size_t signature_size);
 
-size_t dap_enc_sig_bliss_verify_sign(struct dap_enc_key * key, const void * msg, size_t msg_size, void ** signature);
+size_t dap_enc_sig_bliss_verify_sign(struct dap_enc_key * key,const void * msg,
+                                     const size_t msg_size, void * signature, const size_t signature_size);
 
 void dap_enc_sig_bliss_key_delete(struct dap_enc_key *key);
 
diff --git a/crypto/dap_enc_key.c b/crypto/dap_enc_key.c
index a6834fe695df9f087c4d26a5cc0cbcf0b3463b29..b4abaaa1e9acfc4554d0f5c29f5f5bf9531bcf95 100644
--- a/crypto/dap_enc_key.c
+++ b/crypto/dap_enc_key.c
@@ -66,16 +66,16 @@ struct dap_enc_key_callbacks{
         .new_callback = dap_enc_msrln_key_new,
         .delete_callback = dap_enc_msrln_key_delete,
         .new_generate_callback = dap_enc_msrln_key_generate,
-        .gen_bob_shared_key = (dap_enc_gen_bob_shared_key) dap_enc_msrln_gen_bob_shared_key,
-        .gen_alice_shared_key = (dap_enc_gen_alice_shared_key) dap_enc_msrln_gen_alice_shared_key,
+        .gen_bob_shared_key = dap_enc_msrln_gen_bob_shared_key,
+        .gen_alice_shared_key = dap_enc_msrln_gen_alice_shared_key,
         .new_from_data_public_callback = dap_enc_msrln_key_new_from_data_public
     },
     [DAP_ENC_KEY_TYPE_DEFEO]={
         .name = "DEFEO",
         .enc = NULL,
         .dec = NULL,
-        .gen_bob_shared_key = (dap_enc_gen_bob_shared_key) dap_enc_defeo_gen_bob_shared_key,
-        .gen_alice_shared_key = (dap_enc_gen_alice_shared_key) dap_enc_defeo_gen_alice_shared_key,
+        .gen_bob_shared_key = dap_enc_defeo_gen_bob_shared_key,
+        .gen_alice_shared_key = dap_enc_defeo_gen_alice_shared_key,
         .new_callback = dap_enc_defeo_key_new,
         .delete_callback = dap_enc_defeo_key_delete,
         .new_generate_callback = dap_enc_defeo_key_new_generate,
@@ -95,8 +95,10 @@ struct dap_enc_key_callbacks{
         .name = "SIG_BLISS",
         .enc = NULL,
         .dec = NULL,
-        .gen_bob_shared_key = dap_enc_sig_bliss_get_sign,
-        .gen_alice_shared_key = dap_enc_sig_bliss_verify_sign,
+        .enc_na = dap_enc_sig_bliss_get_sign,
+        .dec_na = dap_enc_sig_bliss_verify_sign,
+        .gen_bob_shared_key = NULL,
+        .gen_alice_shared_key = NULL,
         .new_callback = dap_enc_sig_bliss_key_new,
         .delete_callback = dap_enc_sig_bliss_key_delete,
         .new_generate_callback = dap_enc_sig_bliss_key_new_generate,
diff --git a/crypto/dap_enc_key.h b/crypto/dap_enc_key.h
index a75785eaf3b715353db3f22c985b40401bb037f5..a24d5a3dfba2e6e5859f38a64b63f06944554030 100644
--- a/crypto/dap_enc_key.h
+++ b/crypto/dap_enc_key.h
@@ -130,7 +130,7 @@ typedef size_t (*dap_enc_callback_dataop_na_t)(struct dap_enc_key *key, const vo
 // b_pub  --- Bob's public key
 // b_key->priv_key_data --- shared key
 // b_key->priv_key_data_size --- shared key length
-typedef int (*dap_enc_gen_bob_shared_key) (struct dap_enc_key *b_key, const void *a_pub,
+typedef size_t (*dap_enc_gen_bob_shared_key) (struct dap_enc_key *b_key, const void *a_pub,
                                            size_t a_pub_size, void ** b_pub);
 
 // generation of shared key at Alice's side
@@ -142,7 +142,7 @@ typedef int (*dap_enc_gen_bob_shared_key) (struct dap_enc_key *b_key, const void
 // OUTPUT:
 // a_key->priv_key_data  --- shared key
 // a_key->priv_key_data_size --- shared key length
-typedef int (*dap_enc_gen_alice_shared_key) (struct dap_enc_key *a_key, const void *a_priv,
+typedef size_t (*dap_enc_gen_alice_shared_key) (struct dap_enc_key *a_key, const void *a_priv,
                                              size_t b_pub_size, unsigned char *b_pub);
 
 
diff --git a/crypto/dap_enc_picnic.c b/crypto/dap_enc_picnic.c
index d09772cdd0a876015c3095cfb2097c3fa87b03ce..9e7aaf1d7cc83e36332ac6603fb204d8c12d3f13 100644
--- a/crypto/dap_enc_picnic.c
+++ b/crypto/dap_enc_picnic.c
@@ -15,7 +15,10 @@
 size_t dap_enc_picnic_enc_na(dap_enc_key_t* b_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)
 {
-
+    (void)b_key; (void)a_buf_in;
+    (void)a_buf_in_size; (void)a_buf_out;
+    (void)a_buf_out_size_max;
+    return 0;
 }
 
 /**
@@ -30,7 +33,10 @@ size_t dap_enc_picnic_enc_na(dap_enc_key_t* b_key, const void *a_buf_in, const s
 size_t dap_enc_picnic_dec_na(dap_enc_key_t* b_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)
 {
-
+    (void)b_key; (void)a_buf_in;
+    (void)a_buf_in_size; (void)a_buf_out;
+    (void)a_buf_out_size_max;
+    return 0;
 }
 
 /**
@@ -39,7 +45,7 @@ size_t dap_enc_picnic_dec_na(dap_enc_key_t* b_key, const void *a_buf_in, const s
  */
 void dap_enc_picnic_key_new(dap_enc_key_t* a_key)
 {
-
+    (void)a_key;
 }
 
 /**
@@ -51,7 +57,8 @@ void dap_enc_picnic_key_new(dap_enc_key_t* a_key)
 void dap_enc_picnic_key_generate(dap_enc_key_t * a_key, const void* a_seed, size_t a_seed_size,
                                  size_t a_key_size)
 {
-
+    (void)a_key; (void)a_seed;
+    (void)a_seed_size; (void)a_key_size;
 }
 
 /**
@@ -62,7 +69,8 @@ void dap_enc_picnic_key_generate(dap_enc_key_t * a_key, const void* a_seed, size
  */
 void dap_enc_picnic_key_new_from_raw_public(dap_enc_key_t* a_key, const void * a_in, size_t a_in_size)
 {
-
+    (void)a_key; (void)a_in;
+    (void)a_in_size;
 }
 
 /**
@@ -73,7 +81,8 @@ void dap_enc_picnic_key_new_from_raw_public(dap_enc_key_t* a_key, const void * a
  */
 void dap_enc_picnic_key_new_from_raw_private(dap_enc_key_t* a_key, const void * a_in, size_t a_in_size)
 {
-
+    (void)a_key; (void)a_in;
+    (void)a_in_size;
 }
 
 /**
@@ -82,5 +91,5 @@ void dap_enc_picnic_key_new_from_raw_private(dap_enc_key_t* a_key, const void *
  */
 void dap_enc_picnic_key_delete(dap_enc_key_t * a_key)
 {
-
+    (void)a_key;
 }
diff --git a/crypto/rand/dap_rand.c b/crypto/rand/dap_rand.c
index 1189a370bb0d4f3f78c129555e53da6d5e6ed70a..1bb7ec166d320b10a0655e73e7370f505e237b44 100644
--- a/crypto/rand/dap_rand.c
+++ b/crypto/rand/dap_rand.c
@@ -20,7 +20,7 @@ static __inline void delay(unsigned int count)
 }
 
 
-int randombytes(unsigned char* random_array, unsigned int nbytes)
+int randombytes(void* random_array, unsigned int nbytes)
 { // Generation of "nbytes" of random values
     
 #if defined(_WIN32)
diff --git a/crypto/rand/dap_rand.h b/crypto/rand/dap_rand.h
index 81d2ddbe4debebbe7ea4a867d277f9617600c33e..291839430dbc28de4e1b13093ae6b58f5ece540b 100644
--- a/crypto/rand/dap_rand.h
+++ b/crypto/rand/dap_rand.h
@@ -2,6 +2,6 @@
 #define __DAP_RAND_H__
 
 // Generate random bytes and output the result to random_array
-int randombytes(unsigned char* random_array, unsigned int nbytes);
+int randombytes(void* random_array, unsigned int nbytes);
 
 #endif
diff --git a/crypto/sig_bliss/bliss_b_keys.c b/crypto/sig_bliss/bliss_b_keys.c
index 3f1a0b9ca588f5202e81d299660a137fe241a9a5..4a4347cede1e2e7d0c7fec1c16eb45bdeb8e5680 100644
--- a/crypto/sig_bliss/bliss_b_keys.c
+++ b/crypto/sig_bliss/bliss_b_keys.c
@@ -150,9 +150,9 @@ static int32_t bliss_b_private_key_init(bliss_private_key_t *private_key, bliss_
 
 /* Bliss-b public and sign key generation sign key is f, g small and f invertible
  *        public key is  a_q = -(2g-1)/f mod q = (2g'+1)/f  */
-int32_t bliss_b_private_key_gen(bliss_private_key_t *private_key, bliss_kind_t kind, entropy_t *entropy){
+int32_t bliss_b_private_key_gen(bliss_private_key_t *private_key, bliss_kind_t kind, entropy_t *entropy) {
   int32_t retcode;
-  int32_t i, j;
+  uint32_t i, j;
   int32_t *t = NULL, *u = NULL;
   ntt_state_t state;
   bliss_param_t p;
@@ -237,6 +237,8 @@ int32_t bliss_b_private_key_gen(bliss_private_key_t *private_key, bliss_kind_t k
     delete_ntt_state(state);
     return BLISS_B_NO_ERROR;
   }
+
+  return retcode;
 }
 
 void bliss_b_private_key_delete(bliss_private_key_t *private_key){
diff --git a/crypto/sig_bliss/bliss_b_signatures.c b/crypto/sig_bliss/bliss_b_signatures.c
index d2ea344c0961710140df2f91f0e45a936b92fdff..bdbe0b841bbe1ed13925620e9f4e1168a3674319 100644
--- a/crypto/sig_bliss/bliss_b_signatures.c
+++ b/crypto/sig_bliss/bliss_b_signatures.c
@@ -623,18 +623,18 @@ int32_t bliss_b_sign(bliss_signature_t *signature,  const bliss_private_key_t *p
       }
   
       /* 8: Also need to check norms akin to what happens in the entry to verify for BLISS-0, BLISS-3 and BLISS-4 */
-      if (vector_max_norm(z1, n) > p.b_inf) {
+      if (vector_max_norm(z1, n) > (int32_t)p.b_inf) {
         if(VERBOSE_RESTARTS){ fprintf(stdout, "--> norm z1 too high\n"); }
         //goto restart;
         continue;
       }
       mul2d(y2, z2, n, p.d);
-      if (vector_max_norm(y2, n) > p.b_inf) {
+      if (vector_max_norm(y2, n) > (int32_t) p.b_inf) {
         if(VERBOSE_RESTARTS){ fprintf(stdout, "--> norm z2*2^d too high\n"); }
         //goto restart;
         continue;
       }
-      if (vector_norm2(z1,  n) + vector_norm2(y2, n) > p.b_l2){
+      if (vector_norm2(z1,  n) + vector_norm2(y2, n) > (int32_t) p.b_l2){
         if(VERBOSE_RESTARTS){ fprintf(stdout, "--> euclidean norm too high\n"); }
         //goto restart;
         continue;
@@ -734,7 +734,7 @@ int32_t bliss_b_verify(const bliss_signature_t *signature,  const bliss_public_k
     }
 
   /* first check the norms */
-    if (vector_max_norm(z1, n) > p.b_inf){
+    if (vector_max_norm(z1, n) > (int32_t)p.b_inf){
         retval = BLISS_B_BAD_DATA;
         delete_ntt_state(state);
         free(tz2);
@@ -750,7 +750,7 @@ int32_t bliss_b_verify(const bliss_signature_t *signature,  const bliss_public_k
 
     mul2d(tz2, z2, n, p.d);
 
-    if(vector_max_norm(tz2, n) > p.b_inf){
+    if(vector_max_norm(tz2, n) > (int32_t) p.b_inf){
         retval = BLISS_B_BAD_DATA;
         delete_ntt_state(state);
         free(tz2);
@@ -764,7 +764,7 @@ int32_t bliss_b_verify(const bliss_signature_t *signature,  const bliss_public_k
         return retval;
     }
 
-    if (vector_norm2(z1, n) + vector_norm2(tz2, n) > p.b_l2){
+    if (vector_norm2(z1, n) + vector_norm2(tz2, n) > (int32_t)p.b_l2){
         retval = BLISS_B_BAD_DATA;
         delete_ntt_state(state);
         free(tz2);
diff --git a/test/crypto/dap_enc_iaes_test.c b/test/crypto/dap_enc_iaes_test.c
index 9609faec71afa40a84ea31e28d8395b09025c767..9167a786d99c7843196b829e497becaeea804cc7 100644
--- a/test/crypto/dap_enc_iaes_test.c
+++ b/test/crypto/dap_enc_iaes_test.c
@@ -59,7 +59,7 @@ void test_encode_decode_fast(size_t count_steps)
 
     dap_enc_key_t* key = dap_enc_key_new_generate(DAP_ENC_KEY_TYPE_IAES, kex_data, kex_size, seed, seed_size, 0);
 
-    for(int i = 1; i <= count_steps; i++) {
+    for(size_t i = 1; i <= count_steps; i++) {
         int step = 1;
         source_size += (size_t)step;
 
diff --git a/test/crypto/dap_enc_sig_bliss_test.c b/test/crypto/dap_enc_sig_bliss_test.c
index 1f0634e49b5489908f437d64fd161bfbc8c16ae0..8066302df856f06211ea7ce14cc01e2f72ace091 100644
--- a/test/crypto/dap_enc_sig_bliss_test.c
+++ b/test/crypto/dap_enc_sig_bliss_test.c
@@ -10,10 +10,10 @@ static void message_signature_simulation_test()
     uint8_t* msg = (uint8_t*)text;
     size_t msg_size = strlen(text);
 
-    dap_assert(dap_enc_sig_bliss_get_sign( key, msg, msg_size, &signature) == BLISS_B_NO_ERROR,
+    dap_assert(dap_enc_sig_bliss_get_sign( key, msg, msg_size, &signature, sizeof(signature)) == BLISS_B_NO_ERROR,
                "Sign msg");
 
-    dap_assert(dap_enc_sig_bliss_verify_sign( key, msg, msg_size, &signature) == BLISS_B_NO_ERROR,
+    dap_assert(dap_enc_sig_bliss_verify_sign( key, msg, msg_size, &signature, sizeof(signature)) == BLISS_B_NO_ERROR,
                "Verify msg")
 
     bliss_signature_delete(&signature);