cipher.dart 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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. final _key = 'e2ee chat private key of $username';
  14. String? s = await storage.read(key: _key);
  15. if (s == null) {
  16. // TODO: 如果没有私钥,需要生成
  17. storage.write(key: _key, value: s);
  18. }
  19. Directory tempDir = await getTemporaryDirectory();
  20. String tempPath = tempDir.path;
  21. String filePath = '$tempPath/private.pem';
  22. final file = File(filePath);
  23. final privateKey = await parseKeyFromFile<RSAPrivateKey>(filePath);
  24. file.delete();
  25. return privateKey;
  26. } catch (e) {
  27. debug('get rsa private key failed: $e');
  28. }
  29. }
  30. Future<RSAPublicKey?> getRSAPublicKey(String contents) async {
  31. try {
  32. Directory tempDir = await getTemporaryDirectory();
  33. String tempPath = tempDir.path;
  34. String filePath = '$tempPath/public.pem';
  35. final file = File(filePath);
  36. file.writeAsString(contents);
  37. final publicKey = await parseKeyFromFile<RSAPublicKey>(filePath);
  38. return publicKey;
  39. } catch (e) {
  40. debug('get rsa public key failed: $e');
  41. }
  42. }