lightningdevkit
Version:
Lightning Development Kit
149 lines (148 loc) • 7.49 kB
text/typescript
import { Recipient } from '../enums/Recipient.mjs';
import { UnsignedBolt12Invoice } from '../structs/UnsignedBolt12Invoice.mjs';
import { Result_SchnorrSignatureNoneZ } from '../structs/Result_SchnorrSignatureNoneZ.mjs';
import { Result_ThirtyTwoBytesNoneZ } from '../structs/Result_ThirtyTwoBytesNoneZ.mjs';
import { Result_PublicKeyNoneZ } from '../structs/Result_PublicKeyNoneZ.mjs';
import { Option_BigEndianScalarZ } from '../structs/Option_BigEndianScalarZ.mjs';
import { Result_RecoverableSignatureNoneZ } from '../structs/Result_RecoverableSignatureNoneZ.mjs';
import { Result_ECDSASignatureNoneZ } from '../structs/Result_ECDSASignatureNoneZ.mjs';
import { ExpandedKey } from '../structs/ExpandedKey.mjs';
import { RawBolt11Invoice } from '../structs/RawBolt11Invoice.mjs';
import { UnsignedGossipMessage } from '../structs/UnsignedGossipMessage.mjs';
import { CommonBase } from './CommonBase.mjs';
/** An implementation of NodeSigner */
export interface NodeSignerInterface {
/**Get the [`ExpandedKey`] for use in encrypting and decrypting inbound payment data.
*
* If the implementor of this trait supports [phantom node payments], then every node that is
* intended to be included in the phantom invoice route hints must return the same value from
* this method.
*
* This method must return the same value each time it is called.
*
* [phantom node payments]: PhantomKeysManager
*/
get_inbound_payment_key(): ExpandedKey;
/**Get node id based on the provided [`Recipient`].
*
* This method must return the same value each time it is called with a given [`Recipient`]
* parameter.
*
* Errors if the [`Recipient`] variant is not supported by the implementation.
*/
get_node_id(recipient: Recipient): Result_PublicKeyNoneZ;
/**Gets the ECDH shared secret of our node secret and `other_key`, multiplying by `tweak` if
* one is provided. Note that this tweak can be applied to `other_key` instead of our node
* secret, though this is less efficient.
*
* Note that if this fails while attempting to forward an HTLC, LDK will panic. The error
* should be resolved to allow LDK to resume forwarding HTLCs.
*
* Errors if the [`Recipient`] variant is not supported by the implementation.
*/
ecdh(recipient: Recipient, other_key: Uint8Array, tweak: Option_BigEndianScalarZ): Result_ThirtyTwoBytesNoneZ;
/**Sign an invoice.
*
* By parameterizing by the raw invoice bytes instead of the hash, we allow implementors of
* this trait to parse the invoice and make sure they're signing what they expect, rather than
* blindly signing the hash.
*
* The `hrp_bytes` are ASCII bytes, while the `invoice_data` is base32.
*
* The secret key used to sign the invoice is dependent on the [`Recipient`].
*
* Errors if the [`Recipient`] variant is not supported by the implementation.
*/
sign_invoice(invoice: RawBolt11Invoice, recipient: Recipient): Result_RecoverableSignatureNoneZ;
/**Signs the [`TaggedHash`] of a BOLT 12 invoice.
*
* Implementors may check that the `invoice` is expected rather than blindly signing the tagged
* hash. An `Ok` result should sign `invoice.tagged_hash().as_digest()` with the node's signing
* key or an ephemeral key to preserve privacy, whichever is associated with
* [`UnsignedBolt12Invoice::signing_pubkey`].
*
* [`TaggedHash`]: crate::offers::merkle::TaggedHash
*/
sign_bolt12_invoice(invoice: UnsignedBolt12Invoice): Result_SchnorrSignatureNoneZ;
/**Sign a gossip message.
*
* Note that if this fails, LDK may panic and the message will not be broadcast to the network
* or a possible channel counterparty. If LDK panics, the error should be resolved to allow the
* message to be broadcast, as otherwise it may prevent one from receiving funds over the
* corresponding channel.
*/
sign_gossip_message(msg: UnsignedGossipMessage): Result_ECDSASignatureNoneZ;
}
/**
* A trait that can handle cryptographic operations at the scope level of a node.
*/
export declare class NodeSigner extends CommonBase {
/** Creates a new instance of NodeSigner from a given implementation */
static new_impl(arg: NodeSignerInterface): NodeSigner;
/**
* Get the [`ExpandedKey`] for use in encrypting and decrypting inbound payment data.
*
* If the implementor of this trait supports [phantom node payments], then every node that is
* intended to be included in the phantom invoice route hints must return the same value from
* this method.
*
* This method must return the same value each time it is called.
*
* [phantom node payments]: PhantomKeysManager
*/
get_inbound_payment_key(): ExpandedKey;
/**
* Get node id based on the provided [`Recipient`].
*
* This method must return the same value each time it is called with a given [`Recipient`]
* parameter.
*
* Errors if the [`Recipient`] variant is not supported by the implementation.
*/
get_node_id(recipient: Recipient): Result_PublicKeyNoneZ;
/**
* Gets the ECDH shared secret of our node secret and `other_key`, multiplying by `tweak` if
* one is provided. Note that this tweak can be applied to `other_key` instead of our node
* secret, though this is less efficient.
*
* Note that if this fails while attempting to forward an HTLC, LDK will panic. The error
* should be resolved to allow LDK to resume forwarding HTLCs.
*
* Errors if the [`Recipient`] variant is not supported by the implementation.
*/
ecdh(recipient: Recipient, other_key: Uint8Array, tweak: Option_BigEndianScalarZ): Result_ThirtyTwoBytesNoneZ;
/**
* Sign an invoice.
*
* By parameterizing by the raw invoice bytes instead of the hash, we allow implementors of
* this trait to parse the invoice and make sure they're signing what they expect, rather than
* blindly signing the hash.
*
* The `hrp_bytes` are ASCII bytes, while the `invoice_data` is base32.
*
* The secret key used to sign the invoice is dependent on the [`Recipient`].
*
* Errors if the [`Recipient`] variant is not supported by the implementation.
*/
sign_invoice(invoice: RawBolt11Invoice, recipient: Recipient): Result_RecoverableSignatureNoneZ;
/**
* Signs the [`TaggedHash`] of a BOLT 12 invoice.
*
* Implementors may check that the `invoice` is expected rather than blindly signing the tagged
* hash. An `Ok` result should sign `invoice.tagged_hash().as_digest()` with the node's signing
* key or an ephemeral key to preserve privacy, whichever is associated with
* [`UnsignedBolt12Invoice::signing_pubkey`].
*
* [`TaggedHash`]: crate::offers::merkle::TaggedHash
*/
sign_bolt12_invoice(invoice: UnsignedBolt12Invoice): Result_SchnorrSignatureNoneZ;
/**
* Sign a gossip message.
*
* Note that if this fails, LDK may panic and the message will not be broadcast to the network
* or a possible channel counterparty. If LDK panics, the error should be resolved to allow the
* message to be broadcast, as otherwise it may prevent one from receiving funds over the
* corresponding channel.
*/
sign_gossip_message(msg: UnsignedGossipMessage): Result_ECDSASignatureNoneZ;
}