01: package org.bouncycastle.crypto.digests;
02:
03: /**
04: * FIPS 180-2 implementation of SHA-384.
05: *
06: * <pre>
07: * block word digest
08: * SHA-1 512 32 160
09: * SHA-256 512 32 256
10: * SHA-384 1024 64 384
11: * SHA-512 1024 64 512
12: * </pre>
13: */
14: public class SHA384Digest extends LongDigest {
15:
16: private static final int DIGEST_LENGTH = 48;
17:
18: /**
19: * Standard constructor
20: */
21: public SHA384Digest() {
22: }
23:
24: /**
25: * Copy constructor. This will copy the state of the provided
26: * message digest.
27: */
28: public SHA384Digest(SHA384Digest t) {
29: super (t);
30: }
31:
32: public String getAlgorithmName() {
33: return "SHA-384";
34: }
35:
36: public int getDigestSize() {
37: return DIGEST_LENGTH;
38: }
39:
40: public int doFinal(byte[] out, int outOff) {
41: finish();
42:
43: unpackWord(H1, out, outOff);
44: unpackWord(H2, out, outOff + 8);
45: unpackWord(H3, out, outOff + 16);
46: unpackWord(H4, out, outOff + 24);
47: unpackWord(H5, out, outOff + 32);
48: unpackWord(H6, out, outOff + 40);
49:
50: reset();
51:
52: return DIGEST_LENGTH;
53: }
54:
55: /**
56: * reset the chaining variables
57: */
58: public void reset() {
59: super .reset();
60:
61: /* SHA-384 initial hash value
62: * The first 64 bits of the fractional parts of the square roots
63: * of the 9th through 16th prime numbers
64: */
65: H1 = 0xcbbb9d5dc1059ed8l;
66: H2 = 0x629a292a367cd507l;
67: H3 = 0x9159015a3070dd17l;
68: H4 = 0x152fecd8f70e5939l;
69: H5 = 0x67332667ffc00b31l;
70: H6 = 0x8eb44a8768581511l;
71: H7 = 0xdb0c2e0d64f98fa7l;
72: H8 = 0x47b5481dbefa4fa4l;
73: }
74: }
|