@gjsify/webcrypto 0.4.0 → 0.4.3
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/package.json +53 -49
- package/src/crypto-key.ts +0 -226
- package/src/index.spec.ts +0 -1891
- package/src/index.ts +0 -101
- package/src/register.ts +0 -9
- package/src/subtle.ts +0 -755
- package/src/test.browser.mts +0 -110
- package/src/test.mts +0 -8
- package/src/util.ts +0 -153
- package/tsconfig.json +0 -30
- package/tsconfig.tsbuildinfo +0 -1
package/package.json
CHANGED
|
@@ -1,52 +1,56 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
2
|
+
"name": "@gjsify/webcrypto",
|
|
3
|
+
"version": "0.4.3",
|
|
4
|
+
"description": "W3C WebCrypto API (SubtleCrypto) for GJS using @gjsify/crypto primitives",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"module": "lib/esm/index.js",
|
|
7
|
+
"types": "lib/types/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./lib/types/index.d.ts",
|
|
11
|
+
"default": "./lib/esm/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./register": {
|
|
14
|
+
"types": "./lib/types/register.d.ts",
|
|
15
|
+
"default": "./lib/esm/register.js"
|
|
16
|
+
},
|
|
17
|
+
"./globals": "./globals.mjs"
|
|
12
18
|
},
|
|
13
|
-
"
|
|
14
|
-
|
|
15
|
-
|
|
19
|
+
"files": [
|
|
20
|
+
"lib",
|
|
21
|
+
"globals.mjs"
|
|
22
|
+
],
|
|
23
|
+
"sideEffects": [
|
|
24
|
+
"./lib/esm/register.js",
|
|
25
|
+
"./globals.mjs"
|
|
26
|
+
],
|
|
27
|
+
"scripts": {
|
|
28
|
+
"clear": "rm -rf lib tsconfig.tsbuildinfo tsconfig.types.tsbuildinfo test.gjs.mjs test.node.mjs || exit 0",
|
|
29
|
+
"check": "tsc --noEmit",
|
|
30
|
+
"build": "gjsify run build:gjsify && gjsify run build:types",
|
|
31
|
+
"build:gjsify": "gjsify build --library 'src/**/*.{ts,js}' --exclude 'src/**/*.spec.{mts,ts}' 'src/test.{mts,ts}'",
|
|
32
|
+
"build:types": "tsc",
|
|
33
|
+
"build:test": "gjsify run build:test:gjs && gjsify run build:test:node",
|
|
34
|
+
"build:test:gjs": "gjsify build src/test.mts --app gjs --outfile test.gjs.mjs",
|
|
35
|
+
"build:test:node": "gjsify build src/test.mts --app node --outfile test.node.mjs",
|
|
36
|
+
"build:test:browser": "gjsify build src/test.browser.mts --app browser --outfile dist/test.browser.mjs",
|
|
37
|
+
"test": "gjsify run build:gjsify && gjsify run build:test && gjsify run test:node",
|
|
38
|
+
"test:gjs": "gjsify run test.gjs.mjs",
|
|
39
|
+
"test:node": "node test.node.mjs"
|
|
16
40
|
},
|
|
17
|
-
"
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
"test": "yarn build:gjsify && yarn build:test && yarn test:node",
|
|
34
|
-
"test:gjs": "gjsify run test.gjs.mjs",
|
|
35
|
-
"test:node": "node test.node.mjs"
|
|
36
|
-
},
|
|
37
|
-
"keywords": [
|
|
38
|
-
"gjs",
|
|
39
|
-
"webcrypto",
|
|
40
|
-
"subtle",
|
|
41
|
-
"crypto"
|
|
42
|
-
],
|
|
43
|
-
"dependencies": {
|
|
44
|
-
"@gjsify/dom-exception": "^0.4.0"
|
|
45
|
-
},
|
|
46
|
-
"devDependencies": {
|
|
47
|
-
"@gjsify/cli": "^0.4.0",
|
|
48
|
-
"@gjsify/unit": "^0.4.0",
|
|
49
|
-
"@types/node": "^25.6.2",
|
|
50
|
-
"typescript": "^6.0.3"
|
|
51
|
-
}
|
|
52
|
-
}
|
|
41
|
+
"keywords": [
|
|
42
|
+
"gjs",
|
|
43
|
+
"webcrypto",
|
|
44
|
+
"subtle",
|
|
45
|
+
"crypto"
|
|
46
|
+
],
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"@gjsify/dom-exception": "workspace:^"
|
|
49
|
+
},
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"@gjsify/cli": "workspace:^",
|
|
52
|
+
"@gjsify/unit": "workspace:^",
|
|
53
|
+
"@types/node": "^25.6.2",
|
|
54
|
+
"typescript": "^6.0.3"
|
|
55
|
+
}
|
|
56
|
+
}
|
package/src/crypto-key.ts
DELETED
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
// W3C CryptoKey for GJS
|
|
2
|
-
// Reference: refs/deno/ext/crypto/00_crypto.js
|
|
3
|
-
// Copyright (c) 2018-2026 the Deno authors. MIT license.
|
|
4
|
-
// Reimplemented for GJS using @gjsify/crypto primitives.
|
|
5
|
-
|
|
6
|
-
export type KeyType = 'public' | 'private' | 'secret';
|
|
7
|
-
export type KeyUsage = 'encrypt' | 'decrypt' | 'sign' | 'verify' | 'deriveKey' | 'deriveBits' | 'wrapKey' | 'unwrapKey';
|
|
8
|
-
|
|
9
|
-
export interface KeyAlgorithm {
|
|
10
|
-
name: string;
|
|
11
|
-
[key: string]: unknown;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
// ---- Specific KeyAlgorithm sub-interfaces ----
|
|
15
|
-
|
|
16
|
-
export interface AesKeyAlgorithm extends KeyAlgorithm {
|
|
17
|
-
length: number;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export interface HmacKeyAlgorithm extends KeyAlgorithm {
|
|
21
|
-
hash: { name: string };
|
|
22
|
-
length: number;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export interface EcKeyAlgorithm extends KeyAlgorithm {
|
|
26
|
-
namedCurve: string;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export interface RsaHashedKeyAlgorithm extends KeyAlgorithm {
|
|
30
|
-
hash: { name: string };
|
|
31
|
-
modulusLength: number;
|
|
32
|
-
publicExponent: Uint8Array;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// ---- Algorithm parameter interfaces (W3C WebCrypto) ----
|
|
36
|
-
|
|
37
|
-
export interface AesKeyGenParams {
|
|
38
|
-
name: string;
|
|
39
|
-
length: number;
|
|
40
|
-
[key: string]: unknown;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export interface HmacKeyGenParams {
|
|
44
|
-
name: string;
|
|
45
|
-
hash: string | { name: string };
|
|
46
|
-
length?: number;
|
|
47
|
-
[key: string]: unknown;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export interface EcKeyGenParams {
|
|
51
|
-
name: string;
|
|
52
|
-
namedCurve: string;
|
|
53
|
-
[key: string]: unknown;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export interface HmacImportParams {
|
|
57
|
-
name: string;
|
|
58
|
-
hash: string | { name: string };
|
|
59
|
-
length?: number;
|
|
60
|
-
[key: string]: unknown;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export interface EcKeyImportParams {
|
|
64
|
-
name: string;
|
|
65
|
-
namedCurve: string;
|
|
66
|
-
[key: string]: unknown;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export interface AesCbcParams {
|
|
70
|
-
name: string;
|
|
71
|
-
iv: BufferSource;
|
|
72
|
-
[key: string]: unknown;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
export interface AesCtrParams {
|
|
76
|
-
name: string;
|
|
77
|
-
counter: BufferSource;
|
|
78
|
-
length: number;
|
|
79
|
-
[key: string]: unknown;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export interface AesGcmParams {
|
|
83
|
-
name: string;
|
|
84
|
-
iv: BufferSource;
|
|
85
|
-
additionalData?: BufferSource;
|
|
86
|
-
tagLength?: number;
|
|
87
|
-
[key: string]: unknown;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
export interface RsaOaepParams {
|
|
91
|
-
name: string;
|
|
92
|
-
label?: BufferSource;
|
|
93
|
-
[key: string]: unknown;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
export interface EcdsaParams {
|
|
97
|
-
name: string;
|
|
98
|
-
hash: string | { name: string };
|
|
99
|
-
[key: string]: unknown;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
export interface RsaPssParams {
|
|
103
|
-
name: string;
|
|
104
|
-
saltLength: number;
|
|
105
|
-
[key: string]: unknown;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
export interface Pbkdf2Params {
|
|
109
|
-
name: string;
|
|
110
|
-
hash: string | { name: string };
|
|
111
|
-
salt: BufferSource;
|
|
112
|
-
iterations: number;
|
|
113
|
-
[key: string]: unknown;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
export interface HkdfParams {
|
|
117
|
-
name: string;
|
|
118
|
-
hash: string | { name: string };
|
|
119
|
-
salt: BufferSource;
|
|
120
|
-
info: BufferSource;
|
|
121
|
-
[key: string]: unknown;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
export interface EcdhKeyDeriveParams {
|
|
125
|
-
name: string;
|
|
126
|
-
public: CryptoKey;
|
|
127
|
-
[key: string]: unknown;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/** Union of all supported algorithm parameter types */
|
|
131
|
-
export type AlgorithmIdentifier = string | { name: string; [key: string]: unknown };
|
|
132
|
-
|
|
133
|
-
// ---- Internal handle types (not part of public API) ----
|
|
134
|
-
|
|
135
|
-
/** Handle for EC private keys: contains both public and private bytes */
|
|
136
|
-
export interface EcKeyPairHandle {
|
|
137
|
-
pub: Uint8Array;
|
|
138
|
-
priv: Uint8Array;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
/** Handle for RSA keys: PEM-encoded key */
|
|
142
|
-
export interface RsaPemHandle {
|
|
143
|
-
pem: string;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
// ---- Lazy-loaded Node.js crypto function types ----
|
|
147
|
-
|
|
148
|
-
export interface HashLike {
|
|
149
|
-
update(data: Uint8Array): void;
|
|
150
|
-
digest(): Uint8Array;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
export interface HmacLike {
|
|
154
|
-
update(data: Uint8Array): void;
|
|
155
|
-
digest(): Uint8Array;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
export interface CipherLike {
|
|
159
|
-
update(data: Uint8Array): Uint8Array;
|
|
160
|
-
final(): Uint8Array;
|
|
161
|
-
setAAD?(aad: Uint8Array): void;
|
|
162
|
-
getAuthTag?(): Uint8Array;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
export interface DecipherLike {
|
|
166
|
-
update(data: Uint8Array): Uint8Array;
|
|
167
|
-
final(): Uint8Array;
|
|
168
|
-
setAuthTag?(tag: Uint8Array): void;
|
|
169
|
-
setAAD?(aad: Uint8Array): void;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
export interface SignerLike {
|
|
173
|
-
update(data: Uint8Array): void;
|
|
174
|
-
sign(key: string): Uint8Array;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
export interface VerifierLike {
|
|
178
|
-
update(data: Uint8Array): void;
|
|
179
|
-
verify(key: string, sig: Uint8Array): boolean;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
export interface EcdhLike {
|
|
183
|
-
generateKeys(): void;
|
|
184
|
-
getPublicKey(): Uint8Array;
|
|
185
|
-
getPrivateKey(): Uint8Array;
|
|
186
|
-
setPrivateKey(key: Uint8Array): void;
|
|
187
|
-
computeSecret(key: Uint8Array): Uint8Array;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
/**
|
|
191
|
-
* CryptoKey represents a cryptographic key obtained from SubtleCrypto methods.
|
|
192
|
-
* It stores algorithm metadata, key type, extractability, and usage flags
|
|
193
|
-
* alongside the raw key material (internal handle).
|
|
194
|
-
*/
|
|
195
|
-
export class CryptoKey {
|
|
196
|
-
readonly type: KeyType;
|
|
197
|
-
readonly extractable: boolean;
|
|
198
|
-
readonly algorithm: KeyAlgorithm;
|
|
199
|
-
readonly usages: KeyUsage[];
|
|
200
|
-
|
|
201
|
-
/** @internal Raw key material — not visible to user code */
|
|
202
|
-
_handle: unknown;
|
|
203
|
-
|
|
204
|
-
constructor(
|
|
205
|
-
type: KeyType,
|
|
206
|
-
extractable: boolean,
|
|
207
|
-
algorithm: KeyAlgorithm,
|
|
208
|
-
usages: KeyUsage[],
|
|
209
|
-
handle: unknown,
|
|
210
|
-
) {
|
|
211
|
-
this.type = type;
|
|
212
|
-
this.extractable = extractable;
|
|
213
|
-
this.algorithm = Object.freeze({ ...algorithm });
|
|
214
|
-
this.usages = Object.freeze([...usages]) as unknown as KeyUsage[];
|
|
215
|
-
this._handle = handle;
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
get [Symbol.toStringTag](): string {
|
|
219
|
-
return 'CryptoKey';
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
export interface CryptoKeyPair {
|
|
224
|
-
publicKey: CryptoKey;
|
|
225
|
-
privateKey: CryptoKey;
|
|
226
|
-
}
|