diff -r 675a964f4eb5 -r 35751d3474b7 cryptoservices/certificateandkeymgmt/x509/X509CertChain.cpp --- a/cryptoservices/certificateandkeymgmt/x509/X509CertChain.cpp Tue Jul 21 01:04:32 2009 +0100 +++ b/cryptoservices/certificateandkeymgmt/x509/X509CertChain.cpp Thu Sep 10 14:01:51 2009 +0300 @@ -1,206 +1,206 @@ -/* -* Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the License "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - - -#include - -EXPORT_C TValidationStatus::TValidationStatus(const TValidationError aError, const TInt aCert) - :iReason(aError), iCert(aCert) - { - } - -//x509 cert chain -/** -* If the certificate has decoded the members from TeletexString then the return value -* may be incorrect because TeletexString type is not fully supported by this library. -* Instead the decode methods perform a direct conversion from 8 to 16bits by adding -* null characters in the second byte of each character. This will work as expected -* for cases where the string contains ASCII data. -*/ -EXPORT_C CArrayPtrFlat* CX509CertChain::DecodeCertsL(const TDesC8& aBinaryData) - { - CArrayPtrFlat* temp = new(ELeave) CArrayPtrFlat (1); - TCleanupItem cleanupCerts(CleanupCertArray, temp); - CleanupStack::PushL(cleanupCerts); - TInt pos = 0;//start at the start - while (pos < aBinaryData.Length()) - { - CX509Certificate* cert = CX509Certificate::NewLC(aBinaryData, pos); - temp->AppendL(cert); - CleanupStack::Pop(); - } - CleanupStack::Pop();//temp - return temp; - } - -EXPORT_C CX509CertChain::~CX509CertChain() - { - if (iChain) - { - iChain->ResetAndDestroy(); - delete iChain; - } - } - -EXPORT_C TInt CX509CertChain::Count() const - { - return iChain->Count(); - } - -EXPORT_C const CX509Certificate& CX509CertChain::Cert(TInt aIndex) const - { - return *(iChain->At(aIndex)); - } - - -EXPORT_C TBool CX509CertChain::IsEqualL(const CX509CertChain& aOther) const - { - TInt num1 = Count(); - TInt num2 = aOther.Count(); - if (num1 != num2) - { - return EFalse; - } - - for (TInt i = 0; i < num1; ++i) - { - const CX509Certificate& cert1 = Cert(i); - const CX509Certificate& cert2 = aOther.Cert(i); - - if (!cert1.IsEqualL(cert2)) - { - return EFalse; - } - } - - return ETrue; - } - - -void CX509CertChain::CleanupCertArray(TAny* aArray) - { - CArrayPtrFlat* array = REINTERPRET_CAST(CArrayPtrFlat*, aArray); - array->ResetAndDestroy(); - delete array; - } - -// x509 certificate warning -EXPORT_C CCertificateValidationWarnings* CCertificateValidationWarnings::NewL(TInt aIndex) - { - CCertificateValidationWarnings* self = CCertificateValidationWarnings::NewLC(aIndex); - CleanupStack::Pop(self); - return self; - } - -EXPORT_C CCertificateValidationWarnings* CCertificateValidationWarnings::NewLC(TInt aIndex) - { - CCertificateValidationWarnings* self = new(ELeave) CCertificateValidationWarnings(aIndex); - CleanupStack::PushL(self); - return self; - } - -CCertificateValidationWarnings::CCertificateValidationWarnings(TInt aIndex) - : iCertIndex(aIndex) - { - } - -EXPORT_C CCertificateValidationWarnings::~CCertificateValidationWarnings() - { - iWarnings.Reset(); - iCriticalExtsFound.ResetAndDestroy(); - } - -EXPORT_C const RPointerArray& CCertificateValidationWarnings::CriticalExtensionsFound() const - { - return iCriticalExtsFound; - } - -EXPORT_C const RArray& CCertificateValidationWarnings::Warnings() const - { - return iWarnings; - } - -EXPORT_C TInt CCertificateValidationWarnings::CertIndex() const - { - return iCertIndex; - } - -EXPORT_C CCertificateValidationWarnings* CCertificateValidationWarnings::InternalizeL(RReadStream& aStream) - { - // iCertIndex - TInt certIndex = aStream.ReadInt32L(); - - // create a cert warning using the cert index and ref cert - CCertificateValidationWarnings* certWarning = CCertificateValidationWarnings::NewLC(certIndex); - - // iWarnings - TInt32 count = aStream.ReadInt32L(); - for (TInt x=0; x pckg(warning); - aStream.ReadL(pckg); - certWarning->AppendWarningL(warning); - } - - // iCriticalExtsFound - count = aStream.ReadInt32L(); - for (TInt x=0; xDes(); - aStream.ReadL(oidPtr, length); - certWarning->AppendCriticalExtensionWarningL(*oid); - CleanupStack::Pop(oid); - } - - CleanupStack::Pop(certWarning); - return certWarning; - } - -EXPORT_C void CCertificateValidationWarnings::ExternalizeL(RWriteStream& aStream) const - { - // iCertIndex; - aStream.WriteInt32L(iCertIndex); - - // iWarnings; - TInt x; - aStream.WriteInt32L(iWarnings.Count()); - for (x=0; x(iWarnings[x])); - } - - // iCriticalExtsFound; - aStream.WriteInt32L(iCriticalExtsFound.Count()); - for (x=0; x + +EXPORT_C TValidationStatus::TValidationStatus(const TValidationError aError, const TInt aCert) + :iReason(aError), iCert(aCert) + { + } + +//x509 cert chain +/** +* If the certificate has decoded the members from TeletexString then the return value +* may be incorrect because TeletexString type is not fully supported by this library. +* Instead the decode methods perform a direct conversion from 8 to 16bits by adding +* null characters in the second byte of each character. This will work as expected +* for cases where the string contains ASCII data. +*/ +EXPORT_C CArrayPtrFlat* CX509CertChain::DecodeCertsL(const TDesC8& aBinaryData) + { + CArrayPtrFlat* temp = new(ELeave) CArrayPtrFlat (1); + TCleanupItem cleanupCerts(CleanupCertArray, temp); + CleanupStack::PushL(cleanupCerts); + TInt pos = 0;//start at the start + while (pos < aBinaryData.Length()) + { + CX509Certificate* cert = CX509Certificate::NewLC(aBinaryData, pos); + temp->AppendL(cert); + CleanupStack::Pop(); + } + CleanupStack::Pop();//temp + return temp; + } + +EXPORT_C CX509CertChain::~CX509CertChain() + { + if (iChain) + { + iChain->ResetAndDestroy(); + delete iChain; + } + } + +EXPORT_C TInt CX509CertChain::Count() const + { + return iChain->Count(); + } + +EXPORT_C const CX509Certificate& CX509CertChain::Cert(TInt aIndex) const + { + return *(iChain->At(aIndex)); + } + + +EXPORT_C TBool CX509CertChain::IsEqualL(const CX509CertChain& aOther) const + { + TInt num1 = Count(); + TInt num2 = aOther.Count(); + if (num1 != num2) + { + return EFalse; + } + + for (TInt i = 0; i < num1; ++i) + { + const CX509Certificate& cert1 = Cert(i); + const CX509Certificate& cert2 = aOther.Cert(i); + + if (!cert1.IsEqualL(cert2)) + { + return EFalse; + } + } + + return ETrue; + } + + +void CX509CertChain::CleanupCertArray(TAny* aArray) + { + CArrayPtrFlat* array = REINTERPRET_CAST(CArrayPtrFlat*, aArray); + array->ResetAndDestroy(); + delete array; + } + +// x509 certificate warning +EXPORT_C CCertificateValidationWarnings* CCertificateValidationWarnings::NewL(TInt aIndex) + { + CCertificateValidationWarnings* self = CCertificateValidationWarnings::NewLC(aIndex); + CleanupStack::Pop(self); + return self; + } + +EXPORT_C CCertificateValidationWarnings* CCertificateValidationWarnings::NewLC(TInt aIndex) + { + CCertificateValidationWarnings* self = new(ELeave) CCertificateValidationWarnings(aIndex); + CleanupStack::PushL(self); + return self; + } + +CCertificateValidationWarnings::CCertificateValidationWarnings(TInt aIndex) + : iCertIndex(aIndex) + { + } + +EXPORT_C CCertificateValidationWarnings::~CCertificateValidationWarnings() + { + iWarnings.Reset(); + iCriticalExtsFound.ResetAndDestroy(); + } + +EXPORT_C const RPointerArray& CCertificateValidationWarnings::CriticalExtensionsFound() const + { + return iCriticalExtsFound; + } + +EXPORT_C const RArray& CCertificateValidationWarnings::Warnings() const + { + return iWarnings; + } + +EXPORT_C TInt CCertificateValidationWarnings::CertIndex() const + { + return iCertIndex; + } + +EXPORT_C CCertificateValidationWarnings* CCertificateValidationWarnings::InternalizeL(RReadStream& aStream) + { + // iCertIndex + TInt certIndex = aStream.ReadInt32L(); + + // create a cert warning using the cert index and ref cert + CCertificateValidationWarnings* certWarning = CCertificateValidationWarnings::NewLC(certIndex); + + // iWarnings + TInt32 count = aStream.ReadInt32L(); + for (TInt x=0; x pckg(warning); + aStream.ReadL(pckg); + certWarning->AppendWarningL(warning); + } + + // iCriticalExtsFound + count = aStream.ReadInt32L(); + for (TInt x=0; xDes(); + aStream.ReadL(oidPtr, length); + certWarning->AppendCriticalExtensionWarningL(*oid); + CleanupStack::Pop(oid); + } + + CleanupStack::Pop(certWarning); + return certWarning; + } + +EXPORT_C void CCertificateValidationWarnings::ExternalizeL(RWriteStream& aStream) const + { + // iCertIndex; + aStream.WriteInt32L(iCertIndex); + + // iWarnings; + TInt x; + aStream.WriteInt32L(iWarnings.Count()); + for (x=0; x(iWarnings[x])); + } + + // iCriticalExtsFound; + aStream.WriteInt32L(iCriticalExtsFound.Count()); + for (x=0; x