Merge rust-bitcoin/rust-secp256k1#532: Do trivial docs improvements
ecdad39ef4
context: Improve rustdocs (Tobin C. Harding)e945751d85
schnorr: Improve rustdocs (Tobin C. Harding)47f19a78ef
Use lowercase for schnorr (Tobin C. Harding)27b3e92889
Do trivial cleanup to module level docs (Tobin C. Harding) Pull request description: Audit of docs in `rust-secp256k1` and do a few trivial fixes. The docs are in pretty good condition, they just need more content as described in #128 if that issue is still valid. ACKs for top commit: apoelstra: ACKecdad39ef4
Tree-SHA512: 7466090325e02331f11e34cd38625541fbe8e642882afa6ddf2cf5d11ed669c7b2b48fd5b819915392760f4c6ef4ee460c2e622b3af648f99906c3ac408045d4
This commit is contained in:
commit
efb47e9bcf
|
@ -34,10 +34,10 @@ pub const MAX_SIGNATURE_SIZE: usize = 72;
|
||||||
/// The maximum size of a compact signature.
|
/// The maximum size of a compact signature.
|
||||||
pub const COMPACT_SIGNATURE_SIZE: usize = 64;
|
pub const COMPACT_SIGNATURE_SIZE: usize = 64;
|
||||||
|
|
||||||
/// The size of a Schnorr signature.
|
/// The size of a schnorr signature.
|
||||||
pub const SCHNORR_SIGNATURE_SIZE: usize = 64;
|
pub const SCHNORR_SIGNATURE_SIZE: usize = 64;
|
||||||
|
|
||||||
/// The size of a Schnorr public key.
|
/// The size of a schnorr public key.
|
||||||
pub const SCHNORR_PUBLIC_KEY_SIZE: usize = 32;
|
pub const SCHNORR_PUBLIC_KEY_SIZE: usize = 32;
|
||||||
|
|
||||||
/// The size of a key pair.
|
/// The size of a key pair.
|
||||||
|
|
|
@ -79,10 +79,10 @@ pub unsafe trait Context: private::Sealed {
|
||||||
unsafe fn deallocate(ptr: *mut u8, size: usize);
|
unsafe fn deallocate(ptr: *mut u8, size: usize);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Marker trait for indicating that an instance of `Secp256k1` can be used for signing.
|
/// Marker trait for indicating that an instance of [`Secp256k1`] can be used for signing.
|
||||||
pub trait Signing: Context {}
|
pub trait Signing: Context {}
|
||||||
|
|
||||||
/// Marker trait for indicating that an instance of `Secp256k1` can be used for verification.
|
/// Marker trait for indicating that an instance of [`Secp256k1`] can be used for verification.
|
||||||
pub trait Verification: Context {}
|
pub trait Verification: Context {}
|
||||||
|
|
||||||
/// Represents the set of capabilities needed for signing (preallocated memory).
|
/// Represents the set of capabilities needed for signing (preallocated memory).
|
||||||
|
@ -247,8 +247,8 @@ mod alloc_only {
|
||||||
impl Secp256k1<VerifyOnly> {
|
impl Secp256k1<VerifyOnly> {
|
||||||
/// Creates a new Secp256k1 context that can only be used for verification.
|
/// Creates a new Secp256k1 context that can only be used for verification.
|
||||||
///
|
///
|
||||||
/// If `rand-std` feature is enabled, context will have been randomized using `thread_rng`.
|
/// * If `rand-std` feature is enabled, context will have been randomized using `thread_rng`.
|
||||||
/// If `rand-std` feature is not enabled please consider randomizing the context (see docs
|
/// * If `rand-std` feature is not enabled please consider randomizing the context (see docs
|
||||||
/// for `Secp256k1::gen_new()`).
|
/// for `Secp256k1::gen_new()`).
|
||||||
pub fn verification_only() -> Secp256k1<VerifyOnly> { Secp256k1::gen_new() }
|
pub fn verification_only() -> Secp256k1<VerifyOnly> { Secp256k1::gen_new() }
|
||||||
}
|
}
|
||||||
|
@ -307,7 +307,7 @@ unsafe impl<'buf> Context for AllPreallocated<'buf> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'buf, C: Context + 'buf> Secp256k1<C> {
|
impl<'buf, C: Context + 'buf> Secp256k1<C> {
|
||||||
/// Lets you create a context with a preallocated buffer in a generic manner(sign/verify/all).
|
/// Lets you create a context with a preallocated buffer in a generic manner (sign/verify/all).
|
||||||
pub fn preallocated_gen_new(buf: &'buf mut [AlignedType]) -> Result<Secp256k1<C>, Error> {
|
pub fn preallocated_gen_new(buf: &'buf mut [AlignedType]) -> Result<Secp256k1<C>, Error> {
|
||||||
#[cfg(target_arch = "wasm32")]
|
#[cfg(target_arch = "wasm32")]
|
||||||
ffi::types::sanity_checks_for_wasm();
|
ffi::types::sanity_checks_for_wasm();
|
||||||
|
@ -329,7 +329,7 @@ impl<'buf, C: Context + 'buf> Secp256k1<C> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'buf> Secp256k1<AllPreallocated<'buf>> {
|
impl<'buf> Secp256k1<AllPreallocated<'buf>> {
|
||||||
/// Creates a new Secp256k1 context with all capabilities
|
/// Creates a new Secp256k1 context with all capabilities.
|
||||||
pub fn preallocated_new(
|
pub fn preallocated_new(
|
||||||
buf: &'buf mut [AlignedType],
|
buf: &'buf mut [AlignedType],
|
||||||
) -> Result<Secp256k1<AllPreallocated<'buf>>, Error> {
|
) -> Result<Secp256k1<AllPreallocated<'buf>>, Error> {
|
||||||
|
@ -338,7 +338,7 @@ impl<'buf> Secp256k1<AllPreallocated<'buf>> {
|
||||||
/// Uses the ffi `secp256k1_context_preallocated_size` to check the memory size needed for a context.
|
/// Uses the ffi `secp256k1_context_preallocated_size` to check the memory size needed for a context.
|
||||||
pub fn preallocate_size() -> usize { Self::preallocate_size_gen() }
|
pub fn preallocate_size() -> usize { Self::preallocate_size_gen() }
|
||||||
|
|
||||||
/// Create a context from a raw context.
|
/// Creates a context from a raw context.
|
||||||
///
|
///
|
||||||
/// # Safety
|
/// # Safety
|
||||||
/// This is highly unsafe, due to the number of conditions that aren't checked.
|
/// This is highly unsafe, due to the number of conditions that aren't checked.
|
||||||
|
@ -372,9 +372,10 @@ impl<'buf> Secp256k1<SignOnlyPreallocated<'buf>> {
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn preallocate_signing_size() -> usize { Self::preallocate_size_gen() }
|
pub fn preallocate_signing_size() -> usize { Self::preallocate_size_gen() }
|
||||||
|
|
||||||
/// Create a context from a raw context.
|
/// Creates a context from a raw context.
|
||||||
///
|
///
|
||||||
/// # Safety
|
/// # Safety
|
||||||
|
///
|
||||||
/// This is highly unsafe, due to the number of conditions that aren't checked.
|
/// This is highly unsafe, due to the number of conditions that aren't checked.
|
||||||
/// * `raw_ctx` needs to be a valid Secp256k1 context pointer.
|
/// * `raw_ctx` needs to be a valid Secp256k1 context pointer.
|
||||||
/// that was generated by *exactly* the same code/version of the libsecp256k1 used here.
|
/// that was generated by *exactly* the same code/version of the libsecp256k1 used here.
|
||||||
|
@ -406,9 +407,10 @@ impl<'buf> Secp256k1<VerifyOnlyPreallocated<'buf>> {
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn preallocate_verification_size() -> usize { Self::preallocate_size_gen() }
|
pub fn preallocate_verification_size() -> usize { Self::preallocate_size_gen() }
|
||||||
|
|
||||||
/// Create a context from a raw context.
|
/// Creates a context from a raw context.
|
||||||
///
|
///
|
||||||
/// # Safety
|
/// # Safety
|
||||||
|
///
|
||||||
/// This is highly unsafe, due to the number of conditions that aren't checked.
|
/// This is highly unsafe, due to the number of conditions that aren't checked.
|
||||||
/// * `raw_ctx` needs to be a valid Secp256k1 context pointer.
|
/// * `raw_ctx` needs to be a valid Secp256k1 context pointer.
|
||||||
/// that was generated by *exactly* the same code/version of the libsecp256k1 used here.
|
/// that was generated by *exactly* the same code/version of the libsecp256k1 used here.
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
//! Structs and functionality related to the ECDSA signature algorithm.
|
//! Structs and functionality related to the ECDSA signature algorithm.
|
||||||
|
//!
|
||||||
|
|
||||||
#[cfg(feature = "recovery")]
|
#[cfg(feature = "recovery")]
|
||||||
mod recovery;
|
mod recovery;
|
||||||
|
|
|
@ -1078,7 +1078,7 @@ impl CPtr for KeyPair {
|
||||||
fn as_mut_c_ptr(&mut self) -> *mut Self::Target { &mut self.0 }
|
fn as_mut_c_ptr(&mut self) -> *mut Self::Target { &mut self.0 }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// An x-only public key, used for verification of Schnorr signatures and serialized according to BIP-340.
|
/// An x-only public key, used for verification of schnorr signatures and serialized according to BIP-340.
|
||||||
///
|
///
|
||||||
/// # Serde support
|
/// # Serde support
|
||||||
///
|
///
|
||||||
|
@ -1165,7 +1165,7 @@ impl XOnlyPublicKey {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Creates a Schnorr public key directly from a slice.
|
/// Creates a schnorr public key directly from a slice.
|
||||||
///
|
///
|
||||||
/// # Errors
|
/// # Errors
|
||||||
///
|
///
|
||||||
|
@ -1472,7 +1472,7 @@ impl CPtr for XOnlyPublicKey {
|
||||||
fn as_mut_c_ptr(&mut self) -> *mut Self::Target { &mut self.0 }
|
fn as_mut_c_ptr(&mut self) -> *mut Self::Target { &mut self.0 }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Creates a new Schnorr public key from a FFI x-only public key.
|
/// Creates a new schnorr public key from a FFI x-only public key.
|
||||||
impl From<ffi::XOnlyPublicKey> for XOnlyPublicKey {
|
impl From<ffi::XOnlyPublicKey> for XOnlyPublicKey {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn from(pk: ffi::XOnlyPublicKey) -> XOnlyPublicKey { XOnlyPublicKey(pk) }
|
fn from(pk: ffi::XOnlyPublicKey) -> XOnlyPublicKey { XOnlyPublicKey(pk) }
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
//! points. The most common type of scalars are private keys. However not all scalars are private
|
//! points. The most common type of scalars are private keys. However not all scalars are private
|
||||||
//! keys. They can even be public *values*. To make handling them safer and easier this module
|
//! keys. They can even be public *values*. To make handling them safer and easier this module
|
||||||
//! provides the `Scalar` type and related.
|
//! provides the `Scalar` type and related.
|
||||||
|
//!
|
||||||
|
|
||||||
use core::fmt;
|
use core::fmt;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
//! # schnorrsig
|
//! Support for schnorr signatures.
|
||||||
//! Support for Schnorr signatures.
|
|
||||||
//!
|
//!
|
||||||
|
|
||||||
use core::{fmt, ptr, str};
|
use core::{fmt, ptr, str};
|
||||||
|
@ -15,7 +14,7 @@ use crate::{
|
||||||
constants, from_hex, impl_array_newtype, Error, Message, Secp256k1, Signing, Verification,
|
constants, from_hex, impl_array_newtype, Error, Message, Secp256k1, Signing, Verification,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Represents a Schnorr signature.
|
/// Represents a schnorr signature.
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
pub struct Signature([u8; constants::SCHNORR_SIGNATURE_SIZE]);
|
pub struct Signature([u8; constants::SCHNORR_SIGNATURE_SIZE]);
|
||||||
impl_array_newtype!(Signature, u8, constants::SCHNORR_SIGNATURE_SIZE);
|
impl_array_newtype!(Signature, u8, constants::SCHNORR_SIGNATURE_SIZE);
|
||||||
|
@ -74,7 +73,7 @@ impl str::FromStr for Signature {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Signature {
|
impl Signature {
|
||||||
/// Creates a Signature directly from a slice
|
/// Creates a `Signature` directly from a slice.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn from_slice(data: &[u8]) -> Result<Signature, Error> {
|
pub fn from_slice(data: &[u8]) -> Result<Signature, Error> {
|
||||||
match data.len() {
|
match data.len() {
|
||||||
|
@ -120,7 +119,7 @@ impl<C: Signing> Secp256k1<C> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create a schnorr signature internally using the ThreadRng random number
|
/// Creates a schnorr signature internally using the [`rand::rngs::ThreadRng`] random number
|
||||||
/// generator to generate the auxiliary random data.
|
/// generator to generate the auxiliary random data.
|
||||||
#[cfg(feature = "rand-std")]
|
#[cfg(feature = "rand-std")]
|
||||||
#[cfg_attr(docsrs, doc(cfg(feature = "rand-std")))]
|
#[cfg_attr(docsrs, doc(cfg(feature = "rand-std")))]
|
||||||
|
@ -128,12 +127,12 @@ impl<C: Signing> Secp256k1<C> {
|
||||||
self.sign_schnorr_with_rng(msg, keypair, &mut rand::thread_rng())
|
self.sign_schnorr_with_rng(msg, keypair, &mut rand::thread_rng())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create a schnorr signature without using any auxiliary random data.
|
/// Creates a schnorr signature without using any auxiliary random data.
|
||||||
pub fn sign_schnorr_no_aux_rand(&self, msg: &Message, keypair: &KeyPair) -> Signature {
|
pub fn sign_schnorr_no_aux_rand(&self, msg: &Message, keypair: &KeyPair) -> Signature {
|
||||||
self.sign_schnorr_helper(msg, keypair, ptr::null())
|
self.sign_schnorr_helper(msg, keypair, ptr::null())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create a Schnorr signature using the given auxiliary random data.
|
/// Creates a schnorr signature using the given auxiliary random data.
|
||||||
pub fn sign_schnorr_with_aux_rand(
|
pub fn sign_schnorr_with_aux_rand(
|
||||||
&self,
|
&self,
|
||||||
msg: &Message,
|
msg: &Message,
|
||||||
|
@ -143,7 +142,7 @@ impl<C: Signing> Secp256k1<C> {
|
||||||
self.sign_schnorr_helper(msg, keypair, aux_rand.as_c_ptr() as *const ffi::types::c_uchar)
|
self.sign_schnorr_helper(msg, keypair, aux_rand.as_c_ptr() as *const ffi::types::c_uchar)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create a schnorr signature using the given random number generator to
|
/// Creates a schnorr signature using the given random number generator to
|
||||||
/// generate the auxiliary random data.
|
/// generate the auxiliary random data.
|
||||||
#[cfg(feature = "rand")]
|
#[cfg(feature = "rand")]
|
||||||
#[cfg_attr(docsrs, doc(cfg(feature = "rand")))]
|
#[cfg_attr(docsrs, doc(cfg(feature = "rand")))]
|
||||||
|
@ -160,7 +159,7 @@ impl<C: Signing> Secp256k1<C> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<C: Verification> Secp256k1<C> {
|
impl<C: Verification> Secp256k1<C> {
|
||||||
/// Verify a Schnorr signature.
|
/// Verifies a schnorr signature.
|
||||||
pub fn verify_schnorr(
|
pub fn verify_schnorr(
|
||||||
&self,
|
&self,
|
||||||
sig: &Signature,
|
sig: &Signature,
|
||||||
|
|
Loading…
Reference in New Issue