1#include <xrpl/protocol/Sign.h>
3#include <xrpl/beast/utility/instrumentation.h>
4#include <xrpl/protocol/AccountID.h>
5#include <xrpl/protocol/Feature.h>
6#include <xrpl/protocol/HashPrefix.h>
7#include <xrpl/protocol/KeyType.h>
8#include <xrpl/protocol/PublicKey.h>
9#include <xrpl/protocol/Rules.h>
10#include <xrpl/protocol/SField.h>
11#include <xrpl/protocol/STExchange.h>
12#include <xrpl/protocol/STObject.h>
13#include <xrpl/protocol/SecretKey.h>
14#include <xrpl/protocol/Serializer.h>
28 return &sfCounterpartySignature;
30 return &sfSponsorSignature;
32 UNREACHABLE(
"xrpl::signatureField : unknown SignatureRole");
39 if (sigField == sfCounterpartySignature)
41 if (sigField == sfSponsorSignature)
58 if (!rules.
enabled(fixCleanup3_4_0))
71 UNREACHABLE(
"xrpl::signingPrefix : unknown SignatureRole");
81 SF_VL const& sigField)
92 auto const sig =
get(st, sigField);
Rules controlling protocol behavior.
bool enabled(UInt256 const &feature) const
Returns true if a feature is enabled.
void addWithoutSigningFields(Serializer &s) const
Slice slice() const noexcept
std::size_t size() const noexcept
void const * data() const noexcept
An immutable linear range of bytes.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
bool set(T &target, std::string const &name, Section const §ion)
Set a value from a configuration Section If the named value is not found or doesn't parse as a T,...
Serializer startMultiSigningData(STObject const &obj, HashPrefix prefix)
Break the multi-signing hash computation into 2 parts for optimization.
std::optional< SignatureRole > signatureRole(SField const &sigField)
The role that signs into the given field.
HashPrefix signingPrefix(SignatureRole role, bool multiSigning, Rules const &rules)
The hash prefix that binds a transaction signature to the role that made it.
T get(Section const §ion, std::string const &name, T const &defaultValue=T{})
Retrieve a key/value pair from a section.
bool verify(PublicKey const &publicKey, Slice const &m, Slice const &sig) noexcept
Verify a signature on a message.
SField const * signatureField(SignatureRole role)
The field that holds this role's signature.
void finishMultiSigningData(AccountID const &signingID, Serializer &s)
SignatureRole
The signature slots on a transaction.
@ Transaction
The transaction's own signature, in sfTxnSignature or sfSigners.
@ Sponsor
The sponsor's signature, in sfSponsorSignature.
@ Counterparty
The counterparty's signature, in sfCounterpartySignature.
TypedField< STBlob > SF_VL
BaseUInt< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
HashPrefix
Prefix for hashing functions.
@ CounterpartyTxMultiSign
inner transaction to multi-sign as the counterparty
@ TxSign
inner transaction to sign
@ SponsorTxSign
inner transaction to sign as the sponsor
@ TxMultiSign
inner transaction to multi-sign
@ CounterpartyTxSign
inner transaction to sign as the counterparty
@ SponsorTxMultiSign
inner transaction to multi-sign as the sponsor
Buffer sign(PublicKey const &pk, SecretKey const &sk, Slice const &message)
Generate a signature for a message.
Serializer buildMultiSigningData(STObject const &obj, AccountID const &signingID, HashPrefix prefix)
Return a Serializer suitable for computing a multisigning TxnSignature.