--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/satsa/apdu/src.s60/cstsuserauth.cpp Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,188 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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 FILES
+#include "cstsuserauth.h"
+
+namespace java
+{
+namespace satsa
+{
+
+// CONSTANTS
+const TInt KSTSMinNumberOfSubModules = 2;
+
+const TInt KSTSDefaultGranularity = 1;
+const TTagType KSTSAPDUPinEntryTag = 0;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+CSTSUserAuth::CSTSUserAuth()
+{
+ iType = ENotInitialized;
+}
+
+void CSTSUserAuth::ConstructL()
+{
+ // creating with empty values
+ iAuthId = KNullDesC8().AllocL();
+
+ iApduPinHeaders = new(ELeave) CDesC8ArrayFlat(KSTSDefaultGranularity);
+}
+
+CSTSUserAuth* CSTSUserAuth::NewLC()
+{
+ CSTSUserAuth* self = new(ELeave) CSTSUserAuth();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+}
+
+CSTSUserAuth::~CSTSUserAuth()
+{
+ delete iAuthId;
+ delete iApduPinHeaders;
+}
+
+// -----------------------------------------------------------------------------
+// CSTSUserAuth::DecodeL
+// Decrypts raw data to this instance
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+void CSTSUserAuth::DecodeL(const TDesC8& aRawData)
+{
+ CArrayPtr<TASN1DecGeneric>* itemsData = DecodeSequenceLC(ETrue, // must be sequence
+ aRawData, KSTSMinNumberOfSubModules);
+
+ // we would not get this far if there was atleast two element
+ TInt pos = 0;
+ // decoding authentication id (octet string)
+ TASN1DecOctetString authId;
+ HBufC8* tmp = authId.DecodeDERL(*itemsData->At(pos++));
+ delete iAuthId;
+ iAuthId = tmp;
+
+ // decoding user authentication method (choice)
+ // we need: apduPinEntry [0]APDUPinEntry
+ TASN1DecGeneric taggedEntryDec(*itemsData->At(pos++));
+ taggedEntryDec.InitL();
+ if (taggedEntryDec.Tag() == KSTSAPDUPinEntryTag)
+ {
+ // set information that apduHeaders used
+ iType = EAPDUPinEntry;
+ // decoding apduPinEntry
+ TASN1DecGeneric decGen(taggedEntryDec.GetContentDER());
+ TRAPD(err, decGen.InitL());
+ // it there is some optional headers inside APDUPINEntry
+ if (!err)
+ {
+ CleanupStack::PopAndDestroy(itemsData);
+ itemsData = DecodeSequenceLC(EFalse, taggedEntryDec.Encoding());
+ TInt numOfHeaders = itemsData->Count();
+
+ if (numOfHeaders)
+ {
+ CDesC8ArrayFlat* tmpArray =
+ new(ELeave) CDesC8ArrayFlat(numOfHeaders);
+ CleanupStack::PushL(tmpArray);
+
+ TUint currentTag = 0;
+ TInt itemsLeft = numOfHeaders;
+ // decode all pinheaders(octet string) in loop
+ for (TInt i = 0; i < numOfHeaders; i++)
+ {
+ TBool ready = EFalse;
+ TASN1DecGeneric decGenApduHeader(*itemsData->At(i));
+ // we must check tags in order 0 to ...
+ while (!ready && (currentTag <= (TUint)(itemsLeft
+ + currentTag)))
+ {
+ // add found header to correct place in buffer
+ if (decGenApduHeader.Tag() == currentTag)
+ {
+ TASN1DecGeneric decGenApduHeaderDER(
+ itemsData->At(i)->Encoding());
+ decGenApduHeaderDER.InitL();
+ TASN1DecOctetString apduHeader;
+ HBufC8* headerBuf = apduHeader.DecodeDERL(
+ decGenApduHeaderDER);
+ CleanupStack::PushL(headerBuf);
+
+ tmpArray->AppendL(headerBuf->Des());
+ CleanupStack::PopAndDestroy(headerBuf);
+ ready = ETrue;
+ itemsLeft--;
+ }
+ // there was no header for this tag, so add empty
+ else
+ {
+ tmpArray->AppendL(KNullDesC8());
+ }
+ currentTag++;
+ }
+ }
+ delete iApduPinHeaders;
+ iApduPinHeaders = tmpArray;
+ // compress to get rid of possible unneccessary slots
+ iApduPinHeaders->Compress();
+ CleanupStack::Pop(tmpArray);
+ }
+ }
+ }
+ else
+ {
+ iType = EOther;
+ // we won't need others at all
+ }
+ CleanupStack::PopAndDestroy(itemsData);
+}
+// -----------------------------------------------------------------------------
+// CSTSUserAuth::Type
+// Getter for type
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+CSTSUserAuth::TType CSTSUserAuth::Type() const
+{
+ return iType;
+}
+
+// -----------------------------------------------------------------------------
+// CSTSUserAuth::AuthId
+// Getter for authentication id
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+const TDesC8& CSTSUserAuth::AuthId() const
+{
+ return *iAuthId;
+}
+
+// -----------------------------------------------------------------------------
+// CSTSUserAuth::ApduPinHeaders
+// Getter for PIN headers
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+const CDesC8ArrayFlat& CSTSUserAuth::ApduPinHeaders() const
+{
+ return *iApduPinHeaders;
+}
+
+} // namespace satsa
+} // namespace java
+// End of File
+