diff --git a/src/dap_enc_ringct20.c b/src/dap_enc_ringct20.c
index e07cfdcd51f8882db902c821704f831e00bd7e8e..dd4b6050fb9f2df1a5a7a361e8a2a813a3f47964 100644
--- a/src/dap_enc_ringct20.c
+++ b/src/dap_enc_ringct20.c
@@ -14,6 +14,8 @@ DAP_RINGCT20_SIGN_SECURITY _ringct20_type = RINGCT20_MINSEC; // by default
 //poly_ringct20 Afixed[10];
 //poly_ringct20 Hfixed[10];
 
+int32_t ringct20_private_and_public_keys_init(ringct20_private_key_t *private_key, ringct20_public_key_t *public_key, ringct20_param_t *p);
+
 
 void SetupPrintAH(poly_ringct20 *A, poly_ringct20 * H, const int mLen)
 {
@@ -56,13 +58,13 @@ void SetupPrintAH(poly_ringct20 *A, poly_ringct20 * H, const int mLen)
 
 void ringct20_pack_prk(uint8_t *prk, const poly_ringct20 *S, const ringct20_param_t *rct_p)
 {
-    for(int i = 0; i < rct_p->M - 1; ++i)
+    for(uint32_t i = 0; i < rct_p->M - 1; ++i)
         poly_tobytes(prk + i*rct_p->POLY_RINGCT20_SIZE_PACKED, S +i);
 
 }
 void ringct20_unpack_prk(const uint8_t *prk, poly_ringct20 *S, const ringct20_param_t *rct_p)
 {
-    for(int i = 0; i < rct_p->M - 1; ++i)
+    for(uint32_t i = 0; i < rct_p->M - 1; ++i)
         poly_frombytes(S +i, prk + i*rct_p->POLY_RINGCT20_SIZE_PACKED);
 
 }
@@ -88,15 +90,15 @@ void ringct20_unpack_sig(const uint8_t *sig, poly_ringct20 *a_list,
 {
     uint32_t unpacked_size = 0;
     //unpack a_list
-    for(int i = 0; i < rct_p->wLen; ++i)
+    for(uint32_t i = 0; i < rct_p->wLen; ++i)
     {
         poly_frombytes(a_list + i, sig + unpacked_size);
         unpacked_size += rct_p->POLY_RINGCT20_SIZE_PACKED;
     }
     //unpack t[W][M]
-    for(int j = 0; j < rct_p->wLen; ++j)
+    for(uint32_t j = 0; j < rct_p->wLen; ++j)
     {
-        for(int i = 0; i < rct_p->M; ++i)
+        for(uint32_t i = 0; i < rct_p->M; ++i)
         {
             poly_frombytes(t[j] + i, sig + unpacked_size);
             unpacked_size += rct_p->POLY_RINGCT20_SIZE_PACKED;
@@ -111,19 +113,19 @@ void ringct20_unpack_sig(const uint8_t *sig, poly_ringct20 *a_list,
 }
 
 void ringct20_pack_sig(uint8_t *sig, const poly_ringct20 *a_list,
-                         const poly_ringct20 *c1, const poly_ringct20 **t, const poly_ringct20 *h, const ringct20_param_t *rct_p)
+                         poly_ringct20 *c1,  poly_ringct20 **t, const poly_ringct20 *h, const ringct20_param_t *rct_p)
 {
     uint32_t packed_size = 0;
     //pack a_list
-    for(int i = 0; i < rct_p->wLen; ++i)
+    for(uint32_t i = 0; i < rct_p->wLen; ++i)
     {
         poly_tobytes(sig + packed_size, a_list + i);
         packed_size += rct_p->POLY_RINGCT20_SIZE_PACKED;
     }
     //pack t[W][M]
-    for(int j = 0; j < rct_p->wLen; ++j)
+    for(uint32_t j = 0; j < rct_p->wLen; ++j)
     {
-        for(int i = 0; i < rct_p->M; ++i)
+        for(uint32_t i = 0; i < rct_p->M; ++i)
         {
             poly_tobytes(sig + packed_size,t[j] + i);
             packed_size += rct_p->POLY_RINGCT20_SIZE_PACKED;
@@ -150,9 +152,9 @@ int get_pbk_list(poly_ringct20 *aList, const ringct20_param_t *p, const int Pi)
     //get a list of some pbk
     {
         poly_ringct20 *Stmp = malloc(p->POLY_RINGCT20_SIZE*p->mLen);
-        for(int i = 0; i < p->wLen; ++i)
+        for(uint32_t i = 0; i < p->wLen; ++i)
         {
-            if(i == Pi)
+            if(i == (uint32_t) Pi)
                 continue;
             LRCT_SampleKey(Stmp, p->mLen);
             LRCT_KeyGen(aList + i, p->A, Stmp, p->mLen);
@@ -189,21 +191,21 @@ int ringct20_crypto_sign( ringct20_signature_t *sig, const unsigned char *m, uns
     poly_ringct20 c1;
     poly_ringct20** t;//[w][M]//TOCORRECT to *t;
     t  = malloc(p->wLen*sizeof(poly_ringct20*));
-    for(int i = 0; i < p->wLen; ++i)
+    for(uint32_t i = 0; i < p->wLen; ++i)
         t[i] = malloc(p->M*p->POLY_RINGCT20_SIZE);
 
     unsigned char *bt = malloc(NEWHOPE_POLYBYTES);
 
-    for (int i = 0; i < p->wLen; i++)
+    for (uint32_t i = 0; i < p->wLen; i++)
     {
-        for (int k = 0; k < p->M; k++)
+        for (uint32_t k = 0; k < p->M; k++)
         {
             poly_init(t[i] + k);
         }
 
     }
 
-    for (int k = 0; k < p->M; k++)
+    for (uint32_t k = 0; k < p->M; k++)
     {
         randombytes(bt, NEWHOPE_POLYBYTES);
         poly_frombytes(u + k, bt);
@@ -223,7 +225,7 @@ int ringct20_crypto_sign( ringct20_signature_t *sig, const unsigned char *m, uns
     free(S);
     free(u);
 
-    for(int i = 0; i < p->wLen; ++i)
+    for(uint32_t i = 0; i < p->wLen; ++i)
         free(t[i]);
     free(t);
 
@@ -254,14 +256,14 @@ int ringct20_crypto_sign_open( const unsigned char * msg, const unsigned long lo
     poly_ringct20 c1;
     poly_ringct20** t;//[w][M]//TOCORRECT to *t;
     t  = malloc(p->wLen*sizeof(poly_ringct20*));
-    for(int i = 0; i < p->wLen; ++i)
+    for(uint32_t i = 0; i < p->wLen; ++i)
         t[i] = malloc(p->M*p->POLY_RINGCT20_SIZE);
     ringct20_unpack_sig(sig->sig_data,aList,&c1, t, &h, p);
     //CRUTCH ADD test pbk in aList
     int pbk_in_aList = 0;
     poly_ringct20 a_pi;
     ringct20_unpack_pbk(public_key->data, &a_pi, p);
-    for(int i = 0; i < p->wLen; ++i)
+    for(uint32_t i = 0; i < p->wLen; ++i)
     {
         if(poly_equal(&a_pi, aList + i))
         {
@@ -278,7 +280,7 @@ int ringct20_crypto_sign_open( const unsigned char * msg, const unsigned long lo
 
     free(aList);
 
-    for(int i = 0; i < p->wLen; ++i)
+    for(uint32_t i = 0; i < p->wLen; ++i)
         free(t[i]);
     free(t);
     ringct20_params_free(p);
@@ -345,6 +347,7 @@ void ringct20_private_and_public_keys_delete(ringct20_private_key_t *private_key
     free(public_key->data);
     public_key->data = NULL;
 }
+
 int32_t ringct20_private_and_public_keys_init(ringct20_private_key_t *private_key, ringct20_public_key_t *public_key, ringct20_param_t *p){
 
     unsigned char *f = NULL, *g = NULL;
diff --git a/src/ringct20/poly.c b/src/ringct20/poly.c
index cfb07a8af1bc0a0629ef634f23ca49ca4c1f14f6..82e7a2d85798dd2fe2cd674a2724346ad9dcdb91 100644
--- a/src/ringct20/poly.c
+++ b/src/ringct20/poly.c
@@ -1,3 +1,5 @@
+#include <stdio.h>
+
 #include "poly.h"
 #include "ntt.h"
 #include "reduce.h"
diff --git a/src/ringct20/poly.h b/src/ringct20/poly.h
index 0073b2903d752215d8adc4b0189396b83b4e48c2..7c507b568d8e0ae46dbc17578dd684f141b3fbd0 100644
--- a/src/ringct20/poly.h
+++ b/src/ringct20/poly.h
@@ -2,6 +2,7 @@
 #define POLY_H
 
 #include <stdint.h>
+#include <stddef.h>
 #include "params.h"
 
 /* 
diff --git a/src/ringct20/ring.c b/src/ringct20/ring.c
index 445936b3946a8c44cdbf91a1dd44e93d687d8a37..2c31403ecd039cad7760e271f4300c0351fb1747 100644
--- a/src/ringct20/ring.c
+++ b/src/ringct20/ring.c
@@ -77,7 +77,7 @@ void LRCT_KeyGen(poly_ringct20 *a, poly_ringct20 *A, poly_ringct20 *S, size_t mL
 	poly_serial(a);
 }
 
-void LRCT_SigGen(poly_ringct20 *c1, poly_ringct20 **t, poly_ringct20 *h, poly_ringct20 *A, poly_ringct20 *H, poly_ringct20 *S, poly_ringct20 *u, size_t mLen, poly_ringct20 *L, uint8_t w, uint8_t pai, unsigned char *msg, int msgLen)
+void LRCT_SigGen(poly_ringct20 *c1, poly_ringct20 **t, poly_ringct20 *h, poly_ringct20 *A, poly_ringct20 *H, poly_ringct20 *S, poly_ringct20 *u, size_t mLen, poly_ringct20 *L, uint8_t w, uint8_t pai, const unsigned char *msg, int msgLen)
 {
 	//H2q
 	size_t i, j, k;
@@ -228,7 +228,7 @@ void LRCT_SigGen(poly_ringct20 *c1, poly_ringct20 **t, poly_ringct20 *h, poly_ri
 	free(tmp2q);
 }
 int LRCT_SigVer(const poly_ringct20 *c1, poly_ringct20 **t, poly_ringct20 *A, poly_ringct20 *H, size_t mLen, poly_ringct20 *h, poly_ringct20 *L,
-	uint8_t w, unsigned char *msg, int msgLen)
+    uint8_t w, const unsigned char *msg, int msgLen)
 {
 	size_t i,k;
 	poly_ringct20 *H2q = (poly_ringct20 *)malloc((mLen + 1) * sizeof(poly_ringct20));
diff --git a/src/ringct20/ring.h b/src/ringct20/ring.h
index ea3a0cdc44d08465342b9e3b8f9817e3c3f33903..665110d5fa70dc3b3bb930a4271eccf0c07f6f74 100644
--- a/src/ringct20/ring.h
+++ b/src/ringct20/ring.h
@@ -19,9 +19,9 @@ void LRCT_Setup(poly_ringct20 *A, poly_ringct20 *H, size_t mLen);
 void LRCT_KeyGen(poly_ringct20 *a, poly_ringct20 *A, poly_ringct20 *S, size_t mLen);
 void LRCT_SigGen(poly_ringct20 *c1, poly_ringct20 **t, poly_ringct20 *h, poly_ringct20 *A, poly_ringct20 *H,
                  poly_ringct20 *S, poly_ringct20 *u, size_t mLen, poly_ringct20 *L, uint8_t w,
-				 uint8_t pai, unsigned char *msg, int msgLen);
+                 uint8_t pai, const unsigned char *msg, int msgLen);
 int LRCT_SigVer(const poly_ringct20 *c1, poly_ringct20 **t, poly_ringct20 *A, poly_ringct20 *H, size_t mLen, poly_ringct20 *h, poly_ringct20 *L,
-				uint8_t w, unsigned char *msg, int msgLen);
+                uint8_t w, const unsigned char *msg, int msgLen);
 /////Single output trading scheme
 /*
 plan description: