From f00d0bea6846a6edc2dc011f85b1c745be482e50 Mon Sep 17 00:00:00 2001 From: HamdaanAliQuatil Date: Sat, 13 Dec 2025 21:40:25 +0530 Subject: [PATCH] chore: fix linter issues --- .../bindings/generated_bindings.dart | 20 +- lib/src/boringssl/lookup/lookup.dart | 2 +- lib/src/boringssl/lookup/utils.dart | 12 +- lib/src/crypto_subtle.dart | 193 +- lib/src/flutter/webcrypto_plugin.dart | 8 +- lib/src/impl_ffi/impl_ffi.aes_common.dart | 7 +- lib/src/impl_ffi/impl_ffi.aescbc.dart | 28 +- lib/src/impl_ffi/impl_ffi.aesctr.dart | 79 +- lib/src/impl_ffi/impl_ffi.aesgcm.dart | 91 +- lib/src/impl_ffi/impl_ffi.digest.dart | 3 +- lib/src/impl_ffi/impl_ffi.ec_common.dart | 88 +- lib/src/impl_ffi/impl_ffi.ecdh.dart | 80 +- lib/src/impl_ffi/impl_ffi.ecdsa.dart | 92 +- lib/src/impl_ffi/impl_ffi.hmac.dart | 34 +- lib/src/impl_ffi/impl_ffi.pbkdf2.dart | 61 +- lib/src/impl_ffi/impl_ffi.rsa_common.dart | 41 +- lib/src/impl_ffi/impl_ffi.rsaoaep.dart | 57 +- lib/src/impl_ffi/impl_ffi.rsapss.dart | 70 +- lib/src/impl_ffi/impl_ffi.rsassapkcs1v15.dart | 57 +- lib/src/impl_ffi/impl_ffi.utils.dart | 55 +- .../impl_interface/impl_interface.aesctr.dart | 10 +- .../impl_interface/impl_interface.aesgcm.dart | 16 +- .../impl_interface/impl_interface.ecdh.dart | 23 +- .../impl_interface/impl_interface.ecdsa.dart | 28 +- .../impl_interface/impl_interface.hmac.dart | 13 +- .../impl_interface/impl_interface.pbkdf2.dart | 6 +- .../impl_interface.rsaoaep.dart | 17 +- .../impl_interface/impl_interface.rsapss.dart | 18 +- .../impl_interface.rsassapkcs1v15.dart | 18 +- lib/src/impl_js/impl_js.aescbc.dart | 42 +- lib/src/impl_js/impl_js.aesctr.dart | 42 +- lib/src/impl_js/impl_js.aesgcm.dart | 42 +- lib/src/impl_js/impl_js.digest.dart | 5 +- lib/src/impl_js/impl_js.ecdh.dart | 138 +- lib/src/impl_js/impl_js.ecdsa.dart | 120 +- lib/src/impl_js/impl_js.hkdf.dart | 22 +- lib/src/impl_js/impl_js.hmac.dart | 106 +- lib/src/impl_js/impl_js.pbkdf2.dart | 25 +- lib/src/impl_js/impl_js.rsaoaep.dart | 100 +- lib/src/impl_js/impl_js.rsapss.dart | 74 +- lib/src/impl_js/impl_js.rsassapkcs1v15.dart | 88 +- lib/src/impl_js/impl_js.utils.dart | 38 +- lib/src/impl_stub/impl_stub.ecdh.dart | 29 +- lib/src/impl_stub/impl_stub.ecdsa.dart | 18 +- lib/src/impl_stub/impl_stub.hmac.dart | 13 +- lib/src/impl_stub/impl_stub.rsaoaep.dart | 18 +- lib/src/impl_stub/impl_stub.rsapss.dart | 17 +- .../impl_stub/impl_stub.rsassapkcs1v15.dart | 20 +- lib/src/jsonwebkey.dart | 16 +- lib/src/testing/utils/testrunner.dart | 368 ++- lib/src/testing/utils/utils.dart | 6 +- lib/src/testing/webcrypto/aescbc.dart | 33 +- lib/src/testing/webcrypto/aesctr.dart | 51 +- lib/src/testing/webcrypto/aesgcm.dart | 55 +- lib/src/testing/webcrypto/digest.dart | 74 +- lib/src/testing/webcrypto/ecdh.dart | 65 +- lib/src/testing/webcrypto/ecdsa.dart | 29 +- lib/src/testing/webcrypto/hkdf.dart | 26 +- lib/src/testing/webcrypto/hmac.dart | 36 +- lib/src/testing/webcrypto/pbkdf2.dart | 38 +- lib/src/testing/webcrypto/random.dart | 6 +- lib/src/testing/webcrypto/rsaoaep.dart | 154 +- lib/src/testing/webcrypto/rsapss.dart | 132 +- lib/src/testing/webcrypto/rsassapkcs1v15.dart | 144 +- .../boringssl/generated_bindings.dart | 2831 +++++++++-------- lib/src/webcrypto/webcrypto.aescbc.dart | 3 +- lib/src/webcrypto/webcrypto.aesctr.dart | 15 +- lib/src/webcrypto/webcrypto.aesgcm.dart | 21 +- lib/src/webcrypto/webcrypto.dart | 3 +- lib/src/webcrypto/webcrypto.ecdh.dart | 10 +- lib/src/webcrypto/webcrypto.ecdsa.dart | 31 +- lib/src/webcrypto/webcrypto.hkdf.dart | 3 +- lib/src/webcrypto/webcrypto.hmac.dart | 17 +- lib/src/webcrypto/webcrypto.pbkdf2.dart | 3 +- lib/src/webcrypto/webcrypto.random.dart | 7 +- lib/src/webcrypto/webcrypto.rsaoaep.dart | 24 +- lib/src/webcrypto/webcrypto.rsapss.dart | 30 +- .../webcrypto/webcrypto.rsassapkcs1v15.dart | 39 +- pubspec.yaml | 4 +- test/crypto_subtle_test.dart | 120 +- tool/generate_symbols_table.dart | 146 +- 81 files changed, 3457 insertions(+), 3267 deletions(-) diff --git a/lib/src/boringssl/bindings/generated_bindings.dart b/lib/src/boringssl/bindings/generated_bindings.dart index 0db16a7f..4f4eee44 100644 --- a/lib/src/boringssl/bindings/generated_bindings.dart +++ b/lib/src/boringssl/bindings/generated_bindings.dart @@ -25,31 +25,27 @@ import 'dart:ffi' as ffi; class WebCrypto { /// Holds the symbol lookup function. final ffi.Pointer Function(String symbolName) - _lookup; + _lookup; /// The symbols are looked up in [dynamicLibrary]. WebCrypto(ffi.DynamicLibrary dynamicLibrary) - : _lookup = dynamicLibrary.lookup; + : _lookup = dynamicLibrary.lookup; /// The symbols are looked up with [lookup]. WebCrypto.fromLookup( - ffi.Pointer Function(String symbolName) - lookup) - : _lookup = lookup; + ffi.Pointer Function(String symbolName) lookup, + ) : _lookup = lookup; /// Function to lookup BoringSSL symbols based on index in the Sym enum. /// See src/symbols.yaml for details. - ffi.Pointer webcrypto_lookup_symbol( - int index, - ) { - return _webcrypto_lookup_symbol( - index, - ); + ffi.Pointer webcrypto_lookup_symbol(int index) { + return _webcrypto_lookup_symbol(index); } late final _webcrypto_lookup_symbolPtr = _lookup Function(ffi.Int32)>>( - 'webcrypto_lookup_symbol'); + 'webcrypto_lookup_symbol', + ); late final _webcrypto_lookup_symbol = _webcrypto_lookup_symbolPtr .asFunction Function(int)>(); } diff --git a/lib/src/boringssl/lookup/lookup.dart b/lib/src/boringssl/lookup/lookup.dart index 792a9ab6..74df28f7 100644 --- a/lib/src/boringssl/lookup/lookup.dart +++ b/lib/src/boringssl/lookup/lookup.dart @@ -75,7 +75,7 @@ final Pointer Function(String symbolName) lookup = () { }(); final Pointer Function(String symbolName) - _cachedLookup = lookup; +_cachedLookup = lookup; /// Gives access to BoringSSL symbols. final BoringSsl ssl = BoringSsl.fromLookup(_cachedLookup); diff --git a/lib/src/boringssl/lookup/utils.dart b/lib/src/boringssl/lookup/utils.dart index 261a30d1..cb956ffc 100644 --- a/lib/src/boringssl/lookup/utils.dart +++ b/lib/src/boringssl/lookup/utils.dart @@ -42,7 +42,7 @@ String get libraryFileName { /// /// Returns `null` if it could not be found. Pointer Function(String symbolName)? - lookupLibraryInDotDartTool() { +lookupLibraryInDotDartTool() { final dotDartTool = _findDotDartTool(); if (dotDartTool == null) { return null; @@ -78,8 +78,9 @@ Uri? _findDotDartTool() { // Traverse up until we see a `.dart_tool/package_config.json` file. do { - if (File.fromUri(root.resolve('.dart_tool/package_config.json')) - .existsSync()) { + if (File.fromUri( + root.resolve('.dart_tool/package_config.json'), + ).existsSync()) { return root.resolve('.dart_tool/'); } } while (root != (root = root.resolve('..'))); @@ -90,8 +91,9 @@ Uri? _findDotDartTool() { // Traverse up until we see a `.dart_tool/package_config.json` file. do { - if (File.fromUri(root.resolve('.dart_tool/package_config.json')) - .existsSync()) { + if (File.fromUri( + root.resolve('.dart_tool/package_config.json'), + ).existsSync()) { return root.resolve('.dart_tool/'); } } while (root != (root = root.resolve('..'))); diff --git a/lib/src/crypto_subtle.dart b/lib/src/crypto_subtle.dart index 672fcdaf..55631943 100644 --- a/lib/src/crypto_subtle.dart +++ b/lib/src/crypto_subtle.dart @@ -101,10 +101,7 @@ extension type JSSubtleCrypto(JSObject _) implements JSObject { ); /// https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest - external JSPromise digest( - String algorithm, - JSTypedArray data, - ); + external JSPromise digest(String algorithm, JSTypedArray data); /// https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/deriveBits external JSPromise deriveBits( @@ -151,10 +148,7 @@ extension type JSSubtleCrypto(JSObject _) implements JSObject { /// https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/exportKey @JS('exportKey') - external JSPromise exportKey( - String format, - JSCryptoKey key, - ); + external JSPromise exportKey(String format, JSCryptoKey key); /// https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/exportKey @JS('exportKey') @@ -283,25 +277,24 @@ class Algorithm { TypedData? salt, TypedData? info, int? iterations, - }) => - Algorithm( - name: this.name ?? name, - modulusLength: this.modulusLength ?? modulusLength, - publicExponent: this.publicExponent ?? publicExponent, - hash: this.hash ?? hash, - saltLength: this.saltLength ?? saltLength, - label: this.label ?? label, - namedCurve: this.namedCurve ?? namedCurve, - public: this.public ?? public, - counter: this.counter ?? counter, - length: this.length ?? length, - iv: this.iv ?? iv, - additionalData: this.additionalData ?? additionalData, - tagLength: this.tagLength ?? tagLength, - salt: this.salt ?? salt, - info: this.info ?? info, - iterations: this.iterations ?? iterations, - ); + }) => Algorithm( + name: this.name ?? name, + modulusLength: this.modulusLength ?? modulusLength, + publicExponent: this.publicExponent ?? publicExponent, + hash: this.hash ?? hash, + saltLength: this.saltLength ?? saltLength, + label: this.label ?? label, + namedCurve: this.namedCurve ?? namedCurve, + public: this.public ?? public, + counter: this.counter ?? counter, + length: this.length ?? length, + iv: this.iv ?? iv, + additionalData: this.additionalData ?? additionalData, + tagLength: this.tagLength ?? tagLength, + salt: this.salt ?? salt, + info: this.info ?? info, + iterations: this.iterations ?? iterations, + ); } extension type JSJsonWebKey(JSObject _) implements JSObject { @@ -390,11 +383,7 @@ TypedData getRandomValues(TypedData array) { array.setAll(0, dartArray); } } else { - throw ArgumentError.value( - array, - 'array', - 'Unsupported TypedData type', - ); + throw ArgumentError.value(array, 'array', 'Unsupported TypedData type'); } return array; @@ -406,11 +395,7 @@ Future decrypt( Uint8List data, ) async { final value = await window.crypto.subtle - .decrypt( - algorithm.toJS, - key, - data.toJS, - ) + .decrypt(algorithm.toJS, key, data.toJS) .toDart; return value.toDart; @@ -422,40 +407,20 @@ Future encrypt( Uint8List data, ) async { final value = await window.crypto.subtle - .encrypt( - algorithm.toJS, - key, - data.toJS, - ) + .encrypt(algorithm.toJS, key, data.toJS) .toDart; return value.toDart; } -Future exportKey( - String format, - JSCryptoKey key, -) async { - final value = await window.crypto.subtle - .exportKey( - format, - key, - ) - .toDart; +Future exportKey(String format, JSCryptoKey key) async { + final value = await window.crypto.subtle.exportKey(format, key).toDart; return value.toDart; } -Future exportJsonWebKey( - String format, - JSCryptoKey key, -) async { - final value = await window.crypto.subtle - .exportJsonWebKey( - format, - key, - ) - .toDart; +Future exportJsonWebKey(String format, JSCryptoKey key) async { + final value = await window.crypto.subtle.exportJsonWebKey(format, key).toDart; return value.toDart; } @@ -466,11 +431,7 @@ Future generateKey( List usages, ) async { final value = await window.crypto.subtle - .generateCryptoKey( - algorithm.toJS, - extractable, - usages.toJS, - ) + .generateCryptoKey(algorithm.toJS, extractable, usages.toJS) .toDart; return value; @@ -482,26 +443,14 @@ Future generateKeyPair( List usages, ) async { final value = await window.crypto.subtle - .generateCryptoKeyPair( - algorithm.toJS, - extractable, - usages.toJS, - ) + .generateCryptoKeyPair(algorithm.toJS, extractable, usages.toJS) .toDart; return value; } -Future digest( - String algorithm, - Uint8List data, -) async { - final value = await window.crypto.subtle - .digest( - algorithm, - data.toJS, - ) - .toDart; +Future digest(String algorithm, Uint8List data) async { + final value = await window.crypto.subtle.digest(algorithm, data.toJS).toDart; return value.toDart; } @@ -514,13 +463,7 @@ Future importKey( List usages, ) async { final value = await window.crypto.subtle - .importKey( - format, - keyData.toJS, - algorithm.toJS, - extractable, - usages.toJS, - ) + .importKey(format, keyData.toJS, algorithm.toJS, extractable, usages.toJS) .toDart; return value; @@ -552,11 +495,7 @@ Future sign( Uint8List data, ) async { final value = await window.crypto.subtle - .sign( - algorithm.toJS, - key, - data.toJS, - ) + .sign(algorithm.toJS, key, data.toJS) .toDart; return value.toDart; @@ -569,12 +508,7 @@ Future verify( Uint8List data, ) async { final value = await window.crypto.subtle - .verify( - algorithm.toJS, - key, - signature.toJS, - data.toJS, - ) + .verify(algorithm.toJS, key, signature.toJS, data.toJS) .toDart; return value.toDart; @@ -586,11 +520,7 @@ Future deriveBits( int length, ) async { final value = await window.crypto.subtle - .deriveBits( - algorithm.toJS, - key, - length, - ) + .deriveBits(algorithm.toJS, key, length) .toDart; return value.toDart; @@ -598,9 +528,8 @@ Future deriveBits( extension ListExtension on List { @visibleForTesting - JSArray get toJS => [ - for (final value in this) value.toJS, - ].toJS; + JSArray get toJS => + [for (final value in this) value.toJS].toJS; } extension AlgorithmExtension on Algorithm { @@ -687,33 +616,27 @@ extension on JsonWebKey { extension on JSJsonWebKey { JsonWebKey get toDart => JsonWebKey( - kty: kty, - use: use, - key_ops: keyOps?.toDart.map((e) => e.toDart).toList(), - alg: alg, - ext: ext, - crv: crv, - x: x, - y: y, - d: d, - n: n, - e: e, - p: p, - q: q, - dp: dp, - dq: dq, - qi: qi, - oth: oth?.toDart - .map( - (e) => RsaOtherPrimesInfo( - r: e.r, - d: e.d, - t: e.t, - ), - ) - .toList(), - k: k, - ); + kty: kty, + use: use, + key_ops: keyOps?.toDart.map((e) => e.toDart).toList(), + alg: alg, + ext: ext, + crv: crv, + x: x, + y: y, + d: d, + n: n, + e: e, + p: p, + q: q, + dp: dp, + dq: dq, + qi: qi, + oth: oth?.toDart + .map((e) => RsaOtherPrimesInfo(r: e.r, d: e.d, t: e.t)) + .toList(), + k: k, + ); } // TODO: crypto.subtle.unwrapKey diff --git a/lib/src/flutter/webcrypto_plugin.dart b/lib/src/flutter/webcrypto_plugin.dart index 6ee95fab..8e2b41d8 100644 --- a/lib/src/flutter/webcrypto_plugin.dart +++ b/lib/src/flutter/webcrypto_plugin.dart @@ -48,9 +48,11 @@ class WebcryptoPlugin { switch (call.method) { default: throw PlatformException( - code: 'Unimplemented', - details: "The webcrypto plugin for web doesn't implement " - "the method '${call.method}'"); + code: 'Unimplemented', + details: + "The webcrypto plugin for web doesn't implement " + "the method '${call.method}'", + ); } } } diff --git a/lib/src/impl_ffi/impl_ffi.aes_common.dart b/lib/src/impl_ffi/impl_ffi.aes_common.dart index 49c60f1c..219267f7 100644 --- a/lib/src/impl_ffi/impl_ffi.aes_common.dart +++ b/lib/src/impl_ffi/impl_ffi.aes_common.dart @@ -45,8 +45,11 @@ Uint8List _aesImportJwkKey( // If not supported in Chrome, there is not reason to support it in Dart. throw UnsupportedError('192-bit AES keys are not supported'); } - checkJwk(keyData.length == 16 || keyData.length == 32, 'k', - 'must be a 128 or 256 bit key'); + checkJwk( + keyData.length == 16 || keyData.length == 32, + 'k', + 'must be a 128 or 256 bit key', + ); final expectedAlgPrefix = keyData.length == 16 ? 'A128' : 'A256'; final expectedAlg = expectedAlgPrefix + expectedJwkAlgSuffix; diff --git a/lib/src/impl_ffi/impl_ffi.aescbc.dart b/lib/src/impl_ffi/impl_ffi.aescbc.dart index 7101dc93..fa4a2127 100644 --- a/lib/src/impl_ffi/impl_ffi.aescbc.dart +++ b/lib/src/impl_ffi/impl_ffi.aescbc.dart @@ -22,10 +22,7 @@ Future aesCbc_importRawKey(List keyData) async => Future aesCbc_importJsonWebKey( Map jwk, ) async => - _AesCbcSecretKeyImpl(_aesImportJwkKey( - jwk, - expectedJwkAlgSuffix: 'CBC', - )); + _AesCbcSecretKeyImpl(_aesImportJwkKey(jwk, expectedJwkAlgSuffix: 'CBC')); Future aesCbc_generateKey(int length) async => _AesCbcSecretKeyImpl(_aesGenerateKey(length)); @@ -38,8 +35,9 @@ Stream _aesCbcEncryptOrDecrypt( ) { return _Scope.stream((scope) async* { assert(key.length == 16 || key.length == 32); - final cipher = - key.length == 16 ? ssl.EVP_aes_128_cbc() : ssl.EVP_aes_256_cbc(); + final cipher = key.length == 16 + ? ssl.EVP_aes_128_cbc() + : ssl.EVP_aes_256_cbc(); const blockSize = AES_BLOCK_SIZE; final ivSize = ssl.EVP_CIPHER_iv_length(cipher); @@ -48,14 +46,16 @@ Stream _aesCbcEncryptOrDecrypt( } final ctx = scope.createEVP_CIPHER_CTX(); - _checkOpIsOne(ssl.EVP_CipherInit_ex( - ctx, - cipher, - ffi.nullptr, - scope.dataAsPointer(key), - scope.dataAsPointer(iv), - encrypt ? 1 : 0, - )); + _checkOpIsOne( + ssl.EVP_CipherInit_ex( + ctx, + cipher, + ffi.nullptr, + scope.dataAsPointer(key), + scope.dataAsPointer(iv), + encrypt ? 1 : 0, + ), + ); const bufSize = 4096; diff --git a/lib/src/impl_ffi/impl_ffi.aesctr.dart b/lib/src/impl_ffi/impl_ffi.aesctr.dart index 709b5fff..563f54c9 100644 --- a/lib/src/impl_ffi/impl_ffi.aesctr.dart +++ b/lib/src/impl_ffi/impl_ffi.aesctr.dart @@ -22,10 +22,7 @@ Future aesCtr_importRawKey(List keyData) async => Future aesCtr_importJsonWebKey( Map jwk, ) async => - _AesCtrSecretKeyImpl(_aesImportJwkKey( - jwk, - expectedJwkAlgSuffix: 'CTR', - )); + _AesCtrSecretKeyImpl(_aesImportJwkKey(jwk, expectedJwkAlgSuffix: 'CTR')); Future aesCtr_generateKey(int length) async => _AesCtrSecretKeyImpl(_aesGenerateKey(length)); @@ -65,8 +62,9 @@ Stream _aesCtrEncryptOrDecrypt( return _Scope.stream((scope) async* { assert(counter.length == 16); assert(key.length == 16 || key.length == 32); - final cipher = - key.length == 16 ? ssl.EVP_aes_128_ctr() : ssl.EVP_aes_256_ctr(); + final cipher = key.length == 16 + ? ssl.EVP_aes_128_ctr() + : ssl.EVP_aes_256_ctr(); const blockSize = AES_BLOCK_SIZE; // Find the number of possible counter values, as the counter may not be @@ -93,14 +91,16 @@ Stream _aesCtrEncryptOrDecrypt( var bytes_after_wraparound = ctr * BigInt.from(blockSize); final ctx = scope.createEVP_CIPHER_CTX(); - _checkOpIsOne(ssl.EVP_CipherInit_ex( - ctx, - cipher, - ffi.nullptr, - scope.dataAsPointer(key), - scope.dataAsPointer(counter), - encrypt ? 1 : 0, - )); + _checkOpIsOne( + ssl.EVP_CipherInit_ex( + ctx, + cipher, + ffi.nullptr, + scope.dataAsPointer(key), + scope.dataAsPointer(counter), + encrypt ? 1 : 0, + ), + ); const bufSize = 4096; @@ -143,13 +143,7 @@ Stream _aesCtrEncryptOrDecrypt( final N = math.min(M, bufSize); inData.setAll(0, data.skip(offset + i).take(N)); - _checkOpIsOne(ssl.EVP_CipherUpdate( - ctx, - outBuf, - outLen, - inBuf, - N, - )); + _checkOpIsOne(ssl.EVP_CipherUpdate(ctx, outBuf, outLen, inBuf, N)); if (outLen.value > 0) { yield outData.sublist(0, outLen.value); } @@ -177,14 +171,16 @@ Stream _aesCtrEncryptOrDecrypt( } // Re-initialize the cipher context with counter wrapped around. - _checkOpIsOne(ssl.EVP_CipherInit_ex( - ctx, - cipher, - ffi.nullptr, - scope.dataAsPointer(key), - counterWrappedAround, - encrypt ? 1 : 0, - )); + _checkOpIsOne( + ssl.EVP_CipherInit_ex( + ctx, + cipher, + ffi.nullptr, + scope.dataAsPointer(key), + counterWrappedAround, + encrypt ? 1 : 0, + ), + ); // Update state isBeforeWrapAround = false; @@ -209,9 +205,7 @@ final class _StaticAesCtrSecretKeyImpl implements StaticAesCtrSecretKeyImpl { } @override - Future importJsonWebKey( - Map jwk, - ) async { + Future importJsonWebKey(Map jwk) async { return await aesCtr_importJsonWebKey(jwk); } @@ -230,10 +224,7 @@ final class _AesCtrSecretKeyImpl implements AesCtrSecretKeyImpl { return 'Instance of \'AesCtrSecretKey\''; } - void _checkArguments( - List counter, - int length, - ) { + void _checkArguments(List counter, int length) { if (counter.length != 16) { throw ArgumentError.value(counter, 'counter', 'must be 16 bytes'); } @@ -249,11 +240,9 @@ final class _AesCtrSecretKeyImpl implements AesCtrSecretKeyImpl { int length, ) async { _checkArguments(counter, length); - return await _bufferStream(decryptStream( - Stream.value(data), - counter, - length, - )); + return await _bufferStream( + decryptStream(Stream.value(data), counter, length), + ); } @override @@ -273,11 +262,9 @@ final class _AesCtrSecretKeyImpl implements AesCtrSecretKeyImpl { int length, ) async { _checkArguments(counter, length); - return await _bufferStream(encryptStream( - Stream.value(data), - counter, - length, - )); + return await _bufferStream( + encryptStream(Stream.value(data), counter, length), + ); } @override diff --git a/lib/src/impl_ffi/impl_ffi.aesgcm.dart b/lib/src/impl_ffi/impl_ffi.aesgcm.dart index cfff22bb..4d15096d 100644 --- a/lib/src/impl_ffi/impl_ffi.aesgcm.dart +++ b/lib/src/impl_ffi/impl_ffi.aesgcm.dart @@ -22,10 +22,7 @@ Future aesGcm_importRawKey(List keyData) async => Future aesGcm_importJsonWebKey( Map jwk, ) async => - _AesGcmSecretKeyImpl(_aesImportJwkKey( - jwk, - expectedJwkAlgSuffix: 'GCM', - )); + _AesGcmSecretKeyImpl(_aesImportJwkKey(jwk, expectedJwkAlgSuffix: 'GCM')); Future aesGcm_generateKey(int length) async => _AesGcmSecretKeyImpl(_aesGenerateKey(length)); @@ -78,34 +75,38 @@ Future _aesGcmEncryptDecrypt( final outLen = scope(); final maxOut = data.length + ssl.EVP_AEAD_max_overhead(aead); final out = scope(maxOut); - _checkOpIsOne(ssl.EVP_AEAD_CTX_seal( - ctx, - out, - outLen, - maxOut, - scope.dataAsPointer(iv), - iv.length, - scope.dataAsPointer(data), - data.length, - scope.dataAsPointer(additionalData_), - additionalData_.length, - )); + _checkOpIsOne( + ssl.EVP_AEAD_CTX_seal( + ctx, + out, + outLen, + maxOut, + scope.dataAsPointer(iv), + iv.length, + scope.dataAsPointer(data), + data.length, + scope.dataAsPointer(additionalData_), + additionalData_.length, + ), + ); return out.copy(outLen.value); } else { final outLen = scope(); final out = scope(data.length); - _checkOpIsOne(ssl.EVP_AEAD_CTX_open( - ctx, - out, - outLen, - data.length, - scope.dataAsPointer(iv), - iv.length, - scope.dataAsPointer(data), - data.length, - scope.dataAsPointer(additionalData_), - additionalData_.length, - )); + _checkOpIsOne( + ssl.EVP_AEAD_CTX_open( + ctx, + out, + outLen, + data.length, + scope.dataAsPointer(iv), + iv.length, + scope.dataAsPointer(data), + data.length, + scope.dataAsPointer(additionalData_), + additionalData_.length, + ), + ); return out.copy(outLen.value); } }); @@ -145,15 +146,14 @@ final class _AesGcmSecretKeyImpl implements AesGcmSecretKeyImpl { List iv, { List? additionalData, int? tagLength = 128, - }) async => - _aesGcmEncryptDecrypt( - _key, - data, - iv, - additionalData, - tagLength ?? 128, - false, - ); + }) async => _aesGcmEncryptDecrypt( + _key, + data, + iv, + additionalData, + tagLength ?? 128, + false, + ); @override Future encryptBytes( @@ -161,15 +161,14 @@ final class _AesGcmSecretKeyImpl implements AesGcmSecretKeyImpl { List iv, { List? additionalData, int? tagLength = 128, - }) async => - _aesGcmEncryptDecrypt( - _key, - data, - iv, - additionalData, - tagLength ?? 128, - true, - ); + }) async => _aesGcmEncryptDecrypt( + _key, + data, + iv, + additionalData, + tagLength ?? 128, + true, + ); @override Future> exportJsonWebKey() async => diff --git a/lib/src/impl_ffi/impl_ffi.digest.dart b/lib/src/impl_ffi/impl_ffi.digest.dart index f8612105..c24f25c1 100644 --- a/lib/src/impl_ffi/impl_ffi.digest.dart +++ b/lib/src/impl_ffi/impl_ffi.digest.dart @@ -22,7 +22,8 @@ abstract class _HashImpl implements HashImpl { return hash; } throw AssertionError( - 'Custom implementations of HashImpl are not supported.'); + 'Custom implementations of HashImpl are not supported.', + ); } @protected diff --git a/lib/src/impl_ffi/impl_ffi.ec_common.dart b/lib/src/impl_ffi/impl_ffi.ec_common.dart index 9c097127..b068d9f1 100644 --- a/lib/src/impl_ffi/impl_ffi.ec_common.dart +++ b/lib/src/impl_ffi/impl_ffi.ec_common.dart @@ -59,13 +59,12 @@ String _ecCurveToJwkCrv(EllipticCurve curve) { } /// Perform some post-import validation for EC keys. -void _validateEllipticCurveKey( - _EvpPKey key, - EllipticCurve curve, -) { +void _validateEllipticCurveKey(_EvpPKey key, EllipticCurve curve) { return _Scope.sync((scope) { - _checkData(ssl.EVP_PKEY_id.invoke(key) == EVP_PKEY_EC, - message: 'key is not an EC key'); + _checkData( + ssl.EVP_PKEY_id.invoke(key) == EVP_PKEY_EC, + message: 'key is not an EC key', + ); final ec = ssl.EVP_PKEY_get1_EC_KEY.invoke(key); _checkData(ec.address != 0, fallback: 'key is not an EC key'); @@ -81,15 +80,14 @@ void _validateEllipticCurveKey( // Check the curve of the imported key final nid = ssl.EC_GROUP_get_curve_name(ssl.EC_KEY_get0_group(ec)); - _checkData(_ecCurveToNID(curve) == nid, - message: 'incorrect elliptic curve'); + _checkData( + _ecCurveToNID(curve) == nid, + message: 'incorrect elliptic curve', + ); }); } -_EvpPKey _importPkcs8EcPrivateKey( - List keyData, - EllipticCurve curve, -) { +_EvpPKey _importPkcs8EcPrivateKey(List keyData, EllipticCurve curve) { return _Scope.sync((scope) { final k = ssl.EVP_parse_private_key(scope.createCBS(keyData)); _checkData(k.address != 0, fallback: 'unable to parse key'); @@ -99,10 +97,7 @@ _EvpPKey _importPkcs8EcPrivateKey( }); } -_EvpPKey _importSpkiEcPublicKey( - List keyData, - EllipticCurve curve, -) { +_EvpPKey _importSpkiEcPublicKey(List keyData, EllipticCurve curve) { return _Scope.sync((scope) { // TODO: When calling EVP_parse_public_key it might wise to check that CBS_len(cbs) == 0 is true afterwards // otherwise it might be that all of the contents of the key was not consumed and we should throw @@ -151,11 +146,15 @@ _EvpPKey _importJwkEcPrivateOrPublicKey( final crv = _ecCurveToJwkCrv(curve); _checkData(jwk.crv == crv, message: 'JWK property "crv" is not "$crv"'); - _checkData(expectedAlg == null || jwk.alg == null || jwk.alg == expectedAlg, - message: 'JWK property "alg" should be "$expectedAlg", if present'); + _checkData( + expectedAlg == null || jwk.alg == null || jwk.alg == expectedAlg, + message: 'JWK property "alg" should be "$expectedAlg", if present', + ); - _checkData(jwk.use == null || jwk.use == expectedUse, - message: 'JWK property "use" should be "$expectedUse", if present'); + _checkData( + jwk.use == null || jwk.use == expectedUse, + message: 'JWK property "use" should be "$expectedUse", if present', + ); // TODO: Reject keys with key_ops in inconsistent with isPrivateKey // Also in the js implementation... @@ -166,9 +165,9 @@ _EvpPKey _importJwkEcPrivateOrPublicKey( scope.defer(() => ssl.EC_KEY_free(ec)); // We expect parameters to have this size - final paramSize = _numBitsToBytes(ssl.EC_GROUP_get_degree( - ssl.EC_KEY_get0_group(ec), - )); + final paramSize = _numBitsToBytes( + ssl.EC_GROUP_get_degree(ssl.EC_KEY_get0_group(ec)), + ); // Utility to decode a JWK parameter. ffi.Pointer decodeParam(String val, String prop) { @@ -214,10 +213,7 @@ _EvpPKey _importJwkEcPrivateOrPublicKey( }); } -_EvpPKey _importRawEcPublicKey( - List keyData, - EllipticCurve curve, -) { +_EvpPKey _importRawEcPublicKey(List keyData, EllipticCurve curve) { // See: https://chromium.googlesource.com/chromium/src/+/43d62c50b705f88c67b14539e91fd8fd017f70c4/components/webcrypto/algorithms/ec.cc#332 return _Scope.sync((scope) { // Create EC_KEY for the curve @@ -242,8 +238,10 @@ _EvpPKey _importRawEcPublicKey( fallback: 'invalid keyData', ); // Copy pub point to ec - _checkDataIsOne(ssl.EC_KEY_set_public_key(ec, pub), - fallback: 'invalid keyData'); + _checkDataIsOne( + ssl.EC_KEY_set_public_key(ec, pub), + fallback: 'invalid keyData', + ); final key = _EvpPKey(); _checkOpIsOne(ssl.EVP_PKEY_set1_EC_KEY.invoke(key, ec)); @@ -293,13 +291,15 @@ Map _exportJwkEcPrivateOrPublicKey( final x = scope.createBN(); final y = scope.createBN(); - _checkOpIsOne(ssl.EC_POINT_get_affine_coordinates_GFp( - group, - ssl.EC_KEY_get0_public_key(ec), - x, - y, - ffi.nullptr, - )); + _checkOpIsOne( + ssl.EC_POINT_get_affine_coordinates_GFp( + group, + ssl.EC_KEY_get0_public_key(ec), + x, + y, + ffi.nullptr, + ), + ); // Create an output buffer final out = scope(paramSize); @@ -327,9 +327,7 @@ Map _exportJwkEcPrivateOrPublicKey( }); } -KeyPair<_EvpPKey, _EvpPKey> _generateEcKeyPair( - EllipticCurve curve, -) { +KeyPair<_EvpPKey, _EvpPKey> _generateEcKeyPair(EllipticCurve curve) { return _Scope.sync((scope) { final ecPriv = ssl.EC_KEY_new_by_curve_name(_ecCurveToNID(curve)); _checkOp(ecPriv.address != 0, fallback: 'internal failure to use curve'); @@ -343,17 +341,13 @@ KeyPair<_EvpPKey, _EvpPKey> _generateEcKeyPair( final ecPub = ssl.EC_KEY_new_by_curve_name(_ecCurveToNID(curve)); _checkOp(ecPub.address != 0); scope.defer(() => ssl.EC_KEY_free(ecPub)); - _checkOpIsOne(ssl.EC_KEY_set_public_key( - ecPub, - ssl.EC_KEY_get0_public_key(ecPriv), - )); + _checkOpIsOne( + ssl.EC_KEY_set_public_key(ecPub, ssl.EC_KEY_get0_public_key(ecPriv)), + ); final pubKey = _EvpPKey(); _checkOpIsOne(ssl.EVP_PKEY_set1_EC_KEY.invoke(pubKey, ecPub)); - return ( - privateKey: privKey, - publicKey: pubKey, - ); + return (privateKey: privKey, publicKey: pubKey); }); } diff --git a/lib/src/impl_ffi/impl_ffi.ecdh.dart b/lib/src/impl_ffi/impl_ffi.ecdh.dart index fb8e42d6..06cbf53c 100644 --- a/lib/src/impl_ffi/impl_ffi.ecdh.dart +++ b/lib/src/impl_ffi/impl_ffi.ecdh.dart @@ -19,25 +19,23 @@ part of 'impl_ffi.dart'; Future ecdhPrivateKey_importPkcs8Key( List keyData, EllipticCurve curve, -) async => - _EcdhPrivateKeyImpl(_importPkcs8EcPrivateKey(keyData, curve)); +) async => _EcdhPrivateKeyImpl(_importPkcs8EcPrivateKey(keyData, curve)); Future ecdhPrivateKey_importJsonWebKey( Map jwk, EllipticCurve curve, -) async => - _EcdhPrivateKeyImpl(_importJwkEcPrivateOrPublicKey( - JsonWebKey.fromJson(jwk), - curve, - isPrivateKey: true, - expectedUse: 'enc', - expectedAlg: null, // ECDH has no validation of 'jwk.alg' - )); +) async => _EcdhPrivateKeyImpl( + _importJwkEcPrivateOrPublicKey( + JsonWebKey.fromJson(jwk), + curve, + isPrivateKey: true, + expectedUse: 'enc', + expectedAlg: null, // ECDH has no validation of 'jwk.alg' + ), +); Future> - ecdhPrivateKey_generateKey( - EllipticCurve curve, -) async { +ecdhPrivateKey_generateKey(EllipticCurve curve) async { final p = _generateEcKeyPair(curve); return ( privateKey: _EcdhPrivateKeyImpl(p.privateKey), @@ -48,43 +46,45 @@ Future> Future ecdhPublicKey_importRawKey( List keyData, EllipticCurve curve, -) async => - _EcdhPublicKeyImpl(_importRawEcPublicKey(keyData, curve)); +) async => _EcdhPublicKeyImpl(_importRawEcPublicKey(keyData, curve)); Future ecdhPublicKey_importSpkiKey( List keyData, EllipticCurve curve, -) async => - _EcdhPublicKeyImpl(_importSpkiEcPublicKey(keyData, curve)); +) async => _EcdhPublicKeyImpl(_importSpkiEcPublicKey(keyData, curve)); Future ecdhPublicKey_importJsonWebKey( Map jwk, EllipticCurve curve, -) async => - _EcdhPublicKeyImpl(_importJwkEcPrivateOrPublicKey( - JsonWebKey.fromJson(jwk), - curve, - isPrivateKey: false, - expectedUse: 'enc', - expectedAlg: null, // ECDH has no validation of 'jwk.alg' - )); +) async => _EcdhPublicKeyImpl( + _importJwkEcPrivateOrPublicKey( + JsonWebKey.fromJson(jwk), + curve, + isPrivateKey: false, + expectedUse: 'enc', + expectedAlg: null, // ECDH has no validation of 'jwk.alg' + ), +); final class _StaticEcdhPrivateKeyImpl implements StaticEcdhPrivateKeyImpl { const _StaticEcdhPrivateKeyImpl(); @override Future importPkcs8Key( - List keyData, EllipticCurve curve) => - ecdhPrivateKey_importPkcs8Key(keyData, curve); + List keyData, + EllipticCurve curve, + ) => ecdhPrivateKey_importPkcs8Key(keyData, curve); @override Future importJsonWebKey( - Map jwk, EllipticCurve curve) => - ecdhPrivateKey_importJsonWebKey(jwk, curve); + Map jwk, + EllipticCurve curve, + ) => ecdhPrivateKey_importJsonWebKey(jwk, curve); @override Future<(EcdhPrivateKeyImpl, EcdhPublicKeyImpl)> generateKey( - EllipticCurve curve) async { + EllipticCurve curve, + ) async { final KeyPair keyPair = await ecdhPrivateKey_generateKey(curve); @@ -138,8 +138,9 @@ final class _EcdhPrivateKeyImpl implements EcdhPrivateKeyImpl { // Field size rounded up to 8 bits is the maximum number of bits we can // derive. The most significant bits will be zero in this case. - final fieldSize = - ssl.EC_GROUP_get_degree(ssl.EC_KEY_get0_group(privEcKey)); + final fieldSize = ssl.EC_GROUP_get_degree( + ssl.EC_KEY_get0_group(privEcKey), + ); final maxLength = 8 * (fieldSize / 8).ceil(); if (length > maxLength) { throw operationError( @@ -196,18 +197,21 @@ final class _StaticEcdhPublicKeyImpl implements StaticEcdhPublicKeyImpl { @override Future importRawKey( - List keyData, EllipticCurve curve) => - ecdhPublicKey_importRawKey(keyData, curve); + List keyData, + EllipticCurve curve, + ) => ecdhPublicKey_importRawKey(keyData, curve); @override Future importSpkiKey( - List keyData, EllipticCurve curve) => - ecdhPublicKey_importSpkiKey(keyData, curve); + List keyData, + EllipticCurve curve, + ) => ecdhPublicKey_importSpkiKey(keyData, curve); @override Future importJsonWebKey( - Map jwk, EllipticCurve curve) => - ecdhPublicKey_importJsonWebKey(jwk, curve); + Map jwk, + EllipticCurve curve, + ) => ecdhPublicKey_importJsonWebKey(jwk, curve); } final class _EcdhPublicKeyImpl implements EcdhPublicKeyImpl { diff --git a/lib/src/impl_ffi/impl_ffi.ecdsa.dart b/lib/src/impl_ffi/impl_ffi.ecdsa.dart index 9f9db6fa..ba399eb6 100644 --- a/lib/src/impl_ffi/impl_ffi.ecdsa.dart +++ b/lib/src/impl_ffi/impl_ffi.ecdsa.dart @@ -35,25 +35,23 @@ String _ecdsaCurveToJwkAlg(EllipticCurve curve) { Future ecdsaPrivateKey_importPkcs8Key( List keyData, EllipticCurve curve, -) async => - _EcdsaPrivateKeyImpl(_importPkcs8EcPrivateKey(keyData, curve)); +) async => _EcdsaPrivateKeyImpl(_importPkcs8EcPrivateKey(keyData, curve)); Future ecdsaPrivateKey_importJsonWebKey( Map jwk, EllipticCurve curve, -) async => - _EcdsaPrivateKeyImpl(_importJwkEcPrivateOrPublicKey( - JsonWebKey.fromJson(jwk), - curve, - isPrivateKey: true, - expectedUse: 'sig', - expectedAlg: _ecdsaCurveToJwkAlg(curve), - )); +) async => _EcdsaPrivateKeyImpl( + _importJwkEcPrivateOrPublicKey( + JsonWebKey.fromJson(jwk), + curve, + isPrivateKey: true, + expectedUse: 'sig', + expectedAlg: _ecdsaCurveToJwkAlg(curve), + ), +); Future> - ecdsaPrivateKey_generateKey( - EllipticCurve curve, -) async { +ecdsaPrivateKey_generateKey(EllipticCurve curve) async { final p = _generateEcKeyPair(curve); return ( privateKey: _EcdsaPrivateKeyImpl(p.privateKey), @@ -64,26 +62,25 @@ Future> Future ecdsaPublicKey_importRawKey( List keyData, EllipticCurve curve, -) async => - _EcdsaPublicKeyImpl(_importRawEcPublicKey(keyData, curve)); +) async => _EcdsaPublicKeyImpl(_importRawEcPublicKey(keyData, curve)); Future ecdsaPublicKey_importSpkiKey( List keyData, EllipticCurve curve, -) async => - _EcdsaPublicKeyImpl(_importSpkiEcPublicKey(keyData, curve)); +) async => _EcdsaPublicKeyImpl(_importSpkiEcPublicKey(keyData, curve)); Future ecdsaPublicKey_importJsonWebKey( Map jwk, EllipticCurve curve, -) async => - _EcdsaPublicKeyImpl(_importJwkEcPrivateOrPublicKey( - JsonWebKey.fromJson(jwk), - curve, - isPrivateKey: false, - expectedUse: 'sig', - expectedAlg: _ecdsaCurveToJwkAlg(curve), - )); +) async => _EcdsaPublicKeyImpl( + _importJwkEcPrivateOrPublicKey( + JsonWebKey.fromJson(jwk), + curve, + isPrivateKey: false, + expectedUse: 'sig', + expectedAlg: _ecdsaCurveToJwkAlg(curve), + ), +); /// Convert ECDSA signature in DER format returned by BoringSSL to the raw R + S /// formated specified in the webcrypto specification. @@ -96,8 +93,10 @@ Uint8List _convertEcdsaDerSignatureToWebCryptoSignature( return _Scope.sync((scope) { // TODO: Check if cbs is empty after parsing, consider using ECDSA_SIG_from_bytes instead (like chrome does) final ecdsa = ssl.ECDSA_SIG_parse(scope.createCBS(signature)); - _checkOp(ecdsa.address != 0, - message: 'internal error formatting signature'); + _checkOp( + ecdsa.address != 0, + message: 'internal error formatting signature', + ); scope.defer(() => ssl.ECDSA_SIG_free(ecdsa)); // Read EC key and get the number of bytes required to encode R and S. @@ -105,9 +104,9 @@ Uint8List _convertEcdsaDerSignatureToWebCryptoSignature( _checkOp(ec.address != 0, message: 'internal key type invariant violation'); scope.defer(() => ssl.EC_KEY_free(ec)); - final N = ssl.BN_num_bytes(ssl.EC_GROUP_get0_order(ssl.EC_KEY_get0_group( - ec, - ))); + final N = ssl.BN_num_bytes( + ssl.EC_GROUP_get0_order(ssl.EC_KEY_get0_group(ec)), + ); // Access R and S from the ecdsa signature final R = scope>(); @@ -144,9 +143,9 @@ Uint8List? _convertEcdsaWebCryptoSignatureToDerSignature( _checkOp(ec.address != 0, message: 'internal key type invariant violation'); scope.defer(() => ssl.EC_KEY_free(ec)); - final N = ssl.BN_num_bytes(ssl.EC_GROUP_get0_order(ssl.EC_KEY_get0_group( - ec, - ))); + final N = ssl.BN_num_bytes( + ssl.EC_GROUP_get0_order(ssl.EC_KEY_get0_group(ec)), + ); if (N * 2 != signature.length) { // If the signature format is invalid we consider the signature invalid and @@ -186,15 +185,15 @@ final class _StaticEcdsaPrivateKeyImpl implements StaticEcdsaPrivateKeyImpl { @override Future importPkcs8Key( - List keyData, EllipticCurve curve) => - ecdsaPrivateKey_importPkcs8Key(keyData, curve); + List keyData, + EllipticCurve curve, + ) => ecdsaPrivateKey_importPkcs8Key(keyData, curve); @override Future importJsonWebKey( Map jwk, EllipticCurve curve, - ) => - ecdsaPrivateKey_importJsonWebKey(jwk, curve); + ) => ecdsaPrivateKey_importJsonWebKey(jwk, curve); @override Future<(EcdsaPrivateKeyImpl, EcdsaPublicKeyImpl)> generateKey( @@ -241,20 +240,21 @@ final class _StaticEcdsaPublicKeyImpl implements StaticEcdsaPublicKeyImpl { @override Future importRawKey( - List keyData, EllipticCurve curve) => - ecdsaPublicKey_importRawKey(keyData, curve); + List keyData, + EllipticCurve curve, + ) => ecdsaPublicKey_importRawKey(keyData, curve); @override Future importJsonWebKey( Map jwk, EllipticCurve curve, - ) => - ecdsaPublicKey_importJsonWebKey(jwk, curve); + ) => ecdsaPublicKey_importJsonWebKey(jwk, curve); @override Future importSpkiKey( - List keyData, EllipticCurve curve) => - ecdsaPublicKey_importSpkiKey(keyData, curve); + List keyData, + EllipticCurve curve, + ) => ecdsaPublicKey_importSpkiKey(keyData, curve); } final class _EcdsaPublicKeyImpl implements EcdsaPublicKeyImpl { @@ -269,8 +269,10 @@ final class _EcdsaPublicKeyImpl implements EcdsaPublicKeyImpl { @override Future verifyBytes( - List signature, List data, HashImpl hash) => - verifyStream(signature, Stream.value(data), hash); + List signature, + List data, + HashImpl hash, + ) => verifyStream(signature, Stream.value(data), hash); @override Future verifyStream( diff --git a/lib/src/impl_ffi/impl_ffi.hmac.dart b/lib/src/impl_ffi/impl_ffi.hmac.dart index 9c98e9ec..71780f08 100644 --- a/lib/src/impl_ffi/impl_ffi.hmac.dart +++ b/lib/src/impl_ffi/impl_ffi.hmac.dart @@ -78,25 +78,27 @@ Future hmacSecretKey_generateKey( final keyData = Uint8List((length / 8).ceil()); fillRandomBytes(keyData); - return _HmacSecretKeyImpl( - _asUint8ListZeroedToBitLength(keyData, length), - h, - ); + return _HmacSecretKeyImpl(_asUint8ListZeroedToBitLength(keyData, length), h); } final class _StaticHmacSecretKeyImpl implements StaticHmacSecretKeyImpl { const _StaticHmacSecretKeyImpl(); @override - Future importRawKey(List keyData, HashImpl hash, - {int? length}) { + Future importRawKey( + List keyData, + HashImpl hash, { + int? length, + }) { return hmacSecretKey_importRawKey(keyData, hash, length: length); } @override Future importJsonWebKey( - Map jwk, HashImpl hash, - {int? length}) { + Map jwk, + HashImpl hash, { + int? length, + }) { return hmacSecretKey_importJsonWebKey(jwk, hash, length: length); } @@ -124,13 +126,15 @@ final class _HmacSecretKeyImpl implements HmacSecretKeyImpl { Future signStream(Stream> data) { return _Scope.async((scope) async { final ctx = scope.create(ssl.HMAC_CTX_new, ssl.HMAC_CTX_free); - _checkOpIsOne(ssl.HMAC_Init_ex( - ctx, - scope.dataAsPointer(_keyData), - _keyData.length, - _hash._md, - ffi.nullptr, - )); + _checkOpIsOne( + ssl.HMAC_Init_ex( + ctx, + scope.dataAsPointer(_keyData), + _keyData.length, + _hash._md, + ffi.nullptr, + ), + ); await _streamToUpdate(data, ctx, ssl.HMAC_Update); diff --git a/lib/src/impl_ffi/impl_ffi.pbkdf2.dart b/lib/src/impl_ffi/impl_ffi.pbkdf2.dart index b64b00dd..0046cfc0 100644 --- a/lib/src/impl_ffi/impl_ffi.pbkdf2.dart +++ b/lib/src/impl_ffi/impl_ffi.pbkdf2.dart @@ -17,7 +17,8 @@ part of 'impl_ffi.dart'; Future pbkdf2SecretKey_importRawKey( - List keyData) async { + List keyData, +) async { return _Pbkdf2SecretKeyImpl(Uint8List.fromList(keyData)); } @@ -56,31 +57,36 @@ final class _Pbkdf2SecretKeyImpl implements Pbkdf2SecretKeyImpl { // https://chromium.googlesource.com/chromium/src/+/43d62c50b705f88c67b14539e91fd8fd017f70c4/components/webcrypto/algorithms/pbkdf2.cc#75 if (length % 8 != 0) { throw operationError( - 'The length for PBKDF2 must be a multiple of 8 bits'); + 'The length for PBKDF2 must be a multiple of 8 bits', + ); } if (length == 0) { throw operationError( - 'A length of zero is not allowed Pbkdf2SecretKey.deriveBits'); + 'A length of zero is not allowed Pbkdf2SecretKey.deriveBits', + ); } if (iterations <= 0) { throw operationError( - 'Iterations <= 0 is not allowed for Pbkdf2SecretKey.deriveBits'); + 'Iterations <= 0 is not allowed for Pbkdf2SecretKey.deriveBits', + ); } final lengthInBytes = length ~/ 8; return _Scope.async((scope) async { final out = scope(lengthInBytes); - _checkOpIsOne(await _PKCS5_PBKDF2_HMAC( - scope.dataAsPointer(_key), - _key.length, - scope.dataAsPointer(salt), - salt.length, - iterations, - md, - lengthInBytes, - out, - )); + _checkOpIsOne( + await _PKCS5_PBKDF2_HMAC( + scope.dataAsPointer(_key), + _key.length, + scope.dataAsPointer(salt), + salt.length, + iterations, + md, + lengthInBytes, + out, + ), + ); return out.copy(lengthInBytes); }); } @@ -103,17 +109,16 @@ Future _PKCS5_PBKDF2_HMAC( ffi.Pointer md, int lengthInBytes, ffi.Pointer out, -) async => - await Isolate.run( - () => ssl.PKCS5_PBKDF2_HMAC( - key, - keyLength, - salt, - saltLength, - iterations, - md, - lengthInBytes, - out, - ), - debugName: 'PKCS5_PBKDF2_HMAC', - ); +) async => await Isolate.run( + () => ssl.PKCS5_PBKDF2_HMAC( + key, + keyLength, + salt, + saltLength, + iterations, + md, + lengthInBytes, + out, + ), + debugName: 'PKCS5_PBKDF2_HMAC', +); diff --git a/lib/src/impl_ffi/impl_ffi.rsa_common.dart b/lib/src/impl_ffi/impl_ffi.rsa_common.dart index 4c71aef5..ad724625 100644 --- a/lib/src/impl_ffi/impl_ffi.rsa_common.dart +++ b/lib/src/impl_ffi/impl_ffi.rsa_common.dart @@ -20,8 +20,10 @@ _EvpPKey _importPkcs8RsaPrivateKey(List keyData) { _checkData(k.address != 0, fallback: 'unable to parse key'); final key = _EvpPKey.wrap(k); - _checkData(ssl.EVP_PKEY_id.invoke(key) == EVP_PKEY_RSA, - message: 'key is not an RSA key'); + _checkData( + ssl.EVP_PKEY_id.invoke(key) == EVP_PKEY_RSA, + message: 'key is not an RSA key', + ); final rsa = ssl.EVP_PKEY_get1_RSA.invoke(key); _checkData(rsa.address != 0, fallback: 'key is not an RSA key'); @@ -39,8 +41,10 @@ _EvpPKey _importSpkiRsaPublicKey(List keyData) { _checkData(k.address != 0, fallback: 'unable to parse key'); final key = _EvpPKey.wrap(k); - _checkData(ssl.EVP_PKEY_id.invoke(key) == EVP_PKEY_RSA, - message: 'key is not an RSA key'); + _checkData( + ssl.EVP_PKEY_id.invoke(key) == EVP_PKEY_RSA, + message: 'key is not an RSA key', + ); final rsa = ssl.EVP_PKEY_get1_RSA.invoke(key); _checkData(rsa.address != 0, fallback: 'key is not an RSA key'); @@ -63,8 +67,7 @@ _EvpPKey _importJwkRsaPrivateOrPublicKey( bool condition, String prop, [ String message = 'must be present', - ]) => - _checkData(condition, message: 'JWK property "$prop" $message'); + ]) => _checkData(condition, message: 'JWK property "$prop" $message'); checkJwk(jwk.kty == 'RSA', 'kty', 'must be "RSA"'); checkJwk( @@ -241,7 +244,8 @@ Future> _generateRsaKeyPair( } if ((modulusLength % 8) != 0) { throw UnsupportedError( - 'modulusLength: $modulusLength is not a multiple of 8'); + 'modulusLength: $modulusLength is not a multiple of 8', + ); } // Limit publicExponent allow-listed as in chromium: @@ -258,12 +262,9 @@ Future> _generateRsaKeyPair( final e = scope.createBN(); _checkOpIsOne(ssl.BN_set_word(e, publicExponent.toInt())); - _checkOpIsOne(await _RSA_generate_key_ex( - privRSA, - modulusLength, - e, - ffi.nullptr, - )); + _checkOpIsOne( + await _RSA_generate_key_ex(privRSA, modulusLength, e, ffi.nullptr), + ); // Copy out the public RSA key final pubRSA = scope.create( @@ -279,10 +280,7 @@ Future> _generateRsaKeyPair( final pubKey = _EvpPKey(); _checkOp(ssl.EVP_PKEY_set1_RSA.invoke(pubKey, pubRSA) == 1); - return ( - privateKey: privKey, - publicKey: pubKey, - ); + return (privateKey: privKey, publicKey: pubKey); }); } @@ -297,8 +295,7 @@ Future _RSA_generate_key_ex( int bits, ffi.Pointer e, ffi.Pointer cb, -) async => - await Isolate.run( - () => ssl.RSA_generate_key_ex(rsa, bits, e, cb), - debugName: 'RSA_generate_key_ex', - ); +) async => await Isolate.run( + () => ssl.RSA_generate_key_ex(rsa, bits, e, cb), + debugName: 'RSA_generate_key_ex', +); diff --git a/lib/src/impl_ffi/impl_ffi.rsaoaep.dart b/lib/src/impl_ffi/impl_ffi.rsaoaep.dart index 82032d33..f0bb3aeb 100644 --- a/lib/src/impl_ffi/impl_ffi.rsaoaep.dart +++ b/lib/src/impl_ffi/impl_ffi.rsaoaep.dart @@ -43,7 +43,7 @@ Future rsaOaepPrivateKey_importJsonWebKey( } Future> - rsaOaepPrivateKey_generateKey( +rsaOaepPrivateKey_generateKey( int modulusLength, BigInt publicExponent, HashImpl hash, @@ -100,7 +100,8 @@ Future _rsaOaepeEncryptOrDecryptBytes( ffi.Pointer, ffi.Pointer, int, - ) encryptOrDecryptFn, + ) + encryptOrDecryptFn, List data, { List? label, }) async { @@ -110,42 +111,29 @@ Future _rsaOaepeEncryptOrDecryptBytes( ssl.EVP_PKEY_CTX_free, ); _checkOpIsOne(initFn(ctx)); - _checkOpIsOne(ssl.EVP_PKEY_CTX_set_rsa_padding( - ctx, - RSA_PKCS1_OAEP_PADDING, - )); + _checkOpIsOne( + ssl.EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_OAEP_PADDING), + ); _checkOpIsOne(ssl.EVP_PKEY_CTX_set_rsa_oaep_md(ctx, md)); _checkOpIsOne(ssl.EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, md)); // Copy and set label if (label != null && label.isNotEmpty) { final plabel = scope.dataAsPointer(label); - _checkOpIsOne(ssl.EVP_PKEY_CTX_set0_rsa_oaep_label( - ctx, - plabel, - label.length, - )); + _checkOpIsOne( + ssl.EVP_PKEY_CTX_set0_rsa_oaep_label(ctx, plabel, label.length), + ); scope.move(plabel); } final input = scope.dataAsPointer(data); final plen = scope(); plen.value = 0; - _checkOpIsOne(encryptOrDecryptFn( - ctx, - ffi.nullptr, - plen, - input, - data.length, - )); + _checkOpIsOne( + encryptOrDecryptFn(ctx, ffi.nullptr, plen, input, data.length), + ); final out = scope(plen.value); - _checkOpIsOne(encryptOrDecryptFn( - ctx, - out, - plen, - input, - data.length, - )); + _checkOpIsOne(encryptOrDecryptFn(ctx, out, plen, input, data.length)); return out.copy(plen.value); }); } @@ -156,15 +144,15 @@ final class _StaticRsaOaepPrivateKeyImpl @override Future importPkcs8Key( - List keyData, HashImpl hash) => - rsaOaepPrivateKey_importPkcs8Key(keyData, hash); + List keyData, + HashImpl hash, + ) => rsaOaepPrivateKey_importPkcs8Key(keyData, hash); @override Future importJsonWebKey( Map jwk, HashImpl hash, - ) => - rsaOaepPrivateKey_importJsonWebKey(jwk, hash); + ) => rsaOaepPrivateKey_importJsonWebKey(jwk, hash); @override Future<(RsaOaepPrivateKeyImpl, RsaOaepPublicKeyImpl)> generateKey( @@ -174,7 +162,10 @@ final class _StaticRsaOaepPrivateKeyImpl ) async { final KeyPair keyPair = await rsaOaepPrivateKey_generateKey( - modulusLength, publicExponent, hash); + modulusLength, + publicExponent, + hash, + ); return (keyPair.privateKey, keyPair.publicKey); } @@ -223,15 +214,13 @@ final class _StaticRsaOaepPublicKeyImpl implements StaticRsaOaepPublicKeyImpl { Future importSpkiKey( List keyData, HashImpl hash, - ) => - rsaOaepPublicKey_importSpkiKey(keyData, hash); + ) => rsaOaepPublicKey_importSpkiKey(keyData, hash); @override Future importJsonWebKey( Map jwk, HashImpl hash, - ) => - rsaOaepPublicKey_importJsonWebKey(jwk, hash); + ) => rsaOaepPublicKey_importJsonWebKey(jwk, hash); } final class _RsaOaepPublicKeyImpl implements RsaOaepPublicKeyImpl { diff --git a/lib/src/impl_ffi/impl_ffi.rsapss.dart b/lib/src/impl_ffi/impl_ffi.rsapss.dart index 73f035bd..61ebd6be 100644 --- a/lib/src/impl_ffi/impl_ffi.rsapss.dart +++ b/lib/src/impl_ffi/impl_ffi.rsapss.dart @@ -43,7 +43,7 @@ Future rsaPssPrivateKey_importJsonWebKey( } Future> - rsaPssPrivateKey_generateKey( +rsaPssPrivateKey_generateKey( int modulusLength, BigInt publicExponent, HashImpl hash, @@ -73,8 +73,12 @@ Future rsaPssPublicKey_importJsonWebKey( // Validate and get hash function final h = _HashImpl.fromHash(hash); return _RsaPssPublicKeyImpl( - _importJwkRsaPrivateOrPublicKey(JsonWebKey.fromJson(jwk), - isPrivateKey: false, expectedUse: 'sig', expectedAlg: h.rsaPssJwkAlg), + _importJwkRsaPrivateOrPublicKey( + JsonWebKey.fromJson(jwk), + isPrivateKey: false, + expectedUse: 'sig', + expectedAlg: h.rsaPssJwkAlg, + ), h, ); } @@ -137,20 +141,28 @@ final class _RsaPssPrivateKeyImpl implements RsaPssPrivateKeyImpl { ); } - return _signStream(_key, _hash._md, data, config: (ctx) { - _checkOpIsOne(ssl.EVP_PKEY_CTX_set_rsa_padding( - ctx, - RSA_PKCS1_PSS_PADDING, - )); - _checkDataIsOne(ssl.EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, saltLength)); - _checkDataIsOne(ssl.EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, _hash._md)); - }); + return _signStream( + _key, + _hash._md, + data, + config: (ctx) { + _checkOpIsOne( + ssl.EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PSS_PADDING), + ); + _checkDataIsOne(ssl.EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, saltLength)); + _checkDataIsOne(ssl.EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, _hash._md)); + }, + ); } @override Future> exportJsonWebKey() async => - _exportJwkRsaPrivateOrPublicKey(_key, - isPrivateKey: true, jwkUse: 'sig', jwkAlg: _hash.rsaPssJwkAlg); + _exportJwkRsaPrivateOrPublicKey( + _key, + isPrivateKey: true, + jwkUse: 'sig', + jwkAlg: _hash.rsaPssJwkAlg, + ); @override Future exportPkcs8Key() async => _exportPkcs8Key(_key); @@ -192,8 +204,7 @@ final class _RsaPssPublicKeyImpl implements RsaPssPublicKeyImpl { List signature, List data, int saltLength, - ) => - verifyStream(signature, Stream.value(data), saltLength); + ) => verifyStream(signature, Stream.value(data), saltLength); @override Future verifyStream( @@ -209,20 +220,29 @@ final class _RsaPssPublicKeyImpl implements RsaPssPublicKeyImpl { ); } - return _verifyStream(_key, _hash._md, signature, data, config: (ctx) { - _checkOpIsOne(ssl.EVP_PKEY_CTX_set_rsa_padding( - ctx, - RSA_PKCS1_PSS_PADDING, - )); - _checkDataIsOne(ssl.EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, saltLength)); - _checkDataIsOne(ssl.EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, _hash._md)); - }); + return _verifyStream( + _key, + _hash._md, + signature, + data, + config: (ctx) { + _checkOpIsOne( + ssl.EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PSS_PADDING), + ); + _checkDataIsOne(ssl.EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, saltLength)); + _checkDataIsOne(ssl.EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, _hash._md)); + }, + ); } @override Future> exportJsonWebKey() async => - _exportJwkRsaPrivateOrPublicKey(_key, - isPrivateKey: false, jwkUse: 'sig', jwkAlg: _hash.rsaPssJwkAlg); + _exportJwkRsaPrivateOrPublicKey( + _key, + isPrivateKey: false, + jwkUse: 'sig', + jwkAlg: _hash.rsaPssJwkAlg, + ); @override Future exportSpkiKey() async => _exportSpkiKey(_key); diff --git a/lib/src/impl_ffi/impl_ffi.rsassapkcs1v15.dart b/lib/src/impl_ffi/impl_ffi.rsassapkcs1v15.dart index c613cae0..61ae9e4c 100644 --- a/lib/src/impl_ffi/impl_ffi.rsassapkcs1v15.dart +++ b/lib/src/impl_ffi/impl_ffi.rsassapkcs1v15.dart @@ -43,7 +43,7 @@ Future rsassaPkcs1V15PrivateKey_importJsonWebKey( } Future> - rsassaPkcs1V15PrivateKey_generateKey( +rsassaPkcs1V15PrivateKey_generateKey( int modulusLength, BigInt publicExponent, HashImpl hash, @@ -91,26 +91,23 @@ final class _StaticRsaSsaPkcs1V15PrivateKeyImpl Future importPkcs8Key( List keyData, HashImpl hash, - ) => - rsassaPkcs1V15PrivateKey_importPkcs8Key(keyData, hash); + ) => rsassaPkcs1V15PrivateKey_importPkcs8Key(keyData, hash); @override Future importJsonWebKey( Map jwk, HashImpl hash, - ) => - rsassaPkcs1V15PrivateKey_importJsonWebKey(jwk, hash); + ) => rsassaPkcs1V15PrivateKey_importJsonWebKey(jwk, hash); @override Future<(RsaSsaPkcs1V15PrivateKeyImpl, RsaSsaPkcs1V15PublicKeyImpl)> - generateKey( - int modulusLength, - BigInt publicExponent, - HashImpl hash, - ) async { + generateKey(int modulusLength, BigInt publicExponent, HashImpl hash) async { final KeyPair - pair = await rsassaPkcs1V15PrivateKey_generateKey( - modulusLength, publicExponent, hash); + pair = await rsassaPkcs1V15PrivateKey_generateKey( + modulusLength, + publicExponent, + hash, + ); return (pair.privateKey, pair.publicKey); } @@ -132,10 +129,14 @@ final class _RsaSsaPkcs1V15PrivateKeyImpl Future signBytes(List data) => signStream(Stream.value(data)); @override - Future signStream(Stream> data) => - _signStream(_key, _hash._md, data, config: (ctx) { - _checkOpIsOne(ssl.EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING)); - }); + Future signStream(Stream> data) => _signStream( + _key, + _hash._md, + data, + config: (ctx) { + _checkOpIsOne(ssl.EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING)); + }, + ); @override Future> exportJsonWebKey() async => @@ -156,13 +157,15 @@ final class _StaticRsaSsaPkcs1V15PublicKeyImpl @override Future importSpkiKey( - List keyData, HashImpl hash) => - rsassaPkcs1V15PublicKey_importSpkiKey(keyData, hash); + List keyData, + HashImpl hash, + ) => rsassaPkcs1V15PublicKey_importSpkiKey(keyData, hash); @override Future importJsonWebKey( - Map jwk, HashImpl hash) => - rsassaPkcs1V15PublicKey_importJsonWebKey(jwk, hash); + Map jwk, + HashImpl hash, + ) => rsassaPkcs1V15PublicKey_importJsonWebKey(jwk, hash); } final class _RsaSsaPkcs1V15PublicKeyImpl @@ -178,9 +181,17 @@ final class _RsaSsaPkcs1V15PublicKeyImpl @override Future verifyStream(List signature, Stream> data) => - _verifyStream(_key, _hash._md, signature, data, config: (ctx) { - _checkOpIsOne(ssl.EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING)); - }); + _verifyStream( + _key, + _hash._md, + signature, + data, + config: (ctx) { + _checkOpIsOne( + ssl.EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING), + ); + }, + ); @override Future> exportJsonWebKey() async => diff --git a/lib/src/impl_ffi/impl_ffi.utils.dart b/lib/src/impl_ffi/impl_ffi.utils.dart index 324d2cb4..5ea46b4e 100644 --- a/lib/src/impl_ffi/impl_ffi.utils.dart +++ b/lib/src/impl_ffi/impl_ffi.utils.dart @@ -24,8 +24,9 @@ class _EvpPKey implements ffi.Finalizable { /// will prioritize freeing them. static const _externalSizeEstimate = 4096; - static final _finalizer = - ffi.NativeFinalizer(ssl.addresses.EVP_PKEY_free.cast()); + static final _finalizer = ffi.NativeFinalizer( + ssl.addresses.EVP_PKEY_free.cast(), + ); final ffi.Pointer _pkey; @@ -74,23 +75,11 @@ extension on T Function(A1, ffi.Pointer) { /// Extension of native function that takes a [EVP_PKEY], making it easy to call /// using a wrapped [_EvpPKey]. -extension on T Function( - A1, A2, A3, A4, ffi.Pointer) { +extension + on T Function(A1, A2, A3, A4, ffi.Pointer) { /// Invoke this function with unwrapped [key]. - T invoke( - A1 arg1, - A2 arg2, - A3 arg3, - A4 arg4, - _EvpPKey key, - ) => - key.use((pkey) => this( - arg1, - arg2, - arg3, - arg4, - pkey, - )); + T invoke(A1 arg1, A2 arg2, A3 arg3, A4 arg4, _EvpPKey key) => + key.use((pkey) => this(arg1, arg2, arg3, arg4, pkey)); } /// Throw [OperationError] if [condition] is `false`. @@ -383,15 +372,12 @@ Future _signStream( }) { return _Scope.async((scope) async { final ctx = scope.create(ssl.EVP_MD_CTX_new, ssl.EVP_MD_CTX_free); - final pctx = - config != null ? scope>() : ffi.nullptr; - _checkOpIsOne(ssl.EVP_DigestSignInit.invoke( - ctx, - pctx, - md, - ffi.nullptr, - key, - )); + final pctx = config != null + ? scope>() + : ffi.nullptr; + _checkOpIsOne( + ssl.EVP_DigestSignInit.invoke(ctx, pctx, md, ffi.nullptr, key), + ); if (config != null) { config(pctx.value); } @@ -422,15 +408,12 @@ Future _verifyStream( return _Scope.async((scope) async { // Create and initialize verification context final ctx = scope.create(ssl.EVP_MD_CTX_new, ssl.EVP_MD_CTX_free); - final pctx = - config != null ? scope>() : ffi.nullptr; - _checkOpIsOne(ssl.EVP_DigestVerifyInit.invoke( - ctx, - pctx, - md, - ffi.nullptr, - key, - )); + final pctx = config != null + ? scope>() + : ffi.nullptr; + _checkOpIsOne( + ssl.EVP_DigestVerifyInit.invoke(ctx, pctx, md, ffi.nullptr, key), + ); if (config != null) { config(pctx.value); } diff --git a/lib/src/impl_interface/impl_interface.aesctr.dart b/lib/src/impl_interface/impl_interface.aesctr.dart index 99cf1f60..1fd7ca54 100644 --- a/lib/src/impl_interface/impl_interface.aesctr.dart +++ b/lib/src/impl_interface/impl_interface.aesctr.dart @@ -24,9 +24,15 @@ abstract interface class AesCtrSecretKeyImpl { Future encryptBytes(List data, List counter, int length); Future decryptBytes(List data, List counter, int length); Stream encryptStream( - Stream> data, List counter, int length); + Stream> data, + List counter, + int length, + ); Stream decryptStream( - Stream> data, List counter, int length); + Stream> data, + List counter, + int length, + ); Future exportRawKey(); Future> exportJsonWebKey(); } diff --git a/lib/src/impl_interface/impl_interface.aesgcm.dart b/lib/src/impl_interface/impl_interface.aesgcm.dart index 1a1cfa45..f75d2d1f 100644 --- a/lib/src/impl_interface/impl_interface.aesgcm.dart +++ b/lib/src/impl_interface/impl_interface.aesgcm.dart @@ -21,10 +21,18 @@ abstract interface class StaticAesGcmSecretKeyImpl { } abstract interface class AesGcmSecretKeyImpl { - Future encryptBytes(List data, List iv, - {List? additionalData, int? tagLength}); - Future decryptBytes(List data, List iv, - {List? additionalData, int? tagLength}); + Future encryptBytes( + List data, + List iv, { + List? additionalData, + int? tagLength, + }); + Future decryptBytes( + List data, + List iv, { + List? additionalData, + int? tagLength, + }); Future exportRawKey(); Future> exportJsonWebKey(); } diff --git a/lib/src/impl_interface/impl_interface.ecdh.dart b/lib/src/impl_interface/impl_interface.ecdh.dart index b2a622a7..a9378994 100644 --- a/lib/src/impl_interface/impl_interface.ecdh.dart +++ b/lib/src/impl_interface/impl_interface.ecdh.dart @@ -16,11 +16,16 @@ part of 'impl_interface.dart'; abstract interface class StaticEcdhPrivateKeyImpl { Future importPkcs8Key( - List keyData, EllipticCurve curve); + List keyData, + EllipticCurve curve, + ); Future importJsonWebKey( - Map jwk, EllipticCurve curve); + Map jwk, + EllipticCurve curve, + ); Future<(EcdhPrivateKeyImpl, EcdhPublicKeyImpl)> generateKey( - EllipticCurve curve); + EllipticCurve curve, + ); } abstract interface class EcdhPrivateKeyImpl { @@ -31,11 +36,17 @@ abstract interface class EcdhPrivateKeyImpl { abstract interface class StaticEcdhPublicKeyImpl { Future importRawKey( - List keyData, EllipticCurve curve); + List keyData, + EllipticCurve curve, + ); Future importSpkiKey( - List keyData, EllipticCurve curve); + List keyData, + EllipticCurve curve, + ); Future importJsonWebKey( - Map jwk, EllipticCurve curve); + Map jwk, + EllipticCurve curve, + ); } abstract interface class EcdhPublicKeyImpl { diff --git a/lib/src/impl_interface/impl_interface.ecdsa.dart b/lib/src/impl_interface/impl_interface.ecdsa.dart index 7d09cd14..0fd59c33 100644 --- a/lib/src/impl_interface/impl_interface.ecdsa.dart +++ b/lib/src/impl_interface/impl_interface.ecdsa.dart @@ -16,11 +16,16 @@ part of 'impl_interface.dart'; abstract interface class StaticEcdsaPrivateKeyImpl { Future importPkcs8Key( - List keyData, EllipticCurve curve); + List keyData, + EllipticCurve curve, + ); Future importJsonWebKey( - Map jwk, EllipticCurve curve); + Map jwk, + EllipticCurve curve, + ); Future<(EcdsaPrivateKeyImpl, EcdsaPublicKeyImpl)> generateKey( - EllipticCurve curve); + EllipticCurve curve, + ); } abstract interface class EcdsaPrivateKeyImpl { @@ -32,17 +37,26 @@ abstract interface class EcdsaPrivateKeyImpl { abstract interface class StaticEcdsaPublicKeyImpl { Future importRawKey( - List keyData, EllipticCurve curve); + List keyData, + EllipticCurve curve, + ); Future importJsonWebKey( - Map jwk, EllipticCurve curve); + Map jwk, + EllipticCurve curve, + ); Future importSpkiKey( - List keyData, EllipticCurve curve); + List keyData, + EllipticCurve curve, + ); } abstract interface class EcdsaPublicKeyImpl { Future verifyBytes(List signature, List data, HashImpl hash); Future verifyStream( - List signature, Stream> data, HashImpl hash); + List signature, + Stream> data, + HashImpl hash, + ); Future exportRawKey(); Future exportSpkiKey(); Future> exportJsonWebKey(); diff --git a/lib/src/impl_interface/impl_interface.hmac.dart b/lib/src/impl_interface/impl_interface.hmac.dart index f5e740bf..2f76bf7d 100644 --- a/lib/src/impl_interface/impl_interface.hmac.dart +++ b/lib/src/impl_interface/impl_interface.hmac.dart @@ -15,11 +15,16 @@ part of 'impl_interface.dart'; abstract interface class StaticHmacSecretKeyImpl { - Future importRawKey(List keyData, HashImpl hash, - {int? length}); + Future importRawKey( + List keyData, + HashImpl hash, { + int? length, + }); Future importJsonWebKey( - Map jwk, HashImpl hash, - {int? length}); + Map jwk, + HashImpl hash, { + int? length, + }); Future generateKey(HashImpl hash, {int? length}); } diff --git a/lib/src/impl_interface/impl_interface.pbkdf2.dart b/lib/src/impl_interface/impl_interface.pbkdf2.dart index 93ee4f76..7da69839 100644 --- a/lib/src/impl_interface/impl_interface.pbkdf2.dart +++ b/lib/src/impl_interface/impl_interface.pbkdf2.dart @@ -20,5 +20,9 @@ abstract interface class StaticPbkdf2SecretKeyImpl { abstract interface class Pbkdf2SecretKeyImpl { Future deriveBits( - int length, HashImpl hash, List salt, int iterations); + int length, + HashImpl hash, + List salt, + int iterations, + ); } diff --git a/lib/src/impl_interface/impl_interface.rsaoaep.dart b/lib/src/impl_interface/impl_interface.rsaoaep.dart index 8d37dd8e..5132a9cb 100644 --- a/lib/src/impl_interface/impl_interface.rsaoaep.dart +++ b/lib/src/impl_interface/impl_interface.rsaoaep.dart @@ -16,11 +16,18 @@ part of 'impl_interface.dart'; abstract interface class StaticRsaOaepPrivateKeyImpl { Future importPkcs8Key( - List keyData, HashImpl hash); + List keyData, + HashImpl hash, + ); Future importJsonWebKey( - Map jwk, HashImpl hash); + Map jwk, + HashImpl hash, + ); Future<(RsaOaepPrivateKeyImpl, RsaOaepPublicKeyImpl)> generateKey( - int modulusLength, BigInt publicExponent, HashImpl hash); + int modulusLength, + BigInt publicExponent, + HashImpl hash, + ); } abstract interface class RsaOaepPrivateKeyImpl { @@ -32,7 +39,9 @@ abstract interface class RsaOaepPrivateKeyImpl { abstract interface class StaticRsaOaepPublicKeyImpl { Future importSpkiKey(List keyData, HashImpl hash); Future importJsonWebKey( - Map jwk, HashImpl hash); + Map jwk, + HashImpl hash, + ); } abstract interface class RsaOaepPublicKeyImpl { diff --git a/lib/src/impl_interface/impl_interface.rsapss.dart b/lib/src/impl_interface/impl_interface.rsapss.dart index 8b2a7944..c1e37820 100644 --- a/lib/src/impl_interface/impl_interface.rsapss.dart +++ b/lib/src/impl_interface/impl_interface.rsapss.dart @@ -17,9 +17,14 @@ part of 'impl_interface.dart'; abstract interface class StaticRsaPssPrivateKeyImpl { Future importPkcs8Key(List keyData, HashImpl hash); Future importJsonWebKey( - Map jwk, HashImpl hash); + Map jwk, + HashImpl hash, + ); Future<(RsaPssPrivateKeyImpl, RsaPssPublicKeyImpl)> generateKey( - int modulusLength, BigInt publicExponent, HashImpl hash); + int modulusLength, + BigInt publicExponent, + HashImpl hash, + ); } abstract interface class RsaPssPrivateKeyImpl { @@ -32,13 +37,18 @@ abstract interface class RsaPssPrivateKeyImpl { abstract interface class StaticRsaPssPublicKeyImpl { Future importSpkiKey(List keyData, HashImpl hash); Future importJsonWebKey( - Map jwk, HashImpl hash); + Map jwk, + HashImpl hash, + ); } abstract interface class RsaPssPublicKeyImpl { Future verifyBytes(List signature, List data, int saltLength); Future verifyStream( - List signature, Stream> data, int saltLength); + List signature, + Stream> data, + int saltLength, + ); Future exportSpkiKey(); Future> exportJsonWebKey(); } diff --git a/lib/src/impl_interface/impl_interface.rsassapkcs1v15.dart b/lib/src/impl_interface/impl_interface.rsassapkcs1v15.dart index 36a19441..5855b6b9 100644 --- a/lib/src/impl_interface/impl_interface.rsassapkcs1v15.dart +++ b/lib/src/impl_interface/impl_interface.rsassapkcs1v15.dart @@ -16,11 +16,15 @@ part of 'impl_interface.dart'; abstract interface class StaticRsaSsaPkcs1v15PrivateKeyImpl { Future importPkcs8Key( - List keyData, HashImpl hash); + List keyData, + HashImpl hash, + ); Future importJsonWebKey( - Map jwk, HashImpl hash); + Map jwk, + HashImpl hash, + ); Future<(RsaSsaPkcs1V15PrivateKeyImpl, RsaSsaPkcs1V15PublicKeyImpl)> - generateKey(int modulusLength, BigInt publicExponent, HashImpl hash); + generateKey(int modulusLength, BigInt publicExponent, HashImpl hash); } abstract interface class RsaSsaPkcs1V15PrivateKeyImpl { @@ -32,9 +36,13 @@ abstract interface class RsaSsaPkcs1V15PrivateKeyImpl { abstract interface class StaticRsaSsaPkcs1v15PublicKeyImpl { Future importSpkiKey( - List keyData, HashImpl hash); + List keyData, + HashImpl hash, + ); Future importJsonWebKey( - Map jwk, HashImpl hash); + Map jwk, + HashImpl hash, + ); } abstract interface class RsaSsaPkcs1V15PublicKeyImpl { diff --git a/lib/src/impl_js/impl_js.aescbc.dart b/lib/src/impl_js/impl_js.aescbc.dart index 591fbd98..449318de 100644 --- a/lib/src/impl_js/impl_js.aescbc.dart +++ b/lib/src/impl_js/impl_js.aescbc.dart @@ -19,32 +19,38 @@ part of 'impl_js.dart'; const _aesCbcAlgorithm = subtle.Algorithm(name: 'AES-CBC'); Future aesCbc_importRawKey(List keyData) async { - return _AesCbcSecretKeyImpl(await _importKey( - 'raw', - keyData, - _aesCbcAlgorithm, - _usagesEncryptDecrypt, - 'secret', - )); + return _AesCbcSecretKeyImpl( + await _importKey( + 'raw', + keyData, + _aesCbcAlgorithm, + _usagesEncryptDecrypt, + 'secret', + ), + ); } Future aesCbc_importJsonWebKey( Map jwk, ) async { - return _AesCbcSecretKeyImpl(await _importJsonWebKey( - jwk, - _aesCbcAlgorithm, - _usagesEncryptDecrypt, - 'secret', - )); + return _AesCbcSecretKeyImpl( + await _importJsonWebKey( + jwk, + _aesCbcAlgorithm, + _usagesEncryptDecrypt, + 'secret', + ), + ); } Future aesCbc_generateKey(int length) async { - return _AesCbcSecretKeyImpl(await _generateKey( - _aesCbcAlgorithm.update(length: length), - _usagesEncryptDecrypt, - 'secret', - )); + return _AesCbcSecretKeyImpl( + await _generateKey( + _aesCbcAlgorithm.update(length: length), + _usagesEncryptDecrypt, + 'secret', + ), + ); } final class _StaticAesCbcSecretKeyImpl implements StaticAesCbcSecretKeyImpl { diff --git a/lib/src/impl_js/impl_js.aesctr.dart b/lib/src/impl_js/impl_js.aesctr.dart index 3a97ff80..c3e64f6e 100644 --- a/lib/src/impl_js/impl_js.aesctr.dart +++ b/lib/src/impl_js/impl_js.aesctr.dart @@ -19,32 +19,38 @@ part of 'impl_js.dart'; const _aesCtrAlgorithm = subtle.Algorithm(name: 'AES-CTR'); Future aesCtr_importRawKey(List keyData) async { - return _AesCtrSecretKeyImpl(await _importKey( - 'raw', - keyData, - _aesCtrAlgorithm, - _usagesEncryptDecrypt, - 'secret', - )); + return _AesCtrSecretKeyImpl( + await _importKey( + 'raw', + keyData, + _aesCtrAlgorithm, + _usagesEncryptDecrypt, + 'secret', + ), + ); } Future aesCtr_importJsonWebKey( Map jwk, ) async { - return _AesCtrSecretKeyImpl(await _importJsonWebKey( - jwk, - _aesCtrAlgorithm, - _usagesEncryptDecrypt, - 'secret', - )); + return _AesCtrSecretKeyImpl( + await _importJsonWebKey( + jwk, + _aesCtrAlgorithm, + _usagesEncryptDecrypt, + 'secret', + ), + ); } Future aesCtr_generateKey(int length) async { - return _AesCtrSecretKeyImpl(await _generateKey( - _aesCtrAlgorithm.update(length: length), - _usagesEncryptDecrypt, - 'secret', - )); + return _AesCtrSecretKeyImpl( + await _generateKey( + _aesCtrAlgorithm.update(length: length), + _usagesEncryptDecrypt, + 'secret', + ), + ); } final class _StaticAesCtrSecretKeyImpl implements StaticAesCtrSecretKeyImpl { diff --git a/lib/src/impl_js/impl_js.aesgcm.dart b/lib/src/impl_js/impl_js.aesgcm.dart index d630e15a..f669e0e1 100644 --- a/lib/src/impl_js/impl_js.aesgcm.dart +++ b/lib/src/impl_js/impl_js.aesgcm.dart @@ -19,32 +19,38 @@ part of 'impl_js.dart'; const _aesGcmAlgorithm = subtle.Algorithm(name: 'AES-GCM'); Future aesGcm_importRawKey(List keyData) async { - return _AesGcmSecretKeyImpl(await _importKey( - 'raw', - keyData, - _aesGcmAlgorithm, - _usagesEncryptDecrypt, - 'secret', - )); + return _AesGcmSecretKeyImpl( + await _importKey( + 'raw', + keyData, + _aesGcmAlgorithm, + _usagesEncryptDecrypt, + 'secret', + ), + ); } Future aesGcm_importJsonWebKey( Map jwk, ) async { - return _AesGcmSecretKeyImpl(await _importJsonWebKey( - jwk, - _aesGcmAlgorithm, - _usagesEncryptDecrypt, - 'secret', - )); + return _AesGcmSecretKeyImpl( + await _importJsonWebKey( + jwk, + _aesGcmAlgorithm, + _usagesEncryptDecrypt, + 'secret', + ), + ); } Future aesGcm_generateKey(int length) async { - return _AesGcmSecretKeyImpl(await _generateKey( - _aesGcmAlgorithm.update(length: length), - _usagesEncryptDecrypt, - 'secret', - )); + return _AesGcmSecretKeyImpl( + await _generateKey( + _aesGcmAlgorithm.update(length: length), + _usagesEncryptDecrypt, + 'secret', + ), + ); } final class _StaticAesGcmSecretKeyImpl implements StaticAesGcmSecretKeyImpl { diff --git a/lib/src/impl_js/impl_js.digest.dart b/lib/src/impl_js/impl_js.digest.dart index f7477331..a67dc710 100644 --- a/lib/src/impl_js/impl_js.digest.dart +++ b/lib/src/impl_js/impl_js.digest.dart @@ -21,10 +21,7 @@ final class _HashImpl implements HashImpl { @override Future digestBytes(List data) async { return await _handleDomException(() async { - final result = await subtle.digest( - _algorithm, - Uint8List.fromList(data), - ); + final result = await subtle.digest(_algorithm, Uint8List.fromList(data)); return result.asUint8List(); }); } diff --git a/lib/src/impl_js/impl_js.ecdh.dart b/lib/src/impl_js/impl_js.ecdh.dart index 36cbb727..da0737cf 100644 --- a/lib/src/impl_js/impl_js.ecdh.dart +++ b/lib/src/impl_js/impl_js.ecdh.dart @@ -22,16 +22,18 @@ Future ecdhPrivateKey_importPkcs8Key( List keyData, EllipticCurve curve, ) async { - return _EcdhPrivateKeyImpl(await _importKey( - 'pkcs8', - keyData, - subtle.Algorithm( - name: _ecdhAlgorithmName, - namedCurve: _curveToName(curve), + return _EcdhPrivateKeyImpl( + await _importKey( + 'pkcs8', + keyData, + subtle.Algorithm( + name: _ecdhAlgorithmName, + namedCurve: _curveToName(curve), + ), + _usagesDeriveBits, + 'private', ), - _usagesDeriveBits, - 'private', - )); + ); } Future ecdhPrivateKey_importJsonWebKey( @@ -44,26 +46,23 @@ Future ecdhPrivateKey_importJsonWebKey( // See: https://crbug.com/641499 jwk = Map.fromEntries(jwk.entries.where((e) => e.key != 'use')); } - return _EcdhPrivateKeyImpl(await _importJsonWebKey( - jwk, - subtle.Algorithm( - name: _ecdhAlgorithmName, - namedCurve: _curveToName(curve), + return _EcdhPrivateKeyImpl( + await _importJsonWebKey( + jwk, + subtle.Algorithm( + name: _ecdhAlgorithmName, + namedCurve: _curveToName(curve), + ), + _usagesDeriveBits, + 'private', ), - _usagesDeriveBits, - 'private', - )); + ); } Future> - ecdhPrivateKey_generateKey( - EllipticCurve curve, -) async { +ecdhPrivateKey_generateKey(EllipticCurve curve) async { final pair = await _generateKeyPair( - subtle.Algorithm( - name: _ecdhAlgorithmName, - namedCurve: _curveToName(curve), - ), + subtle.Algorithm(name: _ecdhAlgorithmName, namedCurve: _curveToName(curve)), _usagesDeriveBits, ); return ( @@ -76,32 +75,36 @@ Future ecdhPublicKey_importRawKey( List keyData, EllipticCurve curve, ) async { - return _EcdhPublicKeyImpl(await _importKey( - 'raw', - keyData, - subtle.Algorithm( - name: _ecdhAlgorithmName, - namedCurve: _curveToName(curve), + return _EcdhPublicKeyImpl( + await _importKey( + 'raw', + keyData, + subtle.Algorithm( + name: _ecdhAlgorithmName, + namedCurve: _curveToName(curve), + ), + [], + 'public', ), - [], - 'public', - )); + ); } Future ecdhPublicKey_importSpkiKey( List keyData, EllipticCurve curve, ) async { - return _EcdhPublicKeyImpl(await _importKey( - 'spki', - keyData, - subtle.Algorithm( - name: _ecdhAlgorithmName, - namedCurve: _curveToName(curve), + return _EcdhPublicKeyImpl( + await _importKey( + 'spki', + keyData, + subtle.Algorithm( + name: _ecdhAlgorithmName, + namedCurve: _curveToName(curve), + ), + [], + 'public', ), - [], - 'public', - )); + ); } Future ecdhPublicKey_importJsonWebKey( @@ -114,15 +117,17 @@ Future ecdhPublicKey_importJsonWebKey( // See: https://crbug.com/641499 jwk = Map.fromEntries(jwk.entries.where((e) => e.key != 'use')); } - return _EcdhPublicKeyImpl(await _importJsonWebKey( - jwk, - subtle.Algorithm( - name: _ecdhAlgorithmName, - namedCurve: _curveToName(curve), + return _EcdhPublicKeyImpl( + await _importJsonWebKey( + jwk, + subtle.Algorithm( + name: _ecdhAlgorithmName, + namedCurve: _curveToName(curve), + ), + [], + 'public', ), - [], - 'public', - )); + ); } final class _StaticEcdhPrivateKeyImpl implements StaticEcdhPrivateKeyImpl { @@ -130,17 +135,20 @@ final class _StaticEcdhPrivateKeyImpl implements StaticEcdhPrivateKeyImpl { @override Future importPkcs8Key( - List keyData, EllipticCurve curve) => - ecdhPrivateKey_importPkcs8Key(keyData, curve); + List keyData, + EllipticCurve curve, + ) => ecdhPrivateKey_importPkcs8Key(keyData, curve); @override Future importJsonWebKey( - Map jwk, EllipticCurve curve) => - ecdhPrivateKey_importJsonWebKey(jwk, curve); + Map jwk, + EllipticCurve curve, + ) => ecdhPrivateKey_importJsonWebKey(jwk, curve); @override Future<(EcdhPrivateKeyImpl, EcdhPublicKeyImpl)> generateKey( - EllipticCurve curve) async { + EllipticCurve curve, + ) async { final KeyPair keyPair = await ecdhPrivateKey_generateKey(curve); @@ -168,10 +176,7 @@ final class _EcdhPrivateKeyImpl implements EcdhPrivateKeyImpl { } final lengthInBytes = (length / 8).ceil(); final derived = await _deriveBits( - subtle.Algorithm( - name: _ecdhAlgorithmName, - public: publicKey._key, - ), + subtle.Algorithm(name: _ecdhAlgorithmName, public: publicKey._key), _key, // Always deriveBits in multiples of 8 as required by Firefox, see: // https://hg.mozilla.org/mozilla-central/file/1c9b97bed37830e39642bfa7e73dbc2ea860662a/dom/crypto/WebCryptoTask.cpp#l2667 @@ -205,18 +210,21 @@ final class _StaticEcdhPublicKeyImpl implements StaticEcdhPublicKeyImpl { @override Future importRawKey( - List keyData, EllipticCurve curve) => - ecdhPublicKey_importRawKey(keyData, curve); + List keyData, + EllipticCurve curve, + ) => ecdhPublicKey_importRawKey(keyData, curve); @override Future importSpkiKey( - List keyData, EllipticCurve curve) => - ecdhPublicKey_importSpkiKey(keyData, curve); + List keyData, + EllipticCurve curve, + ) => ecdhPublicKey_importSpkiKey(keyData, curve); @override Future importJsonWebKey( - Map jwk, EllipticCurve curve) => - ecdhPublicKey_importJsonWebKey(jwk, curve); + Map jwk, + EllipticCurve curve, + ) => ecdhPublicKey_importJsonWebKey(jwk, curve); } final class _EcdhPublicKeyImpl implements EcdhPublicKeyImpl { diff --git a/lib/src/impl_js/impl_js.ecdsa.dart b/lib/src/impl_js/impl_js.ecdsa.dart index 06ff5210..d30d9de3 100644 --- a/lib/src/impl_js/impl_js.ecdsa.dart +++ b/lib/src/impl_js/impl_js.ecdsa.dart @@ -22,37 +22,39 @@ Future ecdsaPrivateKey_importPkcs8Key( List keyData, EllipticCurve curve, ) async { - return _EcdsaPrivateKeyImpl(await _importKey( - 'pkcs8', - keyData, - subtle.Algorithm( - name: _ecdsaAlgorithmName, - namedCurve: _curveToName(curve), + return _EcdsaPrivateKeyImpl( + await _importKey( + 'pkcs8', + keyData, + subtle.Algorithm( + name: _ecdsaAlgorithmName, + namedCurve: _curveToName(curve), + ), + _usagesSign, + 'private', ), - _usagesSign, - 'private', - )); + ); } Future ecdsaPrivateKey_importJsonWebKey( Map jwk, EllipticCurve curve, ) async { - return _EcdsaPrivateKeyImpl(await _importJsonWebKey( - jwk, - subtle.Algorithm( - name: _ecdsaAlgorithmName, - namedCurve: _curveToName(curve), + return _EcdsaPrivateKeyImpl( + await _importJsonWebKey( + jwk, + subtle.Algorithm( + name: _ecdsaAlgorithmName, + namedCurve: _curveToName(curve), + ), + _usagesSign, + 'private', ), - _usagesSign, - 'private', - )); + ); } Future> - ecdsaPrivateKey_generateKey( - EllipticCurve curve, -) async { +ecdsaPrivateKey_generateKey(EllipticCurve curve) async { final pair = await _generateKeyPair( subtle.Algorithm( name: _ecdsaAlgorithmName, @@ -70,47 +72,53 @@ Future ecdsaPublicKey_importRawKey( List keyData, EllipticCurve curve, ) async { - return _EcdsaPublicKeyImpl(await _importKey( - 'raw', - keyData, - subtle.Algorithm( - name: _ecdsaAlgorithmName, - namedCurve: _curveToName(curve), + return _EcdsaPublicKeyImpl( + await _importKey( + 'raw', + keyData, + subtle.Algorithm( + name: _ecdsaAlgorithmName, + namedCurve: _curveToName(curve), + ), + _usagesVerify, + 'public', ), - _usagesVerify, - 'public', - )); + ); } Future ecdsaPublicKey_importSpkiKey( List keyData, EllipticCurve curve, ) async { - return _EcdsaPublicKeyImpl(await _importKey( - 'spki', - keyData, - subtle.Algorithm( - name: _ecdsaAlgorithmName, - namedCurve: _curveToName(curve), + return _EcdsaPublicKeyImpl( + await _importKey( + 'spki', + keyData, + subtle.Algorithm( + name: _ecdsaAlgorithmName, + namedCurve: _curveToName(curve), + ), + _usagesVerify, + 'public', ), - _usagesVerify, - 'public', - )); + ); } Future ecdsaPublicKey_importJsonWebKey( Map jwk, EllipticCurve curve, ) async { - return _EcdsaPublicKeyImpl(await _importJsonWebKey( - jwk, - subtle.Algorithm( - name: _ecdsaAlgorithmName, - namedCurve: _curveToName(curve), + return _EcdsaPublicKeyImpl( + await _importJsonWebKey( + jwk, + subtle.Algorithm( + name: _ecdsaAlgorithmName, + namedCurve: _curveToName(curve), + ), + _usagesVerify, + 'public', ), - _usagesVerify, - 'public', - )); + ); } final class _StaticEcdsaPrivateKeyImpl implements StaticEcdsaPrivateKeyImpl { @@ -120,15 +128,13 @@ final class _StaticEcdsaPrivateKeyImpl implements StaticEcdsaPrivateKeyImpl { Future importPkcs8Key( List keyData, EllipticCurve curve, - ) => - ecdsaPrivateKey_importPkcs8Key(keyData, curve); + ) => ecdsaPrivateKey_importPkcs8Key(keyData, curve); @override Future importJsonWebKey( Map jwk, EllipticCurve curve, - ) => - ecdsaPrivateKey_importJsonWebKey(jwk, curve); + ) => ecdsaPrivateKey_importJsonWebKey(jwk, curve); @override Future<(EcdsaPrivateKeyImpl, EcdsaPublicKeyImpl)> generateKey( @@ -185,22 +191,19 @@ final class _StaticEcdsaPublicKeyImpl implements StaticEcdsaPublicKeyImpl { Future importRawKey( List keyData, EllipticCurve curve, - ) => - ecdsaPublicKey_importRawKey(keyData, curve); + ) => ecdsaPublicKey_importRawKey(keyData, curve); @override Future importJsonWebKey( Map jwk, EllipticCurve curve, - ) => - ecdsaPublicKey_importJsonWebKey(jwk, curve); + ) => ecdsaPublicKey_importJsonWebKey(jwk, curve); @override Future importSpkiKey( List keyData, EllipticCurve curve, - ) => - ecdsaPublicKey_importSpkiKey(keyData, curve); + ) => ecdsaPublicKey_importSpkiKey(keyData, curve); } final class _EcdsaPublicKeyImpl implements EcdsaPublicKeyImpl { @@ -214,7 +217,10 @@ final class _EcdsaPublicKeyImpl implements EcdsaPublicKeyImpl { @override Future verifyBytes( - List signature, List data, HashImpl hash) async { + List signature, + List data, + HashImpl hash, + ) async { return await _verify( subtle.Algorithm( name: _ecdsaAlgorithmName, diff --git a/lib/src/impl_js/impl_js.hkdf.dart b/lib/src/impl_js/impl_js.hkdf.dart index 7a63371f..9df712c4 100644 --- a/lib/src/impl_js/impl_js.hkdf.dart +++ b/lib/src/impl_js/impl_js.hkdf.dart @@ -19,16 +19,18 @@ part of 'impl_js.dart'; const _hkdfAlgorithmName = 'HKDF'; Future hkdfSecretKey_importRawKey(List keyData) async { - return _HkdfSecretKeyImpl(await _importKey( - 'raw', - keyData, - const subtle.Algorithm(name: _hkdfAlgorithmName), - _usagesDeriveBits, - 'secret', - // Unlike all other key types it makes no sense to HkdfSecretKeyImpl to be - // exported, and indeed webcrypto requires `extractable: false`. - extractable: false, - )); + return _HkdfSecretKeyImpl( + await _importKey( + 'raw', + keyData, + const subtle.Algorithm(name: _hkdfAlgorithmName), + _usagesDeriveBits, + 'secret', + // Unlike all other key types it makes no sense to HkdfSecretKeyImpl to be + // exported, and indeed webcrypto requires `extractable: false`. + extractable: false, + ), + ); } final class _StaticHkdfSecretKeyImpl implements StaticHkdfSecretKeyImpl { diff --git a/lib/src/impl_js/impl_js.hmac.dart b/lib/src/impl_js/impl_js.hmac.dart index e99c073e..0525f0e8 100644 --- a/lib/src/impl_js/impl_js.hmac.dart +++ b/lib/src/impl_js/impl_js.hmac.dart @@ -23,22 +23,21 @@ Future hmacSecretKey_importRawKey( HashImpl hash, { int? length, }) async { - return _HmacSecretKeyImpl(await _importKey( - 'raw', - keyData, - length == null - ? subtle.Algorithm( - name: 'HMAC', - hash: _getHashAlgorithm(hash), - ) - : subtle.Algorithm( - name: 'HMAC', - hash: _getHashAlgorithm(hash), - length: length, - ), - _usagesSignVerify, - 'secret', - )); + return _HmacSecretKeyImpl( + await _importKey( + 'raw', + keyData, + length == null + ? subtle.Algorithm(name: 'HMAC', hash: _getHashAlgorithm(hash)) + : subtle.Algorithm( + name: 'HMAC', + hash: _getHashAlgorithm(hash), + length: length, + ), + _usagesSignVerify, + 'secret', + ), + ); } Future hmacSecretKey_importJsonWebKey( @@ -46,54 +45,59 @@ Future hmacSecretKey_importJsonWebKey( HashImpl hash, { int? length, }) async { - return _HmacSecretKeyImpl(await _importJsonWebKey( - jwk, - length == null - ? subtle.Algorithm( - name: 'HMAC', - hash: _getHashAlgorithm(hash), - ) - : subtle.Algorithm( - name: 'HMAC', - hash: _getHashAlgorithm(hash), - length: length, - ), - _usagesSignVerify, - 'secret', - )); + return _HmacSecretKeyImpl( + await _importJsonWebKey( + jwk, + length == null + ? subtle.Algorithm(name: 'HMAC', hash: _getHashAlgorithm(hash)) + : subtle.Algorithm( + name: 'HMAC', + hash: _getHashAlgorithm(hash), + length: length, + ), + _usagesSignVerify, + 'secret', + ), + ); } -Future hmacSecretKey_generateKey(HashImpl hash, - {int? length}) async { - return _HmacSecretKeyImpl(await _generateKey( - length == null - ? subtle.Algorithm( - name: 'HMAC', - hash: _getHashAlgorithm(hash), - ) - : subtle.Algorithm( - name: 'HMAC', - hash: _getHashAlgorithm(hash), - length: length, - ), - _usagesSignVerify, - 'secret', - )); +Future hmacSecretKey_generateKey( + HashImpl hash, { + int? length, +}) async { + return _HmacSecretKeyImpl( + await _generateKey( + length == null + ? subtle.Algorithm(name: 'HMAC', hash: _getHashAlgorithm(hash)) + : subtle.Algorithm( + name: 'HMAC', + hash: _getHashAlgorithm(hash), + length: length, + ), + _usagesSignVerify, + 'secret', + ), + ); } final class _StaticHmacSecretKeyImpl implements StaticHmacSecretKeyImpl { const _StaticHmacSecretKeyImpl(); @override - Future importRawKey(List keyData, HashImpl hash, - {int? length}) { + Future importRawKey( + List keyData, + HashImpl hash, { + int? length, + }) { return hmacSecretKey_importRawKey(keyData, hash, length: length); } @override Future importJsonWebKey( - Map jwk, HashImpl hash, - {int? length}) { + Map jwk, + HashImpl hash, { + int? length, + }) { return hmacSecretKey_importJsonWebKey(jwk, hash, length: length); } diff --git a/lib/src/impl_js/impl_js.pbkdf2.dart b/lib/src/impl_js/impl_js.pbkdf2.dart index 2bc7f28d..5d38ba10 100644 --- a/lib/src/impl_js/impl_js.pbkdf2.dart +++ b/lib/src/impl_js/impl_js.pbkdf2.dart @@ -19,17 +19,20 @@ part of 'impl_js.dart'; const _pbkdf2AlgorithmName = 'PBKDF2'; Future pbkdf2SecretKey_importRawKey( - List keyData) async { - return _Pbkdf2SecretKeyImpl(await _importKey( - 'raw', - keyData, - const subtle.Algorithm(name: _pbkdf2AlgorithmName), - _usagesDeriveBits, - 'secret', - // Unlike all other key types it makes no sense to HkdfSecretKey to be - // exported, and indeed webcrypto requires `extractable: false`. - extractable: false, - )); + List keyData, +) async { + return _Pbkdf2SecretKeyImpl( + await _importKey( + 'raw', + keyData, + const subtle.Algorithm(name: _pbkdf2AlgorithmName), + _usagesDeriveBits, + 'secret', + // Unlike all other key types it makes no sense to HkdfSecretKey to be + // exported, and indeed webcrypto requires `extractable: false`. + extractable: false, + ), + ); } final class _StaticPbkdf2SecretKeyImpl implements StaticPbkdf2SecretKeyImpl { diff --git a/lib/src/impl_js/impl_js.rsaoaep.dart b/lib/src/impl_js/impl_js.rsaoaep.dart index 346813a0..9f4c23c3 100644 --- a/lib/src/impl_js/impl_js.rsaoaep.dart +++ b/lib/src/impl_js/impl_js.rsaoaep.dart @@ -22,35 +22,39 @@ Future rsaOaepPrivateKey_importPkcs8Key( List keyData, HashImpl hash, ) async { - return _RsaOaepPrivateKeyImpl(await _importKey( - 'pkcs8', - keyData, - subtle.Algorithm( - name: _rsaOaepAlgorithmName, - hash: _getHashAlgorithm(hash), + return _RsaOaepPrivateKeyImpl( + await _importKey( + 'pkcs8', + keyData, + subtle.Algorithm( + name: _rsaOaepAlgorithmName, + hash: _getHashAlgorithm(hash), + ), + _usagesDecrypt, + 'private', ), - _usagesDecrypt, - 'private', - )); + ); } Future rsaOaepPrivateKey_importJsonWebKey( Map jwk, HashImpl hash, ) async { - return _RsaOaepPrivateKeyImpl(await _importJsonWebKey( - jwk, - subtle.Algorithm( - name: _rsaOaepAlgorithmName, - hash: _getHashAlgorithm(hash), + return _RsaOaepPrivateKeyImpl( + await _importJsonWebKey( + jwk, + subtle.Algorithm( + name: _rsaOaepAlgorithmName, + hash: _getHashAlgorithm(hash), + ), + _usagesDecrypt, + 'private', ), - _usagesDecrypt, - 'private', - )); + ); } Future> - rsaOaepPrivateKey_generateKey( +rsaOaepPrivateKey_generateKey( int modulusLength, BigInt publicExponent, HashImpl hash, @@ -74,31 +78,35 @@ Future rsaOaepPublicKey_importSpkiKey( List keyData, HashImpl hash, ) async { - return _RsaOaepPublicKeyImpl(await _importKey( - 'spki', - keyData, - subtle.Algorithm( - name: _rsaOaepAlgorithmName, - hash: _getHashAlgorithm(hash), + return _RsaOaepPublicKeyImpl( + await _importKey( + 'spki', + keyData, + subtle.Algorithm( + name: _rsaOaepAlgorithmName, + hash: _getHashAlgorithm(hash), + ), + _usagesEncrypt, + 'public', ), - _usagesEncrypt, - 'public', - )); + ); } Future rsaOaepPublicKey_importJsonWebKey( Map jwk, HashImpl hash, ) async { - return _RsaOaepPublicKeyImpl(await _importJsonWebKey( - jwk, - subtle.Algorithm( - name: _rsaOaepAlgorithmName, - hash: _getHashAlgorithm(hash), + return _RsaOaepPublicKeyImpl( + await _importJsonWebKey( + jwk, + subtle.Algorithm( + name: _rsaOaepAlgorithmName, + hash: _getHashAlgorithm(hash), + ), + _usagesEncrypt, + 'public', ), - _usagesEncrypt, - 'public', - )); + ); } final class _StaticRsaOaepPrivateKeyImpl @@ -107,22 +115,32 @@ final class _StaticRsaOaepPrivateKeyImpl @override Future importPkcs8Key( - List keyData, HashImpl hash) { + List keyData, + HashImpl hash, + ) { return rsaOaepPrivateKey_importPkcs8Key(keyData, hash); } @override Future importJsonWebKey( - Map jwk, HashImpl hash) { + Map jwk, + HashImpl hash, + ) { return rsaOaepPrivateKey_importJsonWebKey(jwk, hash); } @override Future<(RsaOaepPrivateKeyImpl, RsaOaepPublicKeyImpl)> generateKey( - int modulusLength, BigInt publicExponent, HashImpl hash) async { + int modulusLength, + BigInt publicExponent, + HashImpl hash, + ) async { final KeyPair keyPair = await rsaOaepPrivateKey_generateKey( - modulusLength, publicExponent, hash); + modulusLength, + publicExponent, + hash, + ); return (keyPair.privateKey, keyPair.publicKey); } @@ -172,7 +190,9 @@ final class _StaticRsaOaepPublicKeyImpl implements StaticRsaOaepPublicKeyImpl { @override Future importJsonWebKey( - Map jwk, HashImpl hash) { + Map jwk, + HashImpl hash, + ) { return rsaOaepPublicKey_importJsonWebKey(jwk, hash); } } diff --git a/lib/src/impl_js/impl_js.rsapss.dart b/lib/src/impl_js/impl_js.rsapss.dart index 34a92f6f..696c26d9 100644 --- a/lib/src/impl_js/impl_js.rsapss.dart +++ b/lib/src/impl_js/impl_js.rsapss.dart @@ -22,29 +22,39 @@ Future rsaPssPrivateKey_importPkcs8Key( List keyData, HashImpl hash, ) async { - return _RsaPssPrivateKeyImpl(await _importKey( - 'pkcs8', - keyData, - subtle.Algorithm(name: _rsaPssAlgorithmName, hash: _getHashAlgorithm(hash)), - _usagesSign, - 'private', - )); + return _RsaPssPrivateKeyImpl( + await _importKey( + 'pkcs8', + keyData, + subtle.Algorithm( + name: _rsaPssAlgorithmName, + hash: _getHashAlgorithm(hash), + ), + _usagesSign, + 'private', + ), + ); } Future rsaPssPrivateKey_importJsonWebKey( Map jwk, HashImpl hash, ) async { - return _RsaPssPrivateKeyImpl(await _importJsonWebKey( - jwk, - subtle.Algorithm(name: _rsaPssAlgorithmName, hash: _getHashAlgorithm(hash)), - _usagesSign, - 'private', - )); + return _RsaPssPrivateKeyImpl( + await _importJsonWebKey( + jwk, + subtle.Algorithm( + name: _rsaPssAlgorithmName, + hash: _getHashAlgorithm(hash), + ), + _usagesSign, + 'private', + ), + ); } Future> - rsaPssPrivateKey_generateKey( +rsaPssPrivateKey_generateKey( int modulusLength, BigInt publicExponent, HashImpl hash, @@ -68,25 +78,35 @@ Future rsaPssPublicKey_importSpkiKey( List keyData, HashImpl hash, ) async { - return _RsaPssPublicKeyImpl(await _importKey( - 'spki', - keyData, - subtle.Algorithm(name: _rsaPssAlgorithmName, hash: _getHashAlgorithm(hash)), - _usagesVerify, - 'public', - )); + return _RsaPssPublicKeyImpl( + await _importKey( + 'spki', + keyData, + subtle.Algorithm( + name: _rsaPssAlgorithmName, + hash: _getHashAlgorithm(hash), + ), + _usagesVerify, + 'public', + ), + ); } Future rsaPssPublicKey_importJsonWebKey( Map jwk, HashImpl hash, ) async { - return _RsaPssPublicKeyImpl(await _importJsonWebKey( - jwk, - subtle.Algorithm(name: _rsaPssAlgorithmName, hash: _getHashAlgorithm(hash)), - _usagesVerify, - 'public', - )); + return _RsaPssPublicKeyImpl( + await _importJsonWebKey( + jwk, + subtle.Algorithm( + name: _rsaPssAlgorithmName, + hash: _getHashAlgorithm(hash), + ), + _usagesVerify, + 'public', + ), + ); } final class _StaticRsaPssPrivateKeyImpl implements StaticRsaPssPrivateKeyImpl { diff --git a/lib/src/impl_js/impl_js.rsassapkcs1v15.dart b/lib/src/impl_js/impl_js.rsassapkcs1v15.dart index f2af1f7c..fbf933d9 100644 --- a/lib/src/impl_js/impl_js.rsassapkcs1v15.dart +++ b/lib/src/impl_js/impl_js.rsassapkcs1v15.dart @@ -22,29 +22,33 @@ Future rsassaPkcs1V15PrivateKey_importPkcs8Key( List keyData, HashImpl hash, ) async { - return _RsaSsaPkcs1V15PrivateKeyImpl(await _importKey( - 'pkcs8', - keyData, - _rsassaPkcs1V15Algorithm.update(hash: _getHashAlgorithm(hash)), - _usagesSign, - 'private', - )); + return _RsaSsaPkcs1V15PrivateKeyImpl( + await _importKey( + 'pkcs8', + keyData, + _rsassaPkcs1V15Algorithm.update(hash: _getHashAlgorithm(hash)), + _usagesSign, + 'private', + ), + ); } Future rsassaPkcs1V15PrivateKey_importJsonWebKey( Map jwk, HashImpl hash, ) async { - return _RsaSsaPkcs1V15PrivateKeyImpl(await _importJsonWebKey( - jwk, - _rsassaPkcs1V15Algorithm.update(hash: _getHashAlgorithm(hash)), - _usagesSign, - 'private', - )); + return _RsaSsaPkcs1V15PrivateKeyImpl( + await _importJsonWebKey( + jwk, + _rsassaPkcs1V15Algorithm.update(hash: _getHashAlgorithm(hash)), + _usagesSign, + 'private', + ), + ); } Future> - rsassaPkcs1V15PrivateKey_generateKey( +rsassaPkcs1V15PrivateKey_generateKey( int modulusLength, BigInt publicExponent, HashImpl hash, @@ -67,25 +71,29 @@ Future rsassaPkcs1V15PublicKey_importSpkiKey( List keyData, HashImpl hash, ) async { - return _RsaSsaPkcs1V15PublicKeyImpl(await _importKey( - 'spki', - keyData, - _rsassaPkcs1V15Algorithm.update(hash: _getHashAlgorithm(hash)), - _usagesVerify, - 'public', - )); + return _RsaSsaPkcs1V15PublicKeyImpl( + await _importKey( + 'spki', + keyData, + _rsassaPkcs1V15Algorithm.update(hash: _getHashAlgorithm(hash)), + _usagesVerify, + 'public', + ), + ); } Future rsassaPkcs1V15PublicKey_importJsonWebKey( Map jwk, HashImpl hash, ) async { - return _RsaSsaPkcs1V15PublicKeyImpl(await _importJsonWebKey( - jwk, - _rsassaPkcs1V15Algorithm.update(hash: _getHashAlgorithm(hash)), - _usagesVerify, - 'public', - )); + return _RsaSsaPkcs1V15PublicKeyImpl( + await _importJsonWebKey( + jwk, + _rsassaPkcs1V15Algorithm.update(hash: _getHashAlgorithm(hash)), + _usagesVerify, + 'public', + ), + ); } final class _StaticRsaSsaPkcs1V15PrivateKeyImpl @@ -94,23 +102,29 @@ final class _StaticRsaSsaPkcs1V15PrivateKeyImpl @override Future importPkcs8Key( - List keyData, HashImpl hash) async { + List keyData, + HashImpl hash, + ) async { return await rsassaPkcs1V15PrivateKey_importPkcs8Key(keyData, hash); } @override Future importJsonWebKey( - Map jwk, HashImpl hash) async { + Map jwk, + HashImpl hash, + ) async { return await rsassaPkcs1V15PrivateKey_importJsonWebKey(jwk, hash); } @override Future<(RsaSsaPkcs1V15PrivateKeyImpl, RsaSsaPkcs1V15PublicKeyImpl)> - generateKey( - int modulusLength, BigInt publicExponent, HashImpl hash) async { + generateKey(int modulusLength, BigInt publicExponent, HashImpl hash) async { final KeyPair - pair = await rsassaPkcs1V15PrivateKey_generateKey( - modulusLength, publicExponent, hash); + pair = await rsassaPkcs1V15PrivateKey_generateKey( + modulusLength, + publicExponent, + hash, + ); return (pair.privateKey, pair.publicKey); } @@ -148,13 +162,17 @@ final class _StaticRsaSsaPkcs1V15PublicKeyImpl @override Future importSpkiKey( - List keyData, HashImpl hash) async { + List keyData, + HashImpl hash, + ) async { return await rsassaPkcs1V15PublicKey_importSpkiKey(keyData, hash); } @override Future importJsonWebKey( - Map jwk, HashImpl hash) async { + Map jwk, + HashImpl hash, + ) async { return await rsassaPkcs1V15PublicKey_importJsonWebKey(jwk, hash); } } diff --git a/lib/src/impl_js/impl_js.utils.dart b/lib/src/impl_js/impl_js.utils.dart index f7385464..3a7b8de2 100644 --- a/lib/src/impl_js/impl_js.utils.dart +++ b/lib/src/impl_js/impl_js.utils.dart @@ -25,7 +25,7 @@ Future _bufferStream(Stream> data) async { /// Convert [publicExponent] to [Uint8List]. Uint8List _publicExponentAsBuffer(BigInt publicExponent) { -// Limit publicExponent allow-listed as in chromium: + // Limit publicExponent allow-listed as in chromium: // https://chromium.googlesource.com/chromium/src/+/43d62c50b705f88c67b14539e91fd8fd017f70c4/components/webcrypto/algorithms/rsa.cc#286 if (publicExponent != BigInt.from(3) && publicExponent != BigInt.from(65537)) { @@ -95,8 +95,10 @@ Object _translateDomException( ); } // Unknown exception, we cannot handle this case. - return AssertionError('Unexpected exception from web cryptography' - '"${e.name}", message: $message'); + return AssertionError( + 'Unexpected exception from web cryptography' + '"${e.name}", message: $message', + ); } /// Convert [Error] to [UnknownError]. @@ -113,7 +115,8 @@ final class UnknownError extends Error { UnknownError._(); @override - String toString() => 'UnknownError: Browser threw JavaScriptError. ' + String toString() => + 'UnknownError: Browser threw JavaScriptError. ' 'Note: This version of package:webcrypto cannot distinguish between error types from the browser. ' 'See: https://github.com/google/webcrypto.dart/issues/182'; } @@ -193,7 +196,10 @@ Future _importKey( ); if (k.type != expectedType) { throw ArgumentError.value( - keyData, 'keyData', 'must be a "$expectedType" key'); + keyData, + 'keyData', + 'must be a "$expectedType" key', + ); } return k; }); @@ -206,11 +212,7 @@ Future _sign( List data, ) { return _handleDomException(() async { - final result = await subtle.sign( - algorithm, - key, - Uint8List.fromList(data), - ); + final result = await subtle.sign(algorithm, key, Uint8List.fromList(data)); return result.asUint8List(); }); } @@ -272,20 +274,13 @@ Future _deriveBits( bool invalidAccessErrorIsArgumentError = false, }) { return _handleDomException(() async { - final result = await subtle.deriveBits( - algorithm, - key, - length, - ); + final result = await subtle.deriveBits(algorithm, key, length); return result.asUint8List(); }, invalidAccessErrorIsArgumentError: invalidAccessErrorIsArgumentError); } /// Adapt `crypto.subtle.export` to Dart types. -Future _exportKey( - String format, - subtle.JSCryptoKey key, -) { +Future _exportKey(String format, subtle.JSCryptoKey key) { return _handleDomException(() async { final result = await subtle.exportKey(format, key); return result.asUint8List(); @@ -298,10 +293,7 @@ Future> _exportJsonWebKey( // TODO: Add expected 'use' the way we have it in the FFI implementation ) { return _handleDomException(() async { - final jwk = await subtle.exportJsonWebKey( - 'jwk', - key, - ); + final jwk = await subtle.exportJsonWebKey('jwk', key); // Remove 'key_ops' and 'ext' as this library doesn't allow configuration of // _usages_ or _extractable_. // Notice, that we also strip these in [_importJsonWebKey]. diff --git a/lib/src/impl_stub/impl_stub.ecdh.dart b/lib/src/impl_stub/impl_stub.ecdh.dart index e329bc84..4c79a082 100644 --- a/lib/src/impl_stub/impl_stub.ecdh.dart +++ b/lib/src/impl_stub/impl_stub.ecdh.dart @@ -19,18 +19,20 @@ final class _StaticEcdhPrivateKeyImpl implements StaticEcdhPrivateKeyImpl { @override Future importPkcs8Key( - List keyData, EllipticCurve curve) => - throw UnimplementedError('Not implemented'); + List keyData, + EllipticCurve curve, + ) => throw UnimplementedError('Not implemented'); @override Future importJsonWebKey( - Map jwk, EllipticCurve curve) => - throw UnimplementedError('Not implemented'); + Map jwk, + EllipticCurve curve, + ) => throw UnimplementedError('Not implemented'); @override Future<(EcdhPrivateKeyImpl, EcdhPublicKeyImpl)> generateKey( - EllipticCurve curve) => - throw UnimplementedError('Not implemented'); + EllipticCurve curve, + ) => throw UnimplementedError('Not implemented'); } final class _StaticEcdhPublicKeyImpl implements StaticEcdhPublicKeyImpl { @@ -38,16 +40,19 @@ final class _StaticEcdhPublicKeyImpl implements StaticEcdhPublicKeyImpl { @override Future importRawKey( - List keyData, EllipticCurve curve) => - throw UnimplementedError('Not implemented'); + List keyData, + EllipticCurve curve, + ) => throw UnimplementedError('Not implemented'); @override Future importSpkiKey( - List keyData, EllipticCurve curve) => - throw UnimplementedError('Not implemented'); + List keyData, + EllipticCurve curve, + ) => throw UnimplementedError('Not implemented'); @override Future importJsonWebKey( - Map jwk, EllipticCurve curve) => - throw UnimplementedError('Not implemented'); + Map jwk, + EllipticCurve curve, + ) => throw UnimplementedError('Not implemented'); } diff --git a/lib/src/impl_stub/impl_stub.ecdsa.dart b/lib/src/impl_stub/impl_stub.ecdsa.dart index 623f650d..34f43a3d 100644 --- a/lib/src/impl_stub/impl_stub.ecdsa.dart +++ b/lib/src/impl_stub/impl_stub.ecdsa.dart @@ -21,21 +21,18 @@ final class _StaticEcdsaPrivateKeyImpl implements StaticEcdsaPrivateKeyImpl { Future importPkcs8Key( List keyData, EllipticCurve curve, - ) => - throw UnimplementedError('Not implemented'); + ) => throw UnimplementedError('Not implemented'); @override Future importJsonWebKey( Map jwk, EllipticCurve curve, - ) => - throw UnimplementedError('Not implemented'); + ) => throw UnimplementedError('Not implemented'); @override Future<(EcdsaPrivateKeyImpl, EcdsaPublicKeyImpl)> generateKey( EllipticCurve curve, - ) => - throw UnimplementedError('Not implemented'); + ) => throw UnimplementedError('Not implemented'); } final class _StaticEcdsaPublicKeyImpl implements StaticEcdsaPublicKeyImpl { @@ -45,20 +42,17 @@ final class _StaticEcdsaPublicKeyImpl implements StaticEcdsaPublicKeyImpl { Future importRawKey( List keyData, EllipticCurve curve, - ) => - throw UnimplementedError('Not implemented'); + ) => throw UnimplementedError('Not implemented'); @override Future importJsonWebKey( Map jwk, EllipticCurve curve, - ) => - throw UnimplementedError('Not implemented'); + ) => throw UnimplementedError('Not implemented'); @override Future importSpkiKey( List keyData, EllipticCurve curve, - ) => - throw UnimplementedError('Not implemented'); + ) => throw UnimplementedError('Not implemented'); } diff --git a/lib/src/impl_stub/impl_stub.hmac.dart b/lib/src/impl_stub/impl_stub.hmac.dart index edd882d7..b39310a7 100644 --- a/lib/src/impl_stub/impl_stub.hmac.dart +++ b/lib/src/impl_stub/impl_stub.hmac.dart @@ -18,15 +18,20 @@ final class _StaticHmacSecretKeyImpl implements StaticHmacSecretKeyImpl { const _StaticHmacSecretKeyImpl(); @override - Future importRawKey(List keyData, HashImpl hash, - {int? length}) { + Future importRawKey( + List keyData, + HashImpl hash, { + int? length, + }) { throw UnimplementedError('Not implemented'); } @override Future importJsonWebKey( - Map jwk, HashImpl hash, - {int? length}) { + Map jwk, + HashImpl hash, { + int? length, + }) { throw UnimplementedError('Not implemented'); } diff --git a/lib/src/impl_stub/impl_stub.rsaoaep.dart b/lib/src/impl_stub/impl_stub.rsaoaep.dart index 487bacd7..a3daef97 100644 --- a/lib/src/impl_stub/impl_stub.rsaoaep.dart +++ b/lib/src/impl_stub/impl_stub.rsaoaep.dart @@ -20,19 +20,26 @@ final class _StaticRsaOaepPrivateKeyImpl @override Future importPkcs8Key( - List keyData, HashImpl hash) { + List keyData, + HashImpl hash, + ) { throw UnimplementedError('Not implemented'); } @override Future importJsonWebKey( - Map jwk, HashImpl hash) { + Map jwk, + HashImpl hash, + ) { throw UnimplementedError('Not implemented'); } @override Future<(RsaOaepPrivateKeyImpl, RsaOaepPublicKeyImpl)> generateKey( - int modulusLength, BigInt publicExponent, HashImpl hash) { + int modulusLength, + BigInt publicExponent, + HashImpl hash, + ) { throw UnimplementedError('Not implemented'); } } @@ -41,10 +48,7 @@ final class _StaticRsaOaepPublicKeyImpl implements StaticRsaOaepPublicKeyImpl { const _StaticRsaOaepPublicKeyImpl(); @override - Future importSpkiKey( - List keyData, - HashImpl hash, - ) { + Future importSpkiKey(List keyData, HashImpl hash) { throw UnimplementedError('Not implemented'); } diff --git a/lib/src/impl_stub/impl_stub.rsapss.dart b/lib/src/impl_stub/impl_stub.rsapss.dart index 0b651a09..ac8fbd43 100644 --- a/lib/src/impl_stub/impl_stub.rsapss.dart +++ b/lib/src/impl_stub/impl_stub.rsapss.dart @@ -21,39 +21,32 @@ final class _StaticRsaPssPrivateKeyImpl implements StaticRsaPssPrivateKeyImpl { Future importPkcs8Key( List keyData, HashImpl hash, - ) => - throw UnimplementedError('Not implemented'); + ) => throw UnimplementedError('Not implemented'); @override Future importJsonWebKey( Map jwk, HashImpl hash, - ) => - throw UnimplementedError('Not implemented'); + ) => throw UnimplementedError('Not implemented'); @override Future<(RsaPssPrivateKeyImpl, RsaPssPublicKeyImpl)> generateKey( int modulusLength, BigInt publicExponent, HashImpl hash, - ) => - throw UnimplementedError('Not implemented'); + ) => throw UnimplementedError('Not implemented'); } final class _StaticRsaPssPublicKeyImpl implements StaticRsaPssPublicKeyImpl { const _StaticRsaPssPublicKeyImpl(); @override - Future importSpkiKey( - List keyData, - HashImpl hash, - ) => + Future importSpkiKey(List keyData, HashImpl hash) => throw UnimplementedError('Not implemented'); @override Future importJsonWebKey( Map jwk, HashImpl hash, - ) => - throw UnimplementedError('Not implemented'); + ) => throw UnimplementedError('Not implemented'); } diff --git a/lib/src/impl_stub/impl_stub.rsassapkcs1v15.dart b/lib/src/impl_stub/impl_stub.rsassapkcs1v15.dart index ee83444a..558e51d9 100644 --- a/lib/src/impl_stub/impl_stub.rsassapkcs1v15.dart +++ b/lib/src/impl_stub/impl_stub.rsassapkcs1v15.dart @@ -22,24 +22,18 @@ final class _StaticRsaSsaPkcs1V15PrivateKeyImpl Future importPkcs8Key( List keyData, HashImpl hash, - ) => - throw UnimplementedError('Not implemented'); + ) => throw UnimplementedError('Not implemented'); @override Future importJsonWebKey( Map jwk, HashImpl hash, - ) => - throw UnimplementedError('Not implemented'); + ) => throw UnimplementedError('Not implemented'); @override Future<(RsaSsaPkcs1V15PrivateKeyImpl, RsaSsaPkcs1V15PublicKeyImpl)> - generateKey( - int modulusLength, - BigInt publicExponent, - HashImpl hash, - ) => - throw UnimplementedError('Not implemented'); + generateKey(int modulusLength, BigInt publicExponent, HashImpl hash) => + throw UnimplementedError('Not implemented'); } final class _StaticRsaSsaPkcs1V15PublicKeyImpl @@ -50,13 +44,11 @@ final class _StaticRsaSsaPkcs1V15PublicKeyImpl Future importSpkiKey( List keyData, HashImpl hash, - ) => - throw UnimplementedError('Not implemented'); + ) => throw UnimplementedError('Not implemented'); @override Future importJsonWebKey( Map jwk, HashImpl hash, - ) => - throw UnimplementedError('Not implemented'); + ) => throw UnimplementedError('Not implemented'); } diff --git a/lib/src/jsonwebkey.dart b/lib/src/jsonwebkey.dart index 42a89e79..128f0622 100644 --- a/lib/src/jsonwebkey.dart +++ b/lib/src/jsonwebkey.dart @@ -89,7 +89,9 @@ final class JsonWebKey { if (json['key_ops'] is! List || (json['key_ops'] as List).any((e) => e is! String)) { throw FormatException( - 'JWK entry "key_ops" must be a list of strings', json); + 'JWK entry "key_ops" must be a list of strings', + json, + ); } key_ops = (json['key_ops'] as List).map((e) => e as String).toList(); } @@ -222,11 +224,7 @@ final class RsaOtherPrimesInfo { String d; String t; - RsaOtherPrimesInfo({ - required this.r, - required this.d, - required this.t, - }); + RsaOtherPrimesInfo({required this.r, required this.d, required this.t}); static RsaOtherPrimesInfo fromJson(Map json) { for (final k in ['r', 'd', 't']) { @@ -242,10 +240,6 @@ final class RsaOtherPrimesInfo { } Map toJson() { - return { - 'r': r, - 'd': d, - 't': t, - }; + return {'r': r, 'd': d, 't': t}; } } diff --git a/lib/src/testing/utils/testrunner.dart b/lib/src/testing/utils/testrunner.dart index 42eeaa09..2b067639 100644 --- a/lib/src/testing/utils/testrunner.dart +++ b/lib/src/testing/utils/testrunner.dart @@ -98,12 +98,14 @@ class _TestCase { generateKeyParams: _optionalStringMapDecode(json['generateKeyParams']), privateRawKeyData: _optionalBase64Decode(json['privateRawKeyData']), privatePkcs8KeyData: _optionalBase64Decode(json['privatePkcs8KeyData']), - privateJsonWebKeyData: - _optionalStringMapDecode(json['privateJsonWebKeyData']), + privateJsonWebKeyData: _optionalStringMapDecode( + json['privateJsonWebKeyData'], + ), publicRawKeyData: _optionalBase64Decode(json['publicRawKeyData']), publicSpkiKeyData: _optionalBase64Decode(json['publicSpkiKeyData']), - publicJsonWebKeyData: - _optionalStringMapDecode(json['publicJsonWebKeyData']), + publicJsonWebKeyData: _optionalStringMapDecode( + json['publicJsonWebKeyData'], + ), plaintext: _optionalBase64Decode(json['plaintext']), signature: _optionalBase64Decode(json['signature']), ciphertext: _optionalBase64Decode(json['ciphertext']), @@ -111,8 +113,9 @@ class _TestCase { derivedLength: json['derivedLength'] as int?, importKeyParams: _optionalStringMapDecode(json['importKeyParams']), signVerifyParams: _optionalStringMapDecode(json['signVerifyParams']), - encryptDecryptParams: - _optionalStringMapDecode(json['encryptDecryptParams']), + encryptDecryptParams: _optionalStringMapDecode( + json['encryptDecryptParams'], + ), deriveParams: _optionalStringMapDecode(json['deriveParams']), ); } @@ -141,77 +144,82 @@ class _TestCase { } /// Function for importing pkcs8, spki, or raw key. -typedef ImportKeyFn = Future Function( - List keyData, - Map keyImportParams, -); +typedef ImportKeyFn = + Future Function(List keyData, Map keyImportParams); /// Function for exporting pkcs8, spki or raw key. typedef ExportKeyFn = Future> Function(T key); /// Function for importing JWK key. -typedef ImportJsonWebKeyKeyFn = Future Function( - Map jsonWebKeyData, - Map keyImportParams, -); +typedef ImportJsonWebKeyKeyFn = + Future Function( + Map jsonWebKeyData, + Map keyImportParams, + ); /// Function for exporting JWK key. typedef ExportJsonWebKeyKeyFn = Future> Function(T key); /// Function for generating a key. -typedef GenerateKeyFn = Future Function( - Map generateKeyPairParams, -); +typedef GenerateKeyFn = + Future Function(Map generateKeyPairParams); /// Function for signing [data] using [key]. -typedef SignBytesFn = Future> Function( - T key, - List data, - Map signParams, -); +typedef SignBytesFn = + Future> Function( + T key, + List data, + Map signParams, + ); /// Function for signing [data] using [key]. -typedef SignStreamFn = Future> Function( - T key, - Stream> data, - Map signParams, -); +typedef SignStreamFn = + Future> Function( + T key, + Stream> data, + Map signParams, + ); /// Function for verifying [data] using [key]. -typedef VerifyBytesFn = Future Function( - T key, - List signature, - List data, - Map verifyParams, -); +typedef VerifyBytesFn = + Future Function( + T key, + List signature, + List data, + Map verifyParams, + ); /// Function for verifying [data] using [key]. -typedef VerifyStreamFn = Future Function( - T key, - List signature, - Stream> data, - Map verifyParams, -); +typedef VerifyStreamFn = + Future Function( + T key, + List signature, + Stream> data, + Map verifyParams, + ); /// Function for encrypting or a function for decrypting [data] using [key]. -typedef EncryptOrDecryptBytesFn = Future> Function( - T key, - List data, - Map encryptOrDecryptParams, -); +typedef EncryptOrDecryptBytesFn = + Future> Function( + T key, + List data, + Map encryptOrDecryptParams, + ); /// Function for encrypting or a function for decrypting [data] using [key]. -typedef EncryptOrDecryptStreamFn = Stream> Function( - T key, - Stream> data, - Map encryptOrDecryptParams, -); - -typedef DeriveBitsFn = Future> Function( - T keyOrKeyPair, - int length, - Map deriveParams, -); +typedef EncryptOrDecryptStreamFn = + Stream> Function( + T key, + Stream> data, + Map encryptOrDecryptParams, + ); + +typedef DeriveBitsFn = + Future> Function( + T keyOrKeyPair, + int length, + Map deriveParams, + ); @sealed class TestRunner { @@ -273,30 +281,30 @@ class TestRunner { EncryptOrDecryptStreamFn? decryptStream, DeriveBitsFn>? deriveBits, Iterable>? testData, - }) : _isSymmetric = isSymmetric, - _importPrivateRawKey = importPrivateRawKey, - _exportPrivateRawKey = exportPrivateRawKey, - _importPrivatePkcs8Key = importPrivatePkcs8Key, - _exportPrivatePkcs8Key = exportPrivatePkcs8Key, - _importPrivateJsonWebKey = importPrivateJsonWebKey, - _exportPrivateJsonWebKey = exportPrivateJsonWebKey, - _importPublicRawKey = importPublicRawKey, - _exportPublicRawKey = exportPublicRawKey, - _importPublicSpkiKey = importPublicSpkiKey, - _exportPublicSpkiKey = exportPublicSpkiKey, - _importPublicJsonWebKey = importPublicJsonWebKey, - _exportPublicJsonWebKey = exportPublicJsonWebKey, - _generateKeyPair = generateKeyPair, - _signBytes = signBytes, - _signStream = signStream, - _verifyBytes = verifyBytes, - _verifyStream = verifyStream, - _encryptBytes = encryptBytes, - _encryptStream = encryptStream, - _decryptBytes = decryptBytes, - _decryptStream = decryptStream, - _deriveBits = deriveBits, - _testData = List.from(testData ?? >[]) { + }) : _isSymmetric = isSymmetric, + _importPrivateRawKey = importPrivateRawKey, + _exportPrivateRawKey = exportPrivateRawKey, + _importPrivatePkcs8Key = importPrivatePkcs8Key, + _exportPrivatePkcs8Key = exportPrivatePkcs8Key, + _importPrivateJsonWebKey = importPrivateJsonWebKey, + _exportPrivateJsonWebKey = exportPrivateJsonWebKey, + _importPublicRawKey = importPublicRawKey, + _exportPublicRawKey = exportPublicRawKey, + _importPublicSpkiKey = importPublicSpkiKey, + _exportPublicSpkiKey = exportPublicSpkiKey, + _importPublicJsonWebKey = importPublicJsonWebKey, + _exportPublicJsonWebKey = exportPublicJsonWebKey, + _generateKeyPair = generateKeyPair, + _signBytes = signBytes, + _signStream = signStream, + _verifyBytes = verifyBytes, + _verifyStream = verifyStream, + _encryptBytes = encryptBytes, + _encryptStream = encryptStream, + _decryptBytes = decryptBytes, + _decryptStream = decryptStream, + _deriveBits = deriveBits, + _testData = List.from(testData ?? >[]) { _validate(); } @@ -436,9 +444,11 @@ class TestRunner { } // Must have one priate key import format. - check(_importPrivateRawKey != null || - _importPrivatePkcs8Key != null || - _importPrivateJsonWebKey != null); + check( + _importPrivateRawKey != null || + _importPrivatePkcs8Key != null || + _importPrivateJsonWebKey != null, + ); if (_isSymmetric) { // if symmetric we have no methods for importing public keys @@ -447,27 +457,21 @@ class TestRunner { check(_importPublicJsonWebKey == null); } else { // Must have one public key import format. - check(_importPublicRawKey != null || - _importPublicSpkiKey != null || - _importPublicJsonWebKey != null); + check( + _importPublicRawKey != null || + _importPublicSpkiKey != null || + _importPublicJsonWebKey != null, + ); } // Export-only and import-only formats do not make sense - check( - (_importPrivateRawKey != null) == (_exportPrivateRawKey != null), - ); - check( - (_importPrivatePkcs8Key != null) == (_exportPrivatePkcs8Key != null), - ); + check((_importPrivateRawKey != null) == (_exportPrivateRawKey != null)); + check((_importPrivatePkcs8Key != null) == (_exportPrivatePkcs8Key != null)); check( (_importPrivateJsonWebKey != null) == (_exportPrivateJsonWebKey != null), ); - check( - (_importPublicRawKey != null) == (_exportPublicRawKey != null), - ); - check( - (_importPublicSpkiKey != null) == (_exportPublicSpkiKey != null), - ); + check((_importPublicRawKey != null) == (_exportPublicRawKey != null)); + check((_importPublicSpkiKey != null) == (_exportPublicSpkiKey != null)); check( (_importPublicJsonWebKey != null) == (_exportPublicJsonWebKey != null), ); @@ -514,10 +518,7 @@ class TestRunner { final rng = Random.secure(); final N = rng.nextInt(maxPlaintext - minPlaintext) + minPlaintext; final offset = rng.nextInt(plaintextTemplate.length - N); - plaintext = utf8.encode(plaintextTemplate.substring( - offset, - offset + N, - )); + plaintext = utf8.encode(plaintextTemplate.substring(offset, offset + N)); } List? signature; @@ -553,11 +554,7 @@ class TestRunner { : rng.nextInt(maxDeriveLength - minDeriveLength) + minDeriveLength; log('creating derivedBits'); - derivedBits = await deriveBits( - pair, - derivedLength, - deriveParams, - ); + derivedBits = await deriveBits(pair, derivedLength, deriveParams); } Future optionalCall(Future Function(S)? fn, S v) async => @@ -566,14 +563,20 @@ class TestRunner { name, generateKeyParams: null, // omit generateKeyParams privateRawKeyData: await optionalCall(_exportPrivateRawKey, privateKey), - privatePkcs8KeyData: - await optionalCall(_exportPrivatePkcs8Key, privateKey), - privateJsonWebKeyData: - await optionalCall(_exportPrivateJsonWebKey, privateKey), + privatePkcs8KeyData: await optionalCall( + _exportPrivatePkcs8Key, + privateKey, + ), + privateJsonWebKeyData: await optionalCall( + _exportPrivateJsonWebKey, + privateKey, + ), publicRawKeyData: await optionalCall(_exportPublicRawKey, publicKey), publicSpkiKeyData: await optionalCall(_exportPublicSpkiKey, publicKey), - publicJsonWebKeyData: - await optionalCall(_exportPublicJsonWebKey, publicKey), + publicJsonWebKeyData: await optionalCall( + _exportPublicJsonWebKey, + publicKey, + ), plaintext: plaintext, signature: signature, ciphertext: ciphertext, @@ -587,9 +590,9 @@ class TestRunner { // Log the generated test case. This makes it easy to copy/paste the test // case into test files. - final json = const JsonEncoder.withIndent(' ') - .convert(c.toJson()) - .replaceAll('\n', '\n| '); + final json = const JsonEncoder.withIndent( + ' ', + ).convert(c.toJson()).replaceAll('\n', '\n| '); log('| $json'); return c.toJson(); @@ -616,7 +619,7 @@ class TestRunner { test: () async { // Check BoringSSL error stack if running with dart:ffi await checkErrorStack(fn); - } + }, )); }); } @@ -648,10 +651,12 @@ void _validateTestCase( TestRunner r, _TestCase c, ) { - final hasPrivateKey = c.privateRawKeyData != null || + final hasPrivateKey = + c.privateRawKeyData != null || c.privatePkcs8KeyData != null || c.privateJsonWebKeyData != null; - final hasPublicKey = c.publicRawKeyData != null || + final hasPublicKey = + c.publicRawKeyData != null || c.publicSpkiKeyData != null || c.publicJsonWebKeyData != null; @@ -859,7 +864,7 @@ void _runTests( derivedBits = await r._deriveBits( ( privateKey: privateKey as PrivateKey, - publicKey: publicKey as PublicKey + publicKey: publicKey as PublicKey, ), c.derivedLength!, c.deriveParams!, @@ -871,7 +876,7 @@ void _runTests( final derived = await r._deriveBits( ( privateKey: privateKey as PrivateKey, - publicKey: publicKey as PublicKey + publicKey: publicKey as PublicKey, ), c.derivedLength!, c.deriveParams!, @@ -977,7 +982,7 @@ void _runTests( final derived = await r._deriveBits( ( privateKey: privateKey as PrivateKey, - publicKey: publicKey as PublicKey + publicKey: publicKey as PublicKey, ), c.derivedLength!, c.deriveParams!, @@ -1004,7 +1009,7 @@ void _runTests( final derived = await r._deriveBits( ( privateKey: privateKey as PrivateKey, - publicKey: publicKey as PublicKey + publicKey: publicKey as PublicKey, ), c.derivedLength!, c.deriveParams!, @@ -1239,20 +1244,24 @@ void _runTests( if (r._encryptStream != null) { test('encryptStream(plaintext)', () async { - final ctext = await bufferStream(r._encryptStream( - publicKey as PublicKey, - Stream.value(c.plaintext!), - c.encryptDecryptParams!, - )); + final ctext = await bufferStream( + r._encryptStream( + publicKey as PublicKey, + Stream.value(c.plaintext!), + c.encryptDecryptParams!, + ), + ); await checkCipherText(ctext); }); test('encryptStream(fibChunked(plaintext))', () async { - final ctext = await bufferStream(r._encryptStream( - publicKey as PublicKey, - fibonacciChunkedStream(c.plaintext!), - c.encryptDecryptParams!, - )); + final ctext = await bufferStream( + r._encryptStream( + publicKey as PublicKey, + fibonacciChunkedStream(c.plaintext!), + c.encryptDecryptParams!, + ), + ); await checkCipherText(ctext); }); } @@ -1266,10 +1275,7 @@ void _runTests( ciphertext!, c.encryptDecryptParams!, ); - check( - equalBytes(text, c.plaintext!), - 'failed to decrypt signature', - ); + check(equalBytes(text, c.plaintext!), 'failed to decrypt signature'); if (ciphertext!.isNotEmpty) { // If ciphertext is mangled some primitives like AES-GCM must throw @@ -1293,25 +1299,26 @@ void _runTests( if (r._decryptStream != null) { test('decryptStream(Stream.value(ciphertext))', () async { - final text = await bufferStream(r._decryptStream( - privateKey as PrivateKey, - Stream.value(ciphertext!), - c.encryptDecryptParams!, - )); - check( - equalBytes(text, c.plaintext!), - 'failed to decrypt signature', + final text = await bufferStream( + r._decryptStream( + privateKey as PrivateKey, + Stream.value(ciphertext!), + c.encryptDecryptParams!, + ), ); + check(equalBytes(text, c.plaintext!), 'failed to decrypt signature'); if (ciphertext!.isNotEmpty) { // If ciphertext is mangled some primitives like AES-GCM must throw // others may return garbled plaintext. try { - final text2 = await bufferStream(r._decryptStream( - privateKey as PrivateKey, - Stream.value(flipFirstBits(ciphertext!)), - c.encryptDecryptParams!, - )); + final text2 = await bufferStream( + r._decryptStream( + privateKey as PrivateKey, + Stream.value(flipFirstBits(ciphertext!)), + c.encryptDecryptParams!, + ), + ); check( !equalBytes(text2, c.plaintext!), 'decrypted an invalid ciphertext correctly', @@ -1323,25 +1330,26 @@ void _runTests( }); test('decryptStream(fibChunkedStream(ciphertext))', () async { - final text = await bufferStream(r._decryptStream( - privateKey as PrivateKey, - fibonacciChunkedStream(ciphertext!), - c.encryptDecryptParams!, - )); - check( - equalBytes(text, c.plaintext!), - 'failed to decrypt signature', + final text = await bufferStream( + r._decryptStream( + privateKey as PrivateKey, + fibonacciChunkedStream(ciphertext!), + c.encryptDecryptParams!, + ), ); + check(equalBytes(text, c.plaintext!), 'failed to decrypt signature'); if (ciphertext!.isNotEmpty) { // If ciphertext is mangled some primitives like AES-GCM must throw // others may return garbled plaintext. try { - final text2 = await bufferStream(r._decryptStream( - privateKey as PrivateKey, - fibonacciChunkedStream(flipFirstBits(ciphertext!)), - c.encryptDecryptParams!, - )); + final text2 = await bufferStream( + r._decryptStream( + privateKey as PrivateKey, + fibonacciChunkedStream(flipFirstBits(ciphertext!)), + c.encryptDecryptParams!, + ), + ); check( !equalBytes(text2, c.plaintext!), 'decrypted an invalid ciphertext correctly', @@ -1359,7 +1367,7 @@ void _runTests( final derived = await r._deriveBits( ( privateKey: privateKey as PrivateKey, - publicKey: publicKey as PublicKey + publicKey: publicKey as PublicKey, ), c.derivedLength!, c.deriveParams!, @@ -1443,23 +1451,37 @@ void _runTests( test('validate generated test case', () async { Future optionalCall(Future Function(S)? fn, S v) async => fn != null ? await fn(v) : null; - final date = - DateTime.now().toIso8601String().split('T').first; // drop time + final date = DateTime.now() + .toIso8601String() + .split('T') + .first; // drop time final generated = _TestCase( '${c.name} generated on $detectedRuntime at $date', generateKeyParams: null, // omit generateKeyParams privateRawKeyData: await optionalCall( - r._exportPrivateRawKey, privateKey as PrivateKey), + r._exportPrivateRawKey, + privateKey as PrivateKey, + ), privatePkcs8KeyData: await optionalCall( - r._exportPrivatePkcs8Key, privateKey as PrivateKey), + r._exportPrivatePkcs8Key, + privateKey as PrivateKey, + ), privateJsonWebKeyData: await optionalCall( - r._exportPrivateJsonWebKey, privateKey as PrivateKey), - publicRawKeyData: - await optionalCall(r._exportPublicRawKey, publicKey as PublicKey), - publicSpkiKeyData: - await optionalCall(r._exportPublicSpkiKey, publicKey as PublicKey), + r._exportPrivateJsonWebKey, + privateKey as PrivateKey, + ), + publicRawKeyData: await optionalCall( + r._exportPublicRawKey, + publicKey as PublicKey, + ), + publicSpkiKeyData: await optionalCall( + r._exportPublicSpkiKey, + publicKey as PublicKey, + ), publicJsonWebKeyData: await optionalCall( - r._exportPublicJsonWebKey, publicKey as PublicKey), + r._exportPublicJsonWebKey, + publicKey as PublicKey, + ), plaintext: c.plaintext, signature: signature, ciphertext: ciphertext, diff --git a/lib/src/testing/utils/utils.dart b/lib/src/testing/utils/utils.dart index ff9aad1e..6cd201c6 100644 --- a/lib/src/testing/utils/utils.dart +++ b/lib/src/testing/utils/utils.dart @@ -30,9 +30,9 @@ const _dumpData = bool.fromEnvironment('webcrypto.dump', defaultValue: false); /// This can also be overwritten by manually tweaking the [_dumpData] variable. void dump(Map data) { if (_dumpData) { - final json = const JsonEncoder.withIndent(' ') - .convert(data) - .replaceAll('\n', '\n| '); + final json = const JsonEncoder.withIndent( + ' ', + ).convert(data).replaceAll('\n', '\n| '); log('| $json'); } } diff --git a/lib/src/testing/webcrypto/aescbc.dart b/lib/src/testing/webcrypto/aescbc.dart index 00fc3cd1..1ba434a7 100644 --- a/lib/src/testing/webcrypto/aescbc.dart +++ b/lib/src/testing/webcrypto/aescbc.dart @@ -26,9 +26,8 @@ final runner = TestRunner.symmetric( importPrivateJsonWebKey: (jsonWebKeyData, keyImportParams) => AesCbcSecretKey.importJsonWebKey(jsonWebKeyData), exportPrivateJsonWebKey: (key) => key.exportJsonWebKey(), - generateKey: (generateKeyPairParams) => AesCbcSecretKey.generateKey( - generateKeyPairParams['length'], - ), + generateKey: (generateKeyPairParams) => + AesCbcSecretKey.generateKey(generateKeyPairParams['length']), encryptBytes: (key, data, encryptParams) => key.encryptBytes(data, bytesFromJson(encryptParams, 'iv')!), encryptStream: (key, data, encryptParams) => @@ -45,9 +44,7 @@ void main() async { await runner.generate( generateKeyParams: {'length': 256}, importKeyParams: {}, - encryptDecryptParams: { - 'iv': bytesToJson(List.generate(16, (i) => i * i)), - }, + encryptDecryptParams: {'iv': bytesToJson(List.generate(16, (i) => i * i))}, maxPlaintext: 80, ); log('--------------------'); @@ -65,14 +62,14 @@ final _testData = [ "kty": "oct", "use": "enc", "alg": "A128CBC", - "k": "nJ0IrxKwen1VN2_rfLsmmA" + "k": "nJ0IrxKwen1VN2_rfLsmmA", }, "plaintext": "dmVzdGlidWx1bSBsdWN0dXMgZGlhbSwgcXVpcwppbnRlcmR1bSBsZW8gYWxpcXVhbSBhYy4gTnVuYyBhYyBtaSBpbiBs", "ciphertext": "MlBdzmsDQSRORkwayz7U9P7v87lgsVRRTrWsZi3qnWiqTW+m6K3KRQ4B1I1u+W7r/kBCBQt404253SV0DeIHNe/HUesVja7CB5jvJUQ6GmQ=", "importKeyParams": {}, - "encryptDecryptParams": {"iv": "AAEECRAZJDFAUWR5kKnE4Q=="} + "encryptDecryptParams": {"iv": "AAEECRAZJDFAUWR5kKnE4Q=="}, }, { "name": "A128CBC generated on chrome/linux at 2020-01-17T22:56:49", @@ -80,14 +77,14 @@ final _testData = [ "privateJsonWebKeyData": { "kty": "oct", "alg": "A128CBC", - "k": "S9yXvDZ0nsH6cKF5-O6mfA" + "k": "S9yXvDZ0nsH6cKF5-O6mfA", }, "plaintext": "SW4gdml2ZXJyYSBzZW0gaWQgZXN0IHRpbmNpZHVudApkaWduaXNzaW0uIFBlbGxlbnRlc3F1ZSB0cmlzdGlxdWUsIG5pc2wgc2VkIGw=", "ciphertext": "1sh9WWx/u82vLF4BIFG4NtK9eRv8j11m9YkxP5iYpLyBcJn8YYboUM5GDJ3Jz7XO3MAIXO7EXlHcu1R9yaYWwsprjON/tDhjEhYuSGjIz8M=", "importKeyParams": {}, - "encryptDecryptParams": {"iv": "AAEECRAZJDFAUWR5kKnE4Q=="} + "encryptDecryptParams": {"iv": "AAEECRAZJDFAUWR5kKnE4Q=="}, }, { "name": "A128CBC generated on firefox/linux at 2020-01-17T22:56:55", @@ -95,13 +92,13 @@ final _testData = [ "privateJsonWebKeyData": { "kty": "oct", "alg": "A128CBC", - "k": "o4QOi2ASkWTf5W9tCLSkAw" + "k": "o4QOi2ASkWTf5W9tCLSkAw", }, "plaintext": "dWUgc2VtcGVyIGp1c3RvIG9yY2ksIHZpdGFlCnZlbmVuYXRp", "ciphertext": "Apckyp9bxHAVpo0+MAlAgtcWAa6JZz9OdT/WGskcTVd/e542dAZJ88byiZ2So+2U", "importKeyParams": {}, - "encryptDecryptParams": {"iv": "AAEECRAZJDFAUWR5kKnE4Q=="} + "encryptDecryptParams": {"iv": "AAEECRAZJDFAUWR5kKnE4Q=="}, }, { "name": "A256CBC generated on boringssl/linux at 2020-01-17T22:59:11", @@ -110,14 +107,14 @@ final _testData = [ "kty": "oct", "use": "enc", "alg": "A256CBC", - "k": "b0y6-MqS0ShCvZiloJJAeG8ei8tVIN3OCYIdn1FN74o" + "k": "b0y6-MqS0ShCvZiloJJAeG8ei8tVIN3OCYIdn1FN74o", }, "plaintext": "Z2V0IGZlbGlzLiBWZXN0aWJ1bHVtIHZlc3RpYnVsdW0gbHVjdHVzIGRpYW0sIHF1aQ==", "ciphertext": "V8tNAuLWzVMZElQGnNysrBdH6BSRmL1Ui5v5OE6iAqkeI9So2RriGhWbkko9YMtz58qwW70EmVCA4wCM29zAjg==", "importKeyParams": {}, - "encryptDecryptParams": {"iv": "AAEECRAZJDFAUWR5kKnE4Q=="} + "encryptDecryptParams": {"iv": "AAEECRAZJDFAUWR5kKnE4Q=="}, }, { "name": "A256CBC generated on chrome/linux at 2020-01-17T22:59:19", @@ -125,12 +122,12 @@ final _testData = [ "privateJsonWebKeyData": { "kty": "oct", "alg": "A256CBC", - "k": "QGCU25fcU5zkTZyaQjX7cAbMCLw-elW_QxwzWzPz74c" + "k": "QGCU25fcU5zkTZyaQjX7cAbMCLw-elW_QxwzWzPz74c", }, "plaintext": "bGlzLCBhdWd1ZSBtYWduYSBtYXhpbXVzCm5lcQ==", "ciphertext": "EvgXzycWuyiHl72eTX6u2dKKrq2afchTzy5ipVd0DxE=", "importKeyParams": {}, - "encryptDecryptParams": {"iv": "AAEECRAZJDFAUWR5kKnE4Q=="} + "encryptDecryptParams": {"iv": "AAEECRAZJDFAUWR5kKnE4Q=="}, }, { "name": "A256CBC generated on firefox/linux at 2020-01-17T22:59:24", @@ -138,12 +135,12 @@ final _testData = [ "privateJsonWebKeyData": { "kty": "oct", "alg": "A256CBC", - "k": "1mfFKdMKMTCHSbor0ZzCLJJoUR5VUZ6Io-ypUuBeAWI" + "k": "1mfFKdMKMTCHSbor0ZzCLJJoUR5VUZ6Io-ypUuBeAWI", }, "plaintext": "c2NlIGEgdmVsaXQgY29tbW9kbywgbGFvcmVldCBuaXNsIGV0LA==", "ciphertext": "pjuEkxaRURuXYdb4vMgTJboTw9aFYOYYS10AoqJx4QYb3wDg6yzCec/LpGpqaPXY", "importKeyParams": {}, - "encryptDecryptParams": {"iv": "AAEECRAZJDFAUWR5kKnE4Q=="} + "encryptDecryptParams": {"iv": "AAEECRAZJDFAUWR5kKnE4Q=="}, }, ]; diff --git a/lib/src/testing/webcrypto/aesctr.dart b/lib/src/testing/webcrypto/aesctr.dart index 00e7de61..3e75e784 100644 --- a/lib/src/testing/webcrypto/aesctr.dart +++ b/lib/src/testing/webcrypto/aesctr.dart @@ -29,9 +29,8 @@ final runner = TestRunner.symmetric( importPrivateJsonWebKey: (jsonWebKeyData, keyImportParams) => AesCtrSecretKey.importJsonWebKey(jsonWebKeyData), exportPrivateJsonWebKey: (key) => key.exportJsonWebKey(), - generateKey: (generateKeyPairParams) => AesCtrSecretKey.generateKey( - generateKeyPairParams['length'], - ), + generateKey: (generateKeyPairParams) => + AesCtrSecretKey.generateKey(generateKeyPairParams['length']), encryptBytes: (key, data, encryptParams) => key.encryptBytes( data, bytesFromJson(encryptParams, 'counter')!, @@ -81,15 +80,15 @@ final _testData = [ "kty": "oct", "use": "enc", "alg": "A128CTR", - "k": "VPhdE6z4820SUnBmesDBSw" + "k": "VPhdE6z4820SUnBmesDBSw", }, "plaintext": "dXJpcyBxdWlzIG1hdHRpcyBtYXNzYS4gUGhhc2VsbHVzIGNvbnZhbGxp", "ciphertext": "LnHSulNxQ6y+Z2rC2g8QQURwQWrI53qMPajfaef3cA0jaL+yAd3syGfz", "importKeyParams": {}, "encryptDecryptParams": { "counter": "AAEECRAZJDFAUWR5kKnE4Q==", - "length": 64 - } + "length": 64, + }, }, { "name": "A128CTR/64 generated on chrome/linux at 2020-01-19T16:40:46", @@ -97,7 +96,7 @@ final _testData = [ "privateJsonWebKeyData": { "kty": "oct", "alg": "A128CTR", - "k": "sx_x9PWRAq-IjUKJOGpDVA" + "k": "sx_x9PWRAq-IjUKJOGpDVA", }, "plaintext": "RXRpYW0gc3VzY2lwaXQgZXN0IHZlbCBoZW5kcmVyaXQgYmxhbmRpdC4gTnVsbGFt", @@ -106,8 +105,8 @@ final _testData = [ "importKeyParams": {}, "encryptDecryptParams": { "counter": "AAEECRAZJDFAUWR5kKnE4Q==", - "length": 64 - } + "length": 64, + }, }, { "name": "A128CTR/64 generated on firefox/linux at 2020-01-19T16:40:51", @@ -115,7 +114,7 @@ final _testData = [ "privateJsonWebKeyData": { "kty": "oct", "alg": "A128CTR", - "k": "tauul1rFz1pQSzowPHc1Bg" + "k": "tauul1rFz1pQSzowPHc1Bg", }, "plaintext": "bnQuIEluIGhlbmRyZXJpdCBwb3N1ZXJlIGxhY3VzIHZlbAp2YXJpdXMuIA==", "ciphertext": @@ -123,8 +122,8 @@ final _testData = [ "importKeyParams": {}, "encryptDecryptParams": { "counter": "AAEECRAZJDFAUWR5kKnE4Q==", - "length": 64 - } + "length": 64, + }, }, { "name": "A256CTR/9 generated on boringssl/linux at 2020-01-21T22:27:46", @@ -133,12 +132,15 @@ final _testData = [ "kty": "oct", "use": "enc", "alg": "A256CTR", - "k": "kytWTrsvIRYO8TqaGToZIAAys5BTxSk3rZ-uz97bcII" + "k": "kytWTrsvIRYO8TqaGToZIAAys5BTxSk3rZ-uz97bcII", }, "plaintext": "dCBzYXBpZW4uIFBy", "ciphertext": "bSKocP19wU2keXkL", "importKeyParams": {}, - "encryptDecryptParams": {"counter": "/v7+/v7+/v7+/v7+/v7+/g==", "length": 9} + "encryptDecryptParams": { + "counter": "/v7+/v7+/v7+/v7+/v7+/g==", + "length": 9, + }, }, { "name": "A256CTR/9 generated on chrome/linux at 2020-01-21T22:27:52", @@ -146,14 +148,17 @@ final _testData = [ "privateJsonWebKeyData": { "kty": "oct", "alg": "A256CTR", - "k": "WngeqRJDQN8vkhSxSPAM5-XQKqKZTv90uur_A5sX4Zk" + "k": "WngeqRJDQN8vkhSxSPAM5-XQKqKZTv90uur_A5sX4Zk", }, "plaintext": "IG5pYmguCgpTZWQgbW9sbGlzIHNhcGllbiBpbiBncmF2aWRhIGF1Y3Rvci4gQWVuZWFuIG5pYmggdG9ydG8=", "ciphertext": "Nj5naY4AWDSbh3taXM4k2Ys7gDlJJSmE4rBS2TQkYXf0DcO7G9pov5EQEXrrKk/LjGITblQI1GkCi9ndwl4=", "importKeyParams": {}, - "encryptDecryptParams": {"counter": "/v7+/v7+/v7+/v7+/v7+/g==", "length": 9} + "encryptDecryptParams": { + "counter": "/v7+/v7+/v7+/v7+/v7+/g==", + "length": 9, + }, }, // HACK: Exclude counter rollover test data on Firefox, where it is broken: // https://hg.mozilla.org/projects/nss/file/38f1c92a5e1175bb8388768a209ac0efdabd1bd7/lib/freebl/ctr.c#l86 @@ -169,14 +174,17 @@ final _rolloverTestData = [ "kty": "oct", "use": "enc", "alg": "A128CTR", - "k": "mkHLvTc_F5evWm7OAMz1Ag" + "k": "mkHLvTc_F5evWm7OAMz1Ag", }, "plaintext": "cwpjb21tb2RvIGF0IHNpdCBhbWV0IG1pLiBQZWxsZW50ZXNxdWUgdmVoaWN1bGEgbA==", "ciphertext": "74m8tH2wT2MCrtw3Qr5SUTqfOPGUGzIeRnqB8psPFu4eujcjm2VgLv+LuJubZbrdkg==", "importKeyParams": {}, - "encryptDecryptParams": {"counter": "/v7+/v7+/v7+/v7+/v7+/g==", "length": 2} + "encryptDecryptParams": { + "counter": "/v7+/v7+/v7+/v7+/v7+/g==", + "length": 2, + }, }, { "name": @@ -185,13 +193,16 @@ final _rolloverTestData = [ "privateJsonWebKeyData": { "kty": "oct", "alg": "A128CTR", - "k": "ge2ewKf9LqaW1SHZnYYKTA" + "k": "ge2ewKf9LqaW1SHZnYYKTA", }, "plaintext": "UHJhZXNlbnQgZmVybWVudHVtIGVyYXQgdml0YWUgbGlndWxhCnByZXRpdW0gaW1wZQ==", "ciphertext": "elVwRCpfN3QT3om7mtNMvBWkPZfgla606PRdlEl529D7W7WDYz486NRVGlUI6qfJ8A==", "importKeyParams": {}, - "encryptDecryptParams": {"counter": "/v7+/v7+/v7+/v7+/v7+/g==", "length": 2} + "encryptDecryptParams": { + "counter": "/v7+/v7+/v7+/v7+/v7+/g==", + "length": 2, + }, }, ]; diff --git a/lib/src/testing/webcrypto/aesgcm.dart b/lib/src/testing/webcrypto/aesgcm.dart index c68dd01a..adc1e615 100644 --- a/lib/src/testing/webcrypto/aesgcm.dart +++ b/lib/src/testing/webcrypto/aesgcm.dart @@ -26,9 +26,8 @@ final runner = TestRunner.symmetric( importPrivateJsonWebKey: (jsonWebKeyData, keyImportParams) => AesGcmSecretKey.importJsonWebKey(jsonWebKeyData), exportPrivateJsonWebKey: (key) => key.exportJsonWebKey(), - generateKey: (generateKeyPairParams) => AesGcmSecretKey.generateKey( - generateKeyPairParams['length'], - ), + generateKey: (generateKeyPairParams) => + AesGcmSecretKey.generateKey(generateKeyPairParams['length']), encryptBytes: (key, data, encryptParams) => key.encryptBytes( data, bytesFromJson(encryptParams, 'iv')!, @@ -76,14 +75,14 @@ final _testData = [ "kty": "oct", "use": "enc", "alg": "A128GCM", - "k": "3nle6RpFx77jwrksoNUb1Q" + "k": "3nle6RpFx77jwrksoNUb1Q", }, "plaintext": "dWx0cmljZXMKcG9zdWVyZSBjdWJpbGlhIEN1cmFlOyBBbGlxdWFtIHF1aXMgaGVuZHJlcml0IGxhY3VzLgo=", "ciphertext": "4FNVScf36O/F5uUwqA7qSKbDAhCDHaxdvYZmpViAbEY2GE2kYS18TFRVhfbY82T2JHfqOhIuMStKtHPOkmaB3pThaKK84ARXFj0xIL0b", "importKeyParams": {}, - "encryptDecryptParams": {"iv": "AAEECRAZJDFAUWR5kKnE4Q=="} + "encryptDecryptParams": {"iv": "AAEECRAZJDFAUWR5kKnE4Q=="}, }, { "name": "A128GCM/iv-only generated chrome/linux at 2020-01-21T22:52:35", @@ -91,12 +90,12 @@ final _testData = [ "privateJsonWebKeyData": { "kty": "oct", "alg": "A128GCM", - "k": "oZGrqgGz6HAh13f4M-4nFw" + "k": "oZGrqgGz6HAh13f4M-4nFw", }, "plaintext": "c3QgbHVjdHVzLCB2ZWwgcGxhY2VyYQ==", "ciphertext": "/kdRoLGkAENcOsCcaBKevK+7dk+4WEQKiYFcsLIwq/IrxrpnZWA=", "importKeyParams": {}, - "encryptDecryptParams": {"iv": "AAEECRAZJDFAUWR5kKnE4Q=="} + "encryptDecryptParams": {"iv": "AAEECRAZJDFAUWR5kKnE4Q=="}, }, { "name": "A128GCM/iv-only generated firefox/linux at 2020-01-21T22:52:41", @@ -104,12 +103,12 @@ final _testData = [ "privateJsonWebKeyData": { "kty": "oct", "alg": "A128GCM", - "k": "M1Y_cmVtV_58CgQeZ35lIQ" + "k": "M1Y_cmVtV_58CgQeZ35lIQ", }, "plaintext": "ZW5lYW4gbWFsZXN1YWRhIHVybmEgbm9uIA==", "ciphertext": "NggIpWUaQI3KtEbTba5eL4iytpEsP2Et7wEM4GwG+gqxz13BQdENxlU=", "importKeyParams": {}, - "encryptDecryptParams": {"iv": "AAEECRAZJDFAUWR5kKnE4Q=="} + "encryptDecryptParams": {"iv": "AAEECRAZJDFAUWR5kKnE4Q=="}, }, { "name": "A128GCM/ad/64 generated on boringssl/linux at 2020-01-21T22:57:47", @@ -118,7 +117,7 @@ final _testData = [ "kty": "oct", "use": "enc", "alg": "A128GCM", - "k": "vK_zU373WhzeojGh-qTDeQ" + "k": "vK_zU373WhzeojGh-qTDeQ", }, "plaintext": "cmFlc2VudCBwcmV0aXVtIG4=", "ciphertext": "nelv0lgfowMjxTivj6R+MY8wpgejuOmZMVmlOFiFglov", @@ -126,8 +125,8 @@ final _testData = [ "encryptDecryptParams": { "iv": "AAEECRAZJDFAUWR5kKnE4Q==", "additionalData": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=", - "tagLength": 64 - } + "tagLength": 64, + }, }, { "name": "A128GCM/ad/64 generated on chrome/linux at 2020-01-21T22:57:56", @@ -135,7 +134,7 @@ final _testData = [ "privateJsonWebKeyData": { "kty": "oct", "alg": "A128GCM", - "k": "iPtcYDUi2Te9S1ysudhq3w" + "k": "iPtcYDUi2Te9S1ysudhq3w", }, "plaintext": "cnRhIGVyYXQuIFZlc3RpYnVsdW0gaW4gcG9ydHRpdG9yIHRlbGx1cy4KQWVuZWFuIGRpY3R1bSBkYXA=", @@ -145,8 +144,8 @@ final _testData = [ "encryptDecryptParams": { "iv": "AAEECRAZJDFAUWR5kKnE4Q==", "additionalData": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=", - "tagLength": 64 - } + "tagLength": 64, + }, }, { "name": "A128GCM/ad/64 generated on firefox/linux at 2020-01-21T22:58:03", @@ -154,7 +153,7 @@ final _testData = [ "privateJsonWebKeyData": { "kty": "oct", "alg": "A128GCM", - "k": "QROjT6fk9NlF5im-libUqw" + "k": "QROjT6fk9NlF5im-libUqw", }, "plaintext": "dHVyCmFsaXF1ZXQsIGRvbG9yIA==", "ciphertext": "eE4yhoSZIoIaTIn30tRZdONgB1SixHisBgVeBUWR7MllYSg=", @@ -162,8 +161,8 @@ final _testData = [ "encryptDecryptParams": { "iv": "AAEECRAZJDFAUWR5kKnE4Q==", "additionalData": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=", - "tagLength": 64 - } + "tagLength": 64, + }, }, { "name": "A256GCM/ad/32 generated on boringssl/linux at 2020-01-21T22:59:19", @@ -172,7 +171,7 @@ final _testData = [ "kty": "oct", "use": "enc", "alg": "A256GCM", - "k": "uIfV8fgL3cR69VFEZBwFVKZYAEWRGl3k6JlT6mGAd1o" + "k": "uIfV8fgL3cR69VFEZBwFVKZYAEWRGl3k6JlT6mGAd1o", }, "plaintext": "bnNlY3RldHVyCmFsaXF1ZXQsIGRvbG9yIGF1Z3VlIG1vbGVzdGk=", "ciphertext": @@ -181,8 +180,8 @@ final _testData = [ "encryptDecryptParams": { "iv": "AAEECRAZJDFAUWR5kKnE4Q==", "additionalData": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=", - "tagLength": 32 - } + "tagLength": 32, + }, }, { "name": "A256GCM/ad/32 generated on chrome/linux at 2020-01-21T22:59:28", @@ -190,7 +189,7 @@ final _testData = [ "privateJsonWebKeyData": { "kty": "oct", "alg": "A256GCM", - "k": "P2GOjX4WcWt4NwlMhR4G7OLHWJQGDrTB37Igc4A-RTo" + "k": "P2GOjX4WcWt4NwlMhR4G7OLHWJQGDrTB37Igc4A-RTo", }, "plaintext": "ZG9sb3IgYW50ZSBzaXQgYW1ldCBzYXBpZW4uIFN1c3BlbmRpc3NlIHJo", "ciphertext": @@ -199,8 +198,8 @@ final _testData = [ "encryptDecryptParams": { "iv": "AAEECRAZJDFAUWR5kKnE4Q==", "additionalData": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=", - "tagLength": 32 - } + "tagLength": 32, + }, }, { "name": "A256GCM/ad/32 generated on firefox/linux at 2020-01-21T22:59:34", @@ -208,7 +207,7 @@ final _testData = [ "privateJsonWebKeyData": { "kty": "oct", "alg": "A256GCM", - "k": "gJMT676kwkWxVBe6Hq1RW4q27ek79VZOIZr4OSe0kmk" + "k": "gJMT676kwkWxVBe6Hq1RW4q27ek79VZOIZr4OSe0kmk", }, "plaintext": "bSBlZmZpY2l0dXIgcmlzdXMsIG5lYyBncmF2aWRhIHB1cnVzIGNvbmd1ZSBzZWQuIEFlbmVhbiBxdWlzIG5p", @@ -218,7 +217,7 @@ final _testData = [ "encryptDecryptParams": { "iv": "AAEECRAZJDFAUWR5kKnE4Q==", "additionalData": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=", - "tagLength": 32 - } - } + "tagLength": 32, + }, + }, ]; diff --git a/lib/src/testing/webcrypto/digest.dart b/lib/src/testing/webcrypto/digest.dart index 25d5e50c..03f83a17 100644 --- a/lib/src/testing/webcrypto/digest.dart +++ b/lib/src/testing/webcrypto/digest.dart @@ -30,10 +30,8 @@ List<({String name, Future Function() test})> tests() { // echo -n 'hello-world' | sha1sum - | cut -d ' ' -f 1 | xxd -r -p | base64 final tests = <({String name, Future Function() test})>[]; - void test(String name, Future Function() test) => tests.add(( - name: name, - test: test, - )); + void test(String name, Future Function() test) => + tests.add((name: name, test: test)); test('SHA-1: "hello-world"', () async { final bytes = await Hash.sha1.digestStream(_utf8Stream('hello-world')); @@ -50,16 +48,20 @@ List<({String name, Future Function() test})> tests() { test('SHA-384: "hello-world"', () async { final bytes = await Hash.sha384.digestStream(_utf8Stream('hello-world')); final hash = base64Encode(bytes); - check(hash == - 'UT6f7WCFp32YJnp1is4l/ZYnOeQKpE8xjmdkLOwZ3nIP+tmT2aMRFQGJomjVf5cE'); + check( + hash == + 'UT6f7WCFp32YJnp1is4l/ZYnOeQKpE8xjmdkLOwZ3nIP+tmT2aMRFQGJomjVf5cE', + ); }); test('SHA-512: "hello-world"', () async { final bytes = await Hash.sha512.digestStream(_utf8Stream('hello-world')); final hash = base64Encode(bytes); - check(hash == - 'au78KRIqOWLJDvg09sqtADO//NYpQbemIFppXMOeJ2fbd3inrXbRc6CDueFLIQ3AISkj' - '9IGyhceEqx/jQNf/TQ=='); + check( + hash == + 'au78KRIqOWLJDvg09sqtADO//NYpQbemIFppXMOeJ2fbd3inrXbRc6CDueFLIQ3AISkj' + '9IGyhceEqx/jQNf/TQ==', + ); }); test('SHA-1: libsum', () async { @@ -67,10 +69,12 @@ List<({String name, Future Function() test})> tests() { final bytes = await h.digestStream(_utf8Stream(libsum)); final hash = base64Encode(bytes); check(hash == 'nBxI1wju5YS4yWgFXBL6K/AUZmk='); - check(hash == - base64Encode( - await h.digestStream(fibonacciChunkedStream(utf8.encode(libsum))), - )); + check( + hash == + base64Encode( + await h.digestStream(fibonacciChunkedStream(utf8.encode(libsum))), + ), + ); }); test('SHA-256: libsum', () async { @@ -78,35 +82,45 @@ List<({String name, Future Function() test})> tests() { final bytes = await h.digestStream(_utf8Stream(libsum)); final hash = base64Encode(bytes); check(hash == 'GbcmmlUnvPkRtNYTM4dKmqsrSXQSURg5IRJcFaL2pDI='); - check(hash == - base64Encode( - await h.digestStream(fibonacciChunkedStream(utf8.encode(libsum))), - )); + check( + hash == + base64Encode( + await h.digestStream(fibonacciChunkedStream(utf8.encode(libsum))), + ), + ); }); test('SHA-384: libsum', () async { const h = Hash.sha384; final bytes = await h.digestStream(_utf8Stream(libsum)); final hash = base64Encode(bytes); - check(hash == - 'O9csqdeyd4eYukVJ6L8tYrqmvjeBRL8vn/I8Ggl3F2vneuF7Xr6YkWDzw1zCLTDv'); - check(hash == - base64Encode( - await h.digestStream(fibonacciChunkedStream(utf8.encode(libsum))), - )); + check( + hash == + 'O9csqdeyd4eYukVJ6L8tYrqmvjeBRL8vn/I8Ggl3F2vneuF7Xr6YkWDzw1zCLTDv', + ); + check( + hash == + base64Encode( + await h.digestStream(fibonacciChunkedStream(utf8.encode(libsum))), + ), + ); }); test('SHA-512: libsum', () async { const h = Hash.sha512; final bytes = await h.digestStream(_utf8Stream(libsum)); final hash = base64Encode(bytes); - check(hash == - 'ZceIlMsV6OHRjLmIx8yWlhxPMSXHYdd5cDjsaiRNlqMIhlQbXlFjz3PGOCncVl/pK2pm' - 'G7OyjZNdO0i+0rCXZg=='); - check(hash == - base64Encode( - await h.digestStream(fibonacciChunkedStream(utf8.encode(libsum))), - )); + check( + hash == + 'ZceIlMsV6OHRjLmIx8yWlhxPMSXHYdd5cDjsaiRNlqMIhlQbXlFjz3PGOCncVl/pK2pm' + 'G7OyjZNdO0i+0rCXZg==', + ); + check( + hash == + base64Encode( + await h.digestStream(fibonacciChunkedStream(utf8.encode(libsum))), + ), + ); }); return tests; diff --git a/lib/src/testing/webcrypto/ecdh.dart b/lib/src/testing/webcrypto/ecdh.dart index 4c689916..d7c99cb3 100644 --- a/lib/src/testing/webcrypto/ecdh.dart +++ b/lib/src/testing/webcrypto/ecdh.dart @@ -26,7 +26,9 @@ final runner = TestRunner.asymmetric( exportPrivatePkcs8Key: (key) => key.exportPkcs8Key(), importPrivateJsonWebKey: (jsonWebKeyData, keyImportParams) => EcdhPrivateKey.importJsonWebKey( - jsonWebKeyData, curveFromJson(keyImportParams)), + jsonWebKeyData, + curveFromJson(keyImportParams), + ), exportPrivateJsonWebKey: (key) => key.exportJsonWebKey(), importPublicRawKey: (keyData, keyImportParams) => EcdhPublicKey.importRawKey(keyData, curveFromJson(keyImportParams)), @@ -36,26 +38,23 @@ final runner = TestRunner.asymmetric( exportPublicSpkiKey: (key) => key.exportSpkiKey(), importPublicJsonWebKey: (jsonWebKeyData, keyImportParams) => EcdhPublicKey.importJsonWebKey( - jsonWebKeyData, curveFromJson(keyImportParams)), + jsonWebKeyData, + curveFromJson(keyImportParams), + ), exportPublicJsonWebKey: (key) => key.exportJsonWebKey(), generateKeyPair: (generateKeyPairParams) async { // Use public / private keys from two different pairs, as if they had been // exchanged. - final a = await EcdhPrivateKey.generateKey(curveFromJson( - generateKeyPairParams, - )); - final b = await EcdhPrivateKey.generateKey(curveFromJson( - generateKeyPairParams, - )); - return ( - privateKey: a.privateKey, - publicKey: b.publicKey, + final a = await EcdhPrivateKey.generateKey( + curveFromJson(generateKeyPairParams), ); + final b = await EcdhPrivateKey.generateKey( + curveFromJson(generateKeyPairParams), + ); + return (privateKey: a.privateKey, publicKey: b.publicKey); }, - deriveBits: (keys, length, deriveParams) => keys.privateKey.deriveBits( - length, - keys.publicKey, - ), + deriveBits: (keys, length, deriveParams) => + keys.privateKey.deriveBits(length, keys.publicKey), testData: _testData, ); @@ -84,7 +83,7 @@ final _testData = [ "crv": "P-256", "x": "5dBlWvDtbF139jVeahif_f1avD1VgmbnswA2tRdFa9k", "y": "NoHwGx5khb6uGYSYsLYV8J3GP02YunTRKKVFObjQfGY", - "d": "3aTiZ7odKAODYk4BpZlzulBCB_BptmxjtvrzyXI71Uw" + "d": "3aTiZ7odKAODYk4BpZlzulBCB_BptmxjtvrzyXI71Uw", }, "publicRawKeyData": "BHiIXxrwhM92v4ueDrj3x1JJY4uS+II/IJPjqMvaKj/QfoOllnEkrnaOW1owBYRBMnP0pPouPkqbVfPACMUsfKs=", @@ -94,12 +93,12 @@ final _testData = [ "kty": "EC", "crv": "P-256", "x": "eIhfGvCEz3a_i54OuPfHUklji5L4gj8gk-Ooy9oqP9A", - "y": "foOllnEkrnaOW1owBYRBMnP0pPouPkqbVfPACMUsfKs" + "y": "foOllnEkrnaOW1owBYRBMnP0pPouPkqbVfPACMUsfKs", }, "derivedBits": "WA==", "derivedLength": 7, "importKeyParams": {"curve": "p-256"}, - "deriveParams": {} + "deriveParams": {}, }, { "name": "generated on chrome/linux at 2020-01-22T23:24:39", @@ -110,7 +109,7 @@ final _testData = [ "crv": "P-256", "x": "OiV_K76gFmgX-tn4gVnkUkOFZkhbW14gXjD5Vu5L3Zs", "y": "4JifmrKys6bBZAXujNiqSyBTaur9XGI4gMQD_SPAqKE", - "d": "5AWOpgxJFPrYFT35Cd9NzjY_42GMqXHjN2u7nr4vTxk" + "d": "5AWOpgxJFPrYFT35Cd9NzjY_42GMqXHjN2u7nr4vTxk", }, "publicRawKeyData": "BCjk7bfchTtYegPTteeUP+MrjJKfV7MqOZXFoS1GixVyRhk7MGC0Sc+2mdO1b3P1vR0F9l1pEk1hZfrbPdRs10U=", @@ -120,12 +119,12 @@ final _testData = [ "kty": "EC", "crv": "P-256", "x": "KOTtt9yFO1h6A9O155Q_4yuMkp9Xsyo5lcWhLUaLFXI", - "y": "Rhk7MGC0Sc-2mdO1b3P1vR0F9l1pEk1hZfrbPdRs10U" + "y": "Rhk7MGC0Sc-2mdO1b3P1vR0F9l1pEk1hZfrbPdRs10U", }, "derivedBits": "iZA=", "derivedLength": 15, "importKeyParams": {"curve": "p-256"}, - "deriveParams": {} + "deriveParams": {}, }, { "name": "generated on firefox/linux at 2020-01-26T19:36:54", @@ -134,7 +133,7 @@ final _testData = [ "crv": "P-256", "x": "CEFhbltPwubSZ7uvcAStaPsQiAzrd8Lg0ABAwSDLx2M", "y": "htguB5lc8x5uKJ_Uj8Mg_kXYLqdxYfFxYW0fWTpSP78", - "d": "r5YhnToYxcqOHKSr4E_IRMuGvOc0fF0NeEYmc1i6Yxw" + "d": "r5YhnToYxcqOHKSr4E_IRMuGvOc0fF0NeEYmc1i6Yxw", }, "publicRawKeyData": "BJlCZHJvjqvdpytyJR1Rv4tzlMWWTNw0zEAtDLiIHrZBvKXhSN5y1ZWWhDQFFkKz91MpeA2PMN9YrN9w4aAMTA0=", @@ -144,12 +143,12 @@ final _testData = [ "kty": "EC", "crv": "P-256", "x": "mUJkcm-Oq92nK3IlHVG_i3OUxZZM3DTMQC0MuIgetkE", - "y": "vKXhSN5y1ZWWhDQFFkKz91MpeA2PMN9YrN9w4aAMTA0" + "y": "vKXhSN5y1ZWWhDQFFkKz91MpeA2PMN9YrN9w4aAMTA0", }, "derivedBits": "sA==", "derivedLength": 6, "importKeyParams": {"curve": "p-256"}, - "deriveParams": {} + "deriveParams": {}, }, /// Safari and WebKit on Mac (with CommonCrypto) does not support P-521, see: @@ -172,7 +171,7 @@ final _testDataWithP521 = [ "y": "ASkJKvdnNs_Xyr-BDwjMIgAZeAEu9sD6BqiVIapK3JifgBsAx1cAvH2D3RQKy2og7bNK9OX8eH49z3wlJ7lgLNJK", "d": - "ATzquO9ebHl2ATKzE8baz-5JbbCHN2_QsnBnOsTQJse2lEMohZJLhVn-kXuQvQIMCcEEcZGNeH0ptkN1sDzOj6MW" + "ATzquO9ebHl2ATKzE8baz-5JbbCHN2_QsnBnOsTQJse2lEMohZJLhVn-kXuQvQIMCcEEcZGNeH0ptkN1sDzOj6MW", }, "publicRawKeyData": "BAFZiFCz9cHz/k9DZOb6wxZKqzpoemGisvlmkuVaB7J2Od1qp4MHyWCnXpws26TEqg/cSgZQMye2+Sih3qUFX/3AQgA7OiqrVeL4cTWsaej833S8EKyE2BOQe+nLPEvAvaJAufeH+IctMXhoL0aKw56uueyeBxxoIZRv4/TX+C/P//g2WA==", @@ -184,13 +183,13 @@ final _testDataWithP521 = [ "x": "AVmIULP1wfP-T0Nk5vrDFkqrOmh6YaKy-WaS5VoHsnY53WqngwfJYKdenCzbpMSqD9xKBlAzJ7b5KKHepQVf_cBC", "y": - "ADs6KqtV4vhxNaxp6PzfdLwQrITYE5B76cs8S8C9okC594f4hy0xeGgvRorDnq657J4HHGghlG_j9Nf4L8__-DZY" + "ADs6KqtV4vhxNaxp6PzfdLwQrITYE5B76cs8S8C9okC594f4hy0xeGgvRorDnq657J4HHGghlG_j9Nf4L8__-DZY", }, "derivedBits": "ANKd9Y53XFXIW2uHp4EcVnDmFKNoJ2fga+zYPkD4tl3lmvAl6ACO/KkS8JQ3YPnR9xvuyHXqkeNewCwvoKdzY946", "derivedLength": 528, "importKeyParams": {"curve": "p-521"}, - "deriveParams": {} + "deriveParams": {}, }, { "name": "P521/528 generated on chrome/linux at 2020-01-23T18:24:21", @@ -204,7 +203,7 @@ final _testDataWithP521 = [ "y": "ALM9YolcMab9RkqBFQGGXn8kGeUhNC3WLAohPlDr_jtp9lNJ_Gt2gFw8CIh3vdUmrt-f2InBFEwYDJiqoeYPrOVY", "d": - "AAbAwBg-V1lr84Z58wsrzQA9rWiyyAxc18B8e_P7j6_5DDUVOSje2RpBcqSUNFUR76lGnucQH7UAVSDcu1PvQG2i" + "AAbAwBg-V1lr84Z58wsrzQA9rWiyyAxc18B8e_P7j6_5DDUVOSje2RpBcqSUNFUR76lGnucQH7UAVSDcu1PvQG2i", }, "publicRawKeyData": "BAHFcqB1M8eMxMcy41W0vhqe/UHuoq6muZn+UR0JRVnJmtSAdESTaRu/wCSjun3K+cTOlKMKvRpBNn75zc4MTuJ/SwFdjjm3upV4aWYGKyUjHUEyb2aEAwXYgY2QtNTVs7+L5rJeFL5M0m16XqLkg4kWTSoVQpBt2WJZy30swHUlPuCPbw==", @@ -216,13 +215,13 @@ final _testDataWithP521 = [ "x": "AcVyoHUzx4zExzLjVbS-Gp79Qe6irqa5mf5RHQlFWcma1IB0RJNpG7_AJKO6fcr5xM6Uowq9GkE2fvnNzgxO4n9L", "y": - "AV2OObe6lXhpZgYrJSMdQTJvZoQDBdiBjZC01NWzv4vmsl4UvkzSbXpeouSDiRZNKhVCkG3ZYlnLfSzAdSU-4I9v" + "AV2OObe6lXhpZgYrJSMdQTJvZoQDBdiBjZC01NWzv4vmsl4UvkzSbXpeouSDiRZNKhVCkG3ZYlnLfSzAdSU-4I9v", }, "derivedBits": "ABa2Lr/ImF+AskXCqyO8fWQjh7YNoiynFMbAw6bmDZT/1hVNbAWIyKTjlgRc6YQvV/3alD3SlSCxlEc0BkGGUMiS", "derivedLength": 528, "importKeyParams": {"curve": "p-521"}, - "deriveParams": {} + "deriveParams": {}, }, { "name": "P521/528 generated firefox/linux at 2020-01-26T19:39:32", @@ -234,7 +233,7 @@ final _testDataWithP521 = [ "y": "ABgohNvlwwKqYzj8pFd5qYHmwk8uAvjRRTjOwWo5Y_rPnumGLlZwLm0QrFJ6-OnXKJcmSfSsFVRZx00k-ANH8hNK", "d": - "AU1zr6Fn9zQOp9PYHbOoVt56nDfPgU9hh5BBSPyJdpuNnK-WsyPJ66oBv_Oj7E9krila57wKl54Gj0vfTiR8pU-x" + "AU1zr6Fn9zQOp9PYHbOoVt56nDfPgU9hh5BBSPyJdpuNnK-WsyPJ66oBv_Oj7E9krila57wKl54Gj0vfTiR8pU-x", }, "publicRawKeyData": "BAHgS8NJglQ69SeU8yGU3QWbNyjyUG4ZvsJJIaYZGqSlbgqZZMLAc5upu9/bEyBL7rgn3wBWRB5IC+F1pM/lhNUpogCzRbB9MqvFCHQxjOtLROI2baiAVnvZ31AWYadWvLeqJdIdFdLgOveK1ORVkDIJT/m5rs1jW1KDc0SYLyGtAGWW1g==", @@ -246,12 +245,12 @@ final _testDataWithP521 = [ "x": "AeBLw0mCVDr1J5TzIZTdBZs3KPJQbhm-wkkhphkapKVuCplkwsBzm6m739sTIEvuuCffAFZEHkgL4XWkz-WE1Smi", "y": - "ALNFsH0yq8UIdDGM60tE4jZtqIBWe9nfUBZhp1a8t6ol0h0V0uA694rU5FWQMglP-bmuzWNbUoNzRJgvIa0AZZbW" + "ALNFsH0yq8UIdDGM60tE4jZtqIBWe9nfUBZhp1a8t6ol0h0V0uA694rU5FWQMglP-bmuzWNbUoNzRJgvIa0AZZbW", }, "derivedBits": "AT8SeVde9pfjq+ktYDRrVeYHQJM9c+gflBxlJqIKyJrMIWH5ZTm470ateBrlZr2uNI/lT7OfayxSz6WGkhEZUDXl", "derivedLength": 528, "importKeyParams": {"curve": "p-521"}, - "deriveParams": {} + "deriveParams": {}, }, ]; diff --git a/lib/src/testing/webcrypto/ecdsa.dart b/lib/src/testing/webcrypto/ecdsa.dart index fe9c1834..d543d6bc 100644 --- a/lib/src/testing/webcrypto/ecdsa.dart +++ b/lib/src/testing/webcrypto/ecdsa.dart @@ -25,7 +25,9 @@ final runner = TestRunner.asymmetric( exportPrivatePkcs8Key: (key) => key.exportPkcs8Key(), importPrivateJsonWebKey: (jsonWebKeyData, keyImportParams) => EcdsaPrivateKey.importJsonWebKey( - jsonWebKeyData, curveFromJson(keyImportParams)), + jsonWebKeyData, + curveFromJson(keyImportParams), + ), exportPrivateJsonWebKey: (key) => key.exportJsonWebKey(), importPublicRawKey: (keyData, keyImportParams) => EcdsaPublicKey.importRawKey(keyData, curveFromJson(keyImportParams)), @@ -35,11 +37,12 @@ final runner = TestRunner.asymmetric( exportPublicSpkiKey: (key) => key.exportSpkiKey(), importPublicJsonWebKey: (jsonWebKeyData, keyImportParams) => EcdsaPublicKey.importJsonWebKey( - jsonWebKeyData, curveFromJson(keyImportParams)), + jsonWebKeyData, + curveFromJson(keyImportParams), + ), exportPublicJsonWebKey: (key) => key.exportJsonWebKey(), - generateKeyPair: (generateKeyPairParams) => EcdsaPrivateKey.generateKey( - curveFromJson(generateKeyPairParams), - ), + generateKeyPair: (generateKeyPairParams) => + EcdsaPrivateKey.generateKey(curveFromJson(generateKeyPairParams)), signBytes: (key, data, signParams) => key.signBytes(data, hashFromJson(signParams)), signStream: (key, data, signParams) => @@ -74,7 +77,7 @@ final _testData = [ "plaintext": "dXNjaXBpdCBhdCB2ZWhpY3VsYQppZCwgdmVzdGlidWx1bSBuZWMgbmlzbC4gRHVpcyBlcmF0IG5pc2ksIHJob25jdQ==", "importKeyParams": {"curve": "p-256"}, - "signVerifyParams": {"hash": "sha-256"} + "signVerifyParams": {"hash": "sha-256"}, }, { "name": "generated on boringssl/linux at 2020-01-14T18:35:09", @@ -88,7 +91,7 @@ final _testData = [ "crv": "P-256", "x": "Ess8A1aT5EcSRQtQ4TzTpmza4mojvGSdGOyXMhXVIEI", "y": "tmoLqkvpBQmGT4obOV5NeXsV3JKZGjePbEWCVTEjA74", - "d": "0lrDqshZTukBhbY2YzW-Ao_SAshmHtYHDbDYh2KBJEY" + "d": "0lrDqshZTukBhbY2YzW-Ao_SAshmHtYHDbDYh2KBJEY", }, "publicRawKeyData": "BBLLPANWk+RHEkULUOE806Zs2uJqI7xknRjslzIV1SBCtmoLqkvpBQmGT4obOV5NeXsV3JKZGjePbEWCVTEjA74=", @@ -99,14 +102,14 @@ final _testData = [ "use": "sig", "crv": "P-256", "x": "Ess8A1aT5EcSRQtQ4TzTpmza4mojvGSdGOyXMhXVIEI", - "y": "tmoLqkvpBQmGT4obOV5NeXsV3JKZGjePbEWCVTEjA74" + "y": "tmoLqkvpBQmGT4obOV5NeXsV3JKZGjePbEWCVTEjA74", }, "plaintext": "IHBvc3VlcmUgbGFjdXMgdmVsCnZhcml1cy4gSW4gZWdldCBtZXR1cyBsaWJlcm8uIEluIGhhYyBoYWJpdGFzc2UgcGxh", "signature": "BJodpIHbPhlgp31lzMAjb85i/4n5WIa2697Ac/9zpwL+RG65QsiYBIopeuiYl1yIu3BB4mgRHVpEP+7qAWl65Q==", "importKeyParams": {"curve": "p-256"}, - "signVerifyParams": {"hash": "sha-256"} + "signVerifyParams": {"hash": "sha-256"}, }, { "name": "generated on chrome/linux at 2020-01-14T18:35:52", @@ -119,7 +122,7 @@ final _testData = [ "crv": "P-256", "x": "l6pzsz05FLXsFvUHrOC8Bh-BZbIQPN_48xAMFcd8ha8", "y": "MYy1Kv1B1ZkcgTtWrNzhODrLvCPeaXQ-2waI3KLZIF0", - "d": "nG_CKsDXeXSwGY10JcaO_nIjXJAVRUDKJqDE6JWssL0" + "d": "nG_CKsDXeXSwGY10JcaO_nIjXJAVRUDKJqDE6JWssL0", }, "publicRawKeyData": "BJeqc7M9ORS17Bb1B6zgvAYfgWWyEDzf+PMQDBXHfIWvMYy1Kv1B1ZkcgTtWrNzhODrLvCPeaXQ+2waI3KLZIF0=", @@ -129,14 +132,14 @@ final _testData = [ "kty": "EC", "crv": "P-256", "x": "l6pzsz05FLXsFvUHrOC8Bh-BZbIQPN_48xAMFcd8ha8", - "y": "MYy1Kv1B1ZkcgTtWrNzhODrLvCPeaXQ-2waI3KLZIF0" + "y": "MYy1Kv1B1ZkcgTtWrNzhODrLvCPeaXQ-2waI3KLZIF0", }, "plaintext": "ZGlnbmlzc2ltIHBoYXJldHJhLiBWaXZhbXVzIHB1bHZpbmFyIGxpYmVybyBvZGlvLiBQZWxsZW50ZXM=", "signature": "iwcez6+9FzkZXVHq+fwCP09i4NVnCdh7Cq5E5P0O1G40fgaewBvxIUHPiTdc4wjFCAOfR/OQ5zC+Y/SNzGnwLQ==", "importKeyParams": {"curve": "p-256"}, - "signVerifyParams": {"hash": "sha-256"} - } + "signVerifyParams": {"hash": "sha-256"}, + }, // TODO: generate on firefox, once the import/export pkcs8 has been figured out ]; diff --git a/lib/src/testing/webcrypto/hkdf.dart b/lib/src/testing/webcrypto/hkdf.dart index 56bbc8e6..425a4137 100644 --- a/lib/src/testing/webcrypto/hkdf.dart +++ b/lib/src/testing/webcrypto/hkdf.dart @@ -90,8 +90,8 @@ final _testData = [ "hash": "sha-256", "salt": "AAIEBggKDA4QEhQWGBocHiA=", "info": - "AAIEBggKDA4QEhQWGBocHiAiJCYoKiwuMDI0Njg6PD5AQkRGSEpMTlBSVFZYWlxeYGJkZmhqbG5wcnR2eHp8foCChIaIioyOkJKUlpianJ6goqSmqKqsrrCytLa4ury+wMLExsjKzM7Q0tTW2Nrc3uDi5Obo6uzu8PL09vj6/P4AAgQGCAoMDhASFBYYGhweICIkJigqLC4wMjQ2ODo8PkBCREZISkxOUFJUVlhaXF5gYmRmaGpsbnBydHZ4enx+gIKEhoiKjI6QkpSWmJqcnqCipKaoqqyusLK0tri6vL7AwsTGyMrMztDS1NbY2tze4OLk5ujq7O7w8vT2+Pr8/gACBAYICgwOEBIUFhgaHB4gIiQmKCosLjAyNDY4Ojw+QEJERkhKTE5QUlRWWFpcXmBiZGZoamxucHJ0dnh6fH6AgoSGiIqMjpCSlJaYmpyeoKKkpqiqrK6wsrS2uLq8vsDCxMbIyszO0NLU1tja3N7g4uTm6Ors7vDy9Pb4+vz+AAIEBggKDA4QEhQWGBocHiAiJCYoKiwuMDI0Njg6PD5AQkRGSEpMTlBSVFZYWlxeYGJkZmhqbG5wcnR2eHp8foCChIaIioyOkJKUlpianJ6goqSmqKqsrrCytLa4ury+wMLExsjKzM7Q0tTW2Nrc3uDi5Obo6uzu8PL09vj6/P4=" - } + "AAIEBggKDA4QEhQWGBocHiAiJCYoKiwuMDI0Njg6PD5AQkRGSEpMTlBSVFZYWlxeYGJkZmhqbG5wcnR2eHp8foCChIaIioyOkJKUlpianJ6goqSmqKqsrrCytLa4ury+wMLExsjKzM7Q0tTW2Nrc3uDi5Obo6uzu8PL09vj6/P4AAgQGCAoMDhASFBYYGhweICIkJigqLC4wMjQ2ODo8PkBCREZISkxOUFJUVlhaXF5gYmRmaGpsbnBydHZ4enx+gIKEhoiKjI6QkpSWmJqcnqCipKaoqqyusLK0tri6vL7AwsTGyMrMztDS1NbY2tze4OLk5ujq7O7w8vT2+Pr8/gACBAYICgwOEBIUFhgaHB4gIiQmKCosLjAyNDY4Ojw+QEJERkhKTE5QUlRWWFpcXmBiZGZoamxucHJ0dnh6fH6AgoSGiIqMjpCSlJaYmpyeoKKkpqiqrK6wsrS2uLq8vsDCxMbIyszO0NLU1tja3N7g4uTm6Ors7vDy9Pb4+vz+AAIEBggKDA4QEhQWGBocHiAiJCYoKiwuMDI0Njg6PD5AQkRGSEpMTlBSVFZYWlxeYGJkZmhqbG5wcnR2eHp8foCChIaIioyOkJKUlpianJ6goqSmqKqsrrCytLa4ury+wMLExsjKzM7Q0tTW2Nrc3uDi5Obo6uzu8PL09vj6/P4=", + }, }, { "name": "SHA-256/4096 generated on chrome/linux at 2020-01-26T20:39:16", @@ -105,8 +105,8 @@ final _testData = [ "hash": "sha-256", "salt": "AAIEBggKDA4QEhQWGBocHiA=", "info": - "AAIEBggKDA4QEhQWGBocHiAiJCYoKiwuMDI0Njg6PD5AQkRGSEpMTlBSVFZYWlxeYGJkZmhqbG5wcnR2eHp8foCChIaIioyOkJKUlpianJ6goqSmqKqsrrCytLa4ury+wMLExsjKzM7Q0tTW2Nrc3uDi5Obo6uzu8PL09vj6/P4AAgQGCAoMDhASFBYYGhweICIkJigqLC4wMjQ2ODo8PkBCREZISkxOUFJUVlhaXF5gYmRmaGpsbnBydHZ4enx+gIKEhoiKjI6QkpSWmJqcnqCipKaoqqyusLK0tri6vL7AwsTGyMrMztDS1NbY2tze4OLk5ujq7O7w8vT2+Pr8/gACBAYICgwOEBIUFhgaHB4gIiQmKCosLjAyNDY4Ojw+QEJERkhKTE5QUlRWWFpcXmBiZGZoamxucHJ0dnh6fH6AgoSGiIqMjpCSlJaYmpyeoKKkpqiqrK6wsrS2uLq8vsDCxMbIyszO0NLU1tja3N7g4uTm6Ors7vDy9Pb4+vz+AAIEBggKDA4QEhQWGBocHiAiJCYoKiwuMDI0Njg6PD5AQkRGSEpMTlBSVFZYWlxeYGJkZmhqbG5wcnR2eHp8foCChIaIioyOkJKUlpianJ6goqSmqKqsrrCytLa4ury+wMLExsjKzM7Q0tTW2Nrc3uDi5Obo6uzu8PL09vj6/P4=" - } + "AAIEBggKDA4QEhQWGBocHiAiJCYoKiwuMDI0Njg6PD5AQkRGSEpMTlBSVFZYWlxeYGJkZmhqbG5wcnR2eHp8foCChIaIioyOkJKUlpianJ6goqSmqKqsrrCytLa4ury+wMLExsjKzM7Q0tTW2Nrc3uDi5Obo6uzu8PL09vj6/P4AAgQGCAoMDhASFBYYGhweICIkJigqLC4wMjQ2ODo8PkBCREZISkxOUFJUVlhaXF5gYmRmaGpsbnBydHZ4enx+gIKEhoiKjI6QkpSWmJqcnqCipKaoqqyusLK0tri6vL7AwsTGyMrMztDS1NbY2tze4OLk5ujq7O7w8vT2+Pr8/gACBAYICgwOEBIUFhgaHB4gIiQmKCosLjAyNDY4Ojw+QEJERkhKTE5QUlRWWFpcXmBiZGZoamxucHJ0dnh6fH6AgoSGiIqMjpCSlJaYmpyeoKKkpqiqrK6wsrS2uLq8vsDCxMbIyszO0NLU1tja3N7g4uTm6Ors7vDy9Pb4+vz+AAIEBggKDA4QEhQWGBocHiAiJCYoKiwuMDI0Njg6PD5AQkRGSEpMTlBSVFZYWlxeYGJkZmhqbG5wcnR2eHp8foCChIaIioyOkJKUlpianJ6goqSmqKqsrrCytLa4ury+wMLExsjKzM7Q0tTW2Nrc3uDi5Obo6uzu8PL09vj6/P4=", + }, }, { "name": "SHA-256/4096 generated on firefox/linux at 2020-01-26T20:39:21", @@ -120,8 +120,8 @@ final _testData = [ "hash": "sha-256", "salt": "AAIEBggKDA4QEhQWGBocHiA=", "info": - "AAIEBggKDA4QEhQWGBocHiAiJCYoKiwuMDI0Njg6PD5AQkRGSEpMTlBSVFZYWlxeYGJkZmhqbG5wcnR2eHp8foCChIaIioyOkJKUlpianJ6goqSmqKqsrrCytLa4ury+wMLExsjKzM7Q0tTW2Nrc3uDi5Obo6uzu8PL09vj6/P4AAgQGCAoMDhASFBYYGhweICIkJigqLC4wMjQ2ODo8PkBCREZISkxOUFJUVlhaXF5gYmRmaGpsbnBydHZ4enx+gIKEhoiKjI6QkpSWmJqcnqCipKaoqqyusLK0tri6vL7AwsTGyMrMztDS1NbY2tze4OLk5ujq7O7w8vT2+Pr8/gACBAYICgwOEBIUFhgaHB4gIiQmKCosLjAyNDY4Ojw+QEJERkhKTE5QUlRWWFpcXmBiZGZoamxucHJ0dnh6fH6AgoSGiIqMjpCSlJaYmpyeoKKkpqiqrK6wsrS2uLq8vsDCxMbIyszO0NLU1tja3N7g4uTm6Ors7vDy9Pb4+vz+AAIEBggKDA4QEhQWGBocHiAiJCYoKiwuMDI0Njg6PD5AQkRGSEpMTlBSVFZYWlxeYGJkZmhqbG5wcnR2eHp8foCChIaIioyOkJKUlpianJ6goqSmqKqsrrCytLa4ury+wMLExsjKzM7Q0tTW2Nrc3uDi5Obo6uzu8PL09vj6/P4=" - } + "AAIEBggKDA4QEhQWGBocHiAiJCYoKiwuMDI0Njg6PD5AQkRGSEpMTlBSVFZYWlxeYGJkZmhqbG5wcnR2eHp8foCChIaIioyOkJKUlpianJ6goqSmqKqsrrCytLa4ury+wMLExsjKzM7Q0tTW2Nrc3uDi5Obo6uzu8PL09vj6/P4AAgQGCAoMDhASFBYYGhweICIkJigqLC4wMjQ2ODo8PkBCREZISkxOUFJUVlhaXF5gYmRmaGpsbnBydHZ4enx+gIKEhoiKjI6QkpSWmJqcnqCipKaoqqyusLK0tri6vL7AwsTGyMrMztDS1NbY2tze4OLk5ujq7O7w8vT2+Pr8/gACBAYICgwOEBIUFhgaHB4gIiQmKCosLjAyNDY4Ojw+QEJERkhKTE5QUlRWWFpcXmBiZGZoamxucHJ0dnh6fH6AgoSGiIqMjpCSlJaYmpyeoKKkpqiqrK6wsrS2uLq8vsDCxMbIyszO0NLU1tja3N7g4uTm6Ors7vDy9Pb4+vz+AAIEBggKDA4QEhQWGBocHiAiJCYoKiwuMDI0Njg6PD5AQkRGSEpMTlBSVFZYWlxeYGJkZmhqbG5wcnR2eHp8foCChIaIioyOkJKUlpianJ6goqSmqKqsrrCytLa4ury+wMLExsjKzM7Q0tTW2Nrc3uDi5Obo6uzu8PL09vj6/P4=", + }, }, { "name": "SHA-512/512 generated boringssl/linux at 2020-01-26T20:40:58", @@ -133,8 +133,8 @@ final _testData = [ "deriveParams": { "hash": "sha-512", "salt": "AAIEBggKDA4QEhQWGBocHiAiJCYoKiwuMDI0Njg6PD4=", - "info": "AAIEBggKDA4QEhQW" - } + "info": "AAIEBggKDA4QEhQW", + }, }, { "name": "SHA-512/512 generated chrome/linux at 2020-01-26T20:41:07", @@ -146,8 +146,8 @@ final _testData = [ "deriveParams": { "hash": "sha-512", "salt": "AAIEBggKDA4QEhQWGBocHiAiJCYoKiwuMDI0Njg6PD4=", - "info": "AAIEBggKDA4QEhQW" - } + "info": "AAIEBggKDA4QEhQW", + }, }, { "name": "SHA-512/512 generated firefox/linux at 2020-01-26T20:41:12", @@ -159,7 +159,7 @@ final _testData = [ "deriveParams": { "hash": "sha-512", "salt": "AAIEBggKDA4QEhQWGBocHiAiJCYoKiwuMDI0Njg6PD4=", - "info": "AAIEBggKDA4QEhQW" - } - } + "info": "AAIEBggKDA4QEhQW", + }, + }, ]; diff --git a/lib/src/testing/webcrypto/hmac.dart b/lib/src/testing/webcrypto/hmac.dart index d8a4ad04..d9417d3b 100644 --- a/lib/src/testing/webcrypto/hmac.dart +++ b/lib/src/testing/webcrypto/hmac.dart @@ -25,7 +25,9 @@ final runner = TestRunner.symmetric( exportPrivatePkcs8Key: null, importPrivateJsonWebKey: (jsonWebKeyData, keyImportParams) => HmacSecretKey.importJsonWebKey( - jsonWebKeyData, hashFromJson(keyImportParams)), + jsonWebKeyData, + hashFromJson(keyImportParams), + ), exportPrivateJsonWebKey: (key) => key.exportJsonWebKey(), generateKey: (generateKeyPairParams) => HmacSecretKey.generateKey( hashFromJson(generateKeyPairParams), @@ -63,12 +65,12 @@ final _testData = [ "kty": "oct", "use": "sig", "alg": "HS256", - "k": "hJOnqFnCbZUjWwItPd5l1YW9mWC5jjjYT6h5twHEUdU" + "k": "hJOnqFnCbZUjWwItPd5l1YW9mWC5jjjYT6h5twHEUdU", }, "plaintext": "YXRlYSBkaWM=", "signature": "XNHqkq5E4mJ5cbSoRGJI/Nop7pYeb9tAzajzXC0HB8U=", "importKeyParams": {"hash": "sha-256"}, - "signVerifyParams": {} + "signVerifyParams": {}, }, { "name": "HS256 generated on chrome/linux at 2020-01-17T17:22:15", @@ -78,13 +80,13 @@ final _testData = [ "kty": "oct", "alg": "HS256", "k": - "EAACHGiD_ybP-Q_-lcoSUcLmm1D64wN8OUVPhyKfsFMAC7QgcyFAWm8QIyyKsCKzHf_FJMNYtW1WZXAejpoN5g" + "EAACHGiD_ybP-Q_-lcoSUcLmm1D64wN8OUVPhyKfsFMAC7QgcyFAWm8QIyyKsCKzHf_FJMNYtW1WZXAejpoN5g", }, "plaintext": "IGJsYW5kaXQgZWdldCwgcG9ydHRpdG9yIGEgb2Rpby4KQWxpcXVhbSBtYXR0aXMgZ3JhdmlkYSB2aXZlcnJhLiBQZWxsZW50ZXNxdWUgdQ==", "signature": "AusmDrNk4hWUNpyIgVVNJ/fGKKwipprpa0t9JnuOBMQ=", "importKeyParams": {"hash": "sha-256"}, - "signVerifyParams": {} + "signVerifyParams": {}, }, { "name": "HS256 generated on firefox/linux at 2020-01-17T17:22:22", @@ -94,13 +96,13 @@ final _testData = [ "kty": "oct", "alg": "HS256", "k": - "wcdaqRxznwwshJa-JX9yWIWQfzk72zX-hAX3-dGg61flkEGxf4-QAYbPJ_kXQ3I_AHFmciS1ET2IYDefx90BPw" + "wcdaqRxznwwshJa-JX9yWIWQfzk72zX-hAX3-dGg61flkEGxf4-QAYbPJ_kXQ3I_AHFmciS1ET2IYDefx90BPw", }, "plaintext": "dWxhLApxdWlzIHBvcnRhIGFyY3Ugc2NlbGVyaXNxdWUuIFNlZCBmZWxpcyBkb2xvciwgdWx0cmljaWVzIGV1IGR1aSBhdCwg", "signature": "xnRlZ0cGFck6p30kMt3c4Z1GnKA+Ek99wK9nS8xRmmk=", "importKeyParams": {"hash": "sha-256"}, - "signVerifyParams": {} + "signVerifyParams": {}, }, { "name": "HS384/512 generated on boringssl/linux at 2020-01-17T17:27:08", @@ -111,14 +113,14 @@ final _testData = [ "use": "sig", "alg": "HS384", "k": - "M5FlV0ooh9jtDA-ULhcnRpcbbhrhPTqoPPJMMpIvkpTZAetpJ2nbseRmyDLiuiS4Ea79zF8DJkAcnYrI_2ouDA" + "M5FlV0ooh9jtDA-ULhcnRpcbbhrhPTqoPPJMMpIvkpTZAetpJ2nbseRmyDLiuiS4Ea79zF8DJkAcnYrI_2ouDA", }, "plaintext": "dCBuaXNsLiBQcmFlc2VudCBlbmltIG1hZ25hLApyaG9uY3VzIHF1aXMgY29uZGltZW50dW0gYWMs", "signature": "Dc6Jiw5A+92IB4RAJh96Y9acoyZgrx75FmFa2Ye3+h+DihU+qiUyTXiuTOrSi53g", "importKeyParams": {"hash": "sha-384", "length": 512}, - "signVerifyParams": {} + "signVerifyParams": {}, }, { "name": "HS384/512 generated on chrome/linux at 2020-01-17T17:27:15", @@ -128,13 +130,13 @@ final _testData = [ "kty": "oct", "alg": "HS384", "k": - "pBLSDxNWRIpFxODNstC-Cd-n-e0ABp38wwbALA5o-wJ-r5mgIrLChbKoWmt3zVMWEjDR_qBaHsTuG7kVmnOW9w" + "pBLSDxNWRIpFxODNstC-Cd-n-e0ABp38wwbALA5o-wJ-r5mgIrLChbKoWmt3zVMWEjDR_qBaHsTuG7kVmnOW9w", }, "plaintext": "aXQgcXVpcy4gQ3U=", "signature": "CZCQz8y18FtWhyzxofYSk47cV/KJjFESt4dR+luhPrMop5cW7QmJTreRLFM4RTKy", "importKeyParams": {"hash": "sha-384", "length": 512}, - "signVerifyParams": {} + "signVerifyParams": {}, }, { "name": "HS384/512 generated on firefox/linux at 2020-01-17T17:27:21", @@ -144,13 +146,13 @@ final _testData = [ "kty": "oct", "alg": "HS384", "k": - "xJAxNE2TmomHP-xMSi2hEAHjTPTPNKBACiepH3ijfglWbIVFP3wckj7bQ7QSXvCklewu6ao3HeNUu_kVvdDnJg" + "xJAxNE2TmomHP-xMSi2hEAHjTPTPNKBACiepH3ijfglWbIVFP3wckj7bQ7QSXvCklewu6ao3HeNUu_kVvdDnJg", }, "plaintext": "YyBsYW9yZWV0LCBsZQ==", "signature": "bhnHVnnqoe1L9T7zHImrjDH4B4YVz+Qrvdfxw1eutajcDu2Plhr49B9GXNArXoS8", "importKeyParams": {"hash": "sha-384", "length": 512}, - "signVerifyParams": {} + "signVerifyParams": {}, }, { "name": "HS512/37 generated on boringssl/linux at 2020-01-17T17:23:41", @@ -159,14 +161,14 @@ final _testData = [ "kty": "oct", "use": "sig", "alg": "HS512", - "k": "kuk_KhA" + "k": "kuk_KhA", }, "plaintext": "bmEgaWQgbGliZXJvIGV1aXNtb2QKYWxpcXVldC4gTW9yYmkgYWNjdW1zYW4gZ3JhdmlkYSBkb2xvciwgbmVjIGVnZXN0YXMg", "signature": "LGncsixAXwdUxThwRwpMUobfBNI8dJvZ78DyRTwu3OrzzcwkA5PNgI1zGNWNTs5X2sxX960uY6bDIYjDlu0bGw==", "importKeyParams": {"hash": "sha-512", "length": 37}, - "signVerifyParams": {} + "signVerifyParams": {}, }, { "name": "HS512/37 generated chrome/linux at 2020-01-17T17:23:49", @@ -176,7 +178,7 @@ final _testData = [ "signature": "ePa3V+068UE7exuKxgeoa/weVTKGnnYPkn2B6NDj23QGaoxYP2wuwoZW9rkCMtJ796pL9Xpa0YLlBYiMukrHCg==", "importKeyParams": {"hash": "sha-512", "length": 37}, - "signVerifyParams": {} + "signVerifyParams": {}, }, { "name": "HS512/37 generated on firefox/linux at 2020-01-17T17:23:56", @@ -186,6 +188,6 @@ final _testData = [ "signature": "WKl+Xj11ugyC0HGD4458P7vVEAllEyftMPnywgwZwwubW66a3sS+nsCgEBWI163m/ZZ9sUPR8QA0yVEhkVUrwQ==", "importKeyParams": {"hash": "sha-512", "length": 37}, - "signVerifyParams": {} + "signVerifyParams": {}, }, ]; diff --git a/lib/src/testing/webcrypto/pbkdf2.dart b/lib/src/testing/webcrypto/pbkdf2.dart index b5a9e9f0..7e5ca254 100644 --- a/lib/src/testing/webcrypto/pbkdf2.dart +++ b/lib/src/testing/webcrypto/pbkdf2.dart @@ -65,7 +65,7 @@ void main() async { deriveParams: { 'hash': hashToJson(Hash.sha256), 'salt': bytesToJson(List.generate(42, (i) => (i + i) % 256)), - 'iterations': 2000 + 'iterations': 2000, }, minDeriveLength: 256, maxDeriveLength: 256, @@ -90,8 +90,8 @@ final _testData = [ "deriveParams": { "hash": "sha-384", "salt": "AAIEBggKDA4QEhQWGBocHiA=", - "iterations": 2 - } + "iterations": 2, + }, }, { "name": "SHA-384/2/512 generated on chrome/linux at 2020-01-26T20:46:17", @@ -103,8 +103,8 @@ final _testData = [ "deriveParams": { "hash": "sha-384", "salt": "AAIEBggKDA4QEhQWGBocHiA=", - "iterations": 2 - } + "iterations": 2, + }, }, { "name": "SHA-384/2/512 generated on firefox/linux at 2020-01-26T20:46:22", @@ -116,8 +116,8 @@ final _testData = [ "deriveParams": { "hash": "sha-384", "salt": "AAIEBggKDA4QEhQWGBocHiA=", - "iterations": 2 - } + "iterations": 2, + }, }, { "name": @@ -131,8 +131,8 @@ final _testData = [ "hash": "sha-256", "salt": "AAIEBggKDA4QEhQWGBocHiAiJCYoKiwuMDI0Njg6PD5AQkRGSEpMTlBSVFZYWlxeYGJkZmhqbG5wcnR2eHp8foCChA==", - "iterations": 200 - } + "iterations": 200, + }, }, { "name": "SHA-256/200/2048 generated on chrome/linux at 2020-01-26T20:51:28", @@ -145,8 +145,8 @@ final _testData = [ "hash": "sha-256", "salt": "AAIEBggKDA4QEhQWGBocHiAiJCYoKiwuMDI0Njg6PD5AQkRGSEpMTlBSVFZYWlxeYGJkZmhqbG5wcnR2eHp8foCChA==", - "iterations": 200 - } + "iterations": 200, + }, }, { "name": @@ -160,8 +160,8 @@ final _testData = [ "hash": "sha-256", "salt": "AAIEBggKDA4QEhQWGBocHiAiJCYoKiwuMDI0Njg6PD5AQkRGSEpMTlBSVFZYWlxeYGJkZmhqbG5wcnR2eHp8foCChA==", - "iterations": 200 - } + "iterations": 200, + }, }, { "name": @@ -174,8 +174,8 @@ final _testData = [ "deriveParams": { "hash": "sha-256", "salt": "AAIEBggKDA4QEhQWGBocHiAiJCYoKiwuMDI0Njg6PD5AQkRGSEpMTlBS", - "iterations": 2000 - } + "iterations": 2000, + }, }, { "name": "SHA-256/2000/256 generated on chrome/linux at 2020-01-26T20:53:37", @@ -187,8 +187,8 @@ final _testData = [ "deriveParams": { "hash": "sha-256", "salt": "AAIEBggKDA4QEhQWGBocHiAiJCYoKiwuMDI0Njg6PD5AQkRGSEpMTlBS", - "iterations": 2000 - } + "iterations": 2000, + }, }, { "name": @@ -201,7 +201,7 @@ final _testData = [ "deriveParams": { "hash": "sha-256", "salt": "AAIEBggKDA4QEhQWGBocHiAiJCYoKiwuMDI0Njg6PD5AQkRGSEpMTlBS", - "iterations": 2000 - } + "iterations": 2000, + }, }, ]; diff --git a/lib/src/testing/webcrypto/random.dart b/lib/src/testing/webcrypto/random.dart index c1e22a8e..1aed150b 100644 --- a/lib/src/testing/webcrypto/random.dart +++ b/lib/src/testing/webcrypto/random.dart @@ -29,10 +29,8 @@ void main() => tests().runTests(); /// Tests, exported for use in `../run_all_tests.dart`. List<({String name, Future Function() test})> tests() { final tests = <({String name, Future Function() test})>[]; - void test(String name, Future Function() test) => tests.add(( - name: name, - test: test, - )); + void test(String name, Future Function() test) => + tests.add((name: name, test: test)); test('fillRandomBytes: Uint8List', () async { final data = Uint8List(16 * 1024); diff --git a/lib/src/testing/webcrypto/rsaoaep.dart b/lib/src/testing/webcrypto/rsaoaep.dart index d7692231..22e03f13 100644 --- a/lib/src/testing/webcrypto/rsaoaep.dart +++ b/lib/src/testing/webcrypto/rsaoaep.dart @@ -25,7 +25,9 @@ final runner = TestRunner.asymmetric( exportPrivatePkcs8Key: (key) => key.exportPkcs8Key(), importPrivateJsonWebKey: (jsonWebKeyData, keyImportParams) => RsaOaepPrivateKey.importJsonWebKey( - jsonWebKeyData, hashFromJson(keyImportParams)), + jsonWebKeyData, + hashFromJson(keyImportParams), + ), exportPrivateJsonWebKey: (key) => key.exportJsonWebKey(), importPublicRawKey: null, // not supported exportPublicRawKey: null, @@ -34,21 +36,19 @@ final runner = TestRunner.asymmetric( exportPublicSpkiKey: (key) => key.exportSpkiKey(), importPublicJsonWebKey: (jsonWebKeyData, keyImportParams) => RsaOaepPublicKey.importJsonWebKey( - jsonWebKeyData, hashFromJson(keyImportParams)), + jsonWebKeyData, + hashFromJson(keyImportParams), + ), exportPublicJsonWebKey: (key) => key.exportJsonWebKey(), generateKeyPair: (generateKeyPairParams) => RsaOaepPrivateKey.generateKey( generateKeyPairParams['modulusLength'], BigInt.parse(generateKeyPairParams['publicExponent']), hashFromJson(generateKeyPairParams), ), - encryptBytes: (key, data, encryptParams) => key.encryptBytes( - data, - label: bytesFromJson(encryptParams, 'label'), - ), - decryptBytes: (key, data, decryptParams) => key.decryptBytes( - data, - label: bytesFromJson(decryptParams, 'label'), - ), + encryptBytes: (key, data, encryptParams) => + key.encryptBytes(data, label: bytesFromJson(encryptParams, 'label')), + decryptBytes: (key, data, decryptParams) => + key.decryptBytes(data, label: bytesFromJson(decryptParams, 'label')), testData: _testData, ); @@ -62,61 +62,61 @@ final _testData = [ "generateKeyParams": { "hash": "sha-256", "modulusLength": 2048, - "publicExponent": "65537" + "publicExponent": "65537", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "importKeyParams": {"hash": "sha-256"}, - "encryptDecryptParams": {"label": null} + "encryptDecryptParams": {"label": null}, }, { "name": "2048/e65537/sha-256/label", "generateKeyParams": { "hash": "sha-256", "modulusLength": 2048, - "publicExponent": "65537" + "publicExponent": "65537", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "importKeyParams": {"hash": "sha-256"}, "encryptDecryptParams": { - "label": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=" - } + "label": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=", + }, }, { "name": "4096/e3/sha-384", "generateKeyParams": { "hash": "sha-384", "modulusLength": 4096, - "publicExponent": "3" + "publicExponent": "3", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "importKeyParams": {"hash": "sha-384"}, "encryptDecryptParams": { - "label": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=" - } + "label": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=", + }, }, { "name": "2048/e3/sha-512/no-label", "generateKeyParams": { "hash": "sha-512", "modulusLength": 2048, - "publicExponent": "3" + "publicExponent": "3", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "importKeyParams": {"hash": "sha-512"}, - "encryptDecryptParams": {"label": null} + "encryptDecryptParams": {"label": null}, }, { "name": "2048/e3/sha-512/label", "generateKeyParams": { "hash": "sha-512", "modulusLength": 2048, - "publicExponent": "3" + "publicExponent": "3", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "importKeyParams": {"hash": "sha-512"}, "encryptDecryptParams": { - "label": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=" - } + "label": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=", + }, }, ..._generatedTestData, ]; @@ -144,7 +144,7 @@ final _generatedTestData = [ "dq": "oupPSllEw9gXUeduvT_ON-GK_brL-SHATyo1pcyNIAqEMiJ6X-nkmsCUH_KTqrH1FLwRdrc5wmDMryXMO9iUmHAF6qgZDKVIb2BxTM-_C99NZNsL_i8q82d9H74ds7cbn0O9eSuUSFovShSj18Q9ED414rVmFqwOGIFaU4EyFW8", "qi": - "lybRsni48pnze6zrqoohs4OqJQ4TtbC-b15h52twzkq34n7PCYOmSIG2_KF9QOD9XDMKLEIFx1iM1_urjwD9RqtYfmXUcFIUzYgmYMGlG3zDSgrb5eWfz7alsXa_tVSYg1oo0X584AICxYA32cIPlXzgKXQix_zQW0qZhZo_zrU" + "lybRsni48pnze6zrqoohs4OqJQ4TtbC-b15h52twzkq34n7PCYOmSIG2_KF9QOD9XDMKLEIFx1iM1_urjwD9RqtYfmXUcFIUzYgmYMGlG3zDSgrb5eWfz7alsXa_tVSYg1oo0X584AICxYA32cIPlXzgKXQix_zQW0qZhZo_zrU", }, "publicSpkiKeyData": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwQ+t9I+uNg9kLQ6NE/xeIPpld0BS11nPdRj2cESzmiIZhSmE4C17ctQ4ji/iY1FWJXCqAsekLlcls03wBaCCFlBq5yvd181BD7/tUvKLT4CXcHoZl0RB3J9PzswfeKFRINlJDoC13flkfeFXFjOLMGBF0E+wxOrmCwpbJO0RW+tZ3Lz/Q2SQOzU8uanXdXf1qRXbpd1GV22gv19qnixMvMvKHVbTOLst9mqgt+WjIJNb3aO1Lhb9yjz/0FbnjvkvaN72eKBnUZJzMg3cynyujdBP8Qt0slGOiSk9CuGyAq6ZC6owlk1sWTXOe65tXkB++g454PHwKRXSloxYUwhUDwIDAQAB", @@ -154,13 +154,13 @@ final _generatedTestData = [ "alg": "RSA-OAEP-256", "n": "wQ-t9I-uNg9kLQ6NE_xeIPpld0BS11nPdRj2cESzmiIZhSmE4C17ctQ4ji_iY1FWJXCqAsekLlcls03wBaCCFlBq5yvd181BD7_tUvKLT4CXcHoZl0RB3J9PzswfeKFRINlJDoC13flkfeFXFjOLMGBF0E-wxOrmCwpbJO0RW-tZ3Lz_Q2SQOzU8uanXdXf1qRXbpd1GV22gv19qnixMvMvKHVbTOLst9mqgt-WjIJNb3aO1Lhb9yjz_0FbnjvkvaN72eKBnUZJzMg3cynyujdBP8Qt0slGOiSk9CuGyAq6ZC6owlk1sWTXOe65tXkB--g454PHwKRXSloxYUwhUDw", - "e": "AQAB" + "e": "AQAB", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "ciphertext": "wGY2OfvDARg9bnuivkCyg11IbLD1Ts7d4kdqsR8foKYFNpg8VfMlda8JE4pgoJF97nYtO/Q+UawlKyqY5ROKy/n9cVui0GRhint6QSIhB6b4eAEasBPu65YVYXXy1/+toWiNpw3tXCmzyPDHGFRq0qo7ewZSV4XFgp6xqXEqcK9vd+/RsNjl6qXPAGaMeUx4RzTEa3AIlbmur3er/z6ADnh0hEL2nTkW5vKYkg6ChBIaRdtJsSOh5grvImTLpS0mDQjclBzIrPmtVNqD+pKYdkaZ6QfVp15yr+Imwd2W+wTmFslfnBhIz3LL7PI1THEFG3TbfpOCq2bbGos0H/crYA==", "importKeyParams": {"hash": "sha-256"}, - "encryptDecryptParams": {"label": null} + "encryptDecryptParams": {"label": null}, }, { "name": "2048/e65537/sha-256/label generated on linux at 2020-09-24", @@ -184,7 +184,7 @@ final _generatedTestData = [ "dq": "pYfrtzNSWjIuMCOLUcCiD22EIshRoRhi1G7dOzaUaT8GYHAjzSJvnDDwg7gjhGjtzJfNh4vw7_HEXsH_kFp2cFdSj-Sabx_oivh11tMkpUraJOqcHatuHTUWqASU14Q1OFu8UJ59XnXL_z9aRWZRmn-OJC9bPpv3FBtrKQsAUVk", "qi": - "jb2t-2YgyVrBZJf8H2feQS6Tnt9CletqgdnZnUOKQ6RrxeMAYhkYyLA5aFEPXs511M5YW-f2KOBLQsWC75bYtm3o-J6taqjabtduGjLpIBgcNgsCpIh1aPeNDopaHS78jwVWOHtQ-H0seKQnvcNzLiZi21rEoUsEvzaIPOt_I4w" + "jb2t-2YgyVrBZJf8H2feQS6Tnt9CletqgdnZnUOKQ6RrxeMAYhkYyLA5aFEPXs511M5YW-f2KOBLQsWC75bYtm3o-J6taqjabtduGjLpIBgcNgsCpIh1aPeNDopaHS78jwVWOHtQ-H0seKQnvcNzLiZi21rEoUsEvzaIPOt_I4w", }, "publicSpkiKeyData": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzUHA5zNLalZAHoDwHnZnz0LHmVX9na++5C/L1HEfcQH3rtyKtOCZhs7K9iKWW3fy8tW1CnFJkDmQH5VLcumsK56hFRP2OCbiA3mIOALdD9Fy+FEuv7CD7Rks1k5eaynhFtatQ3W5sOSnstGEkguvkRKj8m69ipc/2z5MuK224VgqzOQU3+GXvLiromj0IY+BRkH9Hej9SKRJ1hWbznCs5AssP1NNHw762P4sflCs/ffeW0qCsXTqsbbPTmIUtCHvxgpaWQ6ahcUiYcilosgAJINtnInRtl3x1GG2WG02Z3iKcJlu6GyXQHfBMdaE329Bl7CHj+esqYKg2l+wR5Y+vQIDAQAB", @@ -194,15 +194,15 @@ final _generatedTestData = [ "alg": "RSA-OAEP-256", "n": "zUHA5zNLalZAHoDwHnZnz0LHmVX9na--5C_L1HEfcQH3rtyKtOCZhs7K9iKWW3fy8tW1CnFJkDmQH5VLcumsK56hFRP2OCbiA3mIOALdD9Fy-FEuv7CD7Rks1k5eaynhFtatQ3W5sOSnstGEkguvkRKj8m69ipc_2z5MuK224VgqzOQU3-GXvLiromj0IY-BRkH9Hej9SKRJ1hWbznCs5AssP1NNHw762P4sflCs_ffeW0qCsXTqsbbPTmIUtCHvxgpaWQ6ahcUiYcilosgAJINtnInRtl3x1GG2WG02Z3iKcJlu6GyXQHfBMdaE329Bl7CHj-esqYKg2l-wR5Y-vQ", - "e": "AQAB" + "e": "AQAB", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "ciphertext": "xQtp0ZJoM9XSkghgvdiSDC4YbiiQ/YMOqjtw13TVkYGJzQF9yU2x/oRyYHEGRc1twccJpha9oEZAj/27SqiKy+r739CeahuLDH7RtwFwXOs3gK4VCgDTH3hKmd3IKOmUymW4+q8vhy86Hwuhpakqh4BlSiChDAKuDe7kVQU+Pv/Amy9cDuZWyvp1QQlVMXqrSi0RP0ZetFhjerxQ1ooROlJXUXY1BOz3MFCC6ygJ64w1jkG+kj1O+aeaAOvdkygnTaJ1kVkv9dOhzi8GF3GucCI3jZlnGk/kMtawlHjGl06HGERXZjjrK5Flf2nslccLbyQnlIigbkiVBDnaAqrRGQ==", "importKeyParams": {"hash": "sha-256"}, "encryptDecryptParams": { - "label": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=" - } + "label": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=", + }, }, { "name": "4096/e3/sha-384 generated on linux at 2020-09-24", @@ -226,7 +226,7 @@ final _generatedTestData = [ "dq": "fG_ib4DWXaj08ApZ_OUUsdswS4v96BgSMq1BkQOr_Jp0J4r-3sP4pn4700CP8gjqh7spu0kni7DmZVjsEiI9Bq-yL4n9u2qchmliTSwmqvlBo__2te9fQLiStD7xmb0h1-SYHFKtlX8QR77yLsCpqmUmMymXOM5jRT1I5Orlu4_N1Vbz3PumJ4VtBMM8YVhRuvS4NGjEMxKAuiBnJfw8zkLycfbN-UqHepu9YaLVMsRK-_bUAMAbJY_XcjlDuVgLTWBUS7d7n0yo6nWgsNLAcmaV1Lbny_ojg9NuU0UneyAqMyjz9XWSFrFymjyxRzqAdavjjPBWX72SHX40dX6r5w", "qi": - "21vZlmkY_qrHaNIsEOXKn97uCP8tUMZIuJhlj-ZdjhFiA7fIL0wF6mx8HfmUCbzgfAAv9F_DRel0b63Xh82T-nQnDQBZnRdo9V5xTLRfyS5hgCMMOH3YwrHrWvoMrDqAsV3ZYkym1SypymAfFWIpom89L8SO-3lc8q9GVviRqPj2zBbtSXxwNlDG9xzXroXdcj0kFbETlaKkk2pgNmqmlRx9r-jplwxzr7JmiFUFFQqQKDLB1Rggpt1G0Qygl57sWzfOKJ0wFCoUZn3D5ZKoOomUC7yGomz_PNA97PEtWv6ZduXLsnPDptTcxyLExYO4-tGp1MY8A8vugq0soOze3Q" + "21vZlmkY_qrHaNIsEOXKn97uCP8tUMZIuJhlj-ZdjhFiA7fIL0wF6mx8HfmUCbzgfAAv9F_DRel0b63Xh82T-nQnDQBZnRdo9V5xTLRfyS5hgCMMOH3YwrHrWvoMrDqAsV3ZYkym1SypymAfFWIpom89L8SO-3lc8q9GVviRqPj2zBbtSXxwNlDG9xzXroXdcj0kFbETlaKkk2pgNmqmlRx9r-jplwxzr7JmiFUFFQqQKDLB1Rggpt1G0Qygl57sWzfOKJ0wFCoUZn3D5ZKoOomUC7yGomz_PNA97PEtWv6ZduXLsnPDptTcxyLExYO4-tGp1MY8A8vugq0soOze3Q", }, "publicSpkiKeyData": "MIICIDANBgkqhkiG9w0BAQEFAAOCAg0AMIICCAKCAgEAtq73lHLasLVeq3auGNsooxCOo8x4QH8GnwyJXFtV3KsWq3HcjWsK5Wa3HS5JVJsd2XHbbPEAp4SEwjGTgGqLK5PevijHp0trE+g3kOzMPk/YnWqj0h4TI9IlMOX/zKo2/2ThWIGUqHvJgTNefORYe2kkNKgHYCahN+8f5kDOqLgCwTvgM72sJOYCiNLoJc5H9/MTeXfuQn/7NCdjxOcNc2GTB/hHZL9wAeSqF6l5fyNAr41sGSdb8zo6hCq+H3cOUOwk2WHlht6VfBUNi9Qnvvj3nVVHbSM8z/+nNBwYcJNE1LQQfdFhmMrHIsmzo7S9NI2Fp7oxwNugOY2qXbDroSL+HIZQ2F6rI3kiG23hyVEzfs0MyZtnICr/ElLZe+c7W2SBovm1ogXbqE7X4HlpsZXUXGgMlWD4yydexZfJqqa1zemWKmV3p6fkzKyJbjwjidPOP9HaxizkiyL4RMpbqmsA19EYyDPR49TX/b76+/sXHhGBuToMrZSjIh5TiDY5OoOutkgk/s3v0or04pOtbI14EfYkIbCuhH/Rw9TF6r1NlxlCevzzuEQV6EumevrKr0fRqUITngJsISEhR71AZnW+Y2h3PcRseAp1nyAI+L4Wj2IYz5dOJw5ZNKs+r8b8CcwLtFsLGKEFe6fgjKNH4okgbhDVpeFuOel+aJMKiK0CAQM=", @@ -236,15 +236,15 @@ final _generatedTestData = [ "alg": "RSA-OAEP-384", "n": "tq73lHLasLVeq3auGNsooxCOo8x4QH8GnwyJXFtV3KsWq3HcjWsK5Wa3HS5JVJsd2XHbbPEAp4SEwjGTgGqLK5PevijHp0trE-g3kOzMPk_YnWqj0h4TI9IlMOX_zKo2_2ThWIGUqHvJgTNefORYe2kkNKgHYCahN-8f5kDOqLgCwTvgM72sJOYCiNLoJc5H9_MTeXfuQn_7NCdjxOcNc2GTB_hHZL9wAeSqF6l5fyNAr41sGSdb8zo6hCq-H3cOUOwk2WHlht6VfBUNi9Qnvvj3nVVHbSM8z_-nNBwYcJNE1LQQfdFhmMrHIsmzo7S9NI2Fp7oxwNugOY2qXbDroSL-HIZQ2F6rI3kiG23hyVEzfs0MyZtnICr_ElLZe-c7W2SBovm1ogXbqE7X4HlpsZXUXGgMlWD4yydexZfJqqa1zemWKmV3p6fkzKyJbjwjidPOP9HaxizkiyL4RMpbqmsA19EYyDPR49TX_b76-_sXHhGBuToMrZSjIh5TiDY5OoOutkgk_s3v0or04pOtbI14EfYkIbCuhH_Rw9TF6r1NlxlCevzzuEQV6EumevrKr0fRqUITngJsISEhR71AZnW-Y2h3PcRseAp1nyAI-L4Wj2IYz5dOJw5ZNKs-r8b8CcwLtFsLGKEFe6fgjKNH4okgbhDVpeFuOel-aJMKiK0", - "e": "Aw" + "e": "Aw", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "ciphertext": "U5aDmxBpl9e0AVSwlCv0/9jSFIeTsUamohC41RB5CPpg/DIWJs7pPmXQN9+CuouTeqbg6IfC+1fixuzfkyPzJYlJNqUkFnIcpPGIu6TwrFgVi0cw/8+icRxluyuAl2W7U1lSnpc1xAcL8Df/TESnA83uCrUJ8kusTE2yAcEhqKpDxRVsBV8jh6Tvpufgpl0onxTqKc4uO5LpLwbLUP0KXWqF3G8hOKANatFf8FYS1f3zyxsSvrco1o7wqxOQGyVQrlJk/d8BwBz6ch7VKXltbo2N+/q8N7lQhPPSaK25ej0cY7wmiTKPf1WVngCRAHGh6wdwcskekAD52VikpdW/2qs8i2JJzid4jTn8LKM/KnJ2Is8NMAU4GhLLMEcyWG66aQWqz0cAcU8Ts8VSkxi2j/9aKt14jo0n30MjSDHNu333qAKlat+k6U8zAZq9EWddxsmsj2Qw4tBsQRZI3WGKpWE3bhTxvVRqicGDzSvaA8Cv0rBvczpXKwWyaWyNJFCfyPOcjKNw6lM5pUQipwkb4K90mwl5ydVUsrtqHKv5kf+ooH+aXPXx8eyFbZOs/1wZ/1yGrX6ArvbwanNQGkuA/sk3P4l9RpaKK3IQU+f4JDGKfP2EQVY+HE8ZNhZAJfiR85mmm8HtiJN9Bmpg81F0X4UVuzR4MD0egC8r9t5TvB4=", "importKeyParams": {"hash": "sha-384"}, "encryptDecryptParams": { - "label": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=" - } + "label": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=", + }, }, { "name": "2048/e3/sha-512/no-label generated on linux at 2020-09-24", @@ -268,7 +268,7 @@ final _generatedTestData = [ "dq": "jVRI6hkq-eGDtYx0iWQ_5CED00XilAX5656wWq5NmhiLV2yXBCKeuq8WU-YrYVyOIudI8LdIfUrKu7N4lv0LztLJZWku7_RhEOIjs5OVf41ZIz_quFj9J9KyTei_38zKT1mM_SVsXCD2ZKjDrIpdkD0T7ekz8J2-5zaCnEG-Tmc", "qi": - "KxylPiWnMD7pQQ_S1vjIOCxd3XAf_0aioLJu1uvCPz5GhOTrAyyXqFyBK4o87_C8dIiXqh92IZUoWNJWivTx4-hVoPV0evvTTLJR1Z3A6hZ1Zz2a3EqZkFlK3krjqXTP0sMVje6v0J54UQNMrOcxoXcRAd1G6mr-QaauukTg1BE" + "KxylPiWnMD7pQQ_S1vjIOCxd3XAf_0aioLJu1uvCPz5GhOTrAyyXqFyBK4o87_C8dIiXqh92IZUoWNJWivTx4-hVoPV0evvTTLJR1Z3A6hZ1Zz2a3EqZkFlK3krjqXTP0sMVje6v0J54UQNMrOcxoXcRAd1G6mr-QaauukTg1BE", }, "publicSpkiKeyData": "MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEAy8XQR1X7Z8QX+b/Edl71Efr6CrwAUhAMnd8EpJBxRvMFAV/QQRcOi2WEJc03sDtmLFO6NjofudAnjt/MSSQ+MAneEMkF6dZQbq8oPNdvUr9pcXGqxnUxPFXpk5r8tkKfp3324ZXgcOVdia1AzeBpz+Rr9j/bDNCnPEDh9tqtM5u4RVYlnHxKTMMS+7Q+vYKJiX4t+dfpVZWrWSXAqXjMIQnpy3hsYyrwYI/TwWE5e8LkEW7VfhCtMkmNqieZh0BB6S8TtCpWx3jOcRtR5Ix9e+rDwKvbBNG6o+Bh/eAhXzG48FDphDHEf70qPH2j64f6aKLhhALCoDWfoLt1FR3ZqwIBAw==", @@ -278,13 +278,13 @@ final _generatedTestData = [ "alg": "RSA-OAEP-512", "n": "y8XQR1X7Z8QX-b_Edl71Efr6CrwAUhAMnd8EpJBxRvMFAV_QQRcOi2WEJc03sDtmLFO6NjofudAnjt_MSSQ-MAneEMkF6dZQbq8oPNdvUr9pcXGqxnUxPFXpk5r8tkKfp3324ZXgcOVdia1AzeBpz-Rr9j_bDNCnPEDh9tqtM5u4RVYlnHxKTMMS-7Q-vYKJiX4t-dfpVZWrWSXAqXjMIQnpy3hsYyrwYI_TwWE5e8LkEW7VfhCtMkmNqieZh0BB6S8TtCpWx3jOcRtR5Ix9e-rDwKvbBNG6o-Bh_eAhXzG48FDphDHEf70qPH2j64f6aKLhhALCoDWfoLt1FR3Zqw", - "e": "Aw" + "e": "Aw", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "ciphertext": "N/g8Qb5VGvKaJTUw3k2js4TcAqMgaKxs0GUjOf0djMn6oR7cknIppW4SpM2xbZuvZByDOoDsllbFBJDQczDXsp8IMUTAX8UShDVDUtIJOtwxadpF/vKKoB1MDAI73V3RAaC8Fx+OKQE1BYD8aFh0xjy+Rd1z1/FZzjDf/ajs7lp5XLkrbhF6C5HdS+r+GbtExtvyPSumf2amndgtCBBLyqRyVHqcHvAKMlD5dymSAJadqqVKhdF2yKea5a52+FDeaHJXwjrX4QLhRmjQ91XjDoNE947Y7kB9EQ+yNqIHH+irXLsR9GVcPtiYZgJQt+8ZZuD6KOHTKHQWooOjExgvPQ==", "importKeyParams": {"hash": "sha-512"}, - "encryptDecryptParams": {"label": null} + "encryptDecryptParams": {"label": null}, }, { "name": "2048/e3/sha-512/label generated on linux at 2020-09-24", @@ -308,7 +308,7 @@ final _generatedTestData = [ "dq": "kCnxAekLlwSai3yX-puYSrozctuN0EwbOVVr18UBDGBJAESQ2UGkuYSFhjbPodYxYsz3Fsy3ptFCIX2h3vnWeVlwQPMDcIJlX-AakB6RPcbNARO_Sh7XnOPCRwTJlR2fgeEn_v8fxSuQV3q_W54I0WbnxG_R-PMq-jT2qA71b2c", "qi": - "JmybiIi1xnrlOOL1q1VHrGf0OS8mF1ZXyWWCTkfPQsG6Fuy9T3W9VH4QOCnwzxofQ6qzasRJd7YB_LNOdQ79WJpd2kZDyZhW0JJ5h-yGmcGoFt69TGtZ1BW-M-6hf26r7Hvubw3cnyKlHo7NscjLrw8AvwhK2DFGDjFrZZDWcmA" + "JmybiIi1xnrlOOL1q1VHrGf0OS8mF1ZXyWWCTkfPQsG6Fuy9T3W9VH4QOCnwzxofQ6qzasRJd7YB_LNOdQ79WJpd2kZDyZhW0JJ5h-yGmcGoFt69TGtZ1BW-M-6hf26r7Hvubw3cnyKlHo7NscjLrw8AvwhK2DFGDjFrZZDWcmA", }, "publicSpkiKeyData": "MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEAvUl7IOCANJo2eYX633TCMhS5uo6IuNS93dMqM6DLiy12h5aZpvv5WsXD9T5jRDXdyqjj6dj1ZL5iSt1F6SzCfmSVTo/+05KFbpanJBI0nNihqPPJIUVTebMVZSt2KSGw5Gx1ilTkskqGNvJTdr9QjvXHF6DKsem+HaraTYTfP7buHXMGVw5WYDPET3abGTtOKNmt5WOxSZD5g/OIBJrbJ/vaaM7r/pnOdar6nAkjFmjacb4FVpiUAMgXTHrM4SCuFoyTL3BmV04si3bEGaxAUj5VPnfAumZcqZ1PqtjjCvtvS5q2B+sEA7IAv+RMfMLos+dwRnZak7T2pcJb/ro00wIBAw==", @@ -318,15 +318,15 @@ final _generatedTestData = [ "alg": "RSA-OAEP-512", "n": "vUl7IOCANJo2eYX633TCMhS5uo6IuNS93dMqM6DLiy12h5aZpvv5WsXD9T5jRDXdyqjj6dj1ZL5iSt1F6SzCfmSVTo_-05KFbpanJBI0nNihqPPJIUVTebMVZSt2KSGw5Gx1ilTkskqGNvJTdr9QjvXHF6DKsem-HaraTYTfP7buHXMGVw5WYDPET3abGTtOKNmt5WOxSZD5g_OIBJrbJ_vaaM7r_pnOdar6nAkjFmjacb4FVpiUAMgXTHrM4SCuFoyTL3BmV04si3bEGaxAUj5VPnfAumZcqZ1PqtjjCvtvS5q2B-sEA7IAv-RMfMLos-dwRnZak7T2pcJb_ro00w", - "e": "Aw" + "e": "Aw", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "ciphertext": "SOiIyYCpWYeVMKUWI9DxO9K4TDW1tGCwEu4Dr0KI7YDUw9ahqTpjr3ro0tIISzB2atRShaFTUNbH2bI1oQOAclPAHLMWuchF9Ckg9toUI23KsYB3NIxMrZutPG4Pkl3iNk/Eu7/UIVBwySDO1KBAcXfL8Uz7Ll96tb2fUeKYiOKPFID/ohS62c+z7XyWUWYZd0vQJghH/APyDz5IUmRF6aOPlWnxSryILIrsCOAOUlB30E7w1L8QDiAkVNtV7WGoqHuAskJPCDHAYczfy/YSwHqs0CCuLJfQw2kn8YsZYlWCZhJ6+mvfz+XwbrmcchhNS8VA4MYJxW9MSerYV6qoQw==", "importKeyParams": {"hash": "sha-512"}, "encryptDecryptParams": { - "label": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=" - } + "label": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=", + }, }, { "name": "2048/e65537/sha-256/no-label generated on chrome at 2020-09-24", @@ -349,7 +349,7 @@ final _generatedTestData = [ "dq": "QEFvYWE1jnQDb4dX_kVlm1B5fDvrDodMDA3fr78snZM1hkBMUhL945yvVQtfSCGV_W8hlfG7RK6O8zp6tVxWyf5tjUHBv8lfIvjfLJzLK2BGHlcrZYWH7igwDAsMBFMrc2IGop-PUDqhKQ2PC8k3d5DYUjxbYAcL7CFahY07CkU", "qi": - "a4b-5Ejo3qDCK8Z0w83eRdXz_1nxlFsTGl8yGYRw7-iRsYywcowPmvzGZGE3De_g8eH8gTbRh_3PXCqA5zh8yIly1632pLjmWv7PPCu-78D2GeWUV-2W13K4PABKK1-NLM5AUYhgYH-tpffSMcwK2SWZSinFnBiVElgpvSLqMB4" + "a4b-5Ejo3qDCK8Z0w83eRdXz_1nxlFsTGl8yGYRw7-iRsYywcowPmvzGZGE3De_g8eH8gTbRh_3PXCqA5zh8yIly1632pLjmWv7PPCu-78D2GeWUV-2W13K4PABKK1-NLM5AUYhgYH-tpffSMcwK2SWZSinFnBiVElgpvSLqMB4", }, "publicSpkiKeyData": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp2zNLRXBikmw3ZLm9o6TpDamjZHzLKeZBZLN03chO26XPhdNaAeyRmfNZnvfB2M3KSlvyoLbubAZsRhh/KtF0Sq34PE1lzoDfl3wCk8QuhlI8pROxb3DiZQE6yot/ggWwzh4KEDmdGcJZVuEO76vFGkWWLXoUNZCC7StbGkS3qFZMvr0x7qI9MEVrQ+TUyte5FbHkmyh7uG+KVxcHL6mSxuOx64ue8xy28ynXR2DvS0w7MMw5F/ATrYBOZyXt4EEhxxSzHh1lA6XbsxlPTJ71MkvIQXr5GYekizVLjbD/trTvLSzKfP4xKn2uRw6s4o7D2ZbZycTmyJHZldDHlGsRQIDAQAB", @@ -358,13 +358,13 @@ final _generatedTestData = [ "alg": "RSA-OAEP-256", "n": "p2zNLRXBikmw3ZLm9o6TpDamjZHzLKeZBZLN03chO26XPhdNaAeyRmfNZnvfB2M3KSlvyoLbubAZsRhh_KtF0Sq34PE1lzoDfl3wCk8QuhlI8pROxb3DiZQE6yot_ggWwzh4KEDmdGcJZVuEO76vFGkWWLXoUNZCC7StbGkS3qFZMvr0x7qI9MEVrQ-TUyte5FbHkmyh7uG-KVxcHL6mSxuOx64ue8xy28ynXR2DvS0w7MMw5F_ATrYBOZyXt4EEhxxSzHh1lA6XbsxlPTJ71MkvIQXr5GYekizVLjbD_trTvLSzKfP4xKn2uRw6s4o7D2ZbZycTmyJHZldDHlGsRQ", - "e": "AQAB" + "e": "AQAB", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "ciphertext": "Yoco9gdGKKGhSmZ6qGEZB2zq+YCmfV+1RHhjwfwjfO/sdpkneLkO3Viwm5Lvj+orT2VOH3MZHySxh7i7KvU+sFfbNifDPaynp21j4oc+3IhGZw/qah6zJdHSVpDOICs7yTLWZPEHhKTYEmCBg8IVZe/8BtaHOp9zrXwZReP9abOtQvArM0sUaP572p48iqLyt43cR2pkwcmHJ3cPCePoAV3vLRgLpADXLEyd2V913MYKPFpHpK0x4TgfAWVjvjukPnIK9Ijs1AuQMTlr2Jj+ZpZcDAGB460iOhME9jxN2GVOwcd+qQBQ1nP6Cb3ff+MiI+/l6fWmJmAet7KuhGnBJg==", "importKeyParams": {"hash": "sha-256"}, - "encryptDecryptParams": {"label": null} + "encryptDecryptParams": {"label": null}, }, { "name": "2048/e65537/sha-256/no-label generated on firefox at 2020-09-24", @@ -387,7 +387,7 @@ final _generatedTestData = [ "dq": "M4nX2SNio1XRJDQkZVvbKMBgvNX3_iYaXhXNwkOmBNw14zTf3HWdfm2tVZF09DWWlxJHIrcbobXlS-e9Pr-smqcrOBAosn6COGj8AeLk4ngmEnkXVeuRDvng4f_6nrWGKwEsCUM3brqwcFECO2jBzQAdq23dWw9TeoYthI0esOE", "qi": - "qK82F1knJgw6BqViC-DhrQ9BglqgtokeKayOtJ6CWgy2cocFP11XskKbAxPo4qjasxHF_xs847zsS1InBDZHoyPbn8fOBgJ6LuZLlMgSsXMz4Lo0QEdAhmisSqLpJx3Ebv8zyLhBDSqKeKoiS2zI3bSh5qIK4Owhl8rFZCkjD6c" + "qK82F1knJgw6BqViC-DhrQ9BglqgtokeKayOtJ6CWgy2cocFP11XskKbAxPo4qjasxHF_xs847zsS1InBDZHoyPbn8fOBgJ6LuZLlMgSsXMz4Lo0QEdAhmisSqLpJx3Ebv8zyLhBDSqKeKoiS2zI3bSh5qIK4Owhl8rFZCkjD6c", }, "publicSpkiKeyData": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtVOu6Km9Tb3KSVbjmYlmbBdUMa2vrRobRwTktm3ZkHlHAfFUmdVbpcg/Idbe9FeC11QVUJuxu/U9KRqPRQp19gxholTiufBkZ2PRSm8uXBpN9sLF180xwHF3fNUoWgDle8jsPB7eKkl/XYQLnlsoNh9/+RKfnxpf0sV/LVZarH/aTQ1NNkw0uwDxfHwRNLnG8DIH3v+dU77ou1nVt2roSNH4a2z7ecOk/PFK0/4Aju0DkvPuYbnFkuYkm/DbFoF6E5KLzW4ly8VemcwsXS8MROuf+ZsIxzMDst7r68UkYbLzz0i1WFGySnJZRnAkpP/+JpeAFqCRiz2rYJJ+ByomfwIDAQAB", @@ -396,13 +396,13 @@ final _generatedTestData = [ "alg": "RSA-OAEP-256", "n": "tVOu6Km9Tb3KSVbjmYlmbBdUMa2vrRobRwTktm3ZkHlHAfFUmdVbpcg_Idbe9FeC11QVUJuxu_U9KRqPRQp19gxholTiufBkZ2PRSm8uXBpN9sLF180xwHF3fNUoWgDle8jsPB7eKkl_XYQLnlsoNh9_-RKfnxpf0sV_LVZarH_aTQ1NNkw0uwDxfHwRNLnG8DIH3v-dU77ou1nVt2roSNH4a2z7ecOk_PFK0_4Aju0DkvPuYbnFkuYkm_DbFoF6E5KLzW4ly8VemcwsXS8MROuf-ZsIxzMDst7r68UkYbLzz0i1WFGySnJZRnAkpP_-JpeAFqCRiz2rYJJ-Byomfw", - "e": "AQAB" + "e": "AQAB", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "ciphertext": "W23Ee5n46Qw0tCsijnS+cYgtPV7e8EibGBUPqukWKRCHXei3pqT6oO2sWooj3TxOAk7e6hWUPuTgc7d751stMnaZgbv47JYcGgnvkKNYGhDYl7R5Dn2Y8JSHsDtZRNxVRM3mhVL8vSXlMbe0qqZUEY1zeTvNkdtKXtMeqkNpp3rx1Vb+wRV/7r+NO/AiAN3qefDz0aqXEUYrphBZw8CY9WSc2oF0q4C6F4hRfmo0SNBGvWlSttJAmr2iA7IWztpmOrjvk1q2C+VVO403vZxH4uHkQH4ymNl6z80mu4cj2X+kMhQFL/ItiCSqHY1WhDdF/cne1LxnEmdqAo9dEAp5Og==", "importKeyParams": {"hash": "sha-256"}, - "encryptDecryptParams": {"label": null} + "encryptDecryptParams": {"label": null}, }, { "name": "2048/e65537/sha-256/label generated on chrome at 2020-09-24", @@ -425,7 +425,7 @@ final _generatedTestData = [ "dq": "tZXHiLqD509efVWt2dhoQSAfyuvZwSJdEq_skp85hSzkdrOEtTpFkjoct7wsEXKllgTK1rs98B-4TZEuoatn5JDAsg6fWjHK_MyNiN9BumeZh9VTumsa8SuGFY9S3eojDgTZXT_Zbm9sbE6-9a_JheY4GJYTjLjfQpA8Tyuy0Pk", "qi": - "Yv4b7RjGVqynnfbC8QMh_Sw4xEVtp-ccUDnZ_FTCnXEinkeetwDYAvlhL9e_52qpKSIyFjzqYrUriFpIEilzalW2KwGJKH7hyVsm_CuYM5ZaYST1EL28bNLu-fH4Y9B0WGjhwdm-fgBtPpTe_oprLPwAcGpY96ouCavS97OMgIk" + "Yv4b7RjGVqynnfbC8QMh_Sw4xEVtp-ccUDnZ_FTCnXEinkeetwDYAvlhL9e_52qpKSIyFjzqYrUriFpIEilzalW2KwGJKH7hyVsm_CuYM5ZaYST1EL28bNLu-fH4Y9B0WGjhwdm-fgBtPpTe_oprLPwAcGpY96ouCavS97OMgIk", }, "publicSpkiKeyData": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyj+JmB2IVVe9jFcxXLfMKV6p2Re8NX3DI0SA7nYXNFD6Fje2mWOmMx9Ju4j57Tai6EZ7rA5nZSvnygwFgPw1IfLHqCpczeLBMK2G9ZcRn1KeG/wayAw7F4foul2HD6MIJ99Dsog91LCsKjU1aCr/XmdmkIiuQUMAEJTMNqcAomkUAfhSOJ/A4KmtiFNCvHWKHRJ06Fx4hAbZ7ZyEdkDwaP87oXeUFxfph5+aHjLPOIDQyt8ltCyEvJ/hakGfDavEHMBXen/4EsUGm50+Sib2kZM4gEGihIrAunbiiNpwXCelr2DbVxNiDd8ES9uNNZ/idBWDeCX5vqsHTZxONO0zXwIDAQAB", @@ -434,15 +434,15 @@ final _generatedTestData = [ "alg": "RSA-OAEP-256", "n": "yj-JmB2IVVe9jFcxXLfMKV6p2Re8NX3DI0SA7nYXNFD6Fje2mWOmMx9Ju4j57Tai6EZ7rA5nZSvnygwFgPw1IfLHqCpczeLBMK2G9ZcRn1KeG_wayAw7F4foul2HD6MIJ99Dsog91LCsKjU1aCr_XmdmkIiuQUMAEJTMNqcAomkUAfhSOJ_A4KmtiFNCvHWKHRJ06Fx4hAbZ7ZyEdkDwaP87oXeUFxfph5-aHjLPOIDQyt8ltCyEvJ_hakGfDavEHMBXen_4EsUGm50-Sib2kZM4gEGihIrAunbiiNpwXCelr2DbVxNiDd8ES9uNNZ_idBWDeCX5vqsHTZxONO0zXw", - "e": "AQAB" + "e": "AQAB", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "ciphertext": "k4K0hYuxmVhDtXxYi5wU4Cx7wqpdyOtJY7HzRjJj5ZU/kO7XhbMsFpLnzvBA6Lvq+0LeDeuCOEKJg9xH0RQGIlGkbxI4S0C8HrT7xFcD/htoKEOU5AWL5tgdOW28KC4zAj5h4C65wFdJxdEHMnljV7qlsqUZ12h1w3V6R+FWUkz/DmnDGikctXjVIE5tKTWFv4GTU3hNRjTb4NthQyD+AaafdeHrHk7ed5cdg4gkwZmVJfA/qDQ8tM82SkRjFJBVN++CF8ip6NAtjgo9QJieC12S+KNS2N1dFQeR7WZcP71V2NMTB8znw2Y3U1VdbS2uaQaqKL0AsAfPTx8P07L5tA==", "importKeyParams": {"hash": "sha-256"}, "encryptDecryptParams": { - "label": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=" - } + "label": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=", + }, }, { "name": "2048/e65537/sha-256/label generated on firefox at 2020-09-24", @@ -465,7 +465,7 @@ final _generatedTestData = [ "dq": "kkeeetdEODXUzC2x4odLV_0ga8HjOebk_AxGOmZ2LWhBf0A9YCoFjSoCyyH8ZP-ku_8jo8m8gcOOKcMjlIaRHR1xjX1lTGyEnyE0gVZjVK6bWTyYxf1j6L4Kt4JTSzfjBrE9ZyU2SQozJ-CDAlQY6fYkB3Qn82kfObpdUQ1rMJc", "qi": - "bOzuYo_I3C9CmgfetQ4LEHU8cVbN_5aEa6HBdFvPin2zPo4D5941Iwaawi6AtD07hSJzmYmWQn2zDiAWLeOuEgUPgreV1f8iiyBLo18o0JgXDqYtxDcoPgGHfnnhDZ36Tb5nOkjDgb1sO6ouRt78KiL4LU9RUQQtlGk5jgTHRe4" + "bOzuYo_I3C9CmgfetQ4LEHU8cVbN_5aEa6HBdFvPin2zPo4D5941Iwaawi6AtD07hSJzmYmWQn2zDiAWLeOuEgUPgreV1f8iiyBLo18o0JgXDqYtxDcoPgGHfnnhDZ36Tb5nOkjDgb1sO6ouRt78KiL4LU9RUQQtlGk5jgTHRe4", }, "publicSpkiKeyData": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy+jNEIOiV5E0Xv3PX30LXwQgrqCXvnoynPdsKTJc2P/B+XsAetae9d/kCzA6W2hjaqZ0hhVhzKrFmzHeBpsatSIwGUMu92+4ThPoCn4PXN/zCGCfc8iFEQu4NNBO2KDPRNGi5p7Mv0OCvUGH44VvrofK5AX0roctXJLcLNyoaoOt/yPgBIPNR84zVFWEZ8OQxr5v7nhM3MxtES0SNKCIUXkGixVAv6R42rDDg+xR2THVcojaRO42mV+jghyCnF0k9D3SJqcA/dLo8bnrAXtF+i1wOzrNKGTev0OQCqUhllszwAQkA3hFJNrzUUvByTg9i4M8SL70OktJersCaUGXqQIDAQAB", @@ -474,15 +474,15 @@ final _generatedTestData = [ "alg": "RSA-OAEP-256", "n": "y-jNEIOiV5E0Xv3PX30LXwQgrqCXvnoynPdsKTJc2P_B-XsAetae9d_kCzA6W2hjaqZ0hhVhzKrFmzHeBpsatSIwGUMu92-4ThPoCn4PXN_zCGCfc8iFEQu4NNBO2KDPRNGi5p7Mv0OCvUGH44VvrofK5AX0roctXJLcLNyoaoOt_yPgBIPNR84zVFWEZ8OQxr5v7nhM3MxtES0SNKCIUXkGixVAv6R42rDDg-xR2THVcojaRO42mV-jghyCnF0k9D3SJqcA_dLo8bnrAXtF-i1wOzrNKGTev0OQCqUhllszwAQkA3hFJNrzUUvByTg9i4M8SL70OktJersCaUGXqQ", - "e": "AQAB" + "e": "AQAB", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "ciphertext": "KRlHabFEGlk1zTgQE0TSEI4iVACpLjuqoQda4zt12NhjiDzXr3yiFNNAIR6V28owH09DMYsQcRkDBgbWP81t+XdZAtzc644ZMnHh7Kwe6pZkbcCYk3hukZSQjhLIrP6oNwfBy7phmItJjDpitoBgmudTUPqy+hDUf1IU8feYzP4S21jojMOQ3cr/TKXXia24c559gRhwunOV0vwAU6KaY9V0tZtsMifuVP6hCrPRI5B3c9pB5uDU0Z+1Lj9ywfl4Hj17p4qumlpIrmp8fsybhbZYv2YCZf9GvcpLKwkP4vmzOW5W690NcOYS+h4slnH6P0AjK7Z8+YeKQLGGp22rgg==", "importKeyParams": {"hash": "sha-256"}, "encryptDecryptParams": { - "label": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=" - } + "label": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=", + }, }, { "name": "4096/e3/sha-384 generated on chrome at 2020-09-24", @@ -505,7 +505,7 @@ final _generatedTestData = [ "dq": "mdEfag7B_rMe8fneWJwLQij8Xblb08w19gh5QSrZmoT2WhfcePISLMFzDcafFXrfAUk6C4Mb3OQcLrI7dBlVl7dgSKoXbprkH4HO1mlp1Wfy5dXKc8R1TF70hLVyBgvaBVBF1-01de9E6X64mTwNPK83LsT-U2fEG6RfU4l_xnnBBjgKbkvc0cBhedcBvFFsMS7kF1SLbVyULPTzXnaktOh7yNSoit4xPEIfX78y-pIr-nTXByDtLST6D7VRJ504Vf6lrjsYwxAWgw9w4v5_1djPLqFE65BPFXRsl3CjrTTUUgiSD3WEPczmydyzJnpHQQiU0K6rodnM_GqlIC3HZw", "qi": - "rpj0n1dg-83MwzxSAMSZh_qaxp2rKvd6EdmgyvvE6ZaGOStt6wvI38ZnzU7pWPYHmus2aJkguu76pS-8tzQKTWFB9tAsYLYlNNoBrZtOgpBwrnsAOwsiCcwJzElIksazL5FCvoD46d-R2WcrPX7pvmYgW8hGHZ8S0QYJ8TNJt2rZczNHMTZLv8aGKN0vqSLTT-ND4_7JOh1GCpFdDSP_PauO8yuZx0UhEnKRYTYWzaM98pwZNCdszhkrD5Ji7RO9MA5u6uUkbU2QCusK03tbjVwHdbmdMS4VIFFPJvnQZPTc_ghoGvkFD89WmmxlQkHPuJCICIlEjYLmbianCvYPOw" + "rpj0n1dg-83MwzxSAMSZh_qaxp2rKvd6EdmgyvvE6ZaGOStt6wvI38ZnzU7pWPYHmus2aJkguu76pS-8tzQKTWFB9tAsYLYlNNoBrZtOgpBwrnsAOwsiCcwJzElIksazL5FCvoD46d-R2WcrPX7pvmYgW8hGHZ8S0QYJ8TNJt2rZczNHMTZLv8aGKN0vqSLTT-ND4_7JOh1GCpFdDSP_PauO8yuZx0UhEnKRYTYWzaM98pwZNCdszhkrD5Ji7RO9MA5u6uUkbU2QCusK03tbjVwHdbmdMS4VIFFPJvnQZPTc_ghoGvkFD89WmmxlQkHPuJCICIlEjYLmbianCvYPOw", }, "publicSpkiKeyData": "MIICIDANBgkqhkiG9w0BAQEFAAOCAg0AMIICCAKCAgEA0BSAnjPPDHkE4+oQ28R/cTPsfND4rQwNkeFaDJd0uhhpkWbX8Woel1nupU83WMyICRaqZC6gcD2YKMv0KIsSOJ5BiCImozJC9D/zKbqhw1Nhs4TzKoX1Dcq7lVLMH0A41ypu/TAD1Nkvu3a1ocIc2hKMqUQsUIsjAvJecw4biXa5KoeNSGi4EWwyLjtMi76HHCR8DD2So9dyWzdzT2nx1QQ3nIb6kwDckvACOvaACXk21RHks2sED3+T3lONtPfl0KfDIt0xFM22vslULZ9NLvvIH4PLUGZ4BRU6v9EZbLoZGqO7Ep7ByMf+EXbebe2KQkNBquMFNqjK+Dh+dkXdIsBjKPjTGvGmDbHGvBMvcvBMta4hv9yUi4U5OZex0+X3HnxiVmYB4to4fbeu4LHs0eHfWyUY+glx5gLOqwB59Rhk/cspTvvgOA2hUGLASXIY8KpqdOtn1ynmFh9E15YB1u382Y+EcOzcHpr0hZ1+KrcXCmklu+S8R3Q0NxQFlfeasM+p0TxK5y96ZscU5UwS+s6jk+W7ioeTcPLOMZOZb3US7ZwzlV29SJJkczBL6f5XAS8uwPoElxKP4F0FhgLgd83NWijRevQYJePVgczf/j90Ei5B7el/ZxX/LB7taK+D7I0fWh1MANsgd8C8hdFI+EzqusB2CUpEOOSuGygmLMECAQM=", @@ -514,15 +514,15 @@ final _generatedTestData = [ "alg": "RSA-OAEP-384", "n": "0BSAnjPPDHkE4-oQ28R_cTPsfND4rQwNkeFaDJd0uhhpkWbX8Woel1nupU83WMyICRaqZC6gcD2YKMv0KIsSOJ5BiCImozJC9D_zKbqhw1Nhs4TzKoX1Dcq7lVLMH0A41ypu_TAD1Nkvu3a1ocIc2hKMqUQsUIsjAvJecw4biXa5KoeNSGi4EWwyLjtMi76HHCR8DD2So9dyWzdzT2nx1QQ3nIb6kwDckvACOvaACXk21RHks2sED3-T3lONtPfl0KfDIt0xFM22vslULZ9NLvvIH4PLUGZ4BRU6v9EZbLoZGqO7Ep7ByMf-EXbebe2KQkNBquMFNqjK-Dh-dkXdIsBjKPjTGvGmDbHGvBMvcvBMta4hv9yUi4U5OZex0-X3HnxiVmYB4to4fbeu4LHs0eHfWyUY-glx5gLOqwB59Rhk_cspTvvgOA2hUGLASXIY8KpqdOtn1ynmFh9E15YB1u382Y-EcOzcHpr0hZ1-KrcXCmklu-S8R3Q0NxQFlfeasM-p0TxK5y96ZscU5UwS-s6jk-W7ioeTcPLOMZOZb3US7ZwzlV29SJJkczBL6f5XAS8uwPoElxKP4F0FhgLgd83NWijRevQYJePVgczf_j90Ei5B7el_ZxX_LB7taK-D7I0fWh1MANsgd8C8hdFI-EzqusB2CUpEOOSuGygmLME", - "e": "Aw" + "e": "Aw", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "ciphertext": "xTnzEJPfRHUyLmHXKo8h/Xn0Ug4WeYh1hFLMHbTxR4ilT7vSKI/ji4RXij+KrRIjOglwvy28a2xeit0xsXtE7xVXzSawzus33H7TJKrFOpv1ZdIebJMBBikR7Lc5b5DVAH5z/6y7rzN60J6aky0zRGKzRCMr9Wr2/1pWmhXE/YtJ7J38dxGf9FBrmax9+0T8wwKS51FZmh9i0X7D/AsvWP+UwgbG17bCth6keW8aBLgkkoh3PBSLDj7UIpKraZR4W6Qnbo6U92vaAZGQLapql0sc7M/ZehuP8oT9tnPBBlKNqsOSBuLIP9/VFo+vu2RAs5ZU98glpUsLfit9mS00Q3B+wRJnwPFiZR0PrGbwS6SlE5z1f1J6gdfboJzqNJJgSWtzcoAKriWPwlhlcckYBRI9kRtGzz5m9KQ2Nq/lIRIAUYMPOAOmr09jRcDYXxKFumkcD6a8FGa37pDRk2JQcalB11zA1zyJcmi6pqOQ2hPjetm4aoWXLhMrXNCc6pxewiy1cG4d1frDiim5PjjM3pRucyvsaze5pzM1ui+TLRxWxdWXqW87pH6oRTITXMo6KFVxlYH3bxxDF9r5nCtIgzRR56H4axnPUlprpIMbrd6UADYuKu/gLrddwq41iGEiTBWPxZ19wKslwFQC1C5/SSn4HUI/apKbkAvqzuhIxhA=", "importKeyParams": {"hash": "sha-384"}, "encryptDecryptParams": { - "label": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=" - } + "label": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=", + }, }, { "name": "2048/e3/sha-512/no-label generated on chrome at 2020-09-24", @@ -545,7 +545,7 @@ final _generatedTestData = [ "dq": "fO3MUerRszjhDu-Tk9AGcXcuMLqY2uvMWK0I--QMBbcti-IBFW-LZTZqJvAfRb609QcXM_5osRQ7E27xreRhLSW-vTFfz1Bcj3KhnaMUIZG6W1GwMh0FaGVLfiwYhRjqUuI9p-zyW6LjBQRQ6jF59C8yXrw5pkkk1gSss1518E8", "qi": - "WBmvQgksjQUYO5zzoSh9NSwbjO0Dx-1bldWLvMJFtJWmTLwLyyu_67WQVtWwRFyePU3ZTe9Os7zdB8jWwDyFcBL4GxUcG5Z4nFJ4tZnoTwJXov2sUPwpJEMuAIW81Kr0ja_6szFnouvR41iG3YxJswK7OFHMbNNEww8NzSoRTR4" + "WBmvQgksjQUYO5zzoSh9NSwbjO0Dx-1bldWLvMJFtJWmTLwLyyu_67WQVtWwRFyePU3ZTe9Os7zdB8jWwDyFcBL4GxUcG5Z4nFJ4tZnoTwJXov2sUPwpJEMuAIW81Kr0ja_6szFnouvR41iG3YxJswK7OFHMbNNEww8NzSoRTR4", }, "publicSpkiKeyData": "MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEAk6hvnJfHCJygbZrgrL45N3fh8TbIEujX8IZPqCD0xDhE6WGUebJboKnqzsF/JQU0Do1AHL5USFrNqxXtgpuRMvSdOJ8Pj7douUcbusjL1jKIUN4TnrUQU7LvkMZW44PXcSVUyhF9QRzKNe/1a2RlV0rohoyP5r/sSj/dmAYZSu4ta1qSaz4YN68z903VDCPxMlVCI6TJOOjGOjtk8OQeA60xi0531L8VWOjLvcjcfExQ1hn00bx+FzBwgdPn6GpaiHoPgjD2dTIHTgEGNqBxf7bZ18TcNhEVg85l92ZTeBJYzdtp//sg7QqkqSYSEp8E6lkaVNW0vlk++h7vWHZgoQIBAw==", @@ -554,13 +554,13 @@ final _generatedTestData = [ "alg": "RSA-OAEP-512", "n": "k6hvnJfHCJygbZrgrL45N3fh8TbIEujX8IZPqCD0xDhE6WGUebJboKnqzsF_JQU0Do1AHL5USFrNqxXtgpuRMvSdOJ8Pj7douUcbusjL1jKIUN4TnrUQU7LvkMZW44PXcSVUyhF9QRzKNe_1a2RlV0rohoyP5r_sSj_dmAYZSu4ta1qSaz4YN68z903VDCPxMlVCI6TJOOjGOjtk8OQeA60xi0531L8VWOjLvcjcfExQ1hn00bx-FzBwgdPn6GpaiHoPgjD2dTIHTgEGNqBxf7bZ18TcNhEVg85l92ZTeBJYzdtp__sg7QqkqSYSEp8E6lkaVNW0vlk--h7vWHZgoQ", - "e": "Aw" + "e": "Aw", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "ciphertext": "XPXJWQekFO1jOCv51Fj7HgQWJpT+yz51iOqfQbqOJngt9FuQUDcd79UgrY/ogNEk8ezEd6/ffUA3BgPG6xnrsQNQFskwEs74TLpONAmUea3Nu+6HqavNNlwcVOm1bfmz9PUmufkGHTJqRLhP1YJWkV3BIsaqi+vHeduVOnsiwpgJWtqdLcSflUcNyi8P+uJEkBEutvS3af+1GGtSJo62pgxnVy7WZWf/sasibmgUeJJUS9klYD104Ffiqqedj63Qo2DWCPYNiII1aExOs+G8w/omxu0RMvS5ffBRt7I6s6CEt3Z5alMqD30kA18w7pOSgmrT0w8LJsZ522MYWsdL6g==", "importKeyParams": {"hash": "sha-512"}, - "encryptDecryptParams": {"label": null} + "encryptDecryptParams": {"label": null}, }, { "name": "4096/e3/sha-384 generated on firefox at 2020-09-24", @@ -583,7 +583,7 @@ final _generatedTestData = [ "dq": "k5kW2IJJmC5UvF3sWk9LCA4Vsn5OeDFCJgUYyZtdx1twmHzxwoUvoWW5n65mywyeDC_ESl_BmWjZxM0n_j4UQ7bjeCUpxcQf9eIIikQCiN-7m7T1FKQThNqX_qmpRCEu1ON6B3cAYUPGwfz9wu2W7jFPZ7x2U4fKAIAs0vw9uxMDgR8yejMLUJReL5M342tCb9F5b8_KA8zWvIjQPU2eWfzKm9IW5B5SC2_X4sfPY3GW4FhWd3kBKekMQGibxmJNKidhUrZJ8iJBzNkdgRvUlc30MuuJq4PkNkd7cjx2PswOU30cre5R4XhDYzbDOJoaXVdX0gk50K65Y5e447WNLw", "qi": - "4of8duFCH-8opl2Hybizft_YrsVYuMvuYIEKSUmwitCfF2vzu8NGmhphxR0KqLenQEJLkcLG8IQYaNicDmElpTm1UzFrizq02IyKLy71gxWZ7cYIe0DTiE5O-Wwb2lEVXdyr50cABUGD6B4maOb1EU0C9R4WrI2i1FgEQIr7jQmRC4kAImeo_-uf744Qyi4zu_nyL9EN_ngK0J7cpNnWDn9xqflOAJDhxEM8f6qw2NgC49AuNKTkrpgmo5DC2Aj3xv0po7FwHRUflO-6Yo4ToLmKyGfh0IJ2-WVoMXmVNcGWkjwJXR01n64qIKg6rE3Lvv9luVMKfIbSR1t7UGYXYA" + "4of8duFCH-8opl2Hybizft_YrsVYuMvuYIEKSUmwitCfF2vzu8NGmhphxR0KqLenQEJLkcLG8IQYaNicDmElpTm1UzFrizq02IyKLy71gxWZ7cYIe0DTiE5O-Wwb2lEVXdyr50cABUGD6B4maOb1EU0C9R4WrI2i1FgEQIr7jQmRC4kAImeo_-uf744Qyi4zu_nyL9EN_ngK0J7cpNnWDn9xqflOAJDhxEM8f6qw2NgC49AuNKTkrpgmo5DC2Aj3xv0po7FwHRUflO-6Yo4ToLmKyGfh0IJ2-WVoMXmVNcGWkjwJXR01n64qIKg6rE3Lvv9luVMKfIbSR1t7UGYXYA", }, "publicSpkiKeyData": "MIICIDANBgkqhkiG9w0BAQEFAAOCAg0AMIICCAKCAgEAxut1GlA1NKiGHpKuvGf9PhrY9r7Vg2FWAWW0459mHgoPHAHlEQq4/39a1rh2F0rsLEx1UjksL51fiMdy688A6UgqqAAGjsEl9SFuO6Q1gtYiKUybWSUORY3dKj3JA3+1crC7yO7LeTUs+SCPB+DZ8jtvCMPircOZMbuIkQFirLcpQ+hzj6tA1UhrBnAzljeX5IxjmHbXUNXxRMvQU5x4axphm4j0xWenvdaiNmW40Mfur9CDQ99XjTqOD8DCUf1SQEDQJ/XdRWUuHrLVYlkv/BiLiQSAAggCY/5OsdLDIRIUxzjyw3W4ffRKHzvFbaw/DM6cnR15+lbbd55TGQjDjQXiJT1hinmAtKebWqkJAZ+qA7AuMDtbLvXL3Isyea49PKH5K4GRjtoDdAnjyKdmOjLHVh4q5nXN2hJlMkAcMWOw0GKcycRxm8fKBzjQV1VeDoBhX6u8dJ3obe73/+ZXT4vQPEreZchCZyJMEs1dFszB/EgkR8K5hck0sEpw6WoT+YbQivkzhAykMDrKOCpAwaFtZWDSM8EJ5SFNX6W/qYkuctMH2FIdSb2PVb6UNbt2IoyFradYHxW9sQFFYNm1zSIeoZTQHIOZR2MnFAZJj4Z6O0lW61IB4404x3yJl7TdJWcp6mIpvWLF9PsPdKllJyf6BYjlPtRDC2IWuRTDKlECAQM=", @@ -592,15 +592,15 @@ final _generatedTestData = [ "alg": "RSA-OAEP-384", "n": "xut1GlA1NKiGHpKuvGf9PhrY9r7Vg2FWAWW0459mHgoPHAHlEQq4_39a1rh2F0rsLEx1UjksL51fiMdy688A6UgqqAAGjsEl9SFuO6Q1gtYiKUybWSUORY3dKj3JA3-1crC7yO7LeTUs-SCPB-DZ8jtvCMPircOZMbuIkQFirLcpQ-hzj6tA1UhrBnAzljeX5IxjmHbXUNXxRMvQU5x4axphm4j0xWenvdaiNmW40Mfur9CDQ99XjTqOD8DCUf1SQEDQJ_XdRWUuHrLVYlkv_BiLiQSAAggCY_5OsdLDIRIUxzjyw3W4ffRKHzvFbaw_DM6cnR15-lbbd55TGQjDjQXiJT1hinmAtKebWqkJAZ-qA7AuMDtbLvXL3Isyea49PKH5K4GRjtoDdAnjyKdmOjLHVh4q5nXN2hJlMkAcMWOw0GKcycRxm8fKBzjQV1VeDoBhX6u8dJ3obe73_-ZXT4vQPEreZchCZyJMEs1dFszB_EgkR8K5hck0sEpw6WoT-YbQivkzhAykMDrKOCpAwaFtZWDSM8EJ5SFNX6W_qYkuctMH2FIdSb2PVb6UNbt2IoyFradYHxW9sQFFYNm1zSIeoZTQHIOZR2MnFAZJj4Z6O0lW61IB4404x3yJl7TdJWcp6mIpvWLF9PsPdKllJyf6BYjlPtRDC2IWuRTDKlE", - "e": "Aw" + "e": "Aw", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "ciphertext": "kYweMY3C1cChof6b+PkVrL9cpMwh7plld/KtgcZghzcI4e7mi7/zLkmOLvq+9D7u+ck8g898DW19iPKb2L3e/8hp1IZBXwQEc7zsTM/hdq8BPff21jNZFQXxB2BzPW3QpEx/OELxN3fB8wSjfjBgTH48qHPoeSj/J9TJ+wZSKWGLGS22LhZ187Sa6Ia47K5tRDj837EsO1E9MZpvzJlZ2aRE/QIj0G91ZWl59+/OfRGyNYHWGhl+UAHIhYh19NBBJyToCpOyJuRXo2f74pR++nwfy4pwiQ+twvS8YpdZ+w/YhY9z/+oO1x4sFJ/FGr6l8NgEbbR2juBoeGjHDUYpoKEpsK7+fXgbvXildE4107lohFIn3/s3NnUUV40AB24LK0QcACySgaWaZfI+6iKIKHm719KBNhJlgqMlmvZcGm+ys8S19r8f5VNUD/bRiI/D9Li6zEmIBnG113N33bO3245txofFve2NipCgkLi39Fs5V2o6wdtj6P0PK+k+a3xlYZA73uIf8QJOz03IBf6ugavEu/pK9xLGIcrZl1Ykd4eW23C2/Yaul1WkyabZN70YeBusHfz5yhY3C/1MvpSAsMXt7br/QwVRtt/83ehUoF7v0+qdKOkzHQsc85JW/+DrOG4otMYw+cpmeVWkVYs8u9UP1zle/s8xBwgYAf/dfwo=", "importKeyParams": {"hash": "sha-384"}, "encryptDecryptParams": { - "label": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=" - } + "label": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=", + }, }, { "name": "2048/e3/sha-512/label generated on chrome at 2020-09-24", @@ -623,7 +623,7 @@ final _generatedTestData = [ "dq": "k2m-bdJ4R5hHYigRXVIMvusyJVd8IA87J4Fq0e-plGFeP1WK7ozAVOSVuexEvDe5pj8a2vihTKto6VWqUDpuWBk2ZAkFVqQDjqV7Ko6U_rJOGz62hi5iEJaMSzd-Mt9jWuNZsMVnQ9Jk564916at0zJ4uB402kVCrFPO8MvD0R8", "qi": - "ozSg1icq3CIC0Ep0DvZzum52OfCmMw5l4VZ72KlEuAxtXcqHXEADvRUiuBsTmws4n1kKb4wmBdH8-U08oKcBg9cQSpjADA7DjNAcMIBXKKw7TO3bMyrBuSHVf6-wt7Y-JRW9-QjAVfp1EH_FbXwT4iuBnhOpQrFK63GpsAlyChM" + "ozSg1icq3CIC0Ep0DvZzum52OfCmMw5l4VZ72KlEuAxtXcqHXEADvRUiuBsTmws4n1kKb4wmBdH8-U08oKcBg9cQSpjADA7DjNAcMIBXKKw7TO3bMyrBuSHVf6-wt7Y-JRW9-QjAVfp1EH_FbXwT4iuBnhOpQrFK63GpsAlyChM", }, "publicSpkiKeyData": "MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEAzYCd4Ts2RV/5u05oE5yaFifcl9/tFx0DIlCTFxfGZxqOh+2o8EKDwXOKcTrAkbftW72dYqtm/fSDOYtH2071toAkbvaqe5Zc7CEsm5wMwHGHgGi4klJOtJvQv9aCFVYCdbGAJZAaPLaV/PIJj/EOj8t7FF7GudKYFRXy39GYJU/04UB9W05ps1YJ8JPaN0QyrFtJzMxCdz+tDmmnYhZkrDVfcb9QfNJX8p+ZcO/Kgs9gRh0BiLdQiNEaFyCDrIV+TkoOyOxF5Cqt06hhDbDz1fpzVTkkTGq+4rX2JFgBntB8B9axr/i5IRCVeA0+tnyNVnpy8qEn/g4+Tki6hwlE+wIBAw==", @@ -632,15 +632,15 @@ final _generatedTestData = [ "alg": "RSA-OAEP-512", "n": "zYCd4Ts2RV_5u05oE5yaFifcl9_tFx0DIlCTFxfGZxqOh-2o8EKDwXOKcTrAkbftW72dYqtm_fSDOYtH2071toAkbvaqe5Zc7CEsm5wMwHGHgGi4klJOtJvQv9aCFVYCdbGAJZAaPLaV_PIJj_EOj8t7FF7GudKYFRXy39GYJU_04UB9W05ps1YJ8JPaN0QyrFtJzMxCdz-tDmmnYhZkrDVfcb9QfNJX8p-ZcO_Kgs9gRh0BiLdQiNEaFyCDrIV-TkoOyOxF5Cqt06hhDbDz1fpzVTkkTGq-4rX2JFgBntB8B9axr_i5IRCVeA0-tnyNVnpy8qEn_g4-Tki6hwlE-w", - "e": "Aw" + "e": "Aw", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "ciphertext": "RisMYrwGt89sRx09T/jXsJskl02tHdO6FUPTiZZ0dOErQ7pFyLHRADbR6Mj0AeTkqA4QwMCFYAY2t9eIcccYRhRWiqQkb9/Sasyt/ENxg1FarHELl8z4ue+MXB7A0Mzt8eL5sz6q7gKIv6y9tzmvGNkRT2vzdJyl/P1hm/Va0taQrS71C2ohJnWqS5jBgGBX3A9p0dbDFStnX/ua7b4ZYaun23imDcETKZw2HgUZF5EzlsGVVB/o5EHLORnpf1nB39ZAkBIVrET1EXFrDzk5uFgIU9gEb44hJKwC1zqGj0ETW42gAZMGnbfX4pGEdh2U54YPUrWEix9Nl3xsJf+XIg==", "importKeyParams": {"hash": "sha-512"}, "encryptDecryptParams": { - "label": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=" - } + "label": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=", + }, }, { "name": "2048/e3/sha-512/no-label generated on firefox at 2020-09-24", @@ -663,7 +663,7 @@ final _generatedTestData = [ "dq": "h9IA8N81Wqr8NdPVWmWCFXPP1x3lRyjacz4b75U7g1hppWMcpNgoWjlT5osa0S-v07fue_yi6IRkWMTKyKq9waJl7dhXDFEtR-FMCG1Kh3Z1Tqs8cGaBKYLr9TmLJv2TySSCDoBRK24EUj-_ZgRVi2LiYFyv9V1z79_mTcV3lO8", "qi": - "ActUnJ82nri5S8Gf8U5_iTsEm5bMQUXgv2KmNZQIh-1rfmKrV4Jyuet5XAwv5YCnoLRktYSAbygiFhd6CUrJ0nxbeA1LRx6xFAXSk3LC-ZszHPJdcZnYc28gI8Sy0_ZpXCHYKzbYG36nlmSLc-EW_iiFRua3D7ZC0ap57UxBZ4c" + "ActUnJ82nri5S8Gf8U5_iTsEm5bMQUXgv2KmNZQIh-1rfmKrV4Jyuet5XAwv5YCnoLRktYSAbygiFhd6CUrJ0nxbeA1LRx6xFAXSk3LC-ZszHPJdcZnYc28gI8Sy0_ZpXCHYKzbYG36nlmSLc-EW_iiFRua3D7ZC0ap57UxBZ4c", }, "publicSpkiKeyData": "MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEAwbN7jh+gZMQ7Fc5atvmbykC4RpWo87nHpz1MCr8q8YFTgQreb6s+5Zl1+j+c7BnrKTuYDyPrbXhTBXxXJiJcqv7w1OVqlPUXq/D29xJb5xN6/eW6152iVIfuLj03U4qP6HSwn5dn+6FvNiT1FAK6F07bURx5zRNcWD6snz0HP3qwcNFItqthrWzX7lUjaDDboRWf7OO1m8hEBD4yRfMOzV7i4ibDe0HD0ocyOE84FjvzFYLpl/5N6YRf+1bpG0OmEpITT2UYsk2mT3JcmR1SvXXZt1bWNy7DWYqfpN0BMuxEYJgtU7ejNcqcLqZgPa6uQlVKLQkz4qaSfJHfAfgiNwIBAw==", @@ -672,13 +672,13 @@ final _generatedTestData = [ "alg": "RSA-OAEP-512", "n": "wbN7jh-gZMQ7Fc5atvmbykC4RpWo87nHpz1MCr8q8YFTgQreb6s-5Zl1-j-c7BnrKTuYDyPrbXhTBXxXJiJcqv7w1OVqlPUXq_D29xJb5xN6_eW6152iVIfuLj03U4qP6HSwn5dn-6FvNiT1FAK6F07bURx5zRNcWD6snz0HP3qwcNFItqthrWzX7lUjaDDboRWf7OO1m8hEBD4yRfMOzV7i4ibDe0HD0ocyOE84FjvzFYLpl_5N6YRf-1bpG0OmEpITT2UYsk2mT3JcmR1SvXXZt1bWNy7DWYqfpN0BMuxEYJgtU7ejNcqcLqZgPa6uQlVKLQkz4qaSfJHfAfgiNw", - "e": "Aw" + "e": "Aw", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "ciphertext": "t3YJvJ6CM5WnAbNQOPmHcomK8tjOfj0JJDqOtv0KkwfU3jyDLoyd3VsHRh6TQ4dE7P0PXlK0U3DMpGwXdoZvrYae9Wk7F/EFDUy2G3VZ7C+zQLOENbqOWhpXPcM4XvyJnQuDcN/YQ1sePF+Rv7w2CvLH268wx/d2cSh2OE5V7bDYxRfIJRtpdT6tPE93k80899MKGKISwdOcE88+D8CFaUCWFOCgxoeAqr5pw6/oCShpNQpTwKBkCXkv6BKXSKrK65+jMdojWA8Y4md43mD9tkALIwbp+vVZyHkrJZpYG8boBgYLLz3XqncpczkiqqrDs9Y9qFmiFIJ0yCSnOmkpJw==", "importKeyParams": {"hash": "sha-512"}, - "encryptDecryptParams": {"label": null} + "encryptDecryptParams": {"label": null}, }, { "name": "2048/e3/sha-512/label generated on firefox at 2020-09-24", @@ -701,7 +701,7 @@ final _generatedTestData = [ "dq": "gIqDQaactAGnexvX-Ui1YgtPehLwRKs7Mj_HswgIXUZVnL5p73Bbf2737zM7x83tPLd32Gzw562Vs4eKZKvF5FSRki6EG5x84LNpaKifCD00ZY0grtUn2nmWSK3vW27F0UyAwN_yQrH9nA19dWGPPbyBagANaJu_5STTwJlMC2s", "qi": - "As8NuzaY84HphWryj5fFgL5hBjQLYisV407XMUB3RgYlDMHP3iID5zpEhwL-sIvp6pmQGWtlbqE96LCwmwXjx5IgIPww9WXqxox8nqABMdb4piyJonJIM7Hr0Eh6whwa_6HgASu5lC8XBzvO4n_aLcUHBjtlKHVLFM_Lhnw2isI" + "As8NuzaY84HphWryj5fFgL5hBjQLYisV407XMUB3RgYlDMHP3iID5zpEhwL-sIvp6pmQGWtlbqE96LCwmwXjx5IgIPww9WXqxox8nqABMdb4piyJonJIM7Hr0Eh6whwa_6HgASu5lC8XBzvO4n_aLcUHBjtlKHVLFM_Lhnw2isI", }, "publicSpkiKeyData": "MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEAplf3tdhbLN6TVzNDrOWPmnpw7zJUzGVMGeuThf59Fvzga7ME0996sO9xvQB10clRCnvyUrLCmhIccJQqfNnFnytYRHStMifA4cVdQHbhIzqdoxijprOFcWMDCByAdACQ7Nv09IpKKKU6VyyJD0kufo/Z1UMrtPqQCgcMrZfTQcfmTBoCFBeFsW6HXLgJebjNp2PkXFE9uTZsod38ZYOuKkrHH9newG/7lPGUXiyZ8Wb0laDqi6nBkOij4Lcak1HC+GZXa9Fv94IconwSIieXXlIhWwj9f3Mxw/QsAJM9rLGr/La//pgHvuCZSbu9tQMiVV/bcPvAY6doo6E/Vz2KEwIBAw==", @@ -710,14 +710,14 @@ final _generatedTestData = [ "alg": "RSA-OAEP-512", "n": "plf3tdhbLN6TVzNDrOWPmnpw7zJUzGVMGeuThf59Fvzga7ME0996sO9xvQB10clRCnvyUrLCmhIccJQqfNnFnytYRHStMifA4cVdQHbhIzqdoxijprOFcWMDCByAdACQ7Nv09IpKKKU6VyyJD0kufo_Z1UMrtPqQCgcMrZfTQcfmTBoCFBeFsW6HXLgJebjNp2PkXFE9uTZsod38ZYOuKkrHH9newG_7lPGUXiyZ8Wb0laDqi6nBkOij4Lcak1HC-GZXa9Fv94IconwSIieXXlIhWwj9f3Mxw_QsAJM9rLGr_La__pgHvuCZSbu9tQMiVV_bcPvAY6doo6E_Vz2KEw", - "e": "Aw" + "e": "Aw", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "ciphertext": "IesfgdFWJIBJBODKKQXZuWfudxSF00pUNET6gfXnAL19/x71YaeaXwkhXGQ6Uufjzrx1Ny+zTiIRqAosii0Qozj3XS7dxDXzd96XbFSi/PYIB9mMnpHi7tu7GuzVk7jeXjc28KsAhATUwvgWSUbFBalfG4fUybs4ce06wVvaQ0AVBLVhJT2doBykTeNgLvb0M31HdPWX3Tg+neU9oFA8rhl/nhvPau9+l20SdOVkJFzOhaDYo7WoCLYcwr01VsmuDyLqZFlM/1s7yk4v8Mms4bkipRu8N901qpxO+wNCaOLhO9/CKAwZ2qWXAAMLfeVoto1zWcxsGKBhsFauujUfXw==", "importKeyParams": {"hash": "sha-512"}, "encryptDecryptParams": { - "label": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=" - } + "label": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=", + }, }, ]; diff --git a/lib/src/testing/webcrypto/rsapss.dart b/lib/src/testing/webcrypto/rsapss.dart index 25016d6b..fe926caa 100644 --- a/lib/src/testing/webcrypto/rsapss.dart +++ b/lib/src/testing/webcrypto/rsapss.dart @@ -26,7 +26,9 @@ final runner = TestRunner.asymmetric( exportPrivatePkcs8Key: (key) => key.exportPkcs8Key(), importPrivateJsonWebKey: (jsonWebKeyData, keyImportParams) => RsaPssPrivateKey.importJsonWebKey( - jsonWebKeyData, hashFromJson(keyImportParams)), + jsonWebKeyData, + hashFromJson(keyImportParams), + ), exportPrivateJsonWebKey: (key) => key.exportJsonWebKey(), importPublicRawKey: null, // not supported exportPublicRawKey: null, @@ -35,7 +37,9 @@ final runner = TestRunner.asymmetric( exportPublicSpkiKey: (key) => key.exportSpkiKey(), importPublicJsonWebKey: (jsonWebKeyData, keyImportParams) => RsaPssPublicKey.importJsonWebKey( - jsonWebKeyData, hashFromJson(keyImportParams)), + jsonWebKeyData, + hashFromJson(keyImportParams), + ), exportPublicJsonWebKey: (key) => key.exportJsonWebKey(), generateKeyPair: (generateKeyPairParams) => RsaPssPrivateKey.generateKey( generateKeyPairParams['modulusLength'], @@ -63,48 +67,48 @@ final _testData = [ "generateKeyParams": { "hash": "sha-256", "modulusLength": 2048, - "publicExponent": "65537" + "publicExponent": "65537", }, "plaintext": "IFN1c3BlbmRpc3NlIHBsYWNlcmF0LCBhcmN1IGF0IGNvbnNlY3RldHVyCmFsaXF1ZXQsIGRvbG9yIGF1Z3VlIG1vbGVzdGllIA==", "importKeyParams": {"hash": "sha-256"}, - "signVerifyParams": {"saltLength": 32} + "signVerifyParams": {"saltLength": 32}, }, { "name": "2048/e65537/sha-256/s20", "generateKeyParams": { "hash": "sha-256", "modulusLength": 2048, - "publicExponent": "65537" + "publicExponent": "65537", }, "plaintext": "IFN1c3BlbmRpc3NlIHBsYWNlcmF0LCBhcmN1IGF0IGNvbnNlY3RldHVyCmFsaXF1ZXQsIGRvbG9yIGF1Z3VlIG1vbGVzdGllIA==", "importKeyParams": {"hash": "sha-256"}, - "signVerifyParams": {"saltLength": 20} + "signVerifyParams": {"saltLength": 20}, }, { "name": "4096/e3/sha-384/s0", "generateKeyParams": { "hash": "sha-384", "modulusLength": 4096, - "publicExponent": "3" + "publicExponent": "3", }, "plaintext": "IFN1c3BlbmRpc3NlIHBsYWNlcmF0LCBhcmN1IGF0IGNvbnNlY3RldHVyCmFsaXF1ZXQsIGRvbG9yIGF1Z3VlIG1vbGVzdGllIA==", "importKeyParams": {"hash": "sha-384"}, - "signVerifyParams": {"saltLength": 0} + "signVerifyParams": {"saltLength": 0}, }, { "name": "2048/e3/sha-512/s64", "generateKeyParams": { "hash": "sha-512", "modulusLength": 2048, - "publicExponent": "3" + "publicExponent": "3", }, "plaintext": "IFN1c3BlbmRpc3NlIHBsYWNlcmF0LCBhcmN1IGF0IGNvbnNlY3RldHVyCmFsaXF1ZXQsIGRvbG9yIGF1Z3VlIG1vbGVzdGllIA==", "importKeyParams": {"hash": "sha-512"}, - "signVerifyParams": {"saltLength": 64} + "signVerifyParams": {"saltLength": 64}, }, ..._generatedTestData, @@ -154,7 +158,7 @@ final _generatedTestData = [ "dq": "P-9Go28haSHzAQUza7KB7kkDT8p38G-nZwCb_j7c1V80cSnu9JcRoQf4hq-GQ38XBLxUupHi7MU4CddSerFWR7WWQ9QVPCANd0MvUvfvqkB5hin436bUOMs753Ju4LlYQo2IsbCcfYMU76HIiONgrD3aVnJYvv2XlB-Iq1CZTIk", "qi": - "hjKuj8k5a6Y1oXgPI3VtJeSb7OnY6bXpSBCco5MgnvG_cM4IVlYTcO-H5K__XJ6N6A7oFxzFJ476NKlEdOsCbLjKs4vyaKCid5Wye1k-IRd5xfwRvr7zqsgtCYk5oHjjeXSGk05_sjefCXnTuoyD04O3Ntk8OSgFNEfeR5Q4-sA" + "hjKuj8k5a6Y1oXgPI3VtJeSb7OnY6bXpSBCco5MgnvG_cM4IVlYTcO-H5K__XJ6N6A7oFxzFJ476NKlEdOsCbLjKs4vyaKCid5Wye1k-IRd5xfwRvr7zqsgtCYk5oHjjeXSGk05_sjefCXnTuoyD04O3Ntk8OSgFNEfeR5Q4-sA", }, "publicSpkiKeyData": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkjnySee1hJKiovDTN7M2cKSQTlR80UIKzO80n8H1blWruVYuALKz24pEmalZe2xZYsXix1j+k5+LIvECfKG96R7UKQzeQtCHXYRkCk847bYqAW6pAvEGetlVD0udOR0ZmHvCfKmect7Q11MN8VlsuoB3qA1fEFUBvRzzI9NHN2U74imtorfa756i0EIg2uFFGmUqo+6dY/v9AeuBbvM5Iy2gCePXRQfGVM2TwA26K4Dazxz6VZPQRNaQTwp06M084yA5bUeK3G+sBLJnqnAz+pq/snyMGhfhETwYqEeg1EOFbULcEsurH7DFiCzUr4T2hy6EyhfD9UjC6G/hggNcVwIDAQAB", @@ -164,14 +168,14 @@ final _generatedTestData = [ "alg": "PS256", "n": "kjnySee1hJKiovDTN7M2cKSQTlR80UIKzO80n8H1blWruVYuALKz24pEmalZe2xZYsXix1j-k5-LIvECfKG96R7UKQzeQtCHXYRkCk847bYqAW6pAvEGetlVD0udOR0ZmHvCfKmect7Q11MN8VlsuoB3qA1fEFUBvRzzI9NHN2U74imtorfa756i0EIg2uFFGmUqo-6dY_v9AeuBbvM5Iy2gCePXRQfGVM2TwA26K4Dazxz6VZPQRNaQTwp06M084yA5bUeK3G-sBLJnqnAz-pq_snyMGhfhETwYqEeg1EOFbULcEsurH7DFiCzUr4T2hy6EyhfD9UjC6G_hggNcVw", - "e": "AQAB" + "e": "AQAB", }, "plaintext": "IFN1c3BlbmRpc3NlIHBsYWNlcmF0LCBhcmN1IGF0IGNvbnNlY3RldHVyCmFsaXF1ZXQsIGRvbG9yIGF1Z3VlIG1vbGVzdGllIA==", "signature": "E/rXJqRVnLSUrz0xGn3VmyO9fXCHPqpzzClUFjOJW7fDz8SEDErHbgU/PuiuMdU33vuT2BS/VB49xQz+XZGwIq59fkCXgjsm0itf2tNf3IpdOZx2AZGOQ5Dr87BzMTKO+kmHvWh/HATbfKt15KpHsbFE/XeU6RgLS4J8WAzHD+aEl7FQYH7lEf+H/PKpNuh+dLkzAZTimQnFroMZUR7BjIQ5WnhCcHaL3bhkfBIm88cKcsZwUZ+o+xxIOZY1NdDT/y+a/6k3wckYroTOtBD1XQ0gl2iIT2ZcPc2DLV+45hXfgPdwYMjPsMrP5c2DyXWlo5ANgOtiIjgJtLv3BxeisA==", "importKeyParams": {"hash": "sha-256"}, - "signVerifyParams": {"saltLength": 32} + "signVerifyParams": {"saltLength": 32}, }, { "name": "2048/e65537/sha-256/s20 generated on linux at 2020-09-23", @@ -195,7 +199,7 @@ final _generatedTestData = [ "dq": "NskpcXi9k5voyVydJ5Ha--sK6OmNNYbf6XKXIaY5G1Ys5OA-EMXzuVqeeybhKDkE2ASFERZB1sRyKesyBpsGJjTPcC-P4Vm8LAwbg-GjHaYsinGWJTDUtmmY3d4NEc3vI1l_UP_DwCs8jzyxTpyLQ4lkj4txYMD2WktHqFA7Smk", "qi": - "orrXECNH94Ryo8m11pJABSIV1w5GxHBZvb04twM9ZCgWdycFH9xGYfk-aqT_81XNp2l5ly0-D8Fd6PjwPCOu13KbMRqHtiWRQXCT6xJkCrOAiHqBNoQ0aAOpGIYxUdxUiJI2TlFjdhyE_oGxyy48UTQnK0NSJ5w2Td3FnldUTwE" + "orrXECNH94Ryo8m11pJABSIV1w5GxHBZvb04twM9ZCgWdycFH9xGYfk-aqT_81XNp2l5ly0-D8Fd6PjwPCOu13KbMRqHtiWRQXCT6xJkCrOAiHqBNoQ0aAOpGIYxUdxUiJI2TlFjdhyE_oGxyy48UTQnK0NSJ5w2Td3FnldUTwE", }, "publicSpkiKeyData": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl1xo7WEFdgfLwx62evj5Juxp+teqJauAArISyU1lPFa+I1nNUXe9W6okDFrOJqlGtf6BP9m8H3wJxHOobUPuKpzSR+zMfNZfqGOM3J+iecBhBWtMLgSu38kl3pozkgPeK4r718RwXmng0mI0yV67V6kTiIWn3KzhSIy2mqmX/sgoNOlZGYOGpQH+asK3gd0JV/sl0kPYhlLyeFt8wX5ImhdZvxeRH/7UC7cQd6tbnR3Ut5azJYsZAKHao+XFvrdM7cn+VcGxsMSn1X1Hc5BFxiJI47hCm3UNjbv6fgW4QA/V78wxLY3LW6/edwxmNzJBEX8ch2db3dpWu+JyyTi15QIDAQAB", @@ -205,14 +209,14 @@ final _generatedTestData = [ "alg": "PS256", "n": "l1xo7WEFdgfLwx62evj5Juxp-teqJauAArISyU1lPFa-I1nNUXe9W6okDFrOJqlGtf6BP9m8H3wJxHOobUPuKpzSR-zMfNZfqGOM3J-iecBhBWtMLgSu38kl3pozkgPeK4r718RwXmng0mI0yV67V6kTiIWn3KzhSIy2mqmX_sgoNOlZGYOGpQH-asK3gd0JV_sl0kPYhlLyeFt8wX5ImhdZvxeRH_7UC7cQd6tbnR3Ut5azJYsZAKHao-XFvrdM7cn-VcGxsMSn1X1Hc5BFxiJI47hCm3UNjbv6fgW4QA_V78wxLY3LW6_edwxmNzJBEX8ch2db3dpWu-JyyTi15Q", - "e": "AQAB" + "e": "AQAB", }, "plaintext": "IFN1c3BlbmRpc3NlIHBsYWNlcmF0LCBhcmN1IGF0IGNvbnNlY3RldHVyCmFsaXF1ZXQsIGRvbG9yIGF1Z3VlIG1vbGVzdGllIA==", "signature": "K6Ta3twY7qMc7rgRrIeKdB4UJxLLuXtjgIX90gbLM3buF8IQ/sybnVMeeQeiaiYcwTLSiHvQrBDrBu3TwmJoxeCfGUvoIQqgHEUo5OT536V73UwOGj8q6TCKvJpQBGCePaOtC/19zJhEKLsAQKQqYN8aTvpkfWnpaPb2YIpIu3Y82lC7ACJZoA7XsvpX/te4yjR/KPpFAef7IomhadK3Q3kBZUXRuI/k1aAgkxhazPnP44jsuFkZNQQkhtX0GOaMxx3fn6ggbRBQGsXbnfyrFpHf6xqdd/1nsieApq8o5odeeConouILCC4ikFZj/8rVCqgRjqonXzTffhjzD+bI1Q==", "importKeyParams": {"hash": "sha-256"}, - "signVerifyParams": {"saltLength": 20} + "signVerifyParams": {"saltLength": 20}, }, { "name": "4096/e3/sha-384/s0 generated on linux at 2020-09-23", @@ -236,7 +240,7 @@ final _generatedTestData = [ "dq": "fZQ5ml_q12tZ0AKJEtnEijEFZEPwlvOM6Ti6ZYS0gtwCNH1g5oyOjMJpG9tHqkWV-hFBAMKHW8h4g3wq-nFR_XOd2LV9HIunS5Aph4KhW7qCJJSdIHIgVSWx7KYavYSJu-SkGIw1KmYsVQRwFvIvbHrgHeXnpNhsyVdJA9RwJDdim2jK2gcz0HAPaGwwHkdwOusiJoHbIr3cjduh73aZqjKf3wf4Uk49w3SQrq6RfXGL_Jyaxp4X1-yz_anHy_4Vb0VeHDyHxxFcF8q4cb5m8tyGjAqH5RY3keWlSjO3fedqWuEeG-VmTlaTOBCHwnBjSqsOzBwX_AjVoQAacsrP1w", "qi": - "DvUpb55BEOdRnP8TBSAT0UMbBQ62R_z9in8_LWgV8Sonqrn-sUQ1hlipblDbVzuxdiysfGcixmw120_Nvcns45I-uZ0_vkj6mn--9Dw-mCjDscFgkF8CAz_UV8RruvRXMDNj-xkOV4ssoR_q332IfNG5CDZwZ62dtVIPymdVNJ-5E2tLQlF2KmlN4DkGlm4bKXPHUbA4hvGmiolT5DZD-y0KPWY5zSduR5-aEdXQxKYPEhDd-WZ6duNzR_fnvfORR4nY3qW2cShfuaDvq-eDlOpi_PDpGLNJqTt9Fpm914MKwXi0U_X_s4mCIdfQmcBW1F_J2tQ7egcy9lnWpdQBIA" + "DvUpb55BEOdRnP8TBSAT0UMbBQ62R_z9in8_LWgV8Sonqrn-sUQ1hlipblDbVzuxdiysfGcixmw120_Nvcns45I-uZ0_vkj6mn--9Dw-mCjDscFgkF8CAz_UV8RruvRXMDNj-xkOV4ssoR_q332IfNG5CDZwZ62dtVIPymdVNJ-5E2tLQlF2KmlN4DkGlm4bKXPHUbA4hvGmiolT5DZD-y0KPWY5zSduR5-aEdXQxKYPEhDd-WZ6duNzR_fnvfORR4nY3qW2cShfuaDvq-eDlOpi_PDpGLNJqTt9Fpm914MKwXi0U_X_s4mCIdfQmcBW1F_J2tQ7egcy9lnWpdQBIA", }, "publicSpkiKeyData": "MIICIDANBgkqhkiG9w0BAQEFAAOCAg0AMIICCAKCAgEAqbxoxyaoqvYGdvb5yICMRPNeMuYfwfy7dCuNWq0vF1GVIU9G10OT0CXwG0igMydFfG2m5XjljPThXelFuPJuHHjtlXAEhBnW31JFawabV9Ie5G94FVww+8wcUdoFmbfGzcY7mZaAJW0KadFDGeTPyGSjBCOBSFTIjZK2N779QmfNO1uOXuTtfGPjnl5uGUUH/A9YUGrBXAdThyFZO8JAQ9CqmHYu98BxNbpxxikplp595LjQGgbHaV8q7l5dNNzk116hpG8Ig73b/rjnhU8bDD6/Ge2lJcjkhEINOqBj629cP5i0GMxMS6eZYi0z/S4k78bdCnf8qjnHfbYohBEBc3midWa7ZfUV4EWGawd1bFFISDGWRBRrnKKTwDNlt0mGEZp6+3XNS+LP8Dw+mF93e14tQLW472RagZVRLR+5aQW+7NRsBacknyyDLiHsnaDHmDrVIeNXqEvpBhEWuxhzIyAHFS9gwzL1wbsjG+6gruCnv+ql8Z6mVqMQ49VXul/RsjKsuhtZg12ZTB7OO1g49Q6MSEthcQ0ckik5gC8iErGI1/3gbY94RCfyqTxvkrVmq1ZNxramey9iQO7EeoSdEoD8N4Stbn+5czw2+7uwmEK/3zsPYwCQBPPyme0UAPdj5xUxcfnpnulNOGOEwg8Qsj2YodmvX7ow5UniFh9+e00CAQM=", @@ -246,14 +250,14 @@ final _generatedTestData = [ "alg": "PS384", "n": "qbxoxyaoqvYGdvb5yICMRPNeMuYfwfy7dCuNWq0vF1GVIU9G10OT0CXwG0igMydFfG2m5XjljPThXelFuPJuHHjtlXAEhBnW31JFawabV9Ie5G94FVww-8wcUdoFmbfGzcY7mZaAJW0KadFDGeTPyGSjBCOBSFTIjZK2N779QmfNO1uOXuTtfGPjnl5uGUUH_A9YUGrBXAdThyFZO8JAQ9CqmHYu98BxNbpxxikplp595LjQGgbHaV8q7l5dNNzk116hpG8Ig73b_rjnhU8bDD6_Ge2lJcjkhEINOqBj629cP5i0GMxMS6eZYi0z_S4k78bdCnf8qjnHfbYohBEBc3midWa7ZfUV4EWGawd1bFFISDGWRBRrnKKTwDNlt0mGEZp6-3XNS-LP8Dw-mF93e14tQLW472RagZVRLR-5aQW-7NRsBacknyyDLiHsnaDHmDrVIeNXqEvpBhEWuxhzIyAHFS9gwzL1wbsjG-6gruCnv-ql8Z6mVqMQ49VXul_RsjKsuhtZg12ZTB7OO1g49Q6MSEthcQ0ckik5gC8iErGI1_3gbY94RCfyqTxvkrVmq1ZNxramey9iQO7EeoSdEoD8N4Stbn-5czw2-7uwmEK_3zsPYwCQBPPyme0UAPdj5xUxcfnpnulNOGOEwg8Qsj2YodmvX7ow5UniFh9-e00", - "e": "Aw" + "e": "Aw", }, "plaintext": "IFN1c3BlbmRpc3NlIHBsYWNlcmF0LCBhcmN1IGF0IGNvbnNlY3RldHVyCmFsaXF1ZXQsIGRvbG9yIGF1Z3VlIG1vbGVzdGllIA==", "signature": "CArBMKyWOMM0yBQvCtT6FTx9xRpvp962+oiaFr3m+VX9VUn8n5h+v/ItKNrZOl4aya2vOsVOgFtgmIvMmxIAaqMYFOV261Lxku2sQad+ZUN8M2hthpMiz8euWlwuRbCv346tIVjWJrQP4SLnRQ3PNsqdnNUn3yqe2Qsg1nDyfxexO/ePR4W0ymqNQeYdgSXmyb/dhurgee8NCh1cemZbfrog7CzW08M6Un8H7NpKqKjRFDj3VouezzFE2OcNp4/beE7i7aSn3XXLZWW0s28JUYq0kJElyu4Pqet16qry7DB9kjXSFP2vGtAhP8iAFjNNe8VZIIkVi6bcMFoEP+iigR4nhUchMSfi83v3pncpPJCLtaJrWACOJ5Hhy1W/rxw+Wvl3//DZbMkHxu6GYpjJrTmrneZdNXmOLNaCJGmKQmMFHIe94hmC79qcEfFAvmTePhaYAs2U0oEdvWyasRGWNLw2zrHgt87Z4x1eyrFhZXR7g3dgu5tzyQmJkMnohKDehnwtps1AF7kdK8buQjeKy+pbjnzK/BRxiFqVkCWWuqWvQltiVftfdbUiCXHQWbF7DFuaJt8KWEq3/hLgk0cgXcsxxvzUyWqWFz3dazCWz18Geb9amzcmPonm4aZoITPp/m2gaeMM1WxZ9J9CO2XRwOBVBRTOmh6qJ/KigKwuy44=", "importKeyParams": {"hash": "sha-384"}, - "signVerifyParams": {"saltLength": 0} + "signVerifyParams": {"saltLength": 0}, }, { "name": "2048/e3/sha-512/s64 generated on linux at 2020-09-23", @@ -277,7 +281,7 @@ final _generatedTestData = [ "dq": "icR1cYiEwONk1JlBChIE_pxTr52J0CjA1YCy1ostTifdu-5UppieOZVNlAvLulEM5TX9zb68UZgTfoO5p7dmrusivWJtfJWEpp5M2eSu6GIJ1hleOmbY2GEuuCwiye98xsjbpKh0tj9KiKv_nNBJ3AnNyRYU5rJBLCMYZqL-n68", "qi": - "yD7CVqgLzyff5sFY_q5xQqqFdAfM1l-tc8iVf4WsqFGjHmq3HtJyCg1nmc9Zc5ATy-zqDdzhBsFh3xEPSn45UcmlmPTjGQkqu9MgX3bC6KUjKmnl5CnfcRbq0YOZIBhfJupHwdt_inZY5yduvt7ieSYYdJQngkJghFW0ECu7JQQ" + "yD7CVqgLzyff5sFY_q5xQqqFdAfM1l-tc8iVf4WsqFGjHmq3HtJyCg1nmc9Zc5ATy-zqDdzhBsFh3xEPSn45UcmlmPTjGQkqu9MgX3bC6KUjKmnl5CnfcRbq0YOZIBhfJupHwdt_inZY5yduvt7ieSYYdJQngkJghFW0ECu7JQQ", }, "publicSpkiKeyData": "MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEAzoV+fSsyLspyszx3quvhfJltA6ysu2gJP4Mp15LGFJkqmtR1oasEpodiO0Edv24J9B8Y6Z2VU+Aac/bkBcf0+P7CaRigGJuTOh1gXNffHQqpEltTn9Soo7Cq9kYe4eTLCMlH0LMkaQCK5OW4AAQk12R3mASfxZiEl9gaRRj/q6s9tfgxK+Nk+Vzbt7SdJSBmhZoOk5gFKQSfem1IpTGcZA/pptLRQmoRKSNjMmYsN1NLChoCm/LncPDOmp15qrKAQmlk7+cwac2delFDqnliX8Pqb7ev1pf05wEYJptP1s1SsJdQ4hlEfMRtlZUyvZ7nBfV5c9UH3kfjeb14Lk+UFwIBAw==", @@ -287,14 +291,14 @@ final _generatedTestData = [ "alg": "PS512", "n": "zoV-fSsyLspyszx3quvhfJltA6ysu2gJP4Mp15LGFJkqmtR1oasEpodiO0Edv24J9B8Y6Z2VU-Aac_bkBcf0-P7CaRigGJuTOh1gXNffHQqpEltTn9Soo7Cq9kYe4eTLCMlH0LMkaQCK5OW4AAQk12R3mASfxZiEl9gaRRj_q6s9tfgxK-Nk-Vzbt7SdJSBmhZoOk5gFKQSfem1IpTGcZA_pptLRQmoRKSNjMmYsN1NLChoCm_LncPDOmp15qrKAQmlk7-cwac2delFDqnliX8Pqb7ev1pf05wEYJptP1s1SsJdQ4hlEfMRtlZUyvZ7nBfV5c9UH3kfjeb14Lk-UFw", - "e": "Aw" + "e": "Aw", }, "plaintext": "IFN1c3BlbmRpc3NlIHBsYWNlcmF0LCBhcmN1IGF0IGNvbnNlY3RldHVyCmFsaXF1ZXQsIGRvbG9yIGF1Z3VlIG1vbGVzdGllIA==", "signature": "KULjcZPlS/NFJcMqUkAWdtzjffWirZfsBTJ9lePjxV7k9VLyLtcgMzbDpdAmOy3BcF+rHu7ibXwSO1cSTxAoIU41svzCcsAnHWJwNOlSamPCjU3X+5izJhg0XvjS+AB6daxzXqn4u/dMweStzWRB7ohs5TdC6xUWlhjlWwJbqsneUxpIHURqfATJH+0Tucho8/C0vc6b8ysfMcqzHWJ5Amq6L3iN/6LUizw7lR222zxAGsixSU4tkc6JyZz93KNRSBFAI1RcGbe9qR0PCCdyhd3+6OiTWkW6BHsJrw48zao7NRdHPQ/dZWhhYmHFrCdPLLe6CdoJY/zSBe9HKsthMQ==", "importKeyParams": {"hash": "sha-512"}, - "signVerifyParams": {"saltLength": 64} + "signVerifyParams": {"saltLength": 64}, }, { "name": "2048/e65537/sha-256/s32 generated on chrome at 2020-09-23", @@ -317,7 +321,7 @@ final _generatedTestData = [ "dq": "ReKEV1Z-fRGhkSuvSPEJMrxNqThbezJllvTj5HYs_DIKKshXMUfLCPHPU5JW74rVZ45vBabpqTnd0xeRBbJnzHttD72jY0teSoPTr8Nu5FPhhJIxmdcnuzTK6nYiNSiUXIQhYyzNCNdJRLmE5naSaeILgvTCHi3xYw2ogVPRL5k", "qi": - "m8apbmLZtgGn98-UCrGi3fWAfB-OekEf8e5xAawFtRSExq1Zrm4uyUSr3NDMdfW_SuA3NTlJUVzD0y-gJfoUrsXhYUyjyvf88h-uwhk2VZ-AP2t60pBhOXoNL2H0L3az14zCuhxK5rcpmojuJqxPabakByknP1rWrot_cynFq68" + "m8apbmLZtgGn98-UCrGi3fWAfB-OekEf8e5xAawFtRSExq1Zrm4uyUSr3NDMdfW_SuA3NTlJUVzD0y-gJfoUrsXhYUyjyvf88h-uwhk2VZ-AP2t60pBhOXoNL2H0L3az14zCuhxK5rcpmojuJqxPabakByknP1rWrot_cynFq68", }, "publicSpkiKeyData": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApwoApa2QNTN5MW6NsxZInO0O409QrItb54uY9qA315JPnSiEgsighLQSbjoBD47pUajKt0mZ8e5vmBMwif93ooozjMQGRWQ6O8WWJ0jn3Q2FuAzmATcpgt10IGEAjW3fGHmc38qO5BYo4Rf7q/chkiCjFf44GHLNUFM9HMom7pfSOXnC7f712yKoPVH5PP08kVSsfMbPr8zKuVJr+qECqqEk8IMrDkfUy6gamjK/hZf1svy4AUKOGW+ZKQBNu4zsdKbCvtZzKmoR/DU6prfU3wjwEDlIMUj6IuiDkYYTYDk7fuvK4A8Gs3yffKuyFgPy2jVeEMT4nrAgeALwZvJ5/wIDAQAB", @@ -326,14 +330,14 @@ final _generatedTestData = [ "alg": "PS256", "n": "pwoApa2QNTN5MW6NsxZInO0O409QrItb54uY9qA315JPnSiEgsighLQSbjoBD47pUajKt0mZ8e5vmBMwif93ooozjMQGRWQ6O8WWJ0jn3Q2FuAzmATcpgt10IGEAjW3fGHmc38qO5BYo4Rf7q_chkiCjFf44GHLNUFM9HMom7pfSOXnC7f712yKoPVH5PP08kVSsfMbPr8zKuVJr-qECqqEk8IMrDkfUy6gamjK_hZf1svy4AUKOGW-ZKQBNu4zsdKbCvtZzKmoR_DU6prfU3wjwEDlIMUj6IuiDkYYTYDk7fuvK4A8Gs3yffKuyFgPy2jVeEMT4nrAgeALwZvJ5_w", - "e": "AQAB" + "e": "AQAB", }, "plaintext": "IFN1c3BlbmRpc3NlIHBsYWNlcmF0LCBhcmN1IGF0IGNvbnNlY3RldHVyCmFsaXF1ZXQsIGRvbG9yIGF1Z3VlIG1vbGVzdGllIA==", "signature": "h7OfcLBKfghoCt9kAYd2MZwmMK1xkV9wc/yKq5WZ/o8JmdNjOv9dtE1AgoLVdSJKHmC8lapwL87JU/f77a4N4gxWJCmG9lDS/fUX2Ahx9gT38OVfiREo9iuB2F/9RvKIOkc7qMxXxmd2KjlSuwET6qjWYa4Xy3qpfMYCqkI5t2C8+CH3sqbeQqMnZABmNJ9Ob0JSWaUYYZj7WQtVVUpx+YAe/GYp79xPwV3WFkHJXJNj4XuipmiGr1MNPS0+LrC4YzCFIDajuVpCoyDEjZrO3XRXW4KbjkSiVlxFFqT67tPjFtajpGlQP6vREThY9e/N+yYhEVORuofirQpwqecsHA==", "importKeyParams": {"hash": "sha-256"}, - "signVerifyParams": {"saltLength": 32} + "signVerifyParams": {"saltLength": 32}, }, { "name": "2048/e65537/sha-256/s20 generated on chrome at 2020-09-23", @@ -356,7 +360,7 @@ final _generatedTestData = [ "dq": "6Tt06Ler5zsdb2BU6Xma_9Is5K4-MU9qM3QqfFAnwIrsaW3bxQwcTQl_wDSQogMF-oL_vFOVhdL69t7lwPr1u-NHkdS9_IH3FEnlSiifu332L9WmaxSwCo9TZkw_byqZWj0fP-JHfqtg2WmnVYeRXkgBhXFKgpYoAvVYbZpY0Y0", "qi": - "B9ewCzL425qxKlgk3-yxZo4866GQN-j53LJksk6Il27Yw9huK8Giiuqd5ND_BA482OSySEQB6xM_UvA0za8iiR16pCbaGJjlCbB867xa-I1xRFixzpS6fmZnf6Uh8r7oxJmRbZWXqwD7BGT8LfEuyhfB3rA1mGYCYEvHOPfWQs8" + "B9ewCzL425qxKlgk3-yxZo4866GQN-j53LJksk6Il27Yw9huK8Giiuqd5ND_BA482OSySEQB6xM_UvA0za8iiR16pCbaGJjlCbB867xa-I1xRFixzpS6fmZnf6Uh8r7oxJmRbZWXqwD7BGT8LfEuyhfB3rA1mGYCYEvHOPfWQs8", }, "publicSpkiKeyData": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8IMrSaCdoVkmIIZ3O2fFbcm6mDXTGLG4zngZYDsaH/Awp9SFy7jDB4ioK+M5GsmU3URT+JL1jeEtH7sbHg29i+42LiOdJ9Y88fkRSiz8IrEe0gEuAcwDJMB6lyl99/R9QTN6SUyawRuJf8aFXn0WN42mNftO2hYwJaAMzfRNgFBcHmVeDp5DQsANtg2KIor+tYNgnD2RdNqqGNtGV0OLh2wcOlOjOSn6CVtDWM6At+kg20GFxnZrGydeiOZ+WJbY89j9Q5uki2CsiOGOL6ilR+KOICs7xB36cqXPs22VE6AfXPX7oxfni5Y5VoDoQQmkhgVGdd6ulgqw8s335AyHzQIDAQAB", @@ -365,14 +369,14 @@ final _generatedTestData = [ "alg": "PS256", "n": "8IMrSaCdoVkmIIZ3O2fFbcm6mDXTGLG4zngZYDsaH_Awp9SFy7jDB4ioK-M5GsmU3URT-JL1jeEtH7sbHg29i-42LiOdJ9Y88fkRSiz8IrEe0gEuAcwDJMB6lyl99_R9QTN6SUyawRuJf8aFXn0WN42mNftO2hYwJaAMzfRNgFBcHmVeDp5DQsANtg2KIor-tYNgnD2RdNqqGNtGV0OLh2wcOlOjOSn6CVtDWM6At-kg20GFxnZrGydeiOZ-WJbY89j9Q5uki2CsiOGOL6ilR-KOICs7xB36cqXPs22VE6AfXPX7oxfni5Y5VoDoQQmkhgVGdd6ulgqw8s335AyHzQ", - "e": "AQAB" + "e": "AQAB", }, "plaintext": "IFN1c3BlbmRpc3NlIHBsYWNlcmF0LCBhcmN1IGF0IGNvbnNlY3RldHVyCmFsaXF1ZXQsIGRvbG9yIGF1Z3VlIG1vbGVzdGllIA==", "signature": "KGgvOpAtBRahylJlfGiUjCA5+0XpHg7XOLyJams5FlGCg+yzLbKlIi0Nzynip9D1H5Dicrj/089nVARgPrFiXXb0e1PX8Szr0yiT6HAzubieLl+eTsRGKDh2qH/1EJ8dXYgMxdoJWCutDBRaRjS20CHi5oxLul7Uz8eOwIDV8lJ9OBM9Xu9vrenPFUSZDmtVuhjVXvvgGQ3uNxh7iUdjl+NmjYclYj8kMMIFtZNJW/DIXHTKvdoxEhm/Hb7sLi5iyiZMy2pEW/nXf9RcGdJDOrQmHEV+YXIT2j9po7d3KO11SKuoqvTddKIhWX2hYDE04L7wxjdneDuwetKPPbxljw==", "importKeyParams": {"hash": "sha-256"}, - "signVerifyParams": {"saltLength": 20} + "signVerifyParams": {"saltLength": 20}, }, { "name": "2048/e65537/sha-256/s32 generated on firefox at 2020-09-23", @@ -395,7 +399,7 @@ final _generatedTestData = [ "dq": "YQ99a-IcLLpYnGzO2TuRamzcmHL53wboi6ljj5zmG-X15i1wugkBqHvzpCEA0_74b5Hbsku-4_2AdvBAcBjpYOs1e6ZTqub5abKyiUeJBqG_8FNKfS9AkkL3TN_xcijefIXAMUCagsvHRqm3lFb5ceF-uGjxBFQEWwbUmdoXXnU", "qi": - "umBmlTsQFsAR3fZyUnbwUJmrlgoKzWhWeA2g2asciTuG4aZow64EsmzMCArYOTZvruXBBLZ6RGJ-jSTTfRcOyqw9AH0hiSmb3Nwv-vNpfypcu9UlXy9MQUozTA4poFS_LmFy7qWmdaCcXG09gilWUThLTj6os_4gm0i8jz4E0k4" + "umBmlTsQFsAR3fZyUnbwUJmrlgoKzWhWeA2g2asciTuG4aZow64EsmzMCArYOTZvruXBBLZ6RGJ-jSTTfRcOyqw9AH0hiSmb3Nwv-vNpfypcu9UlXy9MQUozTA4poFS_LmFy7qWmdaCcXG09gilWUThLTj6os_4gm0i8jz4E0k4", }, "publicSpkiKeyData": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8vD4Ki4N6lxPirEpQY6yxedX6srrjPvGKyJsD7x0EMkvP0pFTK7ijscCm1gFJWyEC3r4heC28fADqEN+LbreuWm+tGijyQcV4S+bGOB2KcIFuhLFhfSV6Dmupcftf8T5SjBm3ljNrLdIbuPyQPHOiCBPD1EAmopF6AwcJbXLd4D6bMXTeCniIlsO/gfTmpW5j6fuJ767BoUsFy4OUjK/NT4k8AlLC5/fu04RSH4S5XxNzYMBgAUN4X+v2sHwTjsy1uPL7II5y1kz2nnTMCWNQdrsHl0zpZsFZfrbBzUr3qfKaNQ2by9rTkpyPHemi0fO9jsVQkoxEEs1Qp3NIq4a7QIDAQAB", @@ -404,14 +408,14 @@ final _generatedTestData = [ "alg": "PS256", "n": "8vD4Ki4N6lxPirEpQY6yxedX6srrjPvGKyJsD7x0EMkvP0pFTK7ijscCm1gFJWyEC3r4heC28fADqEN-LbreuWm-tGijyQcV4S-bGOB2KcIFuhLFhfSV6Dmupcftf8T5SjBm3ljNrLdIbuPyQPHOiCBPD1EAmopF6AwcJbXLd4D6bMXTeCniIlsO_gfTmpW5j6fuJ767BoUsFy4OUjK_NT4k8AlLC5_fu04RSH4S5XxNzYMBgAUN4X-v2sHwTjsy1uPL7II5y1kz2nnTMCWNQdrsHl0zpZsFZfrbBzUr3qfKaNQ2by9rTkpyPHemi0fO9jsVQkoxEEs1Qp3NIq4a7Q", - "e": "AQAB" + "e": "AQAB", }, "plaintext": "IFN1c3BlbmRpc3NlIHBsYWNlcmF0LCBhcmN1IGF0IGNvbnNlY3RldHVyCmFsaXF1ZXQsIGRvbG9yIGF1Z3VlIG1vbGVzdGllIA==", "signature": "GsigyTAaU70nY7gI2Lo7JOGODXlpNmKf0w5EEjadN0JL2oGRC/T2P1q9FzZvN4IPXn9RYpaxAAXJvEWDWpMu2R5dNnRIgGjdiKpmLk1BjBTQx17e4j98RxZjywBt8b8nhBjLxHaMPRhjXHtO9GlUtXdu31UuwyNi2Q9XA+t/wXJMy1reEDgqb9No5Exzbhf56IwIV6XvZk5U/RxG+M67DWd/tZ4kGVRkZaK02QOYl2VO5uAlFnYw/388VEAm5Q7PfHtFjDIpv5OH0Xzqv1inIldIwet0iH8Cjfwe7r+bEiERpbW1TixFPVWK+2wSeD85EqRjYR8U4IDw4piTjhkIBA==", "importKeyParams": {"hash": "sha-256"}, - "signVerifyParams": {"saltLength": 32} + "signVerifyParams": {"saltLength": 32}, }, { "name": "2048/e65537/sha-256/s20 generated on firefox at 2020-09-23", @@ -434,7 +438,7 @@ final _generatedTestData = [ "dq": "D1ZvltvjMwz7yJlKDKF0I7XLavcJvXd7vBA52-aZQgB2Ur50DpnKl4CfCJOnuD8XZ80ZWgC-FcXS4_UDdiqO_utv8DTE5XHxQIjUS9iCXrLXFAxzBhOZwvtgP2XZOyzIcmdl1NZn5d53M6iAT1beZAtqklE7Js-R-7DDbZWj7rE", "qi": - "PhYY-l51WTRXhHVwqApYjy7b3rfUN-7959owle4BcUQg3Cy984yTgsL4fTlQCxYDyhEoGdgBu4ZHW9FfhIsbX9F4EINcwA-sBPBto1BOymvO_3S40EylIaiF9kDKh1UT6GEQ_8jgCP6QMhl302a1ZGy5vGtU9KpdA14fuPQ9icY" + "PhYY-l51WTRXhHVwqApYjy7b3rfUN-7959owle4BcUQg3Cy984yTgsL4fTlQCxYDyhEoGdgBu4ZHW9FfhIsbX9F4EINcwA-sBPBto1BOymvO_3S40EylIaiF9kDKh1UT6GEQ_8jgCP6QMhl302a1ZGy5vGtU9KpdA14fuPQ9icY", }, "publicSpkiKeyData": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5veHKf4R3LcvP5EfgbG2RexfHlDK86yxteV4tX7T8Zm99YiFyhMYmCNlNAuC3fGqzIkYwv3CtEDd40/a+yefiNgludFXVaBQQdnWKSy0u8IqskJDoazf8xZz0SqaF2Rat0T864+RoB54COvYAsEac+BGM5yoTrcZunKdTW1dpBzEWyp7q4Lat76ybOLb+7sYPTyeRm4k4pbyn0Pb7JusseSoQ2CqDatOhyHTYSX5vgKBQtZtVBTbpTrPyXHuLKUbwZg13JpdVaTFpOvS3WnA4TsiqYARo+fU0lnacCZEWlh3zW5PmD5jzBT7MHUgradY1kZuxQ9XKvGA0/4aLICaSQIDAQAB", @@ -443,14 +447,14 @@ final _generatedTestData = [ "alg": "PS256", "n": "5veHKf4R3LcvP5EfgbG2RexfHlDK86yxteV4tX7T8Zm99YiFyhMYmCNlNAuC3fGqzIkYwv3CtEDd40_a-yefiNgludFXVaBQQdnWKSy0u8IqskJDoazf8xZz0SqaF2Rat0T864-RoB54COvYAsEac-BGM5yoTrcZunKdTW1dpBzEWyp7q4Lat76ybOLb-7sYPTyeRm4k4pbyn0Pb7JusseSoQ2CqDatOhyHTYSX5vgKBQtZtVBTbpTrPyXHuLKUbwZg13JpdVaTFpOvS3WnA4TsiqYARo-fU0lnacCZEWlh3zW5PmD5jzBT7MHUgradY1kZuxQ9XKvGA0_4aLICaSQ", - "e": "AQAB" + "e": "AQAB", }, "plaintext": "IFN1c3BlbmRpc3NlIHBsYWNlcmF0LCBhcmN1IGF0IGNvbnNlY3RldHVyCmFsaXF1ZXQsIGRvbG9yIGF1Z3VlIG1vbGVzdGllIA==", "signature": "jgySLT7/DYeqy23lJlyB2MB+b0+6kcIbaMnhJAk9f7E2saBK+gGprBkOSNcXHcecm9zV/4ifFTGwQBwE2jsg9CCD5E4JIZ0d/sPs8JZngVqJtJABHXo8CMHe8PqENJnR3BtAnPw9bqmi6riPcyEN10S/LSJK5rB4+YaqzIgiexdWFHiaQtPJQ9P8lnYSJobNKtKVM+IZqUT8sHVxMPxEMnpWelum7HWc8ssc8j4yKW8V6VIiDYwVT9Jy2wUvflpLWD80wCzS974clCxB7eunlzyfPR+Pod4pY5XObGsR+vz23WMjD218dubwss6T9SO+GEISdOFFjFLwOUj33fbgqw==", "importKeyParams": {"hash": "sha-256"}, - "signVerifyParams": {"saltLength": 20} + "signVerifyParams": {"saltLength": 20}, }, { "name": "4096/e3/sha-384/s0 generated on chrome at 2020-09-23", @@ -473,7 +477,7 @@ final _generatedTestData = [ "dq": "mzuCnfnf61LxRWCEDdddAWwhIKABXOFsNiKsMosWENW94nHpy9253X4Qi0LwSl2vHTnxcWzzIArrSK8GG-VvYYO9LUkhG89VcDlV4i8pe5Ok7ihq-7uoLfYoauQm6qjrXreM7KuBqb_OouKWuFK6bWMm08pwNjBGgtRIi_2XiZoYeKzXFd-6tvsC91-IV865_-XTZd3Xo1fJHCtDv4ynuxdHYJNB4Gl8fiy0I6Zgm3H_sxQ_9Fy-kGHUh5r2IbGW0ykdWmoInKxzIJ2Qhi7Zk6Xi9vvBYJQtrQQc4LUxGHLU2p2N5AgyXIcBznXAzdLPYaInFfxufF-avb7p8r-OIw", "qi": - "b_yD0DoJ5lvBORFfPeTXG2HPTM-Oi6S9gM0uUM5lGriXpmt52a31D53VeQIq7i7ysCCz4CPbrlQyG3MQFTj5pFxoUJBQuiNlo19k51FuoO4x_XF_5mjmdX4HZycxD6v5CUyUap8UwgT7MpKBd7kIMsgxM91dRs1PCUiFa0HdVOH2XRINI4C-Y46recoCn0oYm1Ia3a66DJouiaC5NELCvrXFIwKuVB1ulSg55-aI-PSVo4pbUJ1PQeLqTXaIrfsQnrr_oFiKTWhGTDdDo1_fVbCCKATtpIHiHDVlVEf2uxZvjW4fBPmyl3zEDseY6cQ9vP20EKgxWr57wQ3cSXppOQ" + "b_yD0DoJ5lvBORFfPeTXG2HPTM-Oi6S9gM0uUM5lGriXpmt52a31D53VeQIq7i7ysCCz4CPbrlQyG3MQFTj5pFxoUJBQuiNlo19k51FuoO4x_XF_5mjmdX4HZycxD6v5CUyUap8UwgT7MpKBd7kIMsgxM91dRs1PCUiFa0HdVOH2XRINI4C-Y46recoCn0oYm1Ia3a66DJouiaC5NELCvrXFIwKuVB1ulSg55-aI-PSVo4pbUJ1PQeLqTXaIrfsQnrr_oFiKTWhGTDdDo1_fVbCCKATtpIHiHDVlVEf2uxZvjW4fBPmyl3zEDseY6cQ9vP20EKgxWr57wQ3cSXppOQ", }, "publicSpkiKeyData": "MIICIDANBgkqhkiG9w0BAQEFAAOCAg0AMIICCAKCAgEA20qDPAaZ212pPRyPwHG1J38IAmotfs+sg0nypCRWtKdwGzcjZBdP/WVgnj8+UshumJ5IKbQHGdcgY3gEgRjFwwqiIZHJjH/zp5g+sTK920qj8JAdfeabRVEIXd9OIhkT2vIvTriY9AKqYDSgcpOl0weNWTndFXSZSIOg3iEvzFETU0WwHQc5daT4O47hqLSenTPfyIM1yi3sIVzl3cqRN7JBLXXRCBdT9IogrPhxggA0rmwQ6shNZbUbCtXNYbRni2yYziQ04IZqbae5ZDTqysV+u/xQM2maDDsq5tuSirafLQh6pHvsESMwl466JdAvxvXenB3i224OYFF8B2UkWpsHzxbUxSGKAUHogmhoccUYNjbf7lUSr+Uxm7FBJi7HACDEnMKnTEVzcUyBOSVuXTBODQn4t03JpXCfl5KW+rRrCcOvdOmeqJTL0o7kg13YQCU5LAxod7PqRKoOkw8NRsmn+/5JfA88lUJ5N3LqosZsKEWUaU7owwJWdcnTexQRzqqlnPKF1zUmRdaE3mPjX3gTR5z7kcuglMlesZbjhJ6l24khBMSw8tSJD99jUnVsp2MhbdM48X1PN77rN6KFr4ijLPeerJ4YTOzZOf2mshmPaI+Tur2ZrM6aIS6uRT40qQn4HBmRCB9p56FHgEZLfnnGPjYwhLDw71PIoIAIsu0CAQM=", @@ -482,14 +486,14 @@ final _generatedTestData = [ "alg": "PS384", "n": "20qDPAaZ212pPRyPwHG1J38IAmotfs-sg0nypCRWtKdwGzcjZBdP_WVgnj8-UshumJ5IKbQHGdcgY3gEgRjFwwqiIZHJjH_zp5g-sTK920qj8JAdfeabRVEIXd9OIhkT2vIvTriY9AKqYDSgcpOl0weNWTndFXSZSIOg3iEvzFETU0WwHQc5daT4O47hqLSenTPfyIM1yi3sIVzl3cqRN7JBLXXRCBdT9IogrPhxggA0rmwQ6shNZbUbCtXNYbRni2yYziQ04IZqbae5ZDTqysV-u_xQM2maDDsq5tuSirafLQh6pHvsESMwl466JdAvxvXenB3i224OYFF8B2UkWpsHzxbUxSGKAUHogmhoccUYNjbf7lUSr-Uxm7FBJi7HACDEnMKnTEVzcUyBOSVuXTBODQn4t03JpXCfl5KW-rRrCcOvdOmeqJTL0o7kg13YQCU5LAxod7PqRKoOkw8NRsmn-_5JfA88lUJ5N3LqosZsKEWUaU7owwJWdcnTexQRzqqlnPKF1zUmRdaE3mPjX3gTR5z7kcuglMlesZbjhJ6l24khBMSw8tSJD99jUnVsp2MhbdM48X1PN77rN6KFr4ijLPeerJ4YTOzZOf2mshmPaI-Tur2ZrM6aIS6uRT40qQn4HBmRCB9p56FHgEZLfnnGPjYwhLDw71PIoIAIsu0", - "e": "Aw" + "e": "Aw", }, "plaintext": "IFN1c3BlbmRpc3NlIHBsYWNlcmF0LCBhcmN1IGF0IGNvbnNlY3RldHVyCmFsaXF1ZXQsIGRvbG9yIGF1Z3VlIG1vbGVzdGllIA==", "signature": "Ro2pfQgafc8rXswnN7PNfOwPmGl4NPhO+I7UkubYTHvGuEz2Si9AZESDnpQZbOHFdIEcEQq4fhGdmI7TKIsoPTDCDf6jNhLeY7j8KpoqKegiL4QCFNxCmxo0nxzJbjaCeCW6jIf6tH3e3ezR9hTLQixUD+rlwTRzgZv0mvr27PVHcMjnp+vttx8cuBde2aYXGayNdD2KQK6A5eLKBPEzktcw9UNzAjdiaJrPJswFzjPVJGEiNfid7ML5PFbpCuDPQA3pARUXkeVc1+Jkm47PeFHuH7FGiMMZd0RziMJ+dtq2A1VH8/n42ghJhs15qhlQi+obnLG5fF0tKIpQ4/Ov8sUEluDQSCe9X5C5YTV+dljwTGPh7oVeU61FtaLTBb8nTxugezYzs2wo+GJvbpAI9cfu3kLjeNlFrTAZMw15z6RYh5mWcgD//tv1VhczRnGxg7+H4M3kToCp+T+WijbS6bBOG+uJIP8FnpHtEP+ys0vAfIHgY9yqz/Jc2abzYVPu9bYQsKdoWpLrMLViaIrIxY2CMGxz524nDRCu7KxQbmmq7wy9AhXA7i6nt0uBLH95LBaF7XeRAzjO3XDaqm7kV8GS5DduHh6I4j/dVqI++zzQSa/Z8tACx4MSwy+DwhRiVyIj1AiTajte3FukDw7eliwFnX/karcot8RcJU00Qi4=", "importKeyParams": {"hash": "sha-384"}, - "signVerifyParams": {"saltLength": 0} + "signVerifyParams": {"saltLength": 0}, }, { "name": "2048/e3/sha-512/s64 generated on chrome at 2020-09-23", @@ -512,7 +516,7 @@ final _generatedTestData = [ "dq": "qR7g-Vg8dZJg0bpEJd3C5pvfwnaOlzzNs1ZMp8uHUUqlzKulJV8IH1nKQbTYLRMHF5tjD1A3smRYXi7jU1AoWRsx0sjG088sLh6BPNdjLiMK2_UJsdbWM8OVi4FL7jXGPyggya8QscwsJMFhrwqv-mdoAQPgmQICCcuZ5bbuCls", "qi": - "bREutGHvgXWCLaD4Unb7viatykzzucqcYvR1xfR2L-be-gWIF9PDlFmz2ekSq3Fbd8iu72X45iS4RxIAElmyf3HyLC1yilDllppM4x-AQ4EYeZJFcmQeTgBUXawMdEto0fahsu_h12mL_dmqUlCURZxo6TW0LomlOQaY__QPVy0" + "bREutGHvgXWCLaD4Unb7viatykzzucqcYvR1xfR2L-be-gWIF9PDlFmz2ekSq3Fbd8iu72X45iS4RxIAElmyf3HyLC1yilDllppM4x-AQ4EYeZJFcmQeTgBUXawMdEto0fahsu_h12mL_dmqUlCURZxo6TW0LomlOQaY__QPVy0", }, "publicSpkiKeyData": "MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEA/FQttjeWjYIbKb2/yXgdsnKP5bRjPhCDUifhYoAMEwEM2s9KkFclT6wffDUppLP34Y1JiLE8pNaDY9GlNf7Ik1n3OZirXHCsOl+erEMyI3mGhY8bbYXQSayfplB/3IKjo8mDyV8EnKAum8drSXHz2DVuniRS5l5RS0oLQHc1NSoCTZ/EDG2Jx8b7rZaDHadZ0/XisDYwcf1EG4KJl0TilGl3VJukmeQY7A8FDisPoPAz/CBwbTvn+iAF4MD8bVHOdWld82/WSjWg+rojXPpW+8kDaiKy5bKuB8fSRT0nJA8e6MidpDb3liyj3IJzn34VtTkNS7qANrsAynbwU0uwZwIBAw==", @@ -521,14 +525,14 @@ final _generatedTestData = [ "alg": "PS512", "n": "_FQttjeWjYIbKb2_yXgdsnKP5bRjPhCDUifhYoAMEwEM2s9KkFclT6wffDUppLP34Y1JiLE8pNaDY9GlNf7Ik1n3OZirXHCsOl-erEMyI3mGhY8bbYXQSayfplB_3IKjo8mDyV8EnKAum8drSXHz2DVuniRS5l5RS0oLQHc1NSoCTZ_EDG2Jx8b7rZaDHadZ0_XisDYwcf1EG4KJl0TilGl3VJukmeQY7A8FDisPoPAz_CBwbTvn-iAF4MD8bVHOdWld82_WSjWg-rojXPpW-8kDaiKy5bKuB8fSRT0nJA8e6MidpDb3liyj3IJzn34VtTkNS7qANrsAynbwU0uwZw", - "e": "Aw" + "e": "Aw", }, "plaintext": "IFN1c3BlbmRpc3NlIHBsYWNlcmF0LCBhcmN1IGF0IGNvbnNlY3RldHVyCmFsaXF1ZXQsIGRvbG9yIGF1Z3VlIG1vbGVzdGllIA==", "signature": "r49KH0vXNrTznZ+y6slnFAIQ7xER5LiYgIXcLrJ2rvTl3qBG8CbLBaHPUEajomsHl98dBvrL6G1d15J6wzMuhMs6GXyBJplStMFadZm/XcxR0evW6a3udnQgWCppQOJLgClBChDqRWYJeFGG3VGeeM+/2XjfARmlQniwJF+42LpiadpwRpYM51UkEyW7ni4E5hwYylqU4zohlLtY+62OXSLZfA3nykYoIc0h9j6CdfNtekUNS2JFvsHoFAyhrkVYxrgeUkt2WMuBD7dCYaYqnKTpQQB9yUVOS6jKAt1QjCBFeR9Q+Tjjz/qR2sDNBTyiWOOngfGhZC83QTxFQznRfg==", "importKeyParams": {"hash": "sha-512"}, - "signVerifyParams": {"saltLength": 64} + "signVerifyParams": {"saltLength": 64}, }, { "name": "4096/e3/sha-384/s0 generated on firefox at 2020-09-23", @@ -551,7 +555,7 @@ final _generatedTestData = [ "dq": "p12syRQ7yxW7cVpyESS6JVBoq2jcljSKyTNI5MBwb88QnI-iH-Q9UL3yi9kzIOL_WWt_4SPDMs9wnGe3BnwMfvBL1miRoPQzOPe5acjiF46H11qwEJM4ioBRYGaNph_DetwXPk5BCSmQxN4q6ky6k2FihEuyXc8jeB3cQcwIIcod6iMOTzwj8ioNNDNOeWVuY8Mk5I1Lyu1E55Dnisrv5QeQ9f722wvp60EgPQ8QtXOMLO--nnrvozvIfr6Erf0hNVnuey_wFQE9vIpqFqa_lhbCivTE4edPtNeaWgTMyqiyVgqGKDKc3aqqgQZZtOGdnaUEkoRnBwzDSqF8LNy1pw", "qi": - "u0tZPsGLGmQkLdeHUR1nAQ78fIEnfQQtA0R-2xLCecnqZx16VXCTN1g1jUeqf623_aKlygKnTGL0KLdunnH3ODJNT6cuNo1qpJ9elnkIoDH8vUn_frgFX08xlXI8sXxyk_0QTibPnTzDvYIe9iqZlF5v9t6rrk26epMhIz_3VkbHyKTSrVmCfrXjvv-EjMBjsmRWlGR4O3asJFMdDC1CbgfCHCIDQbozy-zcRBftdJAdfE0c2_jQEjpUSxPwEEuHG-u1t2tOgC5xxzWEtQ0P2yjQt175FnN1ZMEOLDmIFNxjicqVZ73lg7c-B34qQAXNOqOGE7mDBGYS8P-ysMJtSQ" + "u0tZPsGLGmQkLdeHUR1nAQ78fIEnfQQtA0R-2xLCecnqZx16VXCTN1g1jUeqf623_aKlygKnTGL0KLdunnH3ODJNT6cuNo1qpJ9elnkIoDH8vUn_frgFX08xlXI8sXxyk_0QTibPnTzDvYIe9iqZlF5v9t6rrk26epMhIz_3VkbHyKTSrVmCfrXjvv-EjMBjsmRWlGR4O3asJFMdDC1CbgfCHCIDQbozy-zcRBftdJAdfE0c2_jQEjpUSxPwEEuHG-u1t2tOgC5xxzWEtQ0P2yjQt175FnN1ZMEOLDmIFNxjicqVZ73lg7c-B34qQAXNOqOGE7mDBGYS8P-ysMJtSQ", }, "publicSpkiKeyData": "MIICIDANBgkqhkiG9w0BAQEFAAOCAg0AMIICCAKCAgEA94C3n9QNAY1t2kQRE8wDTAGSZ4/0ILx9fnkCRGOXsvPd/qOF+PssoKKlpMe7v7CLe/vxqyLVyhMXPD0bWVWS5VHVs8VLrPfd0iq0fzvdqwocs4PLtpZ7x1lJsL2zUl56Kv9FiQljKJiD0pqsozS6dIjsH1R5sPqp7ItY32Ma4Qco9G9Sp+cv3kT2jPVDQUP+LLeBZ/E9vjErCAwdi0lJ2s3FRyYqEiQux1aG7u321P9AzRr/21XY28DBsWQFwa1OiHH1GB266ABOgfhRfMFHG6hRkf1iEBTOAyG/z8ll5gwMVQCp+waxHu523OysoIs8wQ11jeiS9I77zW9egCo0/go8fXFvJuWiaMKHNDjbva3WObu6YUGsKoHb6am3ZaDv1jQ1sdB5BAjNDX4Ii4xttiWPLm3GcFAbcaauYEtJIXWJlaIEc1Ee/MlAWQ/35LfF00Uwnd7YdvQcRLGjQSN7qjdEC6M1uCT2Wb6vf0DybFiig5Kh/3UXWxpg6t9POZ+a7qeaPSFfNi6aAkjnknykAX3Zvejtaj5UAG5tTg+dBUh9Wa1YWqy1sqeXrzNi6lXSaW5PNSDIb0qA0H+8pXfK4wse2K2I2sx8k5Y+TILh6mB4Gs26rYIk80+l+c/IIQRlAAx3IwTNeNMf6BTSKiX3ZMtj57+RWGTExZHDbA6Xh48CAQM=", @@ -560,14 +564,14 @@ final _generatedTestData = [ "alg": "PS384", "n": "94C3n9QNAY1t2kQRE8wDTAGSZ4_0ILx9fnkCRGOXsvPd_qOF-PssoKKlpMe7v7CLe_vxqyLVyhMXPD0bWVWS5VHVs8VLrPfd0iq0fzvdqwocs4PLtpZ7x1lJsL2zUl56Kv9FiQljKJiD0pqsozS6dIjsH1R5sPqp7ItY32Ma4Qco9G9Sp-cv3kT2jPVDQUP-LLeBZ_E9vjErCAwdi0lJ2s3FRyYqEiQux1aG7u321P9AzRr_21XY28DBsWQFwa1OiHH1GB266ABOgfhRfMFHG6hRkf1iEBTOAyG_z8ll5gwMVQCp-waxHu523OysoIs8wQ11jeiS9I77zW9egCo0_go8fXFvJuWiaMKHNDjbva3WObu6YUGsKoHb6am3ZaDv1jQ1sdB5BAjNDX4Ii4xttiWPLm3GcFAbcaauYEtJIXWJlaIEc1Ee_MlAWQ_35LfF00Uwnd7YdvQcRLGjQSN7qjdEC6M1uCT2Wb6vf0DybFiig5Kh_3UXWxpg6t9POZ-a7qeaPSFfNi6aAkjnknykAX3Zvejtaj5UAG5tTg-dBUh9Wa1YWqy1sqeXrzNi6lXSaW5PNSDIb0qA0H-8pXfK4wse2K2I2sx8k5Y-TILh6mB4Gs26rYIk80-l-c_IIQRlAAx3IwTNeNMf6BTSKiX3ZMtj57-RWGTExZHDbA6Xh48", - "e": "Aw" + "e": "Aw", }, "plaintext": "IFN1c3BlbmRpc3NlIHBsYWNlcmF0LCBhcmN1IGF0IGNvbnNlY3RldHVyCmFsaXF1ZXQsIGRvbG9yIGF1Z3VlIG1vbGVzdGllIA==", "signature": "gI8J4lZ9Lx+HnxfpwyyxV2IO2gPXEGgasD9YoIXuZ1O4tGYC4tVOX7tKBCLPmFNtRE8kG30N/njmoj9TpekULnrWKlnsN4nT+AgcxgFWa1QV0q8rVXZwzafNdRyAoh3U1+HUUYdbI8y9QRJTQzCSrTZxMM/D3C8X83kEQR6Q/My3ylj1egdYSA/IOrbB1IIjMgxuQiOEGrYqXSOe59nBCTIsbvc3/dyTNi6pVTwFW18hA1pGJ3UdGo1BZcpNotGsr1fAYZwWXo9MIDsphPlL1ZS1wbGs1rumIXzttY35rcDhJhjfpZ+DPqGMdob5/7QE0+uDgZA6qBjqQjCfXOPfaaQX09Z2Nx/we4epdGJB0YK2e8YW3UG2bsOehTXYOv317Hd3JVEqTZZfcUUngUXh+DBeqq/uJs0+slkUQD7UKgyc9AbLczG5oid8Fa+Cf+10P1/5ysluW+JhlW0FeBTD7pDzInaXB/M9xWdz3gV0BtotUm9sM/1K2BpUyYMFrTHYbAkse3bS1UMF/vhxmrJvq0GoyQ1vvwtCf+5lrbCR0APDIMIVMgjXq4ldPkyHd8oHJT61wtqmF4CmPavMchJCSxZ5w/7tEAYuxZRJqSvH3Ncdi/gzXadgtgho9M/curoTUitfE0m428P0OPeGND6CX9MPMrGSplgxpiHY/y8J5s4=", "importKeyParams": {"hash": "sha-384"}, - "signVerifyParams": {"saltLength": 0} + "signVerifyParams": {"saltLength": 0}, }, { "name": "2048/e3/sha-512/s64 generated on firefox at 2020-09-23", @@ -590,7 +594,7 @@ final _generatedTestData = [ "dq": "kiGqMwOhRfPeff0H5h8C2p_yqs-JBjTuWxW8R6vgc1Nj-iDhk_sLLu_H_8Ewed0FS_6h7UzIaeaVCA5sRyqPNdZWxxUv7H1DVPB2-GRdsoFgCpJaRYGGyiT0UaKsqS8fysGHU5S9ycnfBvqt19FzamLrCYoV5unnD3yAsksqQE8", "qi": - "69NuuKMKJUj4n-53ricGmi_HOcvkberUPG6LenZqt8t6s-HCmAGSYhPdCyS3-dpJF2nj7UUrRemJbFGicKqDdgHxUn3upsLV7QOquXMZP8HQ5Q_TMbuH5xJRQw9GGyR05TdEcS1lZ3eQWHnYwP9JIAspFGpnhWJCvKeSPO0PPEE" + "69NuuKMKJUj4n-53ricGmi_HOcvkberUPG6LenZqt8t6s-HCmAGSYhPdCyS3-dpJF2nj7UUrRemJbFGicKqDdgHxUn3upsLV7QOquXMZP8HQ5Q_TMbuH5xJRQw9GGyR05TdEcS1lZ3eQWHnYwP9JIAspFGpnhWJCvKeSPO0PPEE", }, "publicSpkiKeyData": "MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEA2TdzG+ggLBrXUTKQb+zXHrpnDEP/ApEgeZu3WCT4J5rWGARIKYmgQxlPI8TcoR6hdxo8ruc5H8kC+gkcFv4WClAem6FodrS+zT67DWdk11dgL/SGE6Cd0dYjYOaGhcgZBCyePIAtT226StzGJyVRNt9NHauNYZtbDGncoDIHUx/1ZHHeHv7jg5vo6zON8azNi+RX9LTmUrQ2WEm9A5jlVNCQu3oLR45PgoBQllH3483QRh3Gugo/lxm7embPHMuwMIBzWjJqifIaT/CNVBbEllL6pKeIPJJgsz+P//Ir1Nfgkv6oVUcfewj8e6J0UZ69qtMuJMlnacQoets4rCH+KwIBAw==", @@ -599,14 +603,14 @@ final _generatedTestData = [ "alg": "PS512", "n": "2TdzG-ggLBrXUTKQb-zXHrpnDEP_ApEgeZu3WCT4J5rWGARIKYmgQxlPI8TcoR6hdxo8ruc5H8kC-gkcFv4WClAem6FodrS-zT67DWdk11dgL_SGE6Cd0dYjYOaGhcgZBCyePIAtT226StzGJyVRNt9NHauNYZtbDGncoDIHUx_1ZHHeHv7jg5vo6zON8azNi-RX9LTmUrQ2WEm9A5jlVNCQu3oLR45PgoBQllH3483QRh3Gugo_lxm7embPHMuwMIBzWjJqifIaT_CNVBbEllL6pKeIPJJgsz-P__Ir1Nfgkv6oVUcfewj8e6J0UZ69qtMuJMlnacQoets4rCH-Kw", - "e": "Aw" + "e": "Aw", }, "plaintext": "IFN1c3BlbmRpc3NlIHBsYWNlcmF0LCBhcmN1IGF0IGNvbnNlY3RldHVyCmFsaXF1ZXQsIGRvbG9yIGF1Z3VlIG1vbGVzdGllIA==", "signature": "1UV5Ntkjcu/Txgp/K20YHaQaV7BC5QbJKb4ow2ir3k0Gg/jnPzbu0SFwDu0OCHTJktyU82z0i+NTBoMBUseNdmmjXLtC9iQUGrH1zaxWfrD78cZhdKByQBsW3uXOqamimG1oKwyQ1qKGMXcYRI8Ro1Zpx3J2DyVspsHKLlOCT5AuZZ+qHARgHZUwmWyEWcEDCm8d514q2BJF46dbGAF5ffAcK3VyscGZWklIrU1L7gv1SQcqfdMSQIhDgdHrv0WqQ/7wSk3v9lsu3sOj6FO30BWBI6PiQGASkNNLW+wu3we1GASKQCdEJYmjA0K71sWiOz8+fKkBjTBpBPx5e5tx6g==", "importKeyParams": {"hash": "sha-512"}, - "signVerifyParams": {"saltLength": 64} + "signVerifyParams": {"saltLength": 64}, }, ]; @@ -635,7 +639,7 @@ final _testDataWithLongSaltLength = [ "dq": "LsCFbGQkFYhrxNaYwgJc32MZadpX7iBFjLuusDTIQ83L0ZjVQpawHaoHSfaQ1zyZkY9iVFbg2pA7u-J6Sdonu4i9ETIQamwBJmCsZv0MizZTcRG1FzvFxfumas5C3aoCApqZn0URW04yNwmbrlcKlNMnRckHthRJEnGGOpuhqzOvD9agjtFkIkfbNnM_Pg7FWLaaiL2slCOrQ48mSJikGvbcvXPei1OPnggPh326g1E80trzIhQ_tYev3gGk4KXVnsVxdr1mWYLln3y4rxU8YJVBewpSWcF0zxu7zahj_-LDKah3yHygi42TwjnglgskYwoTd67NC0rW-LBceZ6gQQ", "qi": - "F1yb8ExDljtMs1jhC8WS5IwzqAg1BE8mmyQjKBRhpaWWO9H9RgTyTy2lXCb2zZGO9qoagLeJQKy47TN9rw48IyIVSMKI98NiF1lqLbYxEiEQPbLbc6epzpMBImuqAYt6Ez7_DZKQXHOfv3wU9fkNvso2Hb2OB5BCELZJRGtifECZLlwSfpstRQ9H0EuE2SIVt-NcmOmwujBFgTE9RrjDUHDe_HcLhS3ZuWO8eKnqV297iP8NMpzos-mmLhgEtp-VtbhE9sEccWB6BwrIafLO_ek_rthmdRtQ1MV-0UsnhsICwuz27U9btZpDHfQ3v6judWgpwOH8EEq3nPU0kyIN1Q" + "F1yb8ExDljtMs1jhC8WS5IwzqAg1BE8mmyQjKBRhpaWWO9H9RgTyTy2lXCb2zZGO9qoagLeJQKy47TN9rw48IyIVSMKI98NiF1lqLbYxEiEQPbLbc6epzpMBImuqAYt6Ez7_DZKQXHOfv3wU9fkNvso2Hb2OB5BCELZJRGtifECZLlwSfpstRQ9H0EuE2SIVt-NcmOmwujBFgTE9RrjDUHDe_HcLhS3ZuWO8eKnqV297iP8NMpzos-mmLhgEtp-VtbhE9sEccWB6BwrIafLO_ek_rthmdRtQ1MV-0UsnhsICwuz27U9btZpDHfQ3v6judWgpwOH8EEq3nPU0kyIN1Q", }, "publicRawKeyData": null, "publicSpkiKeyData": @@ -646,14 +650,14 @@ final _testDataWithLongSaltLength = [ "alg": "PS512", "n": "vyXH7PpCRGBNd9xG3qLAHaK0kQA4JvBKNiIWkmAPWhuy0ZR_SS6hnHcyqj8kfiTOb-QEf9absd7oKScgtIEDw_AJBa9jtY8o6g8e6KmGbMvkg_fjsVJiM0NSw1AQM1rDmVOmM6FmbfzGmQ_0P6ZvUj62s_BvjrIk1qJeAJQiuCFroXbpimm4BQDUUCK07VREAxE7dE06I7oZyw9q8L0DElPeODcw5dnr-1R3f1qTSda7y-QSqFiZUQktybdhmYm4CVSiPtPGRfilXA6fLx87IyhSF3rk95Ai0XEsKC4W3moPagRwSqzuS1xLPXT9KA0NxcRg2iBTQUcF4IbR1Cxl-fkv58R5Ib9LP2P51Wq8Uvt1R19uyuxVH_tYXGYXRu_Jzl2wyCVIJs6WyV91fjkO1mrtLrBCb-Qt56zUgbz66-KrpEM5-qFoYltV8qCT18DR26xVWxrxH1F6nt1MKjm5vrUs51imTGFe3bsqKvh9H3OSA-OWTX9xVeZxraCYjHw9SryaYy-kiJpT6sLKOmh8PgyNTV24ldSGmX6sJl5hipiRoGNMw4RrkmXOyLFdf5bt2HuDjzITBGvqTD-xwmOd-HB8jPayzJy-0oUNtxi2iBQiyUvMmjeJWfBNH2KiYQCQT5ka2gqDo_Em99_RImX4rn7oyhGQ63WorlRXpmKImyk", - "e": "AQAB" + "e": "AQAB", }, "plaintext": "aW1wZXJkaWV0LCBlbGVpZmVuZCBsb3JlbSBpbXBlcmRpZXQsIHBvcnRhIGVyYXQuIFZlc3RpYnVsdW0gaW4gcA==", "signature": "pNJPKtyOjbPGdT8iU52T7nPggGIdCw5VLGlH+YEbfhvTRAZ+70mNEiRnbAZaK3WOqtkx4c9DxFMu9qtsIIGwBo5BqDZukicJ4EzxGZFNJiYFUn1yaNUc2cdi6+AJnkPRWTh3wsWc7Jk31Gp0PGdf8/fL9R5JdmPENEReBn9D5vxJuWMHyGp+wTans/UXTpE6pJsshG49mnIwSqAaZCLrrwGLCt9hUiNbbEL11CbHZTXp/Ds3kmfn9rWWouvxNcswnPH3CHWkvUbR306Yi1i2OnZrQLZJ21D5vtN2/5JyYrKpa5iRBmKERQzkj2A90a+jjFrts52UlK6Tc6MkvwSHH9ZjXr0uvchqpScxiis7AuPUghQgiPIp4dkifdK7orxuV3Q0YBdkJ/ZHQ4GbWVqze4bd860O8QXzGJgUjCNVIZtgPDJVXpmbzIMxh+Mx2CpUpUUEFMpJQuF3F8TPs0U9eMEKUdyHD0lB9BGTN7ckafd+FiANNhc0zf463nL1iNJRmk1cXB6oK4zntOzYNUbJXPLF23+3NtMHIoVWK2YmBFn80anN/NBJvZq3yuPzZw2E5aumDt3/nqUOopE8M4+QxFCDbEQOBEfDvcENzgj8jQmi6Vdnyu6QTeXoMU2UUmkK+QIpkxe5GUud4LcqThZU+VFWMY36W3HqeOnKr83g8Es=", "importKeyParams": {"hash": "sha-512"}, - "signVerifyParams": {"saltLength": 67} + "signVerifyParams": {"saltLength": 67}, }, { "name": "2048/512/67 generated on chrome/linux at 2020-01-14T19:49:09", @@ -678,7 +682,7 @@ final _testDataWithLongSaltLength = [ "dq": "kW-gEGn04MMjuFPzU9oYaEEfe6eOypJ-0tk_2va7LPMRK7J9k32oEGsH7AA97DJkfvJi9QWikSItGESfrkHhm47PNtMgrFzsgFbzph60vQALOYcCVncdV8YvPFuVBAbqUWZlzj-Qxxtf-pZWkSMCJZFdrkuMyMnM3oIO24eTgWFrXinfdhiJH5hWxqpy2mvWlhROWruVCvhnOtg_sMjSymVP0zKxIATNRozsI9EKybyMsWa1RvN1VGoGv4MNHItDCZ3XKlaNURRHtOSKH_SbuMppPXVnBXTF-GvzyTx90Whs6JLO4cnMfnmBQqLo2gvrF6yv-eJj6hrX_amBpBCbaQ", "qi": - "pdLYF9Zp4JPnym1pImhDOZgu7o21izbFWTMzdWKmQX4kPI_WOsDD2CwajXUEBS7T9rQ1mwsehKFBwPAEVrkHCDrQDH-1RUfpBY9gc6VwXm9VaamnkLt7braCfxc9BDvJqQlpd8r5VxTMncj-1sCOqRKYR_-qkPutgYF0OZrIeG5kVgjOPGcNnlgHzYnANQhNFstqJ5FEVBQLRVREyoHGD708acvO8-L7oXESE3B5sf_WqMwfgm4JgaIKua1ozJRiTBWNqFfcTHF5S0PJkqEsKWSOheOJE_hpmF4R4VNAKK3WkebCvcPaCTa7XcU2THt9ny9q_apyXTFNZsKCl_4AZA" + "pdLYF9Zp4JPnym1pImhDOZgu7o21izbFWTMzdWKmQX4kPI_WOsDD2CwajXUEBS7T9rQ1mwsehKFBwPAEVrkHCDrQDH-1RUfpBY9gc6VwXm9VaamnkLt7braCfxc9BDvJqQlpd8r5VxTMncj-1sCOqRKYR_-qkPutgYF0OZrIeG5kVgjOPGcNnlgHzYnANQhNFstqJ5FEVBQLRVREyoHGD708acvO8-L7oXESE3B5sf_WqMwfgm4JgaIKua1ozJRiTBWNqFfcTHF5S0PJkqEsKWSOheOJE_hpmF4R4VNAKK3WkebCvcPaCTa7XcU2THt9ny9q_apyXTFNZsKCl_4AZA", }, "publicRawKeyData": null, "publicSpkiKeyData": @@ -688,13 +692,13 @@ final _testDataWithLongSaltLength = [ "alg": "PS512", "n": "p9v2A60UswQyLICL481rbHFSoIN_9tVE9QG1Nz_eJDbTXTsA9SscFSdbCO9Gr1JtQZhYt37aBizQUypcD35ivNzKCw7Rik1yA3uthlPgZ0QdIviHNV4kal-bwMO0VE7dAO_llGcGBbjKd8iZ3Tb5gH0oY8hqqm-5dwSg36y7T7a6Mr2pjvOD3D789c7Cvtrv0WRoBOwrdbq5FuYeR_int_eBuranepLPUq3ym2GEGRhmkYiQK3PLGrfyPE6fAsXxtYxHYryul7g0UAXQb5dOwDVPTWP9attAInuCkzPpAc-4RxR65JS5SGiVdxg3anZvjRg_GC03J9CX6ygu03WNFcJ3RoKnPidSNMMcxC2MjYsFR95GX-0wYyG1-AWJmPTEKqWDqvY8BQ0F50Q27HEpgsA3PQlNGIcom9-yn5f6zjTOGoJWEbuboE-h9qtN006x9XtLx6gp0ClC7IB2j1KVc-L-t5VvB_PRq0wdvutj6Re9EsKm1GVoUtqvw9v_jHkW8rz1AFXRWGIIOaFMGgBnWggWDvobRNLAGPRVPv2X45A3lDGTyq8vG6mTy4fEf-EZa7TLEGhkuH32uC7qtAbOF0Oj5l_-9nwZlsQ2wS75yJnOzUl2jokvMGbXARvwOHw6hcGlf0DUZIe_spuFEV5OTr9rY0-vcbkPYgKcfnEwp9c", - "e": "AQAB" + "e": "AQAB", }, "plaintext": "IG5vbiBibGFuZGl0", "signature": "M0buR9BMEGoXCPbl3qO87KlteI7g+k+WnhuozwoQCu2H3WmNMez8ZOP1y5A1oqDCLmAadXvvXQ1jyOHuYUk3ijzCLZ/Ywed3Pkmww0wW7Qo2pNQisPNs7KpWmg5Kkx4+e5GpE3T4/RSvO9LjQ0veIVG8OyQ+alwMs7k+8pm/6PvhqXN9PxUz/kJFrziE9SbgTLwHGxA9YjQ/uLkdD6SYcWLB0wDBPnfUZ+mxkQHbJJ7eRYcRnc0z2dg7wAX/K+rwBZeJVJDpAjfDDwdY4o5Mnn4zViux5WDoOv+KEyJoyeo8uBASvH2ktQZPG7+YujJGbhfVWBxncRI93ubVnK55dmTNL6qDupX0QGnguImVa7VjcLXO/pGwDfLAIVolxtHmsbxzYDOvZCWbqc1X6XGivVWOyTRoE5bKCljb3DmTp9dFJbdDlQMY378VlYj9Ai1IJdjfEtUucqgsFi/94uQCnW9wRvk7L+2Ib+tKu22R63F20KOJjAderzMv5sGrJuwkVb9WoSgtyen7p0iswWFnN0/3I0dWeWHFVBTVAIJRLMFWebr250NbNv0QS9koOkC2BiK2QTLMFXmHWuol97ZBqOWeKQ98YXqluglZaIhCgd0NGZ5GfcBJ1r8FScgLNduJyk5dc/fp6hhdCTihqDMQOCs+qfLEDRXYFQO93zEjJLI=", "importKeyParams": {"hash": "sha-512"}, - "signVerifyParams": {"saltLength": 67} + "signVerifyParams": {"saltLength": 67}, }, { "name": "2048/512/67 generated on firefox/linux at 2020-01-14T19:49:18", @@ -719,7 +723,7 @@ final _testDataWithLongSaltLength = [ "dq": "dbuM_Xw4FL58i7PoxU2w2BT7qngrIIVSwSvO1R16s1meDAzZX1vQhmtgltK2fD62rT8yveHPI6DtaaNFiAw-vTFuC63s3-bsmD1r-dXVH2yUBZm7Gvw3jRPEATrytEJTJX8YvGCI-T7E_EloIEzLKUWr7LcBHni4ilKdk9mrvCqAIFbqw53m82qrohm-ef-itrt_NrUF0tfkLJptXRinWKtyCoLNJ5zy1Hsuu5WUpVuSrc37wbJluJ9o9zYAQ6fZ5ZjT6Mf8G2dhf9H9NFiExbzJw6-mbR2WSsSVCCwwQdtuiFp4AGEBULJU7I8_vrLBKVMH8qXqcyx5Q_9DNKuJPQ", "qi": - "U70yONUSjiDvmAfH6j0w0k-7528nfAuwyTDjx0S4sLHEK9XYImLFbo-zA5NcJbuK360pYalRdpMaZfnumfe-TvHS8ecIhvdirNjy3NbPMiCCZo0nKuUqLgbCndscSfLbVH5i40Jy-hGo-bGNFGu6WiWvjQuI02aF2HX3GnL63gJ_6LW30618i5k95yefIgsxeUnec4FSOGse3-MmNRAFT7ufXAzx7DF8LYLLYddOGQsL3Psv_KD33uguwCkTpJ993r_lHl_P_1LGJxcQqle3SJgV4DzmezHIhLTbbPgLMvMLkGq0Ye6o_pTLb6c2mP1yUmCIdqyhPdus_86U1mlwOw" + "U70yONUSjiDvmAfH6j0w0k-7528nfAuwyTDjx0S4sLHEK9XYImLFbo-zA5NcJbuK360pYalRdpMaZfnumfe-TvHS8ecIhvdirNjy3NbPMiCCZo0nKuUqLgbCndscSfLbVH5i40Jy-hGo-bGNFGu6WiWvjQuI02aF2HX3GnL63gJ_6LW30618i5k95yefIgsxeUnec4FSOGse3-MmNRAFT7ufXAzx7DF8LYLLYddOGQsL3Psv_KD33uguwCkTpJ993r_lHl_P_1LGJxcQqle3SJgV4DzmezHIhLTbbPgLMvMLkGq0Ye6o_pTLb6c2mP1yUmCIdqyhPdus_86U1mlwOw", }, "publicRawKeyData": null, "publicSpkiKeyData": @@ -729,13 +733,13 @@ final _testDataWithLongSaltLength = [ "alg": "PS512", "n": "94DBbYRgZG4i4G-0nUbQYNttti3d2Z4r941g_wBMaWazPW4pN6cJWbAp74HFNg8PHehUa1epEjY4ubQxw4dn244AubxIe097r2JSORx249fzV6fJT7fpMJ3VEaCEXhxxx5dGOk4DHyo6P_JLeAeHUYa_RuY8BJ3aydTuwpVqwwbO5-a08ZzTv9bbON0r_iM_nD7fRMoUu45FIpbukjE9OYH1NCCpFl6yruM7tGv6EZHWLkm8-St47XnhX_uZGFWe3I0YPO0ESfb4TVVHgjOmdDJ_9rZjI1JETIzqY2oOPyOTQXK-rAG_YiDa2VCRNn7UeAr_7z6Pihl48jAVb4AIF6y460rz7nOx0YFI8xylBfhm0yWJe602DtDdEhm93mvK9297aVD1dok6kEKbP8sYCi1QwG5x0kCOQCpR4wz7-OJS_D9OOn1HIl2veham-8mtWLB9ecNjnJVqxBiAZ67HuQM0AMMaPnyRBw5CaAYCS64hCWZBsWPpSQ1wn_6SYFsyZxq-VV-wxdvJ18BA5UEd4aTyxeOgfDdgMHotKKihEFbI_iU8ckOLP4FeOuaPgkKz-G2YgU0xSCV4cBnBFUvb17rjmi4maDJyRDnTM90tazruxztgVf6hcMpJpkgop3RApv_pJV2OI1T36t7KLeWJgba-MiWnbLu6VrYLS5vKcvE", - "e": "AQAB" + "e": "AQAB", }, "plaintext": "Z2VzdGFzLiBDcmFzIGV1IHRvcnRvcgphbnRlLiA=", "signature": "LfYkBhmnCn3onmw9c0ORKhqvFM2KZC22ejnM9PFiCEk+JYgDiymkPO8zT3bE16gG8x2nsTAchQJ7HU1YASJhS8JYokO552tnODJwGuoAoZeOJIxSbFFM7t+Jw4uPukIkwtxxM0aOfmj9V9UBKu3g816LvmtHoBOSJ0vdi+AXt4wQhTEPzOSMGJZCju79LMwsO4BRRv4vyX4F3ISqdA6lbMaJlNQw8QQGe6sKhbAVIUmHdvLMkunJYADz18Xvjm54ce2PH+UD/tyyPgt4i15iQRuIYPfRXAYJMC+iNGjTN5ks4Qq3SqzDhYrM45wntP9z3kDlx3i3DsXq7UKi7Vw91mmq5USEoKbHPR35pfrlXALwmR22ei7TDfnnjjhtbEW1pxnDAMq5/Hdcerse2XAzOFEF/oEZbsAWNQrDFcFJtUdlLUNsG6BI1KcUCRT9egpql8fweZOZjan+z4p93tWMBWjBua9xckNoGO4iSs8Aq44LKQ+Hx9Key30+2lH8TYwB60df0g0+J6Y0WsNRQJuI0Loi1743g5yRFTf70kWw4KASbWgIc2rVOf2IrEQS91IRGPXBej+mb+dmhvFPigh0MS2sV492VUynWEv3r1XpIfyR+bNWuhu4MIx6YXQFVG9RStWPOykEmXgFYRv2mm8xazH+ERAiP+H4c1/3N4C9vOc=", "importKeyParams": {"hash": "sha-512"}, - "signVerifyParams": {"saltLength": 67} + "signVerifyParams": {"saltLength": 67}, }, { "name": "4096/512/67 generated on boringssl/linux at 2020-01-14T19:50:33", @@ -761,7 +765,7 @@ final _testDataWithLongSaltLength = [ "dq": "sWXEI20jEZvMdR6zGdVZwZ0ebE_xmEq1z-2uA9mrXzUjByPkq9YSxBo8fpyTbUn_rjKzK0lZnHRcsjabvrteVYs5KHqlAShPb1yNOksgFvLfliJZHYC3AA30ymkt707RqcOuSfioRE9snOfmH-KyGjR1gLehlApRoq7hLwY_D6dLgxOX5KqZIHh_N8--fwHh3E37xr8pt0LRrCP1fgv6lvS8gxa3ozxF6N7__nMIZvam97s9jKXC5DNiFr4SfAiNxz52wL-5nN0DoaPwSuMuBWzIedQmfOd3iQ9INrNNnL3vRKPMcRDREp2JaBhd9YD1M7lwckKieYXP31RjD-RuJQ", "qi": - "huYDiZ2STdlVAN24LQ2f4ZnzTRUSmGSOY3m5RvMx7LRt8EyDgahe5Xg-dMjb1LRsQLxKGhiY9Dg3TjH0lJLe9S7EVmUY3tbSV0gZJPMEaq9aU9D_ZWmXmhNUHxFcnofF-B3NvXHXomjIECIVZWcpVWJ6gkIMRp2Dfi98bawTvoDvB_Iwtd-8U9D2EFihX78UZBKcs4hD13rQdQwn58rmf5L9zys6_XZd-9DddnnwDUukbEl8yOUqw_tNaEIPNamGFc8HdD7r3UJtUaFPlHkFVJNALh9n-KA-hqCx4Ad_qMFMvullbQfpcTV4JuHyzbn594ABYc8ofcDwwwx9qt8KUg" + "huYDiZ2STdlVAN24LQ2f4ZnzTRUSmGSOY3m5RvMx7LRt8EyDgahe5Xg-dMjb1LRsQLxKGhiY9Dg3TjH0lJLe9S7EVmUY3tbSV0gZJPMEaq9aU9D_ZWmXmhNUHxFcnofF-B3NvXHXomjIECIVZWcpVWJ6gkIMRp2Dfi98bawTvoDvB_Iwtd-8U9D2EFihX78UZBKcs4hD13rQdQwn58rmf5L9zys6_XZd-9DddnnwDUukbEl8yOUqw_tNaEIPNamGFc8HdD7r3UJtUaFPlHkFVJNALh9n-KA-hqCx4Ad_qMFMvullbQfpcTV4JuHyzbn594ABYc8ofcDwwwx9qt8KUg", }, "publicRawKeyData": null, "publicSpkiKeyData": @@ -772,13 +776,13 @@ final _testDataWithLongSaltLength = [ "alg": "PS512", "n": "ydnm5m_bo2mj9jNVX4S-o1MGDbQfEOL84Hi15HgtVwFjpilnSd7YP4dLcNt1fei1BCdQMkTnsQwQR0h1HJAEphoGu1cqsAic9noEePedCNnAPU5RBO3WJMdgF05Z4zJGxPG07NZzGpln2pHNov4T3Z0RXfPkrSarbOJI50mDscpHOi7TbR-Gi06DRtFHNDOFqw6UUV7nrw1v12JSA4cMeC-hgVb7MiNwhntwfUKL-i7EbUXpNd1YyDSZvpXI2SKI9Uv5V3PQpkOPUYS3AeTBqriOJob_K_xVxLwPDYlR-O-FtO2KW5-kh9wncxH9ss9oBTIYby-PGWuoHvTI3eJEwIZUStnO8aX0jwkaOPhm6LsSnaDeVFHsGr9phg1kNdfI5Eul6Dh7TPkKLZyU2JuX2fHoEU85hmSYVUjaqrm7YBgFpaC2w9oXLO63XVGYpnDbct0LrB1VxkC4z3_3s3oyz9cO8QxdgsjtZCbC8o5zSKO45h3k-kj80UGuOnnWYZ3Mh0B9DCPd1uRP5bW9eOHUG2WFAXqI_LHOay1Un1D7gOMUn-_zyekp_U_Ni67oNieIWZqtEyVWWH6bRGkZKGgVC3DNigXhWzfMkAuwEe18fz7iKKYU03QZ8jQr_nLCSdRiUr8h-9Vvge1OBlUGWVaBwqbq0tTUYxxftjjUICLGHzU", - "e": "AQAB" + "e": "AQAB", }, "plaintext": "Y3VzIHZlbCB0aW5jaWR1bnQgdmVsLCBwb3J0YSBpbgpk", "signature": "n7J0OhF5R73d9ui3S+ccyA4YuW6r6Lkpeh+nz1rdyPEISzNXcLjImgp9ssnMZJvqAw/I8Aq70Xv7m/Yf+DYIoMsU8mf4Wp5hza7mFdyCssOZMs1Hcj3QirkYh8wQsFOMDxN9r4LR0I5tI0MYhkoPzMjfgeUQTQTRRPlK8KnIa2zIcGRc/2hcBxaRrK7ADhWGCXYDHHLQOwnydkr17xW4daUJRAvaQzb53+SAWF4LTzVJP3WlUKXqfWXsk+lu29eAFngUoLHUI0mMCMwhTZmRK97AlOeLWkrAA0/Pl0Dkql70l61MJ+fDeZn5EIiAcM3ku3a/GXz1tIhe1nYHohU2AAB1kkxvTM5esKVIvgRCW2fWuPRC+xEAPmhV88M7/7XXchepiXLk5tjBPu2ivhWhbIH5Bs9JIuFBg07wpLXcpdDFbKVHt94v4oKYxWBqMo1K8jNYqd1B4s9TXGgdnhZCCaANTTJiABjyFZZFnf/+PEzRonZu+aKQZUKk4vN+teMxJChwBz1wZ+vH8ECmlr8lnRsnFfQ0CkYEjjID3aL2DAEmW2IK7VhG0cpHwV/gMljapEEV+dQi8ycavBoIpqdGR0IK2Wmh2fug1S+VbNmHIUdZYzmaEx79K3rPxSYAkSYJM/PfeEERSQ8DSqPiHtuKtRWXQHY87Sq/pNaLlR5JLlw=", "importKeyParams": {"hash": "sha-512"}, - "signVerifyParams": {"saltLength": 67} + "signVerifyParams": {"saltLength": 67}, }, { "name": "4096/512/67 generated on chrome/linux at 2020-01-14T19:50:42", @@ -803,7 +807,7 @@ final _testDataWithLongSaltLength = [ "dq": "LsITE-qgkcdg1EFxlhda84DAy2VV6FPZEExctADtgUY45b0mNWJBBr8ZVCTKFw5nex8GavdmELpLpDkxiNZ1QDXc3to_xI5g5zTp8meL1WEULzGUU42A6Tliq_c46luSLMkokFloPQw7COsV6v7vLsiwCe20mHE60IeNYluOOZiHqb0Z0lShY-5_XfxEK5yksGzNGvgYIu3uK7QgBFvavUSkuvSPucZ2JgLhCjaoL61n_ByINIwLCPKBFvw2EOtw1eoAqNs8Ql-yPMVUSAURFP0nWm3Kipq65Dr-kR2qudWP1Qb07VhA2D_q4Ug8PghaCzG-xipOLv89Gm-Kw5k13Q", "qi": - "UKP93wLNsI6XCFiFDqMU9YSuVTgVAEqaU0Qkn4irkKkpCtP-EV4Bj2lxRL0CKEn5dC6B9J1FMVwCm15LkRsXM1Ahf91RxZ2P_AmL9h0HqhzXvGEQItgST7JIAN6Djy0AAN-YKaP2vM8LpC5pOf1dNtN5W7wPoDz7raXnwzvKqojRS3PHOBwx3KV-J51rGLnEwk2uL292FpOAKQDhj160MtvGxXzcCSeGuPF3sbTfhrHrfIfLPMM1GaAQhIz-OlZszt4PjPL2jGHME57_snWlMkt97FpnW3GPvL-EzWLpEIe_e7_p8PSRYwVL7CU8aHaQDph8iTCLwaKrPq3_pcP7iw" + "UKP93wLNsI6XCFiFDqMU9YSuVTgVAEqaU0Qkn4irkKkpCtP-EV4Bj2lxRL0CKEn5dC6B9J1FMVwCm15LkRsXM1Ahf91RxZ2P_AmL9h0HqhzXvGEQItgST7JIAN6Djy0AAN-YKaP2vM8LpC5pOf1dNtN5W7wPoDz7raXnwzvKqojRS3PHOBwx3KV-J51rGLnEwk2uL292FpOAKQDhj160MtvGxXzcCSeGuPF3sbTfhrHrfIfLPMM1GaAQhIz-OlZszt4PjPL2jGHME57_snWlMkt97FpnW3GPvL-EzWLpEIe_e7_p8PSRYwVL7CU8aHaQDph8iTCLwaKrPq3_pcP7iw", }, "publicRawKeyData": null, "publicSpkiKeyData": @@ -813,14 +817,14 @@ final _testDataWithLongSaltLength = [ "alg": "PS512", "n": "ovGe0JaB7DiZUvA_H19rDQcipm8ytapq50fsuvhD9ZozSk4J0jAhjPul88I2XFNxeuq_w0L_a26ab1rRRYoZ-Y1Ws6C2p4EmLlmpwQs3-W5CGH_ZpUNaMo4TY2hHw3dZwgCMN9q_k1K4c5VQt6821L5EGByEjoZG27ZrincfVF2Hqiws76lAyQy97IQ23IOMR8xeEjRq3zRayBwE0FHXGDw94fALmtsOAHmGvViIa8fi5FYCUW8GJmtR9Zqa-AcxhLQRqi052HyWCZ9SmEZzk_3FsCgdnfZhvLtta41132cNZWczOvEEuz9BckxjgHKGzxsMzTEwVMjWjZlHS3nzMfcTaW0NU032yX8RS8nVMsCdkrNbxAcfJ_BYIqIYG2Vs1UNKPMrFqgYMZzCvi5YYx7BBwolkZjlfsieKpYHiYqV3qzk_gIoKnLPr8FEd166AimZF3tEZvXMOmK-u9dNVa5lyOh-hrwl0HYgFGsvPOZimGLAbEbR7UEoGOIrh8E4ld8c1vjDerfmlF30psyXIpoZ19cvInTnvkUnYB3-iGl5kZ2n0fj4XJbSEkyVi24VPoAxb3T-Iu7pZbt1aO6CQLham7HxCFYiAeSQXux8nokmHgiiOBadrqHcLilD7B4lU-hXAfJJexv73YQBviYRN0a1JIGNHSYNJCSHOpZnxdj0", - "e": "AQAB" + "e": "AQAB", }, "plaintext": "cGVyZGlldCwgaWQgc3VzY2lwaXQgbG9yZW0gcHJldGl1bS4gUXVpc3F1ZSBwb3N1ZXJlCmRpZ25pc3NpbSBwaGFyZXRyYS4gVml2YW0=", "signature": "BTH48OrE86qzyanMGjTvM3AJKZxmUiwmn9c4FeW1lNfx0hHBVX861rDvD61iXW3kyld+zt3+As+SBAYsQ9ZoYTFGEOkcH0G8rMLKlgLNyDDIaog77vx1qTP+oszMA09qF+z7sfXIvfpxzXCNera/0ULNPHbiSuFLXnY78fOZPxoW1O8z5MRkoO2f+fiM+gHa38N2KJbKgFcgWRXUBRaREYBoSdS1EiekAK1cShZSkmySvhg9Tm5jykA2qVjqF/XpfDty2rI8yHCk1Svl3QvjIegN4sGPeFoPWKAvqu19MIUtNzNG7q6J49wyxNTpkSe0ppfV5ojZe9CZXkis26+Quc3KR4q6ApGO1PSkEQm8bvOc/hib9/FyfdvHjsCHdi2PeDvkoW88QduCE/3VF4Pox/iwt8p5QA1V99NLn1fpN1lHnD9W0SnWQWb5hNPaYrY2gmQOyR5AS4Zo2V1F+o+fLO5j/B0G3+ulQ+g3u+br9dGYbV4du4AETZXCpHVQp+p+AouEu3tYkIX1Muld76s+OhFSmx0/T8t3iOi0GqIT2xMDRNxeXKbW6SfheECjk+QwlPMUwoqscz2PPxdEDpdssS6aWWxpndUuM9pL4AgP9Ac/HOOSQ3cVwfvTs/JWq1OPRoSSM6eJNUEuKRyS45h2Zy/gXNnlbMAkZQmKKXkuXAo=", "importKeyParams": {"hash": "sha-512"}, - "signVerifyParams": {"saltLength": 67} + "signVerifyParams": {"saltLength": 67}, }, { "name": "4096/512/67 generated firefox/linux at 2020-01-14T19:50:50", @@ -845,7 +849,7 @@ final _testDataWithLongSaltLength = [ "dq": "AdQZfvaUigyDNxf1u_PdMwOwEuJnLgnWLhx4V2lrqJG1SYsdTLwhCOAfOlcjjoS5KNH8V3iMiUBRzwtDf637lITe56PHDELXQVFXKbx2qJ_yaFpbvFQ9UCGjKNbG9VrCQiVsVA8iec6X819EDgxX9XUAhyATG8vGn4-UJhqn_tCwtj8_C5LrpsY3ex3gOnJuljoIzs05PsSTf5-RMZctaF7qQVDNBPB87_tpeOww3Q9vCevbtpD0mB7m_X_kFfYS0C3SkBERoLwCxg4SAvs07o4NQLMYH69ANxgImgmYsS5hEAMGcVLaMU2CXMc8vDnVNruClNhDKBJ7a3YZH7ZFlw", "qi": - "mVSH8ksirw_VmJMc8BJtnKPT0uRHTT4pU2LV0QzQY5lRzb7P4asgtnd0SynqqxqLCtVlSwm9Qbtle69OkDsWmVKwLLIVD9rQJ3m95VywRPjBU3dXBUVz4ZLO89mx_gFZ7ou2adVDmVAhbT1PtnmnlErchkMwrBhWLLD_ttYL3X64sVJKUFNWM7DgwOxaPGuPYkHIkQEDeFtEyrWZMpZpOLCQlyc6tztOclawZ6qpL5AsUVWI2cZ3brGAJh2CEzfxu71Wa-o9fBbxoOihnbcHNSehjWFi4k1oj2bRoLQ-o_qPU9NfXVgRl6yjYnXNS423dB_LaGzOzhleZPMBgjdFlA" + "mVSH8ksirw_VmJMc8BJtnKPT0uRHTT4pU2LV0QzQY5lRzb7P4asgtnd0SynqqxqLCtVlSwm9Qbtle69OkDsWmVKwLLIVD9rQJ3m95VywRPjBU3dXBUVz4ZLO89mx_gFZ7ou2adVDmVAhbT1PtnmnlErchkMwrBhWLLD_ttYL3X64sVJKUFNWM7DgwOxaPGuPYkHIkQEDeFtEyrWZMpZpOLCQlyc6tztOclawZ6qpL5AsUVWI2cZ3brGAJh2CEzfxu71Wa-o9fBbxoOihnbcHNSehjWFi4k1oj2bRoLQ-o_qPU9NfXVgRl6yjYnXNS423dB_LaGzOzhleZPMBgjdFlA", }, "publicRawKeyData": null, "publicSpkiKeyData": @@ -855,13 +859,13 @@ final _testDataWithLongSaltLength = [ "alg": "PS512", "n": "2WOaDGRgpaiiBKR8VkMCdqGepCuaPiQOmssseq8s186fpo3iLIiRh2E8ISpQRSqq3LOa0S-LSrWEEgnIHtnj-v1oJHlhC-wDH_1_zYCZpNQMsQ85HegXQUKx1aVYb2DIiIHjFMgaz_Ku5hZdJuWPCVbs2dU0wEx8KBKgb0veOfmDr-_DuiKDp8lM7nAl0aFx59PWdQm0Jtg6nB7aY74uxIHurh-EvhDECuSxskRRLFRL55XLYiv54ZC5zf58Uusxi61nkT7mQxQf4wO-mpb-yYufdvYSabUaGy7w2E1jkOtTq3iGXxzabTcxmDYUcbdllE2guZ4fOKlo_in0P07uxPwjKXwaWv7A2b-HCGjnGpWMT6hix3W9VqZECTYmA_AUloQaVO56F_nJ2WktR0fzdT3D8V0hcFxqoJjSZO2bfGxGuApsNCU-5faE8OUOGMhdZo_w7GTrPkynwv7SLWHiRnLw9LiLM7QLgQ-XQM2uE8lNdy7NSmTNhOQMmWzSe7CRB6_2uzGeDXCYfX6FbJOYsT3jIdJA7T3LPKws5BR62fjXkjerNPvIuwX1_CqM-KcuA6YWIoHSUyzoaebGcjDd9berInFgsxSiyPYuqLqlpu9Umk8iP8P86W3of4MdpZAEhoxkv8xQuxz77k0xvSapgB3mF1NCYNpyJc5f6DdwHVk", - "e": "AQAB" + "e": "AQAB", }, "plaintext": "aXMKaW50ZXJkdW0gbGVvIGFsaXF1YW0gYWMuIE51bmMgYWMgbWkgaW4gbGVjdHVzIGFsaXF1YW0gZWdlc3Rhcy4gQ3JhcyBldSB0b3J0", "signature": "m3L1+PTgt6FaAHNViF6HzeVmqwPcu+gftgO7XM8srDqjjmFu/XY/3K1xrDT3SYpoOYHsueM/53Gj+RYB0J+RY0JIaOzToqEtU/L87AgFxxo8s9EVfDE1pbbrvWf/M3TxyMDu0qW73rmDMqToyPwXSc1YXUoMJVFIvcHzHn3BZkz8ReVnovhyGoviHl/S5xe5YXUaMOpeDRRlsK2YHn+URAe/r0LQxyIHGC/qydI77LolXZX27AHWiF9TsHDTvsW9ZSbUEqldsMKq+KSde2YvWDr7MZwXhLFfXjIbegG6c9AF64Gk6qld0ax4aGGxE0JvaGZXAFMPzVK7PVh9M1NcvcF0b9je1RvLQAzsxiomFUCAOx/zGJHbUNSeJgL16cGCekMljeI58bzFJPCwPq3jhjDjwmy7oRiCM1tqECdRhkEB40tmrKZsTQDSQCpXM+hy1EVFHMOWRKUlA0RmD64De10b5hlOx2wme3Th9su9mPrPN/7Zi4ziz2qjvsymLApCPCtC3oEyJFdr6+ptQSA82cOmqw1FMoPbbi4spisUMtwfQsIDixUFeiSjdvjSw/N13RZj0dWrpLTlsc78QYx4d8syMpAVgKJGlw1/gNBTQVnbEfgqmcGBCG2Rk7hK9g+nGJ0+3Q3e+MtJKDBxzNtstE2HG/8ErsVSQT+l3hR2N48=", "importKeyParams": {"hash": "sha-512"}, - "signVerifyParams": {"saltLength": 67} + "signVerifyParams": {"saltLength": 67}, }, ]; diff --git a/lib/src/testing/webcrypto/rsassapkcs1v15.dart b/lib/src/testing/webcrypto/rsassapkcs1v15.dart index d8cfd8a4..82c82456 100644 --- a/lib/src/testing/webcrypto/rsassapkcs1v15.dart +++ b/lib/src/testing/webcrypto/rsassapkcs1v15.dart @@ -18,41 +18,49 @@ import '../utils/testrunner.dart'; final runner = TestRunner.asymmetric( - algorithm: 'RSASSA-PKCS1-v1_5', - importPrivateRawKey: null, // not supported - exportPrivateRawKey: null, - importPrivatePkcs8Key: (keyData, keyImportParams) => - RsassaPkcs1V15PrivateKey.importPkcs8Key( - keyData, hashFromJson(keyImportParams)), - exportPrivatePkcs8Key: (key) => key.exportPkcs8Key(), - importPrivateJsonWebKey: (jsonWebKeyData, keyImportParams) => - RsassaPkcs1V15PrivateKey.importJsonWebKey( - jsonWebKeyData, hashFromJson(keyImportParams)), - exportPrivateJsonWebKey: (key) => key.exportJsonWebKey(), - importPublicRawKey: null, // not supported - exportPublicRawKey: null, - importPublicSpkiKey: (keyData, keyImportParams) => - RsassaPkcs1V15PublicKey.importSpkiKey( - keyData, hashFromJson(keyImportParams)), - exportPublicSpkiKey: (key) => key.exportSpkiKey(), - importPublicJsonWebKey: (jsonWebKeyData, keyImportParams) => - RsassaPkcs1V15PublicKey.importJsonWebKey( - jsonWebKeyData, hashFromJson(keyImportParams)), - exportPublicJsonWebKey: (key) => key.exportJsonWebKey(), - generateKeyPair: (generateKeyPairParams) => - RsassaPkcs1V15PrivateKey.generateKey( - generateKeyPairParams['modulusLength'], - BigInt.parse(generateKeyPairParams['publicExponent']), - hashFromJson(generateKeyPairParams), - ), - signBytes: (key, data, signParams) => key.signBytes(data), - signStream: (key, data, signParams) => key.signStream(data), - verifyBytes: (key, signature, data, verifyParams) => - key.verifyBytes(signature, data), - verifyStream: (key, signature, data, verifyParams) => - key.verifyStream(signature, data), - testData: _testData, -); + algorithm: 'RSASSA-PKCS1-v1_5', + importPrivateRawKey: null, // not supported + exportPrivateRawKey: null, + importPrivatePkcs8Key: (keyData, keyImportParams) => + RsassaPkcs1V15PrivateKey.importPkcs8Key( + keyData, + hashFromJson(keyImportParams), + ), + exportPrivatePkcs8Key: (key) => key.exportPkcs8Key(), + importPrivateJsonWebKey: (jsonWebKeyData, keyImportParams) => + RsassaPkcs1V15PrivateKey.importJsonWebKey( + jsonWebKeyData, + hashFromJson(keyImportParams), + ), + exportPrivateJsonWebKey: (key) => key.exportJsonWebKey(), + importPublicRawKey: null, // not supported + exportPublicRawKey: null, + importPublicSpkiKey: (keyData, keyImportParams) => + RsassaPkcs1V15PublicKey.importSpkiKey( + keyData, + hashFromJson(keyImportParams), + ), + exportPublicSpkiKey: (key) => key.exportSpkiKey(), + importPublicJsonWebKey: (jsonWebKeyData, keyImportParams) => + RsassaPkcs1V15PublicKey.importJsonWebKey( + jsonWebKeyData, + hashFromJson(keyImportParams), + ), + exportPublicJsonWebKey: (key) => key.exportJsonWebKey(), + generateKeyPair: (generateKeyPairParams) => + RsassaPkcs1V15PrivateKey.generateKey( + generateKeyPairParams['modulusLength'], + BigInt.parse(generateKeyPairParams['publicExponent']), + hashFromJson(generateKeyPairParams), + ), + signBytes: (key, data, signParams) => key.signBytes(data), + signStream: (key, data, signParams) => key.signStream(data), + verifyBytes: (key, signature, data, verifyParams) => + key.verifyBytes(signature, data), + verifyStream: (key, signature, data, verifyParams) => + key.verifyStream(signature, data), + testData: _testData, + ); void main() => runner.tests().runTests(); @@ -64,33 +72,33 @@ final _testData = [ "generateKeyParams": { "hash": "sha-256", "modulusLength": 2048, - "publicExponent": "65537" + "publicExponent": "65537", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "importKeyParams": {"hash": "sha-256"}, - "signVerifyParams": {} + "signVerifyParams": {}, }, { "name": "3072/e3/sha-384", "generateKeyParams": { "hash": "sha-384", "modulusLength": 3072, - "publicExponent": "3" + "publicExponent": "3", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "importKeyParams": {"hash": "sha-384"}, - "signVerifyParams": {} + "signVerifyParams": {}, }, { "name": "2048/e3/sha-512", "generateKeyParams": { "hash": "sha-512", "modulusLength": 2048, - "publicExponent": "3" + "publicExponent": "3", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "importKeyParams": {"hash": "sha-512"}, - "signVerifyParams": {} + "signVerifyParams": {}, }, ..._generatedTestData, ]; @@ -118,7 +126,7 @@ final _generatedTestData = [ "dq": "blEU4GuT1HH7kOyF1uzx4xr7EbpwRt8UNmMX7Ubefac2Nd5o2BSIg5uF5o_Kd6bXfFjkHhVdxBfd9FEAmkZw7FkIeucCV0NhV1CZM8d-hVKk7O-NHKlLaE1C-ru6mQUaLyNHQWv-wSLLm5tTFv8849FssGXR7y1Efj4RRC6dciE", "qi": - "KWlET9ZHifStSiIWbLlBk1SZAhQibcE6BWraQM9MCmVgAxBy0T8sMVA0irsZ_G-TMVQhjWdsSCBp78DpnN8OaIrvmUhTfVreQ6glYNnfIacDUF0FV7EsmJFxfVebEbeyGFrbTjD7p-J3gRSinWqhIyBTCxoKUgotEXpz6iQy6WI" + "KWlET9ZHifStSiIWbLlBk1SZAhQibcE6BWraQM9MCmVgAxBy0T8sMVA0irsZ_G-TMVQhjWdsSCBp78DpnN8OaIrvmUhTfVreQ6glYNnfIacDUF0FV7EsmJFxfVebEbeyGFrbTjD7p-J3gRSinWqhIyBTCxoKUgotEXpz6iQy6WI", }, "publicSpkiKeyData": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqTJ63pmvGwhSHYIM3I3jEbDezfJXcpNHHIkCZYZ/Lobj5qmTuTa4WL8UiqyeMpNkQA1T8Al/Nz6CTbcG3hJyH8sn7jYn7oL0QyeGH/qPFvR2HerywoCSODetJRO1TUSricRIbetvsfY/qF2jpILyQBZIH9qjBTaAthRQY1a+CDr+qCNVcLugJtnuZt2lHgsA/kKZw6VpY1QgYafOaAHL5+m83NpbAb5QKKvUEIndxnP120XPldsGNm97TY3BC9f1gHSU2VHSykK1qyPjz6yegnSa5UFBGTFtwH9WUAd3BELBnQm3bf0bKUJmuwwAJrHZKCRKwdecWEL3RBggTx875wIDAQAB", @@ -128,13 +136,13 @@ final _generatedTestData = [ "alg": "RS256", "n": "qTJ63pmvGwhSHYIM3I3jEbDezfJXcpNHHIkCZYZ_Lobj5qmTuTa4WL8UiqyeMpNkQA1T8Al_Nz6CTbcG3hJyH8sn7jYn7oL0QyeGH_qPFvR2HerywoCSODetJRO1TUSricRIbetvsfY_qF2jpILyQBZIH9qjBTaAthRQY1a-CDr-qCNVcLugJtnuZt2lHgsA_kKZw6VpY1QgYafOaAHL5-m83NpbAb5QKKvUEIndxnP120XPldsGNm97TY3BC9f1gHSU2VHSykK1qyPjz6yegnSa5UFBGTFtwH9WUAd3BELBnQm3bf0bKUJmuwwAJrHZKCRKwdecWEL3RBggTx875w", - "e": "AQAB" + "e": "AQAB", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "signature": "gSCxU0PZv96gLRsb2JL3uET4tqT09keOT0iZVcBThU10nwXwCNCc8T45UZs38wPnlibN5QzmpsrMzvwkOlrk5/4RYLTaHjlIug/hp1Xo6hdeyBWLtKG9LqynEb2juKtllovX9Jg7nHAa3oPG1pl1Vdm8rG631jiOx+Pq/JHCq6JZYOwP3nMx3CO/CL0wgWJTIlFDKkByMy2pJSZ/jeUFzNSlrDB/BVqAe0R5/sAAK2mnvqP5FYdb74pNQCAZEcGXjymKvsO3usyD4eMxPfvvQH+rL5Pptonx9PxnBf7dRb73EejdKhps12lOVXoF+X8Ia1TvPyzon+njXBmbWMspmQ==", "importKeyParams": {"hash": "sha-256"}, - "signVerifyParams": {} + "signVerifyParams": {}, }, { "name": "4096/e3/sha-384 generated on linux at 2020-09-24", @@ -158,7 +166,7 @@ final _generatedTestData = [ "dq": "e70PaBqMM5MKock4cyTES2G8HZnHXof8aKDX_3oZ1Sx0LcBwab3UxcsRiuDQrN7q6alf1Olvh-QOx2Ktp1vrFXnT7m63iZBg5_PkJ6YgFDEev0nnHyb6N2TBi0TX01SVE7Rj__acs12M-mVH5yE4Ug7FTLVmwRGx5dUAU1eagFtyg5QCbpgWw8SEY_sYegechyeuckN2QAgayN7XM8aSbUJVDDnB6Y-TWGg9eMbcBEYnbfag-gFeNVFn-DQ7W5V8rLhBtvBjK9w0qz1zpL3FJdrgjqfDT-3Wmtnitj6AC4fcToUk1oXTg6jb1HxbR9SXJ_svpsKz3hmnAI-zMmQ2vw", "qi": - "b0GVOKBRpeuPV0q0laQN6xtPBKKnXPbZH58jFZU8di5v717R60fT3SA-EaSbm1OwyLU-6TnEr3IvH4A9q_5gAGcjtR3FcysrdntqGOaLK2-1_HYxI0L1Ay6drts8qrLIH2jZaZbeMBLOv6nW8nUpoFx4kJwXzqnLBYtKKVghsrUAEe8aK7hjBdRxfJ2CHS41HM3px1cdcRvXAK3YZBdqrsQDfd9FpVFifKCR3fOuwgsFoKMP5brI95VlERyFVLjkrZKtjuyOl8_cyDf0-BWS0YqnFPYKNprB2YYy1YMVYU27KDBbyc8S7DJBsJBi_2ynN1FZgKFMIqhPJPqEKZAnWg" + "b0GVOKBRpeuPV0q0laQN6xtPBKKnXPbZH58jFZU8di5v717R60fT3SA-EaSbm1OwyLU-6TnEr3IvH4A9q_5gAGcjtR3FcysrdntqGOaLK2-1_HYxI0L1Ay6drts8qrLIH2jZaZbeMBLOv6nW8nUpoFx4kJwXzqnLBYtKKVghsrUAEe8aK7hjBdRxfJ2CHS41HM3px1cdcRvXAK3YZBdqrsQDfd9FpVFifKCR3fOuwgsFoKMP5brI95VlERyFVLjkrZKtjuyOl8_cyDf0-BWS0YqnFPYKNprB2YYy1YMVYU27KDBbyc8S7DJBsJBi_2ynN1FZgKFMIqhPJPqEKZAnWg", }, "publicSpkiKeyData": "MIICIDANBgkqhkiG9w0BAQEFAAOCAg0AMIICCAKCAgEAmyCJsQGgKF0wbnfdkkC+aIGEBgodTShLdNw7pkAbiflWWEMFAE/LOd/hyQbQSG5Wn+OjrWbKJAn44BmRHTLqn3ulnIjsekGM4b6aPZU1qYeqeLnO7ev0PesuX/pUELJgf8zdNHC+8zQFLQp2YuYdyZR52iOdcdWgugyvfxKah2EDyl5KQuIbI5S5tPw71B8MjUS6RSnOWJxSxV1tCjQqJL0Hd/HkkXmls988F/lEkwN3orIP+D2TnmAe38spHQEYCSezWy3zvSe1iPd/mQrcjju63Ouwa95eTKCzA8D4/gsz8J906ghrlODm3C1K55PmpGYmZzoUoyfnJ/KZLz18BO1mj4pT8tXi0EOo3cGc0H5EwLcgrJjgleW5Zlc4h4BMZdOtyibY7ydsVMPfmhN6KwsN/eogg+6vedyIKb5HKRtt2YU69hENY8f8ZNBOc34E32RUD59to4uzFO1Ya8z7MMhKPUJIGPzUD57C9ubM92xitYRupjrneY7pWECS2HDw4HxtV927vDSXLQ5s24cCpmMwwtkitTLjyTgW9M3qZqitZEZfthSQSjvoB2/CTeBqhv9ewqNPP11A4SGI4vYsgsijlLhmTmKJXwW3L++VvvpBoZcatDRwy1JplBtFl7HfIl9LKGl1Dq5rz+m09RVSgS+i98NvjhOOsJmGU19mwI0CAQM=", @@ -168,13 +176,13 @@ final _generatedTestData = [ "alg": "RS384", "n": "myCJsQGgKF0wbnfdkkC-aIGEBgodTShLdNw7pkAbiflWWEMFAE_LOd_hyQbQSG5Wn-OjrWbKJAn44BmRHTLqn3ulnIjsekGM4b6aPZU1qYeqeLnO7ev0PesuX_pUELJgf8zdNHC-8zQFLQp2YuYdyZR52iOdcdWgugyvfxKah2EDyl5KQuIbI5S5tPw71B8MjUS6RSnOWJxSxV1tCjQqJL0Hd_HkkXmls988F_lEkwN3orIP-D2TnmAe38spHQEYCSezWy3zvSe1iPd_mQrcjju63Ouwa95eTKCzA8D4_gsz8J906ghrlODm3C1K55PmpGYmZzoUoyfnJ_KZLz18BO1mj4pT8tXi0EOo3cGc0H5EwLcgrJjgleW5Zlc4h4BMZdOtyibY7ydsVMPfmhN6KwsN_eogg-6vedyIKb5HKRtt2YU69hENY8f8ZNBOc34E32RUD59to4uzFO1Ya8z7MMhKPUJIGPzUD57C9ubM92xitYRupjrneY7pWECS2HDw4HxtV927vDSXLQ5s24cCpmMwwtkitTLjyTgW9M3qZqitZEZfthSQSjvoB2_CTeBqhv9ewqNPP11A4SGI4vYsgsijlLhmTmKJXwW3L--VvvpBoZcatDRwy1JplBtFl7HfIl9LKGl1Dq5rz-m09RVSgS-i98NvjhOOsJmGU19mwI0", - "e": "Aw" + "e": "Aw", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "signature": "l4ELdHuWL5cYpTk8HR4JTQ3qumM1dduo1za//76IfMfG+BQ/OByC4lR3ijLARHQjQnjkKr83MY4RLRErcKNFtJIp9E2krTBnwBd84RewnTGTQ5AjCmohrD2BlD++FK0Zh6L6FMiaRxVhMGcQSSR5AgF6p3LwhH/BtkMLpoA3LQi8Vcu4M/pU3vNGdCbEINXS10ZHYVrclSCXEkDOSHfUfaBh25MicQsIGvipW7bRGtHd9cGX4a4CK4cTsi3eifE5NYosmv806mXMUEFRkopEA+8V5Ary2CjWBesdcDsAdxrbulw8bFM2dNMt95HGCbNKAEkoRVbwpvDtgcYtaQJfQnxvJJun0hD/rcjt+fpcd5GUEaSsQ3+Xi66bHvktErnNaz7QDzfzY2JTSMNJriFdYGtNEkwbNI8NBwG5q7qoWVdDY7aJeUsMktmqaTC8ID8VKifjDcxbNfTkGVWwVXfV20wQHNP52v5Jeo2lVCp6d6K4Jc2pZgkLOr1njVn62rMIAoUvw7lyO1Cyavb6VZeCYEjH58FMlmnW/2UB4frxRs/B6QoEukyGvHDjKNvDQ49aKFRrAG+/1FP7e0fSWAgWPgLO1ef+FoTd6cO7ETPdqEVdoxdp/lDCFV4MK8MY201p4puwwTNGbLbXsSOYHM2cTajKGUBd9UfZDcl9rXexy0Q=", "importKeyParams": {"hash": "sha-384"}, - "signVerifyParams": {} + "signVerifyParams": {}, }, { "name": "2048/e3/sha-512 generated on linux at 2020-09-24", @@ -198,7 +206,7 @@ final _generatedTestData = [ "dq": "jIbFxc52nlN0EsucowONtfy3WqXinRDZkt50m3IRq_qlQB3Adbjc2ujTWWtLT7YSYY-xvYN5qlrTEm2pESDmV-e8iVPm1CTlOoKXfN_FwG8c7fyDsg__H0DUR09GVOLAdOh2oC_hMslwjtVUOUwm8GKHsL7RYV9BCdIug7-DqOM", "qi": - "U1j5reaXG6mGvrDUzZzaTMR0JEYVpfrE3pi688eckpiYT4XqlEa3lj_QE7wur1hKLQQJ_JM1sIgsUEabVAErkaM8_8kQ9DCqCO3ObGsPcDT7ddnKlsYsWFPA0RiCyNspQEx9GQ1PidmsDe1WwxvmXYAFwdAeHWsfD8w9JW7uiYA" + "U1j5reaXG6mGvrDUzZzaTMR0JEYVpfrE3pi688eckpiYT4XqlEa3lj_QE7wur1hKLQQJ_JM1sIgsUEabVAErkaM8_8kQ9DCqCO3ObGsPcDT7ddnKlsYsWFPA0RiCyNspQEx9GQ1PidmsDe1WwxvmXYAFwdAeHWsfD8w9JW7uiYA", }, "publicSpkiKeyData": "MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEAz0aDKEaUml23o++GCajehq5TOaUWOUXLEl1GId2MDN9ZbarKyBZ5XeDfEG4o+8fMm5dF3fFCFg9prlL0gX6NdUBJ3y5patccMV7e19avuu66aB/Gw8fgujwKzQVnvX+v7hJDrbhuCVUTjbR+32J81ZacyjyWKNHISAwAGDP0AUoILGO8TtRkrjEcpDZGtrvJ25a1T8Drc2eBLBU3FDeWvarSf5JCRXEAmTBh4jcDCbLRMjPlpU7nyRlFXkjojEJvXTxfXEvEEfuxNAcqRk04BWYYP3WeM3euCoEQT/OxZlV38zjrfSPYZL/r1THlzsfdSgS+o6r6j9R2Db0hOoJ3IwIBAw==", @@ -208,13 +216,13 @@ final _generatedTestData = [ "alg": "RS512", "n": "z0aDKEaUml23o--GCajehq5TOaUWOUXLEl1GId2MDN9ZbarKyBZ5XeDfEG4o-8fMm5dF3fFCFg9prlL0gX6NdUBJ3y5patccMV7e19avuu66aB_Gw8fgujwKzQVnvX-v7hJDrbhuCVUTjbR-32J81ZacyjyWKNHISAwAGDP0AUoILGO8TtRkrjEcpDZGtrvJ25a1T8Drc2eBLBU3FDeWvarSf5JCRXEAmTBh4jcDCbLRMjPlpU7nyRlFXkjojEJvXTxfXEvEEfuxNAcqRk04BWYYP3WeM3euCoEQT_OxZlV38zjrfSPYZL_r1THlzsfdSgS-o6r6j9R2Db0hOoJ3Iw", - "e": "Aw" + "e": "Aw", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "signature": "RoaIlC8VW6NAJDaJgLHITt8haGJmR1Pqkes/AHZoTbJOLTdZHlmBUBOsPRuOIulX1cmhBx0kIRIBG91ERRTmkvUXxfqbPHYd3RwATHuTErHBCi0h5Kk82dqx15ASSWFzzsYNXVc3+vejetZ5Dp9Qpb0AvczqW3DDxW3Zp0TED4SR+z1w51xoRpiCi4rJF4Nrh3J6JeXJEXPTD5z842jlJFaZYlXMtD6SAV4ruYKtuLLLL5Rhq7QDzzwvR0uukAJH1XKAHjfKnG7wy1TI9Gj9iblmPaTsfeFPFtwe2BYMIqLjYeKJp60L+ijTCPUXLeQOgZt6z7KrLI3JQ9gcKk8BaA==", "importKeyParams": {"hash": "sha-512"}, - "signVerifyParams": {} + "signVerifyParams": {}, }, { "name": "2048/e65537/sha-256 generated on chrome at 2020-09-24", @@ -237,7 +245,7 @@ final _generatedTestData = [ "dq": "o85TdKxTRN1rrgBs6WlKslNkgFQLTi7sA_7cqpZcrz03qzqwpDC3HmDrQbOEKTB8bN3KIlNVHRmu4NDwhB91SXiZZLBJ040Ft4sQu1rg6sOLl14tUaDrQ46dTWWuZmR8k_MKVYyN1YEL8C4a6jQXXdjMREcu2AJHXCZn6TjzIgE", "qi": - "eQGdUhjZnRJc1VPBsvT0nnbtzbv6NBBE3bMphN2q8jTr3WzEWRcQvCKm0RanFpatgG-moB5HRW-T2xoGSQ2aylrHPYmZF1MFMVtS2sIfPkh_PyA2jBwQxTKWZVJnkPkq3Rji3j4P4XH_8zhWFIBJuCXjray7lL-YFeJnC66ZfZQ" + "eQGdUhjZnRJc1VPBsvT0nnbtzbv6NBBE3bMphN2q8jTr3WzEWRcQvCKm0RanFpatgG-moB5HRW-T2xoGSQ2aylrHPYmZF1MFMVtS2sIfPkh_PyA2jBwQxTKWZVJnkPkq3Rji3j4P4XH_8zhWFIBJuCXjray7lL-YFeJnC66ZfZQ", }, "publicSpkiKeyData": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAobRrbOlTZXbsHeIIwhKUCEjgTap2d/KMNj0hyXfr3Fk6T4b0Kq3nqr88OwJXtHScLKHGdfOsU2nz32nRDIkbVyhpccS+E/9ADP2NE6c4Jt011iBXecA+2/EqvWCKVULyQjtQmdcrBe9bZnEjbke2NB5ljhYuDfSWPyE8PbKyfD2k6y3Raip0U/E8JNYsI2m/j3vlPHbRegB9O/1q8CerPGwhCtxymVxXJQpue2d+AXbBErWX8/t8SSUnunz7lN9a2KRlrJ1XtQvoVC9Pa4hHgZJYAJgBJb7nJEtMSrJ3p5hlls+T/ZJ/tY2Pau4NXs+iRfzh9mQ1GGq2yRY6nJkY8QIDAQAB", @@ -246,13 +254,13 @@ final _generatedTestData = [ "alg": "RS256", "n": "obRrbOlTZXbsHeIIwhKUCEjgTap2d_KMNj0hyXfr3Fk6T4b0Kq3nqr88OwJXtHScLKHGdfOsU2nz32nRDIkbVyhpccS-E_9ADP2NE6c4Jt011iBXecA-2_EqvWCKVULyQjtQmdcrBe9bZnEjbke2NB5ljhYuDfSWPyE8PbKyfD2k6y3Raip0U_E8JNYsI2m_j3vlPHbRegB9O_1q8CerPGwhCtxymVxXJQpue2d-AXbBErWX8_t8SSUnunz7lN9a2KRlrJ1XtQvoVC9Pa4hHgZJYAJgBJb7nJEtMSrJ3p5hlls-T_ZJ_tY2Pau4NXs-iRfzh9mQ1GGq2yRY6nJkY8Q", - "e": "AQAB" + "e": "AQAB", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "signature": "CdxVztH6a+n+AWT0iZM7vXSpKFiaGqSVGV8wDEnxK5VSVqeyHv1LFIUH+dw3ljgBbrYSpCNoo6KJ8IIigeWVLcZhAnEsKRXp4eoOydp/owggnMhNaQAPTaVYKyHO5QJNTrlZZB4M8VJ5CKeuVBX8T4eEiDdyAgQyxYpd9m3LcrICERHsOvySvs1YlKyl0x4lN2T/vgHB6MU8GWiU0457pJRhTkRbCkxV43yW7dEIuqxDo+4o1kfnOMj3HrPADqRfZDKJfIsEtl7pEBfXWC4cP61uJqauFAYtu7nsUeCAY4RCyKb1r+KqGcEQt04ukYdubzZdRrg2YhQ3GflcQs1wNA==", "importKeyParams": {"hash": "sha-256"}, - "signVerifyParams": {} + "signVerifyParams": {}, }, { "name": "2048/e65537/sha-256 generated on firefox at 2020-09-24", @@ -275,7 +283,7 @@ final _generatedTestData = [ "dq": "ZePRVWbBv6Bm3mDhqf-WiIxHkH7sEnL5KRecUnpbi7arwTYvf5_5kMuVcYf2iVATbivZSSgqoKIYnZXjuuQfsTmLLWyNGzOVWZ778qqasRtn4W1hgXocbSvdiKwJhXIhENP1a9QqffoVNSJW7LKFeuIo0fMOB1l5SSe5FqgjFp0", "qi": - "V_6Ww6_G-qmxbEvdud-rDEVF5cDaNbrm27mpW89uCDQ21afwW1jDIhi18cRR8d_1dQt3D8NDTUZxTvQhGieubveLsk4ac3AbMMb3LrY1lcBpZ9VzjNth3psJv_lG7sGCgad46tVB4XRoKl9NNXM99ZYk4S_uQFJAOG3QdsPy5XQ" + "V_6Ww6_G-qmxbEvdud-rDEVF5cDaNbrm27mpW89uCDQ21afwW1jDIhi18cRR8d_1dQt3D8NDTUZxTvQhGieubveLsk4ac3AbMMb3LrY1lcBpZ9VzjNth3psJv_lG7sGCgad46tVB4XRoKl9NNXM99ZYk4S_uQFJAOG3QdsPy5XQ", }, "publicSpkiKeyData": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAytYRWcdWR96X9Td29tIYXnnx6IFo3qKyoUq9iO9yIXgqZYZ1sVqvTfYCJzLzdhmecA2zqruVCVZPp5SegwzvlgruenVBv9eNX3tmJNsLqwnoaTeR7cIXM4A6o0pFWk+i8Aus/c5u10EglAz0ao/g/LPS/THFy9frYP3de5MKtw0gvVdtISSuiHYyHyAujW6IiNdvdY+hCESyXxnANdH/kyzH2qGWnuV0dn5aGQz1Gco0vThZMvft6jo84GIfmo8eHD6EeX1OkeFsQZud66rPw8hSB9+DA/LxBihP+ZcvChbg6nA2DnIqFNKsaY8DHKMGztW3rsXFH422uKI0CD9s+QIDAQAB", @@ -284,13 +292,13 @@ final _generatedTestData = [ "alg": "RS256", "n": "ytYRWcdWR96X9Td29tIYXnnx6IFo3qKyoUq9iO9yIXgqZYZ1sVqvTfYCJzLzdhmecA2zqruVCVZPp5SegwzvlgruenVBv9eNX3tmJNsLqwnoaTeR7cIXM4A6o0pFWk-i8Aus_c5u10EglAz0ao_g_LPS_THFy9frYP3de5MKtw0gvVdtISSuiHYyHyAujW6IiNdvdY-hCESyXxnANdH_kyzH2qGWnuV0dn5aGQz1Gco0vThZMvft6jo84GIfmo8eHD6EeX1OkeFsQZud66rPw8hSB9-DA_LxBihP-ZcvChbg6nA2DnIqFNKsaY8DHKMGztW3rsXFH422uKI0CD9s-Q", - "e": "AQAB" + "e": "AQAB", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "signature": "ru6GDrZSq5ygvQu/zhO5yfClfG25ydyEGtLNbS5FVd8BTSbQ/+jOXurTKmxmVJSlRKKsV4wh+b1W27TIfHApImx3QljLVMltfyMH1D6KxOKGbG+mJztAr9jpojucWozuwk+KjzVYTIUfyxUHDsKB7psGZCUmfh8tbt5TK8OkmDnDrV7SPC4fPgxHVRT0RKVolR+CEFyVABHs8HcqkSLGOmYveTVMSQA6Kzxjdg6BDxt//2qpLmIOzbhAaE0OzMaXJdP2sHWgMoe9gj5DA14S+P17hZ0w726cjBbcIzz1pHTb/aagfcibIWfEohIIAtuoX0hzFXBPzCz8kkvB37vO2w==", "importKeyParams": {"hash": "sha-256"}, - "signVerifyParams": {} + "signVerifyParams": {}, }, { "name": "4096/e3/sha-384 generated on chrome at 2020-09-24", @@ -313,7 +321,7 @@ final _generatedTestData = [ "dq": "hcwN0bAHp-hy7kzM3iEWNhvcZFk6nvXzSqEkQ_6ACVeV0AHmMk__V0p9gdgKl8tUw24PE3oxs6smRWBXbrd5-M3FXjx8Dmxx9eu9jmMkR7UoF_ZM5_h_wvQv38NnFLwS-dH5zc0yQ2KNlJz39QqpYk8mfyd3LPK5t7_kSeyar5FhCrdWo5asqxTLdMiQLvSS64YAfdDwI2RIHMfX6W9NsS2ezswqpOcxe7OmI_DzTcHJBB5DA9OC1lymgwxEpPzDViwpSmO1KnYUfOfJdoh5f8dU-qeMh49aWdYsOzIH8UB6c2sJ40Pewo-NXh3Y1TWBP5N7S7PiyWljwsQU1ik1pw", "qi": - "SlcVNuJP7drJfb14VRHvfjrkST5ZqjsmahcHDAQq3hYH96E0lKIK-dSOpKA-9__Y749atokOHLHyIKzF63llKjgL86lU4zwQGz5PSymn3Ql8rfJeQn_pj-sS7sc0KPTKzYoSGWrlD3EhsexteE7BwYV8iNklYX1RZE1gcMlTnriIiu9eUyNm48lnQtxOFmEtRxOVcRF6WbfdIwENY7cHdr451lQjQrFsELUI-_15o5PAuSdSUOOM5-PHVIC9bVE06F3XdXXMdyGH3AqL1K2OmGKhz8d-C2TlZurQoIibR0QwT5-wMfEwwb-B05JHruS6rIiy0K_rwI2Tr-9fV22jyw" + "SlcVNuJP7drJfb14VRHvfjrkST5ZqjsmahcHDAQq3hYH96E0lKIK-dSOpKA-9__Y749atokOHLHyIKzF63llKjgL86lU4zwQGz5PSymn3Ql8rfJeQn_pj-sS7sc0KPTKzYoSGWrlD3EhsexteE7BwYV8iNklYX1RZE1gcMlTnriIiu9eUyNm48lnQtxOFmEtRxOVcRF6WbfdIwENY7cHdr451lQjQrFsELUI-_15o5PAuSdSUOOM5-PHVIC9bVE06F3XdXXMdyGH3AqL1K2OmGKhz8d-C2TlZurQoIibR0QwT5-wMfEwwb-B05JHruS6rIiy0K_rwI2Tr-9fV22jyw", }, "publicSpkiKeyData": "MIICIDANBgkqhkiG9w0BAQEFAAOCAg0AMIICCAKCAgEAwlyZwDQPBWsTSUPqbgBmAYjYs4+RQX4HWx/hYsHrYrq9i8fIvbeCG2DUCJnODufJpTfViQZvBKaRaol6uGcGJ2f+cS5DrFFqbpZ1cILn8ZaUrw99o6C3vZXAE/07TNmwYG50SQV+8zwNFopAzg+tfo18oJzxwgh5ABqbODGBFwA8DDfHXldFiPt9QVKMVS8pqJfFztRlAMfF580t/EhHzH+MUQVFZ4Wo4a9F+YKqwZ5BTCapunTNSplO3LqfHpWp2WOwBtloMyGzuTKoxFG05XCT0WkYiX1d4sbcLz1BB9EhqbLYoQqhkY7X0xv156GKjdETeIZIojlYbFP9Xk4eZeQ7zghsf5dOD91a9Xv181BFQ+OqdSLK2OMAMQB5xuSCnS3OTdALvza8La2UcK3Nuay676bPs8+cXqS0dbzKdIDed4mdeskvJxP5wPK/RilHrLJjoiGzWDRaw1cLueoEbCShpDA5wUKth0EVcVpn/Yqw9zkouxmhSgRcbvgMcn3MmX54LahwKKjO2gbX0+94Je42l90qSo6AfkNjTbkA8oImgUIARDQLENzyvbpZKpHlaUwRIfG48C5wRb2vf3YV94bs+bfHfFOcoQ4b0wB6m1fUey7m5TFDrbfJvgKFJHMnmaXYQyJEeM78a8iZggzpePgmlQxgbVfW5KQeIxYtDCUCAQM=", @@ -322,13 +330,13 @@ final _generatedTestData = [ "alg": "RS384", "n": "wlyZwDQPBWsTSUPqbgBmAYjYs4-RQX4HWx_hYsHrYrq9i8fIvbeCG2DUCJnODufJpTfViQZvBKaRaol6uGcGJ2f-cS5DrFFqbpZ1cILn8ZaUrw99o6C3vZXAE_07TNmwYG50SQV-8zwNFopAzg-tfo18oJzxwgh5ABqbODGBFwA8DDfHXldFiPt9QVKMVS8pqJfFztRlAMfF580t_EhHzH-MUQVFZ4Wo4a9F-YKqwZ5BTCapunTNSplO3LqfHpWp2WOwBtloMyGzuTKoxFG05XCT0WkYiX1d4sbcLz1BB9EhqbLYoQqhkY7X0xv156GKjdETeIZIojlYbFP9Xk4eZeQ7zghsf5dOD91a9Xv181BFQ-OqdSLK2OMAMQB5xuSCnS3OTdALvza8La2UcK3Nuay676bPs8-cXqS0dbzKdIDed4mdeskvJxP5wPK_RilHrLJjoiGzWDRaw1cLueoEbCShpDA5wUKth0EVcVpn_Yqw9zkouxmhSgRcbvgMcn3MmX54LahwKKjO2gbX0-94Je42l90qSo6AfkNjTbkA8oImgUIARDQLENzyvbpZKpHlaUwRIfG48C5wRb2vf3YV94bs-bfHfFOcoQ4b0wB6m1fUey7m5TFDrbfJvgKFJHMnmaXYQyJEeM78a8iZggzpePgmlQxgbVfW5KQeIxYtDCU", - "e": "Aw" + "e": "Aw", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "signature": "sUuZp3Sbn9a12rh7DVFhDwr2i7iyo806cyLGULFT2E2kAL/iFijfiwapuHTQiYU8bqdoLWIpvJLvpIqa3TEytxOEDcym9phVh92iGXQRbCaFEfhsRpKP8AhYKjPxzQo3HPYZ3hyCvNohPsH+/hes7miMjHPDlarJtu16ROLzjfW5cLn8Nt/TJd6raPY7Iq/djPjn3r+IzfU0fTPDwZ2cIp3TOKr2W23f6lG56eBP197IMHgWg9NN/XxHQfmOhF5dQDQIm8t3C23qhxmUaxNcUucKiEf5ouo3kVtQd038RG4s7lz4pvrNmt6lqAUY4fsvXgY7ljgmgerRdnVBtPo9WINVBnCQSQWmZ+gYxaZfMAKr4sLnnU2ie3eJmFX0rgiBOTWD3qMW39jwi72qyDd8znfdV7C0ZI4VBTNcfxJpojwC/CWYV+QqxH46NvRLhsZQ6hyPdnB5/Yrso867+R7ZHVqZrTQtsJdfIkrrs80lIiFB3EQR/YIKnLN984z6IMnxq5nfcvgSNlcFrHFSOJXqE5sLYpvUm68X2AxVW0Vh+yPMz6PhAem4RjPctPpEaViHQSrJBxl0xCRou7CfJXW5Ct3JxMLfOSuakh6+cMC7R7ReqwO+Hcz8MiFTOgecOrag3XP5QaDO84PTWOAVeDJlhtco5p0oYYGupLIti/P5KNg=", "importKeyParams": {"hash": "sha-384"}, - "signVerifyParams": {} + "signVerifyParams": {}, }, { "name": "2048/e3/sha-512 generated on chrome at 2020-09-24", @@ -351,7 +359,7 @@ final _generatedTestData = [ "dq": "eoTxVmF6NpBs2WW5JXfzqVZWq7yuRtGZTKOdklW3k5vw3sNZf9qSMtvE6lOcz5nvcyZeMWlSlGy57W7UKmFF63w69F6cmjVXPI7zj10oE0F0O-bys6H0yOWv18kAl0eJMdB5Pt3V8dYSl_GcYd6wyy75fevIBi3EG-TEMo4erkc", "qi": - "83f1Ke2VpYHvgZpl1KHC-tmHHoZRCIvxywZEiCkgK8_BiceUxie4sdDMABA67qj0G5w8AupCrDJSzGBoy45nIGiWWmn4jk9NTqoxnmpQCzIZgD_rfUmhkQBIA7QDlXYinxFnUqFACzLfPmVhxv-gfOXr9l4RJb5Zsnlb5WpYaAI" + "83f1Ke2VpYHvgZpl1KHC-tmHHoZRCIvxywZEiCkgK8_BiceUxie4sdDMABA67qj0G5w8AupCrDJSzGBoy45nIGiWWmn4jk9NTqoxnmpQCzIZgD_rfUmhkQBIA7QDlXYinxFnUqFACzLfPmVhxv-gfOXr9l4RJb5Zsnlb5WpYaAI", }, "publicSpkiKeyData": "MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEAtcC4smIOZ2Sf+0s/jmHTYxGnYgisavnU1cnu3WY81+bDCoLsuknsv2yf9P7xniJs00wTnKMxjo8xedErT2f0lYqVPPubHYA4tL+jfSeHNa19e+xadfe2Wy63zlfQl1yF4BYAYTuuMAOVvOawPUq2a3y4c1bMX8eUTGu54y908EWDYNFjlaE/QP+G2TnOvvzKsP66TknYBRvuauazqehjzJgvp2NqJTrztd8FV+kLU5mBjKPjL2Q5URO+p8CvzC6NcM5HD4GNmkC2AiCggKxOWcz1lpuLO8Rjn222V0fw+OK/kPJdyzvpm4W1V6WrVUC/0zaagYUAXISsbJ0xKsqqnQIBAw==", @@ -360,13 +368,13 @@ final _generatedTestData = [ "alg": "RS512", "n": "tcC4smIOZ2Sf-0s_jmHTYxGnYgisavnU1cnu3WY81-bDCoLsuknsv2yf9P7xniJs00wTnKMxjo8xedErT2f0lYqVPPubHYA4tL-jfSeHNa19e-xadfe2Wy63zlfQl1yF4BYAYTuuMAOVvOawPUq2a3y4c1bMX8eUTGu54y908EWDYNFjlaE_QP-G2TnOvvzKsP66TknYBRvuauazqehjzJgvp2NqJTrztd8FV-kLU5mBjKPjL2Q5URO-p8CvzC6NcM5HD4GNmkC2AiCggKxOWcz1lpuLO8Rjn222V0fw-OK_kPJdyzvpm4W1V6WrVUC_0zaagYUAXISsbJ0xKsqqnQ", - "e": "Aw" + "e": "Aw", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "signature": "F/KKnjrdQdCbakplDtT7Z13giJ+hdhV+0qarvSmX/HkYl4Oq8ntqMlVAhBffFNyuWRyZ9LNfyFRG2Fy6/PCjEfoxAmQLWohosA56C6AIjCPXl2nF0Jaj3R8NrY14wamBvDOO7fkX0gnvqbDNdZXAAS2xoEvU91gem7PTJAWAljlbKs7Q3fF6uEL7udMgEoBPoKEdVCimzh/brni9JCh3/5rkm96tX9xluS8kRusJ5ACYcyBww04myYV0fOQryTNXbjiaR4/A/GGUlxN7Gjj8fl0VbAuNm0Y9YI82/lYeBBnGWFacw7k1EVcxErHsyTclDQM89dHbx49wt2Gs4uRIVg==", "importKeyParams": {"hash": "sha-512"}, - "signVerifyParams": {} + "signVerifyParams": {}, }, { "name": "4096/e3/sha-384 generated on firefox at 2020-09-24", @@ -389,7 +397,7 @@ final _generatedTestData = [ "dq": "jD40BNdQ_UJrb4ogyq2nKl06GPrHWfFHPsu6y9gUGZfuekLUSe9ez-RTKiviMLctHQHCfZEm-oVwvsUuYiv2PmHP5koOuYMOSUVnfoUCDfEwEkaHI6JdyANfxKNCygxGOj7juqeE7jhUCXlE8geh-ZF5KKgNBp3RR5TzBsuyKvtWNRlnlqxjp3v6TT7q_eY2rtFoF9Nh8cUdHkp9DwjLlDgQOFWhBqY4TMRIJtUh79TXl3dQa2DuQFq925LfxOyI71LW2HeZNqVlZsWZMMM2PSRZiGfdCtXhkMPcmTl3p9njviai4dgA8zzQkYxFG2rGlquHs2FHZ8TNRT80Yhw_Mw", "qi": - "rYpGQ6gh_8C5QBwZO8iO4Zk99M-EJ-edT1xYr328SoSype1tIQ_vnSFY8Tuvp9L5yeb5DuGFiid-gnzZgKeS0H7IJnzjpWdaGxDq8GXBJk2mJeG7zbhdJDjrJIBQcFMWD9MTrquA1DDmVR-AaqxrCY5htLnx8cPm7M9yuanBIV1ogZcjzoGLRwQrcJ8J7m_-HCzH2QEEo-MM5uLD3DEftposJ6YcXvBA29wKgWHBudr4EbGKJIMkaOgbDRuLsdUMbCsENN6EZE4t_9TUt8qVIPaZcHR5NZQoyETkT7EzBMcjgOaH8mRiY0e1zFEDfYvXBS9LnCE7rR15YxupCL1r7w" + "rYpGQ6gh_8C5QBwZO8iO4Zk99M-EJ-edT1xYr328SoSype1tIQ_vnSFY8Tuvp9L5yeb5DuGFiid-gnzZgKeS0H7IJnzjpWdaGxDq8GXBJk2mJeG7zbhdJDjrJIBQcFMWD9MTrquA1DDmVR-AaqxrCY5htLnx8cPm7M9yuanBIV1ogZcjzoGLRwQrcJ8J7m_-HCzH2QEEo-MM5uLD3DEftposJ6YcXvBA29wKgWHBudr4EbGKJIMkaOgbDRuLsdUMbCsENN6EZE4t_9TUt8qVIPaZcHR5NZQoyETkT7EzBMcjgOaH8mRiY0e1zFEDfYvXBS9LnCE7rR15YxupCL1r7w", }, "publicSpkiKeyData": "MIICIDANBgkqhkiG9w0BAQEFAAOCAg0AMIICCAKCAgEAvfEOdh9EJ3wce+QheE4EdcsBWwr5NAM5FkvJjRPp15lZjjOKAv82DJ2aFlUFkBqK0dF9Oo8+jSLX4Q5BwzvwaT2q6MMX1BojKadCsxlQr2M6rlGsKawQDk3Bnst0qNTtLFOrwSMR1jt/hUpcSiGwCJwBHAFqDrDq485vvd2JZfWRVV3xYFRMtGVu9qjG2zs2MVD+CpbTrzDNA2X0B8Tzgaj/H6pi+CLi2gguhxl0MqV1oMljRXBTIerXH+KuLmElxnJcWl9SZqi58Y2AqKD5PBRszhWN9E5YIn/wj1BIFvNpmDNtj2IzhaWYzZqvMqEgeF0ZPL/c55Dhd+DiJbOWCxevhWxb2JE0/cduZ0B33VC5PLURFh3QZ9C+tpotAi8Ty+YlNBOehHJuqR9TGE/XaQMACdWe39SRkTu74G/9WxW5VBnPVQY3B7NuUgSykvdChj9BBeUIAMx0eB6E/AyCpimTpir9EDWB2vrkYSGDb4kf3Sgi+lcBFDuicuCMPkv+KK4/psSTsoAHZHMtbnMbWBJcCFL75bLQ5iJYOsutWIK+GEbnmFMnzKTGDgHsIAluJ43AV4gV0ENT71wRaWdBuNaOzhwSpCJSZJb6ITQd3vCqPayeiVEncBzPYhuJtFCLJAC72yqIJqJhZy/YWXbU917Pqo9Ego3Bxclji504aQ8CAQM=", @@ -398,13 +406,13 @@ final _generatedTestData = [ "alg": "RS384", "n": "vfEOdh9EJ3wce-QheE4EdcsBWwr5NAM5FkvJjRPp15lZjjOKAv82DJ2aFlUFkBqK0dF9Oo8-jSLX4Q5BwzvwaT2q6MMX1BojKadCsxlQr2M6rlGsKawQDk3Bnst0qNTtLFOrwSMR1jt_hUpcSiGwCJwBHAFqDrDq485vvd2JZfWRVV3xYFRMtGVu9qjG2zs2MVD-CpbTrzDNA2X0B8Tzgaj_H6pi-CLi2gguhxl0MqV1oMljRXBTIerXH-KuLmElxnJcWl9SZqi58Y2AqKD5PBRszhWN9E5YIn_wj1BIFvNpmDNtj2IzhaWYzZqvMqEgeF0ZPL_c55Dhd-DiJbOWCxevhWxb2JE0_cduZ0B33VC5PLURFh3QZ9C-tpotAi8Ty-YlNBOehHJuqR9TGE_XaQMACdWe39SRkTu74G_9WxW5VBnPVQY3B7NuUgSykvdChj9BBeUIAMx0eB6E_AyCpimTpir9EDWB2vrkYSGDb4kf3Sgi-lcBFDuicuCMPkv-KK4_psSTsoAHZHMtbnMbWBJcCFL75bLQ5iJYOsutWIK-GEbnmFMnzKTGDgHsIAluJ43AV4gV0ENT71wRaWdBuNaOzhwSpCJSZJb6ITQd3vCqPayeiVEncBzPYhuJtFCLJAC72yqIJqJhZy_YWXbU917Pqo9Ego3Bxclji504aQ8", - "e": "Aw" + "e": "Aw", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "signature": "FnxIgLPjqcS/F3uJlEGTepC+BD0Zb3ovayNePBBxrYmm1JYX2usrFsSRB0O5EpQUL/QdTs9WNg+SHPUulgEistjcXanD6SaLBrd2xrO1WltlGGTQy7ODwzefCMgpmPEeRCJK54KdUYC0/CRrh/i1HNf9vq4XfUqL1EwdGboLvr+xXz4rGzp+5Q2BuxlTywevrpRu9YLUY0rpmxzu3qQ7bM6MXoBgd2LAJA/6mx42CvlDilnWSAfgqw0ZJeksUPK0t3JfzrQDJHwInILz+5P6MONii+XrrFQatW/SvwgAw/6Uz5c09ZkMWCjVjaOuePQ87c3HtJmxg6ZLNTCM7YEDM0CEaRsdxwbn5q9ta2MvzbWHOwtKF+4qqe19HJ3+etZ+QaP7o3tu9R5HOih8sb1xALRJiB4MkzXWTI/IdZvwkPB9K1Rdg6KmaXNY1s8IQHkAS6gexdPnvCv6RBAXtJNe25e8t+FFpFOCVgr+vZMHEcVD+OSuM9fFILOiR5HEf9BjtZAaCfNesKRcbNIJDA4hWHnhEQEQPOyKAxHmyZ2c7JzAiNLlO5TyCkfyBqDxRF/reRg9CR39lNRYfQ+vNfiDJ9HJv3h3Hsft0itCxuZ51Ba8YprdpF3JSL468E1Ry4+ya7o6lRldXVfWYWPNoRl3Nxb6EDq4T1tQLhgE7s8NwaY=", "importKeyParams": {"hash": "sha-384"}, - "signVerifyParams": {} + "signVerifyParams": {}, }, { "name": "2048/e3/sha-512 generated on firefox at 2020-09-24", @@ -427,7 +435,7 @@ final _generatedTestData = [ "dq": "g5cJSVNojCWwV-sPJZjXQoXu9nsjcw29gfpXiF3c6cXaltbcmzGo9We5j_BBfU-3g0EZ52zLMdpyG9K7V3T87rAsjULyEYiB19CsJiOGcFAHuGCXI10xfu6JYXGaae9F6s9lEgjg3YZns6lSwvLqUhMKG3LCPR5f9e96sE5WcHs", "qi": - "MgDORyQEkU5L2h2v0kVg_mXBrMrQr4CCaJLAP3SE4QVh-Lvpj7bupxxmF0VWgvMBdE7KQbZ1blsEUgv-l9LwkqsCtGXEE6YQwkla7rXJ3ldbGVXMEks9mKJMidhYfhBGp6vIvDpPbJ-dn2NqB5gmASh9eUraH9y7I-nXIlzYx1g" + "MgDORyQEkU5L2h2v0kVg_mXBrMrQr4CCaJLAP3SE4QVh-Lvpj7bupxxmF0VWgvMBdE7KQbZ1blsEUgv-l9LwkqsCtGXEE6YQwkla7rXJ3ldbGVXMEks9mKJMidhYfhBGp6vIvDpPbJ-dn2NqB5gmASh9eUraH9y7I-nXIlzYx1g", }, "publicSpkiKeyData": "MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEApbqAx1Wi5wmSp5gaShQYkx6YGt1yptlvkYCThVhWkQmaLtnMqTDUM2n+P7RGNkNau5z5wZTaHZ/uMJ99uQHl/RVO9LDrscp/+v87rn19WkBhiVzaxZlgF1wJBMDSKa3jsgbJEjPTGgQrJyxJkzEYe2+HRdes4Y71YkDAq6vcU/YoPV6cLqFVcn3Q6pfUNJia5aOlQJ6rHAKgNNB4eLFLeLIbHJRC4dG4egF4tjGTeepEje9SBsHlxbo0MoElw5DMFXtpZFhRNWAjI9QTknbtMl139CgF8u5yJffj2KyJwYFEl3/T//iKLwDfgWR5E7Hf9WMBlHdyOVd4d/Vipa7pBwIBAw==", @@ -436,12 +444,12 @@ final _generatedTestData = [ "alg": "RS512", "n": "pbqAx1Wi5wmSp5gaShQYkx6YGt1yptlvkYCThVhWkQmaLtnMqTDUM2n-P7RGNkNau5z5wZTaHZ_uMJ99uQHl_RVO9LDrscp_-v87rn19WkBhiVzaxZlgF1wJBMDSKa3jsgbJEjPTGgQrJyxJkzEYe2-HRdes4Y71YkDAq6vcU_YoPV6cLqFVcn3Q6pfUNJia5aOlQJ6rHAKgNNB4eLFLeLIbHJRC4dG4egF4tjGTeepEje9SBsHlxbo0MoElw5DMFXtpZFhRNWAjI9QTknbtMl139CgF8u5yJffj2KyJwYFEl3_T__iKLwDfgWR5E7Hf9WMBlHdyOVd4d_Vipa7pBw", - "e": "Aw" + "e": "Aw", }, "plaintext": "cXVpcwptaSBldCBvcmNpIGltcGVyZGk=", "signature": "gkfS6r8aPDRDr0iaWg/dOA4QqDoWVtZIHUuNhJM8r6xahYqxY/D2rWud94a2XbiuimagIYmmB/lu8w305E3z349AbJ3rhgiXXQBEFs5ayznn33STzGPomjhtlY7UcDtykFPo1lXgslYYQ6PAyK+U2yz4m0shx+bAz3jan+g4FeHFyW/a2NvJUbmJg0P7U3/XkBmrWUUwM/3uPyucxd+J3LwPiSNHtYn6BSYatu3KUS8ZFC9eaxq+I9WmW2jQAu12hv2paU/mQNWaKYmGTmOkOJ44sWpo2id115AOA4eYU0NYSZAKdoAq5rOq211EKfyAcz2AU1WgOSTUciOqRJWV+Q==", "importKeyParams": {"hash": "sha-512"}, - "signVerifyParams": {} + "signVerifyParams": {}, }, ]; diff --git a/lib/src/third_party/boringssl/generated_bindings.dart b/lib/src/third_party/boringssl/generated_bindings.dart index 52f40e00..429062dd 100644 --- a/lib/src/third_party/boringssl/generated_bindings.dart +++ b/lib/src/third_party/boringssl/generated_bindings.dart @@ -65,17 +65,16 @@ import 'dart:ffi' as ffi; class BoringSsl { /// Holds the symbol lookup function. final ffi.Pointer Function(String symbolName) - _lookup; + _lookup; /// The symbols are looked up in [dynamicLibrary]. BoringSsl(ffi.DynamicLibrary dynamicLibrary) - : _lookup = dynamicLibrary.lookup; + : _lookup = dynamicLibrary.lookup; /// The symbols are looked up with [lookup]. BoringSsl.fromLookup( - ffi.Pointer Function(String symbolName) - lookup) - : _lookup = lookup; + ffi.Pointer Function(String symbolName) lookup, + ) : _lookup = lookup; /// BN_add sets |r| = |a| + |b|, where |r| may be the same pointer as either |a| /// or |b|. It returns one on success and zero on allocation failure. @@ -84,20 +83,27 @@ class BoringSsl { ffi.Pointer a, ffi.Pointer b, ) { - return _BN_add( - r, - a, - b, - ); + return _BN_add(r, a, b); } - late final _BN_addPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer)>>('BN_add'); - late final _BN_add = _BN_addPtr.asFunction< - int Function( - ffi.Pointer, ffi.Pointer, ffi.Pointer)>(); + late final _BN_addPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ) + > + >('BN_add'); + late final _BN_add = + _BN_addPtr.asFunction< + int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ) + >(); /// BN_bin2bn sets |*ret| to the value of |len| bytes from |in|, interpreted as /// a big-endian number, and returns |ret|. If |ret| is NULL then a fresh @@ -108,20 +114,27 @@ class BoringSsl { int len, ffi.Pointer ret, ) { - return _BN_bin2bn( - in1, - len, - ret, - ); - } - - late final _BN_bin2bnPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, ffi.Size, - ffi.Pointer)>>('BN_bin2bn'); - late final _BN_bin2bn = _BN_bin2bnPtr.asFunction< - ffi.Pointer Function( - ffi.Pointer, int, ffi.Pointer)>(); + return _BN_bin2bn(in1, len, ret); + } + + late final _BN_bin2bnPtr = + _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Size, + ffi.Pointer, + ) + > + >('BN_bin2bn'); + late final _BN_bin2bn = + _BN_bin2bnPtr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); /// BN_bn2bin_padded serialises the absolute value of |in| to |out| as a /// big-endian integer. The integer is padded with leading zeros up to size @@ -132,75 +145,70 @@ class BoringSsl { int len, ffi.Pointer in1, ) { - return _BN_bn2bin_padded( - out, - len, - in1, - ); + return _BN_bn2bin_padded(out, len, in1); } - late final _BN_bn2bin_paddedPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, ffi.Size, - ffi.Pointer)>>('BN_bn2bin_padded'); - late final _BN_bn2bin_padded = _BN_bn2bin_paddedPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer)>(); + late final _BN_bn2bin_paddedPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function( + ffi.Pointer, + ffi.Size, + ffi.Pointer, + ) + > + >('BN_bn2bin_padded'); + late final _BN_bn2bin_padded = + _BN_bn2bin_paddedPtr.asFunction< + int Function(ffi.Pointer, int, ffi.Pointer) + >(); /// BN_cmp returns a value less than, equal to or greater than zero if |a| is /// less than, equal to or greater than |b|, respectively. - int BN_cmp( - ffi.Pointer a, - ffi.Pointer b, - ) { - return _BN_cmp( - a, - b, - ); + int BN_cmp(ffi.Pointer a, ffi.Pointer b) { + return _BN_cmp(a, b); } - late final _BN_cmpPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function( - ffi.Pointer, ffi.Pointer)>>('BN_cmp'); - late final _BN_cmp = _BN_cmpPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer)>(); + late final _BN_cmpPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function(ffi.Pointer, ffi.Pointer) + > + >('BN_cmp'); + late final _BN_cmp = + _BN_cmpPtr.asFunction< + int Function(ffi.Pointer, ffi.Pointer) + >(); /// BN_free frees the data referenced by |bn| and, if |bn| was originally /// allocated on the heap, frees |bn| also. - void BN_free( - ffi.Pointer bn, - ) { - return _BN_free( - bn, - ); + void BN_free(ffi.Pointer bn) { + return _BN_free(bn); } late final _BN_freePtr = _lookup)>>( - 'BN_free'); + 'BN_free', + ); late final _BN_free = _BN_freePtr.asFunction)>(); /// BN_lshift sets |r| equal to |a| << n. The |a| and |r| arguments may be the /// same |BIGNUM|. It returns one on success and zero on allocation failure. - int BN_lshift( - ffi.Pointer r, - ffi.Pointer a, - int n, - ) { - return _BN_lshift( - r, - a, - n, - ); + int BN_lshift(ffi.Pointer r, ffi.Pointer a, int n) { + return _BN_lshift(r, a, n); } - late final _BN_lshiftPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function( - ffi.Pointer, ffi.Pointer, ffi.Int)>>('BN_lshift'); - late final _BN_lshift = _BN_lshiftPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, int)>(); + late final _BN_lshiftPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function(ffi.Pointer, ffi.Pointer, ffi.Int) + > + >('BN_lshift'); + late final _BN_lshift = + _BN_lshiftPtr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, int) + >(); /// BN_new creates a new, allocated BIGNUM and initialises it. ffi.Pointer BN_new() { @@ -213,35 +221,27 @@ class BoringSsl { /// BN_num_bytes returns the minimum number of bytes needed to represent the /// absolute value of |bn|. - int BN_num_bytes( - ffi.Pointer bn, - ) { - return _BN_num_bytes( - bn, - ); + int BN_num_bytes(ffi.Pointer bn) { + return _BN_num_bytes(bn); } - late final _BN_num_bytesPtr = _lookup< - ffi.NativeFunction)>>( - 'BN_num_bytes'); + late final _BN_num_bytesPtr = + _lookup< + ffi.NativeFunction)> + >('BN_num_bytes'); late final _BN_num_bytes = _BN_num_bytesPtr.asFunction)>(); /// BN_set_word sets |bn| to |value|. It returns one on success or zero on /// allocation failure. - int BN_set_word( - ffi.Pointer bn, - int value, - ) { - return _BN_set_word( - bn, - value, - ); + int BN_set_word(ffi.Pointer bn, int value) { + return _BN_set_word(bn, value); } - late final _BN_set_wordPtr = _lookup< - ffi.NativeFunction, BN_ULONG)>>( - 'BN_set_word'); + late final _BN_set_wordPtr = + _lookup< + ffi.NativeFunction, BN_ULONG)> + >('BN_set_word'); late final _BN_set_word = _BN_set_wordPtr.asFunction, int)>(); @@ -252,20 +252,27 @@ class BoringSsl { ffi.Pointer a, ffi.Pointer b, ) { - return _BN_sub( - r, - a, - b, - ); + return _BN_sub(r, a, b); } - late final _BN_subPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer)>>('BN_sub'); - late final _BN_sub = _BN_subPtr.asFunction< - int Function( - ffi.Pointer, ffi.Pointer, ffi.Pointer)>(); + late final _BN_subPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ) + > + >('BN_sub'); + late final _BN_sub = + _BN_subPtr.asFunction< + int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ) + >(); /// BN_value_one returns a static BIGNUM with value 1. ffi.Pointer BN_value_one() { @@ -274,7 +281,8 @@ class BoringSsl { late final _BN_value_onePtr = _lookup Function()>>( - 'BN_value_one'); + 'BN_value_one', + ); late final _BN_value_one = _BN_value_onePtr.asFunction Function()>(); @@ -296,17 +304,14 @@ class BoringSsl { /// This function can only be called on a "top level" |CBB|, i.e. one initialised /// with |CBB_init| or |CBB_init_fixed|, or a |CBB| set to the zero state with /// |CBB_zero|. - void CBB_cleanup( - ffi.Pointer cbb, - ) { - return _CBB_cleanup( - cbb, - ); + void CBB_cleanup(ffi.Pointer cbb) { + return _CBB_cleanup(cbb); } late final _CBB_cleanupPtr = _lookup)>>( - 'CBB_cleanup'); + 'CBB_cleanup', + ); late final _CBB_cleanup = _CBB_cleanupPtr.asFunction)>(); @@ -315,55 +320,46 @@ class BoringSsl { /// /// To avoid unfinalized length prefixes, it is a fatal error to call this on a /// CBB with any active children. - ffi.Pointer CBB_data( - ffi.Pointer cbb, - ) { - return _CBB_data( - cbb, - ); + ffi.Pointer CBB_data(ffi.Pointer cbb) { + return _CBB_data(cbb); } - late final _CBB_dataPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer)>>('CBB_data'); - late final _CBB_data = _CBB_dataPtr.asFunction< - ffi.Pointer Function(ffi.Pointer)>(); + late final _CBB_dataPtr = + _lookup< + ffi.NativeFunction Function(ffi.Pointer)> + >('CBB_data'); + late final _CBB_data = + _CBB_dataPtr.asFunction< + ffi.Pointer Function(ffi.Pointer) + >(); /// CBB_flush causes any pending length prefixes to be written out and any child /// |CBB| objects of |cbb| to be invalidated. This allows |cbb| to continue to be /// used after the children go out of scope, e.g. when local |CBB| objects are /// added as children to a |CBB| that persists after a function returns. This /// function returns one on success or zero on error. - int CBB_flush( - ffi.Pointer cbb, - ) { - return _CBB_flush( - cbb, - ); + int CBB_flush(ffi.Pointer cbb) { + return _CBB_flush(cbb); } late final _CBB_flushPtr = _lookup)>>( - 'CBB_flush'); + 'CBB_flush', + ); late final _CBB_flush = _CBB_flushPtr.asFunction)>(); /// CBB_init initialises |cbb| with |initial_capacity|. Since a |CBB| grows as /// needed, the |initial_capacity| is just a hint. It returns one on success or /// zero on allocation failure. - int CBB_init( - ffi.Pointer cbb, - int initial_capacity, - ) { - return _CBB_init( - cbb, - initial_capacity, - ); + int CBB_init(ffi.Pointer cbb, int initial_capacity) { + return _CBB_init(cbb, initial_capacity); } late final _CBB_initPtr = _lookup, ffi.Size)>>( - 'CBB_init'); + 'CBB_init', + ); late final _CBB_init = _CBB_initPtr.asFunction, int)>(); @@ -372,17 +368,14 @@ class BoringSsl { /// /// To avoid unfinalized length prefixes, it is a fatal error to call this on a /// CBB with any active children. - int CBB_len( - ffi.Pointer cbb, - ) { - return _CBB_len( - cbb, - ); + int CBB_len(ffi.Pointer cbb) { + return _CBB_len(cbb); } late final _CBB_lenPtr = _lookup)>>( - 'CBB_len'); + 'CBB_len', + ); late final _CBB_len = _CBB_lenPtr.asFunction)>(); @@ -390,64 +383,57 @@ class BoringSsl { /// initialised with |CBB_init| or |CBB_init_fixed| before use, but it is safe to /// call |CBB_cleanup| without a successful |CBB_init|. This may be used for more /// uniform cleanup of a |CBB|. - void CBB_zero( - ffi.Pointer cbb, - ) { - return _CBB_zero( - cbb, - ); + void CBB_zero(ffi.Pointer cbb) { + return _CBB_zero(cbb); } late final _CBB_zeroPtr = _lookup)>>( - 'CBB_zero'); + 'CBB_zero', + ); late final _CBB_zero = _CBB_zeroPtr.asFunction)>(); /// CBS_init sets |cbs| to point to |data|. It does not take ownership of /// |data|. - void CBS_init( - ffi.Pointer cbs, - ffi.Pointer data, - int len, - ) { - return _CBS_init( - cbs, - data, - len, - ); + void CBS_init(ffi.Pointer cbs, ffi.Pointer data, int len) { + return _CBS_init(cbs, data, len); } - late final _CBS_initPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, ffi.Pointer, ffi.Size)>>('CBS_init'); - late final _CBS_init = _CBS_initPtr.asFunction< - void Function(ffi.Pointer, ffi.Pointer, int)>(); + late final _CBS_initPtr = + _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Size) + > + >('CBS_init'); + late final _CBS_init = + _CBS_initPtr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int) + >(); /// CRYPTO_memcmp returns zero iff the |len| bytes at |a| and |b| are equal. It /// takes an amount of time dependent on |len|, but independent of the contents /// of |a| and |b|. Unlike memcmp, it cannot be used to put elements into a /// defined order as the return value when a != b is undefined, other than to be /// non-zero. - int CRYPTO_memcmp( - ffi.Pointer a, - ffi.Pointer b, - int len, - ) { - return _CRYPTO_memcmp( - a, - b, - len, - ); + int CRYPTO_memcmp(ffi.Pointer a, ffi.Pointer b, int len) { + return _CRYPTO_memcmp(a, b, len); } - late final _CRYPTO_memcmpPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, ffi.Pointer, - ffi.Size)>>('CRYPTO_memcmp'); - late final _CRYPTO_memcmp = _CRYPTO_memcmpPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, int)>(); + late final _CRYPTO_memcmpPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Size, + ) + > + >('CRYPTO_memcmp'); + late final _CRYPTO_memcmp = + _CRYPTO_memcmpPtr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, int) + >(); /// ECDH_compute_key calculates the shared key between |pub_key| and |priv_key|. /// If |kdf| is not NULL, then it is called with the bytes of the shared key and @@ -461,64 +447,70 @@ class BoringSsl { ffi.Pointer pub_key, ffi.Pointer priv_key, ffi.Pointer< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer in1, - ffi.Size inlen, - ffi.Pointer out, - ffi.Pointer outlen)>> - kdf, + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer in1, + ffi.Size inlen, + ffi.Pointer out, + ffi.Pointer outlen, + ) + > + > + kdf, ) { - return _ECDH_compute_key( - out, - outlen, - pub_key, - priv_key, - kdf, - ); + return _ECDH_compute_key(out, outlen, pub_key, priv_key, kdf); } - late final _ECDH_compute_keyPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function( - ffi.Pointer, - ffi.Size, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer in1, - ffi.Size inlen, - ffi.Pointer out, - ffi.Pointer outlen)>>)>>( - 'ECDH_compute_key'); - late final _ECDH_compute_key = _ECDH_compute_keyPtr.asFunction< - int Function( + late final _ECDH_compute_keyPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function( + ffi.Pointer, + ffi.Size, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer in1, + ffi.Size inlen, + ffi.Pointer out, + ffi.Pointer outlen, + ) + > + >, + ) + > + >('ECDH_compute_key'); + late final _ECDH_compute_key = + _ECDH_compute_keyPtr.asFunction< + int Function( ffi.Pointer, int, ffi.Pointer, ffi.Pointer, ffi.Pointer< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer in1, - ffi.Size inlen, - ffi.Pointer out, - ffi.Pointer outlen)>>)>(); + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer in1, + ffi.Size inlen, + ffi.Pointer out, + ffi.Pointer outlen, + ) + > + >, + ) + >(); /// ECDSA_SIG_free frees |sig| its member |BIGNUM|s. - void ECDSA_SIG_free( - ffi.Pointer sig, - ) { - return _ECDSA_SIG_free( - sig, - ); + void ECDSA_SIG_free(ffi.Pointer sig) { + return _ECDSA_SIG_free(sig); } late final _ECDSA_SIG_freePtr = _lookup)>>( - 'ECDSA_SIG_free'); + 'ECDSA_SIG_free', + ); late final _ECDSA_SIG_free = _ECDSA_SIG_freePtr.asFunction)>(); @@ -529,41 +521,44 @@ class BoringSsl { ffi.Pointer> out_r, ffi.Pointer> out_s, ) { - return _ECDSA_SIG_get0( - sig, - out_r, - out_s, - ); + return _ECDSA_SIG_get0(sig, out_r, out_s); } - late final _ECDSA_SIG_get0Ptr = _lookup< - ffi.NativeFunction< + late final _ECDSA_SIG_get0Ptr = + _lookup< + ffi.NativeFunction< ffi.Void Function( - ffi.Pointer, - ffi.Pointer>, - ffi.Pointer>)>>('ECDSA_SIG_get0'); - late final _ECDSA_SIG_get0 = _ECDSA_SIG_get0Ptr.asFunction< - void Function(ffi.Pointer, ffi.Pointer>, - ffi.Pointer>)>(); + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer>, + ) + > + >('ECDSA_SIG_get0'); + late final _ECDSA_SIG_get0 = + _ECDSA_SIG_get0Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer>, + ) + >(); /// ECDSA_SIG_marshal marshals |sig| as a DER-encoded ECDSA-Sig-Value and appends /// the result to |cbb|. It returns one on success and zero on error. - int ECDSA_SIG_marshal( - ffi.Pointer cbb, - ffi.Pointer sig, - ) { - return _ECDSA_SIG_marshal( - cbb, - sig, - ); + int ECDSA_SIG_marshal(ffi.Pointer cbb, ffi.Pointer sig) { + return _ECDSA_SIG_marshal(cbb, sig); } - late final _ECDSA_SIG_marshalPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function( - ffi.Pointer, ffi.Pointer)>>('ECDSA_SIG_marshal'); - late final _ECDSA_SIG_marshal = _ECDSA_SIG_marshalPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer)>(); + late final _ECDSA_SIG_marshalPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function(ffi.Pointer, ffi.Pointer) + > + >('ECDSA_SIG_marshal'); + late final _ECDSA_SIG_marshal = + _ECDSA_SIG_marshalPtr.asFunction< + int Function(ffi.Pointer, ffi.Pointer) + >(); /// ECDSA_SIG_new returns a fresh |ECDSA_SIG| structure or NULL on error. ffi.Pointer ECDSA_SIG_new() { @@ -572,87 +567,77 @@ class BoringSsl { late final _ECDSA_SIG_newPtr = _lookup Function()>>( - 'ECDSA_SIG_new'); + 'ECDSA_SIG_new', + ); late final _ECDSA_SIG_new = _ECDSA_SIG_newPtr.asFunction Function()>(); /// ECDSA_SIG_parse parses a DER-encoded ECDSA-Sig-Value structure from |cbs| and /// advances |cbs|. It returns a newly-allocated |ECDSA_SIG| or NULL on error. - ffi.Pointer ECDSA_SIG_parse( - ffi.Pointer cbs, - ) { - return _ECDSA_SIG_parse( - cbs, - ); + ffi.Pointer ECDSA_SIG_parse(ffi.Pointer cbs) { + return _ECDSA_SIG_parse(cbs); } - late final _ECDSA_SIG_parsePtr = _lookup< - ffi - .NativeFunction Function(ffi.Pointer)>>( - 'ECDSA_SIG_parse'); - late final _ECDSA_SIG_parse = _ECDSA_SIG_parsePtr.asFunction< - ffi.Pointer Function(ffi.Pointer)>(); + late final _ECDSA_SIG_parsePtr = + _lookup< + ffi.NativeFunction Function(ffi.Pointer)> + >('ECDSA_SIG_parse'); + late final _ECDSA_SIG_parse = + _ECDSA_SIG_parsePtr.asFunction< + ffi.Pointer Function(ffi.Pointer) + >(); /// EC_GROUP_free releases a reference to |group|. - void EC_GROUP_free( - ffi.Pointer group, - ) { - return _EC_GROUP_free( - group, - ); + void EC_GROUP_free(ffi.Pointer group) { + return _EC_GROUP_free(group); } late final _EC_GROUP_freePtr = _lookup)>>( - 'EC_GROUP_free'); + 'EC_GROUP_free', + ); late final _EC_GROUP_free = _EC_GROUP_freePtr.asFunction)>(); /// EC_GROUP_get0_order returns a pointer to the internal |BIGNUM| object in /// |group| that specifies the order of the group. - ffi.Pointer EC_GROUP_get0_order( - ffi.Pointer group, - ) { - return _EC_GROUP_get0_order( - group, - ); + ffi.Pointer EC_GROUP_get0_order(ffi.Pointer group) { + return _EC_GROUP_get0_order(group); } - late final _EC_GROUP_get0_orderPtr = _lookup< - ffi - .NativeFunction Function(ffi.Pointer)>>( - 'EC_GROUP_get0_order'); - late final _EC_GROUP_get0_order = _EC_GROUP_get0_orderPtr.asFunction< - ffi.Pointer Function(ffi.Pointer)>(); + late final _EC_GROUP_get0_orderPtr = + _lookup< + ffi.NativeFunction Function(ffi.Pointer)> + >('EC_GROUP_get0_order'); + late final _EC_GROUP_get0_order = + _EC_GROUP_get0_orderPtr.asFunction< + ffi.Pointer Function(ffi.Pointer) + >(); /// EC_GROUP_get_curve_name returns a NID that identifies |group|. - int EC_GROUP_get_curve_name( - ffi.Pointer group, - ) { - return _EC_GROUP_get_curve_name( - group, - ); + int EC_GROUP_get_curve_name(ffi.Pointer group) { + return _EC_GROUP_get_curve_name(group); } late final _EC_GROUP_get_curve_namePtr = _lookup)>>( - 'EC_GROUP_get_curve_name'); - late final _EC_GROUP_get_curve_name = _EC_GROUP_get_curve_namePtr.asFunction< - int Function(ffi.Pointer)>(); + 'EC_GROUP_get_curve_name', + ); + late final _EC_GROUP_get_curve_name = + _EC_GROUP_get_curve_namePtr.asFunction< + int Function(ffi.Pointer) + >(); /// EC_GROUP_get_degree returns the number of bits needed to represent an /// element of the field underlying |group|. - int EC_GROUP_get_degree( - ffi.Pointer group, - ) { - return _EC_GROUP_get_degree( - group, - ); + int EC_GROUP_get_degree(ffi.Pointer group) { + return _EC_GROUP_get_degree(group); } - late final _EC_GROUP_get_degreePtr = _lookup< - ffi.NativeFunction)>>( - 'EC_GROUP_get_degree'); + late final _EC_GROUP_get_degreePtr = + _lookup< + ffi.NativeFunction)> + >('EC_GROUP_get_degree'); late final _EC_GROUP_get_degree = _EC_GROUP_get_degreePtr.asFunction)>(); @@ -667,169 +652,147 @@ class BoringSsl { /// /// If in doubt, use |NID_X9_62_prime256v1|, or see the curve25519.h header for /// more modern primitives. - ffi.Pointer EC_GROUP_new_by_curve_name( - int nid, - ) { - return _EC_GROUP_new_by_curve_name( - nid, - ); + ffi.Pointer EC_GROUP_new_by_curve_name(int nid) { + return _EC_GROUP_new_by_curve_name(nid); } late final _EC_GROUP_new_by_curve_namePtr = _lookup Function(ffi.Int)>>( - 'EC_GROUP_new_by_curve_name'); - late final _EC_GROUP_new_by_curve_name = _EC_GROUP_new_by_curve_namePtr - .asFunction Function(int)>(); + 'EC_GROUP_new_by_curve_name', + ); + late final _EC_GROUP_new_by_curve_name = + _EC_GROUP_new_by_curve_namePtr.asFunction< + ffi.Pointer Function(int) + >(); /// EC_KEY_check_key performs several checks on |key| (possibly including an /// expensive check that the public key is in the primary subgroup). It returns /// one if all checks pass and zero otherwise. If it returns zero then detail /// about the problem can be found on the error stack. - int EC_KEY_check_key( - ffi.Pointer key, - ) { - return _EC_KEY_check_key( - key, - ); + int EC_KEY_check_key(ffi.Pointer key) { + return _EC_KEY_check_key(key); } late final _EC_KEY_check_keyPtr = _lookup)>>( - 'EC_KEY_check_key'); + 'EC_KEY_check_key', + ); late final _EC_KEY_check_key = _EC_KEY_check_keyPtr.asFunction)>(); /// EC_KEY_free frees all the data owned by |key| and |key| itself. - void EC_KEY_free( - ffi.Pointer key, - ) { - return _EC_KEY_free( - key, - ); + void EC_KEY_free(ffi.Pointer key) { + return _EC_KEY_free(key); } late final _EC_KEY_freePtr = _lookup)>>( - 'EC_KEY_free'); + 'EC_KEY_free', + ); late final _EC_KEY_free = _EC_KEY_freePtr.asFunction)>(); /// EC_KEY_generate_key generates a random, private key, calculates the /// corresponding public key and stores both in |key|. It returns one on success /// or zero otherwise. - int EC_KEY_generate_key( - ffi.Pointer key, - ) { - return _EC_KEY_generate_key( - key, - ); + int EC_KEY_generate_key(ffi.Pointer key) { + return _EC_KEY_generate_key(key); } late final _EC_KEY_generate_keyPtr = _lookup)>>( - 'EC_KEY_generate_key'); + 'EC_KEY_generate_key', + ); late final _EC_KEY_generate_key = _EC_KEY_generate_keyPtr.asFunction)>(); /// EC_KEY_get0_group returns a pointer to the |EC_GROUP| object inside |key|. - ffi.Pointer EC_KEY_get0_group( - ffi.Pointer key, - ) { - return _EC_KEY_get0_group( - key, - ); + ffi.Pointer EC_KEY_get0_group(ffi.Pointer key) { + return _EC_KEY_get0_group(key); } - late final _EC_KEY_get0_groupPtr = _lookup< - ffi - .NativeFunction Function(ffi.Pointer)>>( - 'EC_KEY_get0_group'); - late final _EC_KEY_get0_group = _EC_KEY_get0_groupPtr.asFunction< - ffi.Pointer Function(ffi.Pointer)>(); + late final _EC_KEY_get0_groupPtr = + _lookup< + ffi.NativeFunction Function(ffi.Pointer)> + >('EC_KEY_get0_group'); + late final _EC_KEY_get0_group = + _EC_KEY_get0_groupPtr.asFunction< + ffi.Pointer Function(ffi.Pointer) + >(); /// EC_KEY_get0_private_key returns a pointer to the private key inside |key|. - ffi.Pointer EC_KEY_get0_private_key( - ffi.Pointer key, - ) { - return _EC_KEY_get0_private_key( - key, - ); + ffi.Pointer EC_KEY_get0_private_key(ffi.Pointer key) { + return _EC_KEY_get0_private_key(key); } - late final _EC_KEY_get0_private_keyPtr = _lookup< - ffi - .NativeFunction Function(ffi.Pointer)>>( - 'EC_KEY_get0_private_key'); - late final _EC_KEY_get0_private_key = _EC_KEY_get0_private_keyPtr.asFunction< - ffi.Pointer Function(ffi.Pointer)>(); + late final _EC_KEY_get0_private_keyPtr = + _lookup< + ffi.NativeFunction Function(ffi.Pointer)> + >('EC_KEY_get0_private_key'); + late final _EC_KEY_get0_private_key = + _EC_KEY_get0_private_keyPtr.asFunction< + ffi.Pointer Function(ffi.Pointer) + >(); /// EC_KEY_get0_public_key returns a pointer to the public key point inside /// |key|. - ffi.Pointer EC_KEY_get0_public_key( - ffi.Pointer key, - ) { - return _EC_KEY_get0_public_key( - key, - ); + ffi.Pointer EC_KEY_get0_public_key(ffi.Pointer key) { + return _EC_KEY_get0_public_key(key); } - late final _EC_KEY_get0_public_keyPtr = _lookup< - ffi - .NativeFunction Function(ffi.Pointer)>>( - 'EC_KEY_get0_public_key'); - late final _EC_KEY_get0_public_key = _EC_KEY_get0_public_keyPtr.asFunction< - ffi.Pointer Function(ffi.Pointer)>(); + late final _EC_KEY_get0_public_keyPtr = + _lookup< + ffi.NativeFunction Function(ffi.Pointer)> + >('EC_KEY_get0_public_key'); + late final _EC_KEY_get0_public_key = + _EC_KEY_get0_public_keyPtr.asFunction< + ffi.Pointer Function(ffi.Pointer) + >(); /// EC_KEY_get_enc_flags returns the encoding flags for |key|, which is a /// bitwise-OR of |EC_PKEY_*| values. - int EC_KEY_get_enc_flags( - ffi.Pointer key, - ) { - return _EC_KEY_get_enc_flags( - key, - ); + int EC_KEY_get_enc_flags(ffi.Pointer key) { + return _EC_KEY_get_enc_flags(key); } - late final _EC_KEY_get_enc_flagsPtr = _lookup< - ffi.NativeFunction)>>( - 'EC_KEY_get_enc_flags'); + late final _EC_KEY_get_enc_flagsPtr = + _lookup< + ffi.NativeFunction)> + >('EC_KEY_get_enc_flags'); late final _EC_KEY_get_enc_flags = _EC_KEY_get_enc_flagsPtr.asFunction)>(); /// EC_KEY_new_by_curve_name returns a fresh EC_KEY for group specified by |nid| /// or NULL on error. - ffi.Pointer EC_KEY_new_by_curve_name( - int nid, - ) { - return _EC_KEY_new_by_curve_name( - nid, - ); + ffi.Pointer EC_KEY_new_by_curve_name(int nid) { + return _EC_KEY_new_by_curve_name(nid); } late final _EC_KEY_new_by_curve_namePtr = _lookup Function(ffi.Int)>>( - 'EC_KEY_new_by_curve_name'); - late final _EC_KEY_new_by_curve_name = _EC_KEY_new_by_curve_namePtr - .asFunction Function(int)>(); + 'EC_KEY_new_by_curve_name', + ); + late final _EC_KEY_new_by_curve_name = + _EC_KEY_new_by_curve_namePtr.asFunction< + ffi.Pointer Function(int) + >(); /// EC_KEY_set_enc_flags sets the encoding flags for |key|, which is a /// bitwise-OR of |EC_PKEY_*| values. - void EC_KEY_set_enc_flags( - ffi.Pointer key, - int flags, - ) { - return _EC_KEY_set_enc_flags( - key, - flags, - ); + void EC_KEY_set_enc_flags(ffi.Pointer key, int flags) { + return _EC_KEY_set_enc_flags(key, flags); } - late final _EC_KEY_set_enc_flagsPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, ffi.UnsignedInt)>>('EC_KEY_set_enc_flags'); - late final _EC_KEY_set_enc_flags = _EC_KEY_set_enc_flagsPtr.asFunction< - void Function(ffi.Pointer, int)>(); + late final _EC_KEY_set_enc_flagsPtr = + _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.UnsignedInt) + > + >('EC_KEY_set_enc_flags'); + late final _EC_KEY_set_enc_flags = + _EC_KEY_set_enc_flagsPtr.asFunction< + void Function(ffi.Pointer, int) + >(); /// EC_KEY_set_private_key sets the private key of |key| to |priv|. It returns /// one on success and zero otherwise. |key| must already have had a group @@ -838,18 +801,19 @@ class BoringSsl { ffi.Pointer key, ffi.Pointer priv, ) { - return _EC_KEY_set_private_key( - key, - priv, - ); + return _EC_KEY_set_private_key(key, priv); } - late final _EC_KEY_set_private_keyPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, - ffi.Pointer)>>('EC_KEY_set_private_key'); - late final _EC_KEY_set_private_key = _EC_KEY_set_private_keyPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer)>(); + late final _EC_KEY_set_private_keyPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function(ffi.Pointer, ffi.Pointer) + > + >('EC_KEY_set_private_key'); + late final _EC_KEY_set_private_key = + _EC_KEY_set_private_keyPtr.asFunction< + int Function(ffi.Pointer, ffi.Pointer) + >(); /// EC_KEY_set_public_key sets the public key of |key| to |pub|, by copying it. /// It returns one on success and zero otherwise. |key| must already have had a @@ -859,18 +823,19 @@ class BoringSsl { ffi.Pointer key, ffi.Pointer pub, ) { - return _EC_KEY_set_public_key( - key, - pub, - ); + return _EC_KEY_set_public_key(key, pub); } - late final _EC_KEY_set_public_keyPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, - ffi.Pointer)>>('EC_KEY_set_public_key'); - late final _EC_KEY_set_public_key = _EC_KEY_set_public_keyPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer)>(); + late final _EC_KEY_set_public_keyPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function(ffi.Pointer, ffi.Pointer) + > + >('EC_KEY_set_public_key'); + late final _EC_KEY_set_public_key = + _EC_KEY_set_public_keyPtr.asFunction< + int Function(ffi.Pointer, ffi.Pointer) + >(); /// EC_KEY_set_public_key_affine_coordinates sets the public key in |key| to /// (|x|, |y|). It returns one on success and zero on error. It's considered an @@ -880,35 +845,37 @@ class BoringSsl { ffi.Pointer x, ffi.Pointer y, ) { - return _EC_KEY_set_public_key_affine_coordinates( - key, - x, - y, - ); + return _EC_KEY_set_public_key_affine_coordinates(key, x, y); } - late final _EC_KEY_set_public_key_affine_coordinatesPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer)>>( - 'EC_KEY_set_public_key_affine_coordinates'); + late final _EC_KEY_set_public_key_affine_coordinatesPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ) + > + >('EC_KEY_set_public_key_affine_coordinates'); late final _EC_KEY_set_public_key_affine_coordinates = _EC_KEY_set_public_key_affine_coordinatesPtr.asFunction< - int Function( - ffi.Pointer, ffi.Pointer, ffi.Pointer)>(); + int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ) + >(); /// EC_POINT_free frees |point| and the data that it points to. - void EC_POINT_free( - ffi.Pointer point, - ) { - return _EC_POINT_free( - point, - ); + void EC_POINT_free(ffi.Pointer point) { + return _EC_POINT_free(point); } late final _EC_POINT_freePtr = _lookup)>>( - 'EC_POINT_free'); + 'EC_POINT_free', + ); late final _EC_POINT_free = _EC_POINT_freePtr.asFunction)>(); @@ -925,44 +892,48 @@ class BoringSsl { ffi.Pointer y, ffi.Pointer ctx, ) { - return _EC_POINT_get_affine_coordinates_GFp( - group, - point, - x, - y, - ctx, - ); + return _EC_POINT_get_affine_coordinates_GFp(group, point, x, y, ctx); } - late final _EC_POINT_get_affine_coordinates_GFpPtr = _lookup< - ffi.NativeFunction< + late final _EC_POINT_get_affine_coordinates_GFpPtr = + _lookup< + ffi.NativeFunction< ffi.Int Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>('EC_POINT_get_affine_coordinates_GFp'); + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ) + > + >('EC_POINT_get_affine_coordinates_GFp'); late final _EC_POINT_get_affine_coordinates_GFp = _EC_POINT_get_affine_coordinates_GFpPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer, ffi.Pointer, ffi.Pointer)>(); + int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ) + >(); /// EC_POINT_new returns a fresh |EC_POINT| object in the given group, or NULL /// on error. - ffi.Pointer EC_POINT_new( - ffi.Pointer group, - ) { - return _EC_POINT_new( - group, - ); + ffi.Pointer EC_POINT_new(ffi.Pointer group) { + return _EC_POINT_new(group); } - late final _EC_POINT_newPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer)>>('EC_POINT_new'); - late final _EC_POINT_new = _EC_POINT_newPtr.asFunction< - ffi.Pointer Function(ffi.Pointer)>(); + late final _EC_POINT_newPtr = + _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer) + > + >('EC_POINT_new'); + late final _EC_POINT_new = + _EC_POINT_newPtr.asFunction< + ffi.Pointer Function(ffi.Pointer) + >(); /// EC_POINT_oct2point sets |point| from |len| bytes of X9.62 format /// serialisation in |buf|. It returns one on success and zero on error. The @@ -975,26 +946,31 @@ class BoringSsl { int len, ffi.Pointer ctx, ) { - return _EC_POINT_oct2point( - group, - point, - buf, - len, - ctx, - ); + return _EC_POINT_oct2point(group, point, buf, len, ctx); } - late final _EC_POINT_oct2pointPtr = _lookup< - ffi.NativeFunction< + late final _EC_POINT_oct2pointPtr = + _lookup< + ffi.NativeFunction< ffi.Int Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Size, - ffi.Pointer)>>('EC_POINT_oct2point'); - late final _EC_POINT_oct2point = _EC_POINT_oct2pointPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Size, + ffi.Pointer, + ) + > + >('EC_POINT_oct2point'); + late final _EC_POINT_oct2point = + _EC_POINT_oct2pointPtr.asFunction< + int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); /// EC_POINT_point2cbb behaves like |EC_POINT_point2oct| but appends the /// serialised point to |cbb|. It returns one on success and zero on error. @@ -1005,26 +981,31 @@ class BoringSsl { int form, ffi.Pointer ctx, ) { - return _EC_POINT_point2cbb( - out, - group, - point, - form, - ctx, - ); + return _EC_POINT_point2cbb(out, group, point, form, ctx); } - late final _EC_POINT_point2cbbPtr = _lookup< - ffi.NativeFunction< + late final _EC_POINT_point2cbbPtr = + _lookup< + ffi.NativeFunction< ffi.Int Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Int32, - ffi.Pointer)>>('EC_POINT_point2cbb'); - late final _EC_POINT_point2cbb = _EC_POINT_point2cbbPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer, + ) + > + >('EC_POINT_point2cbb'); + late final _EC_POINT_point2cbb = + _EC_POINT_point2cbbPtr.asFunction< + int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); /// ERR_clear_error clears the error queue for the current thread. void ERR_clear_error() { @@ -1052,19 +1033,23 @@ class BoringSsl { ffi.Pointer buf, int len, ) { - return _ERR_error_string_n( - packed_error, - buf, - len, - ); + return _ERR_error_string_n(packed_error, buf, len); } - late final _ERR_error_string_nPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Uint32, ffi.Pointer, - ffi.Size)>>('ERR_error_string_n'); - late final _ERR_error_string_n = _ERR_error_string_nPtr.asFunction< - ffi.Pointer Function(int, ffi.Pointer, int)>(); + late final _ERR_error_string_nPtr = + _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Uint32, + ffi.Pointer, + ffi.Size, + ) + > + >('ERR_error_string_n'); + late final _ERR_error_string_n = + _ERR_error_string_nPtr.asFunction< + ffi.Pointer Function(int, ffi.Pointer, int) + >(); /// ERR_get_error gets the packed error code for the least recent error and /// removes that error from the queue. If there are no errors in the queue then @@ -1089,19 +1074,18 @@ class BoringSsl { /// EVP_AEAD_CTX_free calls |EVP_AEAD_CTX_cleanup| and |OPENSSL_free| on /// |ctx|. - void EVP_AEAD_CTX_free( - ffi.Pointer ctx, - ) { - return _EVP_AEAD_CTX_free( - ctx, - ); + void EVP_AEAD_CTX_free(ffi.Pointer ctx) { + return _EVP_AEAD_CTX_free(ctx); } late final _EVP_AEAD_CTX_freePtr = _lookup)>>( - 'EVP_AEAD_CTX_free'); - late final _EVP_AEAD_CTX_free = _EVP_AEAD_CTX_freePtr.asFunction< - void Function(ffi.Pointer)>(); + 'EVP_AEAD_CTX_free', + ); + late final _EVP_AEAD_CTX_free = + _EVP_AEAD_CTX_freePtr.asFunction< + void Function(ffi.Pointer) + >(); /// EVP_AEAD_CTX_new allocates an |EVP_AEAD_CTX|, calls |EVP_AEAD_CTX_init| and /// returns the |EVP_AEAD_CTX|, or NULL on error. @@ -1111,21 +1095,29 @@ class BoringSsl { int key_len, int tag_len, ) { - return _EVP_AEAD_CTX_new( - aead, - key, - key_len, - tag_len, - ); - } - - late final _EVP_AEAD_CTX_newPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function(ffi.Pointer, - ffi.Pointer, ffi.Size, ffi.Size)>>('EVP_AEAD_CTX_new'); - late final _EVP_AEAD_CTX_new = _EVP_AEAD_CTX_newPtr.asFunction< - ffi.Pointer Function( - ffi.Pointer, ffi.Pointer, int, int)>(); + return _EVP_AEAD_CTX_new(aead, key, key_len, tag_len); + } + + late final _EVP_AEAD_CTX_newPtr = + _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Size, + ffi.Size, + ) + > + >('EVP_AEAD_CTX_new'); + late final _EVP_AEAD_CTX_new = + _EVP_AEAD_CTX_newPtr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + int, + int, + ) + >(); /// EVP_AEAD_CTX_open authenticates |in_len| bytes from |in| and |ad_len| bytes /// from |ad| and decrypts at most |in_len| bytes into |out|. It returns one on @@ -1172,21 +1164,26 @@ class BoringSsl { ); } - late final _EVP_AEAD_CTX_openPtr = _lookup< - ffi.NativeFunction< + late final _EVP_AEAD_CTX_openPtr = + _lookup< + ffi.NativeFunction< ffi.Int Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Size, - ffi.Pointer, - ffi.Size, - ffi.Pointer, - ffi.Size, - ffi.Pointer, - ffi.Size)>>('EVP_AEAD_CTX_open'); - late final _EVP_AEAD_CTX_open = _EVP_AEAD_CTX_openPtr.asFunction< - int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Size, + ffi.Pointer, + ffi.Size, + ffi.Pointer, + ffi.Size, + ffi.Pointer, + ffi.Size, + ) + > + >('EVP_AEAD_CTX_open'); + late final _EVP_AEAD_CTX_open = + _EVP_AEAD_CTX_openPtr.asFunction< + int Function( ffi.Pointer, ffi.Pointer, ffi.Pointer, @@ -1196,7 +1193,9 @@ class BoringSsl { ffi.Pointer, int, ffi.Pointer, - int)>(); + int, + ) + >(); /// EVP_AEAD_CTX_seal encrypts and authenticates |in_len| bytes from |in| and /// authenticates |ad_len| bytes from |ad| and writes the result to |out|. It @@ -1244,21 +1243,26 @@ class BoringSsl { ); } - late final _EVP_AEAD_CTX_sealPtr = _lookup< - ffi.NativeFunction< + late final _EVP_AEAD_CTX_sealPtr = + _lookup< + ffi.NativeFunction< ffi.Int Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Size, - ffi.Pointer, - ffi.Size, - ffi.Pointer, - ffi.Size, - ffi.Pointer, - ffi.Size)>>('EVP_AEAD_CTX_seal'); - late final _EVP_AEAD_CTX_seal = _EVP_AEAD_CTX_sealPtr.asFunction< - int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Size, + ffi.Pointer, + ffi.Size, + ffi.Pointer, + ffi.Size, + ffi.Pointer, + ffi.Size, + ) + > + >('EVP_AEAD_CTX_seal'); + late final _EVP_AEAD_CTX_seal = + _EVP_AEAD_CTX_sealPtr.asFunction< + int Function( ffi.Pointer, ffi.Pointer, ffi.Pointer, @@ -1268,88 +1272,83 @@ class BoringSsl { ffi.Pointer, int, ffi.Pointer, - int)>(); + int, + ) + >(); /// EVP_AEAD_key_length returns the length, in bytes, of the keys used by /// |aead|. - int EVP_AEAD_key_length( - ffi.Pointer aead, - ) { - return _EVP_AEAD_key_length( - aead, - ); + int EVP_AEAD_key_length(ffi.Pointer aead) { + return _EVP_AEAD_key_length(aead); } late final _EVP_AEAD_key_lengthPtr = _lookup)>>( - 'EVP_AEAD_key_length'); + 'EVP_AEAD_key_length', + ); late final _EVP_AEAD_key_length = _EVP_AEAD_key_lengthPtr.asFunction)>(); /// EVP_AEAD_max_overhead returns the maximum number of additional bytes added /// by the act of sealing data with |aead|. - int EVP_AEAD_max_overhead( - ffi.Pointer aead, - ) { - return _EVP_AEAD_max_overhead( - aead, - ); + int EVP_AEAD_max_overhead(ffi.Pointer aead) { + return _EVP_AEAD_max_overhead(aead); } late final _EVP_AEAD_max_overheadPtr = _lookup)>>( - 'EVP_AEAD_max_overhead'); - late final _EVP_AEAD_max_overhead = _EVP_AEAD_max_overheadPtr.asFunction< - int Function(ffi.Pointer)>(); + 'EVP_AEAD_max_overhead', + ); + late final _EVP_AEAD_max_overhead = + _EVP_AEAD_max_overheadPtr.asFunction< + int Function(ffi.Pointer) + >(); /// EVP_AEAD_max_tag_len returns the maximum tag length when using |aead|. This /// is the largest value that can be passed as |tag_len| to /// |EVP_AEAD_CTX_init|. - int EVP_AEAD_max_tag_len( - ffi.Pointer aead, - ) { - return _EVP_AEAD_max_tag_len( - aead, - ); + int EVP_AEAD_max_tag_len(ffi.Pointer aead) { + return _EVP_AEAD_max_tag_len(aead); } late final _EVP_AEAD_max_tag_lenPtr = _lookup)>>( - 'EVP_AEAD_max_tag_len'); - late final _EVP_AEAD_max_tag_len = _EVP_AEAD_max_tag_lenPtr.asFunction< - int Function(ffi.Pointer)>(); + 'EVP_AEAD_max_tag_len', + ); + late final _EVP_AEAD_max_tag_len = + _EVP_AEAD_max_tag_lenPtr.asFunction< + int Function(ffi.Pointer) + >(); /// EVP_AEAD_nonce_length returns the length, in bytes, of the per-message nonce /// for |aead|. - int EVP_AEAD_nonce_length( - ffi.Pointer aead, - ) { - return _EVP_AEAD_nonce_length( - aead, - ); + int EVP_AEAD_nonce_length(ffi.Pointer aead) { + return _EVP_AEAD_nonce_length(aead); } late final _EVP_AEAD_nonce_lengthPtr = _lookup)>>( - 'EVP_AEAD_nonce_length'); - late final _EVP_AEAD_nonce_length = _EVP_AEAD_nonce_lengthPtr.asFunction< - int Function(ffi.Pointer)>(); + 'EVP_AEAD_nonce_length', + ); + late final _EVP_AEAD_nonce_length = + _EVP_AEAD_nonce_lengthPtr.asFunction< + int Function(ffi.Pointer) + >(); /// EVP_CIPHER_CTX_free calls |EVP_CIPHER_CTX_cleanup| on |ctx| and then frees /// |ctx| itself. - void EVP_CIPHER_CTX_free( - ffi.Pointer ctx, - ) { - return _EVP_CIPHER_CTX_free( - ctx, - ); + void EVP_CIPHER_CTX_free(ffi.Pointer ctx) { + return _EVP_CIPHER_CTX_free(ctx); } - late final _EVP_CIPHER_CTX_freePtr = _lookup< - ffi.NativeFunction)>>( - 'EVP_CIPHER_CTX_free'); - late final _EVP_CIPHER_CTX_free = _EVP_CIPHER_CTX_freePtr.asFunction< - void Function(ffi.Pointer)>(); + late final _EVP_CIPHER_CTX_freePtr = + _lookup< + ffi.NativeFunction)> + >('EVP_CIPHER_CTX_free'); + late final _EVP_CIPHER_CTX_free = + _EVP_CIPHER_CTX_freePtr.asFunction< + void Function(ffi.Pointer) + >(); /// EVP_CIPHER_CTX_new allocates a fresh |EVP_CIPHER_CTX|, calls /// |EVP_CIPHER_CTX_init| and returns it, or NULL on allocation failure. @@ -1359,43 +1358,42 @@ class BoringSsl { late final _EVP_CIPHER_CTX_newPtr = _lookup Function()>>( - 'EVP_CIPHER_CTX_new'); - late final _EVP_CIPHER_CTX_new = _EVP_CIPHER_CTX_newPtr.asFunction< - ffi.Pointer Function()>(); + 'EVP_CIPHER_CTX_new', + ); + late final _EVP_CIPHER_CTX_new = + _EVP_CIPHER_CTX_newPtr.asFunction< + ffi.Pointer Function() + >(); /// EVP_CIPHER_block_size returns the block size, in bytes, for |cipher|, or one /// if |cipher| is a stream cipher. - int EVP_CIPHER_block_size( - ffi.Pointer cipher, - ) { - return _EVP_CIPHER_block_size( - cipher, - ); + int EVP_CIPHER_block_size(ffi.Pointer cipher) { + return _EVP_CIPHER_block_size(cipher); } - late final _EVP_CIPHER_block_sizePtr = _lookup< - ffi - .NativeFunction)>>( - 'EVP_CIPHER_block_size'); - late final _EVP_CIPHER_block_size = _EVP_CIPHER_block_sizePtr.asFunction< - int Function(ffi.Pointer)>(); + late final _EVP_CIPHER_block_sizePtr = + _lookup< + ffi.NativeFunction)> + >('EVP_CIPHER_block_size'); + late final _EVP_CIPHER_block_size = + _EVP_CIPHER_block_sizePtr.asFunction< + int Function(ffi.Pointer) + >(); /// EVP_CIPHER_iv_length returns the IV size, in bytes, of |cipher|, or zero if /// |cipher| doesn't take an IV. - int EVP_CIPHER_iv_length( - ffi.Pointer cipher, - ) { - return _EVP_CIPHER_iv_length( - cipher, - ); + int EVP_CIPHER_iv_length(ffi.Pointer cipher) { + return _EVP_CIPHER_iv_length(cipher); } - late final _EVP_CIPHER_iv_lengthPtr = _lookup< - ffi - .NativeFunction)>>( - 'EVP_CIPHER_iv_length'); - late final _EVP_CIPHER_iv_length = _EVP_CIPHER_iv_lengthPtr.asFunction< - int Function(ffi.Pointer)>(); + late final _EVP_CIPHER_iv_lengthPtr = + _lookup< + ffi.NativeFunction)> + >('EVP_CIPHER_iv_length'); + late final _EVP_CIPHER_iv_length = + _EVP_CIPHER_iv_lengthPtr.asFunction< + int Function(ffi.Pointer) + >(); /// EVP_CipherFinal_ex calls either |EVP_EncryptFinal_ex| or /// |EVP_DecryptFinal_ex| depending on how |ctx| has been setup. @@ -1404,20 +1402,27 @@ class BoringSsl { ffi.Pointer out, ffi.Pointer out_len, ) { - return _EVP_CipherFinal_ex( - ctx, - out, - out_len, - ); + return _EVP_CipherFinal_ex(ctx, out, out_len); } - late final _EVP_CipherFinal_exPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer)>>('EVP_CipherFinal_ex'); - late final _EVP_CipherFinal_ex = _EVP_CipherFinal_exPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer)>(); + late final _EVP_CipherFinal_exPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ) + > + >('EVP_CipherFinal_ex'); + late final _EVP_CipherFinal_ex = + _EVP_CipherFinal_exPtr.asFunction< + int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ) + >(); /// EVP_CipherInit_ex configures |ctx| for a fresh encryption (or decryption, if /// |enc| is zero) operation using |cipher|. If |ctx| has been previously @@ -1434,33 +1439,33 @@ class BoringSsl { ffi.Pointer iv, int enc, ) { - return _EVP_CipherInit_ex( - ctx, - cipher, - engine, - key, - iv, - enc, - ); + return _EVP_CipherInit_ex(ctx, cipher, engine, key, iv, enc); } - late final _EVP_CipherInit_exPtr = _lookup< - ffi.NativeFunction< + late final _EVP_CipherInit_exPtr = + _lookup< + ffi.NativeFunction< ffi.Int Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Int)>>('EVP_CipherInit_ex'); - late final _EVP_CipherInit_ex = _EVP_CipherInit_exPtr.asFunction< - int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int, + ) + > + >('EVP_CipherInit_ex'); + late final _EVP_CipherInit_ex = + _EVP_CipherInit_exPtr.asFunction< + int Function( ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Pointer, - int)>(); + int, + ) + >(); /// EVP_CipherUpdate calls either |EVP_EncryptUpdate| or |EVP_DecryptUpdate| /// depending on how |ctx| has been setup. @@ -1471,26 +1476,31 @@ class BoringSsl { ffi.Pointer in1, int in_len, ) { - return _EVP_CipherUpdate( - ctx, - out, - out_len, - in1, - in_len, - ); + return _EVP_CipherUpdate(ctx, out, out_len, in1, in_len); } - late final _EVP_CipherUpdatePtr = _lookup< - ffi.NativeFunction< + late final _EVP_CipherUpdatePtr = + _lookup< + ffi.NativeFunction< ffi.Int Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Int)>>('EVP_CipherUpdate'); - late final _EVP_CipherUpdate = _EVP_CipherUpdatePtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer, ffi.Pointer, int)>(); + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int, + ) + > + >('EVP_CipherUpdate'); + late final _EVP_CipherUpdate = + _EVP_CipherUpdatePtr.asFunction< + int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ) + >(); /// EVP_DigestFinal acts like |EVP_DigestFinal_ex| except that /// |EVP_MD_CTX_cleanup| is called on |ctx| before returning. @@ -1499,39 +1509,44 @@ class BoringSsl { ffi.Pointer md_out, ffi.Pointer out_size, ) { - return _EVP_DigestFinal( - ctx, - md_out, - out_size, - ); + return _EVP_DigestFinal(ctx, md_out, out_size); } - late final _EVP_DigestFinalPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer)>>('EVP_DigestFinal'); - late final _EVP_DigestFinal = _EVP_DigestFinalPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer)>(); + late final _EVP_DigestFinalPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ) + > + >('EVP_DigestFinal'); + late final _EVP_DigestFinal = + _EVP_DigestFinalPtr.asFunction< + int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ) + >(); /// EVP_DigestInit acts like |EVP_DigestInit_ex| except that |ctx| is /// initialised before use. - int EVP_DigestInit( - ffi.Pointer ctx, - ffi.Pointer type, - ) { - return _EVP_DigestInit( - ctx, - type, - ); + int EVP_DigestInit(ffi.Pointer ctx, ffi.Pointer type) { + return _EVP_DigestInit(ctx, type); } - late final _EVP_DigestInitPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function( - ffi.Pointer, ffi.Pointer)>>('EVP_DigestInit'); - late final _EVP_DigestInit = _EVP_DigestInitPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer)>(); + late final _EVP_DigestInitPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function(ffi.Pointer, ffi.Pointer) + > + >('EVP_DigestInit'); + late final _EVP_DigestInit = + _EVP_DigestInitPtr.asFunction< + int Function(ffi.Pointer, ffi.Pointer) + >(); /// EVP_DigestSignFinal signs the data that has been included by one or more /// calls to |EVP_DigestSignUpdate|. If |out_sig| is NULL then |*out_sig_len| is @@ -1550,20 +1565,27 @@ class BoringSsl { ffi.Pointer out_sig, ffi.Pointer out_sig_len, ) { - return _EVP_DigestSignFinal( - ctx, - out_sig, - out_sig_len, - ); + return _EVP_DigestSignFinal(ctx, out_sig, out_sig_len); } - late final _EVP_DigestSignFinalPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer)>>('EVP_DigestSignFinal'); - late final _EVP_DigestSignFinal = _EVP_DigestSignFinalPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer)>(); + late final _EVP_DigestSignFinalPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ) + > + >('EVP_DigestSignFinal'); + late final _EVP_DigestSignFinal = + _EVP_DigestSignFinalPtr.asFunction< + int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ) + >(); /// EVP_DigestSignInit sets up |ctx| for a signing operation with |type| and /// |pkey|. The |ctx| argument must have been initialised with @@ -1586,30 +1608,31 @@ class BoringSsl { ffi.Pointer e, ffi.Pointer pkey, ) { - return _EVP_DigestSignInit( - ctx, - pctx, - type, - e, - pkey, - ); + return _EVP_DigestSignInit(ctx, pctx, type, e, pkey); } - late final _EVP_DigestSignInitPtr = _lookup< - ffi.NativeFunction< + late final _EVP_DigestSignInitPtr = + _lookup< + ffi.NativeFunction< ffi.Int Function( - ffi.Pointer, - ffi.Pointer>, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>('EVP_DigestSignInit'); - late final _EVP_DigestSignInit = _EVP_DigestSignInitPtr.asFunction< - int Function( + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ) + > + >('EVP_DigestSignInit'); + late final _EVP_DigestSignInit = + _EVP_DigestSignInitPtr.asFunction< + int Function( ffi.Pointer, ffi.Pointer>, ffi.Pointer, ffi.Pointer, - ffi.Pointer)>(); + ffi.Pointer, + ) + >(); /// EVP_DigestSignUpdate appends |len| bytes from |data| to the data which will /// be signed in |EVP_DigestSignFinal|. It returns one. @@ -1622,19 +1645,23 @@ class BoringSsl { ffi.Pointer data, int len, ) { - return _EVP_DigestSignUpdate( - ctx, - data, - len, - ); + return _EVP_DigestSignUpdate(ctx, data, len); } - late final _EVP_DigestSignUpdatePtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, ffi.Pointer, - ffi.Size)>>('EVP_DigestSignUpdate'); - late final _EVP_DigestSignUpdate = _EVP_DigestSignUpdatePtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, int)>(); + late final _EVP_DigestSignUpdatePtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Size, + ) + > + >('EVP_DigestSignUpdate'); + late final _EVP_DigestSignUpdate = + _EVP_DigestSignUpdatePtr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, int) + >(); /// EVP_DigestUpdate hashes |len| bytes from |data| into the hashing operation /// in |ctx|. It returns one. @@ -1643,19 +1670,23 @@ class BoringSsl { ffi.Pointer data, int len, ) { - return _EVP_DigestUpdate( - ctx, - data, - len, - ); + return _EVP_DigestUpdate(ctx, data, len); } - late final _EVP_DigestUpdatePtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, ffi.Pointer, - ffi.Size)>>('EVP_DigestUpdate'); - late final _EVP_DigestUpdate = _EVP_DigestUpdatePtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, int)>(); + late final _EVP_DigestUpdatePtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Size, + ) + > + >('EVP_DigestUpdate'); + late final _EVP_DigestUpdate = + _EVP_DigestUpdatePtr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, int) + >(); /// EVP_DigestVerifyFinal verifies that |sig_len| bytes of |sig| are a valid /// signature for the data that has been included by one or more calls to @@ -1669,19 +1700,23 @@ class BoringSsl { ffi.Pointer sig, int sig_len, ) { - return _EVP_DigestVerifyFinal( - ctx, - sig, - sig_len, - ); + return _EVP_DigestVerifyFinal(ctx, sig, sig_len); } - late final _EVP_DigestVerifyFinalPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, ffi.Pointer, - ffi.Size)>>('EVP_DigestVerifyFinal'); - late final _EVP_DigestVerifyFinal = _EVP_DigestVerifyFinalPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, int)>(); + late final _EVP_DigestVerifyFinalPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Size, + ) + > + >('EVP_DigestVerifyFinal'); + late final _EVP_DigestVerifyFinal = + _EVP_DigestVerifyFinalPtr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, int) + >(); /// EVP_DigestVerifyInit sets up |ctx| for a signature verification operation /// with |type| and |pkey|. The |ctx| argument must have been initialised with @@ -1704,30 +1739,31 @@ class BoringSsl { ffi.Pointer e, ffi.Pointer pkey, ) { - return _EVP_DigestVerifyInit( - ctx, - pctx, - type, - e, - pkey, - ); + return _EVP_DigestVerifyInit(ctx, pctx, type, e, pkey); } - late final _EVP_DigestVerifyInitPtr = _lookup< - ffi.NativeFunction< + late final _EVP_DigestVerifyInitPtr = + _lookup< + ffi.NativeFunction< ffi.Int Function( - ffi.Pointer, - ffi.Pointer>, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>('EVP_DigestVerifyInit'); - late final _EVP_DigestVerifyInit = _EVP_DigestVerifyInitPtr.asFunction< - int Function( + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ) + > + >('EVP_DigestVerifyInit'); + late final _EVP_DigestVerifyInit = + _EVP_DigestVerifyInitPtr.asFunction< + int Function( ffi.Pointer, ffi.Pointer>, ffi.Pointer, ffi.Pointer, - ffi.Pointer)>(); + ffi.Pointer, + ) + >(); /// EVP_DigestVerifyUpdate appends |len| bytes from |data| to the data which /// will be verified by |EVP_DigestVerifyFinal|. It returns one. @@ -1740,32 +1776,33 @@ class BoringSsl { ffi.Pointer data, int len, ) { - return _EVP_DigestVerifyUpdate( - ctx, - data, - len, - ); + return _EVP_DigestVerifyUpdate(ctx, data, len); } - late final _EVP_DigestVerifyUpdatePtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, ffi.Pointer, - ffi.Size)>>('EVP_DigestVerifyUpdate'); - late final _EVP_DigestVerifyUpdate = _EVP_DigestVerifyUpdatePtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, int)>(); + late final _EVP_DigestVerifyUpdatePtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Size, + ) + > + >('EVP_DigestVerifyUpdate'); + late final _EVP_DigestVerifyUpdate = + _EVP_DigestVerifyUpdatePtr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, int) + >(); /// EVP_MD_CTX_free calls |EVP_MD_CTX_cleanup| and then frees |ctx| itself. - void EVP_MD_CTX_free( - ffi.Pointer ctx, - ) { - return _EVP_MD_CTX_free( - ctx, - ); + void EVP_MD_CTX_free(ffi.Pointer ctx) { + return _EVP_MD_CTX_free(ctx); } late final _EVP_MD_CTX_freePtr = _lookup)>>( - 'EVP_MD_CTX_free'); + 'EVP_MD_CTX_free', + ); late final _EVP_MD_CTX_free = _EVP_MD_CTX_freePtr.asFunction)>(); @@ -1778,55 +1815,49 @@ class BoringSsl { late final _EVP_MD_CTX_newPtr = _lookup Function()>>( - 'EVP_MD_CTX_new'); + 'EVP_MD_CTX_new', + ); late final _EVP_MD_CTX_new = _EVP_MD_CTX_newPtr.asFunction Function()>(); /// EVP_MD_CTX_size returns the digest size of |ctx|, in bytes. It /// will crash if a digest hasn't been set on |ctx|. - int EVP_MD_CTX_size( - ffi.Pointer ctx, - ) { - return _EVP_MD_CTX_size( - ctx, - ); + int EVP_MD_CTX_size(ffi.Pointer ctx) { + return _EVP_MD_CTX_size(ctx); } late final _EVP_MD_CTX_sizePtr = _lookup)>>( - 'EVP_MD_CTX_size'); + 'EVP_MD_CTX_size', + ); late final _EVP_MD_CTX_size = _EVP_MD_CTX_sizePtr.asFunction)>(); /// EVP_MD_size returns the digest size of |md|, in bytes. - int EVP_MD_size( - ffi.Pointer md, - ) { - return _EVP_MD_size( - md, - ); + int EVP_MD_size(ffi.Pointer md) { + return _EVP_MD_size(md); } late final _EVP_MD_sizePtr = _lookup)>>( - 'EVP_MD_size'); + 'EVP_MD_size', + ); late final _EVP_MD_size = _EVP_MD_sizePtr.asFunction)>(); /// EVP_PKEY_CTX_free frees |ctx| and the data it owns. - void EVP_PKEY_CTX_free( - ffi.Pointer ctx, - ) { - return _EVP_PKEY_CTX_free( - ctx, - ); + void EVP_PKEY_CTX_free(ffi.Pointer ctx) { + return _EVP_PKEY_CTX_free(ctx); } late final _EVP_PKEY_CTX_freePtr = _lookup)>>( - 'EVP_PKEY_CTX_free'); - late final _EVP_PKEY_CTX_free = _EVP_PKEY_CTX_freePtr.asFunction< - void Function(ffi.Pointer)>(); + 'EVP_PKEY_CTX_free', + ); + late final _EVP_PKEY_CTX_free = + _EVP_PKEY_CTX_freePtr.asFunction< + void Function(ffi.Pointer) + >(); /// EVP_PKEY_CTX_new allocates a fresh |EVP_PKEY_CTX| for use with |pkey|. It /// returns the context or NULL on error. @@ -1834,19 +1865,25 @@ class BoringSsl { ffi.Pointer pkey, ffi.Pointer e, ) { - return _EVP_PKEY_CTX_new( - pkey, - e, - ); + return _EVP_PKEY_CTX_new(pkey, e); } - late final _EVP_PKEY_CTX_newPtr = _lookup< - ffi.NativeFunction< + late final _EVP_PKEY_CTX_newPtr = + _lookup< + ffi.NativeFunction< ffi.Pointer Function( - ffi.Pointer, ffi.Pointer)>>('EVP_PKEY_CTX_new'); - late final _EVP_PKEY_CTX_new = _EVP_PKEY_CTX_newPtr.asFunction< - ffi.Pointer Function( - ffi.Pointer, ffi.Pointer)>(); + ffi.Pointer, + ffi.Pointer, + ) + > + >('EVP_PKEY_CTX_new'); + late final _EVP_PKEY_CTX_new = + _EVP_PKEY_CTX_newPtr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ) + >(); /// EVP_PKEY_CTX_set0_rsa_oaep_label sets |label_len| bytes from |label| as the /// label used in OAEP. DANGER: On success, this call takes ownership of |label| @@ -1858,21 +1895,23 @@ class BoringSsl { ffi.Pointer label, int label_len, ) { - return _EVP_PKEY_CTX_set0_rsa_oaep_label( - ctx, - label, - label_len, - ); + return _EVP_PKEY_CTX_set0_rsa_oaep_label(ctx, label, label_len); } - late final _EVP_PKEY_CTX_set0_rsa_oaep_labelPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, ffi.Pointer, - ffi.Size)>>('EVP_PKEY_CTX_set0_rsa_oaep_label'); + late final _EVP_PKEY_CTX_set0_rsa_oaep_labelPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Size, + ) + > + >('EVP_PKEY_CTX_set0_rsa_oaep_label'); late final _EVP_PKEY_CTX_set0_rsa_oaep_label = _EVP_PKEY_CTX_set0_rsa_oaep_labelPtr.asFunction< - int Function( - ffi.Pointer, ffi.Pointer, int)>(); + int Function(ffi.Pointer, ffi.Pointer, int) + >(); /// EVP_PKEY_CTX_set_rsa_mgf1_md sets |md| as the digest used in MGF1. Returns /// one on success or zero on error. @@ -1884,19 +1923,19 @@ class BoringSsl { ffi.Pointer ctx, ffi.Pointer md, ) { - return _EVP_PKEY_CTX_set_rsa_mgf1_md( - ctx, - md, - ); + return _EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, md); } - late final _EVP_PKEY_CTX_set_rsa_mgf1_mdPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, - ffi.Pointer)>>('EVP_PKEY_CTX_set_rsa_mgf1_md'); + late final _EVP_PKEY_CTX_set_rsa_mgf1_mdPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function(ffi.Pointer, ffi.Pointer) + > + >('EVP_PKEY_CTX_set_rsa_mgf1_md'); late final _EVP_PKEY_CTX_set_rsa_mgf1_md = _EVP_PKEY_CTX_set_rsa_mgf1_mdPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer)>(); + int Function(ffi.Pointer, ffi.Pointer) + >(); /// EVP_PKEY_CTX_set_rsa_oaep_md sets |md| as the digest used in OAEP padding. /// Returns one on success or zero on error. If unset, the default is SHA-1. @@ -1907,39 +1946,35 @@ class BoringSsl { ffi.Pointer ctx, ffi.Pointer md, ) { - return _EVP_PKEY_CTX_set_rsa_oaep_md( - ctx, - md, - ); + return _EVP_PKEY_CTX_set_rsa_oaep_md(ctx, md); } - late final _EVP_PKEY_CTX_set_rsa_oaep_mdPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, - ffi.Pointer)>>('EVP_PKEY_CTX_set_rsa_oaep_md'); + late final _EVP_PKEY_CTX_set_rsa_oaep_mdPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function(ffi.Pointer, ffi.Pointer) + > + >('EVP_PKEY_CTX_set_rsa_oaep_md'); late final _EVP_PKEY_CTX_set_rsa_oaep_md = _EVP_PKEY_CTX_set_rsa_oaep_mdPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer)>(); + int Function(ffi.Pointer, ffi.Pointer) + >(); /// EVP_PKEY_CTX_set_rsa_padding sets the padding type to use. It should be one /// of the |RSA_*_PADDING| values. Returns one on success or zero on error. By /// default, the padding is |RSA_PKCS1_PADDING|. - int EVP_PKEY_CTX_set_rsa_padding( - ffi.Pointer ctx, - int padding, - ) { - return _EVP_PKEY_CTX_set_rsa_padding( - ctx, - padding, - ); + int EVP_PKEY_CTX_set_rsa_padding(ffi.Pointer ctx, int padding) { + return _EVP_PKEY_CTX_set_rsa_padding(ctx, padding); } - late final _EVP_PKEY_CTX_set_rsa_paddingPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, - ffi.Int)>>('EVP_PKEY_CTX_set_rsa_padding'); - late final _EVP_PKEY_CTX_set_rsa_padding = _EVP_PKEY_CTX_set_rsa_paddingPtr - .asFunction, int)>(); + late final _EVP_PKEY_CTX_set_rsa_paddingPtr = + _lookup< + ffi.NativeFunction, ffi.Int)> + >('EVP_PKEY_CTX_set_rsa_padding'); + late final _EVP_PKEY_CTX_set_rsa_padding = + _EVP_PKEY_CTX_set_rsa_paddingPtr.asFunction< + int Function(ffi.Pointer, int) + >(); /// EVP_PKEY_CTX_set_rsa_pss_saltlen sets the length of the salt in a PSS-padded /// signature. A value of -1 cause the salt to be the same length as the digest @@ -1956,19 +1991,17 @@ class BoringSsl { ffi.Pointer ctx, int salt_len, ) { - return _EVP_PKEY_CTX_set_rsa_pss_saltlen( - ctx, - salt_len, - ); + return _EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, salt_len); } - late final _EVP_PKEY_CTX_set_rsa_pss_saltlenPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, - ffi.Int)>>('EVP_PKEY_CTX_set_rsa_pss_saltlen'); + late final _EVP_PKEY_CTX_set_rsa_pss_saltlenPtr = + _lookup< + ffi.NativeFunction, ffi.Int)> + >('EVP_PKEY_CTX_set_rsa_pss_saltlen'); late final _EVP_PKEY_CTX_set_rsa_pss_saltlen = _EVP_PKEY_CTX_set_rsa_pss_saltlenPtr.asFunction< - int Function(ffi.Pointer, int)>(); + int Function(ffi.Pointer, int) + >(); /// EVP_PKEY_decrypt decrypts |in_len| bytes from |in|. If |out| is NULL, the /// maximum size of the plaintext is written to |out_len|. Otherwise, |*out_len| @@ -1987,44 +2020,48 @@ class BoringSsl { ffi.Pointer in1, int in_len, ) { - return _EVP_PKEY_decrypt( - ctx, - out, - out_len, - in1, - in_len, - ); + return _EVP_PKEY_decrypt(ctx, out, out_len, in1, in_len); } - late final _EVP_PKEY_decryptPtr = _lookup< - ffi.NativeFunction< + late final _EVP_PKEY_decryptPtr = + _lookup< + ffi.NativeFunction< ffi.Int Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Size)>>('EVP_PKEY_decrypt'); - late final _EVP_PKEY_decrypt = _EVP_PKEY_decryptPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer, ffi.Pointer, int)>(); + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Size, + ) + > + >('EVP_PKEY_decrypt'); + late final _EVP_PKEY_decrypt = + _EVP_PKEY_decryptPtr.asFunction< + int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ) + >(); /// EVP_PKEY_decrypt_init initialises an |EVP_PKEY_CTX| for a decryption /// operation. It should be called before |EVP_PKEY_decrypt|. /// /// It returns one on success or zero on error. - int EVP_PKEY_decrypt_init( - ffi.Pointer ctx, - ) { - return _EVP_PKEY_decrypt_init( - ctx, - ); + int EVP_PKEY_decrypt_init(ffi.Pointer ctx) { + return _EVP_PKEY_decrypt_init(ctx); } late final _EVP_PKEY_decrypt_initPtr = _lookup)>>( - 'EVP_PKEY_decrypt_init'); - late final _EVP_PKEY_decrypt_init = _EVP_PKEY_decrypt_initPtr.asFunction< - int Function(ffi.Pointer)>(); + 'EVP_PKEY_decrypt_init', + ); + late final _EVP_PKEY_decrypt_init = + _EVP_PKEY_decrypt_initPtr.asFunction< + int Function(ffi.Pointer) + >(); /// EVP_PKEY_encrypt encrypts |in_len| bytes from |in|. If |out| is NULL, the /// maximum size of the ciphertext is written to |out_len|. Otherwise, |*out_len| @@ -2043,103 +2080,98 @@ class BoringSsl { ffi.Pointer in1, int in_len, ) { - return _EVP_PKEY_encrypt( - ctx, - out, - out_len, - in1, - in_len, - ); + return _EVP_PKEY_encrypt(ctx, out, out_len, in1, in_len); } - late final _EVP_PKEY_encryptPtr = _lookup< - ffi.NativeFunction< + late final _EVP_PKEY_encryptPtr = + _lookup< + ffi.NativeFunction< ffi.Int Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Size)>>('EVP_PKEY_encrypt'); - late final _EVP_PKEY_encrypt = _EVP_PKEY_encryptPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer, ffi.Pointer, int)>(); + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Size, + ) + > + >('EVP_PKEY_encrypt'); + late final _EVP_PKEY_encrypt = + _EVP_PKEY_encryptPtr.asFunction< + int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ) + >(); /// EVP_PKEY_encrypt_init initialises an |EVP_PKEY_CTX| for an encryption /// operation. It should be called before |EVP_PKEY_encrypt|. /// /// It returns one on success or zero on error. - int EVP_PKEY_encrypt_init( - ffi.Pointer ctx, - ) { - return _EVP_PKEY_encrypt_init( - ctx, - ); + int EVP_PKEY_encrypt_init(ffi.Pointer ctx) { + return _EVP_PKEY_encrypt_init(ctx); } late final _EVP_PKEY_encrypt_initPtr = _lookup)>>( - 'EVP_PKEY_encrypt_init'); - late final _EVP_PKEY_encrypt_init = _EVP_PKEY_encrypt_initPtr.asFunction< - int Function(ffi.Pointer)>(); + 'EVP_PKEY_encrypt_init', + ); + late final _EVP_PKEY_encrypt_init = + _EVP_PKEY_encrypt_initPtr.asFunction< + int Function(ffi.Pointer) + >(); /// EVP_PKEY_free frees all data referenced by |pkey| and then frees |pkey| /// itself. - void EVP_PKEY_free( - ffi.Pointer pkey, - ) { - return _EVP_PKEY_free( - pkey, - ); + void EVP_PKEY_free(ffi.Pointer pkey) { + return _EVP_PKEY_free(pkey); } late final _EVP_PKEY_freePtr = _lookup)>>( - 'EVP_PKEY_free'); + 'EVP_PKEY_free', + ); late final _EVP_PKEY_free = _EVP_PKEY_freePtr.asFunction)>(); - ffi.Pointer EVP_PKEY_get1_EC_KEY( - ffi.Pointer pkey, - ) { - return _EVP_PKEY_get1_EC_KEY( - pkey, - ); + ffi.Pointer EVP_PKEY_get1_EC_KEY(ffi.Pointer pkey) { + return _EVP_PKEY_get1_EC_KEY(pkey); } - late final _EVP_PKEY_get1_EC_KEYPtr = _lookup< - ffi - .NativeFunction Function(ffi.Pointer)>>( - 'EVP_PKEY_get1_EC_KEY'); - late final _EVP_PKEY_get1_EC_KEY = _EVP_PKEY_get1_EC_KEYPtr.asFunction< - ffi.Pointer Function(ffi.Pointer)>(); + late final _EVP_PKEY_get1_EC_KEYPtr = + _lookup< + ffi.NativeFunction Function(ffi.Pointer)> + >('EVP_PKEY_get1_EC_KEY'); + late final _EVP_PKEY_get1_EC_KEY = + _EVP_PKEY_get1_EC_KEYPtr.asFunction< + ffi.Pointer Function(ffi.Pointer) + >(); - ffi.Pointer EVP_PKEY_get1_RSA( - ffi.Pointer pkey, - ) { - return _EVP_PKEY_get1_RSA( - pkey, - ); + ffi.Pointer EVP_PKEY_get1_RSA(ffi.Pointer pkey) { + return _EVP_PKEY_get1_RSA(pkey); } - late final _EVP_PKEY_get1_RSAPtr = _lookup< - ffi.NativeFunction Function(ffi.Pointer)>>( - 'EVP_PKEY_get1_RSA'); - late final _EVP_PKEY_get1_RSA = _EVP_PKEY_get1_RSAPtr.asFunction< - ffi.Pointer Function(ffi.Pointer)>(); + late final _EVP_PKEY_get1_RSAPtr = + _lookup< + ffi.NativeFunction Function(ffi.Pointer)> + >('EVP_PKEY_get1_RSA'); + late final _EVP_PKEY_get1_RSA = + _EVP_PKEY_get1_RSAPtr.asFunction< + ffi.Pointer Function(ffi.Pointer) + >(); /// EVP_PKEY_id returns the type of |pkey|, which is one of the |EVP_PKEY_*| /// values. - int EVP_PKEY_id( - ffi.Pointer pkey, - ) { - return _EVP_PKEY_id( - pkey, - ); + int EVP_PKEY_id(ffi.Pointer pkey) { + return _EVP_PKEY_id(pkey); } late final _EVP_PKEY_idPtr = _lookup)>>( - 'EVP_PKEY_id'); + 'EVP_PKEY_id', + ); late final _EVP_PKEY_id = _EVP_PKEY_idPtr.asFunction)>(); @@ -2151,7 +2183,8 @@ class BoringSsl { late final _EVP_PKEY_newPtr = _lookup Function()>>( - 'EVP_PKEY_new'); + 'EVP_PKEY_new', + ); late final _EVP_PKEY_new = _EVP_PKEY_newPtr.asFunction Function()>(); @@ -2159,18 +2192,19 @@ class BoringSsl { ffi.Pointer pkey, ffi.Pointer key, ) { - return _EVP_PKEY_set1_EC_KEY( - pkey, - key, - ); + return _EVP_PKEY_set1_EC_KEY(pkey, key); } - late final _EVP_PKEY_set1_EC_KEYPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, - ffi.Pointer)>>('EVP_PKEY_set1_EC_KEY'); - late final _EVP_PKEY_set1_EC_KEY = _EVP_PKEY_set1_EC_KEYPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer)>(); + late final _EVP_PKEY_set1_EC_KEYPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function(ffi.Pointer, ffi.Pointer) + > + >('EVP_PKEY_set1_EC_KEY'); + late final _EVP_PKEY_set1_EC_KEY = + _EVP_PKEY_set1_EC_KEYPtr.asFunction< + int Function(ffi.Pointer, ffi.Pointer) + >(); /// Getting and setting concrete public key types. /// @@ -2186,41 +2220,36 @@ class BoringSsl { /// non-mutating for thread-safety purposes, but mutating functions on the /// returned lower-level objects are considered to also mutate the |EVP_PKEY| and /// may not be called concurrently with other operations on the |EVP_PKEY|. - int EVP_PKEY_set1_RSA( - ffi.Pointer pkey, - ffi.Pointer key, - ) { - return _EVP_PKEY_set1_RSA( - pkey, - key, - ); + int EVP_PKEY_set1_RSA(ffi.Pointer pkey, ffi.Pointer key) { + return _EVP_PKEY_set1_RSA(pkey, key); } - late final _EVP_PKEY_set1_RSAPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function( - ffi.Pointer, ffi.Pointer)>>('EVP_PKEY_set1_RSA'); - late final _EVP_PKEY_set1_RSA = _EVP_PKEY_set1_RSAPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer)>(); + late final _EVP_PKEY_set1_RSAPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function(ffi.Pointer, ffi.Pointer) + > + >('EVP_PKEY_set1_RSA'); + late final _EVP_PKEY_set1_RSA = + _EVP_PKEY_set1_RSAPtr.asFunction< + int Function(ffi.Pointer, ffi.Pointer) + >(); /// EVP_PKEY_set_type sets the type of |pkey| to |type|. It returns one if /// successful or zero if the |type| argument is not one of the |EVP_PKEY_*| /// values. If |pkey| is NULL, it simply reports whether the type is known. - int EVP_PKEY_set_type( - ffi.Pointer pkey, - int type, - ) { - return _EVP_PKEY_set_type( - pkey, - type, - ); + int EVP_PKEY_set_type(ffi.Pointer pkey, int type) { + return _EVP_PKEY_set_type(pkey, type); } - late final _EVP_PKEY_set_typePtr = _lookup< - ffi.NativeFunction, ffi.Int)>>( - 'EVP_PKEY_set_type'); - late final _EVP_PKEY_set_type = _EVP_PKEY_set_typePtr.asFunction< - int Function(ffi.Pointer, int)>(); + late final _EVP_PKEY_set_typePtr = + _lookup< + ffi.NativeFunction, ffi.Int)> + >('EVP_PKEY_set_type'); + late final _EVP_PKEY_set_type = + _EVP_PKEY_set_typePtr.asFunction< + int Function(ffi.Pointer, int) + >(); /// EVP_aead_aes_128_gcm is AES-128 in Galois Counter Mode. /// @@ -2235,7 +2264,8 @@ class BoringSsl { late final _EVP_aead_aes_128_gcmPtr = _lookup Function()>>( - 'EVP_aead_aes_128_gcm'); + 'EVP_aead_aes_128_gcm', + ); late final _EVP_aead_aes_128_gcm = _EVP_aead_aes_128_gcmPtr.asFunction Function()>(); @@ -2252,7 +2282,8 @@ class BoringSsl { late final _EVP_aead_aes_256_gcmPtr = _lookup Function()>>( - 'EVP_aead_aes_256_gcm'); + 'EVP_aead_aes_256_gcm', + ); late final _EVP_aead_aes_256_gcm = _EVP_aead_aes_256_gcmPtr.asFunction Function()>(); @@ -2262,7 +2293,8 @@ class BoringSsl { late final _EVP_aes_128_cbcPtr = _lookup Function()>>( - 'EVP_aes_128_cbc'); + 'EVP_aes_128_cbc', + ); late final _EVP_aes_128_cbc = _EVP_aes_128_cbcPtr.asFunction Function()>(); @@ -2272,7 +2304,8 @@ class BoringSsl { late final _EVP_aes_128_ctrPtr = _lookup Function()>>( - 'EVP_aes_128_ctr'); + 'EVP_aes_128_ctr', + ); late final _EVP_aes_128_ctr = _EVP_aes_128_ctrPtr.asFunction Function()>(); @@ -2282,7 +2315,8 @@ class BoringSsl { late final _EVP_aes_256_cbcPtr = _lookup Function()>>( - 'EVP_aes_256_cbc'); + 'EVP_aes_256_cbc', + ); late final _EVP_aes_256_cbc = _EVP_aes_256_cbcPtr.asFunction Function()>(); @@ -2292,49 +2326,46 @@ class BoringSsl { late final _EVP_aes_256_ctrPtr = _lookup Function()>>( - 'EVP_aes_256_ctr'); + 'EVP_aes_256_ctr', + ); late final _EVP_aes_256_ctr = _EVP_aes_256_ctrPtr.asFunction Function()>(); /// EVP_marshal_private_key marshals |key| as a DER-encoded PrivateKeyInfo /// structure (RFC 5208) and appends the result to |cbb|. It returns one on /// success and zero on error. - int EVP_marshal_private_key( - ffi.Pointer cbb, - ffi.Pointer key, - ) { - return _EVP_marshal_private_key( - cbb, - key, - ); + int EVP_marshal_private_key(ffi.Pointer cbb, ffi.Pointer key) { + return _EVP_marshal_private_key(cbb, key); } - late final _EVP_marshal_private_keyPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, - ffi.Pointer)>>('EVP_marshal_private_key'); - late final _EVP_marshal_private_key = _EVP_marshal_private_keyPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer)>(); + late final _EVP_marshal_private_keyPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function(ffi.Pointer, ffi.Pointer) + > + >('EVP_marshal_private_key'); + late final _EVP_marshal_private_key = + _EVP_marshal_private_keyPtr.asFunction< + int Function(ffi.Pointer, ffi.Pointer) + >(); /// EVP_marshal_public_key marshals |key| as a DER-encoded SubjectPublicKeyInfo /// structure (RFC 5280) and appends the result to |cbb|. It returns one on /// success and zero on error. - int EVP_marshal_public_key( - ffi.Pointer cbb, - ffi.Pointer key, - ) { - return _EVP_marshal_public_key( - cbb, - key, - ); + int EVP_marshal_public_key(ffi.Pointer cbb, ffi.Pointer key) { + return _EVP_marshal_public_key(cbb, key); } - late final _EVP_marshal_public_keyPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, - ffi.Pointer)>>('EVP_marshal_public_key'); - late final _EVP_marshal_public_key = _EVP_marshal_public_keyPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer)>(); + late final _EVP_marshal_public_keyPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function(ffi.Pointer, ffi.Pointer) + > + >('EVP_marshal_public_key'); + late final _EVP_marshal_public_key = + _EVP_marshal_public_keyPtr.asFunction< + int Function(ffi.Pointer, ffi.Pointer) + >(); /// EVP_parse_private_key decodes a DER-encoded PrivateKeyInfo structure (RFC /// 5208) from |cbs| and advances |cbs|. It returns a newly-allocated |EVP_PKEY| @@ -2349,19 +2380,18 @@ class BoringSsl { /// A PrivateKeyInfo ends with an optional set of attributes. These are not /// processed and so this function will silently ignore any trailing data in the /// structure. - ffi.Pointer EVP_parse_private_key( - ffi.Pointer cbs, - ) { - return _EVP_parse_private_key( - cbs, - ); + ffi.Pointer EVP_parse_private_key(ffi.Pointer cbs) { + return _EVP_parse_private_key(cbs); } - late final _EVP_parse_private_keyPtr = _lookup< - ffi.NativeFunction Function(ffi.Pointer)>>( - 'EVP_parse_private_key'); - late final _EVP_parse_private_key = _EVP_parse_private_keyPtr.asFunction< - ffi.Pointer Function(ffi.Pointer)>(); + late final _EVP_parse_private_keyPtr = + _lookup< + ffi.NativeFunction Function(ffi.Pointer)> + >('EVP_parse_private_key'); + late final _EVP_parse_private_key = + _EVP_parse_private_keyPtr.asFunction< + ffi.Pointer Function(ffi.Pointer) + >(); /// EVP_parse_public_key decodes a DER-encoded SubjectPublicKeyInfo structure /// (RFC 5280) from |cbs| and advances |cbs|. It returns a newly-allocated @@ -2371,19 +2401,18 @@ class BoringSsl { /// The caller must check the type of the parsed public key to ensure it is /// suitable and validate other desired key properties such as RSA modulus size /// or EC curve. - ffi.Pointer EVP_parse_public_key( - ffi.Pointer cbs, - ) { - return _EVP_parse_public_key( - cbs, - ); + ffi.Pointer EVP_parse_public_key(ffi.Pointer cbs) { + return _EVP_parse_public_key(cbs); } - late final _EVP_parse_public_keyPtr = _lookup< - ffi.NativeFunction Function(ffi.Pointer)>>( - 'EVP_parse_public_key'); - late final _EVP_parse_public_key = _EVP_parse_public_keyPtr.asFunction< - ffi.Pointer Function(ffi.Pointer)>(); + late final _EVP_parse_public_keyPtr = + _lookup< + ffi.NativeFunction Function(ffi.Pointer)> + >('EVP_parse_public_key'); + late final _EVP_parse_public_key = + _EVP_parse_public_keyPtr.asFunction< + ffi.Pointer Function(ffi.Pointer) + >(); ffi.Pointer EVP_sha1() { return _EVP_sha1(); @@ -2452,20 +2481,25 @@ class BoringSsl { ); } - late final _HKDFPtr = _lookup< - ffi.NativeFunction< + late final _HKDFPtr = + _lookup< + ffi.NativeFunction< ffi.Int Function( - ffi.Pointer, - ffi.Size, - ffi.Pointer, - ffi.Pointer, - ffi.Size, - ffi.Pointer, - ffi.Size, - ffi.Pointer, - ffi.Size)>>('HKDF'); - late final _HKDF = _HKDFPtr.asFunction< - int Function( + ffi.Pointer, + ffi.Size, + ffi.Pointer, + ffi.Pointer, + ffi.Size, + ffi.Pointer, + ffi.Size, + ffi.Pointer, + ffi.Size, + ) + > + >('HKDF'); + late final _HKDF = + _HKDFPtr.asFunction< + int Function( ffi.Pointer, int, ffi.Pointer, @@ -2474,20 +2508,19 @@ class BoringSsl { ffi.Pointer, int, ffi.Pointer, - int)>(); + int, + ) + >(); /// HMAC_CTX_free calls |HMAC_CTX_cleanup| and then frees |ctx| itself. - void HMAC_CTX_free( - ffi.Pointer ctx, - ) { - return _HMAC_CTX_free( - ctx, - ); + void HMAC_CTX_free(ffi.Pointer ctx) { + return _HMAC_CTX_free(ctx); } late final _HMAC_CTX_freePtr = _lookup)>>( - 'HMAC_CTX_free'); + 'HMAC_CTX_free', + ); late final _HMAC_CTX_free = _HMAC_CTX_freePtr.asFunction)>(); @@ -2500,7 +2533,8 @@ class BoringSsl { late final _HMAC_CTX_newPtr = _lookup Function()>>( - 'HMAC_CTX_new'); + 'HMAC_CTX_new', + ); late final _HMAC_CTX_new = _HMAC_CTX_newPtr.asFunction Function()>(); @@ -2514,20 +2548,27 @@ class BoringSsl { ffi.Pointer out, ffi.Pointer out_len, ) { - return _HMAC_Final( - ctx, - out, - out_len, - ); + return _HMAC_Final(ctx, out, out_len); } - late final _HMAC_FinalPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer)>>('HMAC_Final'); - late final _HMAC_Final = _HMAC_FinalPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer)>(); + late final _HMAC_FinalPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ) + > + >('HMAC_Final'); + late final _HMAC_Final = + _HMAC_FinalPtr.asFunction< + int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ) + >(); /// HMAC_Init_ex sets up an initialised |HMAC_CTX| to use |md| as the hash /// function and |key| as the key. For a non-initial call, |md| may be NULL, in @@ -2545,26 +2586,31 @@ class BoringSsl { ffi.Pointer md, ffi.Pointer impl, ) { - return _HMAC_Init_ex( - ctx, - key, - key_len, - md, - impl, - ); + return _HMAC_Init_ex(ctx, key, key_len, md, impl); } - late final _HMAC_Init_exPtr = _lookup< - ffi.NativeFunction< + late final _HMAC_Init_exPtr = + _lookup< + ffi.NativeFunction< ffi.Int Function( - ffi.Pointer, - ffi.Pointer, - ffi.Size, - ffi.Pointer, - ffi.Pointer)>>('HMAC_Init_ex'); - late final _HMAC_Init_ex = _HMAC_Init_exPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, int, - ffi.Pointer, ffi.Pointer)>(); + ffi.Pointer, + ffi.Pointer, + ffi.Size, + ffi.Pointer, + ffi.Pointer, + ) + > + >('HMAC_Init_ex'); + late final _HMAC_Init_ex = + _HMAC_Init_exPtr.asFunction< + int Function( + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer, + ffi.Pointer, + ) + >(); /// HMAC_Update hashes |data_len| bytes from |data| into the current HMAC /// operation in |ctx|. It returns one. @@ -2573,85 +2619,78 @@ class BoringSsl { ffi.Pointer data, int data_len, ) { - return _HMAC_Update( - ctx, - data, - data_len, - ); + return _HMAC_Update(ctx, data, data_len); } - late final _HMAC_UpdatePtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, ffi.Pointer, - ffi.Size)>>('HMAC_Update'); - late final _HMAC_Update = _HMAC_UpdatePtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, int)>(); + late final _HMAC_UpdatePtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Size, + ) + > + >('HMAC_Update'); + late final _HMAC_Update = + _HMAC_UpdatePtr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, int) + >(); /// HMAC_size returns the size, in bytes, of the HMAC that will be produced by /// |ctx|. On entry, |ctx| must have been setup with |HMAC_Init_ex|. - int HMAC_size( - ffi.Pointer ctx, - ) { - return _HMAC_size( - ctx, - ); + int HMAC_size(ffi.Pointer ctx) { + return _HMAC_size(ctx); } late final _HMAC_sizePtr = _lookup)>>( - 'HMAC_size'); + 'HMAC_size', + ); late final _HMAC_size = _HMAC_sizePtr.asFunction)>(); /// OPENSSL_free does nothing if |ptr| is NULL. Otherwise it zeros out the /// memory allocated at |ptr| and frees it. - void OPENSSL_free( - ffi.Pointer ptr, - ) { - return _OPENSSL_free( - ptr, - ); + void OPENSSL_free(ffi.Pointer ptr) { + return _OPENSSL_free(ptr); } late final _OPENSSL_freePtr = _lookup)>>( - 'OPENSSL_free'); + 'OPENSSL_free', + ); late final _OPENSSL_free = _OPENSSL_freePtr.asFunction)>(); /// OPENSSL_malloc acts like a regular |malloc|. - ffi.Pointer OPENSSL_malloc( - int size, - ) { - return _OPENSSL_malloc( - size, - ); + ffi.Pointer OPENSSL_malloc(int size) { + return _OPENSSL_malloc(size); } late final _OPENSSL_mallocPtr = _lookup Function(ffi.Size)>>( - 'OPENSSL_malloc'); + 'OPENSSL_malloc', + ); late final _OPENSSL_malloc = _OPENSSL_mallocPtr.asFunction Function(int)>(); /// OPENSSL_memdup returns an allocated, duplicate of |size| bytes from |data| or /// NULL on allocation failure. - ffi.Pointer OPENSSL_memdup( - ffi.Pointer data, - int size, - ) { - return _OPENSSL_memdup( - data, - size, - ); + ffi.Pointer OPENSSL_memdup(ffi.Pointer data, int size) { + return _OPENSSL_memdup(data, size); } - late final _OPENSSL_memdupPtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer, ffi.Size)>>('OPENSSL_memdup'); - late final _OPENSSL_memdup = _OPENSSL_memdupPtr.asFunction< - ffi.Pointer Function(ffi.Pointer, int)>(); + late final _OPENSSL_memdupPtr = + _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, ffi.Size) + > + >('OPENSSL_memdup'); + late final _OPENSSL_memdup = + _OPENSSL_memdupPtr.asFunction< + ffi.Pointer Function(ffi.Pointer, int) + >(); /// PKCS5_PBKDF2_HMAC computes |iterations| iterations of PBKDF2 of |password| /// and |salt|, using |digest|, and outputs |key_len| bytes to |out_key|. It @@ -2678,84 +2717,86 @@ class BoringSsl { ); } - late final _PKCS5_PBKDF2_HMACPtr = _lookup< - ffi.NativeFunction< + late final _PKCS5_PBKDF2_HMACPtr = + _lookup< + ffi.NativeFunction< ffi.Int Function( - ffi.Pointer, - ffi.Size, - ffi.Pointer, - ffi.Size, - ffi.UnsignedInt, - ffi.Pointer, - ffi.Size, - ffi.Pointer)>>('PKCS5_PBKDF2_HMAC'); - late final _PKCS5_PBKDF2_HMAC = _PKCS5_PBKDF2_HMACPtr.asFunction< - int Function(ffi.Pointer, int, ffi.Pointer, int, int, - ffi.Pointer, int, ffi.Pointer)>(); + ffi.Pointer, + ffi.Size, + ffi.Pointer, + ffi.Size, + ffi.UnsignedInt, + ffi.Pointer, + ffi.Size, + ffi.Pointer, + ) + > + >('PKCS5_PBKDF2_HMAC'); + late final _PKCS5_PBKDF2_HMAC = + _PKCS5_PBKDF2_HMACPtr.asFunction< + int Function( + ffi.Pointer, + int, + ffi.Pointer, + int, + int, + ffi.Pointer, + int, + ffi.Pointer, + ) + >(); /// RAND_bytes writes |len| bytes of random data to |buf| and returns one. - int RAND_bytes( - ffi.Pointer buf, - int len, - ) { - return _RAND_bytes( - buf, - len, - ); + int RAND_bytes(ffi.Pointer buf, int len) { + return _RAND_bytes(buf, len); } - late final _RAND_bytesPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, ffi.Size)>>('RAND_bytes'); + late final _RAND_bytesPtr = + _lookup< + ffi.NativeFunction, ffi.Size)> + >('RAND_bytes'); late final _RAND_bytes = _RAND_bytesPtr.asFunction, int)>(); /// RSAPublicKey_dup allocates a fresh |RSA| and copies the public key from /// |rsa| into it. It returns the fresh |RSA| object, or NULL on error. - ffi.Pointer RSAPublicKey_dup( - ffi.Pointer rsa, - ) { - return _RSAPublicKey_dup( - rsa, - ); + ffi.Pointer RSAPublicKey_dup(ffi.Pointer rsa) { + return _RSAPublicKey_dup(rsa); } late final _RSAPublicKey_dupPtr = _lookup Function(ffi.Pointer)>>( - 'RSAPublicKey_dup'); - late final _RSAPublicKey_dup = _RSAPublicKey_dupPtr.asFunction< - ffi.Pointer Function(ffi.Pointer)>(); + 'RSAPublicKey_dup', + ); + late final _RSAPublicKey_dup = + _RSAPublicKey_dupPtr.asFunction< + ffi.Pointer Function(ffi.Pointer) + >(); /// RSA_check_key performs basic validity tests on |rsa|. It returns one if /// they pass and zero otherwise. Opaque keys and public keys always pass. If it /// returns zero then a more detailed error is available on the error queue. - int RSA_check_key( - ffi.Pointer rsa, - ) { - return _RSA_check_key( - rsa, - ); + int RSA_check_key(ffi.Pointer rsa) { + return _RSA_check_key(rsa); } late final _RSA_check_keyPtr = _lookup)>>( - 'RSA_check_key'); + 'RSA_check_key', + ); late final _RSA_check_key = _RSA_check_keyPtr.asFunction)>(); /// RSA_free decrements the reference count of |rsa| and frees it if the /// reference count drops to zero. - void RSA_free( - ffi.Pointer rsa, - ) { - return _RSA_free( - rsa, - ); + void RSA_free(ffi.Pointer rsa) { + return _RSA_free(rsa); } late final _RSA_freePtr = _lookup)>>( - 'RSA_free'); + 'RSA_free', + ); late final _RSA_free = _RSA_freePtr.asFunction)>(); @@ -2773,21 +2814,29 @@ class BoringSsl { ffi.Pointer e, ffi.Pointer cb, ) { - return _RSA_generate_key_ex( - rsa, - bits, - e, - cb, - ); + return _RSA_generate_key_ex(rsa, bits, e, cb); } - late final _RSA_generate_key_exPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, ffi.Int, ffi.Pointer, - ffi.Pointer)>>('RSA_generate_key_ex'); - late final _RSA_generate_key_ex = _RSA_generate_key_exPtr.asFunction< - int Function( - ffi.Pointer, int, ffi.Pointer, ffi.Pointer)>(); + late final _RSA_generate_key_exPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function( + ffi.Pointer, + ffi.Int, + ffi.Pointer, + ffi.Pointer, + ) + > + >('RSA_generate_key_ex'); + late final _RSA_generate_key_ex = + _RSA_generate_key_exPtr.asFunction< + int Function( + ffi.Pointer, + int, + ffi.Pointer, + ffi.Pointer, + ) + >(); /// RSA_get0_crt_params sets |*out_dmp1|, |*out_dmq1|, and |*out_iqmp|, if /// non-NULL, to |rsa|'s CRT parameters. These are d (mod p-1), d (mod q-1) and @@ -2799,27 +2848,29 @@ class BoringSsl { ffi.Pointer> out_dmq1, ffi.Pointer> out_iqmp, ) { - return _RSA_get0_crt_params( - rsa, - out_dmp1, - out_dmq1, - out_iqmp, - ); + return _RSA_get0_crt_params(rsa, out_dmp1, out_dmq1, out_iqmp); } - late final _RSA_get0_crt_paramsPtr = _lookup< - ffi.NativeFunction< + late final _RSA_get0_crt_paramsPtr = + _lookup< + ffi.NativeFunction< ffi.Void Function( - ffi.Pointer, - ffi.Pointer>, - ffi.Pointer>, - ffi.Pointer>)>>('RSA_get0_crt_params'); - late final _RSA_get0_crt_params = _RSA_get0_crt_paramsPtr.asFunction< - void Function( + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer>, + ffi.Pointer>, + ) + > + >('RSA_get0_crt_params'); + late final _RSA_get0_crt_params = + _RSA_get0_crt_paramsPtr.asFunction< + void Function( ffi.Pointer, ffi.Pointer>, ffi.Pointer>, - ffi.Pointer>)>(); + ffi.Pointer>, + ) + >(); /// RSA_get0_factors sets |*out_p| and |*out_q|, if non-NULL, to |rsa|'s prime /// factors. If |rsa| is a public key, they will be set to NULL. @@ -2828,20 +2879,27 @@ class BoringSsl { ffi.Pointer> out_p, ffi.Pointer> out_q, ) { - return _RSA_get0_factors( - rsa, - out_p, - out_q, - ); + return _RSA_get0_factors(rsa, out_p, out_q); } - late final _RSA_get0_factorsPtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, ffi.Pointer>, - ffi.Pointer>)>>('RSA_get0_factors'); - late final _RSA_get0_factors = _RSA_get0_factorsPtr.asFunction< - void Function(ffi.Pointer, ffi.Pointer>, - ffi.Pointer>)>(); + late final _RSA_get0_factorsPtr = + _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer>, + ) + > + >('RSA_get0_factors'); + late final _RSA_get0_factors = + _RSA_get0_factorsPtr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer>, + ) + >(); /// RSA_get0_key sets |*out_n|, |*out_e|, and |*out_d|, if non-NULL, to |rsa|'s /// modulus, public exponent, and private exponent, respectively. If |rsa| is a @@ -2852,27 +2910,29 @@ class BoringSsl { ffi.Pointer> out_e, ffi.Pointer> out_d, ) { - return _RSA_get0_key( - rsa, - out_n, - out_e, - out_d, - ); + return _RSA_get0_key(rsa, out_n, out_e, out_d); } - late final _RSA_get0_keyPtr = _lookup< - ffi.NativeFunction< + late final _RSA_get0_keyPtr = + _lookup< + ffi.NativeFunction< ffi.Void Function( - ffi.Pointer, - ffi.Pointer>, - ffi.Pointer>, - ffi.Pointer>)>>('RSA_get0_key'); - late final _RSA_get0_key = _RSA_get0_keyPtr.asFunction< - void Function( + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer>, + ffi.Pointer>, + ) + > + >('RSA_get0_key'); + late final _RSA_get0_key = + _RSA_get0_keyPtr.asFunction< + void Function( ffi.Pointer, ffi.Pointer>, ffi.Pointer>, - ffi.Pointer>)>(); + ffi.Pointer>, + ) + >(); /// RSA_new returns a new, empty |RSA| object or NULL on error. ffi.Pointer RSA_new() { @@ -2897,24 +2957,29 @@ class BoringSsl { ffi.Pointer dmq1, ffi.Pointer iqmp, ) { - return _RSA_set0_crt_params( - rsa, - dmp1, - dmq1, - iqmp, - ); + return _RSA_set0_crt_params(rsa, dmp1, dmq1, iqmp); } - late final _RSA_set0_crt_paramsPtr = _lookup< - ffi.NativeFunction< + late final _RSA_set0_crt_paramsPtr = + _lookup< + ffi.NativeFunction< ffi.Int Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>('RSA_set0_crt_params'); - late final _RSA_set0_crt_params = _RSA_set0_crt_paramsPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, - ffi.Pointer)>(); + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ) + > + >('RSA_set0_crt_params'); + late final _RSA_set0_crt_params = + _RSA_set0_crt_paramsPtr.asFunction< + int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ) + >(); /// RSA_set0_factors sets |rsa|'s prime factors to |p| and |q|, if non-NULL, and /// takes ownership of them. On success, it takes ownership of each argument and @@ -2929,20 +2994,23 @@ class BoringSsl { ffi.Pointer p, ffi.Pointer q, ) { - return _RSA_set0_factors( - rsa, - p, - q, - ); + return _RSA_set0_factors(rsa, p, q); } - late final _RSA_set0_factorsPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer)>>('RSA_set0_factors'); - late final _RSA_set0_factors = _RSA_set0_factorsPtr.asFunction< - int Function( - ffi.Pointer, ffi.Pointer, ffi.Pointer)>(); + late final _RSA_set0_factorsPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ) + > + >('RSA_set0_factors'); + late final _RSA_set0_factors = + _RSA_set0_factorsPtr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, ffi.Pointer) + >(); /// RSA_set0_key sets |rsa|'s modulus, public exponent, and private exponent to /// |n|, |e|, and |d| respectively, if non-NULL. On success, it takes ownership @@ -2959,21 +3027,29 @@ class BoringSsl { ffi.Pointer e, ffi.Pointer d, ) { - return _RSA_set0_key( - rsa, - n, - e, - d, - ); + return _RSA_set0_key(rsa, n, e, d); } - late final _RSA_set0_keyPtr = _lookup< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer, ffi.Pointer)>>('RSA_set0_key'); - late final _RSA_set0_key = _RSA_set0_keyPtr.asFunction< - int Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, - ffi.Pointer)>(); + late final _RSA_set0_keyPtr = + _lookup< + ffi.NativeFunction< + ffi.Int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ) + > + >('RSA_set0_key'); + late final _RSA_set0_key = + _RSA_set0_keyPtr.asFunction< + int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ) + >(); late final addresses = _SymbolAddresses(this); } @@ -2982,7 +3058,7 @@ class _SymbolAddresses { final BoringSsl _library; _SymbolAddresses(this._library); ffi.Pointer)>> - get EVP_PKEY_free => _library._EVP_PKEY_freePtr; + get EVP_PKEY_free => _library._EVP_PKEY_freePtr; } const int AES_BLOCK_SIZE = 16; @@ -3412,50 +3488,66 @@ final class rsa_meth_st extends ffi.Struct { external ffi.Pointer app_data; - external ffi - .Pointer rsa)>> init; + external ffi.Pointer< + ffi.NativeFunction rsa)> + > + init; - external ffi - .Pointer rsa)>> - finish; + external ffi.Pointer< + ffi.NativeFunction rsa)> + > + finish; /// size returns the size of the RSA modulus in bytes. - external ffi - .Pointer rsa)>> - size; + external ffi.Pointer< + ffi.NativeFunction rsa)> + > + size; external ffi.Pointer< - ffi.NativeFunction< - ffi.Int Function( - ffi.Int type, - ffi.Pointer m, - ffi.UnsignedInt m_length, - ffi.Pointer sigret, - ffi.Pointer siglen, - ffi.Pointer rsa)>> sign; + ffi.NativeFunction< + ffi.Int Function( + ffi.Int type, + ffi.Pointer m, + ffi.UnsignedInt m_length, + ffi.Pointer sigret, + ffi.Pointer siglen, + ffi.Pointer rsa, + ) + > + > + sign; /// These functions mirror the |RSA_*| functions of the same name. external ffi.Pointer< - ffi.NativeFunction< - ffi.Int Function( - ffi.Pointer rsa, - ffi.Pointer out_len, - ffi.Pointer out, - ffi.Size max_out, - ffi.Pointer in1, - ffi.Size in_len, - ffi.Int padding)>> sign_raw; + ffi.NativeFunction< + ffi.Int Function( + ffi.Pointer rsa, + ffi.Pointer out_len, + ffi.Pointer out, + ffi.Size max_out, + ffi.Pointer in1, + ffi.Size in_len, + ffi.Int padding, + ) + > + > + sign_raw; external ffi.Pointer< - ffi.NativeFunction< - ffi.Int Function( - ffi.Pointer rsa, - ffi.Pointer out_len, - ffi.Pointer out, - ffi.Size max_out, - ffi.Pointer in1, - ffi.Size in_len, - ffi.Int padding)>> decrypt; + ffi.NativeFunction< + ffi.Int Function( + ffi.Pointer rsa, + ffi.Pointer out_len, + ffi.Pointer out, + ffi.Size max_out, + ffi.Pointer in1, + ffi.Size in_len, + ffi.Int padding, + ) + > + > + decrypt; /// private_transform takes a big-endian integer from |in|, calculates the /// d'th power of it, modulo the RSA modulus and writes the result as a @@ -3470,9 +3562,16 @@ final class rsa_meth_st extends ffi.Struct { /// to override it in order to avoid having to implement the padding /// functionality demanded by those, higher level, operations. external ffi.Pointer< - ffi.NativeFunction< - ffi.Int Function(ffi.Pointer rsa, ffi.Pointer out, - ffi.Pointer in1, ffi.Size len)>> private_transform; + ffi.NativeFunction< + ffi.Int Function( + ffi.Pointer rsa, + ffi.Pointer out, + ffi.Pointer in1, + ffi.Size len, + ) + > + > + private_transform; @ffi.Int() external int flags; diff --git a/lib/src/webcrypto/webcrypto.aescbc.dart b/lib/src/webcrypto/webcrypto.aescbc.dart index 62aaf654..39e5c838 100644 --- a/lib/src/webcrypto/webcrypto.aescbc.dart +++ b/lib/src/webcrypto/webcrypto.aescbc.dart @@ -110,7 +110,8 @@ final class AesCbcSecretKey { // TODO: Decide if we want restrictions on "use" property" (we probably have it on web, if we don't strip it) // TODO: Decide if we want place restrictions on key_ops static Future importJsonWebKey( - Map jwk) async { + Map jwk, + ) async { final impl = await webCryptImpl.aesCbcSecretKey.importJsonWebKey(jwk); return AesCbcSecretKey._(impl); } diff --git a/lib/src/webcrypto/webcrypto.aesctr.dart b/lib/src/webcrypto/webcrypto.aesctr.dart index 383bdbef..e42b3fda 100644 --- a/lib/src/webcrypto/webcrypto.aesctr.dart +++ b/lib/src/webcrypto/webcrypto.aesctr.dart @@ -105,7 +105,8 @@ final class AesCtrSecretKey { /// /// [1]: https://tools.ietf.org/html/rfc7517 static Future importJsonWebKey( - Map jwk) async { + Map jwk, + ) async { final impl = await webCryptImpl.aesCtrSecretKey.importJsonWebKey(jwk); return AesCtrSecretKey._(impl); } @@ -186,8 +187,7 @@ final class AesCtrSecretKey { List data, List counter, int length, - ) => - _impl.encryptBytes(data, counter, length); + ) => _impl.encryptBytes(data, counter, length); /// Encrypt [data] with this [AesCtrSecretKey] using AES in _Counter mode_, /// as specified in [NIST SP800-38A][1]. @@ -243,8 +243,7 @@ final class AesCtrSecretKey { Stream> data, List counter, int length, - ) => - _impl.encryptStream(data, counter, length); + ) => _impl.encryptStream(data, counter, length); /// Decrypt [data] with this [AesCtrSecretKey] using AES in _Counter mode_, /// as specified in [NIST SP800-38A][1]. @@ -266,8 +265,7 @@ final class AesCtrSecretKey { List data, List counter, int length, - ) => - _impl.decryptBytes(data, counter, length); + ) => _impl.decryptBytes(data, counter, length); /// Decrypt [data] with this [AesCtrSecretKey] using AES in _Counter mode_, /// as specified in [NIST SP800-38A][1]. @@ -283,8 +281,7 @@ final class AesCtrSecretKey { Stream> data, List counter, int length, - ) => - _impl.decryptStream(data, counter, length); + ) => _impl.decryptStream(data, counter, length); /// Export [AesCtrSecretKey] as raw bytes. /// diff --git a/lib/src/webcrypto/webcrypto.aesgcm.dart b/lib/src/webcrypto/webcrypto.aesgcm.dart index af64c11c..5c1ccd1e 100644 --- a/lib/src/webcrypto/webcrypto.aesgcm.dart +++ b/lib/src/webcrypto/webcrypto.aesgcm.dart @@ -105,7 +105,8 @@ final class AesGcmSecretKey { /// /// [1]: https://tools.ietf.org/html/rfc7517 static Future importJsonWebKey( - Map jwk) async { + Map jwk, + ) async { final impl = await webCryptImpl.aesGcmSecretKey.importJsonWebKey(jwk); return AesGcmSecretKey._(impl); } @@ -223,9 +224,12 @@ final class AesGcmSecretKey { List iv, { List? additionalData, int? tagLength = 128, - }) => - _impl.encryptBytes(data, iv, - additionalData: additionalData, tagLength: tagLength); + }) => _impl.encryptBytes( + data, + iv, + additionalData: additionalData, + tagLength: tagLength, + ); // TODO: Document this method, notice that [data] must be concatenation of // ciphertext and authentication tag. @@ -235,9 +239,12 @@ final class AesGcmSecretKey { List iv, { List? additionalData, int? tagLength = 128, - }) => - _impl.decryptBytes(data, iv, - additionalData: additionalData, tagLength: tagLength); + }) => _impl.decryptBytes( + data, + iv, + additionalData: additionalData, + tagLength: tagLength, + ); /// Export [AesGcmSecretKey] as raw bytes. /// diff --git a/lib/src/webcrypto/webcrypto.dart b/lib/src/webcrypto/webcrypto.dart index a6e240e2..2f64612d 100644 --- a/lib/src/webcrypto/webcrypto.dart +++ b/lib/src/webcrypto/webcrypto.dart @@ -26,7 +26,8 @@ import 'dart:typed_data'; import '../impl_interface/impl_interface.dart'; import '../impl_stub/impl_stub.dart' if (dart.library.ffi) '../impl_ffi/impl_ffi.dart' - if (dart.library.js_interop) '../impl_js/impl_js.dart' show webCryptImpl; + if (dart.library.js_interop) '../impl_js/impl_js.dart' + show webCryptImpl; export '../impl_interface/impl_interface.dart' show KeyPair, EllipticCurve, OperationError; diff --git a/lib/src/webcrypto/webcrypto.ecdh.dart b/lib/src/webcrypto/webcrypto.ecdh.dart index 34a8d174..6a7770c2 100644 --- a/lib/src/webcrypto/webcrypto.ecdh.dart +++ b/lib/src/webcrypto/webcrypto.ecdh.dart @@ -97,8 +97,10 @@ final class EcdhPrivateKey { List keyData, EllipticCurve curve, ) async { - final impl = - await webCryptImpl.ecdhPrivateKey.importPkcs8Key(keyData, curve); + final impl = await webCryptImpl.ecdhPrivateKey.importPkcs8Key( + keyData, + curve, + ); return EcdhPrivateKey._(impl); } @@ -187,8 +189,8 @@ final class EcdhPrivateKey { static Future> generateKey( EllipticCurve curve, ) async { - final (privateKeyImpl, publicKeyImpl) = - await webCryptImpl.ecdhPrivateKey.generateKey(curve); + final (privateKeyImpl, publicKeyImpl) = await webCryptImpl.ecdhPrivateKey + .generateKey(curve); final privateKey = EcdhPrivateKey(privateKeyImpl); final publicKey = EcdhPublicKey(publicKeyImpl); diff --git a/lib/src/webcrypto/webcrypto.ecdsa.dart b/lib/src/webcrypto/webcrypto.ecdsa.dart index c5b09075..98c03b09 100644 --- a/lib/src/webcrypto/webcrypto.ecdsa.dart +++ b/lib/src/webcrypto/webcrypto.ecdsa.dart @@ -27,8 +27,10 @@ final class EcdsaPrivateKey { List keyData, EllipticCurve curve, ) async { - final impl = - await webCryptImpl.ecdsaPrivateKey.importPkcs8Key(keyData, curve); + final impl = await webCryptImpl.ecdsaPrivateKey.importPkcs8Key( + keyData, + curve, + ); return EcdsaPrivateKey._(impl); } @@ -36,16 +38,18 @@ final class EcdsaPrivateKey { Map jwk, EllipticCurve curve, ) async { - final impl = - await webCryptImpl.ecdsaPrivateKey.importJsonWebKey(jwk, curve); + final impl = await webCryptImpl.ecdsaPrivateKey.importJsonWebKey( + jwk, + curve, + ); return EcdsaPrivateKey._(impl); } static Future> generateKey( EllipticCurve curve, ) async { - final (privateKeyImpl, publicKeyImpl) = - await webCryptImpl.ecdsaPrivateKey.generateKey(curve); + final (privateKeyImpl, publicKeyImpl) = await webCryptImpl.ecdsaPrivateKey + .generateKey(curve); final privateKey = EcdsaPrivateKey(privateKeyImpl); final publicKey = EcdsaPublicKey(publicKeyImpl); @@ -90,8 +94,10 @@ final class EcdsaPublicKey { List keyData, EllipticCurve curve, ) async { - final impl = - await webCryptImpl.ecdsaPublicKey.importSpkiKey(keyData, curve); + final impl = await webCryptImpl.ecdsaPublicKey.importSpkiKey( + keyData, + curve, + ); return EcdsaPublicKey._(impl); } @@ -103,19 +109,14 @@ final class EcdsaPublicKey { return EcdsaPublicKey._(impl); } - Future verifyBytes( - List signature, - List data, - Hash hash, - ) => + Future verifyBytes(List signature, List data, Hash hash) => _impl.verifyBytes(signature, data, hash._impl); Future verifyStream( List signature, Stream> data, Hash hash, - ) => - _impl.verifyStream(signature, data, hash._impl); + ) => _impl.verifyStream(signature, data, hash._impl); /// TODO: Document this being X9.62 format Future exportRawKey() => _impl.exportRawKey(); diff --git a/lib/src/webcrypto/webcrypto.hkdf.dart b/lib/src/webcrypto/webcrypto.hkdf.dart index b5b26361..8dd23049 100644 --- a/lib/src/webcrypto/webcrypto.hkdf.dart +++ b/lib/src/webcrypto/webcrypto.hkdf.dart @@ -91,6 +91,5 @@ final class HkdfSecretKey { Hash hash, List salt, List info, - ) => - _impl.deriveBits(length, hash._impl, salt, info); + ) => _impl.deriveBits(length, hash._impl, salt, info); } diff --git a/lib/src/webcrypto/webcrypto.hmac.dart b/lib/src/webcrypto/webcrypto.hmac.dart index 66e698a8..a7e38cb5 100644 --- a/lib/src/webcrypto/webcrypto.hmac.dart +++ b/lib/src/webcrypto/webcrypto.hmac.dart @@ -82,7 +82,10 @@ final class HmacSecretKey { // https://www.w3.org/TR/WebCryptoAPI/#hmac-operations if (length != null && length > keyData.length * 8) { throw ArgumentError.value( - length, 'length', 'must be less than number of bits in keyData'); + length, + 'length', + 'must be less than number of bits in keyData', + ); } if (length != null && length <= (keyData.length - 1) * 8) { throw ArgumentError.value( @@ -172,8 +175,10 @@ final class HmacSecretKey { ); }*/ - final impl = - await webCryptImpl.hmacSecretKey.importJsonWebKey(jwk, hash._impl); + final impl = await webCryptImpl.hmacSecretKey.importJsonWebKey( + jwk, + hash._impl, + ); return HmacSecretKey._(impl); } @@ -196,8 +201,10 @@ final class HmacSecretKey { throw ArgumentError.value(length, 'length', 'must be positive'); } - final impl = await webCryptImpl.hmacSecretKey - .generateKey(hash._impl, length: length); + final impl = await webCryptImpl.hmacSecretKey.generateKey( + hash._impl, + length: length, + ); return HmacSecretKey._(impl); } diff --git a/lib/src/webcrypto/webcrypto.pbkdf2.dart b/lib/src/webcrypto/webcrypto.pbkdf2.dart index b335ffd5..f639ffef 100644 --- a/lib/src/webcrypto/webcrypto.pbkdf2.dart +++ b/lib/src/webcrypto/webcrypto.pbkdf2.dart @@ -93,6 +93,5 @@ final class Pbkdf2SecretKey { Hash hash, List salt, int iterations, - ) => - _impl.deriveBits(length, hash._impl, salt, iterations); + ) => _impl.deriveBits(length, hash._impl, salt, iterations); } diff --git a/lib/src/webcrypto/webcrypto.random.dart b/lib/src/webcrypto/webcrypto.random.dart index 57a4d86b..df21056e 100644 --- a/lib/src/webcrypto/webcrypto.random.dart +++ b/lib/src/webcrypto/webcrypto.random.dart @@ -42,8 +42,11 @@ void fillRandomBytes( // This limitation is given in the Web Cryptography Specification, see: // https://www.w3.org/TR/WebCryptoAPI/#Crypto-method-getRandomValues if (destination.lengthInBytes > 65536) { - throw ArgumentError.value(destination, 'destination', - 'array of more than 65536 bytes is not allowed'); + throw ArgumentError.value( + destination, + 'destination', + 'array of more than 65536 bytes is not allowed', + ); } webCryptImpl.random.fillRandomBytes(destination); diff --git a/lib/src/webcrypto/webcrypto.rsaoaep.dart b/lib/src/webcrypto/webcrypto.rsaoaep.dart index 5ce53a6a..94de34f6 100644 --- a/lib/src/webcrypto/webcrypto.rsaoaep.dart +++ b/lib/src/webcrypto/webcrypto.rsaoaep.dart @@ -118,8 +118,10 @@ final class RsaOaepPrivateKey { List keyData, Hash hash, ) async { - final impl = await webCryptImpl.rsaOaepPrivateKey - .importPkcs8Key(keyData, hash._impl); + final impl = await webCryptImpl.rsaOaepPrivateKey.importPkcs8Key( + keyData, + hash._impl, + ); return RsaOaepPrivateKey._(impl); } @@ -167,8 +169,10 @@ final class RsaOaepPrivateKey { Map jwk, Hash hash, ) async { - final impl = - await webCryptImpl.rsaOaepPrivateKey.importJsonWebKey(jwk, hash._impl); + final impl = await webCryptImpl.rsaOaepPrivateKey.importJsonWebKey( + jwk, + hash._impl, + ); return RsaOaepPrivateKey._(impl); } @@ -400,8 +404,10 @@ final class RsaOaepPublicKey { List keyData, Hash hash, ) async { - final impl = - await webCryptImpl.rsaOaepPublicKey.importSpkiKey(keyData, hash._impl); + final impl = await webCryptImpl.rsaOaepPublicKey.importSpkiKey( + keyData, + hash._impl, + ); return RsaOaepPublicKey._(impl); } @@ -443,8 +449,10 @@ final class RsaOaepPublicKey { Map jwk, Hash hash, ) async { - final impl = - await webCryptImpl.rsaOaepPublicKey.importJsonWebKey(jwk, hash._impl); + final impl = await webCryptImpl.rsaOaepPublicKey.importJsonWebKey( + jwk, + hash._impl, + ); return RsaOaepPublicKey._(impl); } diff --git a/lib/src/webcrypto/webcrypto.rsapss.dart b/lib/src/webcrypto/webcrypto.rsapss.dart index b4e2b8d7..33aa2c54 100644 --- a/lib/src/webcrypto/webcrypto.rsapss.dart +++ b/lib/src/webcrypto/webcrypto.rsapss.dart @@ -110,8 +110,10 @@ final class RsaPssPrivateKey { List keyData, Hash hash, ) async { - final impl = - await webCryptImpl.rsaPssPrivateKey.importPkcs8Key(keyData, hash._impl); + final impl = await webCryptImpl.rsaPssPrivateKey.importPkcs8Key( + keyData, + hash._impl, + ); return RsaPssPrivateKey._(impl); } @@ -159,8 +161,10 @@ final class RsaPssPrivateKey { Map jwk, Hash hash, ) async { - final impl = - await webCryptImpl.rsaPssPrivateKey.importJsonWebKey(jwk, hash._impl); + final impl = await webCryptImpl.rsaPssPrivateKey.importJsonWebKey( + jwk, + hash._impl, + ); return RsaPssPrivateKey._(impl); } @@ -476,8 +480,10 @@ final class RsaPssPublicKey { List keyData, Hash hash, ) async { - final impl = - await webCryptImpl.rsaPssPublicKey.importSpkiKey(keyData, hash._impl); + final impl = await webCryptImpl.rsaPssPublicKey.importSpkiKey( + keyData, + hash._impl, + ); return RsaPssPublicKey._(impl); } @@ -519,8 +525,10 @@ final class RsaPssPublicKey { Map jwk, Hash hash, ) async { - final impl = - await webCryptImpl.rsaPssPublicKey.importJsonWebKey(jwk, hash._impl); + final impl = await webCryptImpl.rsaPssPublicKey.importJsonWebKey( + jwk, + hash._impl, + ); return RsaPssPublicKey._(impl); } @@ -569,8 +577,7 @@ final class RsaPssPublicKey { List signature, List data, int saltLength, - ) => - _impl.verifyBytes(signature, data, saltLength); + ) => _impl.verifyBytes(signature, data, saltLength); /// Verify [signature] of [data] using this RSASSA-PSS public key. /// @@ -616,8 +623,7 @@ final class RsaPssPublicKey { List signature, Stream> data, int saltLength, - ) => - _impl.verifyStream(signature, data, saltLength); + ) => _impl.verifyStream(signature, data, saltLength); /// Export RSASSA-PSS public key in SPKI format. /// diff --git a/lib/src/webcrypto/webcrypto.rsassapkcs1v15.dart b/lib/src/webcrypto/webcrypto.rsassapkcs1v15.dart index 1a7a98eb..dc695f36 100644 --- a/lib/src/webcrypto/webcrypto.rsassapkcs1v15.dart +++ b/lib/src/webcrypto/webcrypto.rsassapkcs1v15.dart @@ -106,8 +106,10 @@ final class RsassaPkcs1V15PrivateKey { List keyData, Hash hash, ) async { - final impl = await webCryptImpl.rsaSsaPkcs1v15PrivateKey - .importPkcs8Key(keyData, hash._impl); + final impl = await webCryptImpl.rsaSsaPkcs1v15PrivateKey.importPkcs8Key( + keyData, + hash._impl, + ); return RsassaPkcs1V15PrivateKey._(impl); } @@ -167,8 +169,10 @@ final class RsassaPkcs1V15PrivateKey { Map jwk, Hash hash, ) async { - final impl = await webCryptImpl.rsaSsaPkcs1v15PrivateKey - .importJsonWebKey(jwk, hash._impl); + final impl = await webCryptImpl.rsaSsaPkcs1v15PrivateKey.importJsonWebKey( + jwk, + hash._impl, + ); return RsassaPkcs1V15PrivateKey._(impl); } @@ -244,17 +248,10 @@ final class RsassaPkcs1V15PrivateKey { /// } /// ``` static Future> - generateKey( - int modulusLength, - BigInt publicExponent, - Hash hash, - ) async { - final (privateKeyImpl, publicKeyImpl) = - await webCryptImpl.rsaSsaPkcs1v15PrivateKey.generateKey( - modulusLength, - publicExponent, - hash._impl, - ); + generateKey(int modulusLength, BigInt publicExponent, Hash hash) async { + final (privateKeyImpl, publicKeyImpl) = await webCryptImpl + .rsaSsaPkcs1v15PrivateKey + .generateKey(modulusLength, publicExponent, hash._impl); final privateKey = RsassaPkcs1V15PrivateKey(privateKeyImpl); final publicKey = RsassaPkcs1V15PublicKey(publicKeyImpl); @@ -457,8 +454,10 @@ final class RsassaPkcs1V15PublicKey { List keyData, Hash hash, ) async { - final impl = await webCryptImpl.rsaSsaPkcs1v15PublicKey - .importSpkiKey(keyData, hash._impl); + final impl = await webCryptImpl.rsaSsaPkcs1v15PublicKey.importSpkiKey( + keyData, + hash._impl, + ); return RsassaPkcs1V15PublicKey._(impl); } @@ -500,8 +499,10 @@ final class RsassaPkcs1V15PublicKey { Map jwk, Hash hash, ) async { - final impl = await webCryptImpl.rsaSsaPkcs1v15PublicKey - .importJsonWebKey(jwk, hash._impl); + final impl = await webCryptImpl.rsaSsaPkcs1v15PublicKey.importJsonWebKey( + jwk, + hash._impl, + ); return RsassaPkcs1V15PublicKey._(impl); } diff --git a/pubspec.yaml b/pubspec.yaml index 7cd3c66f..7859a5d6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -18,8 +18,8 @@ description: Cross-platform implementation of Web Cryptography APIs for Flutter. repository: https://github.com/google/webcrypto.dart environment: - sdk: ^3.3.0 - flutter: '>=3.19.0' + sdk: ^3.10.0 + flutter: '>=3.24.0' dependencies: ffi: ^2.0.0 diff --git a/test/crypto_subtle_test.dart b/test/crypto_subtle_test.dart index a0e3b367..3c114a08 100644 --- a/test/crypto_subtle_test.dart +++ b/test/crypto_subtle_test.dart @@ -39,15 +39,9 @@ void main() { Int32List(16 * 1024), ]; for (final data in list) { - expect( - data.every((e) => e == 0), - isTrue, - ); + expect(data.every((e) => e == 0), isTrue); fillRandomBytes(data); - expect( - data.any((e) => e != 0), - isTrue, - ); + expect(data.any((e) => e != 0), isTrue); } }); @@ -67,37 +61,26 @@ void main() { throwsA( // dart2js throws ArgumentError // dart2wasm throws UnknownError - anyOf( - isA(), - isA(), - ), + anyOf(isA(), isA()), ), ); } }); test('not supported type', () { - final list = [ - Float32List(32), - Float64List(32), - ]; + final list = [Float32List(32), Float64List(32)]; for (final data in list) { expect( // TODO: Test subtle.window.crypto.getRandomValues(values); instead () => fillRandomBytes(data), - throwsA( - isA(), - ), + throwsA(isA()), ); } }); test('list that is supported depending on the environment', () { if (kIsWasm) { - final list = [ - Uint64List(32), - Int64List(32), - ]; + final list = [Uint64List(32), Int64List(32)]; for (final data in list) { expect( @@ -111,10 +94,7 @@ void main() { } } else { try { - final _ = [ - Uint64List(32), - Int64List(32), - ]; + final _ = [Uint64List(32), Int64List(32)]; fail('dart2js does not reach this line'); } catch (e) { // dart2js throws UnsupportedError in list creation @@ -127,29 +107,17 @@ void main() { group('crypto', () { test('getRandomValues: success', () { final data = Uint8List(16 * 1024); - expect( - data.every((e) => e == 0), - isTrue, - ); + expect(data.every((e) => e == 0), isTrue); final values = data.toJS; subtle.window.crypto.getRandomValues(values); if (kIsWasm) { // In dart2wasm, the value is not reflected in Uint8List. - expect( - data.every((e) => e == 0), - isTrue, - ); + expect(data.every((e) => e == 0), isTrue); } else { // In dart2js, the value is reflected in Uint8List. - expect( - data.every((e) => e == 0), - isFalse, - ); + expect(data.every((e) => e == 0), isFalse); } - expect( - values.toDart.any((e) => e != 0), - isTrue, - ); + expect(values.toDart.any((e) => e != 0), isTrue); }); test('getRandomValues: too long', () { @@ -157,16 +125,10 @@ void main() { subtle.window.crypto.getRandomValues(Uint8List(1000000).toJS); } on subtle.JSDomException catch (e) { // dart2js throws QuotaExceededError - expect( - e.name, - 'QuotaExceededError', - ); + expect(e.name, 'QuotaExceededError'); } on Error catch (e) { // dart2wasm throws JavaScriptError - expect( - e.toString(), - 'JavaScriptError', - ); + expect(e.toString(), 'JavaScriptError'); } }); @@ -175,16 +137,10 @@ void main() { subtle.window.crypto.getRandomValues(Float32List(32).toJS); } on subtle.JSDomException catch (e) { // dart2js throws TypeMismatchError - expect( - e.name, - 'TypeMismatchError', - ); + expect(e.name, 'TypeMismatchError'); } on Error catch (e) { // dart2wasm throws JavaScriptError - expect( - e.toString(), - 'JavaScriptError', - ); + expect(e.toString(), 'JavaScriptError'); } }); }); @@ -194,25 +150,14 @@ void main() { expect( await subtle.window.crypto.subtle .generateCryptoKey( - const subtle.Algorithm( - name: 'AES-GCM', - length: 256, - ).toJS, + const subtle.Algorithm(name: 'AES-GCM', length: 256).toJS, false, ['encrypt', 'decrypt'].toJS, ) .toDart, isA() - .having( - (key) => key.type, - 'type', - 'secret', - ) - .having( - (key) => key.extractable, - 'extractable', - false, - ) + .having((key) => key.type, 'type', 'secret') + .having((key) => key.extractable, 'extractable', false) .having( (key) => key.usages.toDartList, 'usages', @@ -225,10 +170,7 @@ void main() { expect( () async => await subtle.window.crypto.subtle .generateCryptoKey( - const subtle.Algorithm( - name: 'AES-GCM', - length: 256, - ).toJS, + const subtle.Algorithm(name: 'AES-GCM', length: 256).toJS, false, [].toJS, ) @@ -279,11 +221,7 @@ void main() { ) .toDart, isA() - .having( - (key) => key.publicKey.type, - 'publicKey.type', - 'public', - ) + .having((key) => key.publicKey.type, 'publicKey.type', 'public') .having( (key) => key.publicKey.extractable, 'publicKey.extractable', @@ -294,11 +232,7 @@ void main() { 'publicKey.usages', ['encrypt'], ) - .having( - (key) => key.privateKey.type, - 'privateKey.type', - 'private', - ) + .having((key) => key.privateKey.type, 'privateKey.type', 'private') .having( (key) => key.privateKey.extractable, 'privateKey.extractable', @@ -327,11 +261,7 @@ void main() { ) .toDart, isA() - .having( - (key) => key.publicKey.type, - 'publicKey.type', - 'public', - ) + .having((key) => key.publicKey.type, 'publicKey.type', 'public') .having( (key) => key.publicKey.extractable, 'publicKey.extractable', @@ -342,11 +272,7 @@ void main() { 'publicKey.usages', ['encrypt'], ) - .having( - (key) => key.privateKey.type, - 'privateKey.type', - 'private', - ) + .having((key) => key.privateKey.type, 'privateKey.type', 'private') .having( (key) => key.privateKey.extractable, 'privateKey.extractable', diff --git a/tool/generate_symbols_table.dart b/tool/generate_symbols_table.dart index 6e01ae6d..735f0151 100644 --- a/tool/generate_symbols_table.dart +++ b/tool/generate_symbols_table.dart @@ -35,81 +35,85 @@ Future main() async { // Generate src/symbols.generated.c print(' - Writing src/symbols.generated.c'); - await File.fromUri(rootUri.resolve('src/symbols.generated.c')).writeAsString([ - '/*', - ' * Copyright 2020 Google LLC', - ' *', - ' * Licensed under the Apache License, Version 2.0 (the "License");', - ' * you may not use this file except in compliance with the License.', - ' * You may obtain a copy of the License at', - ' *', - ' * http://www.apache.org/licenses/LICENSE-2.0', - ' *', - ' * Unless required by applicable law or agreed to in writing, software', - ' * distributed under the License is distributed on an "AS IS" BASIS,', - ' * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.', - ' * See the License for the specific language governing permissions and', - ' * limitations under the License.', - ' */', - '', - '// **GENERATED FILE DO NOT MODIFY**', - '//', - '// This file is generated from `src/symbols.yaml` using:', - '// `tool/generate_symbols_table.dart`', - '', - '#include "symbols.h"', - '', - 'void* _webcrypto_symbol_table[] = {', - symbols.map((s) => ' (void*)&$s,').join('\n'), - '};', - '' - ].join('\n')); + await File.fromUri(rootUri.resolve('src/symbols.generated.c')).writeAsString( + [ + '/*', + ' * Copyright 2020 Google LLC', + ' *', + ' * Licensed under the Apache License, Version 2.0 (the "License");', + ' * you may not use this file except in compliance with the License.', + ' * You may obtain a copy of the License at', + ' *', + ' * http://www.apache.org/licenses/LICENSE-2.0', + ' *', + ' * Unless required by applicable law or agreed to in writing, software', + ' * distributed under the License is distributed on an "AS IS" BASIS,', + ' * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.', + ' * See the License for the specific language governing permissions and', + ' * limitations under the License.', + ' */', + '', + '// **GENERATED FILE DO NOT MODIFY**', + '//', + '// This file is generated from `src/symbols.yaml` using:', + '// `tool/generate_symbols_table.dart`', + '', + '#include "symbols.h"', + '', + 'void* _webcrypto_symbol_table[] = {', + symbols.map((s) => ' (void*)&$s,').join('\n'), + '};', + '', + ].join('\n'), + ); // Generate lib/src/boringssl/lookup/symbols.generated.dart print(' - Writing lib/src/boringssl/lookup/symbols.generated.dart'); const generatedDart = 'lib/src/boringssl/lookup/symbols.generated.dart'; - await File.fromUri(rootUri.resolve(generatedDart)).writeAsString([ - '// Copyright 2020 Google LLC', - '//', - '// Licensed under the Apache License, Version 2.0 (the "License");', - '// you may not use this file except in compliance with the License.', - '// You may obtain a copy of the License at', - '//', - '// http://www.apache.org/licenses/LICENSE-2.0', - '//', - '// Unless required by applicable law or agreed to in writing, software', - '// distributed under the License is distributed on an "AS IS" BASIS,', - '// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.', - '// See the License for the specific language governing permissions and', - '// limitations under the License.', - '', - '// ignore_for_file: constant_identifier_names', - '', - '/// **GENERATED FILE DO NOT MODIFY**', - '///', - '/// This file is generated from `src/symbols.yaml` using:', - '/// `tool/generate_symbols_table.dart`', - 'library symbols.generated;', - '', - '/// BoringSSL symbols used in `package:webcrypto`.', - 'enum Sym {', - symbols.map((s) => ' $s,').join('\n'), - '}', - '', - 'const _SymName = [', - symbols.map((s) => ' \'$s\',').join('\n'), - '];', - '', - 'extension SymName on Sym {', - ' /// Get name of symbol in `libcrypto.so` from BoringSSL.', - ' String get name {', - ' return _SymName[index];', - ' }', - '}', - '', - 'Sym symFromString(String string) => Sym.values[_SymName.indexOf(string)];', - '', - ].join('\n')); + await File.fromUri(rootUri.resolve(generatedDart)).writeAsString( + [ + '// Copyright 2020 Google LLC', + '//', + '// Licensed under the Apache License, Version 2.0 (the "License");', + '// you may not use this file except in compliance with the License.', + '// You may obtain a copy of the License at', + '//', + '// http://www.apache.org/licenses/LICENSE-2.0', + '//', + '// Unless required by applicable law or agreed to in writing, software', + '// distributed under the License is distributed on an "AS IS" BASIS,', + '// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.', + '// See the License for the specific language governing permissions and', + '// limitations under the License.', + '', + '// ignore_for_file: constant_identifier_names', + '', + '/// **GENERATED FILE DO NOT MODIFY**', + '///', + '/// This file is generated from `src/symbols.yaml` using:', + '/// `tool/generate_symbols_table.dart`', + 'library symbols.generated;', + '', + '/// BoringSSL symbols used in `package:webcrypto`.', + 'enum Sym {', + symbols.map((s) => ' $s,').join('\n'), + '}', + '', + 'const _SymName = [', + symbols.map((s) => ' \'$s\',').join('\n'), + '];', + '', + 'extension SymName on Sym {', + ' /// Get name of symbol in `libcrypto.so` from BoringSSL.', + ' String get name {', + ' return _SymName[index];', + ' }', + '}', + '', + 'Sym symFromString(String string) => Sym.values[_SymName.indexOf(string)];', + '', + ].join('\n'), + ); print('Done'); }