diff -r 675a964f4eb5 -r 35751d3474b7 securityanddataprivacytools/securitytools/certapp/encdec/certinfo.cpp --- a/securityanddataprivacytools/securitytools/certapp/encdec/certinfo.cpp Tue Jul 21 01:04:32 2009 +0100 +++ b/securityanddataprivacytools/securitytools/certapp/encdec/certinfo.cpp Thu Sep 10 14:01:51 2009 +0300 @@ -1,277 +1,277 @@ -/* -* Copyright (c) 2008-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 "certinfo.h" -#include "stringconv.h" -#define KReadOnlyFlagMask 128 - -static const EnumEntry enumDetailsForTBool[] = -{ - { "false", false}, - { "true", true}, - { "EFalse", false}, - { "ETrue", true}, - { 0,0 } -}; - - -// Enum values for TCertificateFormat -static const EnumEntry enumDetailsForTCertificateFormat[] = -{ - { "EX509Certificate", EX509Certificate}, - { "EWTLSCertificate", EWTLSCertificate}, - { "EX968Certificate", EX968Certificate}, - { "EUnknownCertificate", EUnknownCertificate}, - { "EX509CertificateUrl", EX509CertificateUrl}, - { "EWTLSCertificateUrl", EWTLSCertificateUrl}, - { "EX968CertificateUrl", EX968CertificateUrl}, - { 0,0 } -}; - - -static const EnumEntry enumDetailsForTCertificateOwnerType[] = -{ - { "ECACertificate", ECACertificate}, - { "EUserCertificate", EUserCertificate}, - { "EPeerCertificate", EPeerCertificate}, - { 0,0 } -}; - - -CertInfo::CertInfo(bool aSwiMode) - : iTmpCombinedDeletableAndFormat("Deletable/Format"), - iDeletable("Deletable", enumDetailsForTBool, aSwiMode), - iFormat("Format", enumDetailsForTCertificateFormat), - iSize("Size", true), // Only supported as a comment in human mode - iLabel("Label"), - iReadCertificateId("CertId(read)", true), - iWriteCertificateId("CertId(write)", false), - iCertificateOwnerType("CertOwnerType", enumDetailsForTCertificateOwnerType), - iSubjectKeyId("SubjectKeyId"), iIssuerKeyId("IssuerKeyId"), - iSwiMode(aSwiMode) - -{ - // We only need to initialise EncDecObject members which wrap non-class types - iTmpCombinedDeletableAndFormat.Value() = 0; - iSize.Value() = 0; - iReadCertificateId.Value() = 0; - iWriteCertificateId.Value() = 0; - iCertificateOwnerType.Value() = 0; -} - - -void CertInfo::Encode(REncodeWriteStream &aWriteStream) -{ - if(aWriteStream.HumanReadable()) - { - aWriteStream << iDeletable; - aWriteStream << iFormat; - } - else - { - // Write the binary field containing both format and deletable - // flag. - // - // iDeletable flag is the significant digit in order to store - // the flag without changing the externalized record - // format. The value is OPPOSITE for backward compatibility - iTmpCombinedDeletableAndFormat.Value() = static_cast (iFormat.Value() | (iDeletable.Value() ? 0 : KReadOnlyFlagMask)); - aWriteStream << iTmpCombinedDeletableAndFormat; - } - - - aWriteStream << iSize; - if(aWriteStream.HumanReadable()) - { - // In human readable form the label has already been written as part of the item header - // Write out certificate ID we read in - aWriteStream << iReadCertificateId; - } - else - { - aWriteStream << iLabel; - aWriteStream << iWriteCertificateId; - } - - - aWriteStream << iCertificateOwnerType; - aWriteStream << iSubjectKeyId; - aWriteStream << iIssuerKeyId; -} - - -void CertInfo::Decode(RDecodeReadStream &aReadStream) -{ - if(aReadStream.HumanReadable()) - { - // Read the Deletable and Format fields - aReadStream >> iDeletable; - aReadStream >> iFormat; - } - else - { - // Read the binary field containing both format and deletable - // flag. - // - // iDeletable flag is the significant digit in order to store - // the flag without changing the externalized record - // format. The value is OPPOSITE for backward compatibility - aReadStream >> iTmpCombinedDeletableAndFormat; - - iDeletable.SetValue((iTmpCombinedDeletableAndFormat.Value() & KReadOnlyFlagMask) == 0); - iFormat.SetValue((iTmpCombinedDeletableAndFormat.Value() & ~KReadOnlyFlagMask)); - } - - aReadStream >> iSize; - if(!aReadStream.HumanReadable()) - { - aReadStream >> iLabel; - } - aReadStream >> iReadCertificateId; - aReadStream >> iCertificateOwnerType; - - - if(!aReadStream.HumanReadable() || (aReadStream.PeakToken() == iSubjectKeyId.Name())) - { - // Either in binary mode, or the next token is SubjectKeyId, so read the field - aReadStream >> iSubjectKeyId; - } - else - { - // In human mode and field not present, so set it to auto - iSubjectKeyId.Value().iAutoKey = true; - iSubjectKeyId.Value().iHash.SetLength(0); - } - - if(!aReadStream.HumanReadable() || (aReadStream.PeakToken() == iIssuerKeyId.Name())) - { - // Either in binary mode, or the next token is IssuerKeyId, so read the field - aReadStream >> iIssuerKeyId; - } - else - { - // In human mode and field not present, so set it to auto - iIssuerKeyId.Value().iAutoKey = true; - iIssuerKeyId.Value().iHash.SetLength(0); - } -} - - -TUint32 CertInfo::CertSize() const -{ - return iSize.Value(); -} - -void CertInfo::SetCertSize(TUint32 aSize) -{ - iSize.Value() = aSize; -} - -const TCertLabel &CertInfo::Label() const -{ - return iLabel.Value(); -} - -TCertLabel &CertInfo::Label() -{ - return iLabel.Value(); -} - -TCertificateFormat CertInfo::CertificateFormat() const -{ - return (TCertificateFormat)iFormat.Value(); -} - - -KeyIdentifierObject &CertInfo::SubjectKeyId() -{ - return iSubjectKeyId.Value(); -} - -const KeyIdentifierObject &CertInfo::SubjectKeyId() const -{ - return iSubjectKeyId.Value(); -} - -KeyIdentifierObject &CertInfo::IssuerKeyId() -{ - return iIssuerKeyId.Value(); -} - -#ifdef _BullseyeCoverage -#pragma BullseyeCoverage off -#endif -const KeyIdentifierObject &CertInfo::IssuerKeyId() const -{ - return iIssuerKeyId.Value(); -} -#ifdef _BullseyeCoverage -#pragma BullseyeCoverage restore -#endif - -TUint32 CertInfo::OutputCertificateId() const -{ - return iWriteCertificateId.Value(); -} - - -void CertInfo::SetOutputCertificateId(TUint32 aId) -{ - iWriteCertificateId.Value() = aId; -} - - - - -// -// TCertLabel -// -void EncodeHuman(REncodeWriteStream& aStream,const TCertLabel &aLabel) -{ - // Compress the internal UTF-16 to human readable UTF-8 - TInt outputBytes = 0; - TUint8 *outBuf = cstrFromUtf16(aLabel.Ptr(), aLabel.Length(), outputBytes); - - aStream.WriteByte('"'); - aStream.WriteQuotedUtf8(outBuf, outputBytes); - aStream.WriteByte('"'); - - delete [] outBuf; -} -void DecodeHuman(RDecodeReadStream& aStream,TCertLabel &aLabel) -{ - aStream.ReadNextToken(); - - // Expand UTF-8 into internal UTF-16LE representation - TInt outputWords = 0; - TText *outputBuf = utf16FromUtf8((const TUint8 *)aStream.Token().data(), aStream.Token().size(), outputWords); - if(outputWords > aLabel.MaxLength()) - { - dbg << Log::Indent() << "String too long" << Log::Endl(); - FatalError(); - } - - memcpy((void *)aLabel.Ptr(), outputBuf, outputWords*2); - aLabel.SetLength(outputWords); - delete [] outputBuf; -} - - - - -// End of file +/* +* Copyright (c) 2008-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 "certinfo.h" +#include "stringconv.h" +#define KReadOnlyFlagMask 128 + +static const EnumEntry enumDetailsForTBool[] = +{ + { "false", false}, + { "true", true}, + { "EFalse", false}, + { "ETrue", true}, + { 0,0 } +}; + + +// Enum values for TCertificateFormat +static const EnumEntry enumDetailsForTCertificateFormat[] = +{ + { "EX509Certificate", EX509Certificate}, + { "EWTLSCertificate", EWTLSCertificate}, + { "EX968Certificate", EX968Certificate}, + { "EUnknownCertificate", EUnknownCertificate}, + { "EX509CertificateUrl", EX509CertificateUrl}, + { "EWTLSCertificateUrl", EWTLSCertificateUrl}, + { "EX968CertificateUrl", EX968CertificateUrl}, + { 0,0 } +}; + + +static const EnumEntry enumDetailsForTCertificateOwnerType[] = +{ + { "ECACertificate", ECACertificate}, + { "EUserCertificate", EUserCertificate}, + { "EPeerCertificate", EPeerCertificate}, + { 0,0 } +}; + + +CertInfo::CertInfo(bool aSwiMode) + : iTmpCombinedDeletableAndFormat("Deletable/Format"), + iDeletable("Deletable", enumDetailsForTBool, aSwiMode), + iFormat("Format", enumDetailsForTCertificateFormat), + iSize("Size", true), // Only supported as a comment in human mode + iLabel("Label"), + iReadCertificateId("CertId(read)", true), + iWriteCertificateId("CertId(write)", false), + iCertificateOwnerType("CertOwnerType", enumDetailsForTCertificateOwnerType), + iSubjectKeyId("SubjectKeyId"), iIssuerKeyId("IssuerKeyId"), + iSwiMode(aSwiMode) + +{ + // We only need to initialise EncDecObject members which wrap non-class types + iTmpCombinedDeletableAndFormat.Value() = 0; + iSize.Value() = 0; + iReadCertificateId.Value() = 0; + iWriteCertificateId.Value() = 0; + iCertificateOwnerType.Value() = 0; +} + + +void CertInfo::Encode(REncodeWriteStream &aWriteStream) +{ + if(aWriteStream.HumanReadable()) + { + aWriteStream << iDeletable; + aWriteStream << iFormat; + } + else + { + // Write the binary field containing both format and deletable + // flag. + // + // iDeletable flag is the significant digit in order to store + // the flag without changing the externalized record + // format. The value is OPPOSITE for backward compatibility + iTmpCombinedDeletableAndFormat.Value() = static_cast (iFormat.Value() | (iDeletable.Value() ? 0 : KReadOnlyFlagMask)); + aWriteStream << iTmpCombinedDeletableAndFormat; + } + + + aWriteStream << iSize; + if(aWriteStream.HumanReadable()) + { + // In human readable form the label has already been written as part of the item header + // Write out certificate ID we read in + aWriteStream << iReadCertificateId; + } + else + { + aWriteStream << iLabel; + aWriteStream << iWriteCertificateId; + } + + + aWriteStream << iCertificateOwnerType; + aWriteStream << iSubjectKeyId; + aWriteStream << iIssuerKeyId; +} + + +void CertInfo::Decode(RDecodeReadStream &aReadStream) +{ + if(aReadStream.HumanReadable()) + { + // Read the Deletable and Format fields + aReadStream >> iDeletable; + aReadStream >> iFormat; + } + else + { + // Read the binary field containing both format and deletable + // flag. + // + // iDeletable flag is the significant digit in order to store + // the flag without changing the externalized record + // format. The value is OPPOSITE for backward compatibility + aReadStream >> iTmpCombinedDeletableAndFormat; + + iDeletable.SetValue((iTmpCombinedDeletableAndFormat.Value() & KReadOnlyFlagMask) == 0); + iFormat.SetValue((iTmpCombinedDeletableAndFormat.Value() & ~KReadOnlyFlagMask)); + } + + aReadStream >> iSize; + if(!aReadStream.HumanReadable()) + { + aReadStream >> iLabel; + } + aReadStream >> iReadCertificateId; + aReadStream >> iCertificateOwnerType; + + + if(!aReadStream.HumanReadable() || (aReadStream.PeakToken() == iSubjectKeyId.Name())) + { + // Either in binary mode, or the next token is SubjectKeyId, so read the field + aReadStream >> iSubjectKeyId; + } + else + { + // In human mode and field not present, so set it to auto + iSubjectKeyId.Value().iAutoKey = true; + iSubjectKeyId.Value().iHash.SetLength(0); + } + + if(!aReadStream.HumanReadable() || (aReadStream.PeakToken() == iIssuerKeyId.Name())) + { + // Either in binary mode, or the next token is IssuerKeyId, so read the field + aReadStream >> iIssuerKeyId; + } + else + { + // In human mode and field not present, so set it to auto + iIssuerKeyId.Value().iAutoKey = true; + iIssuerKeyId.Value().iHash.SetLength(0); + } +} + + +TUint32 CertInfo::CertSize() const +{ + return iSize.Value(); +} + +void CertInfo::SetCertSize(TUint32 aSize) +{ + iSize.Value() = aSize; +} + +const TCertLabel &CertInfo::Label() const +{ + return iLabel.Value(); +} + +TCertLabel &CertInfo::Label() +{ + return iLabel.Value(); +} + +TCertificateFormat CertInfo::CertificateFormat() const +{ + return (TCertificateFormat)iFormat.Value(); +} + + +KeyIdentifierObject &CertInfo::SubjectKeyId() +{ + return iSubjectKeyId.Value(); +} + +const KeyIdentifierObject &CertInfo::SubjectKeyId() const +{ + return iSubjectKeyId.Value(); +} + +KeyIdentifierObject &CertInfo::IssuerKeyId() +{ + return iIssuerKeyId.Value(); +} + +#ifdef _BullseyeCoverage +#pragma BullseyeCoverage off +#endif +const KeyIdentifierObject &CertInfo::IssuerKeyId() const +{ + return iIssuerKeyId.Value(); +} +#ifdef _BullseyeCoverage +#pragma BullseyeCoverage restore +#endif + +TUint32 CertInfo::OutputCertificateId() const +{ + return iWriteCertificateId.Value(); +} + + +void CertInfo::SetOutputCertificateId(TUint32 aId) +{ + iWriteCertificateId.Value() = aId; +} + + + + +// +// TCertLabel +// +void EncodeHuman(REncodeWriteStream& aStream,const TCertLabel &aLabel) +{ + // Compress the internal UTF-16 to human readable UTF-8 + TInt outputBytes = 0; + TUint8 *outBuf = cstrFromUtf16(aLabel.Ptr(), aLabel.Length(), outputBytes); + + aStream.WriteByte('"'); + aStream.WriteQuotedUtf8(outBuf, outputBytes); + aStream.WriteByte('"'); + + delete [] outBuf; +} +void DecodeHuman(RDecodeReadStream& aStream,TCertLabel &aLabel) +{ + aStream.ReadNextToken(); + + // Expand UTF-8 into internal UTF-16LE representation + TInt outputWords = 0; + TText *outputBuf = utf16FromUtf8((const TUint8 *)aStream.Token().data(), aStream.Token().size(), outputWords); + if(outputWords > aLabel.MaxLength()) + { + dbg << Log::Indent() << "String too long" << Log::Endl(); + FatalError(); + } + + memcpy((void *)aLabel.Ptr(), outputBuf, outputWords*2); + aLabel.SetLength(outputWords); + delete [] outputBuf; +} + + + + +// End of file