[OOM-K8S-CERT-EXTERNAL-PROVIDER] Extend SANs support
[oom/platform/cert-service.git] / certServiceK8sExternalProvider / src / cmpv2provisioner / csr / csr.go
1 /*
2  * ============LICENSE_START=======================================================
3  * oom-certservice-k8s-external-provider
4  * ================================================================================
5  * Copyright (C) 2020 Nokia. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package csr
22
23 import (
24         "crypto/rand"
25         "crypto/x509"
26         "crypto/x509/pkix"
27         "encoding/pem"
28
29         x509utils "onap.org/oom-certservice/k8s-external-provider/src/x509"
30 )
31
32 func FilterFieldsFromCSR(csrBytes []byte, privateKeyBytes []byte) ([]byte, error) {
33         csr, err := x509utils.DecodeCSR(csrBytes)
34         if err != nil {
35                 return nil, err
36         }
37
38         key, err := x509utils.DecodePrivateKey(privateKeyBytes)
39         if err != nil {
40                 return nil, err
41         }
42
43         filteredSubject := filterFieldsFromSubject(csr.Subject)
44
45         filteredCsr, err := x509.CreateCertificateRequest(rand.Reader, &x509.CertificateRequest{
46                 Subject:  filteredSubject,
47                 DNSNames: csr.DNSNames,
48                 IPAddresses: csr.IPAddresses,
49                 URIs: csr.URIs,
50                 EmailAddresses: csr.EmailAddresses,
51         }, key)
52         if err != nil {
53                 return nil, err
54         }
55
56         csrBytes = pem.EncodeToMemory(&pem.Block{Type: x509utils.PemCsrType, Bytes: filteredCsr})
57         return csrBytes, nil
58 }
59
60 func filterFieldsFromSubject(subject pkix.Name) pkix.Name {
61         subject.StreetAddress = []string{}
62         subject.SerialNumber = ""
63         subject.PostalCode = []string{}
64         return subject
65 }