cipher.dart 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import 'dart:async';
  2. import 'dart:convert';
  3. import 'dart:io';
  4. import 'package:encrypt/encrypt_io.dart';
  5. import 'package:flutter_secure_storage/flutter_secure_storage.dart';
  6. import 'package:encrypt/encrypt.dart';
  7. import 'package:path_provider/path_provider.dart';
  8. import 'package:pointycastle/asymmetric/api.dart';
  9. import 'global.dart';
  10. Future<RSAPrivateKey?> getRSAPrivateKey(String username) async {
  11. try {
  12. final storage = FlutterSecureStorage();
  13. String? s = await storage.read(key: 'e2ee chat private key of $username');
  14. Directory tempDir = await getTemporaryDirectory();
  15. String tempPath = tempDir.path;
  16. String filePath = '$tempPath/public.pem';
  17. final file = File(filePath);
  18. final privateKey = await parseKeyFromFile<RSAPrivateKey>(filePath);
  19. file.delete();
  20. return privateKey;
  21. } catch (e) {
  22. debug('get rsa private key failed: $e');
  23. }
  24. }
  25. Future<RSAPublicKey?> getRSAPublicKey(String contents) async {
  26. try {
  27. Directory tempDir = await getTemporaryDirectory();
  28. String tempPath = tempDir.path;
  29. String filePath = '$tempPath/private.pem';
  30. final file = File(filePath);
  31. file.writeAsString(contents);
  32. final publicKey = await parseKeyFromFile<RSAPublicKey>(filePath);
  33. return publicKey;
  34. } catch (e) {
  35. debug('get rsa public key failed: $e');
  36. }
  37. }