@aibtc/mcp-server 1.27.0 → 1.28.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/config/networks.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export const NETWORK = process.env.NETWORK === "
|
|
1
|
+
export const NETWORK = process.env.NETWORK === "testnet" ? "testnet" : "mainnet";
|
|
2
2
|
export const API_URL = process.env.API_URL || "https://x402.biwas.xyz";
|
|
3
3
|
export function getStacksNetwork(network) {
|
|
4
4
|
return network === "mainnet" ? "mainnet" : "testnet";
|
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
* - stacks_sign_message: Sign plain text messages with Stacks prefix
|
|
13
13
|
* - stacks_verify_message: Verify message signature and recover signer
|
|
14
14
|
*
|
|
15
|
-
* Bitcoin Message Signing (BIP-137):
|
|
16
|
-
* - btc_sign_message: Sign messages with Bitcoin private key (BIP-137
|
|
17
|
-
* - btc_verify_message: Verify Bitcoin message signatures
|
|
15
|
+
* Bitcoin Message Signing (BIP-137 / BIP-322):
|
|
16
|
+
* - btc_sign_message: Sign messages with Bitcoin private key (BIP-137 for legacy, BIP-322 for bc1q/bc1p)
|
|
17
|
+
* - btc_verify_message: Verify Bitcoin message signatures (auto-detects BIP-137 vs BIP-322)
|
|
18
18
|
*
|
|
19
19
|
* SIP-018 signatures can be verified both off-chain and on-chain by smart contracts.
|
|
20
20
|
* Stacks message signatures are SIWS-compatible for web authentication flows.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signing.tools.d.ts","sourceRoot":"","sources":["../../src/tools/signing.tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"signing.tools.d.ts","sourceRoot":"","sources":["../../src/tools/signing.tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAytBpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAw6B5D"}
|
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
* - stacks_sign_message: Sign plain text messages with Stacks prefix
|
|
13
13
|
* - stacks_verify_message: Verify message signature and recover signer
|
|
14
14
|
*
|
|
15
|
-
* Bitcoin Message Signing (BIP-137):
|
|
16
|
-
* - btc_sign_message: Sign messages with Bitcoin private key (BIP-137
|
|
17
|
-
* - btc_verify_message: Verify Bitcoin message signatures
|
|
15
|
+
* Bitcoin Message Signing (BIP-137 / BIP-322):
|
|
16
|
+
* - btc_sign_message: Sign messages with Bitcoin private key (BIP-137 for legacy, BIP-322 for bc1q/bc1p)
|
|
17
|
+
* - btc_verify_message: Verify Bitcoin message signatures (auto-detects BIP-137 vs BIP-322)
|
|
18
18
|
*
|
|
19
19
|
* SIP-018 signatures can be verified both off-chain and on-chain by smart contracts.
|
|
20
20
|
* Stacks message signatures are SIWS-compatible for web authentication flows.
|
|
@@ -26,6 +26,7 @@ import { hashMessage, verifyMessageSignatureRsv, hashSha256Sync } from "@stacks/
|
|
|
26
26
|
import { bytesToHex } from "@stacks/common";
|
|
27
27
|
import { secp256k1, schnorr } from "@noble/curves/secp256k1.js";
|
|
28
28
|
import { hex } from "@scure/base";
|
|
29
|
+
import { Transaction, p2wpkh, p2pkh, p2sh, p2tr, Script, SigHash, RawWitness, RawTx, Address, NETWORK as BTC_MAINNET, TEST_NETWORK as BTC_TESTNET, } from "@scure/btc-signer";
|
|
29
30
|
import { NETWORK } from "../config/networks.js";
|
|
30
31
|
import { createJsonResponse, createErrorResponse } from "../utils/index.js";
|
|
31
32
|
import { getWalletManager } from "../services/wallet-manager.js";
|
|
@@ -116,6 +117,323 @@ function formatBitcoinMessage(message) {
|
|
|
116
117
|
function doubleSha256(data) {
|
|
117
118
|
return hashSha256Sync(hashSha256Sync(data));
|
|
118
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* Concatenate multiple Uint8Arrays into one.
|
|
122
|
+
*/
|
|
123
|
+
function concatBytes(...arrays) {
|
|
124
|
+
const totalLen = arrays.reduce((sum, a) => sum + a.length, 0);
|
|
125
|
+
const result = new Uint8Array(totalLen);
|
|
126
|
+
let offset = 0;
|
|
127
|
+
for (const a of arrays) {
|
|
128
|
+
result.set(a, offset);
|
|
129
|
+
offset += a.length;
|
|
130
|
+
}
|
|
131
|
+
return result;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Write a 32-bit little-endian integer into a buffer.
|
|
135
|
+
*/
|
|
136
|
+
function writeUint32LE(n) {
|
|
137
|
+
const buf = new Uint8Array(4);
|
|
138
|
+
buf[0] = n & 0xff;
|
|
139
|
+
buf[1] = (n >> 8) & 0xff;
|
|
140
|
+
buf[2] = (n >> 16) & 0xff;
|
|
141
|
+
buf[3] = (n >> 24) & 0xff;
|
|
142
|
+
return buf;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Write a 64-bit little-endian BigInt into a buffer.
|
|
146
|
+
*/
|
|
147
|
+
function writeUint64LE(n) {
|
|
148
|
+
const buf = new Uint8Array(8);
|
|
149
|
+
let v = n;
|
|
150
|
+
for (let i = 0; i < 8; i++) {
|
|
151
|
+
buf[i] = Number(v & 0xffn);
|
|
152
|
+
v >>= 8n;
|
|
153
|
+
}
|
|
154
|
+
return buf;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Convert a DER-encoded ECDSA signature to compact (64-byte) format.
|
|
158
|
+
*
|
|
159
|
+
* Bitcoin witness stacks store ECDSA signatures in DER format with a hashtype byte appended.
|
|
160
|
+
* @noble/curves secp256k1.verify() requires compact (64-byte r||s) format in v2.
|
|
161
|
+
*
|
|
162
|
+
* DER format: 30 <total_len> 02 <r_len> [00?] <r_bytes> 02 <s_len> [00?] <s_bytes>
|
|
163
|
+
* The leading 0x00 is padding for high-bit integers (to keep the sign positive).
|
|
164
|
+
*/
|
|
165
|
+
function parseDERSignature(der) {
|
|
166
|
+
if (der[0] !== 0x30)
|
|
167
|
+
throw new Error("parseDERSignature: expected 0x30 header");
|
|
168
|
+
let pos = 2; // skip 0x30 and total length byte
|
|
169
|
+
if (der[pos] !== 0x02)
|
|
170
|
+
throw new Error("parseDERSignature: expected 0x02 for r");
|
|
171
|
+
pos++;
|
|
172
|
+
const rLen = der[pos++];
|
|
173
|
+
// Strip optional leading 0x00 padding byte (added when high bit is set)
|
|
174
|
+
const rBytes = der.slice(rLen === 33 ? pos + 1 : pos, pos + rLen);
|
|
175
|
+
pos += rLen;
|
|
176
|
+
if (der[pos] !== 0x02)
|
|
177
|
+
throw new Error("parseDERSignature: expected 0x02 for s");
|
|
178
|
+
pos++;
|
|
179
|
+
const sLen = der[pos++];
|
|
180
|
+
const sBytes = der.slice(sLen === 33 ? pos + 1 : pos, pos + sLen);
|
|
181
|
+
const compact = new Uint8Array(64);
|
|
182
|
+
compact.set(rBytes.slice(-32), 0); // r (last 32 bytes, in case rLen < 32)
|
|
183
|
+
compact.set(sBytes.slice(-32), 32); // s (last 32 bytes)
|
|
184
|
+
return compact;
|
|
185
|
+
}
|
|
186
|
+
// ---------------------------------------------------------------------------
|
|
187
|
+
// BIP-322 helper functions
|
|
188
|
+
// ---------------------------------------------------------------------------
|
|
189
|
+
/**
|
|
190
|
+
* BIP-322 tagged hash: SHA256(SHA256(tag) || SHA256(tag) || varint(msg.len) || msg)
|
|
191
|
+
* where tag = "BIP0322-signed-message"
|
|
192
|
+
*/
|
|
193
|
+
function bip322TaggedHash(message) {
|
|
194
|
+
const tagBytes = new TextEncoder().encode("BIP0322-signed-message");
|
|
195
|
+
const tagHash = hashSha256Sync(tagBytes);
|
|
196
|
+
const msgBytes = new TextEncoder().encode(message);
|
|
197
|
+
const varint = encodeVarInt(msgBytes.length);
|
|
198
|
+
const msgPart = concatBytes(varint, msgBytes);
|
|
199
|
+
return hashSha256Sync(concatBytes(tagHash, tagHash, msgPart));
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Build the BIP-322 to_spend virtual transaction and return its txid (32 bytes, LE).
|
|
203
|
+
*
|
|
204
|
+
* The to_spend tx is a virtual legacy transaction:
|
|
205
|
+
* - Input: txid=zero32, vout=0xFFFFFFFF, sequence=0, scriptSig = OP_0 push32 <msgHash>
|
|
206
|
+
* - Output: amount=0, script=scriptPubKey of the signing address
|
|
207
|
+
*
|
|
208
|
+
* The txid is computed as doubleSha256 of the legacy (non-segwit) serialization.
|
|
209
|
+
* The returned txid is already in the byte order used by transaction inputs (reversed).
|
|
210
|
+
*/
|
|
211
|
+
function bip322BuildToSpendTxId(message, scriptPubKey) {
|
|
212
|
+
const msgHash = bip322TaggedHash(message);
|
|
213
|
+
// scriptSig: OP_0 (0x00) push32 (0x20) <32-byte hash>
|
|
214
|
+
const scriptSig = concatBytes(new Uint8Array([0x00, 0x20]), msgHash);
|
|
215
|
+
const rawTx = RawTx.encode({
|
|
216
|
+
version: 0,
|
|
217
|
+
inputs: [
|
|
218
|
+
{
|
|
219
|
+
txid: new Uint8Array(32),
|
|
220
|
+
index: 0xffffffff,
|
|
221
|
+
finalScriptSig: scriptSig,
|
|
222
|
+
sequence: 0,
|
|
223
|
+
},
|
|
224
|
+
],
|
|
225
|
+
outputs: [
|
|
226
|
+
{
|
|
227
|
+
amount: 0n,
|
|
228
|
+
script: scriptPubKey,
|
|
229
|
+
},
|
|
230
|
+
],
|
|
231
|
+
lockTime: 0,
|
|
232
|
+
});
|
|
233
|
+
// txid is double-SHA256 of the serialized tx, returned in little-endian byte order
|
|
234
|
+
return doubleSha256(rawTx).reverse();
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* BIP-322 "simple" signing.
|
|
238
|
+
*
|
|
239
|
+
* Builds and signs the to_sign virtual transaction. The private key is used directly —
|
|
240
|
+
* @scure/btc-signer's Transaction.signIdx() auto-detects the address type from witnessUtxo.script
|
|
241
|
+
* and computes the correct sighash (BIP143 for P2WPKH, BIP341 for P2TR).
|
|
242
|
+
*
|
|
243
|
+
* @param message - Plain text message to sign
|
|
244
|
+
* @param privateKey - 32-byte private key (P2WPKH key for bc1q, Taproot key for bc1p)
|
|
245
|
+
* @param scriptPubKey - scriptPubKey of the signing address
|
|
246
|
+
* @param tapInternalKey - For P2TR: the UNTWEAKED x-only pubkey (32 bytes). Required for Taproot
|
|
247
|
+
* signing. Must be the internal key BEFORE TapTweak, NOT the tweaked key in the scriptPubKey.
|
|
248
|
+
* @returns Base64-encoded BIP-322 "simple" signature (serialized witness)
|
|
249
|
+
*/
|
|
250
|
+
function bip322Sign(message, privateKey, scriptPubKey, tapInternalKey) {
|
|
251
|
+
const toSpendTxid = bip322BuildToSpendTxId(message, scriptPubKey);
|
|
252
|
+
// allowUnknownOutputs: true is required for the OP_RETURN output in BIP-322 virtual transactions.
|
|
253
|
+
const toSignTx = new Transaction({ version: 0, lockTime: 0, allowUnknownOutputs: true });
|
|
254
|
+
toSignTx.addInput({
|
|
255
|
+
txid: toSpendTxid,
|
|
256
|
+
index: 0,
|
|
257
|
+
sequence: 0,
|
|
258
|
+
witnessUtxo: { amount: 0n, script: scriptPubKey },
|
|
259
|
+
...(tapInternalKey && { tapInternalKey }),
|
|
260
|
+
});
|
|
261
|
+
toSignTx.addOutput({ script: Script.encode(["RETURN"]), amount: 0n });
|
|
262
|
+
// signIdx auto-detects P2WPKH vs P2TR from witnessUtxo.script and applies correct sighash
|
|
263
|
+
toSignTx.signIdx(privateKey, 0);
|
|
264
|
+
toSignTx.finalizeIdx(0);
|
|
265
|
+
const input = toSignTx.getInput(0);
|
|
266
|
+
if (!input.finalScriptWitness) {
|
|
267
|
+
throw new Error("BIP-322 signing failed: no witness produced");
|
|
268
|
+
}
|
|
269
|
+
const encodedWitness = RawWitness.encode(input.finalScriptWitness);
|
|
270
|
+
return Buffer.from(encodedWitness).toString("base64");
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* BIP-322 "simple" verification for P2WPKH (bc1q/tb1q) addresses.
|
|
274
|
+
*
|
|
275
|
+
* Reconstructs the to_sign transaction, computes the BIP143 witness-v0 sighash,
|
|
276
|
+
* verifies the ECDSA signature, and checks the recovered address matches.
|
|
277
|
+
*/
|
|
278
|
+
function bip322VerifyP2WPKH(message, signatureBase64, address, btcNetwork) {
|
|
279
|
+
const sigBytes = new Uint8Array(Buffer.from(signatureBase64, "base64"));
|
|
280
|
+
const witnessItems = RawWitness.decode(sigBytes);
|
|
281
|
+
if (witnessItems.length !== 2) {
|
|
282
|
+
throw new Error(`P2WPKH BIP-322: expected 2 witness items, got ${witnessItems.length}`);
|
|
283
|
+
}
|
|
284
|
+
const ecdsaSigWithHashtype = witnessItems[0];
|
|
285
|
+
const pubkeyBytes = witnessItems[1];
|
|
286
|
+
if (pubkeyBytes.length !== 33) {
|
|
287
|
+
throw new Error(`P2WPKH BIP-322: expected 33-byte compressed pubkey, got ${pubkeyBytes.length}`);
|
|
288
|
+
}
|
|
289
|
+
// Derive scriptPubKey from witness pubkey (for building to_spend)
|
|
290
|
+
const scriptPubKey = p2wpkh(pubkeyBytes, btcNetwork).script;
|
|
291
|
+
// Build to_spend txid using the claimed address's scriptPubKey
|
|
292
|
+
const toSpendTxid = bip322BuildToSpendTxId(message, scriptPubKey);
|
|
293
|
+
// Build the (unsigned) to_sign transaction for sighash computation.
|
|
294
|
+
// allowUnknownOutputs: true is required for the OP_RETURN output in BIP-322 virtual transactions.
|
|
295
|
+
const toSignTx = new Transaction({ version: 0, lockTime: 0, allowUnknownOutputs: true });
|
|
296
|
+
toSignTx.addInput({
|
|
297
|
+
txid: toSpendTxid,
|
|
298
|
+
index: 0,
|
|
299
|
+
sequence: 0,
|
|
300
|
+
witnessUtxo: { amount: 0n, script: scriptPubKey },
|
|
301
|
+
});
|
|
302
|
+
toSignTx.addOutput({ script: Script.encode(["RETURN"]), amount: 0n });
|
|
303
|
+
// Compute BIP143 witness-v0 sighash.
|
|
304
|
+
// scriptCode for P2WPKH is the P2PKH script: OP_DUP OP_HASH160 <hash160(pubkey)> OP_EQUALVERIFY OP_CHECKSIG
|
|
305
|
+
const scriptCode = p2pkh(pubkeyBytes).script;
|
|
306
|
+
const sighash = toSignTx.preimageWitnessV0(0, scriptCode, SigHash.ALL, 0n);
|
|
307
|
+
// Strip hashtype byte from DER signature.
|
|
308
|
+
// @noble/curves secp256k1.verify() in v2 requires compact (64-byte) format, not DER.
|
|
309
|
+
const derSig = ecdsaSigWithHashtype.slice(0, -1);
|
|
310
|
+
const compactSig = parseDERSignature(derSig);
|
|
311
|
+
// Verify ECDSA signature
|
|
312
|
+
const sigValid = secp256k1.verify(compactSig, sighash, pubkeyBytes, { prehash: false });
|
|
313
|
+
if (!sigValid)
|
|
314
|
+
return false;
|
|
315
|
+
// Derive the Bitcoin address from the witness pubkey and compare to claimed address
|
|
316
|
+
const derivedAddress = p2wpkh(pubkeyBytes, btcNetwork).address;
|
|
317
|
+
return derivedAddress === address;
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* BIP-322 "simple" verification for P2TR (bc1p/tb1p) addresses.
|
|
321
|
+
*
|
|
322
|
+
* Reconstructs the to_sign transaction, computes the BIP341 tapscript sighash manually,
|
|
323
|
+
* verifies the Schnorr signature, and checks the pubkey matches the address.
|
|
324
|
+
*
|
|
325
|
+
* BIP341 key-path sighash for SIGHASH_DEFAULT (0x00):
|
|
326
|
+
* tagged_hash("TapSighash", 0x00 || sigMsg)
|
|
327
|
+
* where sigMsg encodes: epoch, hashType, version, locktime, hashPrevouts, hashAmounts,
|
|
328
|
+
* hashScriptPubkeys, hashSequences, hashOutputs, spend_type, input_index.
|
|
329
|
+
*/
|
|
330
|
+
function bip322VerifyP2TR(message, signatureBase64, address, btcNetwork) {
|
|
331
|
+
const sigBytes = new Uint8Array(Buffer.from(signatureBase64, "base64"));
|
|
332
|
+
const witnessItems = RawWitness.decode(sigBytes);
|
|
333
|
+
if (witnessItems.length !== 1) {
|
|
334
|
+
throw new Error(`P2TR BIP-322: expected 1 witness item, got ${witnessItems.length}`);
|
|
335
|
+
}
|
|
336
|
+
const schnorrSig = witnessItems[0];
|
|
337
|
+
if (schnorrSig.length !== 64) {
|
|
338
|
+
throw new Error(`P2TR BIP-322: expected 64-byte Schnorr sig, got ${schnorrSig.length}`);
|
|
339
|
+
}
|
|
340
|
+
// Extract the tweaked output key from the P2TR address.
|
|
341
|
+
// Address().decode() returns decoded.pubkey = the TWEAKED key embedded in the bech32 data.
|
|
342
|
+
// We must NOT call p2tr(decoded.pubkey, ...) — that would apply another TapTweak.
|
|
343
|
+
// Instead, build the scriptPubKey directly: OP_1 (0x51) OP_PUSH32 (0x20) <tweakedKey>
|
|
344
|
+
const decoded = Address(btcNetwork).decode(address);
|
|
345
|
+
if (decoded.type !== "tr") {
|
|
346
|
+
throw new Error(`P2TR BIP-322: address does not decode to P2TR type`);
|
|
347
|
+
}
|
|
348
|
+
const tweakedKey = decoded.pubkey;
|
|
349
|
+
const scriptPubKey = new Uint8Array([0x51, 0x20, ...tweakedKey]);
|
|
350
|
+
// Build to_spend txid
|
|
351
|
+
const toSpendTxid = bip322BuildToSpendTxId(message, scriptPubKey);
|
|
352
|
+
// Compute BIP341 sighash manually for SIGHASH_DEFAULT (0x00) key-path spending.
|
|
353
|
+
//
|
|
354
|
+
// From BIP341:
|
|
355
|
+
// sighash = tagged_hash("TapSighash", 0x00 || sigMsg)
|
|
356
|
+
// sigMsg = epoch(1) || hashType(1) || nVersion(4LE) || nLockTime(4LE)
|
|
357
|
+
// || hashPrevouts(32) || hashAmounts(32) || hashScriptPubkeys(32)
|
|
358
|
+
// || hashSequences(32) || hashOutputs(32)
|
|
359
|
+
// || spend_type(1) || input_index(4LE)
|
|
360
|
+
//
|
|
361
|
+
// to_sign values:
|
|
362
|
+
// version = 0, locktime = 0
|
|
363
|
+
// 1 input: txid=toSpendTxid, vout=0, sequence=0, amount=0n, scriptPubKey=p2tr_script
|
|
364
|
+
// 1 output: amount=0n, script=OP_RETURN (0x6a, 1 byte)
|
|
365
|
+
// hashPrevouts = SHA256(txid_wire_bytes || vout(4LE))
|
|
366
|
+
//
|
|
367
|
+
// @scure/btc-signer stores txid as-is but applies P.bytes(32, true) (reversing) when
|
|
368
|
+
// encoding TxHashIdx for the BIP341 sighash computation. This means the wire-format txid
|
|
369
|
+
// used in hashPrevouts is the reverse of what bip322BuildToSpendTxId returns.
|
|
370
|
+
// We must re-reverse to produce the same bytes that btc-signer uses when signing.
|
|
371
|
+
const txidForHashPrevouts = toSpendTxid.slice().reverse();
|
|
372
|
+
const prevouts = concatBytes(txidForHashPrevouts, writeUint32LE(0));
|
|
373
|
+
const hashPrevouts = hashSha256Sync(prevouts);
|
|
374
|
+
// hashAmounts = SHA256(amount_8LE) [amount = 0n for our virtual input]
|
|
375
|
+
const amounts = writeUint64LE(0n);
|
|
376
|
+
const hashAmounts = hashSha256Sync(amounts);
|
|
377
|
+
// hashScriptPubkeys = SHA256(varint(scriptPubKey.length) || scriptPubKey)
|
|
378
|
+
const scriptPubKeyWithLen = concatBytes(encodeVarInt(scriptPubKey.length), scriptPubKey);
|
|
379
|
+
const hashScriptPubkeys = hashSha256Sync(scriptPubKeyWithLen);
|
|
380
|
+
// hashSequences = SHA256(sequence_4LE) [sequence = 0]
|
|
381
|
+
const sequences = writeUint32LE(0);
|
|
382
|
+
const hashSequences = hashSha256Sync(sequences);
|
|
383
|
+
// hashOutputs = SHA256(amount_8LE || varint(script.length) || script)
|
|
384
|
+
// Output: amount=0n, script=Script.encode(['RETURN']) = 0x6a (1 byte)
|
|
385
|
+
const opReturnScript = Script.encode(["RETURN"]);
|
|
386
|
+
const outputBytes = concatBytes(writeUint64LE(0n), encodeVarInt(opReturnScript.length), opReturnScript);
|
|
387
|
+
const hashOutputs = hashSha256Sync(outputBytes);
|
|
388
|
+
// sigMsg assembly
|
|
389
|
+
const sigMsg = concatBytes(new Uint8Array([0x00]), // epoch
|
|
390
|
+
new Uint8Array([0x00]), // hashType = SIGHASH_DEFAULT
|
|
391
|
+
writeUint32LE(0), // nVersion = 0
|
|
392
|
+
writeUint32LE(0), // nLockTime = 0
|
|
393
|
+
hashPrevouts, // 32 bytes
|
|
394
|
+
hashAmounts, // 32 bytes
|
|
395
|
+
hashScriptPubkeys, // 32 bytes
|
|
396
|
+
hashSequences, // 32 bytes
|
|
397
|
+
hashOutputs, // 32 bytes
|
|
398
|
+
new Uint8Array([0x00]), // spend_type = 0 (key-path, no annex)
|
|
399
|
+
writeUint32LE(0) // input_index = 0
|
|
400
|
+
);
|
|
401
|
+
// tagged_hash("TapSighash", sigMsg) = SHA256(SHA256(tag) || SHA256(tag) || sigMsg)
|
|
402
|
+
const tagBytes = new TextEncoder().encode("TapSighash");
|
|
403
|
+
const tagHash = hashSha256Sync(tagBytes);
|
|
404
|
+
const sighash = hashSha256Sync(concatBytes(tagHash, tagHash, sigMsg));
|
|
405
|
+
// Schnorr verification uses the TWEAKED output key (the one in the scriptPubKey bytes)
|
|
406
|
+
return schnorr.verify(schnorrSig, sighash, tweakedKey);
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* BIP-322 "simple" verification — auto-detects P2WPKH vs P2TR from address prefix.
|
|
410
|
+
*
|
|
411
|
+
* @param message - Original plain text message
|
|
412
|
+
* @param signatureBase64 - Base64-encoded BIP-322 "simple" signature
|
|
413
|
+
* @param address - Bitcoin address that allegedly signed the message
|
|
414
|
+
* @param network - 'mainnet' or 'testnet'
|
|
415
|
+
* @returns true if signature is valid for the given address and message
|
|
416
|
+
*/
|
|
417
|
+
function bip322Verify(message, signatureBase64, address, network) {
|
|
418
|
+
const btcNetwork = network === "mainnet" ? BTC_MAINNET : BTC_TESTNET;
|
|
419
|
+
if (address.startsWith("bc1q") ||
|
|
420
|
+
address.startsWith("tb1q")) {
|
|
421
|
+
return bip322VerifyP2WPKH(message, signatureBase64, address, btcNetwork);
|
|
422
|
+
}
|
|
423
|
+
if (address.startsWith("bc1p") ||
|
|
424
|
+
address.startsWith("tb1p")) {
|
|
425
|
+
return bip322VerifyP2TR(message, signatureBase64, address, btcNetwork);
|
|
426
|
+
}
|
|
427
|
+
throw new Error(`bip322Verify: unsupported address type for BIP-322: ${address}`);
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Detect whether a decoded signature is BIP-137 or BIP-322.
|
|
431
|
+
* BIP-137: exactly 65 bytes, first byte in range 27-42.
|
|
432
|
+
* BIP-322: everything else (witness-serialized).
|
|
433
|
+
*/
|
|
434
|
+
function isBip137Signature(sigBytes) {
|
|
435
|
+
return sigBytes.length === 65 && sigBytes[0] >= 27 && sigBytes[0] <= 42;
|
|
436
|
+
}
|
|
119
437
|
/**
|
|
120
438
|
* Get Bitcoin address type from BIP-137 header byte
|
|
121
439
|
*/
|
|
@@ -593,108 +911,192 @@ export function registerSigningTools(server) {
|
|
|
593
911
|
return createErrorResponse(error);
|
|
594
912
|
}
|
|
595
913
|
});
|
|
596
|
-
// Sign Bitcoin message (BIP-137)
|
|
914
|
+
// Sign Bitcoin message (BIP-137 for legacy, BIP-322 for native SegWit and Taproot)
|
|
597
915
|
server.registerTool("btc_sign_message", {
|
|
598
|
-
description: "Sign a plain text message using
|
|
599
|
-
"
|
|
916
|
+
description: "Sign a plain text message using Bitcoin message signing. " +
|
|
917
|
+
"Automatically selects BIP-322 for native SegWit (bc1q) and Taproot (bc1p) addresses, " +
|
|
918
|
+
"and BIP-137 for legacy (1...) and wrapped SegWit (3...) addresses. " +
|
|
919
|
+
"Use addressType 'p2tr' to force signing with the Taproot key. " +
|
|
600
920
|
"Use cases: proving Bitcoin address ownership, authentication, off-chain verification. " +
|
|
601
921
|
"Requires an unlocked wallet with Bitcoin keys.",
|
|
602
922
|
inputSchema: {
|
|
603
923
|
message: z
|
|
604
924
|
.string()
|
|
605
|
-
.describe("The plain text message to sign.
|
|
925
|
+
.describe("The plain text message to sign."),
|
|
926
|
+
addressType: z
|
|
927
|
+
.enum(["p2wpkh", "p2tr"])
|
|
928
|
+
.optional()
|
|
929
|
+
.describe("Optional: address type to sign with. 'p2wpkh' uses native SegWit (bc1q, BIP-322), " +
|
|
930
|
+
"'p2tr' uses Taproot (bc1p, BIP-322). If omitted, auto-detects from wallet address type."),
|
|
606
931
|
},
|
|
607
|
-
}, async ({ message }) => {
|
|
932
|
+
}, async ({ message, addressType }) => {
|
|
608
933
|
try {
|
|
609
934
|
const account = requireUnlockedWallet();
|
|
610
|
-
|
|
611
|
-
|
|
935
|
+
const btcNetwork = NETWORK === "testnet" ? BTC_TESTNET : BTC_MAINNET;
|
|
936
|
+
// Determine signing mode from addressType param or auto-detect from btcAddress prefix
|
|
937
|
+
const useTaproot = addressType === "p2tr" ||
|
|
938
|
+
(account.btcAddress &&
|
|
939
|
+
(account.btcAddress.startsWith("bc1p") ||
|
|
940
|
+
account.btcAddress.startsWith("tb1p") ||
|
|
941
|
+
account.btcAddress.startsWith("bcrt1p")));
|
|
942
|
+
const isLegacyAddress = account.btcAddress &&
|
|
943
|
+
(account.btcAddress.startsWith("1") ||
|
|
944
|
+
account.btcAddress.startsWith("3") ||
|
|
945
|
+
account.btcAddress.startsWith("m") ||
|
|
946
|
+
account.btcAddress.startsWith("n") ||
|
|
947
|
+
account.btcAddress.startsWith("2"));
|
|
948
|
+
if (useTaproot) {
|
|
949
|
+
// BIP-322 with Taproot (P2TR) key
|
|
950
|
+
if (!account.taprootPrivateKey || !account.taprootPublicKey || !account.taprootAddress) {
|
|
951
|
+
throw new Error("Taproot keys not available. Ensure the wallet has Taproot key derivation.");
|
|
952
|
+
}
|
|
953
|
+
const xOnlyPubkey = account.taprootPublicKey;
|
|
954
|
+
const scriptPubKey = p2tr(xOnlyPubkey, undefined, btcNetwork).script;
|
|
955
|
+
// Pass xOnlyPubkey as tapInternalKey: signIdx requires the UNTWEAKED internal key,
|
|
956
|
+
// not the tweaked key embedded in the P2TR scriptPubKey bytes.
|
|
957
|
+
const signatureBase64 = bip322Sign(message, account.taprootPrivateKey, scriptPubKey, xOnlyPubkey);
|
|
958
|
+
return createJsonResponse({
|
|
959
|
+
success: true,
|
|
960
|
+
signatureBase64,
|
|
961
|
+
signatureFormat: "BIP-322 (witness-serialized, Taproot/P2TR)",
|
|
962
|
+
signer: account.taprootAddress,
|
|
963
|
+
network: NETWORK,
|
|
964
|
+
addressType: "P2TR (Taproot)",
|
|
965
|
+
message: {
|
|
966
|
+
original: message,
|
|
967
|
+
},
|
|
968
|
+
verificationNote: "Use btc_verify_message with the original message, signature, and address to verify. " +
|
|
969
|
+
"BIP-322 Taproot signatures contain a 64-byte Schnorr witness.",
|
|
970
|
+
});
|
|
612
971
|
}
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
972
|
+
else if (isLegacyAddress) {
|
|
973
|
+
// BIP-137 for legacy (P2PKH) and wrapped SegWit (P2SH-P2WPKH) addresses
|
|
974
|
+
if (!account.btcPrivateKey || !account.btcPublicKey) {
|
|
975
|
+
throw new Error("Bitcoin keys not available. Ensure the wallet has Bitcoin key derivation.");
|
|
976
|
+
}
|
|
977
|
+
const formattedMsg = formatBitcoinMessage(message);
|
|
978
|
+
const msgHash = doubleSha256(formattedMsg);
|
|
979
|
+
const sigWithRecovery = secp256k1.sign(msgHash, account.btcPrivateKey, {
|
|
980
|
+
prehash: false,
|
|
981
|
+
lowS: true,
|
|
982
|
+
format: "recovered",
|
|
983
|
+
});
|
|
984
|
+
const recoveryId = sigWithRecovery[0];
|
|
985
|
+
// Select BIP-137 header base by address type
|
|
986
|
+
let headerBase;
|
|
987
|
+
const addrPrefix = account.btcAddress.charAt(0);
|
|
988
|
+
if (addrPrefix === "1" || addrPrefix === "m" || addrPrefix === "n") {
|
|
989
|
+
headerBase = BIP137_HEADER_BASE.P2PKH_COMPRESSED;
|
|
990
|
+
}
|
|
991
|
+
else if (addrPrefix === "3" || addrPrefix === "2") {
|
|
992
|
+
headerBase = BIP137_HEADER_BASE.P2SH_P2WPKH;
|
|
993
|
+
}
|
|
994
|
+
else {
|
|
995
|
+
headerBase = BIP137_HEADER_BASE.P2WPKH;
|
|
996
|
+
}
|
|
997
|
+
const header = headerBase + recoveryId;
|
|
998
|
+
const rBytes = sigWithRecovery.slice(1, 33);
|
|
999
|
+
const sBytes = sigWithRecovery.slice(33, 65);
|
|
1000
|
+
const bip137Sig = new Uint8Array(65);
|
|
1001
|
+
bip137Sig[0] = header;
|
|
1002
|
+
bip137Sig.set(rBytes, 1);
|
|
1003
|
+
bip137Sig.set(sBytes, 33);
|
|
1004
|
+
const signatureHex = hex.encode(bip137Sig);
|
|
1005
|
+
const signatureBase64 = Buffer.from(bip137Sig).toString("base64");
|
|
1006
|
+
return createJsonResponse({
|
|
1007
|
+
success: true,
|
|
1008
|
+
signature: signatureHex,
|
|
1009
|
+
signatureBase64,
|
|
1010
|
+
signatureFormat: "BIP-137 (65 bytes: 1 header + 32 r + 32 s)",
|
|
1011
|
+
signer: account.btcAddress,
|
|
1012
|
+
network: NETWORK,
|
|
654
1013
|
addressType: getAddressTypeFromHeader(header),
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
1014
|
+
message: {
|
|
1015
|
+
original: message,
|
|
1016
|
+
prefix: BITCOIN_MSG_PREFIX,
|
|
1017
|
+
prefixHex: hex.encode(new TextEncoder().encode(BITCOIN_MSG_PREFIX)),
|
|
1018
|
+
formattedHex: hex.encode(formattedMsg),
|
|
1019
|
+
hash: hex.encode(msgHash),
|
|
1020
|
+
},
|
|
1021
|
+
header: {
|
|
1022
|
+
value: header,
|
|
1023
|
+
recoveryId,
|
|
1024
|
+
addressType: getAddressTypeFromHeader(header),
|
|
1025
|
+
},
|
|
1026
|
+
verificationNote: "Use btc_verify_message with the original message and signature to verify. " +
|
|
1027
|
+
"Base64 format is commonly used by wallets like Electrum and Bitcoin Core.",
|
|
1028
|
+
});
|
|
1029
|
+
}
|
|
1030
|
+
else {
|
|
1031
|
+
// BIP-322 for native SegWit P2WPKH (bc1q/tb1q) — the default path
|
|
1032
|
+
if (!account.btcPrivateKey || !account.btcPublicKey) {
|
|
1033
|
+
throw new Error("Bitcoin keys not available. Ensure the wallet has Bitcoin key derivation.");
|
|
1034
|
+
}
|
|
1035
|
+
const scriptPubKey = p2wpkh(account.btcPublicKey, btcNetwork).script;
|
|
1036
|
+
const signatureBase64 = bip322Sign(message, account.btcPrivateKey, scriptPubKey);
|
|
1037
|
+
return createJsonResponse({
|
|
1038
|
+
success: true,
|
|
1039
|
+
signatureBase64,
|
|
1040
|
+
signatureFormat: "BIP-322 (witness-serialized, native SegWit/P2WPKH)",
|
|
1041
|
+
signer: account.btcAddress,
|
|
1042
|
+
network: NETWORK,
|
|
1043
|
+
addressType: "P2WPKH (native SegWit)",
|
|
1044
|
+
message: {
|
|
1045
|
+
original: message,
|
|
1046
|
+
},
|
|
1047
|
+
verificationNote: "Use btc_verify_message with the original message, signature, and address to verify. " +
|
|
1048
|
+
"BIP-322 P2WPKH signatures contain a 2-item witness: ECDSA sig + compressed pubkey.",
|
|
1049
|
+
});
|
|
1050
|
+
}
|
|
659
1051
|
}
|
|
660
1052
|
catch (error) {
|
|
661
1053
|
return createErrorResponse(error);
|
|
662
1054
|
}
|
|
663
1055
|
});
|
|
664
|
-
// Verify Bitcoin message signature (BIP-137)
|
|
1056
|
+
// Verify Bitcoin message signature (BIP-137 or BIP-322)
|
|
665
1057
|
server.registerTool("btc_verify_message", {
|
|
666
|
-
description: "Verify a BIP-137
|
|
667
|
-
"
|
|
668
|
-
"
|
|
1058
|
+
description: "Verify a Bitcoin message signature (BIP-137 or BIP-322) and recover or confirm the signer. " +
|
|
1059
|
+
"Auto-detects BIP-137 (65-byte compact) vs BIP-322 (witness-serialized) format. " +
|
|
1060
|
+
"BIP-137 works for legacy addresses; BIP-322 is required for bc1q and bc1p addresses. " +
|
|
1061
|
+
"Takes the original message and signature (hex or base64). " +
|
|
1062
|
+
"Compatible with signatures from most Bitcoin wallets.",
|
|
669
1063
|
inputSchema: {
|
|
670
1064
|
message: z
|
|
671
1065
|
.string()
|
|
672
1066
|
.describe("The original plain text message that was signed."),
|
|
673
1067
|
signature: z
|
|
674
1068
|
.string()
|
|
675
|
-
.describe("The BIP-137
|
|
676
|
-
"
|
|
1069
|
+
.describe("The signature in hex or base64. BIP-137: 65 bytes (130 hex / 88 base64). " +
|
|
1070
|
+
"BIP-322: variable-length witness-serialized (base64)."),
|
|
1071
|
+
address: z
|
|
1072
|
+
.string()
|
|
1073
|
+
.optional()
|
|
1074
|
+
.describe("The Bitcoin address that allegedly signed the message. " +
|
|
1075
|
+
"Required for BIP-322 verification (bc1q for P2WPKH, bc1p for P2TR). " +
|
|
1076
|
+
"Also used for BIP-137 to confirm the recovered address matches."),
|
|
677
1077
|
expectedSigner: z
|
|
678
1078
|
.string()
|
|
679
1079
|
.optional()
|
|
680
|
-
.describe("Optional:
|
|
681
|
-
"If
|
|
1080
|
+
.describe("Optional: alias for address (backward compatibility). " +
|
|
1081
|
+
"If address is not provided, this is used instead."),
|
|
682
1082
|
},
|
|
683
|
-
}, async ({ message, signature, expectedSigner }) => {
|
|
1083
|
+
}, async ({ message, signature, address, expectedSigner }) => {
|
|
684
1084
|
try {
|
|
1085
|
+
// Use address param, fall back to expectedSigner for backward compat
|
|
1086
|
+
const signerAddress = address || expectedSigner;
|
|
685
1087
|
// Parse signature from hex or base64
|
|
686
1088
|
let signatureBytes;
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
//
|
|
1089
|
+
if (signature.length === 130 &&
|
|
1090
|
+
/^[0-9a-fA-F]+$/.test(signature)) {
|
|
1091
|
+
// 130 hex chars = 65 bytes — likely BIP-137
|
|
690
1092
|
signatureBytes = hex.decode(signature);
|
|
691
1093
|
}
|
|
692
|
-
else if (
|
|
693
|
-
// Base64
|
|
1094
|
+
else if (/^[A-Za-z0-9+/]+=*$/.test(signature)) {
|
|
1095
|
+
// Base64 (BIP-137 88-char or BIP-322 variable length)
|
|
694
1096
|
signatureBytes = new Uint8Array(Buffer.from(signature, "base64"));
|
|
695
1097
|
}
|
|
696
1098
|
else {
|
|
697
|
-
//
|
|
1099
|
+
// Attempt hex decode for arbitrary-length hex
|
|
698
1100
|
try {
|
|
699
1101
|
signatureBytes = hex.decode(signature);
|
|
700
1102
|
}
|
|
@@ -702,70 +1104,145 @@ export function registerSigningTools(server) {
|
|
|
702
1104
|
signatureBytes = new Uint8Array(Buffer.from(signature, "base64"));
|
|
703
1105
|
}
|
|
704
1106
|
}
|
|
705
|
-
|
|
706
|
-
|
|
1107
|
+
const btcNetwork = NETWORK === "testnet" ? BTC_TESTNET : BTC_MAINNET;
|
|
1108
|
+
// Detect signature format: BIP-137 (65 bytes, header 27-42) or BIP-322 (witness)
|
|
1109
|
+
if (isBip137Signature(signatureBytes)) {
|
|
1110
|
+
// ---------------------------------------------------------------
|
|
1111
|
+
// BIP-137 verification path
|
|
1112
|
+
// ---------------------------------------------------------------
|
|
1113
|
+
const header = signatureBytes[0];
|
|
1114
|
+
const rBytes = signatureBytes.slice(1, 33);
|
|
1115
|
+
const sBytes = signatureBytes.slice(33, 65);
|
|
1116
|
+
const recoveryId = getRecoveryIdFromHeader(header);
|
|
1117
|
+
const addressType = getAddressTypeFromHeader(header);
|
|
1118
|
+
const formattedMessage = formatBitcoinMessage(message);
|
|
1119
|
+
const messageHash = doubleSha256(formattedMessage);
|
|
1120
|
+
const r = BigInt("0x" + hex.encode(rBytes));
|
|
1121
|
+
const s = BigInt("0x" + hex.encode(sBytes));
|
|
1122
|
+
const sig = new secp256k1.Signature(r, s, recoveryId);
|
|
1123
|
+
const recoveredPoint = sig.recoverPublicKey(messageHash);
|
|
1124
|
+
const recoveredPubKey = recoveredPoint.toBytes(true); // compressed
|
|
1125
|
+
const isValidSig = secp256k1.verify(sig.toBytes(), messageHash, recoveredPubKey, { prehash: false });
|
|
1126
|
+
// Derive Bitcoin address from recovered public key based on header type
|
|
1127
|
+
let recoveredAddress;
|
|
1128
|
+
if (header >= 27 && header <= 34) {
|
|
1129
|
+
// P2PKH (uncompressed 27-30, compressed 31-34)
|
|
1130
|
+
recoveredAddress = p2pkh(recoveredPubKey, btcNetwork).address;
|
|
1131
|
+
}
|
|
1132
|
+
else if (header >= 35 && header <= 38) {
|
|
1133
|
+
// P2SH-P2WPKH (SegWit wrapped)
|
|
1134
|
+
recoveredAddress = p2sh(p2wpkh(recoveredPubKey, btcNetwork), btcNetwork).address;
|
|
1135
|
+
}
|
|
1136
|
+
else {
|
|
1137
|
+
// P2WPKH (native SegWit, headers 39-42)
|
|
1138
|
+
recoveredAddress = p2wpkh(recoveredPubKey, btcNetwork).address;
|
|
1139
|
+
}
|
|
1140
|
+
const signerMatches = signerAddress
|
|
1141
|
+
? recoveredAddress === signerAddress
|
|
1142
|
+
: undefined;
|
|
1143
|
+
const isFullyValid = isValidSig && (signerAddress ? signerMatches : true);
|
|
1144
|
+
return createJsonResponse({
|
|
1145
|
+
success: true,
|
|
1146
|
+
signatureFormat: "BIP-137",
|
|
1147
|
+
signatureValid: isValidSig,
|
|
1148
|
+
recoveredPublicKey: hex.encode(recoveredPubKey),
|
|
1149
|
+
recoveredAddress,
|
|
1150
|
+
network: NETWORK,
|
|
1151
|
+
message: {
|
|
1152
|
+
original: message,
|
|
1153
|
+
prefix: BITCOIN_MSG_PREFIX,
|
|
1154
|
+
hash: hex.encode(messageHash),
|
|
1155
|
+
},
|
|
1156
|
+
header: {
|
|
1157
|
+
value: header,
|
|
1158
|
+
recoveryId,
|
|
1159
|
+
addressType,
|
|
1160
|
+
},
|
|
1161
|
+
verification: signerAddress
|
|
1162
|
+
? {
|
|
1163
|
+
expectedSigner: signerAddress,
|
|
1164
|
+
signerMatches,
|
|
1165
|
+
isFullyValid,
|
|
1166
|
+
message: isFullyValid
|
|
1167
|
+
? "Signature is valid and matches expected signer"
|
|
1168
|
+
: isValidSig
|
|
1169
|
+
? "Signature is valid but does NOT match expected signer"
|
|
1170
|
+
: "Signature is invalid",
|
|
1171
|
+
}
|
|
1172
|
+
: undefined,
|
|
1173
|
+
note: "The recovered address is derived from the public key recovered from the signature. " +
|
|
1174
|
+
"BIP-137 signatures are compatible with most Bitcoin wallets (Electrum, Bitcoin Core, etc.).",
|
|
1175
|
+
});
|
|
707
1176
|
}
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
// Recover public key from signature
|
|
719
|
-
// Create signature object from r, s, and recovery
|
|
720
|
-
const r = BigInt("0x" + hex.encode(rBytes));
|
|
721
|
-
const s = BigInt("0x" + hex.encode(sBytes));
|
|
722
|
-
const sig = new secp256k1.Signature(r, s, recoveryId);
|
|
723
|
-
const recoveredPoint = sig.recoverPublicKey(messageHash);
|
|
724
|
-
const recoveredPubKey = recoveredPoint.toBytes(true); // compressed
|
|
725
|
-
// Verify the signature
|
|
726
|
-
const isValidSig = secp256k1.verify(sig.toBytes(), messageHash, recoveredPubKey, { prehash: false });
|
|
727
|
-
// Derive Bitcoin address from public key
|
|
728
|
-
// Import btc-signer for address derivation
|
|
729
|
-
const btc = await import("@scure/btc-signer");
|
|
730
|
-
const btcNetwork = NETWORK === "testnet" ? btc.TEST_NETWORK : btc.NETWORK;
|
|
731
|
-
const p2wpkh = btc.p2wpkh(recoveredPubKey, btcNetwork);
|
|
732
|
-
const recoveredAddress = p2wpkh.address;
|
|
733
|
-
// Check against expected signer if provided
|
|
734
|
-
const signerMatches = expectedSigner
|
|
735
|
-
? recoveredAddress === expectedSigner
|
|
736
|
-
: undefined;
|
|
737
|
-
const isFullyValid = isValidSig && (expectedSigner ? signerMatches : true);
|
|
738
|
-
return createJsonResponse({
|
|
739
|
-
success: true,
|
|
740
|
-
signatureValid: isValidSig,
|
|
741
|
-
recoveredPublicKey: hex.encode(recoveredPubKey),
|
|
742
|
-
recoveredAddress,
|
|
743
|
-
network: NETWORK,
|
|
744
|
-
message: {
|
|
745
|
-
original: message,
|
|
746
|
-
prefix: BITCOIN_MSG_PREFIX,
|
|
747
|
-
hash: hex.encode(messageHash),
|
|
748
|
-
},
|
|
749
|
-
header: {
|
|
750
|
-
value: header,
|
|
751
|
-
recoveryId,
|
|
752
|
-
addressType,
|
|
753
|
-
},
|
|
754
|
-
verification: expectedSigner
|
|
755
|
-
? {
|
|
756
|
-
expectedSigner,
|
|
757
|
-
signerMatches,
|
|
758
|
-
isFullyValid,
|
|
759
|
-
message: isFullyValid
|
|
760
|
-
? "Signature is valid and matches expected signer"
|
|
761
|
-
: isValidSig
|
|
762
|
-
? "Signature is valid but does NOT match expected signer"
|
|
763
|
-
: "Signature is invalid",
|
|
1177
|
+
else {
|
|
1178
|
+
// ---------------------------------------------------------------
|
|
1179
|
+
// BIP-322 verification path
|
|
1180
|
+
// ---------------------------------------------------------------
|
|
1181
|
+
const signatureBase64 = Buffer.from(signatureBytes).toString("base64");
|
|
1182
|
+
if (signerAddress) {
|
|
1183
|
+
// Verify against provided address
|
|
1184
|
+
let isValid;
|
|
1185
|
+
try {
|
|
1186
|
+
isValid = bip322Verify(message, signatureBase64, signerAddress, NETWORK);
|
|
764
1187
|
}
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
1188
|
+
catch {
|
|
1189
|
+
isValid = false;
|
|
1190
|
+
}
|
|
1191
|
+
return createJsonResponse({
|
|
1192
|
+
success: true,
|
|
1193
|
+
signatureFormat: "BIP-322",
|
|
1194
|
+
signatureValid: isValid,
|
|
1195
|
+
network: NETWORK,
|
|
1196
|
+
message: {
|
|
1197
|
+
original: message,
|
|
1198
|
+
},
|
|
1199
|
+
verification: {
|
|
1200
|
+
expectedSigner: signerAddress,
|
|
1201
|
+
signerMatches: isValid,
|
|
1202
|
+
isFullyValid: isValid,
|
|
1203
|
+
message: isValid
|
|
1204
|
+
? "BIP-322 signature is valid for the expected signer"
|
|
1205
|
+
: "BIP-322 signature is INVALID for the expected signer",
|
|
1206
|
+
},
|
|
1207
|
+
note: "BIP-322 'simple' format. Witness-serialized signature verified against address.",
|
|
1208
|
+
});
|
|
1209
|
+
}
|
|
1210
|
+
else {
|
|
1211
|
+
// Without address, attempt P2WPKH recovery from witness pubkey
|
|
1212
|
+
const witnessItems = RawWitness.decode(signatureBytes);
|
|
1213
|
+
if (witnessItems.length === 2 && witnessItems[1].length === 33) {
|
|
1214
|
+
// P2WPKH: [ecdsa_sig, compressed_pubkey]
|
|
1215
|
+
const pubkeyBytes = witnessItems[1];
|
|
1216
|
+
const recoveredAddress = p2wpkh(pubkeyBytes, btcNetwork).address;
|
|
1217
|
+
let isValid;
|
|
1218
|
+
try {
|
|
1219
|
+
isValid = bip322Verify(message, signatureBase64, recoveredAddress, NETWORK);
|
|
1220
|
+
}
|
|
1221
|
+
catch {
|
|
1222
|
+
isValid = false;
|
|
1223
|
+
}
|
|
1224
|
+
return createJsonResponse({
|
|
1225
|
+
success: true,
|
|
1226
|
+
signatureFormat: "BIP-322",
|
|
1227
|
+
signatureValid: isValid,
|
|
1228
|
+
recoveredAddress,
|
|
1229
|
+
network: NETWORK,
|
|
1230
|
+
message: {
|
|
1231
|
+
original: message,
|
|
1232
|
+
},
|
|
1233
|
+
note: "BIP-322 P2WPKH: address recovered from witness pubkey. " +
|
|
1234
|
+
"Provide 'address' parameter to verify against a specific address.",
|
|
1235
|
+
});
|
|
1236
|
+
}
|
|
1237
|
+
else if (witnessItems.length === 1 && witnessItems[0].length === 64) {
|
|
1238
|
+
throw new Error("BIP-322 P2TR signatures require the 'address' parameter to verify (no key recovery for Taproot).");
|
|
1239
|
+
}
|
|
1240
|
+
else {
|
|
1241
|
+
throw new Error(`BIP-322: unexpected witness structure (${witnessItems.length} items). ` +
|
|
1242
|
+
"Provide the 'address' parameter to verify.");
|
|
1243
|
+
}
|
|
1244
|
+
}
|
|
1245
|
+
}
|
|
769
1246
|
}
|
|
770
1247
|
catch (error) {
|
|
771
1248
|
return createErrorResponse(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signing.tools.js","sourceRoot":"","sources":["../../src/tools/signing.tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"signing.tools.js","sourceRoot":"","sources":["../../src/tools/signing.tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aibtc/mcp-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.28.1",
|
|
4
4
|
"description": "Bitcoin-native MCP server for AI agents: BTC/STX wallets, DeFi yield, sBTC peg, NFTs, and x402 payments.",
|
|
5
5
|
"mcpName": "io.github.aibtcdev/mcp-server",
|
|
6
6
|
"type": "module",
|
package/skill/SKILL.md
CHANGED
|
@@ -4,7 +4,7 @@ description: Bitcoin L1 wallet for agents - check balances, send BTC, manage UTX
|
|
|
4
4
|
license: MIT
|
|
5
5
|
metadata:
|
|
6
6
|
author: aibtcdev
|
|
7
|
-
version: 1.
|
|
7
|
+
version: 1.28.1 # x-release-please-version
|
|
8
8
|
npm: "@aibtc/mcp-server"
|
|
9
9
|
github: https://github.com/aibtcdev/aibtc-mcp-server
|
|
10
10
|
---
|