Skip to content
This repository was archived by the owner on Sep 25, 2024. It is now read-only.

Commit b8a6c6e

Browse files
committed
Fixed endianness + expected test outcomes
1 parent deeecff commit b8a6c6e

18 files changed

+120
-53
lines changed

common.h

+5-5
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ void bbp_print_hex(const char *label, const uint8_t *v, size_t len) {
1111

1212
printf("%s: ", label);
1313
for (i = 0; i < len; ++i) {
14-
printf("%02x", v[bbp_eoffset(i, len)]);
14+
printf("%02x", v[i]);
1515
}
1616
printf("\n");
1717
}
@@ -26,19 +26,19 @@ uint8_t bbp_hex2byte(const char ch) {
2626
return 0;
2727
}
2828

29-
void bbp_parse_hex(bbp_endian_t e, uint8_t *v, const char *str) {
29+
void bbp_parse_hex(uint8_t *v, const char *str) {
3030
const size_t count = strlen(str) / 2;
3131
size_t i;
3232

3333
for (i = 0; i < count; ++i) {
3434
const char hi = bbp_hex2byte(str[i * 2]);
3535
const char lo = bbp_hex2byte(str[i * 2 + 1]);
3636

37-
v[bbp_eoffset(i, count)] = hi * 16 + lo;
37+
v[i] = hi * 16 + lo;
3838
}
3939
}
4040

41-
uint8_t *bbp_alloc_hex(bbp_endian_t e, const char *str, size_t *len) {
41+
uint8_t *bbp_alloc_hex(const char *str, size_t *len) {
4242
const size_t count = strlen(str) / 2;
4343
size_t i;
4444

@@ -48,7 +48,7 @@ uint8_t *bbp_alloc_hex(bbp_endian_t e, const char *str, size_t *len) {
4848
const char hi = bbp_hex2byte(str[i * 2]);
4949
const char lo = bbp_hex2byte(str[i * 2 + 1]);
5050

51-
v[bbp_eoffset(i, count)] = hi * 16 + lo;
51+
v[i] = hi * 16 + lo;
5252
}
5353

5454
*len = count;

endian.h

-11
Original file line numberDiff line numberDiff line change
@@ -75,15 +75,4 @@ void bbp_reverse(uint8_t *dst, size_t len) {
7575
}
7676
}
7777

78-
void bbp_ecopy(bbp_endian_t e, uint8_t *dst, uint8_t *src, size_t len) {
79-
memcpy(dst, src, len);
80-
if (bbp_host_endian() != e) {
81-
bbp_reverse(dst, len);
82-
}
83-
}
84-
85-
size_t bbp_eoffset(size_t i, size_t len) {
86-
return ((bbp_host_endian() == BBP_LITTLE) ? i : (len - i - 1));
87-
}
88-
8978
#endif

ex-address.c

+6-1
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,19 @@ int main() {
1313
uint8_t address_bytes[21];
1414
char *address;
1515

16+
const char address_exp[] = "mqMi3XYqsPvBWtrJTk8euPWDVmFTZ5jHuK";
17+
18+
/* */
19+
1620
bbp_print_hex("pub", pub_bytes, sizeof(pub_bytes));
1721

1822
address_bytes[0] = 0x6f;
1923
bbp_hash160(address_bytes + 1, pub_bytes, 33);
2024
bbp_print_hex("hash160", address_bytes + 1, 20);
2125

2226
address = bbp_base58check(address_bytes, 21);
23-
printf("address: %s\n", address);
27+
printf("address : %s\n", address);
28+
printf("address (exp): %s\n", address_exp);
2429
free(address);
2530

2631
return 0;

ex-base58.c

+6-1
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,14 @@ int main() {
1010
};
1111
char *base58;
1212

13+
const char base58_exp[] = "8niM7FzqQeaPANNtRwEtQGi37YRcFwx1UBZMX8214MVq";
14+
15+
/* */
16+
1317
base58 = bbp_base58(bytes, sizeof(bytes));
1418
bbp_print_hex("hex", bytes, sizeof(bytes));
15-
printf("base58: %s\n", base58);
19+
printf("base58 : %s\n", base58);
20+
printf("base58 (exp): %s\n", base58_exp);
1621
free(base58);
1722

1823
return 0;

ex-ec-keypair.c

+12-3
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,20 @@ int main() {
2424
};
2525
int i;
2626

27+
const char priv_exp[] = "16260783e40b16731673622ac8a5b045fc3ea4af70f727f3f9e92bdd3a1ddc42";
28+
const char pub_exp[2][200] = {
29+
"0482006e9398a6986eda61fe91674c3a108c399475bf1e738f19dfc2db11db1d28130c6b3b28aef9a9c7e7143dac6cf12c09b8444db61679abb1d86f85c038a58c",
30+
"0282006e9398a6986eda61fe91674c3a108c399475bf1e738f19dfc2db11db1d28"
31+
};
32+
2733
/* create keypair */
2834

2935
key = bbp_ec_new_keypair(priv_bytes);
3036
if (!key) {
3137
puts("Unable to create keypair");
3238
return -1;
3339
}
34-
bbp_print_hex("priv", priv_bytes, sizeof(priv));
40+
bbp_print_hex("priv #1 ", priv_bytes, sizeof(priv));
3541

3642
/* get private key back from EC_KEY */
3743

@@ -41,7 +47,9 @@ int main() {
4147
return -1;
4248
}
4349
BN_bn2bin(priv_bn, priv);
44-
bbp_print_hex("priv", priv, sizeof(priv));
50+
bbp_print_hex("priv #2 ", priv, sizeof(priv));
51+
52+
printf("priv (exp): %s\n", priv_exp);
4553

4654
/* get encoded public key from EC_KEY in all conversion forms */
4755

@@ -62,7 +70,8 @@ int main() {
6270
}
6371

6472
printf("conversion form: %s\n", conv_forms_desc[i]);
65-
bbp_print_hex("pub", pub, pub_len);
73+
bbp_print_hex("pub ", pub, pub_len);
74+
printf("pub (exp): %s\n", pub_exp[i]);
6675

6776
free(pub);
6877
}

ex-ecdsa-sign.c

+8-2
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,20 @@ int main() {
1717
uint8_t *der, *der_copy;
1818
size_t der_len;
1919

20+
const char digest_exp[] = "4554813e91f3d5be790c7c608f80b2b00f3ea77512d49039e9e3dc45f89e2f01";
21+
22+
/* */
23+
2024
key = bbp_ec_new_keypair(priv_bytes);
2125
if (!key) {
2226
puts("Unable to create keypair");
2327
return -1;
2428
}
2529

26-
bbp_sha256(digest, (uint8_t *)message, sizeof(message));
27-
bbp_print_hex("digest", digest, 32);
30+
bbp_sha256(digest, (uint8_t *)message, strlen(message));
31+
bbp_print_hex("digest ", digest, 32);
32+
printf("digest (exp): %s\n", digest_exp);
33+
2834
signature = ECDSA_do_sign(digest, sizeof(digest), key);
2935
printf("r: %s\n", BN_bn2hex(signature->r));
3036
printf("s: %s\n", BN_bn2hex(signature->s));

ex-ecdsa-verify.c

+12-3
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@ int main() {
2929
uint8_t digest[32];
3030
int verified;
3131

32+
const char *r_exp = "2B2B529BDBDC93E78AF7E00228B179918B032D76902F74EF454426F7D06CD0F9";
33+
const char *s_exp = "62DDC76451CD04CB567CA5C5E047E8AC41D3D4CF7CB92434D55CB486CCCF6AF2";
34+
const char *digest_exp = "4554813e91f3d5be790c7c608f80b2b00f3ea77512d49039e9e3dc45f89e2f01";
35+
36+
/* */
37+
3238
key = bbp_ec_new_pubkey(pub_bytes, sizeof(pub_bytes));
3339
if (!key) {
3440
puts("Unable to create keypair");
@@ -37,11 +43,14 @@ int main() {
3743

3844
der_bytes_copy = der_bytes;
3945
signature = d2i_ECDSA_SIG(NULL, &der_bytes_copy, sizeof(der_bytes));
40-
printf("r: %s\n", BN_bn2hex(signature->r));
41-
printf("s: %s\n", BN_bn2hex(signature->s));
46+
printf("r : %s\n", BN_bn2hex(signature->r));
47+
printf("r (exp): %s\n", r_exp);
48+
printf("s : %s\n", BN_bn2hex(signature->s));
49+
printf("s (exp): %s\n", s_exp);
4250

4351
bbp_sha256(digest, (uint8_t *)message, strlen(message));
44-
bbp_print_hex("digest", digest, 32);
52+
bbp_print_hex("digest ", digest, 32);
53+
printf("digest (exp): %s\n", digest_exp);
4554
verified = ECDSA_do_verify(digest, sizeof(digest), signature, key);
4655

4756
switch (verified) {

ex-fixed-strings.c

+6-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ int main() {
77
uint16_t n16 = 0xee12;
88
uint8_t ser[16];
99

10+
const char ser_exp[] = "8ba3f768466f6f4261720000000012ee";
11+
12+
/* */
13+
1014
size_t str_real_len = strlen(str);
1115
size_t str_pad_len = str_len - str_real_len;
1216

@@ -20,8 +24,8 @@ int main() {
2024
}
2125
*(uint16_t *)(ser + 4 + str_len) = bbp_eint16(BBP_LITTLE, n16);
2226

23-
/* 8ba3f768466f6f4261720000000012ee */
24-
bbp_print_hex("ser", ser, sizeof(ser));
27+
bbp_print_hex("ser ", ser, sizeof(ser));
28+
printf("ser (exp): %s\n", ser_exp);
2529

2630
return 0;
2731
}

ex-hashes.c

+12-6
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,29 @@ int main() {
88
uint8_t digest[32];
99
uint8_t ser[35];
1010

11+
const char sha256_exp[] = "518ad5a375fa52f84b2b3df7933ad685eb62cf69869a96731561f94d10826b5c";
12+
const char hash256_exp[] = "90986ea4e28b847cc7f9beba87ea81b221ca6eaf9828a8b04c290c21d891bcda";
13+
const char ser_exp[] = "7fd1dabc91d8210c294cb0a82898af6eca21b281ea87babef9c77c848be2a46e98908c";
14+
15+
/* */
16+
1117
/* SHA-2 digest is big-endian */
1218

13-
/* 1st round = 518ad5a375fa52f84b2b3df7933ad685eb62cf69869a96731561f94d10826b5c */
1419
bbp_sha256(digest, (uint8_t *)message, strlen(message));
15-
bbp_print_hex("SHA256(message)", digest, 32);
20+
bbp_print_hex("SHA256(message) ", digest, 32);
21+
printf("SHA256(message) (exp): %s\n", sha256_exp);
1622

17-
/* 2nd round = 90986ea4e28b847cc7f9beba87ea81b221ca6eaf9828a8b04c290c21d891bcda */
1823
bbp_sha256(digest, digest, 32);
19-
bbp_print_hex("hash256(message)", digest, 32);
24+
bbp_print_hex("hash256(message) ", digest, 32);
25+
printf("hash256(message) (exp): %s\n", hash256_exp);
2026

2127
*(uint16_t *)(ser) = bbp_eint16(BBP_LITTLE, prefix);
2228
memcpy(ser + 2, digest, 32);
2329
bbp_reverse(ser + 2, 32);
2430
*(ser + 2 + 32) = suffix;
2531

26-
/* 7fd1dabc91d8210c294cb0a82898af6eca21b281ea87babef9c77c848be2a46e98908c */
27-
bbp_print_hex("ser", ser, sizeof(ser));
32+
bbp_print_hex("ser ", ser, sizeof(ser));
33+
printf("ser (exp): %s\n", ser_exp);
2834

2935
return 0;
3036
}

ex-integers.c

+6-2
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,17 @@ int main() {
77
uint64_t n64 = 0xdebc9a78563412ef;
88
uint8_t ser[15];
99

10+
const char ser_exp[] = "0123456789abcdef123456789abcde";
11+
12+
/* */
13+
1014
*ser = n8;
1115
*(uint16_t *)(ser + 1) = bbp_eint16(BBP_LITTLE, n16);
1216
*(uint32_t *)(ser + 3) = bbp_eint32(BBP_LITTLE, n32);
1317
*(uint64_t *)(ser + 7) = bbp_eint64(BBP_LITTLE, n64);
1418

15-
/* 0123456789abcdef123456789abcde */
16-
bbp_print_hex("ser", ser, sizeof(ser));
19+
bbp_print_hex("ser ", ser, sizeof(ser));
20+
printf("ser (exp): %s\n", ser_exp);
1721

1822
return 0;
1923
}

ex-tx-build.c

+6-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ int main() {
1313
uint8_t *msg;
1414
size_t msg_len;
1515

16+
const char msg_exp[] = "0100000001f34e1c37e736727770fed85d1b129713ef7f300304498c31c833985f487fa2f3000000001976a9146bf19e55f94d986b4640c154d86469934191951188acffffffff02e0fe7e01000000001976a91418ba14b3682295cb05230e31fecb00089240660888ace084b003000000001976a9146bf19e55f94d986b4640c154d86469934191951188ac0000000001000000";
17+
18+
/* */
19+
1620
/* output 1 (0.251 BTC) */
1721
bbp_txout_create_p2pkh(&outs[0], 25100000, "18ba14b3682295cb05230e31fecb000892406608");
1822

@@ -44,7 +48,8 @@ int main() {
4448
printf("ins_sign[0].outpoint.index: %u\n", ins_sign[0].outpoint.index);
4549
bbp_print_hex("ins_sign[0].script", ins_sign[0].script, ins_sign[0].script_len);
4650
puts("");
47-
bbp_print_hex("msg", msg, msg_len);
51+
bbp_print_hex("msg ", msg, msg_len);
52+
printf("msg (exp): %s\n", msg_exp);
4853

4954
free(msg);
5055
bbp_txout_destroy(&outs[0]);

ex-tx-pack.c

+4-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ int main() {
1313
size_t rawtx_len;
1414
uint8_t txid[32];
1515

16+
const char txid_exp[] = "d189c659a60a30ea7ca66ea53249c3ae3e7557399a48c6948738266f719616d2";
17+
1618
/* inputs */
1719
bbp_outpoint_fill(&outpoint, "f34e1c37e736727770fed85d1b129713ef7f300304498c31c833985f487fa2f3", 0);
1820
bbp_txin_create_p2pkh(&ins[0], &outpoint, "30440220111a482aba6afba12a6f27de767dd4d06417def665bd100bc68c42845c752a8f02205e86f5e054b2c6cac5d663664e35779fb034387c07848bc7724442cacf659324", "0282006e9398a6986eda61fe91674c3a108c399475bf1e738f19dfc2db11db1d28", BBP_SIGHASH_ALL);
@@ -45,7 +47,8 @@ int main() {
4547
bbp_print_hex("rawtx", rawtx, rawtx_len);
4648
printf("size: %lu bytes\n", rawtx_len);
4749
puts("");
48-
bbp_print_hex("txid", txid, 32);
50+
bbp_print_hex("txid ", txid, 32);
51+
printf("txid (exp): %s\n", txid_exp);
4952

5053
free(rawtx);
5154
bbp_txin_destroy(&ins[0]);

ex-tx-sign.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ int main() {
1414
unsigned int sig_len;
1515

1616
/* keypair */
17-
bbp_parse_hex(BBP_LITTLE, priv, "16260783e40b16731673622ac8a5b045fc3ea4af70f727f3f9e92bdd3a1ddc42");
17+
bbp_parse_hex(priv, "16260783e40b16731673622ac8a5b045fc3ea4af70f727f3f9e92bdd3a1ddc42");
1818
key = bbp_ec_new_keypair(priv);
1919

2020
/* message */
21-
msg = bbp_alloc_hex(BBP_LITTLE, "0100000001f3a27f485f9833c8318c490403307fef1397121b5dd8fe70777236e7371c4ef3000000001976a9146bf19e55f94d986b4640c154d86469934191951188acffffffff02e0fe7e01000000001976a91418ba14b3682295cb05230e31fecb00089240660888ace084b003000000001976a9146bf19e55f94d986b4640c154d86469934191951188ac0000000001000000", &msg_len);
21+
msg = bbp_alloc_hex("0100000001f3a27f485f9833c8318c490403307fef1397121b5dd8fe70777236e7371c4ef3000000001976a9146bf19e55f94d986b4640c154d86469934191951188acffffffff02e0fe7e01000000001976a91418ba14b3682295cb05230e31fecb00089240660888ace084b003000000001976a9146bf19e55f94d986b4640c154d86469934191951188ac0000000001000000", &msg_len);
2222

2323
/* signature */
2424
bbp_hash256(digest, msg, msg_len);

ex-vardata.c

+7-3
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,17 @@ int main() {
1313
size_t varlen;
1414
uint8_t data[100] = { 0 };
1515

16+
const char data_exp[] = "e303418ba620e1b78360";
17+
18+
/* */
19+
1620
len = bbp_varint_get(bytes, &varlen);
1721
printf("len: %lu, varlen: %lu\n", len, varlen);
1822

19-
bbp_ecopy(BBP_LITTLE, data, bytes + varlen, len);
23+
memcpy(data, bytes + varlen, len);
2024

21-
/* e303418ba620e1b78360 */
22-
bbp_print_hex("data", data, len);
25+
bbp_print_hex("data ", data, len);
26+
printf("data (exp): %s\n", data_exp);
2327

2428
return 0;
2529
}

ex-varints.c

+17-5
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,28 @@ int main() {
1818
foo_t decoded;
1919
size_t varlen;
2020

21+
const foo_t exp = {
22+
0x9c13,
23+
0x807d,
24+
0x20a26b44,
25+
0xcc
26+
};
27+
28+
/* */
29+
2130
decoded.fixed1 = bbp_eint16(BBP_LITTLE, *(uint16_t *)bytes);
2231
decoded.var2 = bbp_varint_get(bytes + 2, &varlen);
2332
decoded.fixed3 = bbp_eint32(BBP_LITTLE, *(uint32_t *)(bytes + 2 + varlen));
2433
decoded.fixed4 = *(bytes + 2 + varlen + 4);
2534

26-
/* 9c13, 807d, 20a26b44, cc */
27-
printf("fixed1 = %x\n", decoded.fixed1);
28-
printf("var2 = %llx\n", decoded.var2);
29-
printf("fixed3 = %x\n", decoded.fixed3);
30-
printf("fixed4 = %x\n", decoded.fixed4);
35+
printf("fixed1 : %x\n", decoded.fixed1);
36+
printf("fixed1 (exp): %x\n", exp.fixed1);
37+
printf("var2 : %llx\n", decoded.var2);
38+
printf("var2 (exp): %llx\n", exp.var2);
39+
printf("fixed3 : %x\n", decoded.fixed3);
40+
printf("fixed3 (exp): %x\n", exp.fixed3);
41+
printf("fixed4 : %x\n", decoded.fixed4);
42+
printf("fixed4 (exp): %x\n", exp.fixed4);
3143

3244
return 0;
3345
}

ex-wif.c

+6-1
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,19 @@ int main() {
1212
uint8_t wif_bytes[34];
1313
char *wif;
1414

15+
const char wif_exp[] = "cNKkmrwHuShs2mvkVEKfXULxXhxRo3yy1cK6sq62uBp2Pc8Lsa76";
16+
17+
/* */
18+
1519
bbp_print_hex("priv", priv_bytes, sizeof(priv_bytes));
1620

1721
wif_bytes[0] = 0xef;
1822
memcpy(wif_bytes + 1, priv_bytes, 32);
1923
wif_bytes[33] = 0x01;
2024

2125
wif = bbp_base58check(wif_bytes, 34);
22-
printf("WIF: %s\n", wif);
26+
printf("WIF : %s\n", wif);
27+
printf("WIF (exp): %s\n", wif_exp);
2328
free(wif);
2429

2530
return 0;

0 commit comments

Comments
 (0)