/// import { JsonBuffer } from "../general"; export interface KeyLocator { keyFamily: number; keyIndex: number; } export interface KeyDescriptor { rawKeyBytes: Buffer | string | JsonBuffer; keyLoc?: KeyLocator; } export interface TxOut { value: number; pkScript: Buffer | string | JsonBuffer; } export interface SignDescriptor { keyDesc?: KeyDescriptor; singleTweak?: Buffer | string | JsonBuffer; doubleTweak?: Buffer | string | JsonBuffer; witnessScript?: Buffer | string | JsonBuffer; output?: TxOut; sighash?: number; inputIndex?: number; } export interface SignReq { rawTxBytes?: Buffer | string | JsonBuffer; signDescs?: SignDescriptor[]; } export interface SignResp { rawSigs: Array; } export interface InputScript { witness: Array; sigScript: Buffer | string | JsonBuffer; } export interface InputScriptResp { inputScripts: InputScript[]; } export interface SignMessageReq { msg: Buffer | string | JsonBuffer; keyLoc?: KeyLocator; doubleHash: boolean; compactSig: boolean; } export interface SignMessageResp { signature: Buffer | string | JsonBuffer; } export interface VerifyMessageReq { msg: Buffer | string | JsonBuffer; signature: Buffer | string | JsonBuffer; pubkey: Buffer | string | JsonBuffer; } export interface VerifyMessageResp { valid: boolean; } export interface SharedKeyRequest { ephemeralPubkey: Buffer | string | JsonBuffer; keyLoc?: KeyLocator; keyDesc?: KeyDescriptor; } export interface SharedKeyResponse { sharedKey: Buffer | string | JsonBuffer; } /** * LND Sign gRPC API Client */ export interface SignRpc { /** * signOutputRaw is a method that can be used to generated a signature for a * set of inputs/outputs to a transaction. Each request specifies details * concerning how the outputs should be signed, which keys they should be * signed with, and also any optional tweaks. The return value is a fixed * 64-byte signature (the same format as we use on the wire in Lightning). * If we are unable to sign using the specified keys, then an error will be * returned. */ signOutputRaw(args: SignReq): Promise; /** * computeInputScript generates a complete InputIndex for the passed * transaction with the signature as defined within the passed SignDescriptor. * This method should be capable of generating the proper input script for * both regular p2wkh output and p2wkh outputs nested within a regular p2sh * output. * Note that when using this method to sign inputs belonging to the wallet, * the only items of the SignDescriptor that need to be populated are pkScript * in the TxOut field, the value in that same field, and finally the input * index. */ computeInputScript(args: SignReq): Promise; /** * SignMessage signs a message with the key specified in the key locator. The * returned signature is fixed-size LN wire format encoded. * * The main difference to SignMessage in the main RPC is that a specific key is * used to sign the message instead of the node identity private key. */ signMessage(args: SignMessageReq): Promise; /** * VerifyMessage verifies a signature over a message using the public key * provided. The signature must be fixed-size LN wire format encoded. * * The main difference to VerifyMessage in the main RPC is that the public key * used to sign the message does not have to be a node known to the network. */ verifyMessage(args: VerifyMessageReq): Promise; /** * DeriveSharedKey returns a shared secret key by performing Diffie-Hellman key * derivation between the ephemeral public key in the request and the node's * key specified in the key_loc parameter (or the node's identity private key * if no key locator is specified): * P_shared = privKeyNode * ephemeralPubkey * The resulting shared public key is serialized in the compressed format and * hashed with sha256, resulting in the final key length of 256bit. */ deriveSharedKey(args: SharedKeyRequest): Promise; }