View Javadoc
1   /*
2    * GordianKnot: Security Suite
3    * Copyright 2012-2026. Tony Washer
4    *
5    * Licensed under the Apache License, Version 2.0 (the "License"); you may not
6    * use this file except in compliance with the License.  You may obtain a copy
7    * of the License at
8    *
9    *   http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
14   * License for the specific language governing permissions and limitations under
15   * the License.
16   */
17  package io.github.tonywasher.joceanus.gordianknot.api.digest;
18  
19  import io.github.tonywasher.joceanus.gordianknot.api.base.GordianConsumer;
20  import io.github.tonywasher.joceanus.gordianknot.api.base.GordianException;
21  
22  /**
23   * GordianKnot interface for Message Digests.
24   */
25  public interface GordianDigest
26          extends GordianConsumer {
27      /**
28       * Obtain DigestSpec.
29       *
30       * @return the digestSpec
31       */
32      GordianDigestSpec getDigestSpec();
33  
34      /**
35       * Obtain the digest size.
36       *
37       * @return the digest size
38       */
39      int getDigestSize();
40  
41      /**
42       * Calculate the digest.
43       *
44       * @return the digest
45       */
46      byte[] finish();
47  
48      /**
49       * Calculate the Digest, and return it in the buffer provided.
50       *
51       * @param pBuffer the buffer to return the digest in.
52       * @param pOffset the offset in the buffer to store the digest.
53       * @return the number of bytes placed into buffer
54       * @throws GordianException on error
55       */
56      int finish(byte[] pBuffer,
57                 int pOffset) throws GordianException;
58  
59      /**
60       * Update the digest, calculate and reset it.
61       *
62       * @param pBytes the bytes to update with.
63       * @return the digest
64       */
65      default byte[] finish(final byte[] pBytes) {
66          update(pBytes);
67          return finish();
68      }
69  }