rangeproof: add secp256k1_rangeproof_max_size function to estimate rangeproof size
Provides a method that will give an upper bound on the size of a rangeproof, given an upper bound on the value to be passed in and an upper bound on the min_bits parameter. There is a lot of design freedom here since the actual size of the rangeproof depends on every parameter passed to rangeproof_sign, including the value to be proven, often in quite intricate ways. For the sake of simplicity we assume a nonzero `min_value` and that `exp` will be 0 (the default, and size-maximizing, choice), and provide an exact value for a proof of the given value and min_bits.
This commit is contained in:
@@ -287,6 +287,33 @@ SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_rangeproof_info(
|
||||
size_t plen
|
||||
) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4) SECP256K1_ARG_NONNULL(5);
|
||||
|
||||
/** Returns an upper bound on the size of a rangeproof with the given parameters
|
||||
*
|
||||
* An actual rangeproof may be smaller, for example if the actual value
|
||||
* is less than both the provided `max_value` and 2^`min_bits`, or if
|
||||
* the `exp` parameter to `secp256k1_rangeproof_sign` is set such that
|
||||
* the proven range is compressed. In particular this function will always
|
||||
* overestimate the size of single-value proofs. Also, if `min_value`
|
||||
* is set to 0 in the proof, the result will usually, but not always,
|
||||
* be 8 bytes smaller than if a nonzero value had been passed.
|
||||
*
|
||||
* The goal of this function is to provide a useful upper bound for
|
||||
* memory allocation or fee estimation purposes, without requiring
|
||||
* too many parameters be fixed in advance.
|
||||
*
|
||||
* To obtain the size of largest possible proof, set `max_value` to
|
||||
* `UINT64_MAX` (and `min_bits` to any valid value such as 0).
|
||||
*
|
||||
* In: ctx: pointer to a context object
|
||||
* max_value: the maximum value that might be passed for `value` for the proof.
|
||||
* min_bits: the value that will be passed as `min_bits` for the proof.
|
||||
*/
|
||||
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT size_t secp256k1_rangeproof_max_size(
|
||||
const secp256k1_context* ctx,
|
||||
uint64_t max_value,
|
||||
int min_bits
|
||||
) SECP256K1_ARG_NONNULL(1);
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif
|
||||
|
||||
Reference in New Issue
Block a user