blob: eac176c2889968dc2ab1e5f035730ae622d9b6db [file] [log] [blame]
// See file LICENSE for more information.
library impl.digest.keccak;
import 'dart:typed_data';
import 'package:pointycastle/api.dart';
import 'package:pointycastle/src/impl/keccak_engine.dart';
import 'package:pointycastle/src/registry/registry.dart';
/// Implementation of Keccak digest.
class KeccakDigest extends KeccakEngine {
static final RegExp _keccakREGEX = RegExp(r'^Keccak\/([0-9]+)$');
/// Intended for internal use.
static final FactoryConfig factoryConfig = DynamicFactoryConfig(
Digest,
_keccakREGEX,
(_, final Match match) => () {
var bitLength = int.parse(match.group(1)!);
return KeccakDigest(bitLength);
});
KeccakDigest([int bitLength = 288]) {
switch (bitLength) {
case 128:
case 224:
case 256:
case 288:
case 384:
case 512:
init(bitLength);
break;
default:
throw StateError(
'invalid bitLength ($bitLength) for Keccak must only be 128,224,256,288,384,512');
}
}
@override
String get algorithmName => 'Keccak/$fixedOutputLength';
@override
int doFinal(Uint8List out, int outOff) {
squeeze(out, outOff, fixedOutputLength);
reset();
return digestSize;
}
}