Alexander "PapaTutuWawa
438012d8f8
It seems that the varint encoding function would not work for some integers as input. This should in theory fix this issue. Since the SPK IDs are randomly between 0 and 2**32 - 1, it makes sense that the tests fail only sometimes.
187 lines
5.5 KiB
Dart
187 lines
5.5 KiB
Dart
import 'package:omemo_dart/protobuf/schema.pb.dart';
|
|
import 'package:omemo_dart/src/protobuf/omemo_authenticated_message.dart';
|
|
import 'package:omemo_dart/src/protobuf/omemo_key_exchange.dart';
|
|
import 'package:omemo_dart/src/protobuf/omemo_message.dart';
|
|
import 'package:omemo_dart/src/protobuf/protobuf.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
void main() {
|
|
group('Base 128 Varints', () {
|
|
test('Test simple parsing of Varints', () {
|
|
expect(
|
|
decodeVarint(<int>[1], 0).n,
|
|
1,
|
|
);
|
|
expect(
|
|
decodeVarint(<int>[1], 0).length,
|
|
1,
|
|
);
|
|
expect(
|
|
decodeVarint(<int>[0x96, 0x01, 0x00], 0).n,
|
|
150,
|
|
);
|
|
expect(
|
|
decodeVarint(<int>[0x96, 0x01, 0x00], 0).length,
|
|
2,
|
|
);
|
|
expect(
|
|
decodeVarint(<int>[172, 2, 0x8], 0).n,
|
|
300,
|
|
);
|
|
expect(
|
|
decodeVarint(<int>[172, 2, 0x8], 0).length,
|
|
2,
|
|
);
|
|
});
|
|
|
|
test('Test encoding Varints', () {
|
|
expect(
|
|
encodeVarint(1),
|
|
<int>[1],
|
|
);
|
|
expect(
|
|
encodeVarint(150),
|
|
<int>[0x96, 0x01],
|
|
);
|
|
expect(
|
|
encodeVarint(300),
|
|
<int>[172, 2],
|
|
);
|
|
});
|
|
|
|
test('Test some special cases', () {
|
|
expect(decodeVarint(encodeVarint(1042464893), 0).n, 1042464893);
|
|
});
|
|
});
|
|
|
|
group('OMEMOMessage', () {
|
|
test('Decode a OMEMOMessage', () {
|
|
final pbMessage = OMEMOMessage()
|
|
..n = 1
|
|
..pn = 5
|
|
..dhPub = <int>[1, 2, 3]
|
|
..ciphertext = <int>[4, 5, 6];
|
|
final serial = pbMessage.writeToBuffer();
|
|
final msg = OmemoMessage.fromBuffer(serial);
|
|
|
|
expect(msg.n, 1);
|
|
expect(msg.pn, 5);
|
|
expect(msg.dhPub, <int>[1, 2, 3]);
|
|
expect(msg.ciphertext, <int>[4, 5, 6]);
|
|
});
|
|
test('Decode a OMEMOMessage without ciphertext', () {
|
|
final pbMessage = OMEMOMessage()
|
|
..n = 1
|
|
..pn = 5
|
|
..dhPub = <int>[1, 2, 3];
|
|
final serial = pbMessage.writeToBuffer();
|
|
final msg = OmemoMessage.fromBuffer(serial);
|
|
|
|
expect(msg.n, 1);
|
|
expect(msg.pn, 5);
|
|
expect(msg.dhPub, <int>[1, 2, 3]);
|
|
expect(msg.ciphertext, null);
|
|
});
|
|
test('Encode a OMEMOMessage', () {
|
|
final m = OmemoMessage()
|
|
..n = 1
|
|
..pn = 5
|
|
..dhPub = <int>[1, 2, 3]
|
|
..ciphertext = <int>[4, 5, 6];
|
|
final serial = m.writeToBuffer();
|
|
final msg = OMEMOMessage.fromBuffer(serial);
|
|
|
|
expect(msg.n, 1);
|
|
expect(msg.pn, 5);
|
|
expect(msg.dhPub, <int>[1, 2, 3]);
|
|
expect(msg.ciphertext, <int>[4, 5, 6]);
|
|
});
|
|
test('Encode a OMEMOMessage without ciphertext', () {
|
|
final m = OmemoMessage()
|
|
..n = 1
|
|
..pn = 5
|
|
..dhPub = <int>[1, 2, 3];
|
|
final serial = m.writeToBuffer();
|
|
final msg = OMEMOMessage.fromBuffer(serial);
|
|
|
|
expect(msg.n, 1);
|
|
expect(msg.pn, 5);
|
|
expect(msg.dhPub, <int>[1, 2, 3]);
|
|
expect(msg.ciphertext, <int>[]);
|
|
});
|
|
});
|
|
|
|
group('OMEMOAuthenticatedMessage', () {
|
|
test('Test encoding a message', () {
|
|
final msg = OmemoAuthenticatedMessage()
|
|
..mac = <int>[1, 2, 3]
|
|
..message = <int>[4, 5, 6];
|
|
final decoded = OMEMOAuthenticatedMessage.fromBuffer(msg.writeToBuffer());
|
|
|
|
expect(decoded.mac, <int>[1, 2, 3]);
|
|
expect(decoded.message, <int>[4, 5, 6]);
|
|
});
|
|
test('Test decoding a message', () {
|
|
final msg = OMEMOAuthenticatedMessage()
|
|
..mac = <int>[1, 2, 3]
|
|
..message = <int>[4, 5, 6];
|
|
final bytes = msg.writeToBuffer();
|
|
final decoded = OmemoAuthenticatedMessage.fromBuffer(bytes);
|
|
|
|
expect(decoded.mac, <int>[1, 2, 3]);
|
|
expect(decoded.message, <int>[4, 5, 6]);
|
|
});
|
|
});
|
|
|
|
group('OMEMOKeyExchange', () {
|
|
test('Test encoding a message', () {
|
|
final authMessage = OmemoAuthenticatedMessage()
|
|
..mac = <int>[5, 6, 8, 0]
|
|
..message = <int>[4, 5, 7, 3, 2];
|
|
final message = OmemoKeyExchange()
|
|
..pkId = 698
|
|
..spkId = 245
|
|
..ik = <int>[1, 4, 6]
|
|
..ek = <int>[4, 6, 7, 80]
|
|
..message = authMessage;
|
|
final kex = OMEMOKeyExchange.fromBuffer(message.writeToBuffer());
|
|
|
|
expect(kex.pkId, 698);
|
|
expect(kex.spkId, 245);
|
|
expect(kex.ik, <int>[1, 4, 6]);
|
|
expect(kex.ek, <int>[4, 6, 7, 80]);
|
|
|
|
expect(kex.message.mac, <int>[5, 6, 8, 0]);
|
|
expect(kex.message.message, <int>[4, 5, 7, 3, 2]);
|
|
});
|
|
test('Test decoding a message', () {
|
|
final message = OMEMOAuthenticatedMessage()
|
|
..mac = <int>[5, 6, 8, 0]
|
|
..message = <int>[4, 5, 7, 3, 2];
|
|
final kex = OMEMOKeyExchange()
|
|
..pkId = 698
|
|
..spkId = 245
|
|
..ik = <int>[1, 4, 6]
|
|
..ek = <int>[4, 6, 7, 80]
|
|
..message = message;
|
|
final decoded = OmemoKeyExchange.fromBuffer(kex.writeToBuffer());
|
|
|
|
expect(decoded.pkId, 698);
|
|
expect(decoded.spkId, 245);
|
|
expect(decoded.ik, <int>[1, 4, 6]);
|
|
expect(decoded.ek, <int>[4 ,6 ,7 , 80]);
|
|
|
|
expect(decoded.message!.mac, <int>[5, 6, 8, 0]);
|
|
expect(decoded.message!.message, <int>[4, 5, 7, 3, 2]);
|
|
});
|
|
test('Test decoding an issue', () {
|
|
/*
|
|
final data = 'CAAQfRogc2GwslU219dUkrMHNM4KdZRmuFnBTae+bQaJ+55IsAMiII7aZKj2sUpb6xR/3Ari7WZUmKFV0G6czUc4NMvjKDBaKnwKEM2ZpI8X3TgcxhxwENANnlsSaAgAEAAaICy8T9WPgLb7RdYd8/4JkrLF0RahEkC3ZaEfk5jw3dsLIkBMILzLyByweLgF4lCn0oNea+kbdrFr6rY7r/7WyI8hXEQz38QpnN+jyGGwC7Ga0dq70WuyqE7VpiFArQwqZh2G';
|
|
final kex = OmemoKeyExchange.fromBuffer(base64Decode(data));
|
|
|
|
expect(kex.spkId!, 1042464893);
|
|
*/
|
|
});
|
|
});
|
|
}
|