pub trait Api<const N: usize>: Support<bool> + Send {
const PRIVATE: Layout;
const PUBLIC: Layout;
const WRAPPED: usize;
// Required methods
fn generate(private: &mut [u8]) -> Result<(), Error>;
fn public(private: &[u8], public: &mut [u8]) -> Result<(), Error>;
fn sign(
private: &[u8],
digest: &[u8; N],
r: &mut [u8; N],
s: &mut [u8; N],
) -> Result<(), Error>;
fn verify(
public: &[u8],
digest: &[u8; N],
r: &[u8; N],
s: &[u8; N],
) -> Result<bool, Error>;
fn drop_private(private: &mut [u8]) -> Result<(), Error>;
fn export_private(private: &[u8], wrapped: &mut [u8]) -> Result<(), Error>;
fn import_private(wrapped: &[u8], private: &mut [u8]) -> Result<(), Error>;
fn export_public(
public: &[u8],
x: &mut [u8; N],
y: &mut [u8; N],
) -> Result<(), Error>;
fn import_public(
x: &[u8; N],
y: &[u8; N],
public: &mut [u8],
) -> Result<(), Error>;
}
internal-api-crypto
and internal-api-crypto-ecdsa
only.Expand description
ECDSA interface.
Required Associated Constants§
Sourceconst PRIVATE: Layout
const PRIVATE: Layout
Layout of a private key.
This may use more than N
bytes in case blinding or checksum are used. This may also
require stricter alignment than one byte.
Required Methods§
Sourcefn public(private: &[u8], public: &mut [u8]) -> Result<(), Error>
fn public(private: &[u8], public: &mut [u8]) -> Result<(), Error>
Returns the public key of a private key.
Sourcefn sign(
private: &[u8],
digest: &[u8; N],
r: &mut [u8; N],
s: &mut [u8; N],
) -> Result<(), Error>
fn sign( private: &[u8], digest: &[u8; N], r: &mut [u8; N], s: &mut [u8; N], ) -> Result<(), Error>
Signs a digest.
The signature components r
and s
are in big-endian.
Sourcefn verify(
public: &[u8],
digest: &[u8; N],
r: &[u8; N],
s: &[u8; N],
) -> Result<bool, Error>
fn verify( public: &[u8], digest: &[u8; N], r: &[u8; N], s: &[u8; N], ) -> Result<bool, Error>
Verifies a signature.
The signature components r
and s
are in big-endian.
Sourcefn drop_private(private: &mut [u8]) -> Result<(), Error>
fn drop_private(private: &mut [u8]) -> Result<(), Error>
Drops a private key.
This may zeroize the storage for example. Implementations should not rely on this for memory leaks. This is only security relevant.
Sourcefn export_private(private: &[u8], wrapped: &mut [u8]) -> Result<(), Error>
fn export_private(private: &[u8], wrapped: &mut [u8]) -> Result<(), Error>
Exports a private key.
The wrapped key must be Self::WRAPPED
bytes long. Users cannot assume that the wrapped key
is the scalar representing the private key.
Sourcefn import_private(wrapped: &[u8], private: &mut [u8]) -> Result<(), Error>
fn import_private(wrapped: &[u8], private: &mut [u8]) -> Result<(), Error>
Imports a private key.
The wrapped key must be Self::WRAPPED
bytes long.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.