Browse Source

tested base64 encoding and fixed minor issues

master
Michael Preisach 5 years ago
parent
commit
11d55eb918
  1. 38
      common.c
  2. 17
      common.h
  3. BIN
      ecdaa_issuer
  4. BIN
      ecdaa_member
  5. BIN
      ecdaa_verifier
  6. 2
      member.c
  7. 5
      verifier.c
  8. 1
      verifier.h

38
common.c

@ -33,25 +33,31 @@ uint8_t hex2bin(char hex) {
return byte; return byte;
} }
void ecdaa_hextobin(const char *in_hex, uint8_t *out_bin, size_t outlen) { size_t hex_decode(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 i = 0;
size_t j = 0;
for (; i < outlen; i++, j+=2) {
uint8_t val = hex2bin(in_hex[j]); uint8_t val = hex2bin(in_hex[j]);
val += hex2bin(in_hex[j+1]) * 16; val += hex2bin(in_hex[j+1]) * 16;
out_bin[i] = (char) val; out_bin[i] = (char) val;
} }
return i;
} }
void ecdaa_bintohex(const uint8_t *in_bin, char *out_hex, size_t inlen) { size_t hex_encode(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 i = 0;
size_t j = 0;
for (; i < inlen; i++, j+=2) {
out_hex[j] = bin2hex(in_bin[i]); out_hex[j] = bin2hex(in_bin[i]);
out_hex[j+1] = bin2hex(in_bin[i] >> 4); 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) { size_t base64_encode(const uint8_t *in_dec, char *out_enc, size_t inlen) {
int outlen = 4 * ((inlen + 2) / 3); size_t outlen = 4 * ((inlen + 2) / 3);
int i = 0; size_t i = 0;
int j = 0; size_t j = 0;
while(i < inlen) { while(i < inlen) {
uint32_t octet_a = i < inlen ? in_dec[i++] : 0; 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; return j;
} }
int ecdaa_decode(const char *in_enc, uint8_t *out_dec, size_t outlen) { size_t base64_decode(const char *in_enc, uint8_t *out_dec, size_t outlen) {
int inlen = 4 * ((outlen + 2) / 3); size_t inlen = 4 * ((outlen + 2) / 3);
int i = 0; size_t i = 0;
int j = 0; size_t j = 0;
while (i < inlen) { while (i < inlen) {
uint32_t sextet_a = in_enc[i] == '=' ? 0 & i++ : base64_index[in_enc[i++]]; 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; 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);
}

17
common.h

@ -1,9 +1,6 @@
//
// Created by root on 10/30/19.
//
#ifndef ECDAA_ISSUER_COMMON_H #ifndef ECDAA_COMMON_H
#define ECDAA_ISSUER_COMMON_H #define ECDAA_COMMON_H
#include <sys/random.h> #include <sys/random.h>
#include <stdio.h> #include <stdio.h>
@ -27,12 +24,8 @@ typedef int (*conn_handler)(char *buffer);
void ecdaa_rand(void *buffer, size_t buflen); 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); #endif //ECDAA_COMMON_H
int ecdaa_encode(const uint8_t *in_dec, char *out_enc, size_t inlen);
#endif //ECDAA_ISSUER_COMMON_H

BIN
ecdaa_issuer

Binary file not shown.

BIN
ecdaa_member

Binary file not shown.

BIN
ecdaa_verifier

Binary file not shown.

2
member.c

@ -175,7 +175,7 @@ int member_verifymsg(char *buffer) {
current = &current[10]; current = &current[10];
ret = ecdaa_encode(msg, current, msg_len); ret = ecdaa_encode(msg, current, msg_len);
current = &current[ret]; current = &current[2 * MAX_MSGSIZE];
if(has_nym) { if(has_nym) {
if (0 != ecdaa_signature_FP256BN_sign(&sig, msg, msg_len, member.bsn, member.bsn_len, &member.msk, &member.cred, ecdaa_rand)) { 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"); printf("member_verifymsg: Signing message failed\n");

5
verifier.c

@ -213,7 +213,7 @@ int verifier_checkattest(char *buffer) {
bzero(msg, MAX_MSGSIZE); bzero(msg, MAX_MSGSIZE);
ret = ecdaa_decode(current, msg, MAX_MSGSIZE); ret = ecdaa_decode(current, msg, MAX_MSGSIZE);
msg_len = strlen(msg); msg_len = strlen(msg);
current = &current[ret]; current = &current[2 * MAX_MSGSIZE];
has_nym = current[0] - '0'; has_nym = current[0] - '0';
current = &current[1]; current = &current[1];
@ -246,6 +246,9 @@ int verifier_checkattest(char *buffer) {
printf("verifier_checkattest: signature not valid, ret = %i\n", ret); printf("verifier_checkattest: signature not valid, ret = %i\n", ret);
return -1; return -1;
} }
printf("writing message to %s\n", verifier_message_file);
ecdaa_write_buffer_to_file(verifier_message_file, msg, msg_len);
return 0; return 0;
} }

1
verifier.h

@ -8,5 +8,6 @@
#include "common.h" #include "common.h"
int process_verifier(char *buffer); int process_verifier(char *buffer);
const char* verifier_message_file = "vmsg.txt";
#endif //ECDAA_VERIFIER_H #endif //ECDAA_VERIFIER_H

Loading…
Cancel
Save