1 package com.srv4pos.server.api.activation;
2
3 import com.srv4pos.commons.io.BytesUtils;
4 import com.srv4pos.server.api.infrastructure.SignService;
5 import org.apache.commons.codec.binary.Base64;
6
7 import java.io.IOException;
8 import java.security.InvalidKeyException;
9 import java.security.NoSuchAlgorithmException;
10 import java.security.SignatureException;
11 import java.security.spec.InvalidKeySpecException;
12 import java.util.HashMap;
13 import java.util.Map;
14
15
16
17
18
19 public class SignatureHelper {
20
21 private Map<String, byte[]> pubKeys = new HashMap<String, byte[]>();
22
23 public SignatureHelper() {
24 }
25
26
27
28
29
30
31
32
33
34
35
36
37 public boolean verifySignature(ActivationCodeInfo activationCodeInfo) throws NoSuchAlgorithmException, InvalidKeySpecException,
38 InvalidKeyException, SignatureException, IOException {
39
40 final String publicKeyFileName = activationCodeInfo.getPublicKeyFileName();
41
42 if (publicKeyFileName == null) {
43 return false;
44 }
45
46 byte[] pubKeyBytes = pubKeys.get(publicKeyFileName);
47
48 if (pubKeyBytes == null) {
49 pubKeyBytes = BytesUtils.readResource(publicKeyFileName, getClass());
50 pubKeys.put(publicKeyFileName, pubKeyBytes);
51 }
52
53 final byte[] signature = Base64.decodeBase64(activationCodeInfo.getSignature().getBytes(ActivationServiceSample.SIGNATURE_CHARSET));
54 final String activationDescriptorInfoJson = activationCodeInfo.getActivationDescriptorInfo();
55 return SignService.verifySignature(activationDescriptorInfoJson.getBytes(ActivationServiceSample.SIGNATURE_CHARSET), pubKeyBytes, signature);
56 }
57
58
59
60
61
62
63
64 public static String getPublicKeyFileName(boolean isProductionHost) {
65 return isProductionHost ? "production.pub.der" : "development.pub.der";
66 }
67 }