Skip to content

Instantly share code, notes, and snippets.

@brunoerg
Created October 24, 2025 17:22
Show Gist options
  • Select an option

  • Save brunoerg/b4c9d05d8dec2075058c184769065491 to your computer and use it in GitHub Desktop.

Select an option

Save brunoerg/b4c9d05d8dec2075058c184769065491 to your computer and use it in GitHub Desktop.
Mutation testing for `silentpayments/main_impl.h`

src/modules/silentpayments/main_impl.h

  • Date: 2025-10-23 22:48:25
  • Mutation score: 0.92

Hunk ID: 240

  • commit: a0d2a33 id: 1 status: alive
@@ -237,7 +237,7 @@ int secp256k1_silentpayments_sender_create_outputs(
     for (i = 0; i < n_plain_seckeys; i++) {
         ret = secp256k1_scalar_set_b32_seckey(&addend, plain_seckeys[i]);
         secp256k1_declassify(ctx, &ret, sizeof(ret));
-        if (!ret) {
+        if (1==0) {
             secp256k1_scalar_clear(&addend);
             secp256k1_scalar_clear(&seckey_sum_scalar);
             return 0;
@@ -794,4 +794,4 @@ int secp256k1_silentpayments_recipient_create_output_pubkeys(const secp256k1_con
     return secp256k1_silentpayments_create_output_pubkeys(ctx, outputs_xonly, shared_secret, spend_pubkeys, n_spend_pubkeys, 0);
 }


Hunk ID: 327

  • commit: a0d2a33 id: 1 status: alive
@@ -324,7 +324,7 @@ int secp256k1_silentpayments_sender_create_outputs(
          * In practice, this should never happen as it would be impossible to create a transaction
          * with this many outputs.
          */
-        if (k < UINT32_MAX) {
+        if (k <= UINT32_MAX) {
             k++;
         } else {
             return 0;
@@ -794,4 +794,4 @@ int secp256k1_silentpayments_recipient_create_output_pubkeys(const secp256k1_con
     return secp256k1_silentpayments_create_output_pubkeys(ctx, outputs_xonly, shared_secret, spend_pubkeys, n_spend_pubkeys, 0);
 }
  • commit: a0d2a33 id: 2 status: alive
@@ -324,7 +324,7 @@ int secp256k1_silentpayments_sender_create_outputs(
          * In practice, this should never happen as it would be impossible to create a transaction
          * with this many outputs.
          */
-        if (k < UINT32_MAX) {
+        if (1==1) {
             k++;
         } else {
             return 0;
@@ -794,4 +794,4 @@ int secp256k1_silentpayments_recipient_create_output_pubkeys(const secp256k1_con
     return secp256k1_silentpayments_create_output_pubkeys(ctx, outputs_xonly, shared_secret, spend_pubkeys, n_spend_pubkeys, 0);
 }

Hunk ID: 542

  • commit: a0d2a33 id: 1 status: alive
@@ -539,7 +539,7 @@ int secp256k1_silentpayments_recipient_prevouts_summary_serialize(const secp256k
     secp256k1_ge_from_bytes(&ge, &prevouts_summary->data[5]);
     combined = (int)prevouts_summary->data[4];
     ret = 1;
-    if (!combined) {
+    if (1==0) {
         secp256k1_scalar input_hash_scalar;
         secp256k1_scalar_set_b32(&input_hash_scalar, &prevouts_summary->data[5 + 64], NULL);
         ret &= secp256k1_eckey_pubkey_tweak_mul(&ge, &input_hash_scalar);
@@ -794,4 +794,4 @@ int secp256k1_silentpayments_recipient_create_output_pubkeys(const secp256k1_con
     return secp256k1_silentpayments_create_output_pubkeys(ctx, outputs_xonly, shared_secret, spend_pubkeys, n_spend_pubkeys, 0);
 }
  • commit: a0d2a33 id: 2 status: alive
@@ -539,7 +539,7 @@ int secp256k1_silentpayments_recipient_prevouts_summary_serialize(const secp256k
     secp256k1_ge_from_bytes(&ge, &prevouts_summary->data[5]);
     combined = (int)prevouts_summary->data[4];
     ret = 1;
-    if (!combined) {
+    if (1==1) {
         secp256k1_scalar input_hash_scalar;
         secp256k1_scalar_set_b32(&input_hash_scalar, &prevouts_summary->data[5 + 64], NULL);
         ret &= secp256k1_eckey_pubkey_tweak_mul(&ge, &input_hash_scalar);
@@ -794,4 +794,4 @@ int secp256k1_silentpayments_recipient_create_output_pubkeys(const secp256k1_con
     return secp256k1_silentpayments_create_output_pubkeys(ctx, outputs_xonly, shared_secret, spend_pubkeys, n_spend_pubkeys, 0);
 }

Hunk ID: 544

  • commit: a0d2a33 id: 1 status: alive
@@ -541,7 +541,7 @@ int secp256k1_silentpayments_recipient_prevouts_summary_serialize(const secp256k
     ret = 1;
     if (!combined) {
         secp256k1_scalar input_hash_scalar;
-        secp256k1_scalar_set_b32(&input_hash_scalar, &prevouts_summary->data[5 + 64], NULL);
+        secp256k1_scalar_set_b32(&input_hash_scalar, &prevouts_summary->data[5 / 64], NULL);
         ret &= secp256k1_eckey_pubkey_tweak_mul(&ge, &input_hash_scalar);
     }
     ret &= secp256k1_eckey_pubkey_serialize(&ge, output, &size, compressed);
@@ -794,4 +794,4 @@ int secp256k1_silentpayments_recipient_create_output_pubkeys(const secp256k1_con
     return secp256k1_silentpayments_create_output_pubkeys(ctx, outputs_xonly, shared_secret, spend_pubkeys, n_spend_pubkeys, 0);
 }
  • commit: a0d2a33 id: 2 status: alive
@@ -541,7 +541,7 @@ int secp256k1_silentpayments_recipient_prevouts_summary_serialize(const secp256k
     ret = 1;
     if (!combined) {
         secp256k1_scalar input_hash_scalar;
-        secp256k1_scalar_set_b32(&input_hash_scalar, &prevouts_summary->data[5 + 64], NULL);
+        secp256k1_scalar_set_b32(&input_hash_scalar, &prevouts_summary->data[5 * 64], NULL);
         ret &= secp256k1_eckey_pubkey_tweak_mul(&ge, &input_hash_scalar);
     }
     ret &= secp256k1_eckey_pubkey_serialize(&ge, output, &size, compressed);
@@ -794,4 +794,4 @@ int secp256k1_silentpayments_recipient_create_output_pubkeys(const secp256k1_con
     return secp256k1_silentpayments_create_output_pubkeys(ctx, outputs_xonly, shared_secret, spend_pubkeys, n_spend_pubkeys, 0);
 }


  • commit: a0d2a33 id: 3 status: alive
@@ -541,7 +541,7 @@ int secp256k1_silentpayments_recipient_prevouts_summary_serialize(const secp256k
     ret = 1;
     if (!combined) {
         secp256k1_scalar input_hash_scalar;
-        secp256k1_scalar_set_b32(&input_hash_scalar, &prevouts_summary->data[5 + 64], NULL);
+        secp256k1_scalar_set_b32(&input_hash_scalar, &prevouts_summary->data[5 - 64], NULL);
         ret &= secp256k1_eckey_pubkey_tweak_mul(&ge, &input_hash_scalar);
     }
     ret &= secp256k1_eckey_pubkey_serialize(&ge, output, &size, compressed);
@@ -794,4 +794,4 @@ int secp256k1_silentpayments_recipient_create_output_pubkeys(const secp256k1_con
     return secp256k1_silentpayments_create_output_pubkeys(ctx, outputs_xonly, shared_secret, spend_pubkeys, n_spend_pubkeys, 0);
 }


Hunk ID: 569

  • commit: a0d2a33 id: 1 status: alive
@@ -566,7 +566,7 @@ int secp256k1_silentpayments_recipient_prevouts_summary_parse(const secp256k1_co
     memcpy(&prevouts_summary->data[0], secp256k1_silentpayments_prevouts_summary_magic, 4);
     prevouts_summary->data[4] = 1;
     secp256k1_ge_to_bytes(&prevouts_summary->data[5], &pk);
-    memset(&prevouts_summary->data[5 + 64], 0, 32);
+    memset(&prevouts_summary->data[5 - 64], 0, 32);
     return 1;
 }

@@ -794,4 +794,4 @@ int secp256k1_silentpayments_recipient_create_output_pubkeys(const secp256k1_con
     return secp256k1_silentpayments_create_output_pubkeys(ctx, outputs_xonly, shared_secret, spend_pubkeys, n_spend_pubkeys, 0);
 }


  • commit: a0d2a33 id: 2 status: alive
@@ -566,7 +566,7 @@ int secp256k1_silentpayments_recipient_prevouts_summary_parse(const secp256k1_co
     memcpy(&prevouts_summary->data[0], secp256k1_silentpayments_prevouts_summary_magic, 4);
     prevouts_summary->data[4] = 1;
     secp256k1_ge_to_bytes(&prevouts_summary->data[5], &pk);
-    memset(&prevouts_summary->data[5 + 64], 0, 32);
+    memset(&prevouts_summary->data[5 * 64], 0, 32);
     return 1;
 }

@@ -794,4 +794,4 @@ int secp256k1_silentpayments_recipient_create_output_pubkeys(const secp256k1_con
     return secp256k1_silentpayments_create_output_pubkeys(ctx, outputs_xonly, shared_secret, spend_pubkeys, n_spend_pubkeys, 0);
 }


Hunk ID: 659

  • commit: a0d2a33 id: 1 status: alive
@@ -656,7 +656,7 @@ int secp256k1_silentpayments_recipient_scan_outputs(
                 label_tweak = NULL;
                 found = 1;
                 found_idx = j;
-                break;
+                continue;
             }

             /* If not found, proceed to check for labels (if a label lookup function is provided). */
@@ -794,4 +794,4 @@ int secp256k1_silentpayments_recipient_create_output_pubkeys(const secp256k1_con
     return secp256k1_silentpayments_create_output_pubkeys(ctx, outputs_xonly, shared_secret, spend_pubkeys, n_spend_pubkeys, 0);
 }


Hunk ID: 747

  • commit: a0d2a33 id: 1 status: alive
@@ -744,7 +744,7 @@ int secp256k1_silentpayments_recipient_scan_outputs(
              * In practice, this should never happen as it would be impossible to create a transaction
              * with this many outputs.
              */
-            if (k < UINT32_MAX) {
+            if (1==1) {
                 k++;
             } else {
                 return 0;
@@ -794,4 +794,4 @@ int secp256k1_silentpayments_recipient_create_output_pubkeys(const secp256k1_con
     return secp256k1_silentpayments_create_output_pubkeys(ctx, outputs_xonly, shared_secret, spend_pubkeys, n_spend_pubkeys, 0);
 }


  • commit: a0d2a33 id: 2 status: alive
@@ -744,7 +744,7 @@ int secp256k1_silentpayments_recipient_scan_outputs(
              * In practice, this should never happen as it would be impossible to create a transaction
              * with this many outputs.
              */
-            if (k < UINT32_MAX) {
+            if (k <= UINT32_MAX) {
                 k++;
             } else {
                 return 0;
@@ -794,4 +794,4 @@ int secp256k1_silentpayments_recipient_create_output_pubkeys(const secp256k1_con
     return secp256k1_silentpayments_create_output_pubkeys(ctx, outputs_xonly, shared_secret, spend_pubkeys, n_spend_pubkeys, 0);
 }


Hunk ID: 754

  • commit: a0d2a33 id: 1 status: alive
@@ -751,7 +751,7 @@ int secp256k1_silentpayments_recipient_scan_outputs(
             }
         } else {
             secp256k1_scalar_clear(&output_tweak_scalar);
-            break;
+            continue;
         }
     }
     *n_found_outputs = n_found;
@@ -794,4 +794,4 @@ int secp256k1_silentpayments_recipient_create_output_pubkeys(const secp256k1_con
     return secp256k1_silentpayments_create_output_pubkeys(ctx, outputs_xonly, shared_secret, spend_pubkeys, n_spend_pubkeys, 0);
 }


Hunk ID: 787

  • commit: a0d2a33 id: 1 status: alive
@@ -784,7 +784,7 @@ int secp256k1_silentpayments_recipient_create_output_pubkeys(const secp256k1_con
     }
     secp256k1_ge_from_bytes(&input_pubkey_ge, &prevouts_summary->data[5]);
     combined = (int)prevouts_summary->data[4];
-    if (!combined) {
+    if (1==0) {
         secp256k1_scalar input_hash_scalar;
         secp256k1_scalar_set_b32(&input_hash_scalar, &prevouts_summary->data[5 + 64], NULL);
         secp256k1_scalar_mul(&scan_key_scalar, &scan_key_scalar, &input_hash_scalar);
@@ -794,4 +794,4 @@ int secp256k1_silentpayments_recipient_create_output_pubkeys(const secp256k1_con
     return secp256k1_silentpayments_create_output_pubkeys(ctx, outputs_xonly, shared_secret, spend_pubkeys, n_spend_pubkeys, 0);
 }


Hunk ID: 789

  • commit: a0d2a33 id: 1 status: alive
@@ -786,7 +786,7 @@ int secp256k1_silentpayments_recipient_create_output_pubkeys(const secp256k1_con
     combined = (int)prevouts_summary->data[4];
     if (!combined) {
         secp256k1_scalar input_hash_scalar;
-        secp256k1_scalar_set_b32(&input_hash_scalar, &prevouts_summary->data[5 + 64], NULL);
+        secp256k1_scalar_set_b32(&input_hash_scalar, &prevouts_summary->data[5 * 64], NULL);
         secp256k1_scalar_mul(&scan_key_scalar, &scan_key_scalar, &input_hash_scalar);
     }
     secp256k1_silentpayments_create_shared_secret(ctx, shared_secret, &input_pubkey_ge, &scan_key_scalar);
@@ -794,4 +794,4 @@ int secp256k1_silentpayments_recipient_create_output_pubkeys(const secp256k1_con
     return secp256k1_silentpayments_create_output_pubkeys(ctx, outputs_xonly, shared_secret, spend_pubkeys, n_spend_pubkeys, 0);
 }


  • commit: a0d2a33 id: 2 status: alive
@@ -786,7 +786,7 @@ int secp256k1_silentpayments_recipient_create_output_pubkeys(const secp256k1_con
     combined = (int)prevouts_summary->data[4];
     if (!combined) {
         secp256k1_scalar input_hash_scalar;
-        secp256k1_scalar_set_b32(&input_hash_scalar, &prevouts_summary->data[5 + 64], NULL);
+        secp256k1_scalar_set_b32(&input_hash_scalar, &prevouts_summary->data[5 / 64], NULL);
         secp256k1_scalar_mul(&scan_key_scalar, &scan_key_scalar, &input_hash_scalar);
     }
     secp256k1_silentpayments_create_shared_secret(ctx, shared_secret, &input_pubkey_ge, &scan_key_scalar);
@@ -794,4 +794,4 @@ int secp256k1_silentpayments_recipient_create_output_pubkeys(const secp256k1_con
     return secp256k1_silentpayments_create_output_pubkeys(ctx, outputs_xonly, shared_secret, spend_pubkeys, n_spend_pubkeys, 0);
 }


  • commit: a0d2a33 id: 3 status: alive
@@ -786,7 +786,7 @@ int secp256k1_silentpayments_recipient_create_output_pubkeys(const secp256k1_con
     combined = (int)prevouts_summary->data[4];
     if (!combined) {
         secp256k1_scalar input_hash_scalar;
-        secp256k1_scalar_set_b32(&input_hash_scalar, &prevouts_summary->data[5 + 64], NULL);
+        secp256k1_scalar_set_b32(&input_hash_scalar, &prevouts_summary->data[5 - 64], NULL);
         secp256k1_scalar_mul(&scan_key_scalar, &scan_key_scalar, &input_hash_scalar);
     }
     secp256k1_silentpayments_create_shared_secret(ctx, shared_secret, &input_pubkey_ge, &scan_key_scalar);
@@ -794,4 +794,4 @@ int secp256k1_silentpayments_recipient_create_output_pubkeys(const secp256k1_con
     return secp256k1_silentpayments_create_output_pubkeys(ctx, outputs_xonly, shared_secret, spend_pubkeys, n_spend_pubkeys, 0);
 }


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment