From 5346a4922eb47a48084f56b440f48c438a2b781d Mon Sep 17 00:00:00 2001 From: mitchell Date: Sat, 13 Jul 2019 15:48:32 -0400 Subject: [PATCH] Refactor crypto utils and grpc credentials client --- client/lib/main.dart | 6 ++--- .../repositories/grpc_credentials_client.dart | 6 ++--- client/lib/utils/crypto.dart | 23 ++++++++----------- 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/client/lib/main.dart b/client/lib/main.dart index 4c84a88..89f7c4b 100644 --- a/client/lib/main.dart +++ b/client/lib/main.dart @@ -36,7 +36,7 @@ class Selfpass extends StatelessWidget { title = 'Hosts'; builder = (BuildContext context) => Provider( builder: (BuildContext context) => - GRPCCredentialsClient.cached(config: settings.arguments), + GRPCCredentialsClient.getInstance(config: settings.arguments), child: Home(), ); break; @@ -45,7 +45,7 @@ class Selfpass extends StatelessWidget { title = 'Credentials'; builder = (BuildContext context) => Provider( builder: (BuildContext context) => - GRPCCredentialsClient.cached(), + GRPCCredentialsClient.getInstance(), child: Credentials(settings.arguments), ); break; @@ -54,7 +54,7 @@ class Selfpass extends StatelessWidget { title = 'Credential'; builder = (BuildContext context) => Provider( builder: (BuildContext context) => - GRPCCredentialsClient.cached(), + GRPCCredentialsClient.getInstance(), child: Credential(settings.arguments), ); break; diff --git a/client/lib/repositories/grpc_credentials_client.dart b/client/lib/repositories/grpc_credentials_client.dart index 54206ed..42c3a7b 100644 --- a/client/lib/repositories/grpc_credentials_client.dart +++ b/client/lib/repositories/grpc_credentials_client.dart @@ -11,7 +11,7 @@ import '../types/connection_config.dart'; import '../types/credential.dart'; class GRPCCredentialsClient implements CredentialsRepo { - static GRPCCredentialsClient _cached; + static GRPCCredentialsClient _instance; grpc.CredentialsClient _client; GRPCCredentialsClient(ConnectionConfig config) { @@ -32,8 +32,8 @@ class GRPCCredentialsClient implements CredentialsRepo { )); } - factory GRPCCredentialsClient.cached({ConnectionConfig config}) => - config == null ? _cached : _cached = GRPCCredentialsClient(config); + factory GRPCCredentialsClient.getInstance({ConnectionConfig config}) => + config == null ? _instance : _instance = GRPCCredentialsClient(config); Stream getAllMetadata(String sourceHost) { final request = grpc.SourceHostRequest(); diff --git a/client/lib/utils/crypto.dart b/client/lib/utils/crypto.dart index ad572d6..833503b 100644 --- a/client/lib/utils/crypto.dart +++ b/client/lib/utils/crypto.dart @@ -1,6 +1,5 @@ import 'dart:math'; import 'dart:convert'; -import 'dart:typed_data'; import 'package:crypt/crypt.dart'; import 'package:encrypt/encrypt.dart'; @@ -12,7 +11,7 @@ String hashPassword(String password) { final random = Random.secure(); final saltInts = - List.generate(saltSize, (_) => random.nextInt(saltIntMax)); + List.generate(saltSize, (_) => random.nextInt(saltIntMax)); final salt = base64.encode(saltInts); return Crypt.sha256(password, salt: salt).toString(); @@ -21,20 +20,18 @@ String hashPassword(String password) { bool matchHashedPassword(String hashedPassword, String password) => Crypt(hashedPassword).match(password); -String decryptPassword(String masterpass, privateKey, ciphertext) { - final key = - PBKDF2().generateKey(masterpass, privateKey, pbkdf2Rounds, keySize); +String decryptPassword(String masterpass, privateKey, cipherText) { + final key = PBKDF2().generateKey( + masterpass, privateKey, pbkdf2Rounds, keySize, + ); - var cipherbytes = base64.decode(ciphertext); - final iv = - IV(Uint8List.fromList(cipherbytes.getRange(0, aesBlockSize).toList())); - - cipherbytes = Uint8List.fromList( - cipherbytes.getRange(aesBlockSize, cipherbytes.length).toList()); + var cipherBytes = base64.decode(cipherText); + final ivBytes = cipherBytes.sublist(0, aesBlockSize); + cipherBytes = cipherBytes.sublist(aesBlockSize); + final iv = IV(ivBytes); final encrypter = Encrypter(AES(Key(key), mode: AESMode.cbc)); - - return encrypter.decrypt(Encrypted(cipherbytes), iv: iv); + return encrypter.decrypt(Encrypted(cipherBytes), iv: iv); } const pbkdf2Rounds = 4096;