frindlymap/test/support/fake_cipher.dart

30 lines
1.0 KiB
Dart

import 'dart:convert';
import 'package:friendly_map/modules/core/core.dart';
/// 시험용 암호: 진짜 암호는 아니고, "두 사람의 키 + 단위 ID 가 맞아야 풀린다"는 약속만 흉내 낸다.
class FakeCipher implements PayloadCipher {
FakeCipher(this.myKey);
final String myKey;
String _tag(String peer, String context) => '${([myKey, peer]..sort()).join('+')}|$context';
@override
Future<String> seal({required String plain, required String peerPublicKey, required String context}) async =>
'${_tag(peerPublicKey, context)}|${base64Encode(utf8.encode(plain))}';
@override
Future<String?> open({required String sealed, required String peerPublicKey, required String context}) async {
final tag = _tag(peerPublicKey, context);
if (!sealed.startsWith('$tag|')) return null;
return utf8.decode(base64Decode(sealed.substring(tag.length + 1)));
}
}
class FakeIdentity implements IdentityProvider {
FakeIdentity(this.key);
final String key;
@override
Future<String> myPublicKey() async => key;
}