1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package io.github.tonywasher.joceanus.gordianknot.impl.jca.sign;
19
20 import io.github.tonywasher.joceanus.gordianknot.api.base.GordianException;
21 import io.github.tonywasher.joceanus.gordianknot.api.keypair.GordianKeyPair;
22 import io.github.tonywasher.joceanus.gordianknot.api.sign.GordianNewSignParams;
23 import io.github.tonywasher.joceanus.gordianknot.api.sign.spec.GordianSignatureSpec;
24 import io.github.tonywasher.joceanus.gordianknot.impl.core.base.GordianBaseFactory;
25 import io.github.tonywasher.joceanus.gordianknot.impl.core.spec.keypair.GordianCoreEdwardsSpec;
26 import io.github.tonywasher.joceanus.gordianknot.impl.core.spec.keypair.GordianCoreKeyPairSpec;
27 import io.github.tonywasher.joceanus.gordianknot.impl.jca.keypair.JcaKeyPair;
28
29
30
31
32 public class JcaEdDSASignature
33 extends JcaSignature {
34
35
36
37
38
39
40 JcaEdDSASignature(final GordianBaseFactory pFactory,
41 final GordianSignatureSpec pSignatureSpec) {
42
43 super(pFactory, pSignatureSpec);
44 }
45
46 @Override
47 public void initForSigning(final GordianNewSignParams pParams) throws GordianException {
48
49 final GordianKeyPair myPair = pParams.getKeyPair();
50 JcaKeyPair.checkKeyPair(myPair);
51 final String mySignName = getAlgorithmForKeyPair(myPair);
52 setSigner(getJavaSignature(mySignName, false));
53
54
55 super.initForSigning(pParams);
56 }
57
58 @Override
59 public void initForVerify(final GordianNewSignParams pParams) throws GordianException {
60
61 final GordianKeyPair myPair = pParams.getKeyPair();
62 JcaKeyPair.checkKeyPair(myPair);
63 final String mySignName = getAlgorithmForKeyPair(myPair);
64 setSigner(getJavaSignature(mySignName, false));
65
66
67 super.initForVerify(pParams);
68 }
69
70
71
72
73
74
75
76 private static String getAlgorithmForKeyPair(final GordianKeyPair pKeyPair) {
77
78 final GordianCoreKeyPairSpec mySpec = (GordianCoreKeyPairSpec) pKeyPair.getKeyPairSpec();
79 final GordianCoreEdwardsSpec myEdwards = mySpec.getEdwardsSpec();
80 final boolean is25519 = myEdwards.is25519();
81
82
83 return is25519 ? "Ed25519" : "Ed448";
84 }
85 }