1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.github.tonywasher.joceanus.gordianknot.impl.ext.macs;
18
19 import io.github.tonywasher.joceanus.gordianknot.impl.ext.digests.GordianBlake2Base;
20 import io.github.tonywasher.joceanus.gordianknot.impl.ext.params.GordianBlake2Parameters;
21 import io.github.tonywasher.joceanus.gordianknot.impl.ext.params.GordianBlake2Parameters.GordianBlake2ParametersBuilder;
22 import org.bouncycastle.crypto.CipherParameters;
23 import org.bouncycastle.crypto.Mac;
24 import org.bouncycastle.crypto.params.KeyParameter;
25
26
27
28
29 public class GordianBlake2Mac
30 implements Mac {
31
32
33
34 private final GordianBlake2Base theDigest;
35
36
37
38
39
40
41 public GordianBlake2Mac(final GordianBlake2Base pDigest) {
42 theDigest = pDigest;
43 }
44
45 @Override
46 public String getAlgorithmName() {
47 return theDigest.getAlgorithmName() + "Mac";
48 }
49
50 @Override
51 public void init(final CipherParameters pParams) {
52 CipherParameters myParams = pParams;
53 if (myParams instanceof KeyParameter keyParam) {
54 myParams = new GordianBlake2ParametersBuilder()
55 .setKey(keyParam.getKey())
56 .build();
57 }
58 if (!(myParams instanceof GordianBlake2Parameters myBlakeParams)) {
59 throw new IllegalArgumentException("Invalid parameter passed to Blake2Mac init - "
60 + pParams.getClass().getName());
61 }
62 if (myBlakeParams.getKey() == null) {
63 throw new IllegalArgumentException("Blake2Mac requires a key parameter.");
64 }
65
66
67 theDigest.init(myBlakeParams);
68 }
69
70 @Override
71 public int getMacSize() {
72 return theDigest.getDigestSize();
73 }
74
75 @Override
76 public void update(final byte in) {
77 theDigest.update(in);
78 }
79
80 @Override
81 public void update(final byte[] in, final int inOff, final int len) {
82 theDigest.update(in, inOff, len);
83 }
84
85 @Override
86 public int doFinal(final byte[] out, final int outOff) {
87 return theDigest.doFinal(out, outOff);
88 }
89
90 @Override
91 public void reset() {
92 theDigest.reset();
93 }
94 }