Transplanting changeset 445614b8b140 (Fix for bug 5329)
/** 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 TASN1EncBase128 class.**/#include "base128enc.h"TASN1EncBase128DER::TASN1EncBase128DER(TUint aInt) : iInt(aInt), iLengthDER(0) { CalculateLengthDER(); }TUint TASN1EncBase128DER::LengthDER() const { return iLengthDER; }void TASN1EncBase128DER::CalculateLengthDER() { iLengthDER = 1; TUint working = iInt; while (working >>= 7) { ++iLengthDER; } }void TASN1EncBase128DER::WriteDERL(TDes8& aBuf, TUint& aPos) const { __ASSERT_DEBUG(aBuf.Length() - aPos >= STATIC_CAST(TUint8, iLengthDER), User::Leave(KErrBadDescriptor)); TInt last = aPos + iLengthDER - 1; TUint working = iInt; for (TUint cursor = last; cursor >= aPos; --cursor) { // Cast takes least significant 8 bits only (actually, we only need 7) aBuf[cursor] = STATIC_CAST(TUint8, working); aBuf[cursor] |= 0x80; // Top bit always set to 1... working >>= 7; } // ...except top bit on last byte is 0 aBuf[last] &= 0x7F; aPos += iLengthDER; }