Skip to content

Commit 604fb48

Browse files
authored
Merge pull request #207 from dint-dev/fix/various
Refactoring
2 parents a932ce5 + 033f45d commit 604fb48

File tree

15 files changed

+132
-104
lines changed

15 files changed

+132
-104
lines changed

cryptography/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## 2.8.1
2+
* Bug fixes.
3+
14
## 2.8.0
25
* Adds WASM support. `BrowserCryptography` now uses 'dart:js_interop'.
36

cryptography/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,10 @@ Android / iOS / Mac OS X operating system APIs whenever possible.
4646
In _pubspec.yaml_:
4747
```yaml
4848
dependencies:
49-
cryptography: ^2.8.0
49+
cryptography: ^2.8.1
5050

5151
# If you are writing a Flutter app/package, also add this:
52-
cryptography_flutter: ^2.3.3
52+
cryptography_flutter: ^2.3.4
5353
```
5454
5555
You are ready to go!

cryptography/lib/src/browser/_javascript_bindings.dart

Lines changed: 54 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,20 @@ import 'dart:convert' show base64Url;
1919
import 'dart:js_interop';
2020
import 'dart:typed_data';
2121

22+
import 'package:meta/meta.dart';
23+
2224
/// Note that browsers support Web Cryptography only in secure contexts.
25+
@internal
2326
final bool isWebCryptoAvailable =
2427
_subtle.isDefinedAndNotNull && _isSecureContext.toDart;
2528

26-
@JS('crypto.subtle')
27-
external JSAny get _subtle;
28-
2929
@JS('window.isSecureContext')
3030
external JSBoolean get _isSecureContext;
3131

32+
@JS('crypto.subtle')
33+
external JSAny get _subtle;
34+
35+
@internal
3236
Uint8List 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
6755
String 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
7766
String? base64UrlEncodeMaybe(List<int>? data) {
7867
if (data == null) {
7968
return null;
8069
}
8170
return base64UrlEncode(data);
8271
}
8372

73+
@internal
8474
Future<ByteBuffer> decrypt(
8575
JSAny algorithm,
8676
CryptoKey key,
@@ -90,6 +80,7 @@ Future<ByteBuffer> decrypt(
9080
return js.toDart;
9181
}
9282

83+
@internal
9384
Future<ByteBuffer> deriveBits(
9485
JSAny algorithm,
9586
CryptoKey cryptoKey,
@@ -99,6 +90,7 @@ Future<ByteBuffer> deriveBits(
9990
return js.toDart;
10091
}
10192

93+
@internal
10294
Future<CryptoKey> deriveKey(
10395
JSObject algorithm,
10496
CryptoKey baseKey,
@@ -116,6 +108,7 @@ Future<CryptoKey> deriveKey(
116108
return js;
117109
}
118110

111+
@internal
119112
Future<ByteBuffer> digest(
120113
String name,
121114
JSUint8Array data,
@@ -124,6 +117,7 @@ Future<ByteBuffer> digest(
124117
return js.toDart;
125118
}
126119

120+
@internal
127121
Future<ByteBuffer> encrypt(
128122
JSAny algorithm,
129123
CryptoKey key,
@@ -133,16 +127,19 @@ Future<ByteBuffer> encrypt(
133127
return js.toDart;
134128
}
135129

130+
@internal
136131
Future<Jwk> exportKeyWhenJwk(CryptoKey key) async {
137132
final js = await _exportKey('jwk'.toJS, key).toDart;
138133
return js as Jwk;
139134
}
140135

136+
@internal
141137
Future<ByteBuffer> exportKeyWhenRaw(CryptoKey key) async {
142138
final js = await _exportKey('raw'.toJS, key).toDart;
143139
return (js as JSArrayBuffer).toDart;
144140
}
145141

142+
@internal
146143
Future<CryptoKey> generateKeyWhenKey(
147144
JSAny algorithm,
148145
JSBoolean extractable,
@@ -152,6 +149,7 @@ Future<CryptoKey> generateKeyWhenKey(
152149
return js as CryptoKey;
153150
}
154151

152+
@internal
155153
Future<CryptoKeyPair> generateKeyWhenKeyPair(
156154
JSObject algorithm,
157155
JSBoolean extractable,
@@ -161,6 +159,7 @@ Future<CryptoKeyPair> generateKeyWhenKeyPair(
161159
return js as CryptoKeyPair;
162160
}
163161

162+
@internal
164163
Future<CryptoKey> importKeyWhenJwk(
165164
Jwk keyData,
166165
JSAny algorithm,
@@ -177,6 +176,7 @@ Future<CryptoKey> importKeyWhenJwk(
177176
return js;
178177
}
179178

179+
@internal
180180
Future<CryptoKey> importKeyWhenRaw(
181181
JSUint8Array keyData,
182182
JSAny algorithm,
@@ -193,13 +193,15 @@ Future<CryptoKey> importKeyWhenRaw(
193193
return js;
194194
}
195195

196+
@internal
196197
JSUint8Array jsUint8ListFrom(List<int> data) {
197198
if (data is Uint8List) {
198199
return data.toJS;
199200
}
200201
return Uint8List.fromList(data).toJS;
201202
}
202203

204+
@internal
203205
Future<ByteBuffer> sign(
204206
JSAny algorithm,
205207
CryptoKey key,
@@ -209,6 +211,7 @@ Future<ByteBuffer> sign(
209211
return js.toDart;
210212
}
211213

214+
@internal
212215
Future<bool> verify(
213216
JSAny algorithm,
214217
CryptoKey key,
@@ -292,13 +295,15 @@ external JSPromise<JSBoolean> _verify(
292295
JSUint8Array data,
293296
);
294297

298+
@internal
295299
extension type AesCbcParams._(JSObject jsObject) {
296300
external factory AesCbcParams({
297301
required JSString name,
298302
required JSUint8Array iv,
299303
});
300304
}
301305

306+
@internal
302307
extension 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
310316
extension 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
319326
extension 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
326342
extension type CryptoKeyPair._(JSObject jsObject) {
327343
external CryptoKey get privateKey;
328344

329345
external CryptoKey get publicKey;
330346
}
331347

348+
@internal
332349
extension type EcdhKeyDeriveParams._(JSObject jsObject) {
333350
external factory EcdhKeyDeriveParams({
334351
required JSString name,
335352
required CryptoKey public,
336353
});
337354
}
338355

356+
@internal
339357
extension type EcdhParams._(JSObject jsObject) {
340358
external factory EcdhParams({
341359
required JSString name,
342360
required JSString namedCurve,
343361
});
344362
}
345363

364+
@internal
346365
extension type EcdsaParams._(JSObject jsObject) {
347366
external factory EcdsaParams({
348367
required JSString name,
349368
required JSString hash,
350369
});
351370
}
352371

372+
@internal
353373
extension type EcKeyGenParams._(JSObject jsObject) {
354374
external factory EcKeyGenParams({
355375
required JSString name,
356376
required JSString namedCurve,
357377
});
358378
}
359379

380+
@internal
360381
extension type EcKeyImportParams._(JSObject jsObject) {
361382
external factory EcKeyImportParams({
362383
required JSString name,
363384
required JSString namedCurve,
364385
});
365386
}
366387

388+
@internal
367389
extension 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
376399
extension 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
384408
extension 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
392417
extension 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
441467
extension 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
450477
extension type RsaHashedImportParams._(JSObject jsObject) {
451478
external factory RsaHashedImportParams({
452479
required JSString name,
453480
required JSString hash,
454481
});
455482
}
456483

484+
@internal
457485
extension 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
466495
extension type RsaPssParams._(JSObject jsObject) {
467496
external factory RsaPssParams({
468497
required JSString name,
469498
JSNumber? saltLength,
470499
});
471500
}
472501

502+
@internal
473503
extension type SignParams._(JSObject jsObject) {
474504
external factory SignParams({
475505
required JSString name,
476506
});
477507
}
478508

509+
@internal
479510
extension type VerifyParams._(JSObject jsObject) {
480511
external factory VerifyParams({
481512
required JSString name,

cryptography/lib/src/browser/browser_ec_key_pair.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,9 @@ class BrowserEcKeyPair extends KeyPair implements EcKeyPair {
7474
);
7575
return EcKeyPairData(
7676
type: keyPairType,
77-
d: web_crypto.base64UrlDecodeUnmodifiable(jwk.d!.toDart),
78-
x: web_crypto.base64UrlDecodeUnmodifiable(jwk.x!.toDart),
79-
y: web_crypto.base64UrlDecodeUnmodifiable(jwk.y!.toDart),
77+
d: web_crypto.base64UrlDecode(jwk.d!.toDart),
78+
x: web_crypto.base64UrlDecode(jwk.x!.toDart),
79+
y: web_crypto.base64UrlDecode(jwk.y!.toDart),
8080
);
8181
} catch (error, stackTrace) {
8282
throw StateError(
@@ -279,9 +279,9 @@ class BrowserEcKeyPair extends KeyPair implements EcKeyPair {
279279
);
280280
return fromParameters(
281281
keyPairType: keyPairType,
282-
d: web_crypto.base64UrlDecodeUnmodifiable(jwk.d!.toDart),
283-
x: web_crypto.base64UrlDecodeUnmodifiable(jwk.x!.toDart),
284-
y: web_crypto.base64UrlDecodeUnmodifiable(jwk.y!.toDart),
282+
d: web_crypto.base64UrlDecode(jwk.d!.toDart),
283+
x: web_crypto.base64UrlDecode(jwk.x!.toDart),
284+
y: web_crypto.base64UrlDecode(jwk.y!.toDart),
285285
isExtractable: isExtractable,
286286
allowSign: allowSign,
287287
allowDeriveBits: allowDeriveBits,

0 commit comments

Comments
 (0)