• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *    http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "cj_cert_crl_collection.h"
17 
FfiCertCjCertCrlCollectionNewInstance(const HcfX509CertificateArray * inCerts,const HcfX509CrlArray * inCrls,CjCertCrlCollection * returnObj)18 int32_t FfiCertCjCertCrlCollectionNewInstance(const HcfX509CertificateArray *inCerts, const HcfX509CrlArray *inCrls,
19                                               CjCertCrlCollection *returnObj)
20 {
21     auto collection = static_cast<HcfCertCrlCollection *>(malloc(sizeof(HcfCertCrlCollection)));
22     if (collection == nullptr) {
23         return CF_ERR_MALLOC;
24     }
25     const auto errCode = HcfCertCrlCollectionCreate(inCerts, inCrls, &collection);
26     if (errCode != CF_SUCCESS) {
27         free(collection);
28         return errCode;
29     }
30     returnObj->collection = collection;
31     return CF_SUCCESS;
32 }
33 
FfiCertCjCertCrlCollectionDeleteInstance(CjCertCrlCollection self)34 void FfiCertCjCertCrlCollectionDeleteInstance(CjCertCrlCollection self)
35 {
36     CfObjDestroy(self.collection);
37 }
38 
FfiCertCjCertCrlCollectionSelectCerts(const CjCertCrlCollection self,const CjX509CertMatchParams * matchParams,HcfX509CertificateArray * retCerts)39 CfResult FfiCertCjCertCrlCollectionSelectCerts(const CjCertCrlCollection self,
40                                                const CjX509CertMatchParams *matchParams,
41                                                HcfX509CertificateArray *retCerts)
42 {
43     SubAltNameArray *subjectAlternativeNamesPtr = nullptr;
44     SubAltNameArray subjectAlternativeNames;
45     if (matchParams->subjectAlternativeNameCnt != 0) {
46         subjectAlternativeNames = SubAltNameArray{
47             .data = matchParams->subjectAlternativeNames,
48             .count = matchParams->subjectAlternativeNameCnt
49         };
50         subjectAlternativeNamesPtr = &subjectAlternativeNames;
51     }
52 
53     HcfCertificate *certPtr = nullptr;
54     if (matchParams->x509Cert) {
55         certPtr = &matchParams->x509Cert->base;
56     }
57 
58     const auto params = HcfX509CertMatchParams{
59         certPtr,
60         matchParams->validDate,
61         matchParams->issuer,
62         matchParams->keyUsage,
63         matchParams->serialNumber,
64         matchParams->subject,
65         matchParams->publicKey,
66         matchParams->publicKeyAlgID,
67         subjectAlternativeNamesPtr,
68         matchParams->matchAllSubjectAltNames,
69         matchParams->authorityKeyIdentifier,
70         matchParams->minPathLenConstraint,
71         matchParams->extendedKeyUsage,
72         matchParams->nameConstraints,
73         matchParams->certPolicy,
74         matchParams->privateKeyValid,
75         matchParams->subjectKeyIdentifier,
76     };
77 
78     return self.collection->selectCerts(self.collection, &params, retCerts);
79 }
80 
FfiCertCjCertCrlCollectionSelectCRLs(const CjCertCrlCollection self,const CjX509CrlMatchParams * matchParams,HcfX509CrlArray * retCrls)81 CfResult FfiCertCjCertCrlCollectionSelectCRLs(const CjCertCrlCollection self,
82                                               const CjX509CrlMatchParams *matchParams,
83                                               HcfX509CrlArray *retCrls)
84 {
85     HcfCertificate *certPtr = nullptr;
86     if (matchParams->x509Cert) {
87         certPtr = &matchParams->x509Cert->base;
88     }
89 
90     const auto hcfParams = HcfX509CrlMatchParams{
91         .issuer = matchParams->issuer,
92         .x509Cert = certPtr,
93         .updateDateTime = matchParams->updateDateTime,
94         .maxCRL = matchParams->maxCRL,
95         .minCRL = matchParams->minCRL,
96     };
97     return self.collection->selectCRLs(self.collection, &hcfParams, retCrls);
98 }
99