@@ -19,16 +19,20 @@ import 'dart:convert' show base64Url;
1919import 'dart:js_interop' ;
2020import 'dart:typed_data' ;
2121
22+ import 'package:meta/meta.dart' ;
23+
2224/// Note that browsers support Web Cryptography only in secure contexts.
25+ @internal
2326final bool isWebCryptoAvailable =
2427 _subtle.isDefinedAndNotNull && _isSecureContext.toDart;
2528
26- @JS ('crypto.subtle' )
27- external JSAny get _subtle;
28-
2929@JS ('window.isSecureContext' )
3030external JSBoolean get _isSecureContext;
3131
32+ @JS ('crypto.subtle' )
33+ external JSAny get _subtle;
34+
35+ @internal
3236Uint8List base64UrlDecode (String s) {
3337 switch (s.length % 4 ) {
3438 case 1 :
@@ -42,28 +46,12 @@ Uint8List base64UrlDecode(String s) {
4246 }
4347}
4448
45- Uint8List base64UrlDecodeUnmodifiable (String s) {
46- final bytes = base64UrlDecode (s);
47- // UnmodifiableUint8ListView has bugs so we removed it
48- return bytes;
49- }
50-
51- Uint8List ? base64UrlDecodeUnmodifiableMaybe (String ? s) {
52- if (s == null ) {
53- return null ;
54- }
55- final bytes = base64UrlDecode (s);
56- // UnmodifiableUint8ListView has bugs so we removed it
57- return bytes;
58- }
59-
60- extension type CryptoKey ._(JSObject _) implements JSObject {
61- external JSAny get type;
62- external bool get extractable;
63- external JSObject get algorithm;
64- external JSObject get usages;
49+ @internal
50+ Uint8List ? base64UrlDecodeMaybe (String ? s) {
51+ return s == null ? null : base64UrlDecode (s);
6552}
6653
54+ @internal
6755String base64UrlEncode (List <int > data) {
6856 var s = base64Url.encode (data);
6957 // Remove trailing '=' characters
@@ -74,13 +62,15 @@ String base64UrlEncode(List<int> data) {
7462 return s.substring (0 , length);
7563}
7664
65+ @internal
7766String ? base64UrlEncodeMaybe (List <int >? data) {
7867 if (data == null ) {
7968 return null ;
8069 }
8170 return base64UrlEncode (data);
8271}
8372
73+ @internal
8474Future <ByteBuffer > decrypt (
8575 JSAny algorithm,
8676 CryptoKey key,
@@ -90,6 +80,7 @@ Future<ByteBuffer> decrypt(
9080 return js.toDart;
9181}
9282
83+ @internal
9384Future <ByteBuffer > deriveBits (
9485 JSAny algorithm,
9586 CryptoKey cryptoKey,
@@ -99,6 +90,7 @@ Future<ByteBuffer> deriveBits(
9990 return js.toDart;
10091}
10192
93+ @internal
10294Future <CryptoKey > deriveKey (
10395 JSObject algorithm,
10496 CryptoKey baseKey,
@@ -116,6 +108,7 @@ Future<CryptoKey> deriveKey(
116108 return js;
117109}
118110
111+ @internal
119112Future <ByteBuffer > digest (
120113 String name,
121114 JSUint8Array data,
@@ -124,6 +117,7 @@ Future<ByteBuffer> digest(
124117 return js.toDart;
125118}
126119
120+ @internal
127121Future <ByteBuffer > encrypt (
128122 JSAny algorithm,
129123 CryptoKey key,
@@ -133,16 +127,19 @@ Future<ByteBuffer> encrypt(
133127 return js.toDart;
134128}
135129
130+ @internal
136131Future <Jwk > exportKeyWhenJwk (CryptoKey key) async {
137132 final js = await _exportKey ('jwk' .toJS, key).toDart;
138133 return js as Jwk ;
139134}
140135
136+ @internal
141137Future <ByteBuffer > exportKeyWhenRaw (CryptoKey key) async {
142138 final js = await _exportKey ('raw' .toJS, key).toDart;
143139 return (js as JSArrayBuffer ).toDart;
144140}
145141
142+ @internal
146143Future <CryptoKey > generateKeyWhenKey (
147144 JSAny algorithm,
148145 JSBoolean extractable,
@@ -152,6 +149,7 @@ Future<CryptoKey> generateKeyWhenKey(
152149 return js as CryptoKey ;
153150}
154151
152+ @internal
155153Future <CryptoKeyPair > generateKeyWhenKeyPair (
156154 JSObject algorithm,
157155 JSBoolean extractable,
@@ -161,6 +159,7 @@ Future<CryptoKeyPair> generateKeyWhenKeyPair(
161159 return js as CryptoKeyPair ;
162160}
163161
162+ @internal
164163Future <CryptoKey > importKeyWhenJwk (
165164 Jwk keyData,
166165 JSAny algorithm,
@@ -177,6 +176,7 @@ Future<CryptoKey> importKeyWhenJwk(
177176 return js;
178177}
179178
179+ @internal
180180Future <CryptoKey > importKeyWhenRaw (
181181 JSUint8Array keyData,
182182 JSAny algorithm,
@@ -193,13 +193,15 @@ Future<CryptoKey> importKeyWhenRaw(
193193 return js;
194194}
195195
196+ @internal
196197JSUint8Array jsUint8ListFrom (List <int > data) {
197198 if (data is Uint8List ) {
198199 return data.toJS;
199200 }
200201 return Uint8List .fromList (data).toJS;
201202}
202203
204+ @internal
203205Future <ByteBuffer > sign (
204206 JSAny algorithm,
205207 CryptoKey key,
@@ -209,6 +211,7 @@ Future<ByteBuffer> sign(
209211 return js.toDart;
210212}
211213
214+ @internal
212215Future <bool > verify (
213216 JSAny algorithm,
214217 CryptoKey key,
@@ -292,13 +295,15 @@ external JSPromise<JSBoolean> _verify(
292295 JSUint8Array data,
293296);
294297
298+ @internal
295299extension type AesCbcParams ._(JSObject jsObject) {
296300 external factory AesCbcParams ({
297301 required JSString name,
298302 required JSUint8Array iv,
299303 });
300304}
301305
306+ @internal
302307extension type AesCtrParams ._(JSObject jsObject) {
303308 external factory AesCtrParams ({
304309 required JSString name,
@@ -307,6 +312,7 @@ extension type AesCtrParams._(JSObject jsObject) {
307312 });
308313}
309314
315+ @internal
310316extension type AesGcmParams ._(JSObject jsObject) {
311317 external factory AesGcmParams ({
312318 required JSString name,
@@ -316,54 +322,70 @@ extension type AesGcmParams._(JSObject jsObject) {
316322 });
317323}
318324
325+ @internal
319326extension type AesKeyGenParams ._(JSObject jsObject) {
320327 external factory AesKeyGenParams ({
321328 required JSString name,
322329 required JSNumber length,
323330 });
324331}
325332
333+ @internal
334+ extension type CryptoKey ._(JSObject _) implements JSObject {
335+ external JSObject get algorithm;
336+ external bool get extractable;
337+ external JSAny get type;
338+ external JSObject get usages;
339+ }
340+
341+ @internal
326342extension type CryptoKeyPair ._(JSObject jsObject) {
327343 external CryptoKey get privateKey;
328344
329345 external CryptoKey get publicKey;
330346}
331347
348+ @internal
332349extension type EcdhKeyDeriveParams ._(JSObject jsObject) {
333350 external factory EcdhKeyDeriveParams ({
334351 required JSString name,
335352 required CryptoKey public,
336353 });
337354}
338355
356+ @internal
339357extension type EcdhParams ._(JSObject jsObject) {
340358 external factory EcdhParams ({
341359 required JSString name,
342360 required JSString namedCurve,
343361 });
344362}
345363
364+ @internal
346365extension type EcdsaParams ._(JSObject jsObject) {
347366 external factory EcdsaParams ({
348367 required JSString name,
349368 required JSString hash,
350369 });
351370}
352371
372+ @internal
353373extension type EcKeyGenParams ._(JSObject jsObject) {
354374 external factory EcKeyGenParams ({
355375 required JSString name,
356376 required JSString namedCurve,
357377 });
358378}
359379
380+ @internal
360381extension type EcKeyImportParams ._(JSObject jsObject) {
361382 external factory EcKeyImportParams ({
362383 required JSString name,
363384 required JSString namedCurve,
364385 });
365386}
366387
388+ @internal
367389extension type HkdfParams ._(JSObject jsObject) {
368390 external factory HkdfParams ({
369391 required JSString name,
@@ -373,6 +395,7 @@ extension type HkdfParams._(JSObject jsObject) {
373395 });
374396}
375397
398+ @internal
376399extension type HmacImportParams ._(JSObject jsObject) {
377400 external factory HmacImportParams ({
378401 required JSString name,
@@ -381,6 +404,7 @@ extension type HmacImportParams._(JSObject jsObject) {
381404 });
382405}
383406
407+ @internal
384408extension type HmacKeyGenParams ._(JSObject jsObject) {
385409 external factory HmacKeyGenParams ({
386410 required JSString name,
@@ -389,6 +413,7 @@ extension type HmacKeyGenParams._(JSObject jsObject) {
389413 });
390414}
391415
416+ @internal
392417extension type Jwk ._(JSObject jsObject) {
393418 external factory Jwk ({
394419 JSString ? crv,
@@ -438,6 +463,7 @@ extension type Jwk._(JSObject jsObject) {
438463 external JSString ? get y;
439464}
440465
466+ @internal
441467extension type Pkdf2Params ._(JSObject jsObject) {
442468 external factory Pkdf2Params ({
443469 required JSString name,
@@ -447,13 +473,15 @@ extension type Pkdf2Params._(JSObject jsObject) {
447473 });
448474}
449475
476+ @internal
450477extension type RsaHashedImportParams ._(JSObject jsObject) {
451478 external factory RsaHashedImportParams ({
452479 required JSString name,
453480 required JSString hash,
454481 });
455482}
456483
484+ @internal
457485extension type RsaHashedKeyGenParams ._(JSObject jsObject) {
458486 external factory RsaHashedKeyGenParams ({
459487 required JSString name,
@@ -463,19 +491,22 @@ extension type RsaHashedKeyGenParams._(JSObject jsObject) {
463491 });
464492}
465493
494+ @internal
466495extension type RsaPssParams ._(JSObject jsObject) {
467496 external factory RsaPssParams ({
468497 required JSString name,
469498 JSNumber ? saltLength,
470499 });
471500}
472501
502+ @internal
473503extension type SignParams ._(JSObject jsObject) {
474504 external factory SignParams ({
475505 required JSString name,
476506 });
477507}
478508
509+ @internal
479510extension type VerifyParams ._(JSObject jsObject) {
480511 external factory VerifyParams ({
481512 required JSString name,
0 commit comments