| // 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; |
| } |
| } |