os/security/cryptoservices/certificateandkeymgmt/pkixCert/pkixCertChainHelper.cpp
First public contribution.
2 * Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
4 * This component and the accompanying materials are made available
5 * under the terms of the License "Eclipse Public License v1.0"
6 * which accompanies this distribution, and is available
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
9 * Initial Contributors:
10 * Nokia Corporation - initial contribution.
19 #include "pkixCertChainHelper.h"
20 #include <pkixcertchain.h>
21 #include <pkixvalidationresult.h>
22 #include <unifiedcertstore.h>
24 _LIT(KPanicCat, "CPKIXCertChainHelper");
26 CPKIXCertChainHelper* CPKIXCertChainHelper::NewL(RFs& aFs)
28 CPKIXCertChainHelper* self = new (ELeave) CPKIXCertChainHelper();
29 CleanupStack::PushL(self);
30 self->ConstructL(aFs);
31 CleanupStack::Pop(self);
35 CPKIXCertChainHelper::CPKIXCertChainHelper() :
36 CActive(EPriorityNormal)
38 CActiveScheduler::Add(this);
41 void CPKIXCertChainHelper::ConstructL(RFs& aFs)
43 iCertStore = CUnifiedCertStore::NewL(aFs, EFalse);
46 CPKIXCertChainHelper::~CPKIXCertChainHelper()
52 CUnifiedCertStore& CPKIXCertChainHelper::CertStore()
57 void CPKIXCertChainHelper::Validate(CPKIXCertChainBase& aCertChain,
58 CPKIXValidationResult& aValidationResult,
59 const TTime& aValidationTime,
60 TRequestStatus& aStatus)
62 StartValidate(aCertChain, aValidationResult, aValidationTime, NULL,
66 void CPKIXCertChainHelper::Validate(CPKIXCertChainBase& aCertChain,
67 CPKIXValidationResult& aValidationResult,
68 const TTime& aValidationTime,
69 const CArrayPtr<HBufC>& aInitialPolicies,
70 TRequestStatus& aStatus)
72 StartValidate(aCertChain, aValidationResult, aValidationTime, &aInitialPolicies,
76 void CPKIXCertChainHelper::CancelValidate()
78 if (iState == EInitializeCertStore ||
79 iState == EValidateChain)
85 void CPKIXCertChainHelper::StartValidate(CPKIXCertChainBase& aCertChain,
86 CPKIXValidationResult& aValidationResult,
87 const TTime& aValidationTime,
88 const CArrayPtr<HBufC>* aInitialPolicies,
89 TRequestStatus& aStatus)
91 __ASSERT_ALWAYS(iState == EIdle, User::Panic(KPanicCat, 1));
92 iCertChain = &aCertChain;
93 iValidationResult = &aValidationResult;
94 iValidationTime = aValidationTime;
95 iInitialPolicies = aInitialPolicies;
96 iClientStatus = &aStatus;
97 aStatus = KRequestPending;
98 InitializeCertStore();
101 void CPKIXCertChainHelper::InitializeCertStore()
103 iState = EInitializeCertStore;
104 if (iCertStoreInitialized)
106 TRequestStatus* status = &iStatus;
107 User::RequestComplete(status, KErrNone);
111 iCertStore->Initialize(iStatus);
116 void CPKIXCertChainHelper::ValidateChainL()
118 iState = EValidateChain;
119 if (iInitialPolicies)
121 iCertChain->ValidateL(*iValidationResult,
128 iCertChain->ValidateL(*iValidationResult,
135 void CPKIXCertChainHelper::RunL()
137 User::LeaveIfError(iStatus.Int());
141 case EInitializeCertStore:
142 iCertStoreInitialized = ETrue;
155 TInt CPKIXCertChainHelper::RunError(TInt aError)
161 void CPKIXCertChainHelper::DoCancel()
163 TInt result = KErrCancel;
167 case EInitializeCertStore:
168 iCertStore->CancelInitialize();
172 if (iStatus == KRequestPending)
174 iCertChain->CancelValidate();
178 result = iStatus.Int();
190 void CPKIXCertChainHelper::Complete(TInt aError)
194 iValidationResult = NULL;
195 iInitialPolicies = NULL;
198 User::RequestComplete(iClientStatus, aError);