aboutsummaryrefslogtreecommitdiffstats
path: root/certService/src/main/java/org/onap/oom/certservice/certification/model/CertificateUpdateModel.java
blob: 9423af522ecc421a0ab76bfd7f8a6d352bd59ec6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/*-
 * ============LICENSE_START=======================================================
 *  Copyright (C) 2021 Nokia.
 * ================================================================================
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * SPDX-License-Identifier: Apache-2.0
 * ============LICENSE_END=========================================================
 */

package org.onap.oom.certservice.certification.model;

import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.Objects;
import org.bouncycastle.util.io.pem.PemObject;
import org.onap.oom.certservice.certification.PemObjectFactory;
import org.onap.oom.certservice.certification.StringBase64;
import org.onap.oom.certservice.certification.exception.KeyDecryptionException;

public final class CertificateUpdateModel {

    private final String encodedCsr;
    private final String encodedPrivateKey;
    private final String encodedOldCert;
    private final String encodedOldPrivateKey;
    private final String caName;
    private static final PemObjectFactory PEM_OBJECT_FACTORY = new PemObjectFactory();

    private CertificateUpdateModel(String encodedCsr, String encodedPrivateKey, String encodedOldCert,
                                   String encodedOldPrivateKey, String caName) {
        this.encodedCsr = encodedCsr;
        this.encodedPrivateKey = encodedPrivateKey;
        this.encodedOldCert = encodedOldCert;
        this.encodedOldPrivateKey = encodedOldPrivateKey;
        this.caName = caName;
    }

    public String getEncodedCsr() {
        return encodedCsr;
    }

    public String getEncodedPrivateKey() {
        return encodedPrivateKey;
    }

    public String getEncodedOldCert() {
        return encodedOldCert;
    }

    public String getEncodedOldPrivateKey() {
        return encodedOldPrivateKey;
    }

    public String getCaName() {
        return caName;
    }

    public PrivateKey getOldPrivateKeyObject()
        throws KeyDecryptionException, InvalidKeySpecException, NoSuchAlgorithmException {

        StringBase64 stringBase64 = new StringBase64(encodedOldPrivateKey);
        PemObject pemObject = stringBase64.asString()
            .flatMap(PEM_OBJECT_FACTORY::createPemObject)
            .orElseThrow(
                () -> new KeyDecryptionException("Incorrect Key, decryption failed")
            );
        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(pemObject.getContent());
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        return keyFactory.generatePrivate(keySpec);
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        CertificateUpdateModel that = (CertificateUpdateModel) o;
        return Objects.equals(encodedCsr, that.encodedCsr)
                && Objects.equals(encodedPrivateKey, that.encodedPrivateKey)
                && Objects.equals(encodedOldCert, that.encodedOldCert)
                && Objects.equals(encodedOldPrivateKey, that.encodedOldPrivateKey)
                && Objects.equals(caName, that.caName);
    }

    @Override
    public int hashCode() {
        return Objects.hash(encodedCsr, encodedPrivateKey, encodedOldCert, encodedOldPrivateKey, caName);
    }

    public static class CertificateUpdateModelBuilder {

        private String encodedCsr;
        private String encodedPrivateKey;
        private String encodedOldCert;
        private String encodedOldPrivateKey;
        private String caName;

        public CertificateUpdateModelBuilder setEncodedCsr(String encodedCsr) {
            this.encodedCsr = encodedCsr;
            return this;
        }

        public CertificateUpdateModelBuilder setEncodedPrivateKey(String encodedPrivateKey) {
            this.encodedPrivateKey = encodedPrivateKey;
            return this;
        }

        public CertificateUpdateModelBuilder setEncodedOldCert(String encodedOldCert) {
            this.encodedOldCert = encodedOldCert;
            return this;
        }

        public CertificateUpdateModelBuilder setEncodedOldPrivateKey(String encodedOldPrivateKey) {
            this.encodedOldPrivateKey = encodedOldPrivateKey;
            return this;
        }

        public CertificateUpdateModelBuilder setCaName(String caName) {
            this.caName = caName;
            return this;
        }

        public CertificateUpdateModel build() {
            return new CertificateUpdateModel(encodedCsr, encodedPrivateKey, encodedOldCert, encodedOldPrivateKey, caName);
        }
    }
}