import 'dart:async'; import 'dart:convert'; import 'dart:io'; import 'package:encrypt/encrypt_io.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:encrypt/encrypt.dart'; import 'package:path_provider/path_provider.dart'; import 'package:pointycastle/asymmetric/api.dart'; import 'global.dart'; Future getRSAPrivateKey(String username) async { try { final storage = FlutterSecureStorage(); final _key = 'e2ee chat private key of $username'; String? s = await storage.read(key: _key); if (s == null) { // TODO: 如果没有私钥,需要生成 storage.write(key: _key, value: s); } Directory tempDir = await getTemporaryDirectory(); String tempPath = tempDir.path; String filePath = '$tempPath/private.pem'; final file = File(filePath); final privateKey = await parseKeyFromFile(filePath); file.delete(); return privateKey; } catch (e) { debug('get rsa private key failed: $e'); } } Future getRSAPublicKey(String contents) async { try { Directory tempDir = await getTemporaryDirectory(); String tempPath = tempDir.path; String filePath = '$tempPath/public.pem'; final file = File(filePath); file.writeAsString(contents); final publicKey = await parseKeyFromFile(filePath); return publicKey; } catch (e) { debug('get rsa public key failed: $e'); } }