@windstack/crypto 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +44 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +318 -0
- package/dist/index.js.map +1 -0
- package/package.json +57 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 PT WIND KRIPTOGRAFI TEKNOLOGI
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# @windstack/crypto
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
`@windstack/crypto` provides K1 and R1 key handling for WindStack and Vexanium applications. It supports private keys, public keys, recoverable signatures, signature verification, public-key recovery, current Antelope key encodings, and compatibility with older K1 key encodings used by existing Vexanium accounts and node software.
|
|
6
|
+
|
|
7
|
+
The public API is based on `Uint8Array`. Elliptic-curve and hashing primitives are provided by the Noble libraries.
|
|
8
|
+
|
|
9
|
+
## Installation
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install @windstack/crypto
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Usage
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import { PrivateKey, sha256Digest } from "@windstack/crypto";
|
|
19
|
+
|
|
20
|
+
const privateKey = PrivateKey.fromString("PVT_K1_...");
|
|
21
|
+
const publicKey = privateKey.toPublicKey();
|
|
22
|
+
const digest = sha256Digest(new TextEncoder().encode("WindStack"));
|
|
23
|
+
const signature = privateKey.signDigest(digest);
|
|
24
|
+
|
|
25
|
+
console.log(signature.toString());
|
|
26
|
+
console.log(signature.verifyDigest(digest, publicKey));
|
|
27
|
+
console.log(signature.recoverDigest(digest).equals(publicKey));
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
K1 signatures are emitted in the canonical compact form required by Vexanium-compatible transaction signing. Existing K1 private and public keys can be imported through the compatibility parsers without changing their key material.
|
|
31
|
+
|
|
32
|
+
## Runtime
|
|
33
|
+
|
|
34
|
+
The package is ESM-first and requires Node.js 20.19 or newer when used directly in Node.js. Browser and React Native environments must provide secure platform randomness for key generation. Existing keys can be imported with `PrivateKey.fromString()` or `PrivateKey.fromBytes()`.
|
|
35
|
+
|
|
36
|
+
## Security
|
|
37
|
+
|
|
38
|
+
Private keys should be held by an appropriate secure storage or signing boundary. Digest signing accepts exactly 32 bytes, and application logs should never contain private-key material.
|
|
39
|
+
|
|
40
|
+
## License
|
|
41
|
+
|
|
42
|
+
MIT License.
|
|
43
|
+
|
|
44
|
+
Created by **Gilang Ramadan**. Copyright © 2026 PT WIND KRIPTOGRAFI TEKNOLOGI.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export type KeyType = "K1" | "R1";
|
|
2
|
+
export declare function concatBytes(...parts: Uint8Array[]): Uint8Array;
|
|
3
|
+
export declare function bytesToHex(bytes: Uint8Array): string;
|
|
4
|
+
export declare function hexToBytes(hex: string): Uint8Array;
|
|
5
|
+
export declare function sha256Digest(data: Uint8Array): Uint8Array;
|
|
6
|
+
export declare class PublicKey {
|
|
7
|
+
#private;
|
|
8
|
+
readonly type: KeyType;
|
|
9
|
+
private constructor();
|
|
10
|
+
static fromBytes(type: KeyType, data: Uint8Array): PublicKey;
|
|
11
|
+
static fromString(value: string): PublicKey;
|
|
12
|
+
toBytes(): Uint8Array;
|
|
13
|
+
toString(): string;
|
|
14
|
+
toLegacyString(): string;
|
|
15
|
+
equals(other: PublicKey): boolean;
|
|
16
|
+
verifyDigest(digest: Uint8Array, signature: Signature): boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare class Signature {
|
|
19
|
+
#private;
|
|
20
|
+
readonly type: KeyType;
|
|
21
|
+
private constructor();
|
|
22
|
+
static fromBytes(type: KeyType, data: Uint8Array): Signature;
|
|
23
|
+
static fromString(value: string): Signature;
|
|
24
|
+
toBytes(): Uint8Array;
|
|
25
|
+
toString(): string;
|
|
26
|
+
isCanonical(): boolean;
|
|
27
|
+
verifyDigest(digest: Uint8Array, publicKey: PublicKey): boolean;
|
|
28
|
+
recoverDigest(digest: Uint8Array): PublicKey;
|
|
29
|
+
}
|
|
30
|
+
export declare class PrivateKey {
|
|
31
|
+
#private;
|
|
32
|
+
readonly type: KeyType;
|
|
33
|
+
private constructor();
|
|
34
|
+
static fromBytes(type: KeyType, data: Uint8Array): PrivateKey;
|
|
35
|
+
static generate(type?: KeyType): PrivateKey;
|
|
36
|
+
static fromString(value: string): PrivateKey;
|
|
37
|
+
toBytes(): Uint8Array;
|
|
38
|
+
toString(): string;
|
|
39
|
+
toWif(): string;
|
|
40
|
+
toPublicKey(): PublicKey;
|
|
41
|
+
signDigest(digest: Uint8Array): Signature;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;AAiDlC,wBAAgB,WAAW,CAAC,GAAG,KAAK,EAAE,UAAU,EAAE,GAAG,UAAU,CAQ9D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEpD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAMlD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAEzD;AA2DD,qBAAa,SAAS;;IACpB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAGvB,OAAO,eAQN;IAED,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,GAAG,SAAS,CAE3D;IAED,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAgB1C;IAED,OAAO,IAAI,UAAU,CAEpB;IAED,QAAQ,IAAI,MAAM,CAEjB;IAED,cAAc,IAAI,MAAM,CAGvB;IAED,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAEhC;IAED,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAE9D;CACF;AAED,qBAAa,SAAS;;IACpB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAGvB,OAAO,eAeN;IAED,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,GAAG,SAAS,CAE3D;IAED,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAK1C;IAED,OAAO,IAAI,UAAU,CAEpB;IAED,QAAQ,IAAI,MAAM,CAEjB;IAED,WAAW,IAAI,OAAO,CAErB;IAED,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAY9D;IAED,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAQ3C;CACF;AAED,qBAAa,UAAU;;IACrB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAGvB,OAAO,eAQN;IAED,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,CAE5D;IAED,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAE,OAAc,GAAG,UAAU,CAEhD;IAED,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAiB3C;IAED,OAAO,IAAI,UAAU,CAEpB;IAED,QAAQ,IAAI,MAAM,CAEjB;IAED,KAAK,IAAI,MAAM,CAId;IAED,WAAW,IAAI,SAAS,CAEvB;IAED,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAqBxC;CACF"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WindStack Antelope SDK
|
|
3
|
+
* Created by Gilang Ramadan
|
|
4
|
+
* Copyright (c) 2026 PT WIND KRIPTOGRAFI TEKNOLOGI
|
|
5
|
+
* SPDX-License-Identifier: MIT
|
|
6
|
+
*/
|
|
7
|
+
import { p256 } from "@noble/curves/nist.js";
|
|
8
|
+
import { secp256k1 } from "@noble/curves/secp256k1.js";
|
|
9
|
+
import { ripemd160 } from "@noble/hashes/legacy.js";
|
|
10
|
+
import { sha256 } from "@noble/hashes/sha2.js";
|
|
11
|
+
const BASE58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
|
12
|
+
const encoder = new TextEncoder();
|
|
13
|
+
function curveFor(type) {
|
|
14
|
+
return type === "K1" ? secp256k1 : p256;
|
|
15
|
+
}
|
|
16
|
+
function assertKeyType(type) {
|
|
17
|
+
if (type !== "K1" && type !== "R1")
|
|
18
|
+
throw new TypeError(`Unsupported Antelope key type: ${String(type)}`);
|
|
19
|
+
}
|
|
20
|
+
function assertBytes(value, length, label) {
|
|
21
|
+
if (!(value instanceof Uint8Array) || value.length !== length) {
|
|
22
|
+
throw new TypeError(`${label} must be ${length} bytes`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function equalBytes(a, b) {
|
|
26
|
+
if (a.length !== b.length)
|
|
27
|
+
return false;
|
|
28
|
+
let diff = 0;
|
|
29
|
+
for (let index = 0; index < a.length; index += 1) {
|
|
30
|
+
diff |= a[index] ^ b[index];
|
|
31
|
+
}
|
|
32
|
+
return diff === 0;
|
|
33
|
+
}
|
|
34
|
+
function uint32Bytes(value) {
|
|
35
|
+
const bytes = new Uint8Array(4);
|
|
36
|
+
new DataView(bytes.buffer).setUint32(0, value >>> 0, true);
|
|
37
|
+
return bytes;
|
|
38
|
+
}
|
|
39
|
+
function isCanonicalCompact(compact) {
|
|
40
|
+
if (compact.length !== 64)
|
|
41
|
+
return false;
|
|
42
|
+
const r0 = compact[0];
|
|
43
|
+
const r1 = compact[1];
|
|
44
|
+
const s0 = compact[32];
|
|
45
|
+
const s1 = compact[33];
|
|
46
|
+
return ((r0 & 0x80) === 0 &&
|
|
47
|
+
!(r0 === 0 && (r1 & 0x80) === 0) &&
|
|
48
|
+
(s0 & 0x80) === 0 &&
|
|
49
|
+
!(s0 === 0 && (s1 & 0x80) === 0));
|
|
50
|
+
}
|
|
51
|
+
export function concatBytes(...parts) {
|
|
52
|
+
const out = new Uint8Array(parts.reduce((sum, part) => sum + part.length, 0));
|
|
53
|
+
let offset = 0;
|
|
54
|
+
for (const part of parts) {
|
|
55
|
+
out.set(part, offset);
|
|
56
|
+
offset += part.length;
|
|
57
|
+
}
|
|
58
|
+
return out;
|
|
59
|
+
}
|
|
60
|
+
export function bytesToHex(bytes) {
|
|
61
|
+
return Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
62
|
+
}
|
|
63
|
+
export function hexToBytes(hex) {
|
|
64
|
+
const normalized = hex.startsWith("0x") ? hex.slice(2) : hex;
|
|
65
|
+
if (!/^[0-9a-f]*$/i.test(normalized) || normalized.length % 2 !== 0) {
|
|
66
|
+
throw new TypeError("Invalid hexadecimal value");
|
|
67
|
+
}
|
|
68
|
+
return Uint8Array.from(normalized.match(/.{2}/g)?.map((pair) => Number.parseInt(pair, 16)) ?? []);
|
|
69
|
+
}
|
|
70
|
+
export function sha256Digest(data) {
|
|
71
|
+
return sha256(data);
|
|
72
|
+
}
|
|
73
|
+
function base58Encode(bytes) {
|
|
74
|
+
if (bytes.length === 0)
|
|
75
|
+
return "";
|
|
76
|
+
let value = 0n;
|
|
77
|
+
for (const byte of bytes)
|
|
78
|
+
value = (value << 8n) | BigInt(byte);
|
|
79
|
+
let out = "";
|
|
80
|
+
while (value > 0n) {
|
|
81
|
+
const mod = Number(value % 58n);
|
|
82
|
+
out = BASE58[mod] + out;
|
|
83
|
+
value /= 58n;
|
|
84
|
+
}
|
|
85
|
+
for (const byte of bytes) {
|
|
86
|
+
if (byte !== 0)
|
|
87
|
+
break;
|
|
88
|
+
out = `1${out}`;
|
|
89
|
+
}
|
|
90
|
+
return out;
|
|
91
|
+
}
|
|
92
|
+
function base58Decode(value) {
|
|
93
|
+
if (!value)
|
|
94
|
+
throw new TypeError("Base58 value cannot be empty");
|
|
95
|
+
let number = 0n;
|
|
96
|
+
for (const char of value) {
|
|
97
|
+
const index = BASE58.indexOf(char);
|
|
98
|
+
if (index < 0)
|
|
99
|
+
throw new TypeError(`Invalid base58 character: ${char}`);
|
|
100
|
+
number = number * 58n + BigInt(index);
|
|
101
|
+
}
|
|
102
|
+
const bytes = [];
|
|
103
|
+
while (number > 0n) {
|
|
104
|
+
bytes.unshift(Number(number & 0xffn));
|
|
105
|
+
number >>= 8n;
|
|
106
|
+
}
|
|
107
|
+
for (const char of value) {
|
|
108
|
+
if (char !== "1")
|
|
109
|
+
break;
|
|
110
|
+
bytes.unshift(0);
|
|
111
|
+
}
|
|
112
|
+
return Uint8Array.from(bytes);
|
|
113
|
+
}
|
|
114
|
+
function ripemdChecksum(data, suffix) {
|
|
115
|
+
const payload = suffix ? concatBytes(data, encoder.encode(suffix)) : data;
|
|
116
|
+
return ripemd160(payload).slice(0, 4);
|
|
117
|
+
}
|
|
118
|
+
function encodeModern(data, type) {
|
|
119
|
+
return base58Encode(concatBytes(data, ripemdChecksum(data, type)));
|
|
120
|
+
}
|
|
121
|
+
function decodeModern(value, type) {
|
|
122
|
+
const decoded = base58Decode(value);
|
|
123
|
+
if (decoded.length < 5)
|
|
124
|
+
throw new TypeError("Invalid Antelope encoded value");
|
|
125
|
+
const data = decoded.slice(0, -4);
|
|
126
|
+
const checksum = decoded.slice(-4);
|
|
127
|
+
if (!equalBytes(checksum, ripemdChecksum(data, type))) {
|
|
128
|
+
throw new TypeError("Antelope checksum mismatch");
|
|
129
|
+
}
|
|
130
|
+
return data;
|
|
131
|
+
}
|
|
132
|
+
export class PublicKey {
|
|
133
|
+
type;
|
|
134
|
+
#data;
|
|
135
|
+
constructor(type, data) {
|
|
136
|
+
assertKeyType(type);
|
|
137
|
+
assertBytes(data, 33, "Public key");
|
|
138
|
+
if (!curveFor(type).utils.isValidPublicKey(data)) {
|
|
139
|
+
throw new TypeError(`Invalid ${type} public key`);
|
|
140
|
+
}
|
|
141
|
+
this.type = type;
|
|
142
|
+
this.#data = data.slice();
|
|
143
|
+
}
|
|
144
|
+
static fromBytes(type, data) {
|
|
145
|
+
return new PublicKey(type, data);
|
|
146
|
+
}
|
|
147
|
+
static fromString(value) {
|
|
148
|
+
const modern = /^PUB_(K1|R1)_(.+)$/.exec(value);
|
|
149
|
+
if (modern) {
|
|
150
|
+
const type = modern[1];
|
|
151
|
+
return new PublicKey(type, decodeModern(modern[2], type));
|
|
152
|
+
}
|
|
153
|
+
if (value.startsWith("EOS")) {
|
|
154
|
+
const decoded = base58Decode(value.slice(3));
|
|
155
|
+
if (decoded.length !== 37)
|
|
156
|
+
throw new TypeError("Invalid legacy EOS public key length");
|
|
157
|
+
const data = decoded.slice(0, -4);
|
|
158
|
+
if (!equalBytes(decoded.slice(-4), ripemdChecksum(data))) {
|
|
159
|
+
throw new TypeError("Legacy EOS public-key checksum mismatch");
|
|
160
|
+
}
|
|
161
|
+
return new PublicKey("K1", data);
|
|
162
|
+
}
|
|
163
|
+
throw new TypeError("Unsupported Antelope public-key format");
|
|
164
|
+
}
|
|
165
|
+
toBytes() {
|
|
166
|
+
return this.#data.slice();
|
|
167
|
+
}
|
|
168
|
+
toString() {
|
|
169
|
+
return `PUB_${this.type}_${encodeModern(this.#data, this.type)}`;
|
|
170
|
+
}
|
|
171
|
+
toLegacyString() {
|
|
172
|
+
if (this.type !== "K1")
|
|
173
|
+
throw new TypeError("Legacy EOS public keys only support K1");
|
|
174
|
+
return `EOS${base58Encode(concatBytes(this.#data, ripemdChecksum(this.#data)))}`;
|
|
175
|
+
}
|
|
176
|
+
equals(other) {
|
|
177
|
+
return this.type === other.type && equalBytes(this.#data, other.#data);
|
|
178
|
+
}
|
|
179
|
+
verifyDigest(digest, signature) {
|
|
180
|
+
return signature.verifyDigest(digest, this);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
export class Signature {
|
|
184
|
+
type;
|
|
185
|
+
#data;
|
|
186
|
+
constructor(type, data) {
|
|
187
|
+
assertKeyType(type);
|
|
188
|
+
assertBytes(data, 65, "Signature");
|
|
189
|
+
if (data[0] < 31 || data[0] > 34) {
|
|
190
|
+
throw new TypeError("Invalid Antelope recovery header");
|
|
191
|
+
}
|
|
192
|
+
try {
|
|
193
|
+
const parsed = curveFor(type).Signature.fromBytes(data.slice(1), "compact");
|
|
194
|
+
if (parsed.hasHighS())
|
|
195
|
+
throw new TypeError("Antelope signatures must use low-S form");
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
if (error instanceof TypeError && error.message.includes("low-S"))
|
|
199
|
+
throw error;
|
|
200
|
+
throw new TypeError(`Invalid ${type} compact signature`);
|
|
201
|
+
}
|
|
202
|
+
this.type = type;
|
|
203
|
+
this.#data = data.slice();
|
|
204
|
+
}
|
|
205
|
+
static fromBytes(type, data) {
|
|
206
|
+
return new Signature(type, data);
|
|
207
|
+
}
|
|
208
|
+
static fromString(value) {
|
|
209
|
+
const match = /^SIG_(K1|R1)_(.+)$/.exec(value);
|
|
210
|
+
if (!match)
|
|
211
|
+
throw new TypeError("Unsupported Antelope signature format");
|
|
212
|
+
const type = match[1];
|
|
213
|
+
return new Signature(type, decodeModern(match[2], type));
|
|
214
|
+
}
|
|
215
|
+
toBytes() {
|
|
216
|
+
return this.#data.slice();
|
|
217
|
+
}
|
|
218
|
+
toString() {
|
|
219
|
+
return `SIG_${this.type}_${encodeModern(this.#data, this.type)}`;
|
|
220
|
+
}
|
|
221
|
+
isCanonical() {
|
|
222
|
+
return this.type !== "K1" || isCanonicalCompact(this.#data.slice(1));
|
|
223
|
+
}
|
|
224
|
+
verifyDigest(digest, publicKey) {
|
|
225
|
+
assertBytes(digest, 32, "Digest");
|
|
226
|
+
if (publicKey.type !== this.type)
|
|
227
|
+
return false;
|
|
228
|
+
try {
|
|
229
|
+
return curveFor(this.type).verify(this.#data.slice(1), digest, publicKey.toBytes(), {
|
|
230
|
+
prehash: false,
|
|
231
|
+
lowS: true,
|
|
232
|
+
format: "compact",
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
recoverDigest(digest) {
|
|
240
|
+
assertBytes(digest, 32, "Digest");
|
|
241
|
+
const recovered = this.#data.slice();
|
|
242
|
+
recovered[0] = recovered[0] - 31;
|
|
243
|
+
return PublicKey.fromBytes(this.type, curveFor(this.type).recoverPublicKey(recovered, digest, { prehash: false }));
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
export class PrivateKey {
|
|
247
|
+
type;
|
|
248
|
+
#data;
|
|
249
|
+
constructor(type, data) {
|
|
250
|
+
assertKeyType(type);
|
|
251
|
+
assertBytes(data, 32, "Private key");
|
|
252
|
+
if (!curveFor(type).utils.isValidSecretKey(data)) {
|
|
253
|
+
throw new TypeError(`Invalid ${type} private key`);
|
|
254
|
+
}
|
|
255
|
+
this.type = type;
|
|
256
|
+
this.#data = data.slice();
|
|
257
|
+
}
|
|
258
|
+
static fromBytes(type, data) {
|
|
259
|
+
return new PrivateKey(type, data);
|
|
260
|
+
}
|
|
261
|
+
static generate(type = "K1") {
|
|
262
|
+
return new PrivateKey(type, curveFor(type).keygen().secretKey);
|
|
263
|
+
}
|
|
264
|
+
static fromString(value) {
|
|
265
|
+
const modern = /^PVT_(K1|R1)_(.+)$/.exec(value);
|
|
266
|
+
if (modern) {
|
|
267
|
+
const type = modern[1];
|
|
268
|
+
return new PrivateKey(type, decodeModern(modern[2], type));
|
|
269
|
+
}
|
|
270
|
+
const decoded = base58Decode(value);
|
|
271
|
+
if (decoded.length === 37 && decoded[0] === 0x80) {
|
|
272
|
+
const payload = decoded.slice(0, -4);
|
|
273
|
+
const checksum = sha256(sha256(payload)).slice(0, 4);
|
|
274
|
+
if (!equalBytes(decoded.slice(-4), checksum)) {
|
|
275
|
+
throw new TypeError("Legacy WIF checksum mismatch");
|
|
276
|
+
}
|
|
277
|
+
return new PrivateKey("K1", payload.slice(1));
|
|
278
|
+
}
|
|
279
|
+
throw new TypeError("Unsupported Antelope private-key format");
|
|
280
|
+
}
|
|
281
|
+
toBytes() {
|
|
282
|
+
return this.#data.slice();
|
|
283
|
+
}
|
|
284
|
+
toString() {
|
|
285
|
+
return `PVT_${this.type}_${encodeModern(this.#data, this.type)}`;
|
|
286
|
+
}
|
|
287
|
+
toWif() {
|
|
288
|
+
if (this.type !== "K1")
|
|
289
|
+
throw new TypeError("Legacy WIF only supports K1");
|
|
290
|
+
const payload = concatBytes(Uint8Array.of(0x80), this.#data);
|
|
291
|
+
return base58Encode(concatBytes(payload, sha256(sha256(payload)).slice(0, 4)));
|
|
292
|
+
}
|
|
293
|
+
toPublicKey() {
|
|
294
|
+
return PublicKey.fromBytes(this.type, curveFor(this.type).getPublicKey(this.#data, true));
|
|
295
|
+
}
|
|
296
|
+
signDigest(digest) {
|
|
297
|
+
assertBytes(digest, 32, "Digest");
|
|
298
|
+
const curve = curveFor(this.type);
|
|
299
|
+
for (let attempt = 0; attempt < 1024; attempt += 1) {
|
|
300
|
+
const options = {
|
|
301
|
+
prehash: false,
|
|
302
|
+
lowS: true,
|
|
303
|
+
format: "recovered",
|
|
304
|
+
...(attempt === 0
|
|
305
|
+
? {}
|
|
306
|
+
: { extraEntropy: sha256(concatBytes(digest, uint32Bytes(attempt))) }),
|
|
307
|
+
};
|
|
308
|
+
const recovered = curve.sign(digest, this.#data, options);
|
|
309
|
+
if (this.type === "K1" && !isCanonicalCompact(recovered.slice(1)))
|
|
310
|
+
continue;
|
|
311
|
+
const antelope = recovered.slice();
|
|
312
|
+
antelope[0] = antelope[0] + 31;
|
|
313
|
+
return Signature.fromBytes(this.type, antelope);
|
|
314
|
+
}
|
|
315
|
+
throw new Error("Unable to produce a canonical Antelope signature");
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@windstack/crypto",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Portable Antelope K1/R1 key and signature operations powered by Noble cryptography.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist",
|
|
16
|
+
"README.md",
|
|
17
|
+
"LICENSE",
|
|
18
|
+
"package.json"
|
|
19
|
+
],
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "tsc -p tsconfig.json",
|
|
22
|
+
"prepack": "npm run build"
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"@noble/curves": "^2.4.0",
|
|
26
|
+
"@noble/hashes": "^2.4.0"
|
|
27
|
+
},
|
|
28
|
+
"sideEffects": false,
|
|
29
|
+
"keywords": [
|
|
30
|
+
"windstack",
|
|
31
|
+
"vexanium",
|
|
32
|
+
"antelope",
|
|
33
|
+
"cryptography",
|
|
34
|
+
"secp256k1",
|
|
35
|
+
"p256",
|
|
36
|
+
"signatures",
|
|
37
|
+
"typescript"
|
|
38
|
+
],
|
|
39
|
+
"license": "MIT",
|
|
40
|
+
"author": "Gilang Ramadan",
|
|
41
|
+
"repository": {
|
|
42
|
+
"type": "git",
|
|
43
|
+
"url": "git+https://github.com/windvex/windstack-sdk.git",
|
|
44
|
+
"directory": "packages/crypto"
|
|
45
|
+
},
|
|
46
|
+
"homepage": "https://github.com/windvex/windstack-sdk/tree/main/packages/crypto#readme",
|
|
47
|
+
"bugs": {
|
|
48
|
+
"url": "https://github.com/windvex/windstack-sdk/issues"
|
|
49
|
+
},
|
|
50
|
+
"publishConfig": {
|
|
51
|
+
"access": "public",
|
|
52
|
+
"registry": "https://registry.npmjs.org/"
|
|
53
|
+
},
|
|
54
|
+
"engines": {
|
|
55
|
+
"node": ">=20.19.0"
|
|
56
|
+
}
|
|
57
|
+
}
|