diff -r 641f389e9157 -r a71299154b21 crypto/weakcrypto/source/bigint/rinteger.cpp --- a/crypto/weakcrypto/source/bigint/rinteger.cpp Tue Aug 31 17:00:08 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,254 +0,0 @@ -/* -* Copyright (c) 2003-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 -#include -#include -#include "../common/inlines.h" - - -/** - * Copy constructor - * - * This function performs a shallow copy, - * i.e. the memory holding the integer is not copied. - */ -EXPORT_C RInteger::RInteger(const RInteger& aInteger) - { - *this = aInteger; - } - -/** - * Assignment operator - * - * This function performs a shallow copy, - * i.e. the memory holding the integer is not copied. - */ -EXPORT_C RInteger& RInteger::operator=(const RInteger& aInteger) - { - iSize = aInteger.iSize; - iPtr = aInteger.iPtr; - return *this; - } - - -/** - * Creates a new integer representing 0. - * - * @return An RInteger by value. - */ -EXPORT_C RInteger RInteger::NewL(void) - { - return NewL(TInteger::Zero()); - } - -/** - * Creates a new integer object representing a specified value. - * - * @param aValue A descriptor containing the big-endian binary - * representation of the value. - * @return An RInteger object representing the value. - */ -EXPORT_C RInteger RInteger::NewL(const TDesC8& aValue) - { - RInteger self; - //Construct zero's memory beyond the size of aValue after construction - self.CreateNewL(BytesToWords(aValue.Size())); - self.Construct(aValue); - return self; - } - -/** - * Creates an exact copy of an \c aInteger object. - * - * @param aInteger The integer you wish to copy - * @return An RInteger object representing an exact copy of - * aInteger by value. - */ -EXPORT_C RInteger RInteger::NewL(const TInteger& aInteger) - { - RInteger self; - //don't need to CleanNewL as we'll copy straight from aInteger - self.CreateNewL(aInteger.Size()); - self.Construct(aInteger); - return self; - } - -/** - * Creates a random integer uniformly distributed over [0, 2^aBits]. - * - * @param aBits The number of bits you wish to randomly select. - * @param aAttr Enum specifying whether specific bits in the random number should - * be set. See TRandomAttribute for more information. - * @return A random RInteger object in the range specified. - */ -EXPORT_C RInteger RInteger::NewRandomL(TUint aBits, TRandomAttribute aAttr) - { - RInteger self; - self.CleanNewL(BitsToWords(aBits)); - CleanupStack::PushL(self); - self.RandomizeL(aBits, aAttr); - CleanupStack::Pop(&self); - return self; - } - -/** - * Creates a random integer uniformly distributed over [x | min <= x <= max]. - * - * @param aMin The smallest possible value for the random integer (inclusive). - * @param aMax The largest possible value for the random integer (inclusive). - * @return A random RInteger object in the range specified. - */ -EXPORT_C RInteger RInteger::NewRandomL(const TInteger& aMin, - const TInteger& aMax) - { - RInteger self; - self.CleanNewL(aMax.Size()); - CleanupStack::PushL(self); - self.RandomizeL(aMin, aMax); - CleanupStack::Pop(&self); - return self; - } - -/** - * Finds a random prime integer in the range of [2, 2^aBits]. - * - * This is done by picking a random integer and using that as a starting point - * for a sequential search for a prime. To verify the primality of number, - * this algorithm uses a probablistic primality test. This means that it is - * possible, although extremely improbable, that the number returned is a pseudoprime. - * - * @param aBits The number of bits you wish to randomly select your prime from. - * @param aAttr Enum specifying whether specific bits in the random number should - * be set. See TRandomAttribute for more information. - * @return A random RInteger representing a probable prime (with very high - * probablity) in the range specified. - */ -EXPORT_C RInteger RInteger::NewPrimeL(TUint aBits, TRandomAttribute aAttr) - { - RInteger self; - self.CleanNewL(BitsToWords(aBits)); - CleanupStack::PushL(self); - self.PrimeRandomizeL(aBits, aAttr); - CleanupStack::Pop(&self); - return self; - } - -/** - * Creates a new integer from the value represented by \c aInteger. - * - * @param aInteger A signed word sized integer. - * @return An RInteger representation of aInteger by value. - */ -EXPORT_C RInteger RInteger::NewL(TInt aInteger) - { - RInteger self; - self.CreateNewL(2); - self.Construct(aInteger); - return self; - } - -/** - * Creates a new integer from the value represented by \c aInteger. - * - * @param aInteger An unsigned word sized integer. - * @return An RInteger representation of aInteger by value. - */ -EXPORT_C RInteger RInteger::NewL(TUint aInteger) - { - RInteger self; - self.CreateNewL(2); - self.Construct(aInteger); - return self; - } - -/** - * Creates a new integer with a preallocated internal storage of \c aNumWords all - * initialised to zero. - * - * The resulting RInteger object is logically equivalent to RInteger::NewL(0). - * The only difference is that the internal storage requirements have been - * specified to be larger than the default. This is useful if you are about - * to perform an operation on this integer, that you know the resulting size - * requirements of, and wish to avoid a heap resize. - * - * @param aNumWords The number of words for to preallocated and zero fill. - * @return An RInteger object representing 0 with a preallocated - * zero-filled internal storage of aNumWords. - */ -EXPORT_C RInteger RInteger::NewEmptyL(TUint aNumWords) - { - RInteger self; - self.CleanNewL(aNumWords); - //There's no construct as there isn't anything to do - return self; - } - -/** - * Creates an RInteger object with no associated internal (heap) storage. - * - * All data members are initialised to zero. It is safe (although not strictly necessary) - * to push such an RInteger object onto the CleanupStack. This is useful, for example, if - * you want to pass an RInteger object by reference into a function and have it create - * the representation of the actual integer for you. - * - * Note that performing any operation on such an RInteger object other than the default - * assignment operator or copy constructor will panic your code. - * - * @return A stack based class that has no associated internal storage and thus - * does not represent any number. - */ -EXPORT_C RInteger::RInteger(void) - { - } - -/** - * An overloaded TCleanupItem() allowing the RIntegers to be pushed, - * popped, and destroyed via the CleanupStack like any other CBase derived object. - */ -EXPORT_C RInteger::operator TCleanupItem(void) - { - return TCleanupItem(&RInteger::CallClose, this); - } - -/** - * Helper function registered with the cleanup stack that just calls Close() for - * this RInteger object. - * - * @param aPtr A pointer to the object for which clean-up is to be performed. - */ -EXPORT_C void RInteger::CallClose(TAny* aPtr) - { - ((RInteger*)aPtr)->Close(); - } - -/** - * Zeros and then frees any memory owned by this RInteger object. - * - * An RInteger object that has been closed can safely fall off the stack. - */ -EXPORT_C void RInteger::Close(void) - { - if (iPtr) - { - Mem::FillZ(Ptr(), Size()*4); - User::Free(Ptr()); - iSize = 0; - iPtr = NULL; - } - }