Transaction Signing & Verification
Introduction
The Signature: Mathematical Proof of Authorization
Transaction Data + Secret Key → Signature
Transaction Data + Public Key + Signature → Valid/InvalidCreating a Signature
The High-Level Interface
// From src/libxrpl/protocol/SecretKey.cpp
Buffer sign(
PublicKey const& pk,
SecretKey const& sk,
Slice const& m)
{
// Automatically detect key type from public key
auto const type = publicKeyType(pk.slice());
switch (*type)
{
case KeyType::ed25519:
return signEd25519(pk, sk, m);
case KeyType::secp256k1:
return signSecp256k1(pk, sk, m);
}
}Ed25519 Signing: Simple and Fast
Secp256k1 Signing: More Complex
Verifying a Signature
The High-Level Interface
Ed25519 Verification
Secp256k1 Verification
Signature Malleability and Canonicality
The Problem: Signature Malleability
The Solution: Canonical Signatures
Checking Canonicality
Ed25519: No Malleability
Transaction Signing in Practice
Signing a Transaction
Verifying a Transaction
Multi-Signing
Performance Characteristics
Signing Speed
Verification Speed
Signature Size
Summary
Last updated

