diff --git a/common.c b/common.c index 3fd8f48..63b6e6f 100644 --- a/common.c +++ b/common.c @@ -33,25 +33,31 @@ uint8_t hex2bin(char hex) { return byte; } -void ecdaa_hextobin(const char *in_hex, uint8_t *out_bin, size_t outlen) { - for (size_t i = 0, j = 0; i < outlen; i++, j+=2) { +size_t hex_decode(const char *in_hex, uint8_t *out_bin, size_t outlen) { + size_t i = 0; + size_t j = 0; + for (; i < outlen; i++, j+=2) { uint8_t val = hex2bin(in_hex[j]); val += hex2bin(in_hex[j+1]) * 16; out_bin[i] = (char) val; } + return i; } -void ecdaa_bintohex(const uint8_t *in_bin, char *out_hex, size_t inlen) { - for (size_t i = 0, j = 0; i < inlen; i++, j+=2) { +size_t hex_encode(const uint8_t *in_bin, char *out_hex, size_t inlen) { + size_t i = 0; + size_t j = 0; + for (; i < inlen; i++, j+=2) { out_hex[j] = bin2hex(in_bin[i]); out_hex[j+1] = bin2hex(in_bin[i] >> 4); } + return i; } -int ecdaa_encode(const uint8_t *in_dec, char *out_enc, size_t inlen) { - int outlen = 4 * ((inlen + 2) / 3); - int i = 0; - int j = 0; +size_t base64_encode(const uint8_t *in_dec, char *out_enc, size_t inlen) { + size_t outlen = 4 * ((inlen + 2) / 3); + size_t i = 0; + size_t j = 0; while(i < inlen) { uint32_t octet_a = i < inlen ? in_dec[i++] : 0; @@ -76,10 +82,10 @@ int ecdaa_encode(const uint8_t *in_dec, char *out_enc, size_t inlen) { return j; } -int ecdaa_decode(const char *in_enc, uint8_t *out_dec, size_t outlen) { - int inlen = 4 * ((outlen + 2) / 3); - int i = 0; - int j = 0; +size_t base64_decode(const char *in_enc, uint8_t *out_dec, size_t outlen) { + size_t inlen = 4 * ((outlen + 2) / 3); + size_t i = 0; + size_t j = 0; while (i < inlen) { uint32_t sextet_a = in_enc[i] == '=' ? 0 & i++ : base64_index[in_enc[i++]]; @@ -95,3 +101,11 @@ int ecdaa_decode(const char *in_enc, uint8_t *out_dec, size_t outlen) { } return i; } + +size_t ecdaa_encode(const uint8_t *in_dec, char *out_enc, size_t inlen) { + return base64_encode(in_dec, out_enc, inlen); +} + +size_t ecdaa_decode(const char *in_enc, uint8_t *out_dec, size_t outlen) { + return base64_decode(in_enc, out_dec, outlen); +} diff --git a/common.h b/common.h index b28108a..e457015 100644 --- a/common.h +++ b/common.h @@ -1,9 +1,6 @@ -// -// Created by root on 10/30/19. -// -#ifndef ECDAA_ISSUER_COMMON_H -#define ECDAA_ISSUER_COMMON_H +#ifndef ECDAA_COMMON_H +#define ECDAA_COMMON_H #include #include @@ -27,12 +24,8 @@ typedef int (*conn_handler)(char *buffer); void ecdaa_rand(void *buffer, size_t buflen); -void ecdaa_hextobin(const char *in_hex, uint8_t *out_bin, size_t outlen); +size_t ecdaa_decode(const char *in_enc, uint8_t *out_dec, size_t outlen); -void ecdaa_bintohex(const uint8_t *in_bin, char *out_hex, size_t inlen); +size_t ecdaa_encode(const uint8_t *in_dec, char *out_enc, size_t inlen); -int ecdaa_decode(const char *in_enc, uint8_t *out_dec, size_t outlen); - -int ecdaa_encode(const uint8_t *in_dec, char *out_enc, size_t inlen); - -#endif //ECDAA_ISSUER_COMMON_H +#endif //ECDAA_COMMON_H diff --git a/ecdaa_issuer b/ecdaa_issuer index a8f83e8..7b8f186 100755 Binary files a/ecdaa_issuer and b/ecdaa_issuer differ diff --git a/ecdaa_member b/ecdaa_member index 43cf08d..5e0d903 100755 Binary files a/ecdaa_member and b/ecdaa_member differ diff --git a/ecdaa_verifier b/ecdaa_verifier index e7a02b8..491cb2c 100755 Binary files a/ecdaa_verifier and b/ecdaa_verifier differ diff --git a/member.c b/member.c index 8c4c073..205bee3 100644 --- a/member.c +++ b/member.c @@ -175,7 +175,7 @@ int member_verifymsg(char *buffer) { current = ¤t[10]; ret = ecdaa_encode(msg, current, msg_len); - current = ¤t[ret]; + current = ¤t[2 * MAX_MSGSIZE]; if(has_nym) { if (0 != ecdaa_signature_FP256BN_sign(&sig, msg, msg_len, member.bsn, member.bsn_len, &member.msk, &member.cred, ecdaa_rand)) { printf("member_verifymsg: Signing message failed\n"); diff --git a/verifier.c b/verifier.c index 654592a..e131e25 100644 --- a/verifier.c +++ b/verifier.c @@ -213,7 +213,7 @@ int verifier_checkattest(char *buffer) { bzero(msg, MAX_MSGSIZE); ret = ecdaa_decode(current, msg, MAX_MSGSIZE); msg_len = strlen(msg); - current = ¤t[ret]; + current = ¤t[2 * MAX_MSGSIZE]; has_nym = current[0] - '0'; current = ¤t[1]; @@ -246,6 +246,9 @@ int verifier_checkattest(char *buffer) { printf("verifier_checkattest: signature not valid, ret = %i\n", ret); return -1; } + + printf("writing message to %s\n", verifier_message_file); + ecdaa_write_buffer_to_file(verifier_message_file, msg, msg_len); return 0; } diff --git a/verifier.h b/verifier.h index 5bf25f5..aec1ac1 100644 --- a/verifier.h +++ b/verifier.h @@ -8,5 +8,6 @@ #include "common.h" int process_verifier(char *buffer); +const char* verifier_message_file = "vmsg.txt"; #endif //ECDAA_VERIFIER_H