Refactor logging to use slf4j
[iotivity.git] / cloud / account / src / main / java / org / iotivity / cloud / accountserver / x509 / cert / CSRParser.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.x509.cert;
23
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
26 import org.bouncycastle.asn1.x500.AttributeTypeAndValue;
27 import org.bouncycastle.asn1.x500.X500Name;
28 import org.bouncycastle.openssl.PEMException;
29 import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
30 import org.bouncycastle.operator.OperatorCreationException;
31 import org.bouncycastle.operator.jcajce.JcaContentVerifierProviderBuilder;
32 import org.bouncycastle.pkcs.PKCS10CertificationRequest;
33 import org.bouncycastle.pkcs.PKCSException;
34
35 import java.io.IOException;
36 import java.security.PublicKey;
37
38 import static org.bouncycastle.asn1.x500.style.BCStyle.CN;
39 import static org.iotivity.cloud.accountserver.resources.credprov.cert.CertificateConstants.SECURITY_PROVIDER;
40
41 /**
42  * Class is used for parsing CSR requests.
43  */
44 public class CSRParser {
45     private final static Logger Log = LoggerFactory.getLogger(CSRParser.class);
46
47     /**
48      * PKCS10CertificationRequest attribute.
49      */
50     private final PKCS10CertificationRequest mCsr;
51
52     /**
53      * Certificate subject.
54      */
55     private final X500Name subject;
56
57     /**
58      * Creates CSRParser instance with specified csrDer byte array.
59      *
60      * @param csrDer specified byte array.
61      */
62     public CSRParser(byte[] csrDer) throws IOException {
63         mCsr = new PKCS10CertificationRequest(csrDer);
64         subject = mCsr.getSubject();
65     }
66
67     /**
68      * Returns public key
69      */
70     public PublicKey getPublicKey() {
71         PublicKey publicKey = null;
72         try {
73             publicKey = new JcaPEMKeyConverter().setProvider(SECURITY_PROVIDER).
74                     getPublicKey(mCsr.getSubjectPublicKeyInfo());
75         } catch (PEMException e) {
76             Log.error(e.getMessage());
77         }
78         return publicKey;
79     }
80
81     /**
82      * Verifies signature from this CSR request with help of
83      *
84      * @return true if signature is correct and false otherwise.
85      */
86     public boolean isSignatureValid() {
87         boolean condition = false;
88         try {
89             condition = mCsr.isSignatureValid(new JcaContentVerifierProviderBuilder()
90                     .setProvider(SECURITY_PROVIDER).build(mCsr.getSubjectPublicKeyInfo()));
91         } catch (OperatorCreationException | PKCSException e) {
92             Log.error(e.getMessage());
93         }
94         return condition;
95     }
96
97     /**
98      * Returns common name from csr subject.
99      */
100     public String getCommonName() {
101         AttributeTypeAndValue rdn = subject.getRDNs(CN)[0].getFirst();
102         if (rdn != null) {
103             return rdn.getValue().toString();
104         }
105         return null;
106     }
107
108     /**
109      * Returns subject as X500Name.
110      */
111     public X500Name getSubject() {
112         return subject;
113     }
114 }