Refactor logging to use slf4j
[iotivity.git] / cloud / account / src / main / java / org / iotivity / cloud / accountserver / resources / credprov / cert / CertificateConstants.java
1 /*
2  * //******************************************************************
3  * //
4  * // Copyright 2016 Samsung Electronics All Rights Reserved.
5  * //
6  * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7  * //
8  * // Licensed under the Apache License, Version 2.0 (the "License");
9  * // you may not use this file except in compliance with the License.
10  * // You may obtain a copy of the License at
11  * //
12  * //      http://www.apache.org/licenses/LICENSE-2.0
13  * //
14  * // Unless required by applicable law or agreed to in writing, software
15  * // distributed under the License is distributed on an "AS IS" BASIS,
16  * // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * // See the License for the specific language governing permissions and
18  * // limitations under the License.
19  * //
20  * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
21  */
22 package org.iotivity.cloud.accountserver.resources.credprov.cert;
23
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
26 import org.bouncycastle.asn1.x500.X500Name;
27 import org.iotivity.cloud.accountserver.Constants;
28 import org.iotivity.cloud.accountserver.db.AccountDBManager;
29 import org.iotivity.cloud.accountserver.x509.cert.Utility;
30
31 import java.io.File;
32 import java.io.FileInputStream;
33 import java.io.FileOutputStream;
34 import java.io.IOException;
35 import java.security.cert.CertificateException;
36 import java.security.cert.CertificateFactory;
37 import java.text.DateFormat;
38 import java.text.MessageFormat;
39 import java.text.SimpleDateFormat;
40 import java.util.Properties;
41
42 import static java.security.cert.CertificateFactory.getInstance;
43
44 /**
45  * This utility class is used for getting all properties from properties file.
46  */
47 public final class CertificateConstants {
48     private final static Logger     Log         = LoggerFactory.getLogger(CertificateConstants.class);
49
50     /**
51      * Properties object is used for loading pre-defined configurations: algorithm names and so on.
52      */
53     public static final Properties  PROPERTIES  = new Properties();
54
55     /**
56      * Load properties from specified properties file.
57      */
58     static {
59         try (FileInputStream inputStream = new FileInputStream(Constants.PROPERTIES_FILE_NAME)) {
60             PROPERTIES.load(inputStream);
61         } catch (IOException e) {
62             Log.error(e.getMessage());
63         }
64     }
65
66     /**
67      * Base 64 encoding constant for comparing request encoding.
68      */
69     public static final String BASE_64 = "oic.sec.encoding.base64";
70
71     /**
72      * Der encoding constant for comparing request encoding.
73      */
74     public static final String DER = "oic.sec.encoding.der";
75
76     /**
77      * Name of security provider, load from properties.
78      */
79     public static final String SECURITY_PROVIDER = PROPERTIES.getProperty("securityProvider");
80
81     /**
82      * Not after interval for X509Certificate generation, load from properties.
83      */
84     public static final String NOT_AFTER_INTERVAL = PROPERTIES.getProperty("notAfterInterval");
85
86     /**
87      * Next Update interval. is used for generation X509CRL, load from properties.
88      */
89     public static final String NEXT_UPDATE_INTERVAL = PROPERTIES.getProperty("nextUpdateInterval");
90
91     /**
92      * Signature algorithm, is used for signing certificates and CRLs, load from properties.
93      */
94     public static final String SIGNATURE_ALGORITHM = PROPERTIES.getProperty("signatureAlgorithm");
95
96     /**
97      * KeyStore type, is used for private key storage and for root certificate storage
98      */
99     static final String KEYSTORE_TYPE = PROPERTIES.getProperty("keystoreType");
100
101     /**
102      * CA Alias name, is used for storing ca certificate to key storage.
103      */
104     static final String CA_ALIAS = PROPERTIES.getProperty("caAlias");
105
106     /**
107      * Curve name, is used in signing algorithm for X509 certificate generation.
108      */
109     static final String CURVE = PROPERTIES.getProperty("ellipticCurve");
110
111     /**
112      * Key generation algorithm is used for generation private and public keys.
113      */
114     static final String KEY_GENERATOR_ALGORITHM = PROPERTIES.getProperty("keyGeneratorAlgorithm");
115
116     /**
117      * Date format, is used to parse date with UTC TIME format for certificate and CRL generation.
118      */
119     public static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMddHHmmss");
120
121     /**
122      * String constant is used to create keystore directory.
123      */
124     public static final String KEYSTORE_DIR = PROPERTIES.getProperty("keystoreDir");
125
126     /**
127      * X500Name for ca issuer, is used for issuing personal certificates and CRLs.
128      */
129     public static final X500Name CA_ISSUER = Utility.getName(PROPERTIES.getProperty("subjectName"),
130             PROPERTIES.getProperty("rootC"), PROPERTIES.getProperty("rootO"), PROPERTIES.getProperty("rootOU"));
131
132     /**
133      * Shared AccountDBManager to get rid of repeatable links on the same object.
134      */
135     public static final AccountDBManager ACCOUNT_DB_MANAGER = AccountDBManager.getInstance();
136
137     /**
138      * Certificate factory is used during certificate generation process.
139      */
140     public static CertificateFactory CERTIFICATE_FACTORY;
141
142     static {
143         try {
144             CERTIFICATE_FACTORY = getInstance("X509");
145         } catch (CertificateException e) {
146             Log.error(e.getMessage());
147         }
148     }
149
150     /**
151      * Path to keystore file, retrieved from properties file.
152      */
153     public static final File KEYSTORE_FILE = new File(MessageFormat.
154             format(PROPERTIES.getProperty("keyStoreLocation"), File.separator));
155
156     /**
157      * Set specified value for specified property.
158      *
159      * @param property specified property
160      * @param value    specified property value.
161      */
162     public static void set(String property, String value) {
163         PROPERTIES.setProperty(property, value);
164         try (FileOutputStream outputStream = new FileOutputStream(Constants.PROPERTIES_FILE_NAME)) {
165             PROPERTIES.store(outputStream, "New Serial number");
166         } catch (IOException e) {
167             Log.error(e.getMessage());
168         }
169     }
170
171     /**
172      * Private constructor makes class non-instantiable utility class.
173      */
174     private CertificateConstants() {
175         throw new AssertionError();
176     }
177 }