twonly-app-dependencies/libsignal_protocol_dart/test/devices/device_consistency_test.dart
2025-12-07 16:10:41 +01:00

86 lines
3.2 KiB
Dart

import 'package:libsignal_protocol_dart/src/devices/device_consistency_code_generator.dart';
import 'package:libsignal_protocol_dart/src/devices/device_consistency_commitment.dart';
import 'package:libsignal_protocol_dart/src/devices/device_consistency_signature.dart';
import 'package:libsignal_protocol_dart/src/identity_key.dart';
import 'package:libsignal_protocol_dart/src/protocol/device_consistency_message.dart';
import 'package:libsignal_protocol_dart/src/util/key_helper.dart';
import 'package:test/test.dart';
void main() {
String generateCode(DeviceConsistencyCommitment commitment,
List<DeviceConsistencyMessage> messages) {
final signatures = <DeviceConsistencySignature>[];
for (final message in messages) {
signatures.add(message.signature);
}
return DeviceConsistencyCodeGenerator.generateFor(commitment, signatures);
}
test('testDeviceConsistency', () {
final deviceOne = generateIdentityKeyPair();
final deviceTwo = generateIdentityKeyPair();
final deviceThree = generateIdentityKeyPair();
final keyList = <IdentityKey>[
deviceOne.getPublicKey(),
deviceTwo.getPublicKey(),
deviceThree.getPublicKey()
]..shuffle();
final deviceOneCommitment = DeviceConsistencyCommitment(1, keyList);
keyList.shuffle();
final deviceTwoCommitment = DeviceConsistencyCommitment(1, keyList);
keyList.shuffle();
final deviceThreeCommitment = DeviceConsistencyCommitment(1, keyList);
expect(deviceOneCommitment.serialized, deviceTwoCommitment.serialized);
expect(deviceTwoCommitment.serialized, deviceThreeCommitment.serialized);
final deviceOneMessage =
DeviceConsistencyMessage(deviceOneCommitment, deviceOne);
final deviceTwoMessage =
DeviceConsistencyMessage(deviceOneCommitment, deviceTwo);
final deviceThreeMessage =
DeviceConsistencyMessage(deviceOneCommitment, deviceThree);
final receivedDeviceOneMessage = DeviceConsistencyMessage.fromSerialized(
deviceOneCommitment,
deviceOneMessage.serialized,
deviceOne.getPublicKey());
final receivedDeviceTwoMessage = DeviceConsistencyMessage.fromSerialized(
deviceOneCommitment,
deviceTwoMessage.serialized,
deviceTwo.getPublicKey());
final receivedDeviceThreeMessage = DeviceConsistencyMessage.fromSerialized(
deviceOneCommitment,
deviceThreeMessage.serialized,
deviceThree.getPublicKey());
expect(deviceOneMessage.signature.vrfOutput,
receivedDeviceOneMessage.signature.vrfOutput);
expect(deviceTwoMessage.signature.vrfOutput,
receivedDeviceTwoMessage.signature.vrfOutput);
expect(deviceThreeMessage.signature.vrfOutput,
receivedDeviceThreeMessage.signature.vrfOutput);
final codeOne = generateCode(deviceOneCommitment, [
deviceOneMessage,
receivedDeviceTwoMessage,
receivedDeviceThreeMessage
]);
final codeTwo = generateCode(deviceTwoCommitment, [
deviceTwoMessage,
receivedDeviceThreeMessage,
receivedDeviceOneMessage
]);
final codeThree = generateCode(deviceThreeCommitment, [
deviceThreeMessage,
receivedDeviceTwoMessage,
receivedDeviceOneMessage
]);
expect(codeOne, codeTwo);
expect(codeTwo, codeThree);
});
}