diff -r 675a964f4eb5 -r 35751d3474b7 cryptoservices/certificateandkeymgmt/inc/asn1dec.h --- a/cryptoservices/certificateandkeymgmt/inc/asn1dec.h Tue Jul 21 01:04:32 2009 +0100 +++ b/cryptoservices/certificateandkeymgmt/inc/asn1dec.h Thu Sep 10 14:01:51 2009 +0300 @@ -1,414 +1,312 @@ -/* -* 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: -* ASN1 decoder -* -*/ - - - - -/** - @file - @publishedAll - @released -*/ - -#ifndef __ASN1DEC_H__ -#define __ASN1DEC_H__ - -#include -#include -#include - -class RInteger; - - -/** - * @publishedAll - * @released - */ -class TASN1DecGeneric - { -public: - IMPORT_C explicit TASN1DecGeneric(const TDesC8& aSource); - IMPORT_C void InitL(); - IMPORT_C TPtrC8 Encoding() const; - IMPORT_C TInt LengthDER() const; - IMPORT_C TPtrC8 GetContentDER(void) const; - IMPORT_C TInt LengthDERContent(void) const; - IMPORT_C TInt LengthDERHeader() const; - IMPORT_C TTagType Tag() const; - IMPORT_C TASN1Class Class() const; -private: - TPtrC8 iEncoding; - TInt iStartOfContents; - TInt iLength; - TTagType iExplicitTag; - TASN1Class iClass; - }; - -/** - * @publishedAll - * @released - */ -class TASN1DecString - { -public: -protected: - IMPORT_C TASN1DecString(const TTagType aTag); - virtual TInt CheckValid(const TDesC8& aSource)=0; - }; - -/** - * @publishedAll - * @released - */ -class TASN1DecBoolean - { -public: - IMPORT_C TASN1DecBoolean(); - IMPORT_C TBool DecodeDERL(const TDesC8& aSource,TInt& aPos); - IMPORT_C TBool DecodeDERL(const TASN1DecGeneric& Source); -private: - }; - -/** - * @publishedAll - * @released - */ -class TASN1DecNull - { -public: - IMPORT_C TASN1DecNull(); - IMPORT_C void DecodeDERL(const TDesC8& aSource,TInt& aPos); - IMPORT_C void DecodeDERL(const TASN1DecGeneric& aSource); - }; - -/** - * @publishedAll - * @released - */ -class TASN1DecEnumerated - { -public: - IMPORT_C TASN1DecEnumerated(void); - }; - -/** - * @publishedAll - * @released - */ -class TASN1DecInteger - { -public: - IMPORT_C TASN1DecInteger(); - IMPORT_C TInt DecodeDERShortL(const TDesC8& aSource,TInt& aPos); - IMPORT_C TInt DecodeDERShortL(const TASN1DecGeneric& aSource); - IMPORT_C RInteger DecodeDERLongL(const TDesC8& aSource,TInt& aPos); - IMPORT_C RInteger DecodeDERLongL(const TASN1DecGeneric& aSource); - }; - -const TInt KNumberOfIDs=15; - -/** - * @publishedAll - * @released - */ -class TASN1DecObjectIdentifier - { -public: - IMPORT_C TASN1DecObjectIdentifier(); - IMPORT_C HBufC* DecodeDERL(const TDesC8& aSource,TInt& aPos); - IMPORT_C HBufC* DecodeDERL(const TASN1DecGeneric& aSource); -private: - TInt DecodeContentsL(TFixedArray& aOID, const TDesC8& aSource); - }; - -/** - * @publishedAll - * @released - */ -class TASN1DecSet - { -public: - IMPORT_C TASN1DecSet(); - IMPORT_C CArrayPtrFlat* NewDERLC(const TDesC8& aSource); - IMPORT_C CArrayPtrFlat* DecodeDERLC(const TDesC8& aSource,TInt& aPos); - IMPORT_C CArrayPtrFlat* DecodeDERLC(const TASN1DecGeneric& aSource); - IMPORT_C CArrayPtrFlat* DecodeDERLC(const TDesC8& aSource,TInt& aPos, TInt aMin, TInt aMax); - IMPORT_C CArrayPtrFlat* DecodeDERLC(const TASN1DecGeneric& aSource, TInt aMin, TInt aMax); -protected: - /** @internalComponent */ - void DecodeContentsL(const TDesC8& aSource, TInt& aPos, CArrayPtrFlat& aDest); - /** @internalComponent */ - static void CleanupSet(TAny* aArray); - }; - -/** - * @publishedAll - * @released - */ -class TASN1DecGraphicString - { -public: - IMPORT_C TASN1DecGraphicString(); - IMPORT_C HBufC* DecodeDERL(const TDesC8& aSource,TInt& aPos); -protected: - IMPORT_C TInt CheckValid(const TDesC8& aSource); -private: - HBufC* DecodeContentsL(const TDesC8& aSource); - }; - -/** - * @publishedAll - * @released - */ -class TASN1DecVisibleString - { -public: - IMPORT_C TASN1DecVisibleString(void); - IMPORT_C HBufC* DecodeDERL(const TDesC8& aSource,TInt& aPos); -protected: - IMPORT_C TInt CheckValid(const TDesC8& aSource); -private: - HBufC* DecodeContentsL(const TDesC8& aSource); - }; - -/** - * @publishedAll - * @released - */ -class TASN1DecGeneralizedTime - { -public: - IMPORT_C TASN1DecGeneralizedTime(); - IMPORT_C TTime DecodeDERL(const TDesC8& aSource, TInt& aPos); - IMPORT_C TTime DecodeDERL(const TASN1DecGeneric& aGen); -private: - TTime GetTimeL(const TDesC8& aSource); - }; - -/** - * @publishedAll - * @released - */ -class TASN1DecUTCTime - { -public: - IMPORT_C TASN1DecUTCTime(); - IMPORT_C TTime DecodeDERL(const TASN1DecGeneric& aGen); - IMPORT_C TTime DecodeDERL(const TDesC8& aSource, TInt& aPos); -private: - TTime GetTimeL(const TDesC8& aSource); - }; - -/** - * @publishedAll - * @released - */ -class TASN1DecBitString - { -public: - IMPORT_C TASN1DecBitString(); - IMPORT_C HBufC8* DecodeDERL(const TDesC8& aSource,TInt& aPos); - IMPORT_C HBufC8* DecodeDERL(const TASN1DecGeneric& aSource); - //we need the next 2 functions because many standards encode things as bit - //strings - IMPORT_C HBufC8* ExtractOctetStringL(const TDesC8& aSource,TInt& aPos); - IMPORT_C HBufC8* ExtractOctetStringL(const TASN1DecGeneric& aSource); - }; - -/** - * @publishedAll - * @released - */ -class TASN1DecIA5String - { -public: - IMPORT_C TASN1DecIA5String(); - IMPORT_C HBufC* DecodeDERL(const TDesC8& aSource,TInt& aPos); - IMPORT_C HBufC* DecodeDERL(const TASN1DecGeneric& aSource); -protected: - IMPORT_C TInt CheckValid(const TDesC8& aSource); -private: - HBufC* DecodeContentsL(const TDesC8& aSource); - }; - -/** - * @internalComponent - * @released - */ -class TASN1DecGenericString - { -public: - TASN1DecGenericString(); - TInt GetContentDER(TDes8& aContent); - TInt Length(void); -private: - }; - -/** - * @publishedAll - * @released - */ -class TASN1DecUTF8String - { -public: - IMPORT_C TASN1DecUTF8String(); - IMPORT_C HBufC* DecodeDERL(const TDesC8& aSource,TInt& aPos); - IMPORT_C HBufC* DecodeDERL(const TASN1DecGeneric& aSource); -protected: - IMPORT_C TInt CheckValid(const TDesC8& aSource); -private: - HBufC* DecodeContentsL(const TDesC8& aSource); - }; - -/** - * @publishedAll - * @released - */ -class TASN1DecGeneralString - { -public: - IMPORT_C TASN1DecGeneralString(); - IMPORT_C HBufC* DecodeDERL(const TDesC8& aSource,TInt& aPos); -protected: - IMPORT_C TInt CheckValid(const TDesC8& aSource); -private: - HBufC* DecodeContentsL(const TDesC8& aSource); - }; - -/** - * @publishedAll - * @released - */ -class TASN1DecOctetString - { -public: - IMPORT_C TASN1DecOctetString(); - IMPORT_C HBufC8* DecodeDERL(const TDesC8& aSource,TInt& aPos); - IMPORT_C HBufC8* DecodeDERL(const TASN1DecGeneric& aSource); -protected: - IMPORT_C TInt CheckValid(const TDesC8& aSource); - }; - -/** - * @publishedAll - * @released - */ -class TASN1DecNumericString - { -public: - IMPORT_C TASN1DecNumericString(); - IMPORT_C HBufC* DecodeDERL(const TDesC8& aSource,TInt& aPos); -protected: - /** @internalComponent */ - TInt CheckValid(const TDesC8& aSource); -private: - HBufC* DecodeContentsL(const TDesC8& aSource); - }; - -/** - * @publishedAll - * @released - */ -class TASN1DecVideotexString - { -public: - IMPORT_C TASN1DecVideotexString(); - IMPORT_C HBufC* DecodeDERL(const TDesC8& aSource,TInt& aPos); -protected: - IMPORT_C TInt CheckValid(const TDesC8& aSource); -private: - HBufC* DecodeContentsL(const TDesC8& aSource); - }; - -/** - * @publishedAll - * @released - */ -class TASN1DecPrintableString - { -public: - IMPORT_C TASN1DecPrintableString(); - IMPORT_C HBufC* DecodeDERL(const TDesC8& aSource,TInt& aPos); - IMPORT_C HBufC* DecodeDERL(const TASN1DecGeneric& aSource); -protected: - /** @internalComponent */ - TInt CheckValid(const TDesC8& aSource); -private: - HBufC* DecodeContentsL(const TDesC8& aSource); - }; - -/** - * Class used for decoding Teletex strings. - * The 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. - * As this is non-destructive, the original data can be retrieved by performing - * a Copy to an 8-bit descriptor. - * @publishedAll - * @released - */ -class TASN1DecTeletexString - { -public: - IMPORT_C TASN1DecTeletexString(); - IMPORT_C HBufC* DecodeDERL(const TDesC8& aSource,TInt& aPos); - IMPORT_C HBufC* DecodeDERL(const TASN1DecGeneric& Source); -protected: - IMPORT_C TInt CheckValid(const TDesC8& aSource); -private: - HBufC* DecodeContentsL(const TDesC8& aSource); - }; - -/** -Class used for decoding ASN.1 BMP strings. -@publishedAll -@released - */ -class TASN1DecBMPString - { -public: - IMPORT_C TASN1DecBMPString(); - IMPORT_C HBufC* DecodeDERL(const TDesC8& aSource,TInt& aPos); - IMPORT_C HBufC* DecodeDERL(const TASN1DecGeneric& aSource); -protected: - IMPORT_C TInt CheckValid(const TDesC8& aSource); -private: - HBufC* DecodeContentsL(const TDesC8& aSource); - }; - -/** - * @publishedAll - * @released - */ -class TASN1DecSequence - { -public: - IMPORT_C TASN1DecSequence(); - IMPORT_C CArrayPtrFlat* DecodeDERLC(const TDesC8& aSource,TInt& aPos); - IMPORT_C CArrayPtrFlat* DecodeDERLC(const TASN1DecGeneric& aSource); - IMPORT_C CArrayPtrFlat* DecodeDERLC(const TDesC8& aSource,TInt& aPos, TInt aMin, TInt aMax); - IMPORT_C CArrayPtrFlat* DecodeDERLC(const TASN1DecGeneric& aSource, TInt aMin, TInt aMax); -protected: - /** @internalComponent */ - void DecodeContentsL(const TDesC8& aSource, CArrayPtrFlat& aDest); - /** @internalComponent */ - static void CleanupSequence(TAny* aArray); - }; - -#endif +/* +* 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: +* ASN1 decoder +* +*/ + + +/** + @file + @publishedAll + @released +*/ + +#ifndef __ASN1DEC_H__ +#define __ASN1DEC_H__ + +#include +#include +#include + +class RInteger; + + +class TASN1DecGeneric + { +public: + IMPORT_C explicit TASN1DecGeneric(const TDesC8& aSource); + IMPORT_C void InitL(); + IMPORT_C TPtrC8 Encoding() const; + IMPORT_C TInt LengthDER() const; + IMPORT_C TPtrC8 GetContentDER(void) const; + IMPORT_C TInt LengthDERContent(void) const; + IMPORT_C TInt LengthDERHeader() const; + IMPORT_C TTagType Tag() const; + IMPORT_C TASN1Class Class() const; +private: + TPtrC8 iEncoding; + TInt iStartOfContents; + TInt iLength; + TTagType iExplicitTag; + TASN1Class iClass; + }; + +class TASN1DecString + { +public: +protected: + IMPORT_C TASN1DecString(const TTagType aTag); + virtual TInt CheckValid(const TDesC8& aSource)=0; + }; + +class TASN1DecBoolean + { +public: + IMPORT_C TASN1DecBoolean(); + IMPORT_C TBool DecodeDERL(const TDesC8& aSource,TInt& aPos); + IMPORT_C TBool DecodeDERL(const TASN1DecGeneric& Source); +private: + }; + +class TASN1DecNull + { +public: + IMPORT_C TASN1DecNull(); + IMPORT_C void DecodeDERL(const TDesC8& aSource,TInt& aPos); + IMPORT_C void DecodeDERL(const TASN1DecGeneric& aSource); + }; + +class TASN1DecEnumerated + { +public: + IMPORT_C TASN1DecEnumerated(void); + }; + +class TASN1DecInteger + { +public: + IMPORT_C TASN1DecInteger(); + IMPORT_C TInt DecodeDERShortL(const TDesC8& aSource,TInt& aPos); + IMPORT_C TInt DecodeDERShortL(const TASN1DecGeneric& aSource); + IMPORT_C RInteger DecodeDERLongL(const TDesC8& aSource,TInt& aPos); + IMPORT_C RInteger DecodeDERLongL(const TASN1DecGeneric& aSource); + }; + +const TInt KNumberOfIDs=15; + +class TASN1DecObjectIdentifier + { +public: + IMPORT_C TASN1DecObjectIdentifier(); + IMPORT_C HBufC* DecodeDERL(const TDesC8& aSource,TInt& aPos); + IMPORT_C HBufC* DecodeDERL(const TASN1DecGeneric& aSource); +private: + TInt DecodeContentsL(TFixedArray& aOID, const TDesC8& aSource); + }; + +class TASN1DecSet + { +public: + IMPORT_C TASN1DecSet(); + IMPORT_C CArrayPtrFlat* NewDERLC(const TDesC8& aSource); + IMPORT_C CArrayPtrFlat* DecodeDERLC(const TDesC8& aSource,TInt& aPos); + IMPORT_C CArrayPtrFlat* DecodeDERLC(const TASN1DecGeneric& aSource); + IMPORT_C CArrayPtrFlat* DecodeDERLC(const TDesC8& aSource,TInt& aPos, TInt aMin, TInt aMax); + IMPORT_C CArrayPtrFlat* DecodeDERLC(const TASN1DecGeneric& aSource, TInt aMin, TInt aMax); +protected: + /** @internalComponent */ + void DecodeContentsL(const TDesC8& aSource, TInt& aPos, CArrayPtrFlat& aDest); + /** @internalComponent */ + static void CleanupSet(TAny* aArray); + }; + +class TASN1DecGraphicString + { +public: + IMPORT_C TASN1DecGraphicString(); + IMPORT_C HBufC* DecodeDERL(const TDesC8& aSource,TInt& aPos); +protected: + IMPORT_C TInt CheckValid(const TDesC8& aSource); +private: + HBufC* DecodeContentsL(const TDesC8& aSource); + }; + +class TASN1DecVisibleString + { +public: + IMPORT_C TASN1DecVisibleString(void); + IMPORT_C HBufC* DecodeDERL(const TDesC8& aSource,TInt& aPos); +protected: + IMPORT_C TInt CheckValid(const TDesC8& aSource); +private: + HBufC* DecodeContentsL(const TDesC8& aSource); + }; + +class TASN1DecGeneralizedTime + { +public: + IMPORT_C TASN1DecGeneralizedTime(); + IMPORT_C TTime DecodeDERL(const TDesC8& aSource, TInt& aPos); + IMPORT_C TTime DecodeDERL(const TASN1DecGeneric& aGen); +private: + TTime GetTimeL(const TDesC8& aSource); + }; + +class TASN1DecUTCTime + { +public: + IMPORT_C TASN1DecUTCTime(); + IMPORT_C TTime DecodeDERL(const TASN1DecGeneric& aGen); + IMPORT_C TTime DecodeDERL(const TDesC8& aSource, TInt& aPos); +private: + TTime GetTimeL(const TDesC8& aSource); + }; + +class TASN1DecBitString + { +public: + IMPORT_C TASN1DecBitString(); + IMPORT_C HBufC8* DecodeDERL(const TDesC8& aSource,TInt& aPos); + IMPORT_C HBufC8* DecodeDERL(const TASN1DecGeneric& aSource); + //we need the next 2 functions because many standards encode things as bit + //strings + IMPORT_C HBufC8* ExtractOctetStringL(const TDesC8& aSource,TInt& aPos); + IMPORT_C HBufC8* ExtractOctetStringL(const TASN1DecGeneric& aSource); + }; + +class TASN1DecIA5String + { +public: + IMPORT_C TASN1DecIA5String(); + IMPORT_C HBufC* DecodeDERL(const TDesC8& aSource,TInt& aPos); + IMPORT_C HBufC* DecodeDERL(const TASN1DecGeneric& aSource); +protected: + IMPORT_C TInt CheckValid(const TDesC8& aSource); +private: + HBufC* DecodeContentsL(const TDesC8& aSource); + }; + + +class TASN1DecUTF8String + { +public: + IMPORT_C TASN1DecUTF8String(); + IMPORT_C HBufC* DecodeDERL(const TDesC8& aSource,TInt& aPos); + IMPORT_C HBufC* DecodeDERL(const TASN1DecGeneric& aSource); +protected: + IMPORT_C TInt CheckValid(const TDesC8& aSource); +private: + HBufC* DecodeContentsL(const TDesC8& aSource); + }; + +class TASN1DecGeneralString + { +public: + IMPORT_C TASN1DecGeneralString(); + IMPORT_C HBufC* DecodeDERL(const TDesC8& aSource,TInt& aPos); +protected: + IMPORT_C TInt CheckValid(const TDesC8& aSource); +private: + HBufC* DecodeContentsL(const TDesC8& aSource); + }; + +class TASN1DecOctetString + { +public: + IMPORT_C TASN1DecOctetString(); + IMPORT_C HBufC8* DecodeDERL(const TDesC8& aSource,TInt& aPos); + IMPORT_C HBufC8* DecodeDERL(const TASN1DecGeneric& aSource); +protected: + IMPORT_C TInt CheckValid(const TDesC8& aSource); + }; + +class TASN1DecNumericString + { +public: + IMPORT_C TASN1DecNumericString(); + IMPORT_C HBufC* DecodeDERL(const TDesC8& aSource,TInt& aPos); +protected: + /** @internalComponent */ + TInt CheckValid(const TDesC8& aSource); +private: + HBufC* DecodeContentsL(const TDesC8& aSource); + }; + +class TASN1DecVideotexString + { +public: + IMPORT_C TASN1DecVideotexString(); + IMPORT_C HBufC* DecodeDERL(const TDesC8& aSource,TInt& aPos); +protected: + IMPORT_C TInt CheckValid(const TDesC8& aSource); +private: + HBufC* DecodeContentsL(const TDesC8& aSource); + }; + +class TASN1DecPrintableString + { +public: + IMPORT_C TASN1DecPrintableString(); + IMPORT_C HBufC* DecodeDERL(const TDesC8& aSource,TInt& aPos); + IMPORT_C HBufC* DecodeDERL(const TASN1DecGeneric& aSource); +protected: + /** @internalComponent */ + TInt CheckValid(const TDesC8& aSource); +private: + HBufC* DecodeContentsL(const TDesC8& aSource); + }; + +/** + * Class used for decoding Teletex strings. + * The 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. + * As this is non-destructive, the original data can be retrieved by performing + * a Copy to an 8-bit descriptor. + */ +class TASN1DecTeletexString + { +public: + IMPORT_C TASN1DecTeletexString(); + IMPORT_C HBufC* DecodeDERL(const TDesC8& aSource,TInt& aPos); + IMPORT_C HBufC* DecodeDERL(const TASN1DecGeneric& Source); +protected: + IMPORT_C TInt CheckValid(const TDesC8& aSource); +private: + HBufC* DecodeContentsL(const TDesC8& aSource); + }; + +/** +Class used for decoding ASN.1 BMP strings. + */ +class TASN1DecBMPString + { +public: + IMPORT_C TASN1DecBMPString(); + IMPORT_C HBufC* DecodeDERL(const TDesC8& aSource,TInt& aPos); + IMPORT_C HBufC* DecodeDERL(const TASN1DecGeneric& aSource); +protected: + IMPORT_C TInt CheckValid(const TDesC8& aSource); +private: + HBufC* DecodeContentsL(const TDesC8& aSource); + }; + +class TASN1DecSequence + { +public: + IMPORT_C TASN1DecSequence(); + IMPORT_C CArrayPtrFlat* DecodeDERLC(const TDesC8& aSource,TInt& aPos); + IMPORT_C CArrayPtrFlat* DecodeDERLC(const TASN1DecGeneric& aSource); + IMPORT_C CArrayPtrFlat* DecodeDERLC(const TDesC8& aSource,TInt& aPos, TInt aMin, TInt aMax); + IMPORT_C CArrayPtrFlat* DecodeDERLC(const TASN1DecGeneric& aSource, TInt aMin, TInt aMax); +protected: + /** @internalComponent */ + void DecodeContentsL(const TDesC8& aSource, CArrayPtrFlat& aDest); + /** @internalComponent */ + static void CleanupSequence(TAny* aArray); + }; + +#endif