From 4518b1547032f0028e32541c221186137033691c Mon Sep 17 00:00:00 2001 From: Timo von Holtz Date: Sat, 27 Mar 2021 13:02:09 +0200 Subject: [PATCH 1/2] Upgrade packages for null-safety --- example/bloc_encryption/pubspec.lock | 58 ++++++++++++++-------------- example/bloc_encryption/pubspec.yaml | 10 ++--- pubspec.lock | 42 ++++++++++---------- pubspec.yaml | 4 +- 4 files changed, 57 insertions(+), 57 deletions(-) diff --git a/example/bloc_encryption/pubspec.lock b/example/bloc_encryption/pubspec.lock index 2d490bc..7216bab 100644 --- a/example/bloc_encryption/pubspec.lock +++ b/example/bloc_encryption/pubspec.lock @@ -7,84 +7,84 @@ packages: name: asn1lib url: "https://pub.dartlang.org" source: hosted - version: "0.8.1" + version: "1.0.0" async: dependency: transitive description: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.5.0-nullsafety.1" + version: "2.5.0" bloc: dependency: transitive description: name: bloc url: "https://pub.dartlang.org" source: hosted - version: "6.1.0" + version: "7.0.0" boolean_selector: dependency: transitive description: name: boolean_selector url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.1" + version: "2.1.0" characters: dependency: transitive description: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.3" + version: "1.1.0" charcode: dependency: transitive description: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.1" + version: "1.2.0" clock: dependency: transitive description: name: clock url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.1" + version: "1.1.0" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.15.0-nullsafety.3" + version: "1.15.0" cupertino_icons: dependency: "direct main" description: name: cupertino_icons url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.0.2" equatable: dependency: "direct main" description: name: equatable url: "https://pub.dartlang.org" source: hosted - version: "1.2.5" + version: "2.0.0" fading_edge_scrollview: dependency: transitive description: name: fading_edge_scrollview url: "https://pub.dartlang.org" source: hosted - version: "1.1.4" + version: "2.0.0" fake_async: dependency: transitive description: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.1" + version: "1.2.0" flutter: dependency: "direct main" description: flutter @@ -96,7 +96,7 @@ packages: name: flutter_bloc url: "https://pub.dartlang.org" source: hosted - version: "6.0.6" + version: "7.0.0" flutter_test: dependency: "direct dev" description: flutter @@ -108,49 +108,49 @@ packages: name: marquee url: "https://pub.dartlang.org" source: hosted - version: "1.6.1" + version: "2.0.0" matcher: dependency: transitive description: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.10-nullsafety.1" + version: "0.12.10" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.3.0-nullsafety.3" + version: "1.3.0" nested: dependency: transitive description: name: nested url: "https://pub.dartlang.org" source: hosted - version: "0.0.4" + version: "1.0.0" path: dependency: transitive description: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.8.0-nullsafety.1" + version: "1.8.0" pointycastle: dependency: "direct main" description: name: pointycastle url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "3.0.1" provider: dependency: transitive description: name: provider url: "https://pub.dartlang.org" source: hosted - version: "4.3.2+2" + version: "5.0.0" rsa_encrypt: dependency: "direct main" description: @@ -169,56 +169,56 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.0-nullsafety.2" + version: "1.8.0" stack_trace: dependency: transitive description: name: stack_trace url: "https://pub.dartlang.org" source: hosted - version: "1.10.0-nullsafety.1" + version: "1.10.0" stream_channel: dependency: transitive description: name: stream_channel url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.1" + version: "2.1.0" string_scanner: dependency: transitive description: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.1" + version: "1.1.0" term_glyph: dependency: transitive description: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.1" + version: "1.2.0" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.19-nullsafety.2" + version: "0.2.19" typed_data: dependency: transitive description: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.3.0-nullsafety.3" + version: "1.3.0" vector_math: dependency: transitive description: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.3" + version: "2.1.0" sdks: - dart: ">=2.10.0-110 <2.11.0" + dart: ">=2.12.0 <3.0.0" flutter: ">=1.16.0" diff --git a/example/bloc_encryption/pubspec.yaml b/example/bloc_encryption/pubspec.yaml index d901288..fb19ce1 100644 --- a/example/bloc_encryption/pubspec.yaml +++ b/example/bloc_encryption/pubspec.yaml @@ -25,11 +25,11 @@ dependencies: sdk: flutter rsa_encrypt: path: ../../ - cupertino_icons: ^1.0.0 - equatable: ^1.2.5 - flutter_bloc: ^6.0.6 - marquee: ^1.6.1 - pointycastle: ^2.0.0 + cupertino_icons: ^1.0.2 + equatable: ^2.0.0 + flutter_bloc: ^7.0.0 + marquee: ^2.0.0 + pointycastle: ^3.0.1 dev_dependencies: flutter_test: diff --git a/pubspec.lock b/pubspec.lock index 13c63ca..452a9b5 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -7,56 +7,56 @@ packages: name: asn1lib url: "https://pub.dartlang.org" source: hosted - version: "0.8.1" + version: "1.0.0" async: dependency: transitive description: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.5.0-nullsafety.1" + version: "2.5.0" boolean_selector: dependency: transitive description: name: boolean_selector url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.1" + version: "2.1.0" characters: dependency: transitive description: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.3" + version: "1.1.0" charcode: dependency: transitive description: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.1" + version: "1.2.0" clock: dependency: transitive description: name: clock url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.1" + version: "1.1.0" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.15.0-nullsafety.3" + version: "1.15.0" fake_async: dependency: transitive description: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.1" + version: "1.2.0" flutter: dependency: "direct main" description: flutter @@ -73,28 +73,28 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.10-nullsafety.1" + version: "0.12.10" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.3.0-nullsafety.3" + version: "1.3.0" path: dependency: transitive description: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.8.0-nullsafety.1" + version: "1.8.0" pointycastle: dependency: "direct main" description: name: pointycastle url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "3.0.1" sky_engine: dependency: transitive description: flutter @@ -106,55 +106,55 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.0-nullsafety.2" + version: "1.8.0" stack_trace: dependency: transitive description: name: stack_trace url: "https://pub.dartlang.org" source: hosted - version: "1.10.0-nullsafety.1" + version: "1.10.0" stream_channel: dependency: transitive description: name: stream_channel url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.1" + version: "2.1.0" string_scanner: dependency: transitive description: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.1" + version: "1.1.0" term_glyph: dependency: transitive description: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.1" + version: "1.2.0" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.19-nullsafety.2" + version: "0.2.19" typed_data: dependency: transitive description: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.3.0-nullsafety.3" + version: "1.3.0" vector_math: dependency: transitive description: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.3" + version: "2.1.0" sdks: - dart: ">=2.10.0-110 <2.11.0" + dart: ">=2.12.0 <3.0.0" diff --git a/pubspec.yaml b/pubspec.yaml index ce97088..e22c4d3 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -11,8 +11,8 @@ environment: dependencies: flutter: sdk: flutter - asn1lib: ^0.8.1 - pointycastle: ^2.0.0 + asn1lib: ^1.0.0 + pointycastle: ^3.0.1 dev_dependencies: flutter_test: From fa0f2848b3d76d82547a6d12878d7b28c66eaeaf Mon Sep 17 00:00:00 2001 From: Timo von Holtz Date: Sat, 27 Mar 2021 13:13:12 +0200 Subject: [PATCH 2/2] Null-safety migration --- .../key_manager_bloc/keysmanager_bloc.dart | 4 +-- .../screen/encryption_screen.dart | 6 ++-- .../lib/presentation/screen/home_screen.dart | 2 +- example/bloc_encryption/pubspec.yaml | 2 +- lib/rsa_encrypt.dart | 32 +++++++++---------- pubspec.yaml | 2 +- 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/example/bloc_encryption/lib/business_logic/key_manager_bloc/keysmanager_bloc.dart b/example/bloc_encryption/lib/business_logic/key_manager_bloc/keysmanager_bloc.dart index 4b91d27..1c13458 100644 --- a/example/bloc_encryption/lib/business_logic/key_manager_bloc/keysmanager_bloc.dart +++ b/example/bloc_encryption/lib/business_logic/key_manager_bloc/keysmanager_bloc.dart @@ -28,14 +28,14 @@ class KeysManagerBloc extends Bloc { Stream _mapShowPrivateKeyToState( ShowPrivateKey event) async* { final String _privateKeyStr = _rsaKeyHelper - .encodePrivateKeyToPemPKCS1(event._asymmetricKeyPair.privateKey); + .encodePrivateKeyToPemPKCS1(event._asymmetricKeyPair.privateKey as RSAPrivateKey); yield ShowingPrivateKey(_privateKeyStr); } Stream _mapShowPublicKeyToState( ShowPublicKey event) async* { final String _publicKeyStr = _rsaKeyHelper - .encodePublicKeyToPemPKCS1(event._asymmetricKeyPair.publicKey); + .encodePublicKeyToPemPKCS1(event._asymmetricKeyPair.publicKey as RSAPublicKey); yield ShowingPublicKey(_publicKeyStr); } } diff --git a/example/bloc_encryption/lib/presentation/screen/encryption_screen.dart b/example/bloc_encryption/lib/presentation/screen/encryption_screen.dart index e214cb2..420cc8e 100644 --- a/example/bloc_encryption/lib/presentation/screen/encryption_screen.dart +++ b/example/bloc_encryption/lib/presentation/screen/encryption_screen.dart @@ -7,7 +7,7 @@ import 'package:pointycastle/api.dart'; class EncryptionScreen extends StatefulWidget { final AsymmetricKeyPair _asymmetricKeyPair; const EncryptionScreen( - {Key key, @required AsymmetricKeyPair asymmetricKeyPair}) + {Key? key, required AsymmetricKeyPair asymmetricKeyPair}) : assert(asymmetricKeyPair != null), _asymmetricKeyPair = asymmetricKeyPair, super(key: key); @@ -133,7 +133,7 @@ class _EncryptionScreenState extends State { onPressed: () { _encryptionBloc.add( EncryptString(_textController.text.trim(), - widget._asymmetricKeyPair.publicKey), + widget._asymmetricKeyPair.publicKey as RSAPublicKey), ); }, ), @@ -182,7 +182,7 @@ class _EncryptionScreenState extends State { onPressed: () { _encryptionBloc.add( DecryptString( - encryptedString, widget._asymmetricKeyPair.privateKey), + encryptedString, widget._asymmetricKeyPair.privateKey as RSAPrivateKey), ); }, ), diff --git a/example/bloc_encryption/lib/presentation/screen/home_screen.dart b/example/bloc_encryption/lib/presentation/screen/home_screen.dart index a6e7d09..b679a3c 100644 --- a/example/bloc_encryption/lib/presentation/screen/home_screen.dart +++ b/example/bloc_encryption/lib/presentation/screen/home_screen.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; class HomeScreen extends StatelessWidget { - const HomeScreen({Key key}) : super(key: key); + const HomeScreen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { diff --git a/example/bloc_encryption/pubspec.yaml b/example/bloc_encryption/pubspec.yaml index fb19ce1..2c83abf 100644 --- a/example/bloc_encryption/pubspec.yaml +++ b/example/bloc_encryption/pubspec.yaml @@ -18,7 +18,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ">=2.7.0 <3.0.0" + sdk: '>=2.12.0 <3.0.0' dependencies: flutter: diff --git a/lib/rsa_encrypt.dart b/lib/rsa_encrypt.dart index 05303d7..2ca7a5b 100644 --- a/lib/rsa_encrypt.dart +++ b/lib/rsa_encrypt.dart @@ -55,7 +55,7 @@ class RsaKeyHelper { /// parameters ANY DEFINED BY algorithm OPTIONAL /// } RSAPublicKey parsePublicKeyFromPem(pemString) { - List publicKeyDER = decodePEM(pemString); + final Uint8List publicKeyDER = decodePEM(pemString); var asn1Parser = new ASN1Parser(publicKeyDER); var topLevelSeq = asn1Parser.nextObject() as ASN1Sequence; @@ -67,8 +67,8 @@ class RsaKeyHelper { } else { var publicKeyBitString = topLevelSeq.elements[1]; - var publicKeyAsn = new ASN1Parser(publicKeyBitString.contentBytes()); - ASN1Sequence publicKeySeq = publicKeyAsn.nextObject(); + var publicKeyAsn = new ASN1Parser(publicKeyBitString.contentBytes()!); + ASN1Sequence publicKeySeq = publicKeyAsn.nextObject() as ASN1Sequence; modulus = publicKeySeq.elements[0] as ASN1Integer; exponent = publicKeySeq.elements[1] as ASN1Integer; } @@ -101,7 +101,7 @@ class RsaKeyHelper { /// Given a base64 encoded PEM [String] with correct headers and footers, return a /// [RSAPrivateKey] RSAPrivateKey parsePrivateKeyFromPem(pemString) { - List privateKeyDER = decodePEM(pemString); + final Uint8List privateKeyDER = decodePEM(pemString); var asn1Parser = new ASN1Parser(privateKeyDER); var topLevelSeq = asn1Parser.nextObject() as ASN1Sequence; @@ -110,7 +110,7 @@ class RsaKeyHelper { if (topLevelSeq.elements.length == 3) { var privateKey = topLevelSeq.elements[2]; - asn1Parser = new ASN1Parser(privateKey.contentBytes()); + asn1Parser = new ASN1Parser(privateKey.contentBytes()!); var pkSeq = asn1Parser.nextObject() as ASN1Sequence; modulus = pkSeq.elements[1] as ASN1Integer; @@ -133,7 +133,7 @@ class RsaKeyHelper { return rsaPrivateKey; } - List decodePEM(String pem) { + Uint8List decodePEM(String pem) { return base64.decode(removePemHeaderAndFooter(pem)); } @@ -189,16 +189,16 @@ class RsaKeyHelper { var topLevel = new ASN1Sequence(); var version = ASN1Integer(BigInt.from(0)); - var modulus = ASN1Integer(privateKey.n); - var publicExponent = ASN1Integer(privateKey.exponent); - var privateExponent = ASN1Integer(privateKey.privateExponent); - var p = ASN1Integer(privateKey.p); - var q = ASN1Integer(privateKey.q); - var dP = privateKey.privateExponent % (privateKey.p - BigInt.from(1)); + var modulus = ASN1Integer(privateKey.n!); + var publicExponent = ASN1Integer(privateKey.exponent!); + var privateExponent = ASN1Integer(privateKey.privateExponent!); + var p = ASN1Integer(privateKey.p!); + var q = ASN1Integer(privateKey.q!); + var dP = privateKey.privateExponent! % (privateKey.p! - BigInt.from(1)); var exp1 = ASN1Integer(dP); - var dQ = privateKey.privateExponent % (privateKey.q - BigInt.from(1)); + var dQ = privateKey.privateExponent! % (privateKey.q! - BigInt.from(1)); var exp2 = ASN1Integer(dQ); - var iQ = privateKey.q.modInverse(privateKey.p); + var iQ = privateKey.q!.modInverse(privateKey.p!); var co = ASN1Integer(iQ); topLevel.add(version); @@ -222,8 +222,8 @@ class RsaKeyHelper { String encodePublicKeyToPemPKCS1(RSAPublicKey publicKey) { var topLevel = new ASN1Sequence(); - topLevel.add(ASN1Integer(publicKey.modulus)); - topLevel.add(ASN1Integer(publicKey.exponent)); + topLevel.add(ASN1Integer(publicKey.modulus!)); + topLevel.add(ASN1Integer(publicKey.exponent!)); var dataBase64 = base64.encode(topLevel.encodedBytes); return """-----BEGIN RSA PUBLIC KEY-----\r\n$dataBase64\r\n-----END RSA PUBLIC KEY-----"""; diff --git a/pubspec.yaml b/pubspec.yaml index e22c4d3..250f9e3 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -6,7 +6,7 @@ version: 1.0.5 homepage: https://github.com/AbdelbakiBoukerche/rsa_encrypt environment: - sdk: ">=2.1.0 <3.0.0" + sdk: '>=2.12.0 <3.0.0' dependencies: flutter: