@1sat/templates 0.0.3 → 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,90 +1,70 @@
1
- import { type LockingScript, type PrivateKey, type PublicKey, Script, type ScriptTemplate, type Transaction, type UnlockingScript } from '@bsv/sdk';
2
- import { Algorithm } from 'sigma-protocol';
1
+ import { type LockingScript, type PrivateKey, type PublicKey, Script, type ScriptTemplate, Transaction, type UnlockingScript } from '@bsv/sdk';
3
2
  import { type BitComDecoded } from './bitcom.js';
4
- /**
5
- * SIGMA protocol identifier
6
- */
7
3
  export declare const SIGMA_PREFIX = "SIGMA";
8
- /**
9
- * Re-export Algorithm from sigma-protocol for consistency
10
- */
11
- export { Algorithm as SigmaAlgorithm };
12
- /**
13
- * SIGMA signature data structure
14
- */
4
+ export declare const sigmaHex = "5349474d41";
5
+ export declare enum SigmaAlgorithm {
6
+ BSM = "BSM",
7
+ BRC77 = "BRC77"
8
+ }
15
9
  export interface SigmaData {
16
- /** BitCom protocol index */
17
10
  bitcomIndex?: number;
18
- /** Signing algorithm (BSM or BRC77) */
19
- algorithm: Algorithm;
20
- /** Bitcoin address of signer */
11
+ algorithm: SigmaAlgorithm;
21
12
  address: string;
22
- /** Cryptographic signature as number array */
23
13
  signature: number[];
24
- /** Input index (vin) that anchors the signature */
25
14
  vin: number;
26
- /** Whether signature verification passed */
15
+ targetVout?: number;
27
16
  valid?: boolean;
28
17
  }
29
- /**
30
- * Options for SIGMA signature creation
31
- */
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
+ }
32
29
  export interface SigmaOptions {
33
- /** Signing algorithm (default: BSM) */
34
- algorithm?: Algorithm;
35
- /** Input index to anchor signature (default: 0) */
30
+ algorithm?: SigmaAlgorithm;
36
31
  vin?: number;
37
- /** For BRC-77: specific verifier public key (private signature) */
38
32
  verifier?: PublicKey;
39
33
  }
40
34
  /**
41
- * SIGMA (Secure Identity for Global Message Authentication) implementation
35
+ * SIGMA (Secure Identity for Global Message Authentication)
42
36
  *
43
- * SIGMA enables cryptographic signing of blockchain content by combining:
44
- * - Input hash: SHA256 of the outpoint (txid + vout) from a specific input
45
- * - 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.
46
40
  *
47
- * 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.
48
43
  */
49
44
  export default class Sigma implements ScriptTemplate {
50
- readonly data: SigmaData;
45
+ data: SigmaData;
51
46
  constructor(data: SigmaData);
52
- /**
53
- * Extract SIGMA signatures from BitCom transaction
54
- */
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;
55
62
  static decode(bitcom: BitComDecoded): Sigma[];
56
- /**
57
- * Decode SIGMA signatures directly from a Script
58
- */
59
63
  static decodeFromScript(script: Script | LockingScript): Sigma[];
60
- /**
61
- * Create SIGMA signature for data
62
- *
63
- * @param inputHash - SHA256 hash of the input outpoint
64
- * @param dataHash - SHA256 hash of the script data
65
- * @param privateKey - Private key for signing
66
- * @param options - Additional signing options
67
- */
68
- static sign(inputHash: number[], dataHash: number[], privateKey: PrivateKey, options?: SigmaOptions): Sigma;
69
- /**
70
- * Verify SIGMA signature against provided hashes
71
- *
72
- * @param inputHash - SHA256 hash of the input outpoint
73
- * @param dataHash - SHA256 hash of the script data
74
- * @param recipientPrivateKey - For BRC-77 private signatures, the recipient's key
75
- */
76
- verifyWithHashes(inputHash: number[], dataHash: number[], recipientPrivateKey?: PrivateKey): boolean;
77
- /**
78
- * Check if signature was previously verified
79
- */
64
+ static createSignature(inputHash: number[], dataHash: number[], privateKey: PrivateKey, options?: SigmaOptions): Sigma;
80
65
  verify(): boolean;
81
- /**
82
- * Generate locking script for SIGMA within BitCom
83
- */
66
+ verifyWithHashes(inputHash: number[], dataHash: number[], recipientPrivateKey?: PrivateKey): boolean;
84
67
  lock(): LockingScript;
85
- /**
86
- * Unlock method is not available for SIGMA scripts
87
- */
88
68
  unlock(): {
89
69
  sign: (tx: Transaction, inputIndex: number) => Promise<UnlockingScript>;
90
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,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAe,EAAiB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAEvE;;GAEG;AACH,eAAO,MAAM,YAAY,UAAU,CAAA;AAEnC;;GAEG;AACH,OAAO,EAAE,SAAS,IAAI,cAAc,EAAE,CAAA;AAEtC;;GAEG;AACH,MAAM,WAAW,SAAS;IACzB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,uCAAuC;IACvC,SAAS,EAAE,SAAS,CAAA;IACpB,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,SAAS,CAAA;IACrB,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,173 +1,316 @@
1
- import { BSM, BigNumber, Script, Signature, SignedMessage, Utils, } from '@bsv/sdk';
2
- import { Algorithm } from 'sigma-protocol';
1
+ import { BSM, BigNumber, Hash, OP, Script, Signature, SignedMessage, Transaction, Utils, } from '@bsv/sdk';
3
2
  import BitCom from './bitcom.js';
4
- /**
5
- * SIGMA protocol identifier
6
- */
3
+ const { magicHash } = BSM;
4
+ const { toHex, toArray, toUTF8, toBase64 } = Utils;
7
5
  export const SIGMA_PREFIX = 'SIGMA';
6
+ export const sigmaHex = '5349474d41';
7
+ export var SigmaAlgorithm;
8
+ (function (SigmaAlgorithm) {
9
+ SigmaAlgorithm["BSM"] = "BSM";
10
+ SigmaAlgorithm["BRC77"] = "BRC77";
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
+ }
8
61
  /**
9
- * Re-export Algorithm from sigma-protocol for consistency
10
- */
11
- export { Algorithm as SigmaAlgorithm };
12
- /**
13
- * SIGMA (Secure Identity for Global Message Authentication) implementation
62
+ * SIGMA (Secure Identity for Global Message Authentication)
14
63
  *
15
- * SIGMA enables cryptographic signing of blockchain content by combining:
16
- * - Input hash: SHA256 of the outpoint (txid + vout) from a specific input
17
- * - 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.
18
67
  *
19
- * 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.
20
70
  */
21
71
  export default class Sigma {
22
72
  data;
23
73
  constructor(data) {
24
74
  this.data = data;
25
75
  }
26
- /**
27
- * Extract SIGMA signatures from BitCom transaction
28
- */
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
+ }
29
240
  static decode(bitcom) {
30
241
  const sigmas = [];
31
- if (bitcom?.protocols?.length === 0) {
242
+ if (!bitcom?.protocols?.length)
32
243
  return sigmas;
33
- }
34
244
  for (let protoIdx = 0; protoIdx < bitcom.protocols.length; protoIdx++) {
35
245
  const protocol = bitcom.protocols[protoIdx];
36
246
  if (protocol.protocol === SIGMA_PREFIX) {
37
247
  try {
38
- const script = Script.fromBinary(protocol.script);
39
- const chunks = script.chunks;
40
- if (chunks?.length < 4) {
248
+ const chunks = Script.fromBinary(protocol.script).chunks;
249
+ if (chunks?.length < 4)
41
250
  continue;
42
- }
43
- const sigma = new Sigma({
251
+ sigmas.push(new Sigma({
44
252
  bitcomIndex: protoIdx,
45
- algorithm: Utils.toUTF8(chunks[0].data ?? []),
46
- address: Utils.toUTF8(chunks[1].data ?? []),
253
+ algorithm: toUTF8(chunks[0].data ?? []),
254
+ address: toUTF8(chunks[1].data ?? []),
47
255
  signature: Array.from(chunks[2].data ?? []),
48
- vin: Number.parseInt(Utils.toUTF8(chunks[3].data ?? []), 10),
256
+ vin: Number.parseInt(toUTF8(chunks[3].data ?? []), 10),
49
257
  valid: undefined,
50
- });
51
- sigmas.push(sigma);
258
+ }));
52
259
  }
53
260
  catch { }
54
261
  }
55
262
  }
56
263
  return sigmas;
57
264
  }
58
- /**
59
- * Decode SIGMA signatures directly from a Script
60
- */
61
265
  static decodeFromScript(script) {
62
266
  const bitcom = BitCom.decode(script);
63
- if (bitcom == null) {
267
+ if (bitcom == null)
64
268
  return [];
65
- }
66
269
  return Sigma.decode(bitcom);
67
270
  }
68
- /**
69
- * Create SIGMA signature for data
70
- *
71
- * @param inputHash - SHA256 hash of the input outpoint
72
- * @param dataHash - SHA256 hash of the script data
73
- * @param privateKey - Private key for signing
74
- * @param options - Additional signing options
75
- */
76
- static sign(inputHash, dataHash, privateKey, options = {}) {
77
- const algorithm = options.algorithm ?? Algorithm.BSM;
271
+ static createSignature(inputHash, dataHash, privateKey, options = {}) {
272
+ const algorithm = options.algorithm ?? SigmaAlgorithm.BSM;
78
273
  const vin = options.vin ?? 0;
79
274
  const address = privateKey.toAddress().toString();
80
- // Combine hashes to create message (same as sigma-protocol)
81
275
  const messageHash = [...inputHash, ...dataHash];
82
276
  let signatureArray;
83
- if (algorithm === Algorithm.BRC77) {
84
- // BRC-77 signing using SignedMessage
85
- const brc77Sig = SignedMessage.sign(messageHash, privateKey, options.verifier);
86
- signatureArray = brc77Sig;
277
+ if (algorithm === SigmaAlgorithm.BRC77) {
278
+ signatureArray = SignedMessage.sign(messageHash, privateKey, options.verifier);
87
279
  }
88
280
  else {
89
- // BSM signing
90
281
  const sig = BSM.sign(messageHash, privateKey, 'raw');
91
- const magicHashValue = BSM.magicHash(messageHash);
92
- const recoveryFactor = sig.CalculateRecoveryFactor(privateKey.toPublicKey(), new BigNumber(magicHashValue));
93
- const compactSig = sig.toCompact(recoveryFactor, true, 'base64');
94
- 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'));
95
284
  }
96
- return new Sigma({
97
- algorithm,
98
- address,
99
- signature: signatureArray,
100
- vin,
101
- valid: true,
102
- });
103
- }
104
- /**
105
- * Verify SIGMA signature against provided hashes
106
- *
107
- * @param inputHash - SHA256 hash of the input outpoint
108
- * @param dataHash - SHA256 hash of the script data
109
- * @param recipientPrivateKey - For BRC-77 private signatures, the recipient's key
110
- */
285
+ return new Sigma({ algorithm, address, signature: signatureArray, vin, valid: true });
286
+ }
287
+ verify() {
288
+ return this.data.valid === true;
289
+ }
111
290
  verifyWithHashes(inputHash, dataHash, recipientPrivateKey) {
112
291
  try {
113
292
  const messageHash = [...inputHash, ...dataHash];
114
- if (this.data.algorithm === Algorithm.BRC77) {
115
- // BRC-77 verification using SignedMessage
293
+ if (this.data.algorithm === SigmaAlgorithm.BRC77) {
116
294
  this.data.valid = SignedMessage.verify(messageHash, this.data.signature, recipientPrivateKey);
117
295
  return this.data.valid;
118
296
  }
119
- // BSM verification
120
- const signatureBase64 = Utils.toBase64(this.data.signature);
121
- const sig = Signature.fromCompact(signatureBase64, 'base64');
122
- for (let recovery = 0; recovery < 4; recovery++) {
123
- try {
124
- const publicKey = sig.RecoverPublicKey(recovery, new BigNumber(BSM.magicHash(messageHash)));
125
- if (BSM.verify(messageHash, sig, publicKey) &&
126
- publicKey.toAddress().toString() === this.data.address) {
127
- this.data.valid = true;
128
- return true;
129
- }
130
- }
131
- catch {
132
- // Try next recovery factor
133
- }
134
- }
135
- this.data.valid = false;
136
- 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;
137
300
  }
138
301
  catch {
139
302
  this.data.valid = false;
140
303
  return false;
141
304
  }
142
305
  }
143
- /**
144
- * Check if signature was previously verified
145
- */
146
- verify() {
147
- return this.data.valid === true;
148
- }
149
- /**
150
- * Generate locking script for SIGMA within BitCom
151
- */
152
306
  lock() {
153
307
  const script = new Script();
154
- script.writeBin(Utils.toArray(this.data.algorithm, 'utf8'));
155
- script.writeBin(Utils.toArray(this.data.address, 'utf8'));
308
+ script.writeBin(toArray(this.data.algorithm, 'utf8'));
309
+ script.writeBin(toArray(this.data.address, 'utf8'));
156
310
  script.writeBin(this.data.signature);
157
- script.writeBin(Utils.toArray(this.data.vin.toString(), 'utf8'));
158
- const protocols = [
159
- {
160
- protocol: SIGMA_PREFIX,
161
- script: script.toBinary(),
162
- pos: 0,
163
- },
164
- ];
165
- const bitcom = new BitCom(protocols);
166
- return bitcom.lock();
167
- }
168
- /**
169
- * Unlock method is not available for SIGMA scripts
170
- */
311
+ script.writeBin(toArray(this.data.vin.toString(), 'utf8'));
312
+ return new BitCom([{ protocol: SIGMA_PREFIX, script: script.toBinary(), pos: 0 }]).lock();
313
+ }
171
314
  unlock() {
172
315
  throw new Error('SIGMA signatures cannot be unlocked');
173
316
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sigma.js","sourceRoot":"","sources":["../../src/bitcom/sigma.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,GAAG,EACH,SAAS,EAIT,MAAM,EAEN,SAAS,EACT,aAAa,EAGb,KAAK,GACL,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,MAA6C,MAAM,aAAa,CAAA;AAEvE;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAA;AAEnC;;GAEG;AACH,OAAO,EAAE,SAAS,IAAI,cAAc,EAAE,CAAA;AAgCtC;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,OAAO,KAAK;IACT,IAAI,CAAW;IAE/B,YAAY,IAAe;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IACjB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,MAAqB;QAClC,MAAM,MAAM,GAAY,EAAE,CAAA;QAE1B,IAAI,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,OAAO,MAAM,CAAA;QACd,CAAC;QAED,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,CAAA;oBACjD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;oBAE5B,IAAI,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;wBACxB,SAAQ;oBACT,CAAC;oBAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;wBACvB,WAAW,EAAE,QAAQ;wBACrB,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAc;wBAC1D,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;wBAC3C,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;wBAC3C,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC5D,KAAK,EAAE,SAAS;qBAChB,CAAC,CAAA;oBAEF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACnB,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACX,CAAC;QACF,CAAC;QAED,OAAO,MAAM,CAAA;IACd,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAA8B;QACrD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACpC,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YACpB,OAAO,EAAE,CAAA;QACV,CAAC;QACD,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC5B,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,IAAI,CACV,SAAmB,EACnB,QAAkB,EAClB,UAAsB,EACtB,UAAwB,EAAE;QAE1B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,SAAS,CAAC,GAAG,CAAA;QACpD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAA;QAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAA;QAEjD,4DAA4D;QAC5D,MAAM,WAAW,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,QAAQ,CAAC,CAAA;QAE/C,IAAI,cAAwB,CAAA;QAE5B,IAAI,SAAS,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC;YACnC,qCAAqC;YACrC,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAClC,WAAW,EACX,UAAU,EACV,OAAO,CAAC,QAAQ,CAChB,CAAA;YACD,cAAc,GAAG,QAAQ,CAAA;QAC1B,CAAC;aAAM,CAAC;YACP,cAAc;YACd,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,KAAK,CAAc,CAAA;YACjE,MAAM,cAAc,GAAG,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;YACjD,MAAM,cAAc,GAAG,GAAG,CAAC,uBAAuB,CACjD,UAAU,CAAC,WAAW,EAAE,EACxB,IAAI,SAAS,CAAC,cAAc,CAAC,CAC7B,CAAA;YACD,MAAM,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,QAAQ,CAAW,CAAA;YAC1E,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAA;QACjE,CAAC;QAED,OAAO,IAAI,KAAK,CAAC;YAChB,SAAS;YACT,OAAO;YACP,SAAS,EAAE,cAAc;YACzB,GAAG;YACH,KAAK,EAAE,IAAI;SACX,CAAC,CAAA;IACH,CAAC;IAED;;;;;;OAMG;IACH,gBAAgB,CACf,SAAmB,EACnB,QAAkB,EAClB,mBAAgC;QAEhC,IAAI,CAAC;YACJ,MAAM,WAAW,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,QAAQ,CAAC,CAAA;YAE/C,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC;gBAC7C,0CAA0C;gBAC1C,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,MAAM,CACrC,WAAW,EACX,IAAI,CAAC,IAAI,CAAC,SAAS,EACnB,mBAAmB,CACnB,CAAA;gBACD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA;YACvB,CAAC;YAED,mBAAmB;YACnB,MAAM,eAAe,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAC3D,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAA;YAE5D,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC;gBACjD,IAAI,CAAC;oBACJ,MAAM,SAAS,GAAG,GAAG,CAAC,gBAAgB,CACrC,QAAQ,EACR,IAAI,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CACzC,CAAA;oBACD,IACC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,EAAE,SAAS,CAAC;wBACvC,SAAS,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,EACrD,CAAC;wBACF,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;wBACtB,OAAO,IAAI,CAAA;oBACZ,CAAC;gBACF,CAAC;gBAAC,MAAM,CAAC;oBACR,2BAA2B;gBAC5B,CAAC;YACF,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;YACvB,OAAO,KAAK,CAAA;QACb,CAAC;QAAC,MAAM,CAAC;YACR,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;YACvB,OAAO,KAAK,CAAA;QACb,CAAC;IACF,CAAC;IAED;;OAEG;IACH,MAAM;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAA;IAChC,CAAC;IAED;;OAEG;IACH,IAAI;QACH,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAA;QAE3B,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;QAC3D,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAA;QACzD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACpC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC,CAAA;QAEhE,MAAM,SAAS,GAAe;YAC7B;gBACC,QAAQ,EAAE,YAAY;gBACtB,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE;gBACzB,GAAG,EAAE,CAAC;aACN;SACD,CAAA;QAED,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,CAAA;QACpC,OAAO,MAAM,CAAC,IAAI,EAAE,CAAA;IACrB,CAAC;IAED;;OAEG;IACH,MAAM;QAIL,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;IACvD,CAAC;CACD"}
1
+ {"version":3,"file":"sigma.js","sourceRoot":"","sources":["../../src/bitcom/sigma.ts"],"names":[],"mappings":"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"}
@@ -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.3",
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",
@@ -27,17 +27,10 @@
27
27
  "@1sat/types": "0.0.14"
28
28
  },
29
29
  "peerDependencies": {
30
- "@bsv/sdk": "^2.0.6",
31
- "sigma-protocol": "^0.1.9"
30
+ "@bsv/sdk": "^2.0.6"
32
31
  },
33
- "peerDependenciesMeta": {
34
- "sigma-protocol": {
35
- "optional": true
32
+ "devDependencies": {
33
+ "@bsv/sdk": "^2.0.6",
34
+ "typescript": "^5.9.3"
36
35
  }
37
- },
38
- "devDependencies": {
39
- "@bsv/sdk": "^2.0.6",
40
- "sigma-protocol": "^0.1.9",
41
- "typescript": "^5.9.3"
42
- }
43
36
  }