@@ -94,7 +94,29 @@ public List<String> aliases() throws KeyStoreException {
94
94
public Certificate [] getCertificateChain (String alias ) throws KeyStoreException {
95
95
if (!certificates .containsKey (alias )) {
96
96
try {
97
- Map <String , ?> response = client .post ("/rest/v1/workers/" + alias + "/process" , "{\" data\" :\" \" }" );
97
+ String worker = alias ;
98
+ boolean serverside = false ;
99
+ if (worker .endsWith ("|serverside" )) {
100
+ worker = worker .substring (0 , worker .length () - 11 );
101
+ serverside = true ;
102
+ }
103
+
104
+ Map <String , Object > request = new HashMap <>();
105
+ if (serverside ) {
106
+ request .put ("data" , "" );
107
+ Map <String , String > metadata = new HashMap <>();
108
+ metadata .put ("USING_CLIENTSUPPLIED_HASH" , "false" );
109
+ request .put ("metaData" , metadata );
110
+ } else {
111
+ request .put ("data" , "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=" );
112
+ request .put ("encoding" , "BASE64" );
113
+ Map <String , String > metadata = new HashMap <>();
114
+ metadata .put ("USING_CLIENTSUPPLIED_HASH" , "true" );
115
+ metadata .put ("CLIENTSIDE_HASHDIGESTALGORITHM" , "SHA-256" );
116
+ request .put ("metaData" , metadata );
117
+ }
118
+
119
+ Map <String , ?> response = client .post ("/rest/v1/workers/" + worker + "/process" , JsonWriter .format (request ));
98
120
String encodedCertificate = response .get ("signerCertificate" ).toString ();
99
121
byte [] certificateBytes = Base64 .getDecoder ().decode (encodedCertificate );
100
122
Certificate certificate = CertificateFactory .getInstance ("X.509" )
@@ -120,19 +142,32 @@ public SigningServicePrivateKey getPrivateKey(String alias, char[] password) thr
120
142
121
143
@ Override
122
144
public byte [] sign (SigningServicePrivateKey privateKey , String algorithm , byte [] data ) throws GeneralSecurityException {
123
- DigestAlgorithm digestAlgorithm = DigestAlgorithm .of (algorithm .substring (0 , algorithm .toLowerCase ().indexOf ("with" )));
124
- data = digestAlgorithm .getMessageDigest ().digest (data );
145
+ String worker = privateKey .getId ();
146
+ boolean serverside = false ;
147
+ if (worker .endsWith ("|serverside" )) {
148
+ worker = worker .substring (0 , worker .length () - 11 );
149
+ serverside = true ;
150
+ }
125
151
126
152
Map <String , Object > request = new HashMap <>();
127
- request .put ("data" , Base64 .getEncoder ().encodeToString (data ));
153
+ if (serverside ) {
154
+ request .put ("data" , Base64 .getEncoder ().encodeToString (data ));
155
+ Map <String , String > metadata = new HashMap <>();
156
+ metadata .put ("USING_CLIENTSUPPLIED_HASH" , "false" );
157
+ request .put ("metaData" , metadata );
158
+ } else {
159
+ DigestAlgorithm digestAlgorithm = DigestAlgorithm .of (algorithm .substring (0 , algorithm .toLowerCase ().indexOf ("with" )));
160
+ data = digestAlgorithm .getMessageDigest ().digest (data );
161
+ request .put ("data" , Base64 .getEncoder ().encodeToString (data ));
162
+ Map <String , String > metadata = new HashMap <>();
163
+ metadata .put ("USING_CLIENTSUPPLIED_HASH" , "true" );
164
+ metadata .put ("CLIENTSIDE_HASHDIGESTALGORITHM" , digestAlgorithm .id );
165
+ request .put ("metaData" , metadata );
166
+ }
128
167
request .put ("encoding" , "BASE64" );
129
- Map <String , String > metadata = new HashMap <>();
130
- metadata .put ("USING_CLIENTSUPPLIED_HASH" , "true" );
131
- metadata .put ("CLIENTSIDE_HASHDIGESTALGORITHM" , digestAlgorithm .id );
132
- request .put ("metaData" , metadata );
133
168
134
169
try {
135
- Map <String , ?> response = client .post ("/rest/v1/workers/" + privateKey . getId () + "/process" , JsonWriter .format (request ));
170
+ Map <String , ?> response = client .post ("/rest/v1/workers/" + worker + "/process" , JsonWriter .format (request ));
136
171
return Base64 .getDecoder ().decode ((String ) response .get ("data" ));
137
172
} catch (IOException e ) {
138
173
throw new GeneralSecurityException (e );
0 commit comments