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, ¶ms, 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