@1sat/templates 0.0.4 → 0.0.5

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.
@@ -1,92 +1,70 @@
1
- import { type LockingScript, type PrivateKey, type PublicKey, Script, type ScriptTemplate, type Transaction, type UnlockingScript } from '@bsv/sdk';
1
+ import { type LockingScript, type PrivateKey, type PublicKey, Script, type ScriptTemplate, Transaction, type UnlockingScript } from '@bsv/sdk';
2
2
  import { type BitComDecoded } from './bitcom.js';
3
- /**
4
- * SIGMA protocol identifier
5
- */
6
3
  export declare const SIGMA_PREFIX = "SIGMA";
7
- /**
8
- * Signing algorithm for SIGMA signatures
9
- */
4
+ export declare const sigmaHex = "5349474d41";
10
5
  export declare enum SigmaAlgorithm {
11
6
  BSM = "BSM",
12
7
  BRC77 = "BRC77"
13
8
  }
14
- /**
15
- * SIGMA signature data structure
16
- */
17
9
  export interface SigmaData {
18
- /** BitCom protocol index */
19
10
  bitcomIndex?: number;
20
- /** Signing algorithm (BSM or BRC77) */
21
11
  algorithm: SigmaAlgorithm;
22
- /** Bitcoin address of signer */
23
12
  address: string;
24
- /** Cryptographic signature as number array */
25
13
  signature: number[];
26
- /** Input index (vin) that anchors the signature */
27
14
  vin: number;
28
- /** Whether signature verification passed */
15
+ targetVout?: number;
29
16
  valid?: boolean;
30
17
  }
31
- /**
32
- * Options for SIGMA signature creation
33
- */
18
+ export type Sig = {
19
+ address: string;
20
+ signature: string;
21
+ algorithm: SigmaAlgorithm;
22
+ vin: number;
23
+ targetVout: number;
24
+ };
25
+ export interface SignResponse extends Sig {
26
+ sigmaScript: Script;
27
+ signedTx: Transaction;
28
+ }
34
29
  export interface SigmaOptions {
35
- /** Signing algorithm (default: BSM) */
36
30
  algorithm?: SigmaAlgorithm;
37
- /** Input index to anchor signature (default: 0) */
38
31
  vin?: number;
39
- /** For BRC-77: specific verifier public key (private signature) */
40
32
  verifier?: PublicKey;
41
33
  }
42
34
  /**
43
- * SIGMA (Secure Identity for Global Message Authentication) implementation
35
+ * SIGMA (Secure Identity for Global Message Authentication)
44
36
  *
45
- * SIGMA enables cryptographic signing of blockchain content by combining:
46
- * - Input hash: SHA256 of the outpoint (txid + vout) from a specific input
47
- * - Data hash: SHA256 of the script data before the SIGMA protocol marker
37
+ * Combines an input hash (SHA256 of an outpoint) with a data hash (SHA256 of
38
+ * script data before the SIGMA marker) to produce a message signed with BSM
39
+ * or BRC-77. Supports multiple signatures per output and both algorithms.
48
40
  *
49
- * Supports both BSM (Bitcoin Signed Message) and BRC-77 signing algorithms.
41
+ * Follows the same pattern as AIP: one data shape, static factories for
42
+ * transaction operations, instance methods for ScriptTemplate integration.
50
43
  */
51
44
  export default class Sigma implements ScriptTemplate {
52
- readonly data: SigmaData;
45
+ data: SigmaData;
53
46
  constructor(data: SigmaData);
54
- /**
55
- * Extract SIGMA signatures from BitCom transaction
56
- */
47
+ static computeInputHash(txidOrTx: string | Transaction, voutOrVin: number, sourceOutputIndex?: number): number[];
48
+ static computeDataHash(script: Script, sigmaInstance?: number): number[];
49
+ static computeMessageHash(inputHash: number[], dataHash: number[]): number[];
50
+ static parseFromScript(script: Script, targetVout?: number): Sig[];
51
+ static countInstances(script: Script): number;
52
+ static findPosition(script: Script, instanceIndex: number): number;
53
+ static signTransaction(tx: Transaction, privateKey: PrivateKey, options?: {
54
+ targetVout?: number;
55
+ sigmaInstance?: number;
56
+ refVin?: number;
57
+ algorithm?: SigmaAlgorithm;
58
+ verifier?: PublicKey;
59
+ }): SignResponse;
60
+ static verifyTransaction(tx: Transaction, targetVout?: number, sigmaInstance?: number, recipientPrivateKey?: PrivateKey): boolean;
61
+ private static applyToTransaction;
57
62
  static decode(bitcom: BitComDecoded): Sigma[];
58
- /**
59
- * Decode SIGMA signatures directly from a Script
60
- */
61
63
  static decodeFromScript(script: Script | LockingScript): Sigma[];
62
- /**
63
- * Create SIGMA signature for data
64
- *
65
- * @param inputHash - SHA256 hash of the input outpoint
66
- * @param dataHash - SHA256 hash of the script data
67
- * @param privateKey - Private key for signing
68
- * @param options - Additional signing options
69
- */
70
- static sign(inputHash: number[], dataHash: number[], privateKey: PrivateKey, options?: SigmaOptions): Sigma;
71
- /**
72
- * Verify SIGMA signature against provided hashes
73
- *
74
- * @param inputHash - SHA256 hash of the input outpoint
75
- * @param dataHash - SHA256 hash of the script data
76
- * @param recipientPrivateKey - For BRC-77 private signatures, the recipient's key
77
- */
78
- verifyWithHashes(inputHash: number[], dataHash: number[], recipientPrivateKey?: PrivateKey): boolean;
79
- /**
80
- * Check if signature was previously verified
81
- */
64
+ static createSignature(inputHash: number[], dataHash: number[], privateKey: PrivateKey, options?: SigmaOptions): Sigma;
82
65
  verify(): boolean;
83
- /**
84
- * Generate locking script for SIGMA within BitCom
85
- */
66
+ verifyWithHashes(inputHash: number[], dataHash: number[], recipientPrivateKey?: PrivateKey): boolean;
86
67
  lock(): LockingScript;
87
- /**
88
- * Unlock method is not available for SIGMA scripts
89
- */
90
68
  unlock(): {
91
69
  sign: (tx: Transaction, inputIndex: number) => Promise<UnlockingScript>;
92
70
  estimateLength: () => Promise<number>;
@@ -1 +1 @@
1
- {"version":3,"file":"sigma.d.ts","sourceRoot":"","sources":["../../src/bitcom/sigma.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,MAAM,EACN,KAAK,cAAc,EAGnB,KAAK,WAAW,EAChB,KAAK,eAAe,EAEpB,MAAM,UAAU,CAAA;AACjB,OAAe,EAAiB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAEvE;;GAEG;AACH,eAAO,MAAM,YAAY,UAAU,CAAA;AAEnC;;GAEG;AACH,oBAAY,cAAc;IACzB,GAAG,QAAQ;IACX,KAAK,UAAU;CACf;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACzB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,uCAAuC;IACvC,SAAS,EAAE,cAAc,CAAA;IACzB,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,8CAA8C;IAC9C,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,mDAAmD;IACnD,GAAG,EAAE,MAAM,CAAA;IACX,4CAA4C;IAC5C,KAAK,CAAC,EAAE,OAAO,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,uCAAuC;IACvC,SAAS,CAAC,EAAE,cAAc,CAAA;IAC1B,mDAAmD;IACnD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,mEAAmE;IACnE,QAAQ,CAAC,EAAE,SAAS,CAAA;CACpB;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,OAAO,KAAM,YAAW,cAAc;IACnD,SAAgB,IAAI,EAAE,SAAS,CAAA;gBAEnB,IAAI,EAAE,SAAS;IAI3B;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,KAAK,EAAE;IAmC7C;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,KAAK,EAAE;IAQhE;;;;;;;OAOG;IACH,MAAM,CAAC,IAAI,CACV,SAAS,EAAE,MAAM,EAAE,EACnB,QAAQ,EAAE,MAAM,EAAE,EAClB,UAAU,EAAE,UAAU,EACtB,OAAO,GAAE,YAAiB,GACxB,KAAK;IAuCR;;;;;;OAMG;IACH,gBAAgB,CACf,SAAS,EAAE,MAAM,EAAE,EACnB,QAAQ,EAAE,MAAM,EAAE,EAClB,mBAAmB,CAAC,EAAE,UAAU,GAC9B,OAAO;IA4CV;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB;;OAEG;IACH,IAAI,IAAI,aAAa;IAoBrB;;OAEG;IACH,MAAM,IAAI;QACT,IAAI,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAA;QACvE,cAAc,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;KACrC;CAGD"}
1
+ {"version":3,"file":"sigma.d.ts","sourceRoot":"","sources":["../../src/bitcom/sigma.ts"],"names":[],"mappings":"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"}
@@ -1,176 +1,316 @@
1
- import { BSM, BigNumber, Script, Signature, SignedMessage, Utils, } from '@bsv/sdk';
1
+ import { BSM, BigNumber, Hash, OP, Script, Signature, SignedMessage, Transaction, Utils, } from '@bsv/sdk';
2
2
  import BitCom from './bitcom.js';
3
- /**
4
- * SIGMA protocol identifier
5
- */
3
+ const { magicHash } = BSM;
4
+ const { toHex, toArray, toUTF8, toBase64 } = Utils;
6
5
  export const SIGMA_PREFIX = 'SIGMA';
7
- /**
8
- * Signing algorithm for SIGMA signatures
9
- */
6
+ export const sigmaHex = '5349474d41';
10
7
  export var SigmaAlgorithm;
11
8
  (function (SigmaAlgorithm) {
12
9
  SigmaAlgorithm["BSM"] = "BSM";
13
10
  SigmaAlgorithm["BRC77"] = "BRC77";
14
11
  })(SigmaAlgorithm || (SigmaAlgorithm = {}));
12
+ const EMPTY_OUTPOINT = new Array(32).fill(0);
13
+ const hexToBytes = (hex) => {
14
+ const bytes = [];
15
+ for (let i = 0; i < hex.length; i += 2) {
16
+ bytes.push(Number.parseInt(hex.substring(i, i + 2), 16));
17
+ }
18
+ return bytes;
19
+ };
20
+ const writeUint32LE = (value) => [
21
+ value & 0xff,
22
+ (value >> 8) & 0xff,
23
+ (value >> 16) & 0xff,
24
+ (value >> 24) & 0xff,
25
+ ];
26
+ function deduceRecovery(signature, message, address) {
27
+ for (let recovery = 0; recovery < 4; recovery++) {
28
+ try {
29
+ const pubKey = signature.RecoverPublicKey(recovery, new BigNumber(magicHash(message)));
30
+ if (BSM.verify(message, signature, pubKey) && pubKey.toAddress() === address) {
31
+ return recovery;
32
+ }
33
+ }
34
+ catch { }
35
+ }
36
+ return -1;
37
+ }
38
+ function isSigmaChunk(chunk) {
39
+ return !!chunk.data && toUTF8(chunk.data) === SIGMA_PREFIX;
40
+ }
41
+ function isEmbeddedOpReturn(chunk) {
42
+ return chunk.op === OP.OP_RETURN && !!chunk.data && chunk.data.length > 0;
43
+ }
44
+ function tryParseSigAt(chunks, i, targetVout) {
45
+ if (i + 4 >= chunks.length)
46
+ return null;
47
+ const algo = chunks[i + 1];
48
+ const addr = chunks[i + 2];
49
+ const sig = chunks[i + 3];
50
+ const vin = chunks[i + 4];
51
+ if (!algo?.data || !addr?.data || !sig?.data || !vin?.data)
52
+ return null;
53
+ return {
54
+ algorithm: toUTF8(algo.data),
55
+ address: toUTF8(addr.data),
56
+ signature: toBase64(sig.data),
57
+ vin: Number.parseInt(toUTF8(vin.data), 10),
58
+ targetVout,
59
+ };
60
+ }
15
61
  /**
16
- * SIGMA (Secure Identity for Global Message Authentication) implementation
62
+ * SIGMA (Secure Identity for Global Message Authentication)
17
63
  *
18
- * SIGMA enables cryptographic signing of blockchain content by combining:
19
- * - Input hash: SHA256 of the outpoint (txid + vout) from a specific input
20
- * - Data hash: SHA256 of the script data before the SIGMA protocol marker
64
+ * Combines an input hash (SHA256 of an outpoint) with a data hash (SHA256 of
65
+ * script data before the SIGMA marker) to produce a message signed with BSM
66
+ * or BRC-77. Supports multiple signatures per output and both algorithms.
21
67
  *
22
- * Supports both BSM (Bitcoin Signed Message) and BRC-77 signing algorithms.
68
+ * Follows the same pattern as AIP: one data shape, static factories for
69
+ * transaction operations, instance methods for ScriptTemplate integration.
23
70
  */
24
71
  export default class Sigma {
25
72
  data;
26
73
  constructor(data) {
27
74
  this.data = data;
28
75
  }
29
- /**
30
- * Extract SIGMA signatures from BitCom transaction
31
- */
76
+ static computeInputHash(txidOrTx, voutOrVin, sourceOutputIndex) {
77
+ if (typeof txidOrTx === 'string') {
78
+ return Hash.sha256([...hexToBytes(txidOrTx), ...writeUint32LE(sourceOutputIndex ?? 0)]);
79
+ }
80
+ const txIn = txidOrTx.inputs[voutOrVin];
81
+ if (txIn?.sourceTXID) {
82
+ return Hash.sha256([...hexToBytes(txIn.sourceTXID), ...writeUint32LE(txIn.sourceOutputIndex)]);
83
+ }
84
+ return Hash.sha256(EMPTY_OUTPOINT);
85
+ }
86
+ static computeDataHash(script, sigmaInstance = 0) {
87
+ const chunks = script.chunks;
88
+ let n = 0;
89
+ for (let i = 0; i < chunks.length; i++) {
90
+ const chunk = chunks[i];
91
+ if (isSigmaChunk(chunk)) {
92
+ if (n === sigmaInstance) {
93
+ return Hash.sha256(new Script(chunks.slice(0, i - 1)).toBinary());
94
+ }
95
+ n++;
96
+ }
97
+ else if (isEmbeddedOpReturn(chunk)) {
98
+ try {
99
+ for (const ic of Script.fromBinary(chunk.data).chunks) {
100
+ if (isSigmaChunk(ic)) {
101
+ if (n === sigmaInstance) {
102
+ return Hash.sha256(new Script(chunks.slice(0, i)).toBinary());
103
+ }
104
+ n++;
105
+ }
106
+ }
107
+ }
108
+ catch { }
109
+ }
110
+ }
111
+ return Hash.sha256(script.toBinary());
112
+ }
113
+ static computeMessageHash(inputHash, dataHash) {
114
+ const combined = new Uint8Array(inputHash.length + dataHash.length);
115
+ combined.set(inputHash, 0);
116
+ combined.set(dataHash, inputHash.length);
117
+ return Hash.sha256(Array.from(combined));
118
+ }
119
+ static parseFromScript(script, targetVout = 0) {
120
+ const instances = [];
121
+ const chunks = script.chunks;
122
+ for (let i = 0; i < chunks.length; i++) {
123
+ const chunk = chunks[i];
124
+ if (isSigmaChunk(chunk)) {
125
+ const parsed = tryParseSigAt(chunks, i, targetVout);
126
+ if (parsed) {
127
+ instances.push(parsed);
128
+ i += 4;
129
+ }
130
+ }
131
+ else if (isEmbeddedOpReturn(chunk)) {
132
+ try {
133
+ const inner = Script.fromBinary(chunk.data).chunks;
134
+ for (let j = 0; j < inner.length; j++) {
135
+ if (isSigmaChunk(inner[j])) {
136
+ const parsed = tryParseSigAt(inner, j, targetVout);
137
+ if (parsed) {
138
+ instances.push(parsed);
139
+ j += 4;
140
+ }
141
+ }
142
+ }
143
+ }
144
+ catch { }
145
+ }
146
+ }
147
+ return instances;
148
+ }
149
+ static countInstances(script) {
150
+ return Sigma.parseFromScript(script).length;
151
+ }
152
+ static findPosition(script, instanceIndex) {
153
+ const chunks = script.chunks;
154
+ let n = 0;
155
+ for (let i = 0; i < chunks.length; i++) {
156
+ const chunk = chunks[i];
157
+ if (isSigmaChunk(chunk)) {
158
+ if (n === instanceIndex)
159
+ return i;
160
+ n++;
161
+ }
162
+ else if (isEmbeddedOpReturn(chunk)) {
163
+ try {
164
+ for (const ic of Script.fromBinary(chunk.data).chunks) {
165
+ if (isSigmaChunk(ic)) {
166
+ if (n === instanceIndex)
167
+ return i;
168
+ n++;
169
+ }
170
+ }
171
+ }
172
+ catch { }
173
+ }
174
+ }
175
+ return -1;
176
+ }
177
+ static signTransaction(tx, privateKey, options = {}) {
178
+ const targetVout = options.targetVout ?? 0;
179
+ const sigmaInstance = options.sigmaInstance ?? 0;
180
+ const refVin = options.refVin ?? 0;
181
+ const algorithm = options.algorithm ?? SigmaAlgorithm.BSM;
182
+ const vin = refVin === -1 ? targetVout : refVin;
183
+ const inputHash = Sigma.computeInputHash(tx, vin);
184
+ const dataHash = Sigma.computeDataHash(tx.outputs[targetVout].lockingScript, sigmaInstance);
185
+ const messageHash = Sigma.computeMessageHash(inputHash, dataHash);
186
+ let signedAsm;
187
+ let sig;
188
+ if (algorithm === SigmaAlgorithm.BRC77) {
189
+ const address = privateKey.toAddress();
190
+ const brc77Sig = SignedMessage.sign(messageHash, privateKey, options.verifier);
191
+ signedAsm = `${sigmaHex} ${toHex(toArray(SigmaAlgorithm.BRC77))} ${toHex(toArray(address))} ${toHex(brc77Sig)} ${toHex(toArray(vin.toString()))}`;
192
+ sig = { algorithm: SigmaAlgorithm.BRC77, address, signature: toBase64(brc77Sig), vin, targetVout };
193
+ }
194
+ else {
195
+ const signature = BSM.sign(messageHash, privateKey, 'raw');
196
+ const address = privateKey.toAddress();
197
+ const recovery = signature.CalculateRecoveryFactor(privateKey.toPublicKey(), new BigNumber(magicHash(messageHash)));
198
+ signedAsm = `${sigmaHex} ${toHex(toArray(SigmaAlgorithm.BSM))} ${toHex(toArray(address))} ${signature.toCompact(recovery, true, 'hex')} ${toHex(toArray(vin.toString()))}`;
199
+ sig = { algorithm: SigmaAlgorithm.BSM, address, signature: signature.toCompact(recovery, true, 'base64'), vin, targetVout };
200
+ }
201
+ return Sigma.applyToTransaction(tx, targetVout, sigmaInstance, signedAsm, sig);
202
+ }
203
+ static verifyTransaction(tx, targetVout = 0, sigmaInstance = 0, recipientPrivateKey) {
204
+ const output = tx.outputs[targetVout];
205
+ if (!output?.lockingScript)
206
+ return false;
207
+ const instances = Sigma.parseFromScript(output.lockingScript, targetVout);
208
+ const sig = instances[sigmaInstance];
209
+ if (!sig)
210
+ return false;
211
+ const inputHash = Sigma.computeInputHash(tx, sig.vin);
212
+ const dataHash = Sigma.computeDataHash(output.lockingScript, sigmaInstance);
213
+ const messageHash = Sigma.computeMessageHash(inputHash, dataHash);
214
+ if (sig.algorithm === SigmaAlgorithm.BRC77) {
215
+ return SignedMessage.verify(messageHash, toArray(sig.signature, 'base64'), recipientPrivateKey);
216
+ }
217
+ return deduceRecovery(Signature.fromCompact(sig.signature, 'base64'), messageHash, sig.address) !== -1;
218
+ }
219
+ static applyToTransaction(tx, targetVout, sigmaInstance, signedAsm, sig) {
220
+ const sigmaScript = Script.fromASM(signedAsm);
221
+ const output = tx.outputs[targetVout];
222
+ let existingAsm = output.lockingScript.toASM();
223
+ const separator = existingAsm.split(' ').includes('OP_RETURN') ? '7c' : 'OP_RETURN';
224
+ const existingCount = Sigma.countInstances(output.lockingScript);
225
+ if (existingCount > 0 && sigmaInstance === existingCount) {
226
+ const asmTokens = existingAsm.split(' ');
227
+ const pos = Sigma.findPosition(output.lockingScript, sigmaInstance);
228
+ if (pos !== -1) {
229
+ asmTokens.splice(pos, 5, ...signedAsm.split(' '));
230
+ existingAsm = asmTokens.join(' ');
231
+ }
232
+ }
233
+ const signedTx = new Transaction(tx.version, tx.inputs.map((i) => ({ ...i })), tx.outputs.map((o) => ({ ...o })));
234
+ signedTx.outputs[targetVout] = {
235
+ satoshis: output.satoshis,
236
+ lockingScript: Script.fromASM(`${existingAsm} ${separator} ${signedAsm}`),
237
+ };
238
+ return { sigmaScript, signedTx, ...sig };
239
+ }
32
240
  static decode(bitcom) {
33
241
  const sigmas = [];
34
- if (bitcom?.protocols?.length === 0) {
242
+ if (!bitcom?.protocols?.length)
35
243
  return sigmas;
36
- }
37
244
  for (let protoIdx = 0; protoIdx < bitcom.protocols.length; protoIdx++) {
38
245
  const protocol = bitcom.protocols[protoIdx];
39
246
  if (protocol.protocol === SIGMA_PREFIX) {
40
247
  try {
41
- const script = Script.fromBinary(protocol.script);
42
- const chunks = script.chunks;
43
- if (chunks?.length < 4) {
248
+ const chunks = Script.fromBinary(protocol.script).chunks;
249
+ if (chunks?.length < 4)
44
250
  continue;
45
- }
46
- const sigma = new Sigma({
251
+ sigmas.push(new Sigma({
47
252
  bitcomIndex: protoIdx,
48
- algorithm: Utils.toUTF8(chunks[0].data ?? []),
49
- address: Utils.toUTF8(chunks[1].data ?? []),
253
+ algorithm: toUTF8(chunks[0].data ?? []),
254
+ address: toUTF8(chunks[1].data ?? []),
50
255
  signature: Array.from(chunks[2].data ?? []),
51
- vin: Number.parseInt(Utils.toUTF8(chunks[3].data ?? []), 10),
256
+ vin: Number.parseInt(toUTF8(chunks[3].data ?? []), 10),
52
257
  valid: undefined,
53
- });
54
- sigmas.push(sigma);
258
+ }));
55
259
  }
56
260
  catch { }
57
261
  }
58
262
  }
59
263
  return sigmas;
60
264
  }
61
- /**
62
- * Decode SIGMA signatures directly from a Script
63
- */
64
265
  static decodeFromScript(script) {
65
266
  const bitcom = BitCom.decode(script);
66
- if (bitcom == null) {
267
+ if (bitcom == null)
67
268
  return [];
68
- }
69
269
  return Sigma.decode(bitcom);
70
270
  }
71
- /**
72
- * Create SIGMA signature for data
73
- *
74
- * @param inputHash - SHA256 hash of the input outpoint
75
- * @param dataHash - SHA256 hash of the script data
76
- * @param privateKey - Private key for signing
77
- * @param options - Additional signing options
78
- */
79
- static sign(inputHash, dataHash, privateKey, options = {}) {
271
+ static createSignature(inputHash, dataHash, privateKey, options = {}) {
80
272
  const algorithm = options.algorithm ?? SigmaAlgorithm.BSM;
81
273
  const vin = options.vin ?? 0;
82
274
  const address = privateKey.toAddress().toString();
83
- // Combine hashes to create the message
84
275
  const messageHash = [...inputHash, ...dataHash];
85
276
  let signatureArray;
86
277
  if (algorithm === SigmaAlgorithm.BRC77) {
87
- // BRC-77 signing using SignedMessage
88
- const brc77Sig = SignedMessage.sign(messageHash, privateKey, options.verifier);
89
- signatureArray = brc77Sig;
278
+ signatureArray = SignedMessage.sign(messageHash, privateKey, options.verifier);
90
279
  }
91
280
  else {
92
- // BSM signing
93
281
  const sig = BSM.sign(messageHash, privateKey, 'raw');
94
- const magicHashValue = BSM.magicHash(messageHash);
95
- const recoveryFactor = sig.CalculateRecoveryFactor(privateKey.toPublicKey(), new BigNumber(magicHashValue));
96
- const compactSig = sig.toCompact(recoveryFactor, true, 'base64');
97
- signatureArray = Array.from(Utils.toArray(compactSig, 'base64'));
282
+ const recovery = sig.CalculateRecoveryFactor(privateKey.toPublicKey(), new BigNumber(BSM.magicHash(messageHash)));
283
+ signatureArray = Array.from(toArray(sig.toCompact(recovery, true, 'base64'), 'base64'));
98
284
  }
99
- return new Sigma({
100
- algorithm,
101
- address,
102
- signature: signatureArray,
103
- vin,
104
- valid: true,
105
- });
106
- }
107
- /**
108
- * Verify SIGMA signature against provided hashes
109
- *
110
- * @param inputHash - SHA256 hash of the input outpoint
111
- * @param dataHash - SHA256 hash of the script data
112
- * @param recipientPrivateKey - For BRC-77 private signatures, the recipient's key
113
- */
285
+ return new Sigma({ algorithm, address, signature: signatureArray, vin, valid: true });
286
+ }
287
+ verify() {
288
+ return this.data.valid === true;
289
+ }
114
290
  verifyWithHashes(inputHash, dataHash, recipientPrivateKey) {
115
291
  try {
116
292
  const messageHash = [...inputHash, ...dataHash];
117
293
  if (this.data.algorithm === SigmaAlgorithm.BRC77) {
118
- // BRC-77 verification using SignedMessage
119
294
  this.data.valid = SignedMessage.verify(messageHash, this.data.signature, recipientPrivateKey);
120
295
  return this.data.valid;
121
296
  }
122
- // BSM verification
123
- const signatureBase64 = Utils.toBase64(this.data.signature);
124
- const sig = Signature.fromCompact(signatureBase64, 'base64');
125
- for (let recovery = 0; recovery < 4; recovery++) {
126
- try {
127
- const publicKey = sig.RecoverPublicKey(recovery, new BigNumber(BSM.magicHash(messageHash)));
128
- if (BSM.verify(messageHash, sig, publicKey) &&
129
- publicKey.toAddress().toString() === this.data.address) {
130
- this.data.valid = true;
131
- return true;
132
- }
133
- }
134
- catch {
135
- // Try next recovery factor
136
- }
137
- }
138
- this.data.valid = false;
139
- return false;
297
+ const sig = Signature.fromCompact(toBase64(this.data.signature), 'base64');
298
+ this.data.valid = deduceRecovery(sig, messageHash, this.data.address) !== -1;
299
+ return this.data.valid;
140
300
  }
141
301
  catch {
142
302
  this.data.valid = false;
143
303
  return false;
144
304
  }
145
305
  }
146
- /**
147
- * Check if signature was previously verified
148
- */
149
- verify() {
150
- return this.data.valid === true;
151
- }
152
- /**
153
- * Generate locking script for SIGMA within BitCom
154
- */
155
306
  lock() {
156
307
  const script = new Script();
157
- script.writeBin(Utils.toArray(this.data.algorithm, 'utf8'));
158
- script.writeBin(Utils.toArray(this.data.address, 'utf8'));
308
+ script.writeBin(toArray(this.data.algorithm, 'utf8'));
309
+ script.writeBin(toArray(this.data.address, 'utf8'));
159
310
  script.writeBin(this.data.signature);
160
- script.writeBin(Utils.toArray(this.data.vin.toString(), 'utf8'));
161
- const protocols = [
162
- {
163
- protocol: SIGMA_PREFIX,
164
- script: script.toBinary(),
165
- pos: 0,
166
- },
167
- ];
168
- const bitcom = new BitCom(protocols);
169
- return bitcom.lock();
170
- }
171
- /**
172
- * Unlock method is not available for SIGMA scripts
173
- */
311
+ script.writeBin(toArray(this.data.vin.toString(), 'utf8'));
312
+ return new BitCom([{ protocol: SIGMA_PREFIX, script: script.toBinary(), pos: 0 }]).lock();
313
+ }
174
314
  unlock() {
175
315
  throw new Error('SIGMA signatures cannot be unlocked');
176
316
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sigma.js","sourceRoot":"","sources":["../../src/bitcom/sigma.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sigma.js","sourceRoot":"","sources":["../../src/bitcom/sigma.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,GAAG,EACH,SAAS,EACT,IAAI,EAEJ,EAAE,EAGF,MAAM,EAGN,SAAS,EACT,aAAa,EACb,WAAW,EAGX,KAAK,GACL,MAAM,UAAU,CAAA;AACjB,OAAO,MAA6C,MAAM,aAAa,CAAA;AAEvE,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,CAAA;AACzB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;AAElD,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAA;AACnC,MAAM,CAAC,MAAM,QAAQ,GAAG,YAAY,CAAA;AAEpC,MAAM,CAAN,IAAY,cAGX;AAHD,WAAY,cAAc;IACzB,6BAAW,CAAA;IACX,iCAAe,CAAA;AAChB,CAAC,EAHW,cAAc,KAAd,cAAc,QAGzB;AA+BD,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAE5C,MAAM,UAAU,GAAG,CAAC,GAAW,EAAY,EAAE;IAC5C,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;IACzD,CAAC;IACD,OAAO,KAAK,CAAA;AACb,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,CAAC,KAAa,EAAY,EAAE,CAAC;IAClD,KAAK,GAAG,IAAI;IACZ,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI;IACnB,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,IAAI;IACpB,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,IAAI;CACpB,CAAA;AAED,SAAS,cAAc,CAAC,SAAoB,EAAE,OAAiB,EAAE,OAAe;IAC/E,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC;QACjD,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;YACtF,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,KAAK,OAAO,EAAE,CAAC;gBAC9E,OAAO,QAAQ,CAAA;YAChB,CAAC;QACF,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACX,CAAC;IACD,OAAO,CAAC,CAAC,CAAA;AACV,CAAC;AAED,SAAS,YAAY,CAAC,KAAkB;IACvC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,YAAY,CAAA;AAC3D,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAkB;IAC7C,OAAO,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;AAC1E,CAAC;AAED,SAAS,aAAa,CAAC,MAAqB,EAAE,CAAS,EAAE,UAAkB;IAC1E,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IACvC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IACzB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IACzB,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI;QAAE,OAAO,IAAI,CAAA;IACvE,OAAO;QACN,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAmB;QAC9C,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QAC7B,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QAC1C,UAAU;KACV,CAAA;AACF,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,OAAO,KAAK;IAClB,IAAI,CAAW;IAEtB,YAAY,IAAe;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IACjB,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,QAA8B,EAAE,SAAiB,EAAE,iBAA0B;QACpG,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,GAAG,aAAa,CAAC,iBAAiB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;QACxF,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QACvC,IAAI,IAAI,EAAE,UAAU,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAA;QAC/F,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;IACnC,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,MAAc,EAAE,aAAa,GAAG,CAAC;QACvD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;QAC5B,IAAI,CAAC,GAAG,CAAC,CAAA;QAET,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YAEvB,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,KAAK,aAAa,EAAE,CAAC;oBACzB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;gBAClE,CAAC;gBACD,CAAC,EAAE,CAAA;YACJ,CAAC;iBAAM,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtC,IAAI,CAAC;oBACJ,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAK,CAAC,CAAC,MAAM,EAAE,CAAC;wBACxD,IAAI,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC;4BACtB,IAAI,CAAC,KAAK,aAAa,EAAE,CAAC;gCACzB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;4BAC9D,CAAC;4BACD,CAAC,EAAE,CAAA;wBACJ,CAAC;oBACF,CAAC;gBACF,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACX,CAAC;QACF,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;IACtC,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,SAAmB,EAAE,QAAkB;QAChE,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;QACnE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;QAC1B,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;QACxC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IACzC,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,MAAc,EAAE,UAAU,GAAG,CAAC;QACpD,MAAM,SAAS,GAAU,EAAE,CAAA;QAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;QAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YAEvB,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,UAAU,CAAC,CAAA;gBACnD,IAAI,MAAM,EAAE,CAAC;oBACZ,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;oBACtB,CAAC,IAAI,CAAC,CAAA;gBACP,CAAC;YACF,CAAC;iBAAM,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtC,IAAI,CAAC;oBACJ,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAK,CAAC,CAAC,MAAM,CAAA;oBACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBACvC,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC5B,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,CAAA;4BAClD,IAAI,MAAM,EAAE,CAAC;gCACZ,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gCACtB,CAAC,IAAI,CAAC,CAAA;4BACP,CAAC;wBACF,CAAC;oBACF,CAAC;gBACF,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACX,CAAC;QACF,CAAC;QAED,OAAO,SAAS,CAAA;IACjB,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,MAAc;QACnC,OAAO,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,MAAM,CAAA;IAC5C,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,MAAc,EAAE,aAAqB;QACxD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;QAC5B,IAAI,CAAC,GAAG,CAAC,CAAA;QAET,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YAEvB,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,KAAK,aAAa;oBAAE,OAAO,CAAC,CAAA;gBACjC,CAAC,EAAE,CAAA;YACJ,CAAC;iBAAM,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtC,IAAI,CAAC;oBACJ,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAK,CAAC,CAAC,MAAM,EAAE,CAAC;wBACxD,IAAI,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC;4BACtB,IAAI,CAAC,KAAK,aAAa;gCAAE,OAAO,CAAC,CAAA;4BACjC,CAAC,EAAE,CAAA;wBACJ,CAAC;oBACF,CAAC;gBACF,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACX,CAAC;QACF,CAAC;QAED,OAAO,CAAC,CAAC,CAAA;IACV,CAAC;IAED,MAAM,CAAC,eAAe,CACrB,EAAe,EACf,UAAsB,EACtB,UAMI,EAAE;QAEN,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAA;QAC1C,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,CAAA;QAChD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAA;QAClC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,cAAc,CAAC,GAAG,CAAA;QACzD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAA;QAE/C,MAAM,SAAS,GAAG,KAAK,CAAC,gBAAgB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;QACjD,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,CAAA;QAC3F,MAAM,WAAW,GAAG,KAAK,CAAC,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;QAEjE,IAAI,SAAiB,CAAA;QACrB,IAAI,GAAQ,CAAA;QAEZ,IAAI,SAAS,KAAK,cAAc,CAAC,KAAK,EAAE,CAAC;YACxC,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,EAAE,CAAA;YACtC,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;YAC9E,SAAS,GAAG,GAAG,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAA;YACjJ,GAAG,GAAG,EAAE,SAAS,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAA;QACnG,CAAC;aAAM,CAAC;YACP,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,KAAK,CAAc,CAAA;YACvE,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,EAAE,CAAA;YACtC,MAAM,QAAQ,GAAG,SAAS,CAAC,uBAAuB,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,IAAI,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;YACnH,SAAS,GAAG,GAAG,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAA;YAC1K,GAAG,GAAG,EAAE,SAAS,EAAE,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAW,EAAE,GAAG,EAAE,UAAU,EAAE,CAAA;QACtI,CAAC;QAED,OAAO,KAAK,CAAC,kBAAkB,CAAC,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,CAAC,CAAA;IAC/E,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,EAAe,EAAE,UAAU,GAAG,CAAC,EAAE,aAAa,GAAG,CAAC,EAAE,mBAAgC;QAC5G,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QACrC,IAAI,CAAC,MAAM,EAAE,aAAa;YAAE,OAAO,KAAK,CAAA;QAExC,MAAM,SAAS,GAAG,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA;QACzE,MAAM,GAAG,GAAG,SAAS,CAAC,aAAa,CAAC,CAAA;QACpC,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAA;QAEtB,MAAM,SAAS,GAAG,KAAK,CAAC,gBAAgB,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;QACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,CAAA;QAC3E,MAAM,WAAW,GAAG,KAAK,CAAC,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;QAEjE,IAAI,GAAG,CAAC,SAAS,KAAK,cAAc,CAAC,KAAK,EAAE,CAAC;YAC5C,OAAO,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,mBAAmB,CAAC,CAAA;QAChG,CAAC;QAED,OAAO,cAAc,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;IACvG,CAAC;IAEO,MAAM,CAAC,kBAAkB,CAAC,EAAe,EAAE,UAAkB,EAAE,aAAqB,EAAE,SAAiB,EAAE,GAAQ;QACxH,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAC7C,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QAErC,IAAI,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,CAAA;QAC9C,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAA;QAEnF,MAAM,aAAa,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;QAChE,IAAI,aAAa,GAAG,CAAC,IAAI,aAAa,KAAK,aAAa,EAAE,CAAC;YAC1D,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACxC,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,CAAA;YACnE,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;gBAChB,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;gBACjD,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAClC,CAAC;QACF,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,WAAW,CAC/B,EAAE,CAAC,OAAO,EACV,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAChC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CACjC,CAAA;QACD,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG;YAC9B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,WAAW,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;SACpD,CAAA;QAEtB,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,GAAG,EAAE,CAAA;IACzC,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,MAAqB;QAClC,MAAM,MAAM,GAAY,EAAE,CAAA;QAC1B,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM;YAAE,OAAO,MAAM,CAAA;QAE7C,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC;YACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;YAC3C,IAAI,QAAQ,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;gBACxC,IAAI,CAAC;oBACJ,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAA;oBACxD,IAAI,MAAM,EAAE,MAAM,GAAG,CAAC;wBAAE,SAAQ;oBAEhC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;wBACrB,WAAW,EAAE,QAAQ;wBACrB,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAmB;wBACzD,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;wBACrC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;wBAC3C,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;wBACtD,KAAK,EAAE,SAAS;qBAChB,CAAC,CAAC,CAAA;gBACJ,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACX,CAAC;QACF,CAAC;QAED,OAAO,MAAM,CAAA;IACd,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,MAA8B;QACrD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACpC,IAAI,MAAM,IAAI,IAAI;YAAE,OAAO,EAAE,CAAA;QAC7B,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC5B,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,SAAmB,EAAE,QAAkB,EAAE,UAAsB,EAAE,UAAwB,EAAE;QACjH,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,cAAc,CAAC,GAAG,CAAA;QACzD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAA;QAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAA;QACjD,MAAM,WAAW,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,QAAQ,CAAC,CAAA;QAE/C,IAAI,cAAwB,CAAA;QAE5B,IAAI,SAAS,KAAK,cAAc,CAAC,KAAK,EAAE,CAAC;YACxC,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC/E,CAAC;aAAM,CAAC;YACP,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,KAAK,CAAc,CAAA;YACjE,MAAM,QAAQ,GAAG,GAAG,CAAC,uBAAuB,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;YACjH,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAW,EAAE,QAAQ,CAAC,CAAC,CAAA;QAClG,CAAC;QAED,OAAO,IAAI,KAAK,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACtF,CAAC;IAED,MAAM;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAA;IAChC,CAAC;IAED,gBAAgB,CAAC,SAAmB,EAAE,QAAkB,EAAE,mBAAgC;QACzF,IAAI,CAAC;YACJ,MAAM,WAAW,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,QAAQ,CAAC,CAAA;YAE/C,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,cAAc,CAAC,KAAK,EAAE,CAAC;gBAClD,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAA;gBAC7F,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA;YACvB,CAAC;YAED,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,CAAA;YAC1E,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;YAC5E,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA;QACvB,CAAC;QAAC,MAAM,CAAC;YACR,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;YACvB,OAAO,KAAK,CAAA;QACb,CAAC;IACF,CAAC;IAED,IAAI;QACH,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAA;QAC3B,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;QACrD,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAA;QACnD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACpC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC,CAAA;QAC1D,OAAO,IAAI,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAC1F,CAAC;IAED,MAAM;QAIL,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;IACvD,CAAC;CACD"}
@@ -0,0 +1,47 @@
1
+ import { type Script } from '@bsv/sdk';
2
+ /**
3
+ * Cosign decoded data structure
4
+ */
5
+ export interface CosignData {
6
+ /** Owner's address (base58check encoded) */
7
+ address: string;
8
+ /** Cosigner's compressed public key (hex encoded) */
9
+ cosigner: string;
10
+ }
11
+ /**
12
+ * Cosign - Multi-signature template requiring owner + cosigner authorization
13
+ *
14
+ * The Cosign template creates outputs that require both the owner's signature
15
+ * and a cosigner's signature to spend. The owner is identified by their public
16
+ * key hash (address), while the cosigner is identified by their full public key.
17
+ *
18
+ * Script pattern:
19
+ * OP_DUP OP_HASH160 <20-byte PKHash> OP_EQUALVERIFY OP_CHECKSIGVERIFY <33-byte pubkey> OP_CHECKSIG
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const cosign = Cosign.decode(script)
24
+ * if (cosign) {
25
+ * console.log(`Owner address: ${cosign.address}`)
26
+ * console.log(`Cosigner pubkey: ${cosign.cosigner}`)
27
+ * }
28
+ * ```
29
+ */
30
+ export default class Cosign {
31
+ /**
32
+ * Decodes a Cosign from a script
33
+ *
34
+ * @param script - The script to decode
35
+ * @param mainnet - Whether to use mainnet address prefix (default: true)
36
+ * @returns Decoded Cosign data or null if not found/invalid
37
+ */
38
+ static decode(script: Script, mainnet?: boolean): CosignData | null;
39
+ /**
40
+ * Checks if a script contains a Cosign pattern
41
+ *
42
+ * @param script - The script to check
43
+ * @returns true if the script contains Cosign pattern
44
+ */
45
+ static isCosign(script: Script): boolean;
46
+ }
47
+ //# sourceMappingURL=cosign.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cosign.d.ts","sourceRoot":"","sources":["../../src/cosign/cosign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjD;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAA;IACf,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,OAAO,OAAO,MAAM;IAC1B;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,UAAO,GAAG,UAAU,GAAG,IAAI;IA4BhE;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;CAGxC"}
@@ -0,0 +1,62 @@
1
+ import { OP, Utils } from '@bsv/sdk';
2
+ /**
3
+ * Cosign - Multi-signature template requiring owner + cosigner authorization
4
+ *
5
+ * The Cosign template creates outputs that require both the owner's signature
6
+ * and a cosigner's signature to spend. The owner is identified by their public
7
+ * key hash (address), while the cosigner is identified by their full public key.
8
+ *
9
+ * Script pattern:
10
+ * OP_DUP OP_HASH160 <20-byte PKHash> OP_EQUALVERIFY OP_CHECKSIGVERIFY <33-byte pubkey> OP_CHECKSIG
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const cosign = Cosign.decode(script)
15
+ * if (cosign) {
16
+ * console.log(`Owner address: ${cosign.address}`)
17
+ * console.log(`Cosigner pubkey: ${cosign.cosigner}`)
18
+ * }
19
+ * ```
20
+ */
21
+ export default class Cosign {
22
+ /**
23
+ * Decodes a Cosign from a script
24
+ *
25
+ * @param script - The script to decode
26
+ * @param mainnet - Whether to use mainnet address prefix (default: true)
27
+ * @returns Decoded Cosign data or null if not found/invalid
28
+ */
29
+ static decode(script, mainnet = true) {
30
+ try {
31
+ const chunks = script.chunks;
32
+ for (let i = 0; i <= chunks.length - 7; i++) {
33
+ if (chunks[i].op === OP.OP_DUP &&
34
+ chunks[i + 1].op === OP.OP_HASH160 &&
35
+ chunks[i + 2].data?.length === 20 &&
36
+ chunks[i + 3].op === OP.OP_EQUALVERIFY &&
37
+ chunks[i + 4].op === OP.OP_CHECKSIGVERIFY &&
38
+ chunks[i + 5].data?.length === 33 &&
39
+ chunks[i + 6].op === OP.OP_CHECKSIG) {
40
+ const addressPrefix = mainnet ? [0x00] : [0x6f];
41
+ const address = Utils.toBase58Check(chunks[i + 2].data, addressPrefix);
42
+ const cosigner = Utils.toHex(chunks[i + 5].data);
43
+ return { address, cosigner };
44
+ }
45
+ }
46
+ return null;
47
+ }
48
+ catch {
49
+ return null;
50
+ }
51
+ }
52
+ /**
53
+ * Checks if a script contains a Cosign pattern
54
+ *
55
+ * @param script - The script to check
56
+ * @returns true if the script contains Cosign pattern
57
+ */
58
+ static isCosign(script) {
59
+ return Cosign.decode(script) !== null;
60
+ }
61
+ }
62
+ //# sourceMappingURL=cosign.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cosign.js","sourceRoot":"","sources":["../../src/cosign/cosign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAe,MAAM,UAAU,CAAA;AAYjD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,OAAO,OAAO,MAAM;IAC1B;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CAAC,MAAc,EAAE,OAAO,GAAG,IAAI;QAC3C,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;YAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,IACC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM;oBAC1B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,UAAU;oBAClC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE;oBACjC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,cAAc;oBACtC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,iBAAiB;oBACzC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE;oBACjC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,WAAW,EAClC,CAAC;oBACF,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;oBAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAClC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAgB,EAC9B,aAAa,CACb,CAAA;oBACD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAgB,CAAC,CAAA;oBAC5D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAA;gBAC7B,CAAC;YACF,CAAC;YACD,OAAO,IAAI,CAAA;QACZ,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,IAAI,CAAA;QACZ,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAc;QAC7B,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,CAAA;IACtC,CAAC;CACD"}
package/dist/index.d.ts CHANGED
@@ -5,6 +5,8 @@ export { default as BSV20 } from './bsv20/bsv20.js';
5
5
  export { default as BSV21 } from './bsv21/bsv21.js';
6
6
  export { default as OrdLock } from './ordlock/ordlock.js';
7
7
  export { default as Lock } from './lock/lock.js';
8
+ export { default as Cosign } from './cosign/cosign.js';
9
+ export type { CosignData } from './cosign/cosign.js';
8
10
  export { default as BitCom } from './bitcom/bitcom.js';
9
11
  export { default as AIP } from './bitcom/aip.js';
10
12
  export { default as B } from './bitcom/b.js';
@@ -28,8 +30,8 @@ export type { BAPData } from './bitcom/bap.js';
28
30
  export { BAPAttestationType, BAP_PROTOCOL_PREFIX, } from './bitcom/bap.js';
29
31
  export type { MAPData } from './bitcom/map.js';
30
32
  export { MAP_PREFIX, MAPCommand } from './bitcom/map.js';
31
- export type { SigmaData, SigmaOptions, } from './bitcom/sigma.js';
32
- export { SIGMA_PREFIX, SigmaAlgorithm } from './bitcom/sigma.js';
33
+ export type { Sig, SigmaData, SigmaOptions, SignResponse, } from './bitcom/sigma.js';
34
+ export { SIGMA_PREFIX, SigmaAlgorithm, sigmaHex } from './bitcom/sigma.js';
33
35
  export { BSocialActionType, BSocialContext, } from './bsocial/bsocial.js';
34
36
  export type { BSocialAction, BSocialPost, BSocialLike, BSocialFollow, BSocialMessage, BSocialVideo, BSocialDecoded, } from './bsocial/bsocial.js';
35
37
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC5D,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGzC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAGhD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,CAAC,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAGhD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAIzD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAKpD,YAAY,EACX,eAAe,EACf,kBAAkB,GAClB,MAAM,8BAA8B,CAAA;AAKrC,YAAY,EACX,cAAc,EACd,SAAS,EACT,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,GACZ,MAAM,kBAAkB,CAAA;AAKzB,YAAY,EACX,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,YAAY,GACZ,MAAM,kBAAkB,CAAA;AAKzB,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAKrE,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAKzD,YAAY,EACX,QAAQ,EACR,cAAc,EACd,aAAa,GACb,MAAM,oBAAoB,CAAA;AAK3B,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAK5C,YAAY,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAK7D,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EACN,kBAAkB,EAClB,mBAAmB,GACnB,MAAM,iBAAiB,CAAA;AAKxB,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAKxD,YAAY,EACX,SAAS,EACT,YAAY,GACZ,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAKhE,OAAO,EACN,iBAAiB,EACjB,cAAc,GACd,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EACX,aAAa,EACb,WAAW,EACX,WAAW,EACX,aAAa,EACb,cAAc,EACd,YAAY,EACZ,cAAc,GACd,MAAM,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -6,6 +6,7 @@ export { default as BSV20 } from './bsv20/bsv20.js';
6
6
  export { default as BSV21 } from './bsv21/bsv21.js';
7
7
  export { default as OrdLock } from './ordlock/ordlock.js';
8
8
  export { default as Lock } from './lock/lock.js';
9
+ export { default as Cosign } from './cosign/cosign.js';
9
10
  // BitCom Protocols
10
11
  export { default as BitCom } from './bitcom/bitcom.js';
11
12
  export { default as AIP } from './bitcom/aip.js';
@@ -23,7 +24,7 @@ export { AIP_PREFIX } from './bitcom/aip.js';
23
24
  export { B_PREFIX, MediaType, Encoding } from './bitcom/b.js';
24
25
  export { BAPAttestationType, BAP_PROTOCOL_PREFIX, } from './bitcom/bap.js';
25
26
  export { MAP_PREFIX, MAPCommand } from './bitcom/map.js';
26
- export { SIGMA_PREFIX, SigmaAlgorithm } from './bitcom/sigma.js';
27
+ export { SIGMA_PREFIX, SigmaAlgorithm, sigmaHex } from './bitcom/sigma.js';
27
28
  // ============================================================================
28
29
  // BSocial Types
29
30
  // ============================================================================
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG5D,mBAAmB;AACnB,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAEhD,mBAAmB;AACnB,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,CAAC,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAEhD,UAAU;AACV,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAEzD,qEAAqE;AACrE,kCAAkC;AAClC,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAqCpD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAMrE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAezD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAM5C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAM7D,OAAO,EACN,kBAAkB,EAClB,mBAAmB,GACnB,MAAM,iBAAiB,CAAA;AAMxB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AASxD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEhE,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAC/E,OAAO,EACN,iBAAiB,EACjB,cAAc,GACd,MAAM,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG5D,mBAAmB;AACnB,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAGtD,mBAAmB;AACnB,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,CAAC,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAEhD,UAAU;AACV,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAEzD,qEAAqE;AACrE,kCAAkC;AAClC,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAqCpD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAMrE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAezD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAM5C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAM7D,OAAO,EACN,kBAAkB,EAClB,mBAAmB,GACnB,MAAM,iBAAiB,CAAA;AAMxB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAWxD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE1E,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAC/E,OAAO,EACN,iBAAiB,EACjB,cAAc,GACd,MAAM,sBAAsB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1sat/templates",
3
- "version": "0.0.4",
3
+ "version": "0.0.5",
4
4
  "description": "Bitcoin script templates for 1Sat Ordinals SDK",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",