Skip to content

Commit 768a363

Browse files
committed
adapt to rippled change to uncompressed 33-byte key
1 parent 5fc6304 commit 768a363

File tree

3 files changed

+39
-26
lines changed

3 files changed

+39
-26
lines changed

include/utility/mpt_utility.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ extern "C" {
1919

2020
// General crypto primitive sizes in bytes
2121
#define kMPT_HALF_SHA_SIZE 32
22-
#define kMPT_PUBKEY_SIZE 64
22+
#define kMPT_PUBKEY_SIZE 33
2323
#define kMPT_PRIVKEY_SIZE 32
2424
#define kMPT_BLINDING_FACTOR_SIZE 32
2525

2626
// Gamal & Pedersen primitive sizes in bytes
2727
#define kMPT_ELGAMAL_CIPHER_SIZE 33
2828
#define kMPT_ELGAMAL_TOTAL_SIZE 66
29-
#define kMPT_PEDERSEN_COMMIT_SIZE 64
29+
#define kMPT_PEDERSEN_COMMIT_SIZE 33
3030

3131
// Proof sizes in bytes
3232
#define kMPT_SCHNORR_PROOF_SIZE 65

src/utility/mpt_utility.cpp

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,9 @@ mpt_generate_keypair(uint8_t* out_privkey, uint8_t* out_pubkey)
333333
if (secp256k1_elgamal_generate_keypair(ctx, out_privkey, &pub) != 1)
334334
return -1;
335335

336-
std::memcpy(out_pubkey, pub.data, kMPT_PUBKEY_SIZE);
336+
size_t output_len = kMPT_PUBKEY_SIZE;
337+
if (secp256k1_ec_pubkey_serialize(ctx, out_pubkey, &output_len, &pub, SECP256K1_EC_COMPRESSED) != 1)
338+
return -1;
337339

338340
return 0;
339341
}
@@ -365,7 +367,8 @@ mpt_encrypt_amount(
365367
return -1;
366368

367369
secp256k1_pubkey c1, c2, pk;
368-
std::memcpy(pk.data, pubkey, kMPT_PUBKEY_SIZE);
370+
if (secp256k1_ec_pubkey_parse(ctx, &pk, pubkey, kMPT_PUBKEY_SIZE) != 1)
371+
return -1;
369372

370373
if (!secp256k1_elgamal_encrypt(ctx, &c1, &c2, &pk, amount, blinding_factor))
371374
return -1;
@@ -415,7 +418,8 @@ mpt_get_convert_proof(
415418
return -1;
416419

417420
secp256k1_pubkey pk;
418-
std::memcpy(pk.data, pubkey, kMPT_PUBKEY_SIZE);
421+
if (secp256k1_ec_pubkey_parse(ctx, &pk, pubkey, kMPT_PUBKEY_SIZE) != 1)
422+
return -1;
419423

420424
if (secp256k1_mpt_pok_sk_prove(ctx, out_proof, &pk, privkey, ctx_hash) != 1)
421425
return -1;
@@ -447,7 +451,9 @@ mpt_get_pedersen_commitment(
447451
if (secp256k1_mpt_pedersen_commit(ctx, &commitment, amount, blinding_factor) != 1)
448452
return -1;
449453

450-
std::memcpy(out_commitment, commitment.data, kMPT_PEDERSEN_COMMIT_SIZE);
454+
size_t output_len = kMPT_PEDERSEN_COMMIT_SIZE;
455+
if (secp256k1_ec_pubkey_serialize(ctx, out_commitment, &output_len, &commitment, SECP256K1_EC_COMPRESSED) != 1)
456+
return -1;
451457

452458
return 0;
453459
}
@@ -467,17 +473,19 @@ mpt_get_amount_linkage_proof(
467473
if (!ctx)
468474
return -1;
469475

470-
secp256k1_pubkey c1, c2;
476+
secp256k1_pubkey c1, c2, pk, pcm;
471477
if (!secp256k1_ec_pubkey_parse(ctx, &c1, params->encrypted_amount, kMPT_ELGAMAL_CIPHER_SIZE))
472478
return -1;
473479

474480
if (!secp256k1_ec_pubkey_parse(
475481
ctx, &c2, params->encrypted_amount + kMPT_ELGAMAL_CIPHER_SIZE, kMPT_ELGAMAL_CIPHER_SIZE))
476482
return -1;
477483

478-
secp256k1_pubkey pk, pcm;
479-
std::memcpy(pk.data, pubkey, kMPT_PUBKEY_SIZE);
480-
std::memcpy(pcm.data, params->pedersen_commitment, kMPT_PEDERSEN_COMMIT_SIZE);
484+
if (secp256k1_ec_pubkey_parse(ctx, &pk, pubkey, kMPT_PUBKEY_SIZE) != 1)
485+
return -1;
486+
487+
if (secp256k1_ec_pubkey_parse(ctx, &pcm, params->pedersen_commitment, kMPT_PEDERSEN_COMMIT_SIZE) != 1)
488+
return -1;
481489

482490
if (secp256k1_elgamal_pedersen_link_prove(
483491
ctx,
@@ -512,17 +520,19 @@ mpt_get_balance_linkage_proof(
512520
if (!ctx)
513521
return -1;
514522

515-
secp256k1_pubkey c1, c2;
523+
secp256k1_pubkey c1, c2, pk, pcm;
516524
if (!secp256k1_ec_pubkey_parse(ctx, &c1, params->encrypted_amount, kMPT_ELGAMAL_CIPHER_SIZE))
517525
return -1;
518526

519527
if (!secp256k1_ec_pubkey_parse(
520528
ctx, &c2, params->encrypted_amount + kMPT_ELGAMAL_CIPHER_SIZE, kMPT_ELGAMAL_CIPHER_SIZE))
521529
return -1;
522530

523-
secp256k1_pubkey pk, pcm;
524-
std::memcpy(pk.data, pub, kMPT_PUBKEY_SIZE);
525-
std::memcpy(pcm.data, params->pedersen_commitment, kMPT_PEDERSEN_COMMIT_SIZE);
531+
if (secp256k1_ec_pubkey_parse(ctx, &pk, pub, kMPT_PUBKEY_SIZE) != 1)
532+
return -1;
533+
534+
if (secp256k1_ec_pubkey_parse(ctx, &pcm, params->pedersen_commitment, kMPT_PEDERSEN_COMMIT_SIZE) != 1)
535+
return -1;
526536

527537
if (secp256k1_elgamal_pedersen_link_prove(
528538
ctx,
@@ -580,7 +590,9 @@ mpt_get_confidential_send_proof(
580590
ctx, &s[i], rec.encrypted_amount + kMPT_ELGAMAL_CIPHER_SIZE, kMPT_ELGAMAL_CIPHER_SIZE))
581591
return -1;
582592

583-
std::memcpy(pk[i].data, rec.pubkey, kMPT_PUBKEY_SIZE);
593+
if (secp256k1_ec_pubkey_parse(ctx, &pk[i], rec.pubkey, kMPT_PUBKEY_SIZE) != 1)
594+
return -1;
595+
584596
sr.insert(sr.end(), tx_blinding_factor, tx_blinding_factor + kMPT_BLINDING_FACTOR_SIZE);
585597
}
586598

@@ -609,14 +621,14 @@ mpt_get_confidential_send_proof(
609621
// Amount Linkage Proof
610622
uint8_t* amt_ptr = out_proof + size_equality;
611623
if (mpt_get_amount_linkage_proof(
612-
pk[0].data, tx_blinding_factor, context_hash, amount_params, amt_ptr) != 0)
624+
recipients[0].pubkey, tx_blinding_factor, context_hash, amount_params, amt_ptr) != 0)
613625
{
614626
return -1;
615627
}
616628

617629
// Balance Linkage Proof
618630
uint8_t* bal_ptr = amt_ptr + kMPT_PEDERSEN_LINK_SIZE;
619-
if (mpt_get_balance_linkage_proof(priv, pk[0].data, context_hash, balance_params, bal_ptr) != 0)
631+
if (mpt_get_balance_linkage_proof(priv, recipients[0].pubkey, context_hash, balance_params, bal_ptr) != 0)
620632
{
621633
return -1;
622634
}
@@ -657,7 +669,8 @@ mpt_get_clawback_proof(
657669
return -1;
658670

659671
secp256k1_pubkey pk;
660-
std::memcpy(pk.data, pub, kMPT_PUBKEY_SIZE);
672+
if (secp256k1_ec_pubkey_parse(ctx, &pk, pub, kMPT_PUBKEY_SIZE) != 1)
673+
return -1;
661674

662675
secp256k1_pubkey c1, c2;
663676
if (!mpt_make_ec_pair(encrypted_amount, c1, c2))

tests/test_mpt_utility.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ test_mpt_confidential_convert()
6868
secp256k1_ec_pubkey_parse(
6969
ctx, &c2, ciphertext + kMPT_ELGAMAL_CIPHER_SIZE, kMPT_ELGAMAL_CIPHER_SIZE) == 1);
7070

71-
std::memcpy(pk.data, pub, kMPT_PUBKEY_SIZE);
71+
EXPECT(secp256k1_ec_pubkey_parse(ctx, &pk, pub, kMPT_PUBKEY_SIZE) == 1);
7272
EXPECT(secp256k1_elgamal_verify_encryption(ctx, &c1, &c2, &pk, convert_amount, bf) == 1);
7373
EXPECT(secp256k1_mpt_pok_sk_verify(ctx, proof, &pk, tx_hash) == 1);
7474
}
@@ -192,7 +192,7 @@ test_mpt_confidential_send()
192192
for (size_t i = 0; i < n_recipients; ++i)
193193
{
194194
EXPECT(mpt_make_ec_pair(recipients[i].encrypted_amount, r_list[i], s_list[i]));
195-
std::memcpy(pk_list[i].data, recipients[i].pubkey, 64);
195+
EXPECT(secp256k1_ec_pubkey_parse(ctx, &pk_list[i], recipients[i].pubkey, kMPT_PUBKEY_SIZE) == 1);
196196
}
197197

198198
EXPECT(
@@ -212,8 +212,8 @@ test_mpt_confidential_send()
212212
secp256k1_pubkey pk, amt_pcm;
213213
secp256k1_pubkey amt_c1, amt_c2;
214214

215-
std::memcpy(pk.data, sender_pub, kMPT_PUBKEY_SIZE);
216-
std::memcpy(amt_pcm.data, amount_comm, kMPT_PEDERSEN_COMMIT_SIZE);
215+
EXPECT(secp256k1_ec_pubkey_parse(ctx, &pk, sender_pub, kMPT_PUBKEY_SIZE) == 1);
216+
EXPECT(secp256k1_ec_pubkey_parse(ctx, &amt_pcm, amount_comm, kMPT_PEDERSEN_COMMIT_SIZE) == 1);
217217

218218
EXPECT(mpt_make_ec_pair(sender_ct, amt_c1, amt_c2));
219219
EXPECT(
@@ -227,7 +227,7 @@ test_mpt_confidential_send()
227227
secp256k1_pubkey bal_pcm;
228228
secp256k1_pubkey bal_c1, bal_c2;
229229

230-
std::memcpy(bal_pcm.data, balance_comm, kMPT_PEDERSEN_COMMIT_SIZE);
230+
EXPECT(secp256k1_ec_pubkey_parse(ctx, &bal_pcm, balance_comm, kMPT_PEDERSEN_COMMIT_SIZE) == 1);
231231
EXPECT(mpt_make_ec_pair(prev_bal_ct, bal_c1, bal_c2));
232232

233233
EXPECT(
@@ -296,8 +296,8 @@ test_mpt_convert_back()
296296
secp256k1_pubkey c1, c2, pk, pcm;
297297

298298
EXPECT(mpt_make_ec_pair(pc_params.encrypted_amount, c1, c2));
299-
std::memcpy(pk.data, pub, kMPT_PUBKEY_SIZE);
300-
std::memcpy(pcm.data, pcm_comm, kMPT_PEDERSEN_COMMIT_SIZE);
299+
EXPECT(secp256k1_ec_pubkey_parse(ctx, &pk, pub, kMPT_PUBKEY_SIZE) == 1);
300+
EXPECT(secp256k1_ec_pubkey_parse(ctx, &pcm, pcm_comm, kMPT_PEDERSEN_COMMIT_SIZE) == 1);
301301

302302
int verify_result =
303303
secp256k1_elgamal_pedersen_link_verify(ctx, proof, &pk, &c2, &c1, &pcm, context_hash);
@@ -348,7 +348,7 @@ test_mpt_clawback()
348348
secp256k1_pubkey c1, c2, pk;
349349

350350
EXPECT(mpt_make_ec_pair(issuer_encrypted_bal, c1, c2));
351-
std::memcpy(pk.data, issuer_pub, kMPT_PUBKEY_SIZE);
351+
EXPECT(secp256k1_ec_pubkey_parse(ctx, &pk, issuer_pub, kMPT_PUBKEY_SIZE) == 1);
352352

353353
int verify_result =
354354
secp256k1_equality_plaintext_verify(ctx, proof, &pk, &c2, &c1, claw_amount, context_hash);

0 commit comments

Comments
 (0)