blob: 2a8b06dd75cbf175cd76fb183e92befa1027e43f [file] [log] [blame]
// This file has been migrated.
library impl.digest.sha3;
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 SHA3 digest.
/// https://csrc.nist.gov/publications/detail/fips/202/final
class SHA3Digest extends KeccakEngine {
static final RegExp _sha3REGEX = RegExp(r'^SHA3-([0-9]+)$');
/// Intended for internal use.
static final FactoryConfig factoryConfig = DynamicFactoryConfig(
Digest,
_sha3REGEX,
(_, final Match match) => () {
var bitLength = int.parse(match.group(1)!);
return SHA3Digest(bitLength);
});
SHA3Digest([int? bitLength = 288]) {
switch (bitLength) {
case 224:
case 256:
case 384:
case 512:
init(bitLength!);
break;
default:
throw StateError(
'invalid bitLength ($bitLength) for SHA-3 must only be 224,256,384,512');
}
}
@override
String get algorithmName => 'SHA3-$fixedOutputLength';
@override
int doFinal(Uint8List out, int outOff) {
// FIPS 202 SHA3 https://github.com/PointyCastle/pointycastle/issues/128
absorbBits(0x02, 2);
squeeze(out, outOff, fixedOutputLength);
reset();
return digestSize;
}
}