secp256k1_ec_privkey_negate and invalid privkeys #488

issue dcousens opened this issue on November 29, 2017
  1. dcousens commented at 6:15 AM on November 29, 2017: contributor

    For keys greater than the order, secp256k1_scalar_negate returns strange results (understandable!).

    But, as a result, secp256k1_ec_privkey_negate, when called with an invalid private key, returns 1 (OK), and a ?private key?.

    Tripped me up for a bit when generating some test fixtures for secp256k1_ec_privkey_negate.

    0000000000000000000000000000000000000000000000000000000000000000 becomes 0000000000000000000000000000000000000000000000000000000000000000
    ff00000000000000000000000000000000000000000000000000000000000000 becomes 00fffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141
    ffff000000000000000000000000000000000000000000000000000000000000 becomes 0000fffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141
    ffffff0000000000000000000000000000000000000000000000000000000000 becomes 000000fffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141
    ffffffff00000000000000000000000000000000000000000000000000000000 becomes 00000000fffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141
    ffffffffff000000000000000000000000000000000000000000000000000000 becomes 0000000000fffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141
    ffffffffffff0000000000000000000000000000000000000000000000000000 becomes 000000000000fffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141
    ffffffffffffff00000000000000000000000000000000000000000000000000 becomes 00000000000000fffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141
    ffffffffffffffff000000000000000000000000000000000000000000000000 becomes 0000000000000000fffffffffffffffebaaedce6af48a03bbfd25e8cd0364141
    ffffffffffffffffff0000000000000000000000000000000000000000000000 becomes 000000000000000000fffffffffffffebaaedce6af48a03bbfd25e8cd0364141
    ffffffffffffffffffff00000000000000000000000000000000000000000000 becomes 00000000000000000000fffffffffffebaaedce6af48a03bbfd25e8cd0364141
    ffffffffffffffffffffff000000000000000000000000000000000000000000 becomes 0000000000000000000000fffffffffebaaedce6af48a03bbfd25e8cd0364141
    ffffffffffffffffffffffff0000000000000000000000000000000000000000 becomes 000000000000000000000000fffffffebaaedce6af48a03bbfd25e8cd0364141
    ffffffffffffffffffffffffff00000000000000000000000000000000000000 becomes 00000000000000000000000000fffffebaaedce6af48a03bbfd25e8cd0364141
    ffffffffffffffffffffffffffff000000000000000000000000000000000000 becomes 0000000000000000000000000000fffebaaedce6af48a03bbfd25e8cd0364141
    ffffffffffffffffffffffffffffff0000000000000000000000000000000000 becomes 000000000000000000000000000000febaaedce6af48a03bbfd25e8cd0364141
    ffffffffffffffffffffffffffffffff00000000000000000000000000000000 becomes fffffffffffffffffffffffffffffffe755db9cd5e9140777fa4bd19a06c8282
    ffffffffffffffffffffffffffffffffff000000000000000000000000000000 becomes fffffffffffffffffffffffffffffffd765db9cd5e9140777fa4bd19a06c8282
    ffffffffffffffffffffffffffffffffffff0000000000000000000000000000 becomes fffffffffffffffffffffffffffffffd755eb9cd5e9140777fa4bd19a06c8282
    ffffffffffffffffffffffffffffffffffffff00000000000000000000000000 becomes fffffffffffffffffffffffffffffffd755dbacd5e9140777fa4bd19a06c8282
    ffffffffffffffffffffffffffffffffffffffff000000000000000000000000 becomes fffffffffffffffffffffffffffffffd755db9ce5e9140777fa4bd19a06c8282
    ffffffffffffffffffffffffffffffffffffffffff0000000000000000000000 becomes fffffffffffffffffffffffffffffffd755db9cd5f9140777fa4bd19a06c8282
    ffffffffffffffffffffffffffffffffffffffffffff00000000000000000000 becomes fffffffffffffffffffffffffffffffd755db9cd5e9240777fa4bd19a06c8282
    ffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 becomes fffffffffffffffffffffffffffffffd755db9cd5e9141777fa4bd19a06c8282
    ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000 becomes fffffffffffffffffffffffffffffffd755db9cd5e9140787fa4bd19a06c8282
    ffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 becomes fffffffffffffffffffffffffffffffd755db9cd5e91407780a4bd19a06c8282
    ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 becomes fffffffffffffffffffffffffffffffd755db9cd5e9140777fa5bd19a06c8282
    ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 becomes fffffffffffffffffffffffffffffffd755db9cd5e9140777fa4be19a06c8282
    ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 becomes fffffffffffffffffffffffffffffffd755db9cd5e9140777fa4bd1aa06c8282
    ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 becomes fffffffffffffffffffffffffffffffd755db9cd5e9140777fa4bd19a16c8282
    ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 becomes fffffffffffffffffffffffffffffffd755db9cd5e9140777fa4bd19a06d8282
    ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 becomes fffffffffffffffffffffffffffffffd755db9cd5e9140777fa4bd19a06c8382
    
    
  2. dcousens commented at 6:15 AM on September 24, 2018: contributor

    Is this a bug or? Do I close?

  3. apoelstra commented at 10:44 PM on September 26, 2018: contributor

    I think it's a documentation bug. We should state clearly that secp256k1_ec_privkey_negate will work only on valid secret keys, and that mysterious things will happen otherwise.

  4. jonasnick cross-referenced this on Oct 7, 2019 from issue Return 0 if invalid seckey is given to ec_privkey_negate by jonasnick
  5. jonasnick cross-referenced this on Oct 9, 2019 from issue Make ec_ arithmetic more consistent and add documentation by jonasnick
  6. real-or-random closed this on Apr 30, 2020


github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin-core/secp256k1. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-05-08 04:15 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me