Skip to content

Commit f7634b4

Browse files
author
diogorac
committed
passing test
1 parent 0f4fa6a commit f7634b4

File tree

3 files changed

+49
-18
lines changed

3 files changed

+49
-18
lines changed

inc/transaction.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ typedef struct {
3636
char id[65];
3737
} BIGCHAIN_TX;
3838

39-
void bigchain_fulfill_and_serialize(BIGCHAIN_TX *tx, uint8_t *json_tx, uint16_t maxlen, uint8_t *sig);
39+
void bigchain_fulfill_and_serialize(BIGCHAIN_TX *tx, uint8_t *json_tx, uint16_t maxlen, uint8_t *sig, uint8_t *pubkey);
4040
void bigchain_sign_transaction(uint8_t *json_tx, uint16_t len, uint8_t *priv_key, uint8_t *pub_key, uint8_t *sig);
4141
char* bigchain_build_json_inputs(BIGCHAIN_INPUT *inputs, uint8_t num_inputs, char *json_obj);
4242
char* bigchain_build_json_outputs(BIGCHAIN_OUTPUT *outputs, uint8_t num_outputs, char *json_obj);

src/transaction.c

Lines changed: 45 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,61 @@
11
#include "transaction.h"
22

3+
#ifndef MIN
4+
#define MIN(a,b) ((a) < (b) ? (a) : (b))
5+
#endif
36

4-
void bigchain_fulfill_and_serialize(BIGCHAIN_TX *tx, uint8_t *json_tx, uint16_t maxlen, uint8_t *sig)
7+
void der_encode_fulfill(uint8_t *pubkey, uint8_t *sig, uint8_t *fulfill)
8+
{
9+
uint16_t offset = 4;
10+
11+
fulfill[0] = 0xA4;
12+
fulfill[1] = 0x64;
13+
fulfill[2] = 0x80;
14+
fulfill[3] = 0x20;
15+
16+
memcpy( fulfill + offset, pubkey, 32);
17+
offset += 32;
18+
19+
fulfill[offset++] = 0x81;
20+
fulfill[offset++] = 0x40;
21+
memcpy( fulfill + offset, sig, 64);
22+
}
23+
24+
void bigchain_fulfill_and_serialize(BIGCHAIN_TX *tx, uint8_t *json_tx, uint16_t maxlen, uint8_t *sig, uint8_t *pubkey)
525
{
626
char fulfillment[256] = {0};
27+
uint8_t der[256] = {0};
28+
29+
der_encode_fulfill(pubkey, sig, der);
30+
31+
bintob64(fulfillment, der, 4 + 32 + 2 + 64);
32+
33+
uint16_t size = strlen(fulfillment);
34+
for(uint16_t i=0; i < size; i++)
35+
{
36+
if(fulfillment[i] == '+')
37+
fulfillment[i] = '-';
38+
else if(fulfillment[i] == '/')
39+
fulfillment[i] = '_';
40+
}
741

8-
bintob64(fulfillment, sig, 64);
42+
for(uint16_t i = size; i > 1; i--)
43+
{
44+
if(fulfillment[i] == '=')
45+
fulfillment[i] = '\0';
46+
else
47+
break;
48+
}
49+
950
memcpy(tx->inputs[0].fulfillment, fulfillment, strlen(fulfillment));
1051

1152
memset(json_tx, 0, maxlen);
1253
bigchain_build_json_tx(tx, json_tx);
1354

14-
// sha3_256((const unsigned char*)json_tx, MIN(maxlen, strlen(json_tx)), tx->id);
15-
sha3_256((const unsigned char*)json_tx, strlen(json_tx), tx->id);
16-
17-
// 1. derencode sig
18-
// 2. base64 encode
19-
// 3. remove == from b64 str
20-
55+
sha3_256((const unsigned char*)json_tx, MIN(maxlen, strlen(json_tx)), tx->id);
56+
2157
memset(json_tx, 0, maxlen);
2258
bigchain_build_json_tx(tx, json_tx);
23-
2459
}
2560

2661
/*

tests/test_sig.c

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -101,18 +101,14 @@ void test_bigchain_build_json_tx(void) {
101101

102102
char sig[128] = {0};
103103
bigchain_sign_transaction((uint8_t*)json, strlen(json), (uint8_t*)privkey, (uint8_t*)pubkey, (uint8_t*)sig);
104-
bigchain_fulfill_and_serialize(&tx, json, 6000, sig);
104+
bigchain_fulfill_and_serialize(&tx, (uint8_t*)json, 6000, (uint8_t*)sig, (uint8_t*)pubkey);
105105

106106
// Base64
107107
char fullfil[] = "pGSAIFVOiXAbbcqbKGEfs2FBcTouGFICDo6ooC4n2kDvrMwlgUCNMaKJ6aV03acNBqcYCffEWAcNQdhxS1o7beb6Ispxft0Ymgv2-oUlOFAeT6KeP65wLs_SOSKrLRaAIA_U75kC";
108+
uint8_t transaction_id[] = {0xeb,0x39,0x0d,0x15,0x7b,0xc9,0x8d,0xba,0x07,0x26,0x46,0x31,0x11,0xc7,0x31,0x9a,0x28,0x13,0x2d,0x62,0x3b,0x29,0x7b,0x97,0xa9,0x1c,0x96,0x1d,0x1a,0xe1,0xe9,0x07};
108109

109110
TEST_ASSERT_EQUAL(0, memcmp(tx.inputs->fulfillment, fullfil, 137));
110-
111-
// memcpy(tx.inputs->fulfillment, fullfil, 137); memset(json,0,6000);
112-
// //id
113-
// bigchain_build_json_tx(&tx, json);
114-
115-
111+
TEST_ASSERT_EQUAL(0, memcmp(tx.id, transaction_id, 32));
116112

117113
}
118114

0 commit comments

Comments
 (0)