diff --git a/common.c b/common.c index 163cbfa..3fd8f48 100644 --- a/common.c +++ b/common.c @@ -48,7 +48,7 @@ void ecdaa_bintohex(const uint8_t *in_bin, char *out_hex, size_t inlen) { } } -void ecdaa_encode(const uint8_t *in_dec, char *out_enc, size_t inlen) { +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; @@ -73,9 +73,10 @@ void ecdaa_encode(const uint8_t *in_dec, char *out_enc, size_t inlen) { default: break; } + return j; } -void ecdaa_decode(const uint8_t *in_enc, char *out_dec, size_t outlen) { +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; @@ -92,4 +93,5 @@ void ecdaa_decode(const uint8_t *in_enc, char *out_dec, size_t outlen) { if (j < outlen) out_dec[j++] = (triple >> 8) & 0xFF; if (j < outlen) out_dec[j++] = triple & 0xFF; } + return i; } diff --git a/common.h b/common.h index 0d89807..b28108a 100644 --- a/common.h +++ b/common.h @@ -31,4 +31,8 @@ void ecdaa_hextobin(const char *in_hex, uint8_t *out_bin, size_t outlen); void ecdaa_bintohex(const uint8_t *in_bin, char *out_hex, 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 diff --git a/daa-test.c b/daa-test.c index b996858..54b89c0 100644 --- a/daa-test.c +++ b/daa-test.c @@ -178,7 +178,7 @@ int test2() { if(0 != ecdaa_signature_FP256BN_verify(&sig2, &ipk2.gpk, &revocations, msg, msg_len, bsn, bsn_len)) { printf("verify message failed\n"); - //return 1; + return 1; } strncpy(bsn, "test basename", 13); @@ -238,15 +238,30 @@ int test3() { } ecdaa_issuer_public_key_FP256BN_serialize(binbuf, &ipk); - ecdaa_bintohex(binbuf, current, ECDAA_ISSUER_PUBLIC_KEY_FP256BN_LENGTH); - + int numbytes = ecdaa_encode(binbuf, current, ECDAA_ISSUER_PUBLIC_KEY_FP256BN_LENGTH); + current = ¤t[numbytes]; - if(0 != ecdaa_issuer_public_key_FP256BN_deserialize_file(&ipk2, "ipktest.bin") || - 0 != ecdaa_issuer_secret_key_FP256BN_deserialize_file(&isk2, "isktest.bin")) { + bzero(binbuf,MAX_BUFSIZE); + ecdaa_issuer_secret_key_FP256BN_serialize(binbuf, &isk); + numbytes += ecdaa_encode(binbuf, current, ECDAA_ISSUER_SECRET_KEY_FP256BN_LENGTH); + //current = &buffer[numbytes]; + + printf("Encoded issuer key pair: %s\n%s\n", buffer, current); + + current = buffer; + int numbytes2 = ecdaa_decode(current, binbuf, ECDAA_ISSUER_PUBLIC_KEY_FP256BN_LENGTH); + int ret = ecdaa_issuer_public_key_FP256BN_deserialize(&ipk2, binbuf); + + current = &buffer[numbytes2]; + bzero(binbuf,MAX_BUFSIZE); + numbytes2 += ecdaa_decode(current, binbuf, ECDAA_ISSUER_SECRET_KEY_FP256BN_LENGTH); + ret += ecdaa_issuer_secret_key_FP256BN_deserialize(&isk2, binbuf); + if(0 != ret) { + printf("numbytes = %i, numbytes2 = %i\n", numbytes, numbytes2); printf("loading issuer key pair failed\n"); return 1; } - + ecdaa_rand(nonce, NONCE_SIZE); if(0 != ecdaa_member_key_pair_FP256BN_generate(&mpk, &msk, nonce, NONCE_SIZE, ecdaa_rand)) { printf("generate member key pair failed\n"); diff --git a/ecdaa_test b/ecdaa_test index 7e98880..f23a4d2 100755 Binary files a/ecdaa_test and b/ecdaa_test differ