diff -r 675a964f4eb5 -r 35751d3474b7 cryptoservices/certificateandkeymgmt/asn1/bigintenc.cpp --- a/cryptoservices/certificateandkeymgmt/asn1/bigintenc.cpp Tue Jul 21 01:04:32 2009 +0100 +++ b/cryptoservices/certificateandkeymgmt/asn1/bigintenc.cpp Thu Sep 10 14:01:51 2009 +0300 @@ -1,117 +1,117 @@ -/* -* Copyright (c) 2001-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: -* Implementation for the class encoding Big Integers in ASN1 DER -* -*/ - - -#include - -#include - - -EXPORT_C CASN1EncBigInt* CASN1EncBigInt::NewLC(const TInteger& aInteger) - { - CASN1EncBigInt* self = new (ELeave) CASN1EncBigInt(); - CleanupStack::PushL(self); - self->ConstructL(aInteger); - return self; - } - -EXPORT_C CASN1EncBigInt* CASN1EncBigInt::NewL(const TInteger& aInteger) - { - CASN1EncBigInt* self = NewLC(aInteger); - CleanupStack::Pop(self); - return self; - } - - -EXPORT_C CASN1EncBigInt::~CASN1EncBigInt() - { - delete iContents; - } - - -CASN1EncBigInt::CASN1EncBigInt() -: CASN1EncPrimitive(EASN1Integer) - { - } - -void CASN1EncBigInt::ConstructL(const TInteger& aInteger) -{ - iContents = aInteger.BufferLC(); - - CleanupStack::Pop(); // We take ownership of the contents - - // May wish to skip leading byte(s) if they're unnecessary - use - // iWriteContents to point to the minimal part of Contents, that we'll actually use. - TInt last = iContents->Length() - 1; - TInt first = 0; -// if (aInteger >= 0) // Only signed integers now... -// { - while (first < last - && (*iContents)[first] == 0 - && !((*iContents)[first + 1] & 0x80)) - { - ++first; - } -// } -/* else - { - while (first < last - && (*iContents)[first] == 0xFF - && (*iContents)[first + 1] & 0x80) - { - ++first; - } - } -*/ - //to encode positive integers correctly add a leading zero byte - //if the first bit is set DEF038956 - if (iContents->Length() != 0) - { - if ((*iContents)[first] & 0x80) - { - _LIT8(KPadZero, "\0"); - TPtr8 ptr = iContents->Des(); - //check if the buffer does not have enough space to insert a byte - if (ptr.Length() == ptr.MaxLength()) - { - iContents = iContents->ReAllocL(iContents->Length() + 1); - TPtr8 reallocptr = iContents->Des(); - reallocptr.Insert(0, KPadZero); - } - else - ptr.Insert(0, KPadZero); - } - } - - - iWriteContents.Set(iContents->Mid(first)); - - CASN1EncPrimitive::ConstructL(); - } - - -void CASN1EncBigInt::CalculateContentsLengthDER() - { - iContentsLengthDER = iWriteContents.Length(); - } - - -void CASN1EncBigInt::WriteContentsDERL(TDes8& aBuf) const - { - aBuf.Copy(iWriteContents); - } +/* +* Copyright (c) 2001-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: +* Implementation for the class encoding Big Integers in ASN1 DER +* +*/ + + +#include + +#include + + +EXPORT_C CASN1EncBigInt* CASN1EncBigInt::NewLC(const TInteger& aInteger) + { + CASN1EncBigInt* self = new (ELeave) CASN1EncBigInt(); + CleanupStack::PushL(self); + self->ConstructL(aInteger); + return self; + } + +EXPORT_C CASN1EncBigInt* CASN1EncBigInt::NewL(const TInteger& aInteger) + { + CASN1EncBigInt* self = NewLC(aInteger); + CleanupStack::Pop(self); + return self; + } + + +EXPORT_C CASN1EncBigInt::~CASN1EncBigInt() + { + delete iContents; + } + + +CASN1EncBigInt::CASN1EncBigInt() +: CASN1EncPrimitive(EASN1Integer) + { + } + +void CASN1EncBigInt::ConstructL(const TInteger& aInteger) +{ + iContents = aInteger.BufferLC(); + + CleanupStack::Pop(); // We take ownership of the contents + + // May wish to skip leading byte(s) if they're unnecessary - use + // iWriteContents to point to the minimal part of Contents, that we'll actually use. + TInt last = iContents->Length() - 1; + TInt first = 0; +// if (aInteger >= 0) // Only signed integers now... +// { + while (first < last + && (*iContents)[first] == 0 + && !((*iContents)[first + 1] & 0x80)) + { + ++first; + } +// } +/* else + { + while (first < last + && (*iContents)[first] == 0xFF + && (*iContents)[first + 1] & 0x80) + { + ++first; + } + } +*/ + //to encode positive integers correctly add a leading zero byte + //if the first bit is set DEF038956 + if (iContents->Length() != 0) + { + if ((*iContents)[first] & 0x80) + { + _LIT8(KPadZero, "\0"); + TPtr8 ptr = iContents->Des(); + //check if the buffer does not have enough space to insert a byte + if (ptr.Length() == ptr.MaxLength()) + { + iContents = iContents->ReAllocL(iContents->Length() + 1); + TPtr8 reallocptr = iContents->Des(); + reallocptr.Insert(0, KPadZero); + } + else + ptr.Insert(0, KPadZero); + } + } + + + iWriteContents.Set(iContents->Mid(first)); + + CASN1EncPrimitive::ConstructL(); + } + + +void CASN1EncBigInt::CalculateContentsLengthDER() + { + iContentsLengthDER = iWriteContents.Length(); + } + + +void CASN1EncBigInt::WriteContentsDERL(TDes8& aBuf) const + { + aBuf.Copy(iWriteContents); + }