blob: b5cfaab0e2875b453e40f88a19489afa5ca84044 [file] [log] [blame] [edit]
// See file LICENSE for more information.
library impl.digest.sha384;
import 'dart:typed_data';
import 'package:pointycastle/api.dart';
import 'package:pointycastle/src/impl/long_sha2_family_digest.dart';
import 'package:pointycastle/src/registry/registry.dart';
/// Implementation of SHA-384 digest.
class SHA384Digest extends LongSHA2FamilyDigest implements Digest {
static final FactoryConfig factoryConfig =
StaticFactoryConfig(Digest, 'SHA-384', () => SHA384Digest());
static const _DIGEST_LENGTH = 48;
SHA384Digest() {
reset();
}
@override
final algorithmName = 'SHA-384';
@override
final digestSize = _DIGEST_LENGTH;
@override
void reset() {
super.reset();
h1.set(0xcbbb9d5d, 0xc1059ed8);
h2.set(0x629a292a, 0x367cd507);
h3.set(0x9159015a, 0x3070dd17);
h4.set(0x152fecd8, 0xf70e5939);
h5.set(0x67332667, 0xffc00b31);
h6.set(0x8eb44a87, 0x68581511);
h7.set(0xdb0c2e0d, 0x64f98fa7);
h8.set(0x47b5481d, 0xbefa4fa4);
}
@override
int doFinal(Uint8List out, int outOff) {
finish();
var view = ByteData.view(out.buffer, out.offsetInBytes, out.length);
h1.pack(view, outOff, Endian.big);
h2.pack(view, outOff + 8, Endian.big);
h3.pack(view, outOff + 16, Endian.big);
h4.pack(view, outOff + 24, Endian.big);
h5.pack(view, outOff + 32, Endian.big);
h6.pack(view, outOff + 40, Endian.big);
reset();
return _DIGEST_LENGTH;
}
}