blob: c98d93d33daa17fe4a363339ea8569ec4fc03015 [file] [log] [blame]
@OnPlatform({
'chrome': Skip('Excessive time / resource consumption on this platform'),
'node': Skip('Excessive time / resource consumption on this platform')
})
import 'dart:math';
import 'dart:typed_data';
import 'package:pointycastle/src/ct.dart';
import 'package:test/test.dart';
import '../digests/cshake_test.dart';
void main() {
//
// Not using a secure random otherwise so as not to
// invoke the platform selection logic.
//
var rand = Random();
group('ct', () {
test('xor monte', () {
for (int j = 0; j < 500000; j++) {
var len = rand.nextInt(256);
var x = Uint8List.fromList(
List.generate(len, (index) => rand.nextInt(256)));
var y = Uint8List.fromList(
List.generate(len, (index) => rand.nextInt(256)));
var enable = rand.nextInt(10) >= 5;
var reason =
"$enable ${formatBytesAsHexString(x)} ${formatBytesAsHexString(y)}";
var xExpected = Uint8List.fromList(x);
_xor(xExpected, y, enable);
CT_xor(x, y, enable);
expect(xExpected, equals(x), reason: reason);
//
// Should be all zero
//
CT_xor(y, y, true);
y.forEach((element) {
expect(element, equals(0));
});
}
});
test('assertion', () {
var x = Uint8List(1);
var y = Uint8List(2);
expect(() {
CT_xor(x, y, true);
}, throwsA(isA<AssertionError>()));
});
});
}
// naive non ct xor
void _xor(Uint8List x, Uint8List y, bool enable) {
if (enable) {
for (var t = 0; t < x.length; t++) {
x[t] = x[t] ^ y[t];
}
}
}