merge 200948 drop PDK_3.0.e
authorandy simpson <andrews@symbian.org>
Sat, 05 Dec 2009 21:41:51 +0000
changeset 31 c0e7917aa107
parent 30 880bdb445c5c (current diff)
parent 29 ece3df019add (diff)
child 32 ba2bce746d00
merge 200948 drop
contentmgmt/contentaccessfwfordrm/engineering/dox/Architecture.dox
contentmgmt/contentaccessfwfordrm/engineering/dox/AsyncSendReceive.dox
contentmgmt/contentaccessfwfordrm/engineering/dox/Attributes.dox
contentmgmt/contentaccessfwfordrm/engineering/dox/BackupAndRestoreOfAgentData.dox
contentmgmt/contentaccessfwfordrm/engineering/dox/CAFIntroduction.dox
contentmgmt/contentaccessfwfordrm/engineering/dox/CafCorruptData.dox
contentmgmt/contentaccessfwfordrm/engineering/dox/CafRecognizer.dox
contentmgmt/contentaccessfwfordrm/engineering/dox/Examples.dox
contentmgmt/contentaccessfwfordrm/engineering/dox/HowToAgentConfiguration.dox
contentmgmt/contentaccessfwfordrm/engineering/dox/HowToContentAPI.dox
contentmgmt/contentaccessfwfordrm/engineering/dox/HowToManageAgents.dox
contentmgmt/contentaccessfwfordrm/engineering/dox/HowToManageFiles.dox
contentmgmt/contentaccessfwfordrm/engineering/dox/HowToSupplierAPI.dox
contentmgmt/contentaccessfwfordrm/engineering/dox/NavigatingArchiveFiles.dox
contentmgmt/contentaccessfwfordrm/engineering/dox/ReleaseNotes.dox
contentmgmt/contentaccessfwfordrm/engineering/dox/RightsManagerAPI.dox
contentmgmt/contentaccessfwfordrm/engineering/dox/UI.dox
contentmgmt/contentaccessfwfordrm/engineering/dox/cafmainpage.dox
contentmgmt/contentaccessfwfordrm/engineering/dox/licensees.dox
cryptomgmtlibs/securitytestfw/test/autotesting/testMakesis.pl
cryptoservices/certificateandkeymgmt/pkcs7/pkcs7.mmp
cryptoservices/certificateandkeymgmt/tder/dergen.pl
cryptoservices/certificateandkeymgmt/tder/importdumpasn1.pl
cryptoservices/certificateandkeymgmt/tpkcs12intgrtn/data/tpkcs12lib.script
cryptoservices/certificateandkeymgmt/tx509/Data/extensions/certextbuilder.pl
cryptoservices/filebasedcertificateandkeystores/test/certtool/certtool.cpp
package_definition.xml
securityanddataprivacytools/securitytools/certapp/GNUmakefile
securityanddataprivacytools/securitytools/certapp/api/GNUmakefile
securityanddataprivacytools/securitytools/certapp/encdec/GNUmakefile
securityanddataprivacytools/securitytools/certapp/store--/GNUmakefile
securityanddataprivacytools/securitytools/certapp/test/GNUmakefile
securityanddataprivacytools/securitytools/certapp/test/tcertapp/GNUmakefile
securityanddataprivacytools/securitytools/certapp/utils/GNUmakefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/bwins/authclientU.DEF	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,30 @@
+EXPORTS
+	??0RAuthClient@AuthServer@@QAE@XZ @ 1 NONAME ; AuthServer::RAuthClient::RAuthClient(void)
+	?ActivePluginsL@RAuthClient@AuthServer@@QAEXAAV?$RCPointerArray@$$CBVCPluginDesc@AuthServer@@@@@Z @ 2 NONAME ; void AuthServer::RAuthClient::ActivePluginsL(class RCPointerArray<class AuthServer::CPluginDesc const > &)
+	?AuthenticateL@RAuthClient@AuthServer@@QAEPAVCIdentity@2@ABVCAuthExpression@2@VTTimeIntervalSeconds@@HH@Z @ 3 NONAME ; class AuthServer::CIdentity * AuthServer::RAuthClient::AuthenticateL(class AuthServer::CAuthExpression const &, class TTimeIntervalSeconds, int, int)
+	?AuthenticateL@RAuthClient@AuthServer@@QAEXABVCAuthExpression@2@VTTimeIntervalSeconds@@HHAAPAVCIdentity@2@AAVTRequestStatus@@@Z @ 4 NONAME ; void AuthServer::RAuthClient::AuthenticateL(class AuthServer::CAuthExpression const &, class TTimeIntervalSeconds, int, int, class AuthServer::CIdentity * &, class TRequestStatus &)
+	?Cancel@RAuthClient@AuthServer@@QAEIXZ @ 5 NONAME ; unsigned int AuthServer::RAuthClient::Cancel(void)
+	?Close@RAuthClient@AuthServer@@QAEXXZ @ 6 NONAME ; void AuthServer::RAuthClient::Close(void)
+	?Connect@RAuthClient@AuthServer@@QAEHXZ @ 7 NONAME ; int AuthServer::RAuthClient::Connect(void)
+	?DeauthenticateL@RAuthClient@AuthServer@@QAEXXZ @ 8 NONAME ; void AuthServer::RAuthClient::DeauthenticateL(void)
+	?ForgetPluginL@RAuthMgrClient@AuthServer@@QAEXKK@Z @ 9 NONAME ; void AuthServer::RAuthMgrClient::ForgetPluginL(unsigned long, unsigned long)
+	?IdentitiesL@RAuthClient@AuthServer@@QAEXAAV?$RArray@K@@@Z @ 10 NONAME ; void AuthServer::RAuthClient::IdentitiesL(class RArray<unsigned long> &)
+	?IdentitiesWithStringL@RAuthClient@AuthServer@@QAEXAAV?$RCPointerArray@VCIdAndString@AuthServer@@@@@Z @ 11 NONAME ; void AuthServer::RAuthClient::IdentitiesWithStringL(class RCPointerArray<class AuthServer::CIdAndString> &)
+	?IdentityStringL@RAuthClient@AuthServer@@QAEPAVHBufC16@@K@Z @ 12 NONAME ; class HBufC16 * AuthServer::RAuthClient::IdentityStringL(unsigned long)
+	?PluginsL@RAuthClient@AuthServer@@QAEXAAV?$RCPointerArray@$$CBVCPluginDesc@AuthServer@@@@@Z @ 13 NONAME ; void AuthServer::RAuthClient::PluginsL(class RCPointerArray<class AuthServer::CPluginDesc const > &)
+	?PluginsOfTypeL@RAuthClient@AuthServer@@QAEXW4TAuthPluginType@2@AAV?$RCPointerArray@$$CBVCPluginDesc@AuthServer@@@@@Z @ 14 NONAME ; void AuthServer::RAuthClient::PluginsOfTypeL(enum AuthServer::TAuthPluginType, class RCPointerArray<class AuthServer::CPluginDesc const > &)
+	?PluginsWithTrainingStatusL@RAuthClient@AuthServer@@QAEXW4TAuthTrainingStatus@2@AAV?$RCPointerArray@$$CBVCPluginDesc@AuthServer@@@@@Z @ 15 NONAME ; void AuthServer::RAuthClient::PluginsWithTrainingStatusL(enum AuthServer::TAuthTrainingStatus, class RCPointerArray<class AuthServer::CPluginDesc const > &)
+	?PreferredTypePluginL@RAuthClient@AuthServer@@QAEKW4TAuthPluginType@2@@Z @ 16 NONAME ; unsigned long AuthServer::RAuthClient::PreferredTypePluginL(enum AuthServer::TAuthPluginType)
+	?RegisterIdentityL@RAuthMgrClient@AuthServer@@QAEXAAPAVCIdentity@2@ABVTDesC16@@AAVTRequestStatus@@@Z @ 17 NONAME ; void AuthServer::RAuthMgrClient::RegisterIdentityL(class AuthServer::CIdentity * &, class TDesC16 const &, class TRequestStatus &)
+	?RemoveIdentityL@RAuthMgrClient@AuthServer@@QAEXK@Z @ 18 NONAME ; void AuthServer::RAuthMgrClient::RemoveIdentityL(unsigned long)
+	?SetIdentityStringL@RAuthClient@AuthServer@@QAEXKABVTDesC16@@@Z @ 19 NONAME ; void AuthServer::RAuthClient::SetIdentityStringL(unsigned long, class TDesC16 const &)
+	?SetPreferredTypePluginL@RAuthMgrClient@AuthServer@@QAEXW4TAuthPluginType@2@K@Z @ 20 NONAME ; void AuthServer::RAuthMgrClient::SetPreferredTypePluginL(enum AuthServer::TAuthPluginType, unsigned long)
+	?TrainPlugin@RAuthMgrClient@AuthServer@@QAEXKKAAVTRequestStatus@@@Z @ 21 NONAME ; void AuthServer::RAuthMgrClient::TrainPlugin(unsigned long, unsigned long, class TRequestStatus &)
+	?AuthenticateL@RAuthClient@AuthServer@@QAEPAVCIdentity@2@ABVCAuthExpression@2@VTTimeIntervalSeconds@@HVTUid@@HABVTDesC16@@@Z @ 22 NONAME ; class AuthServer::CIdentity * AuthServer::RAuthClient::AuthenticateL(class AuthServer::CAuthExpression const &, class TTimeIntervalSeconds, int, class TUid, int, class TDesC16 const &)
+	?AuthenticateL@RAuthClient@AuthServer@@QAEXABVCAuthExpression@2@VTTimeIntervalSeconds@@HVTUid@@HABVTDesC16@@AAPAVCIdentity@2@AAVTRequestStatus@@@Z @ 23 NONAME ; void AuthServer::RAuthClient::AuthenticateL(class AuthServer::CAuthExpression const &, class TTimeIntervalSeconds, int, class TUid, int, class TDesC16 const &, class AuthServer::CIdentity * &, class TRequestStatus &)
+	?CreateAuthExpressionL@RAuthClient@AuthServer@@QBEPAVCAuthExpression@2@ABVTDesC16@@@Z @ 24 NONAME ; class AuthServer::CAuthExpression * AuthServer::RAuthClient::CreateAuthExpressionL(class TDesC16 const &) const
+	?ListAuthAliasesL@RAuthClient@AuthServer@@QAEXAAV?$RPointerArray@VHBufC16@@@@@Z @ 25 NONAME ; void AuthServer::RAuthClient::ListAuthAliasesL(class RPointerArray<class HBufC16> &)
+	?ResetIdentityL@RAuthMgrClient@AuthServer@@QAEXKAAV?$RArray@K@@AAV?$RPointerArray@$$CBVHBufC16@@@@@Z @ 26 NONAME ; void AuthServer::RAuthMgrClient::ResetIdentityL(unsigned long, class RArray<unsigned long> &, class RPointerArray<class HBufC16 const > &)
+	?ResetIdentityL@RAuthMgrClient@AuthServer@@QAEXKABVTDesC16@@@Z @ 27 NONAME ; void AuthServer::RAuthMgrClient::ResetIdentityL(unsigned long, class TDesC16 const &)
+	?ResetIdentityL@RAuthMgrClient@AuthServer@@QAEXKW4TAuthPluginType@2@ABVTDesC16@@@Z @ 28 NONAME ; void AuthServer::RAuthMgrClient::ResetIdentityL(unsigned long, enum AuthServer::TAuthPluginType, class TDesC16 const &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/bwins/authcommonU.def	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,49 @@
+EXPORTS
+	??1CIdAndString@AuthServer@@UAE@XZ @ 1 NONAME ; AuthServer::CIdAndString::~CIdAndString(void)
+	?AuthAnd@AuthServer@@YA?AVTAuthExpressionWrapper@1@PAVCAuthExpression@1@0@Z @ 2 NONAME ; class AuthServer::TAuthExpressionWrapper AuthServer::AuthAnd(class AuthServer::CAuthExpression *, class AuthServer::CAuthExpression *)
+	?AuthExpr@AuthServer@@YA?AVTAuthExpressionWrapper@1@K@Z @ 3 NONAME ; class AuthServer::TAuthExpressionWrapper AuthServer::AuthExpr(unsigned long)
+	?AuthExpr@AuthServer@@YA?AVTAuthExpressionWrapper@1@W4TAuthPluginType@1@@Z @ 4 NONAME ; class AuthServer::TAuthExpressionWrapper AuthServer::AuthExpr(enum AuthServer::TAuthPluginType)
+	?AuthOr@AuthServer@@YA?AVTAuthExpressionWrapper@1@PAVCAuthExpression@1@0@Z @ 5 NONAME ; class AuthServer::TAuthExpressionWrapper AuthServer::AuthOr(class AuthServer::CAuthExpression *, class AuthServer::CAuthExpression *)
+	?ClientKeyL@CProtectionKey@AuthServer@@QBEPAV12@H@Z @ 6 NONAME ; class AuthServer::CProtectionKey * AuthServer::CProtectionKey::ClientKeyL(int) const
+	?ConstructL@CIdAndString@AuthServer@@QAEXKABVTDesC16@@@Z @ 7 NONAME ; void AuthServer::CIdAndString::ConstructL(unsigned long, class TDesC16 const &)
+	?DoWriteL@TSizeStream@AuthServer@@UAEXPBXH@Z @ 8 NONAME ; void AuthServer::TSizeStream::DoWriteL(void const *, int)
+	?ExternalizeL@CAuthExpressionImpl@AuthServer@@UBEXAAVRWriteStream@@@Z @ 9 NONAME ; void AuthServer::CAuthExpressionImpl::ExternalizeL(class RWriteStream &) const
+	?ExternalizeL@CIdAndString@AuthServer@@QBEXAAVRWriteStream@@@Z @ 10 NONAME ; void AuthServer::CIdAndString::ExternalizeL(class RWriteStream &) const
+	?ExternalizeL@CIdentity@AuthServer@@QBEXAAVRWriteStream@@@Z @ 11 NONAME ; void AuthServer::CIdentity::ExternalizeL(class RWriteStream &) const
+	?ExternalizeL@CPluginDesc@AuthServer@@QBEXAAVRWriteStream@@@Z @ 12 NONAME ; void AuthServer::CPluginDesc::ExternalizeL(class RWriteStream &) const
+	?FalseNegativeRate@CPluginDesc@AuthServer@@QBEKXZ @ 13 NONAME ; unsigned long AuthServer::CPluginDesc::FalseNegativeRate(void) const
+	?FalsePositiveRate@CPluginDesc@AuthServer@@QBEKXZ @ 14 NONAME ; unsigned long AuthServer::CPluginDesc::FalsePositiveRate(void) const
+	?Id@CIdAndString@AuthServer@@QBEKXZ @ 15 NONAME ; unsigned long AuthServer::CIdAndString::Id(void) const
+	?Id@CIdentity@AuthServer@@QBEKXZ @ 16 NONAME ; unsigned long AuthServer::CIdentity::Id(void) const
+	?Id@CPluginDesc@AuthServer@@QBEKXZ @ 17 NONAME ; unsigned long AuthServer::CPluginDesc::Id(void) const
+	?InternalizeL@CIdAndString@AuthServer@@QAEXAAVRReadStream@@@Z @ 18 NONAME ABSENT ; void AuthServer::CIdAndString::InternalizeL(class RReadStream &)
+	?InternalizeL@CIdentity@AuthServer@@SAPAV12@AAVRReadStream@@@Z @ 19 NONAME ; class AuthServer::CIdentity * AuthServer::CIdentity::InternalizeL(class RReadStream &)
+	?Invariant@CAuthExpressionImpl@AuthServer@@ABEHXZ @ 20 NONAME ; int AuthServer::CAuthExpressionImpl::Invariant(void) const
+	?Key@CIdentity@AuthServer@@QBEABVCProtectionKey@2@XZ @ 21 NONAME ; class AuthServer::CProtectionKey const & AuthServer::CIdentity::Key(void) const
+	?KeyData@CProtectionKey@AuthServer@@QBE?AVTPtrC8@@XZ @ 22 NONAME ; class TPtrC8 AuthServer::CProtectionKey::KeyData(void) const
+	?MinEntropy@CPluginDesc@AuthServer@@QBEKXZ @ 23 NONAME ; unsigned long AuthServer::CPluginDesc::MinEntropy(void) const
+	?Name@CPluginDesc@AuthServer@@QBEPBVTDesC16@@XZ @ 24 NONAME ; class TDesC16 const * AuthServer::CPluginDesc::Name(void) const
+	?NewL@CAuthExpressionImpl@AuthServer@@SAPAV12@AAVRReadStream@@@Z @ 25 NONAME ; class AuthServer::CAuthExpressionImpl * AuthServer::CAuthExpressionImpl::NewL(class RReadStream &)
+	?NewL@CIdentity@AuthServer@@SAPAV12@KPAVCProtectionKey@2@PAVHBufC16@@@Z @ 26 NONAME ; class AuthServer::CIdentity * AuthServer::CIdentity::NewL(unsigned long, class AuthServer::CProtectionKey *, class HBufC16 *)
+	?NewL@CPluginDesc@AuthServer@@SAPAV12@KABVTDesC16@@W4TAuthPluginType@2@W4TAuthTrainingStatus@2@KKK@Z @ 27 NONAME ; class AuthServer::CPluginDesc * AuthServer::CPluginDesc::NewL(unsigned long, class TDesC16 const &, enum AuthServer::TAuthPluginType, enum AuthServer::TAuthTrainingStatus, unsigned long, unsigned long, unsigned long)
+	?NewL@CProtectionKey@AuthServer@@SAPAV12@H@Z @ 28 NONAME ; class AuthServer::CProtectionKey * AuthServer::CProtectionKey::NewL(int)
+	?NewL@CProtectionKey@AuthServer@@SAPAV12@PAVHBufC8@@@Z @ 29 NONAME ; class AuthServer::CProtectionKey * AuthServer::CProtectionKey::NewL(class HBufC8 *)
+	?NewLC@CIdAndString@AuthServer@@SAPAV12@AAVRReadStream@@@Z @ 30 NONAME ; class AuthServer::CIdAndString * AuthServer::CIdAndString::NewLC(class RReadStream &)
+	?NewLC@CIdAndString@AuthServer@@SAPAV12@KABVTDesC16@@@Z @ 31 NONAME ; class AuthServer::CIdAndString * AuthServer::CIdAndString::NewLC(unsigned long, class TDesC16 const &)
+	?NewLC@CIdentity@AuthServer@@SAPAV12@KPAVCProtectionKey@2@PAVHBufC16@@@Z @ 32 NONAME ; class AuthServer::CIdentity * AuthServer::CIdentity::NewLC(unsigned long, class AuthServer::CProtectionKey *, class HBufC16 *)
+	?NewLC@CPluginDesc@AuthServer@@SAPAV12@AAVRReadStream@@@Z @ 33 NONAME ; class AuthServer::CPluginDesc * AuthServer::CPluginDesc::NewLC(class RReadStream &)
+	?NewLC@CProtectionKey@AuthServer@@SAPAV12@H@Z @ 34 NONAME ; class AuthServer::CProtectionKey * AuthServer::CProtectionKey::NewLC(int)
+	?NewLC@CProtectionKey@AuthServer@@SAPAV12@PAVHBufC8@@@Z @ 35 NONAME ; class AuthServer::CProtectionKey * AuthServer::CProtectionKey::NewLC(class HBufC8 *)
+	?Panic@CAuthExpressionImpl@AuthServer@@CAXW4TPanic@12@@Z @ 36 NONAME ; void AuthServer::CAuthExpressionImpl::Panic(enum AuthServer::CAuthExpressionImpl::TPanic)
+	?String@CIdAndString@AuthServer@@QBEPAVHBufC16@@XZ @ 37 NONAME ; class HBufC16 * AuthServer::CIdAndString::String(void) const
+	?String@CIdentity@AuthServer@@QBEAAVTDesC16@@XZ @ 38 NONAME ; class TDesC16 & AuthServer::CIdentity::String(void) const
+	?TrainingStatus@CPluginDesc@AuthServer@@QBE?AW4TAuthTrainingStatus@2@XZ @ 39 NONAME ; enum AuthServer::TAuthTrainingStatus AuthServer::CPluginDesc::TrainingStatus(void) const
+	?Type@CPluginDesc@AuthServer@@QBE?AW4TAuthPluginType@2@XZ @ 40 NONAME ; enum AuthServer::TAuthPluginType AuthServer::CPluginDesc::Type(void) const
+	?InsertSpaceBetweenOperatorsL@CAuthExpressionImpl@AuthServer@@SAXABVTDesC16@@AAVRBuf16@@@Z @ 41 NONAME ; void AuthServer::CAuthExpressionImpl::InsertSpaceBetweenOperatorsL(class TDesC16 const &, class RBuf16 &)
+	?KEnablePostMarketAuthenticationPlugins@@3EB @ 42 NONAME ; unsigned char const KEnablePostMarketAuthenticationPlugins
+	?CreateAuthExprObjectL@CAuthExpressionImpl@AuthServer@@SAPAVCAuthExpression@2@ABVTDesC16@@@Z @ 43 NONAME ; class AuthServer::CAuthExpression * AuthServer::CAuthExpressionImpl::CreateAuthExprObjectL(class TDesC16 const &)
+	?AuthExpr@AuthServer@@YA?AVTAuthExpressionWrapper@1@XZ @ 44 NONAME ; class AuthServer::TAuthExpressionWrapper AuthServer::AuthExpr(void)
+	?InternalizeL@CAuthParams@AuthServer@@QAEXAAVRReadStream@@@Z @ 45 NONAME ; void AuthServer::CAuthParams::InternalizeL(class RReadStream &)
+	?ExternalizeL@CAuthParams@AuthServer@@QBEXAAVRWriteStream@@@Z @ 46 NONAME ; void AuthServer::CAuthParams::ExternalizeL(class RWriteStream &) const
+	?NewL@CAuthParams@AuthServer@@SAPAV12@VTTimeIntervalSeconds@@HVTUid@@HABVTDesC16@@@Z @ 47 NONAME ; class AuthServer::CAuthParams * AuthServer::CAuthParams::NewL(class TTimeIntervalSeconds, int, class TUid, int, class TDesC16 const &)
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/eabi/authclientU.DEF	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,33 @@
+EXPORTS
+	_ZN10AuthServer11RAuthClient11IdentitiesLER6RArrayImE @ 1 NONAME
+	_ZN10AuthServer11RAuthClient13AuthenticateLERKNS_15CAuthExpressionE20TTimeIntervalSecondsii @ 2 NONAME
+	_ZN10AuthServer11RAuthClient13AuthenticateLERKNS_15CAuthExpressionE20TTimeIntervalSecondsiiRPNS_9CIdentityER14TRequestStatus @ 3 NONAME
+	_ZN10AuthServer11RAuthClient14ActivePluginsLER14RCPointerArrayIKNS_11CPluginDescEE @ 4 NONAME
+	_ZN10AuthServer11RAuthClient14PluginsOfTypeLENS_15TAuthPluginTypeER14RCPointerArrayIKNS_11CPluginDescEE @ 5 NONAME
+	_ZN10AuthServer11RAuthClient15DeauthenticateLEv @ 6 NONAME
+	_ZN10AuthServer11RAuthClient15IdentityStringLEm @ 7 NONAME
+	_ZN10AuthServer11RAuthClient18SetIdentityStringLEmRK7TDesC16 @ 8 NONAME
+	_ZN10AuthServer11RAuthClient20PreferredTypePluginLENS_15TAuthPluginTypeE @ 9 NONAME
+	_ZN10AuthServer11RAuthClient21IdentitiesWithStringLER14RCPointerArrayINS_12CIdAndStringEE @ 10 NONAME
+	_ZN10AuthServer11RAuthClient26PluginsWithTrainingStatusLENS_19TAuthTrainingStatusER14RCPointerArrayIKNS_11CPluginDescEE @ 11 NONAME
+	_ZN10AuthServer11RAuthClient5CloseEv @ 12 NONAME
+	_ZN10AuthServer11RAuthClient6CancelEv @ 13 NONAME
+	_ZN10AuthServer11RAuthClient7ConnectEv @ 14 NONAME
+	_ZN10AuthServer11RAuthClient8PluginsLER14RCPointerArrayIKNS_11CPluginDescEE @ 15 NONAME
+	_ZN10AuthServer11RAuthClientC1Ev @ 16 NONAME
+	_ZN10AuthServer11RAuthClientC2Ev @ 17 NONAME
+	_ZN10AuthServer14RAuthMgrClient11TrainPluginEmmR14TRequestStatus @ 18 NONAME
+	_ZN10AuthServer14RAuthMgrClient13ForgetPluginLEmm @ 19 NONAME
+	_ZN10AuthServer14RAuthMgrClient15RemoveIdentityLEm @ 20 NONAME
+	_ZN10AuthServer14RAuthMgrClient17RegisterIdentityLERPNS_9CIdentityERK7TDesC16R14TRequestStatus @ 21 NONAME
+	_ZN10AuthServer14RAuthMgrClient23SetPreferredTypePluginLENS_15TAuthPluginTypeEm @ 22 NONAME
+	_ZTIN10AuthServer21CAsyncResponseDecoderE @ 23 NONAME ; #<TI>#
+	_ZTVN10AuthServer21CAsyncResponseDecoderE @ 24 NONAME ; #<VT>#
+	_ZN10AuthServer11RAuthClient13AuthenticateLERKNS_15CAuthExpressionE20TTimeIntervalSecondsi4TUidiRK7TDesC16 @ 25 NONAME
+	_ZN10AuthServer11RAuthClient13AuthenticateLERKNS_15CAuthExpressionE20TTimeIntervalSecondsi4TUidiRK7TDesC16RPNS_9CIdentityER14TRequestStatus @ 26 NONAME
+	_ZN10AuthServer11RAuthClient16ListAuthAliasesLER13RPointerArrayI7HBufC16E @ 27 NONAME
+	_ZNK10AuthServer11RAuthClient21CreateAuthExpressionLERK7TDesC16 @ 28 NONAME
+	_ZN10AuthServer14RAuthMgrClient14ResetIdentityLEmNS_15TAuthPluginTypeERK7TDesC16 @ 29 NONAME
+	_ZN10AuthServer14RAuthMgrClient14ResetIdentityLEmR6RArrayImER13RPointerArrayIK7HBufC16E @ 30 NONAME
+	_ZN10AuthServer14RAuthMgrClient14ResetIdentityLEmRK7TDesC16 @ 31 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/eabi/authcommonU.def	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,58 @@
+EXPORTS
+	_ZN10AuthServer11CPluginDesc4NewLEmRK7TDesC16NS_15TAuthPluginTypeENS_19TAuthTrainingStatusEmmm @ 1 NONAME
+	_ZN10AuthServer11CPluginDesc5NewLCER11RReadStream @ 2 NONAME
+	_ZN10AuthServer11TSizeStream8DoWriteLEPKvi @ 3 NONAME
+	_ZN10AuthServer12CIdAndString10ConstructLEmRK7TDesC16 @ 4 NONAME
+	_ZN10AuthServer12CIdAndString5NewLCER11RReadStream @ 5 NONAME
+	_ZN10AuthServer12CIdAndString5NewLCEmRK7TDesC16 @ 6 NONAME
+	_ZN10AuthServer12CIdAndStringD0Ev @ 7 NONAME
+	_ZN10AuthServer12CIdAndStringD1Ev @ 8 NONAME
+	_ZN10AuthServer12CIdAndStringD2Ev @ 9 NONAME
+	_ZN10AuthServer14CProtectionKey4NewLEP6HBufC8 @ 10 NONAME
+	_ZN10AuthServer14CProtectionKey4NewLEi @ 11 NONAME
+	_ZN10AuthServer14CProtectionKey5NewLCEP6HBufC8 @ 12 NONAME
+	_ZN10AuthServer14CProtectionKey5NewLCEi @ 13 NONAME
+	_ZN10AuthServer19CAuthExpressionImpl4NewLER11RReadStream @ 14 NONAME
+	_ZN10AuthServer19CAuthExpressionImpl5PanicENS0_6TPanicE @ 15 NONAME
+	_ZN10AuthServer6AuthOrEPNS_15CAuthExpressionES1_ @ 16 NONAME
+	_ZN10AuthServer7AuthAndEPNS_15CAuthExpressionES1_ @ 17 NONAME
+	_ZN10AuthServer8AuthExprENS_15TAuthPluginTypeE @ 18 NONAME
+	_ZN10AuthServer8AuthExprEm @ 19 NONAME
+	_ZN10AuthServer9CIdentity12InternalizeLER11RReadStream @ 20 NONAME
+	_ZN10AuthServer9CIdentity4NewLEmPNS_14CProtectionKeyEP7HBufC16 @ 21 NONAME
+	_ZN10AuthServer9CIdentity5NewLCEmPNS_14CProtectionKeyEP7HBufC16 @ 22 NONAME
+	_ZNK10AuthServer11CPluginDesc10MinEntropyEv @ 23 NONAME
+	_ZNK10AuthServer11CPluginDesc12ExternalizeLER12RWriteStream @ 24 NONAME
+	_ZNK10AuthServer11CPluginDesc14TrainingStatusEv @ 25 NONAME
+	_ZNK10AuthServer11CPluginDesc17FalseNegativeRateEv @ 26 NONAME
+	_ZNK10AuthServer11CPluginDesc17FalsePositiveRateEv @ 27 NONAME
+	_ZNK10AuthServer11CPluginDesc2IdEv @ 28 NONAME
+	_ZNK10AuthServer11CPluginDesc4NameEv @ 29 NONAME
+	_ZNK10AuthServer11CPluginDesc4TypeEv @ 30 NONAME
+	_ZNK10AuthServer12CIdAndString12ExternalizeLER12RWriteStream @ 31 NONAME
+	_ZNK10AuthServer12CIdAndString2IdEv @ 32 NONAME
+	_ZNK10AuthServer12CIdAndString6StringEv @ 33 NONAME
+	_ZNK10AuthServer14CProtectionKey10ClientKeyLEi @ 34 NONAME
+	_ZNK10AuthServer14CProtectionKey7KeyDataEv @ 35 NONAME
+	_ZNK10AuthServer19CAuthExpressionImpl12ExternalizeLER12RWriteStream @ 36 NONAME
+	_ZNK10AuthServer19CAuthExpressionImpl9InvariantEv @ 37 NONAME
+	_ZNK10AuthServer9CIdentity12ExternalizeLER12RWriteStream @ 38 NONAME
+	_ZNK10AuthServer9CIdentity2IdEv @ 39 NONAME
+	_ZNK10AuthServer9CIdentity3KeyEv @ 40 NONAME
+	_ZNK10AuthServer9CIdentity6StringEv @ 41 NONAME
+	_ZTIN10AuthServer11TSizeStreamE @ 42 NONAME ; #<TI>#
+	_ZTIN10AuthServer19CAuthExpressionImplE @ 43 NONAME ; #<TI>#
+	_ZTIN10AuthServer9CIdentityE @ 44 NONAME ; #<TI>#
+	_ZTVN10AuthServer11TSizeStreamE @ 45 NONAME ; #<VT>#
+	_ZTVN10AuthServer19CAuthExpressionImplE @ 46 NONAME ; #<VT>#
+	_ZTVN10AuthServer9CIdentityE @ 47 NONAME ; #<VT>#
+	KEnablePostMarketAuthenticationPlugins @ 48 NONAME DATA 1
+	_ZN10AuthServer19CAuthExpressionImpl21CreateAuthExprObjectLERK7TDesC16 @ 49 NONAME
+	_ZN10AuthServer19CAuthExpressionImpl28InsertSpaceBetweenOperatorsLERK7TDesC16R6RBuf16 @ 50 NONAME
+	_ZN10AuthServer11CAuthParams12InternalizeLER11RReadStream @ 51 NONAME
+	_ZN10AuthServer11CAuthParams4NewLE20TTimeIntervalSecondsi4TUidiRK7TDesC16 @ 52 NONAME
+	_ZN10AuthServer8AuthExprEv @ 53 NONAME
+	_ZNK10AuthServer11CAuthParams12ExternalizeLER12RWriteStream @ 54 NONAME
+	_ZTIN10AuthServer11CAuthParamsE @ 55 NONAME
+	_ZTVN10AuthServer11CAuthParamsE @ 56 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/group/authclient.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2005-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: 
+* authclient.exe Implementation of authentication client
+*
+*/
+
+
+/**
+ @file
+*/
+
+CAPABILITY ALL -TCB
+
+target authclient.dll
+targettype dll
+
+// this is a static, as opposed to polymorphic DLL
+UID				0x1000008D 0x102740FD
+VENDORID		0x70000001
+
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+USERINCLUDE		../source/common
+USERINCLUDE		../source/client
+USERINCLUDE		../inc_private
+USERINCLUDE             ../inc/authserver
+
+SOURCEPATH		../source/client
+SOURCE			authclient.cpp
+SOURCE			authmgrclient.cpp
+SOURCE 			asyncresponsedecoder.cpp
+
+LIBRARY			euser.lib 
+LIBRARY			estor.lib 
+LIBRARY			efsrv.lib
+LIBRARY			random.lib
+LIBRARY			cryptography.lib
+LIBRARY			authcommon.lib scsclient.lib 
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/group/authcommon.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2005-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: 
+* This DLL contains code which is common to the authentication
+* server and the client interface.
+*
+*/
+
+
+CAPABILITY All -TCB
+
+target			authcommon.dll
+targettype		dll
+
+// this is a static interface, as opposed to polymorphic DLL.
+UID				0x1000008D 0x102740FB
+VENDORID		0x70000001
+
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+USERINCLUDE		../source/client
+
+USERINCLUDE		../source/common
+SOURCEPATH		../source/common
+SOURCE			identity.cpp
+SOURCE			protectionkey.cpp
+SOURCE			authexpression.cpp
+SOURCE			plugindesc.cpp
+SOURCE			idandstring.cpp
+SOURCE			authpatchdata.cpp
+SOURCE			authserveripc.cpp
+
+LIBRARY			estor.lib efsrv.lib euser.lib
+LIBRARY			cryptography.lib random.lib hash.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/group/authserver.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2005-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: 
+* authserver.exe Implementation of authentication server
+*
+*/
+
+
+/**
+ @file
+*/
+
+CAPABILITY TrustedUI ProtServ ReadDeviceData WriteDeviceData Location SurroundingsDD UserEnvironment ReadUserData WriteUserData
+
+target authserver.exe
+targettype exe
+
+// this is an EXE and therefore does not need to
+// explicitly specify any further UIDs.  Therefore
+// specify the reserved UID twice.
+UID				0x102740FC 0x102740FC
+VENDORID		0x70000001
+
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+USERINCLUDE		../source/server 
+USERINCLUDE		../source/common
+USERINCLUDE		../source/client
+USERINCLUDE		../inc/authserver
+USERINCLUDE		../inc_private
+
+SOURCEPATH		../source/server
+SOURCE			authserver.cpp
+SOURCE			authserversession.cpp
+SOURCE			authmain.cpp
+SOURCE			authdb.cpp
+SOURCE			transientkeyinfo.cpp
+SOURCE			encryptedprotectionkey.cpp
+SOURCE			transientkey.cpp
+
+SOURCE			evaluator.cpp
+SOURCE			pluginmgr.cpp
+SOURCE			pluginobserver.cpp
+SOURCE			trainingmgr.cpp
+SOURCE			authtransaction.cpp
+SOURCE			authrepository.cpp
+
+LIBRARY			ecom.lib edbms.lib estor.lib pbe.lib efsrv.lib euser.lib
+LIBRARY			cryptography.lib random.lib
+LIBRARY			authcommon.lib scsserver.lib
+LIBRARY			sectcbutil.lib
+LIBRARY			centralrepository.lib
+SMPSAFE
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/group/bld.inf	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,155 @@
+/*
+* Copyright (c) 2005-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: 
+* Authentication Server implementation 
+*
+*/
+
+
+/**
+ @file
+*/
+
+#include "../test/reftestplugin/group/bld.inf"
+
+PRJ_PLATFORMS
+DEFAULT GCCE
+
+PRJ_EXPORTS
+
+#ifdef SYMBIAN_OLD_EXPORT_LOCATION
+../inc/authserver/authserver_client.h		/epoc32/include/authserver/authserver_client.h
+#endif
+../inc/authserver/authclient.h				SYMBIAN_OS_LAYER_PUBLIC_EXPORT_PATH(authserver/authclient.h)
+../inc/authserver/authexpression.h			SYMBIAN_OS_LAYER_PUBLIC_EXPORT_PATH(authserver/authexpression.h)
+../inc/authserver/authexpression.inl		SYMBIAN_OS_LAYER_PUBLIC_EXPORT_PATH(authserver/authexpression.inl)
+../inc/authserver/auth_srv_errs.h			SYMBIAN_OS_LAYER_PUBLIC_EXPORT_PATH(authserver/auth_srv_errs.h)
+../inc/authserver/authmgrclient.h			SYMBIAN_OS_LAYER_PUBLIC_EXPORT_PATH(authserver/authmgrclient.h)
+../inc/authserver/authplugininterface.h		SYMBIAN_OS_LAYER_PUBLIC_EXPORT_PATH(authserver/authplugininterface.h)
+../inc/authserver/authtypes.h				SYMBIAN_OS_LAYER_PUBLIC_EXPORT_PATH(authserver/authtypes.h)
+../inc/authserver/identity.h				SYMBIAN_OS_LAYER_PUBLIC_EXPORT_PATH(authserver/identity.h)
+../inc/authserver/plugindesc.h				SYMBIAN_OS_LAYER_PUBLIC_EXPORT_PATH(authserver/plugindesc.h)
+../inc/authserver/plugindesc.inl			SYMBIAN_OS_LAYER_PUBLIC_EXPORT_PATH(authserver/plugindesc.inl)
+../inc/authserver/protectionkey.h			SYMBIAN_OS_LAYER_PUBLIC_EXPORT_PATH(authserver/protectionkey.h)
+../inc/authserver/aspubsubdefs.h			SYMBIAN_OS_LAYER_PUBLIC_EXPORT_PATH(authserver/aspubsubdefs.h)
+../inc/authserver/idandstring.h				SYMBIAN_OS_LAYER_PUBLIC_EXPORT_PATH(authserver/idandstring.h)
+#ifdef SYMBIAN_OLD_EXPORT_LOCATION
+../inc/authserver/log.h						/epoc32/include/authserver/log.h
+#endif
+../inc/authserver/authpatchdata.h				SYMBIAN_OS_LAYER_PLATFORM_EXPORT_PATH(authserver/authpatchdata.h)
+
+
+// ROMKIT includes
+../inc/authserver.iby /epoc32/rom/include/authserver.iby
+
+
+#ifndef TOOLS
+#ifndef TOOLS2
+
+PRJ_MMPFILES
+
+authcommon.mmp
+authclient.mmp
+authserver.mmp
+
+
+PRJ_TESTMMPFILES
+../test/authtool/authtool.mmp
+../test/tauthkeys/tauthkeys.mmp
+../test/tauthdb/tauthdb.mmp
+../test/tauthcliserv/tauthcliserv.mmp
+../test/tauthplugins/testplugins.mmp
+../test/tauthplugins/tauthplugins.mmp
+../test/tAuthSvr/group/tAuthSvr.mmp
+../test/tAuthSvr/group/tAuthPlugin.mmp
+//Versions of tAuthSvr.mmp with different capabilities. wdd=WriteDeviceData, nc=NoCapabilities
+../test/tAuthSvr/group/tauthsvrwdd.mmp
+../test/tAuthSvr/group/tauthsvrnc.mmp
+../test/tAuthSvr/group/tauthpluginupgrade.mmp
+../test/tAuthSvr/group/tpostmarketramplugin.mmp
+../test/tauthplugins/testpluginsupgrade.mmp
+// Security Test.
+../test/securitytests/group/authsecuritytests.mmp
+
+makefile ../test/tAuthSvr/tpostmarketplugins/testdata/buildpostmarketplugintestdata.fil
+
+#endif // TOOLS2
+#endif // TOOLS
+
+PRJ_TESTEXPORTS
+../test/tauthkeys/scripts/tauthkeys.script /epoc32/winscw/c/tauth/tauthkeys/scripts/tauthkeys.script
+../test/tauthdb/scripts/tauthdb.script /epoc32/winscw/c/tauth/tauthdb/scripts/tauthdb.script
+../test/tauthcliserv/scripts/tauthcliserv.script /epoc32/winscw/c/tauth/tauthcliserv/scripts/tauthcliserv.script
+../test/tauthcliserv/scripts/tauthexpr.script /epoc32/winscw/c/tauth/tauthexpr/scripts/tauthexpr.script
+../test/tauthcliserv/scripts/tauthcliserv_debug.script /epoc32/winscw/c/tauth/tauthcliserv/scripts/tauthcliserv_debug.script
+../test/tauthplugins/scripts/tauthplugins.script /epoc32/winscw/c/tauth/tauthplugins/scripts/tauthplugins.script
+../test/tAuthSvr/scripts/tAuthSvr2.script   	/epoc32/winscw/c/tauth/tauthsvr/scripts/tauthsvr2.script
+../test/tAuthSvr/scripts/tAuthSvr4.script   	/epoc32/winscw/c/tauth/tauthsvr/scripts/tauthsvr4.script
+../test/tAuthSvr/scripts/tAuthSvr5.script   	/epoc32/winscw/c/tauth/tauthsvr/scripts/tauthsvr5.script
+../test/tAuthSvr/scripts/tAuthSvr6.script   	/epoc32/winscw/c/tauth/tauthsvr/scripts/tauthsvr6.script
+../test/tAuthSvr/scripts/tauthsvroom.script   	/epoc32/winscw/c/tauth/tauthsvr/scripts/tauthsvroom.script
+../test/tAuthSvr/scripts/tauthsvrclock.script  	/epoc32/winscw/c/tauth/tauthsvr/scripts/tauthsvrclock.script
+../test/tAuthSvr/scripts/tauthsvroom.ini   	/epoc32/winscw/c/tauth/tauthsvr/scripts/tauthsvroom.ini
+../test/tAuthSvr/scripts/tAuthSvr2.ini   	/epoc32/winscw/c/tauth/tauthsvr/scripts/tauthsvr2.ini
+../test/tAuthSvr/scripts/tAuthSvr2_unicode.ini	/epoc32/winscw/c/tauth/tauthsvr/scripts/tauthsvr2_unicode.ini
+../test/tAuthSvr/testdata/AuthSvrPolicy.ini			/epoc32/winscw/c/tauth/tauthsvr/testdata/authsvrpolicy.ini
+../test/tAuthSvr/testdata/initialisation_Info.ini	/epoc32/winscw/c/tauth/tauthsvr/testdata/initialisation_info.ini
+../test/tAuthSvr/testdata/Pin11113100Db.ini		/epoc32/winscw/c/tauth/tauthsvr/testdata/pin11113100db.ini
+../test/tAuthSvr/testdata/Pin11113101Db.ini		/epoc32/winscw/c/tauth/tauthsvr/testdata/pin11113101db.ini
+../test/tAuthSvr/testdata/Pin11113102Db.ini		/epoc32/winscw/c/tauth/tauthsvr/testdata/pin11113102db.ini
+../test/tAuthSvr/testdata/Pin11113103Db.ini		/epoc32/winscw/c/tauth/tauthsvr/testdata/pin11113103db.ini
+../test/tAuthSvr/testdata/Pin11113104Db.ini		/epoc32/winscw/c/tauth/tauthsvr/testdata/pin11113104db.ini
+../test/tAuthSvr/testdata/cenrep1.txt			/epoc32/winscw/c/tauth/tauthsvr/testdata/cenrep1.txt
+../test/tAuthSvr/testdata/cenrep2.txt			/epoc32/winscw/c/tauth/tauthsvr/testdata/cenrep2.txt
+../test/tAuthSvr/testdata/cenrep3.txt			/epoc32/winscw/c/tauth/tauthsvr/testdata/cenrep3.txt
+../test/tAuthSvr/scripts/batchfiles/te_tauthsvr4_pre1.bat /epoc32/winscw/c/tauth/tauthsvr/scripts/batchfiles/te_tauthsvr4_pre1.bat
+../test/tAuthSvr/scripts/batchfiles/pretauthsvroom.bat	 /epoc32/winscw/c/tauth/tauthsvr/scripts/batchfiles/pretauthsvroom.bat
+../test/tAuthSvr/scripts/batchfiles/posttauthsvroom.bat	 /epoc32/winscw/c/tauth/tauthsvr/scripts/batchfiles/posttauthsvroom.bat
+../test/tAuthSvr/scripts/batchfiles/te_tauthsvr4_pre2.bat /epoc32/winscw/c/tauth/tauthsvr/scripts/batchfiles/te_tauthsvr4_pre2.bat
+../test/tAuthSvr/scripts/batchfiles/te_tauthsvr4_pre3.bat /epoc32/winscw/c/tauth/tauthsvr/scripts/batchfiles/te_tauthsvr4_pre3.bat
+../test/tAuthSvr/scripts/batchfiles/te_tauthsvr4_post1.bat /epoc32/winscw/c/tauth/tauthsvr/scripts/batchfiles/te_tauthsvr4_post1.bat
+../test/tAuthSvr/testdata/pinplugin_inactive.txt	/epoc32/winscw/c/tauth/tauthsvr/testdata/pinplugin_inactive.txt
+../inc/tAuthSvr.iby /epoc32/rom/include/tauthsvr.iby
+../test/tAuthSvr/scripts/batchfiles/post_tauthsvr.bat		/epoc32/winscw/c/tauth/tauthsvr/scripts/batchfiles/post_tauthsvr.bat
+
+
+
+// Files for PostMarketPlugin Support tests.
+../test/tAuthSvr/scripts/tpostmarketplugin.script   	/epoc32/winscw/c/tauth/tauthsvr/scripts/tpostmarketplugin.script
+../test/tAuthSvr/scripts/tpostmarketpluginenabled_winscw.script   	/epoc32/winscw/c/tauth/tauthsvr/scripts/tpostmarketpluginenabled_winscw.script
+../test/tAuthSvr/scripts/tpostmarketpluginenabled1_winscw.script   	/epoc32/winscw/c/tauth/tauthsvr/scripts/tpostmarketpluginenabled1_winscw.script
+../test/tAuthSvr/scripts/tpostmarketplugin_macroenabled.script	/epoc32/winscw/c/tauth/tauthsvr/scripts/tpostmarketplugin_macroenabled.script
+../test/tAuthSvr/scripts/tpostmarketplugin.ini   	/epoc32/winscw/c/tauth/tauthsvr/scripts/tpostmarketplugin.ini
+../test/tAuthSvr/tpostmarketplugins/testdata/epoc_enablepostmarketplugin.ini	/epoc32/data/epoc_enablepostmarketplugin.ini
+../test/tAuthSvr/tpostmarketplugins/testdata/epoc_patchdatapositive.ini	/epoc32/data/epoc_patchdatapositive.ini
+../test/tAuthSvr/tpostmarketplugins/testdata/epoc_patchdatanegative.ini	/epoc32/data/epoc_patchdatanegative.ini
+../test/tAuthSvr/scripts/batchfiles/pre_postmarketplugin.bat	/epoc32/winscw/c/tauth/tauthsvr/scripts/batchfiles/pre_postmarketplugin.bat
+../test/tAuthSvr/scripts/batchfiles/post_postmarketplugin.bat	/epoc32/winscw/c/tauth/tauthsvr/scripts/batchfiles/post_postmarketplugin.bat
+../test/tAuthSvr/scripts/batchfiles/pre_patchdata_negative.bat	/epoc32/winscw/c/tauth/tauthsvr/scripts/batchfiles/pre_patchdata_negative.bat
+../test/tAuthSvr/scripts/batchfiles/pre_patchdata_positive.bat	/epoc32/winscw/c/tauth/tauthsvr/scripts/batchfiles/pre_patchdata_positive.bat
+../test/tAuthSvr/testdata/Pin10234100Db.ini		/epoc32/winscw/c/tauth/tauthsvr/testdata/pin10234100db.ini
+
+// Files for ClientSid Support tests.
+../test/tAuthSvr/scripts/tclientsidsupport.script   	/epoc32/winscw/c/tauth/tauthsvr/scripts/tclientsidsupport.script
+../test/tAuthSvr/scripts/tclientsidsupport.ini   	/epoc32/winscw/c/tauth/tauthsvr/scripts/tclientsidsupport.ini
+../test/tAuthSvr/scripts/batchfiles/post_tclientsidsupport.bat		/epoc32/winscw/c/tauth/tauthsvr/scripts/batchfiles/post_tclientsidsupport.bat
+
+//Files for Auth Security Tests.
+../test/securitytests/scripts/authsecuritytests.script	/epoc32/winscw/c/tauth/securitytests/scripts/authsecuritytests.script
+../test/securitytests/scripts/authsecuritytests.ini	/epoc32/winscw/c/tauth/securitytests/scripts/authsecuritytests.ini
+
+//Files for performance tests.
+../test/tAuthSvr/scripts/tauthsvr_performance.script   	/epoc32/winscw/c/tauth/tauthsvr/scripts/tauthsvr_performance.script
+../test/tAuthSvr/scripts/tauthsvr_performance.ini   	/epoc32/winscw/c/tauth/tauthsvr/scripts/tauthsvr_performance.ini
+../test/tAuthSvr/scripts/performance_log_parser.pl  	/epoc32/winscw/c/tauth/tauthsvr/scripts/performance_log_parser.pl 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/group/security_authserver.history.xml	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<relnotes name="Authentication Services">
+  <purpose>
+  </purpose>
+
+  <minorchange revision="011">
+    Modifications to Interface classification and status from publishedall released to publishedpartner prototype
+  </minorchange>
+  
+ <deliverystep number="211" name="Security: Enabling Authentication Provider Partners" osproject="Diran" revision="010">
+    <milestone project="GT0433" number="MS3.5"/>
+    <preq number="219" title="Enabling Authentication Provider Partners">
+      Reference Pin plugin added for the authentication Server
+    </preq>
+  </deliverystep>
+
+ <deliverystep number="136" name="Security: Authentication Server" osproject="Diran" revision="009">
+    <milestone project="GT00433" number="MS3.4"/>
+    <preq number="218" title="Authentication Server">
+      This delivery step includes the new component Authentication Server and it's associated test code.
+    </preq>
+  </deliverystep>
+
+  <deliverystep number="496" name="EC073: Security: Crypto Services Header File Refactoring" osproject="Oghma" revision="008">
+	  <milestone project="GT0313" number="MS3.7"/>
+	  <ec number="73" title="Crypto Services Header File Refactoring (to simplify the SDK creation process)">
+		  Non-exported published functions made internal.
+	  </ec>
+  </deliverystep>
+  
+  <deliverystep number="708" name="Security - Alignment of CBR and System Model components" osproject="Oghma" revision="007">
+    <milestone project="GT0313" number="MS3.7"/>
+    <preq number="775" title="Alignment of CBR and System Model components">
+      Modified the ipr category of authtool.
+    </preq>
+  </deliverystep>
+
+  <defect number="DEF106230" title="Clean up build's tagscan errors" revision="006">
+    Removed tagscan errors.
+  </defect>
+
+  <ec number="075" title="Triage and address Coverity Errors in Security Subsystem" revision="005">
+    Fixed two problems in the trainingmgr.cpp file. The iResult variable was put on the CleanupStack in the CTrainingMgr::RegisterFirstIdentityL() method. It was a problem because this variable was already kept on the CleanupStack as a class member. Moreover, a potential memory leak was fixed in this method.
+  </ec>
+
+  <preq number="1182" title="GNU Make-based build system" revision="004">
+    TOOLS2 macro is added with TOOLS.
+  </preq>
+
+  <preq number="1182" title="GNU Make-based build system" revision="003">
+    Changed according to filename policy to support the building of Symbian OS on both Windows and Linux for the test code.
+  </preq>
+
+  <minorchange revision="002">
+    Removed the compile errors and the armv5 warning notes.
+  </minorchange>
+
+  <defect number="DEF102043" title="Makesis &amp; SWI assumes system drive is c:" revision="001">
+    Removed hardcoded references to C drive and replaced with system drive.
+  </defect>
+</relnotes>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/group/security_authserver.mrp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,13 @@
+component	security_authserver
+source	\sf\os\security\authenticationservices\authenticationserver
+binary	\sf\os\security\authenticationservices\authenticationserver\group	all
+exports	\sf\os\security\authenticationservices\authenticationserver\group
+
+notes_source	\component_defs\release.src
+
+
+#  == IPR section auto-inserted from distribution.policy files  ==
+ipr E 
+ipr T \sf\os\security\authenticationservices\authenticationserver\test
+
+# == end auto-inserted section ==
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/inc/authserver.iby	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+
+#ifndef __AUTHSERV_IBY__
+#define __AUTHSERV_IBY__
+
+define ZDRIVE \epoc32\data\z
+
+REM Authentication Server
+
+file=ABI_DIR\BUILD_DIR\authserver.exe		sys\bin\authserver.exe
+file=ABI_DIR\BUILD_DIR\authclient.dll		sys\bin\authclient.dll
+file=ABI_DIR\BUILD_DIR\authcommon.dll		sys\bin\authcommon.dll
+
+
+// When SYMBIAN_ENABLE_POST_MARKET_AUTHENTICATION_PLUGINS is defined, all plugins visible to 
+// the ECOM service will be loaded. By default it is not defined - only ROM based plugins 
+// will be loaded
+
+#ifdef SYMBIAN_ENABLE_POST_MARKET_AUTHENTICATION_PLUGINS
+patchdata authcommon.dll@KEnablePostMarketAuthenticationPlugins 0x01
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/inc/authserver/aspubsubdefs.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,89 @@
+/*
+* Copyright (c) 2005-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: 
+* Authserver publish and subscribe properties.  
+*
+*/
+
+
+/**
+ @file  
+ @publishedAll
+ @released
+*/
+
+#ifndef ASPUBSUBDEFS_H
+#define ASPUBSUBDEFS_H
+
+namespace AuthServer
+{
+/**
+ * Used to write to and read from the publish and subscribe property
+ * KUidAuthServerLastAuth. 
+ *
+ * @see KUidAuthServerLastAuth
+ **/
+NONSHARABLE_STRUCT(TLastAuth)
+	{
+	TLastAuth() { Mem::FillZ(this, sizeof(TLastAuth)); }
+	/// The identities id number or KUnknownIdentity
+	TIdentityId iId;
+	/// The time of the authentication, 0 if unknown 
+	TTime       iAuthTime;
+	/// The highest number of combinations of the authentication methods
+	/// used
+	TEntropy    iMaxCombinations;
+	/// the lowest false positive rate of the methods used
+	TPercentage iFalsePositiveRate;
+	/// the lowest false negative rate of the methods used
+	TPercentage iFalseNegativeRate;
+	/// the number of factors (i.e. plugins) combined to make the
+	/// authentication
+	TInt32      iNumFactors;
+	};
+
+/**
+ * This is the publish and subscribe property used by the Authentication
+ * Server to publish the details of the last authentication. The
+ * value is of type TLastAuth and can be retrieved using code such as:
+ * <code>
+ * TLastAuth lastAuth;
+ * TPckg<TLastAuth> authPkg(lastAuth);
+ * RProperty::Get(KAuthServerSecureId, KUidAuthServerLastAuth, authPkg);
+ * </code>
+ *
+ * The property is published each time an authentication or deauthentication
+ * is made, even if the same identity is authenticated. To be notified only
+ * when the identity changes, subscribe to KUidAuthServerAuthChangeEvent.
+ *
+ */
+const TUint KUidAuthServerLastAuth = { 0x10281843 };
+
+
+/**
+ * This is the publish and subscribe property used by the Authentication
+ * Server to notify subscribers of a change of authenticated identity.  The
+ * published value is of type TUint and will contain the id number of the last
+ * identity authenticated.
+ *
+ * The property is published only when the identity changes, reauthentication
+ * with a different method will not result in notification.
+ *
+ */
+const TUint KUidAuthServerAuthChangeEvent = { 0x10281845 };
+
+}
+
+#endif /*ASPUBSUBDEFS_H*/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/inc/authserver/auth_srv_errs.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,183 @@
+/*
+* Copyright (c) 2005-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: 
+* Contains the list of error values that may be returned. 
+*
+*/
+
+
+/**
+ @file 
+ @publishedAll
+ @released
+*/
+
+#ifndef AUTH_SRV_ERRS_H
+#define AUTH_SRV_ERRS_H
+
+#include <e32def.h>
+
+/**
+	Attempted to internalize an invalid authentication expression stream.
+	
+	If this error occurs on the server side because the client
+	has sent an invalid externalization buffer they are panicked
+	with "AUTHSERVER 3", instead of being completed with this
+	error code.
+
+	This error should not occur if clients use the supplied
+	RAuthClient API.
+ */
+const TInt KErrAuthServInvalidInternalizeExpr = -10800;
+
+/**
+	Attempted to internalize an authentication expression stream
+	with an unsupported version.
+	
+	The authentication server will complete an authentication
+	request with this value if the supplied stream has an
+	unsupported version number.
+
+	This error code is rare and is caused by sending a corrupt
+	externalized expression to the server, or if the expression
+	was internalized with an older version of the client code.
+	This error should not occur if clients use the supplied
+	RAuthClient API.
+ */
+const TInt KErrAuthServUnsupportedExprVersion = -10801;
+
+/**
+    An attempt was made to reference a plugin by id number and no such 
+    plugin exists  
+ **/
+const TInt KErrAuthServNoSuchPlugin = -10802;
+
+
+/**
+    An attempt was made to reference an identity by id number and no such 
+    identity exists  
+ **/
+const TInt KErrAuthServNoSuchIdentity = -10803;
+
+/**
+    A plugin returns this on behalf of a user wanting to skip it.
+ **/
+const TInt KErrAuthServPluginCancelled = -10804;
+
+/**
+    A plugin returns this on behalf of a user wanting to completely quit the
+    current operation.
+ **/
+const TInt KErrAuthServPluginQuit = -10805;
+
+
+/**
+    This error is reported when an operation is attempted for which an
+    authentication must have already been performed.
+ **/
+const TInt KErrAuthServAuthenticationRequired = -10806;
+
+/**
+	Attempted to add a new identity to the authentication
+	server database with an existing ID.
+ */
+const TInt KErrAuthServIdentityAlreadyExists = -10807;
+
+/**
+	Attempted to set or retrieve a description for an identity,
+	or remove an identity which was not in the authentication database.
+ */
+const TInt KErrAuthServIdentityNotFound = -10808;
+
+/**
+	Attempted to remove or retrieve the key info for
+	a training record that was not in the authentication
+	database.
+ */
+const TInt KErrAuthServTrainingNotFound = -10809;
+
+/**
+    This error is reported when the authserver has not been able to register a
+    new identity due to no plugins training successfully.
+ **/
+const TInt KErrAuthServRegistrationFailed = -10810;
+
+
+/**
+    This error is reported when an authclient attempts to remove the last
+    identity.
+ **/
+const TInt KErrAuthServCanNotRemoveLastIdentity = -10811;
+
+
+/**
+    This error is reported when an authclient attempts to remove the last
+    trained plugin for an identity.
+ **/
+const TInt KErrAuthServCanNotRemoveLastPlugin = -10812;
+
+
+/**
+    This error is reported when an attempt to use an inactive plugin is made.
+ **/
+const TInt KErrAuthServPluginNotActive = -10813;
+
+/**
+	Client attempted to create an identity with a description
+	longer than 255 characters, or to change an existing identity's
+	description to use more than 255 characters.
+ */
+const TInt KErrAuthServDescTooLong = -10814;
+
+/**
+	This error is reported when the authentication strength alias
+	supplied by the client is not found in the authserver's
+	central repository file.
+ */
+
+const TInt KErrUnknownAuthStrengthAlias = -10815;
+
+/**
+	This error is reported when an authentication strength in 
+	the authserver's central repository file is undefined.
+ */
+
+const TInt KErrAuthStrengthAliasNotDefined = -10816;
+
+/**
+	This error is reported when an alias string defining an
+	authentication strength in the authserver's central repository 
+	file contains expression other than plugin Id, plugin Types 
+	and operators ("& and "|").
+ */
+
+const TInt KErrAuthServInvalidAliasStringExpression = -10817;
+
+
+/**
+    This error is reported when an authclient attempts to remove the default
+    identity.
+ */
+const TInt KErrAuthServCanNotRemoveDefaultIdentity = KErrAuthServCanNotRemoveLastIdentity;
+
+/**
+    This error is reported when an authentication manager client attempts to 
+    reset an identity and this may result in zero plugins registering the new identity data.
+    This can happen if a reset request is issued for all plugins registered for an identity 
+    and none of the plugins are of knowledge type.
+ */
+const TInt KErrAuthServResetMayLoseIdentity = -10818;
+
+#endif	// #ifndef AUTH_SRV_ERRS_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/inc/authserver/authclient.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,135 @@
+/*
+* Copyright (c) 2005-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: 
+* RAuthclient - external authentication client session interface
+* The defined fuctionality is used by clients to access the authentication
+* server.
+* The access to a specific functionality is dependant on the client 
+* capabilities and may be restricted.             
+*
+*/
+
+
+/**
+ @file 
+ @publishedAll
+ @released
+*/
+
+#ifndef AUTHCLIENT_H
+#define AUTHCLIENT_H
+
+#include "authserver/identity.h"
+#include "authserver/authexpression.h"
+#include "authserver/plugindesc.h"
+#include "authserver/idandstring.h"
+#include <scs/scsclient.h>
+namespace AuthServer
+{
+
+class CAsyncResponseDecoder;
+
+/**
+ * Client side interface to the authentication server providing general
+ * authentication and plugin query services.
+ *
+ */	
+class RAuthClient : public RScsClientBase
+	{
+	
+	friend class CAsyncResponseDecoder;
+	
+public:
+
+    IMPORT_C RAuthClient();
+    
+	IMPORT_C TInt Connect();
+
+	IMPORT_C void AuthenticateL(
+	    const CAuthExpression& aExpression,
+	    TTimeIntervalSeconds   aTimeout,
+		TBool                  aClientSpecificKey,
+		TBool                  aWithString,
+	    CIdentity*&            aIdentityResult, 
+	    TRequestStatus&        aStatus);
+	
+	IMPORT_C CIdentity* AuthenticateL(
+	    const CAuthExpression& aExpression,
+	    TTimeIntervalSeconds   aTimeout,
+		TBool                  aClientSpecificKey,
+		TBool                  aWithString);
+
+	IMPORT_C CIdentity* AuthenticateL(
+			const CAuthExpression& 	aAuthExpression,
+		    TTimeIntervalSeconds   	aTimeout,
+			TBool                  	aClientSpecificKey,
+			TUid 				   	aClientSid,
+			TBool                  	aWithString,
+			const TDesC&			aClientMessage);
+			
+	IMPORT_C void AuthenticateL(
+		const CAuthExpression& 	aAuthExpression,
+	    TTimeIntervalSeconds   	aTimeout,
+		TBool                  	aClientSpecificKey,
+		TUid 					aClientSid,
+		TBool                  	aWithString,
+	    const TDesC&			aClientMessage,
+	    CIdentity*&            	aIdentityResult,
+	    TRequestStatus&        	aStatus
+		);
+
+	IMPORT_C void DeauthenticateL();
+	
+	IMPORT_C void PluginsL(RPluginDescriptions& aPluginList);
+	IMPORT_C void ActivePluginsL(RPluginDescriptions& aPluginList);
+	IMPORT_C void PluginsOfTypeL(TAuthPluginType aType,
+								  RPluginDescriptions& aPluginList);
+	
+	IMPORT_C void PluginsWithTrainingStatusL(
+        TAuthTrainingStatus aStatus,
+		RPluginDescriptions& aPluginList);
+	
+	IMPORT_C void IdentitiesL(RIdentityIdArray& aIdList);
+	IMPORT_C void IdentitiesWithStringL(RIdAndStringArray& aList);
+
+	IMPORT_C HBufC* IdentityStringL(TIdentityId aId);
+	IMPORT_C void SetIdentityStringL(TIdentityId aId, const TDesC& aString);
+	
+	IMPORT_C TPluginId PreferredTypePluginL(TAuthPluginType aPluginType);
+	
+	IMPORT_C TUint Cancel();
+	IMPORT_C void Close();
+	
+	IMPORT_C void ListAuthAliasesL(RPointerArray<HBufC>& aAuthAliasList);
+	
+	IMPORT_C CAuthExpression* CreateAuthExpressionL(const TDesC& aAuthString) const;
+	
+protected:
+	/* @internalComponent */
+	void CheckAsyncDecoderL();
+	/* @internalComponent */
+	HBufC8* SendReceiveBufferLC(TInt aMessage);
+	/* @internalComponent */
+	HBufC8* SendReceiveBufferLC(TInt aMessage, TIpcArgs& aArgs);
+	
+private:
+	TInt StartAuthServer();
+
+protected:
+	CAsyncResponseDecoder* iAsyncResponseDecoder;
+};
+  
+} // namespace
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/inc/authserver/authexpression.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,125 @@
+/*
+* Copyright (c) 2005-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: 
+* CAuthExpression declaration
+*
+*/
+
+
+/**
+ @file 
+ @publishedAll
+ @released
+*/
+
+#ifndef AUTHEXPRESSION_H
+#define AUTHEXPRESSION_H
+
+#include <s32strm.h>
+#include "authserver/authtypes.h"
+
+
+namespace AuthServer
+{
+
+
+class CAuthExpression : public CBase
+/**
+	Describes an authentication expression.
+
+	AuthServer clients construct expressions using
+	AuthExpr, combined with AuthAnd and AuthOr, or
+	the equivalent overloaded & and | operators.
+
+	@see AuthExpr
+	@see AuthAnd
+	@see AuthOr
+ */
+	{
+public:
+	/**
+		Externalize this object to the supplied stream.
+
+		@param	aWriteStream Stream to write persistent state to.
+	 */
+	virtual void ExternalizeL(RWriteStream& aWriteStream) const = 0;
+	};
+
+
+class TAuthExpressionWrapper
+/**
+	Simple wrapper around a pointer to an authentication
+	expression.  It is defined so the binary & and | operators
+	can be overloaded to generate concise expressions.
+	
+	Like CAuthExpression, this class should not be
+	used directly by clients, but via the AuthExpr,
+	AuthAnd, and AuthOr functions, or via the overloaded
+	& and | operators.  For this reason, the constructors
+	are not exported.
+	
+	@see AuthExpr
+	@see AuthAnd
+	@see AuthOr
+ */
+	{
+public:
+	/* @internalComponent*/
+	TAuthExpressionWrapper(CAuthExpression* aExpression);
+	/* @internalComponent */
+	TAuthExpressionWrapper(TAuthPluginType aType);
+	/* @internalComponent */
+	TAuthExpressionWrapper(TPluginId aPluginId);
+	/* @internalComponent */
+	TAuthExpressionWrapper();
+	
+	inline operator CAuthExpression*();
+	
+private:
+	/**
+		Pointer to the referenced authentication expression.
+		This is NULL in OOM.
+	 */
+	CAuthExpression*const iPtr;
+	};
+
+
+IMPORT_C TAuthExpressionWrapper AuthExpr(TAuthPluginType aType);
+IMPORT_C TAuthExpressionWrapper AuthExpr(TPluginId aPluginId);
+IMPORT_C TAuthExpressionWrapper AuthExpr();
+
+IMPORT_C TAuthExpressionWrapper AuthOr(CAuthExpression* aLeft, CAuthExpression* aRight);
+IMPORT_C TAuthExpressionWrapper AuthAnd(CAuthExpression* aLeft, CAuthExpression* aRight);
+
+
+#define AUTH_EXPR_BINARY_OPS
+#ifdef AUTH_EXPR_BINARY_OPS
+
+// These binary operators provide a more concise way to write
+// authentication expressions than AuthOr and AuthAnd.  However,
+// their behaviour - dynamically allocating from the heap - is
+// non-obvious to a reader, so they are left as a build-time
+// option.
+
+inline TAuthExpressionWrapper operator&(TAuthExpressionWrapper aLeft, TAuthExpressionWrapper aRight);
+inline TAuthExpressionWrapper operator|(TAuthExpressionWrapper aLeft, TAuthExpressionWrapper aRight);
+
+#endif
+
+
+}	// namespace AuthServer
+
+#include "authserver/authexpression.inl"
+
+#endif // EXPRESSION_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/inc/authserver/authexpression.inl	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2005-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: 
+* @publishedAll
+* @released
+*
+*/
+
+
+#ifndef AUTHEXPRESSION_INL
+#define AUTHEXPRESSION_INL
+
+#include "authserver/authexpression.h"
+
+namespace AuthServer
+{
+
+
+// -------- TAuthExpressionWrapper --------
+
+
+inline TAuthExpressionWrapper::operator CAuthExpression*()
+/**
+	Conversion operator recasts this object as a
+	pointer to the contained authorisation expression.
+ */
+	{
+	return iPtr;
+	}
+
+
+#ifdef AUTH_EXPR_BINARY_OPS
+
+
+inline TAuthExpressionWrapper operator&(TAuthExpressionWrapper aLeft, TAuthExpressionWrapper aRight)
+/**
+	This overloaded operator is a wrapper around a call to AuthAnd.
+	See AuthAnd for a full description.	
+	
+	@param	aLeft			Left subexpression.
+	@param	aRight			Right subexpression.
+	@return					Wrapper around new complex AND expression,
+							which is NULL if could not allocate.
+	@see AuthAnd
+ */
+	{
+	return AuthAnd(aLeft, aRight);
+	}
+
+
+inline TAuthExpressionWrapper operator|(TAuthExpressionWrapper aLeft, TAuthExpressionWrapper aRight)
+/**
+	This overloaded operator is a wrapper around a call to AuthOr
+	See AuthOr for a full description.	
+	
+	@param	aLeft			Left subexpression.
+	@param	aRight			Right subexpression.
+	@return					Wrapper around new complex OR expression,
+							which is NULL if could not allocate.
+	@see AuthOr
+ */
+	{
+	return AuthOr(aLeft, aRight);
+	}
+
+
+#endif	// #ifdef AUTH_EXPR_BINARY_OPS
+
+
+}	// namespace AuthServer
+
+
+#endif	// AUTHEXPRESSION_INL
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/inc/authserver/authmgrclient.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2005-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: 
+* RAuthMgrClient - external authentication client session interface
+* The defined fuctionality is used by clients to access the authentication
+* server for the purpose of managing identities.
+* The access to a specific functionality is dependant on the client 
+* capabilities and may be restricted.             
+*
+*/
+
+
+/**
+ @file 
+ @publishedAll
+ @released
+*/
+
+#ifndef AUTHMGRCLIENT_H
+#define AUTHMGRCLIENT_H
+
+#include "authserver/authclient.h"
+
+namespace AuthServer
+{
+
+/**
+ * Client side interface to the authentication server providing identity
+ * management services.
+ */	
+class RAuthMgrClient : public RAuthClient
+	{
+public:
+
+	IMPORT_C void RegisterIdentityL(CIdentity*& aIdentity,
+								   const TDesC& aDescription,  
+								   TRequestStatus& aRequest);
+
+	IMPORT_C void RemoveIdentityL(TIdentityId aId);
+
+
+	IMPORT_C void TrainPlugin(TIdentityId aId,
+							  TPluginId aPlugin,
+							  TRequestStatus& aRequest);
+
+	IMPORT_C void ForgetPluginL(TIdentityId aId,
+					  TPluginId aPlugin);
+
+	IMPORT_C void SetPreferredTypePluginL(TAuthPluginType aPluginType,
+										  TPluginId aPluginId);
+
+	IMPORT_C void ResetIdentityL(TIdentityId aId,
+								const TDesC& aRegistrationInformation);
+
+	IMPORT_C void ResetIdentityL(TIdentityId aId,
+								TAuthPluginType aPluginType,
+								const TDesC& aRegistrationInformation);
+
+	IMPORT_C void ResetIdentityL(TIdentityId aId,
+								RArray<TPluginId>& aPluginIdList,
+								RPointerArray<const HBufC>& aRegistrationInformation);
+	};
+} // namespace
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/inc/authserver/authpatchdata.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+
+
+/**
+ @file 
+ @publishedPartner
+ @released
+*/
+
+#include <e32base.h>
+
+ /**
+   This 8-bit variable is used in agent resolution. It is used to override AuthServer's 
+   default resolution behaviour of only loading plugins from the ROM drive. 
+   Compile time value is 0 - default behaviour. 
+   When non-zero, Authserver will load all plugins visible to the ECOM service regardless of 
+   the drive. 
+   This variable is changed at ROM build time using the patchdata obey keyword.
+   See Symbian OS Developer Library documentation on how to patch DLL data exports.
+   */
+   
+IMPORT_C extern const TUint8 KEnablePostMarketAuthenticationPlugins;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/inc/authserver/authplugininterface.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,276 @@
+/*
+* Copyright (c) 2005-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: 
+* CAuthPluginInterface 
+*
+*/
+
+
+/**
+ @file 
+ @publishedAll
+ @released
+*/
+
+#ifndef AUTHPLUGININTERFACE_H
+#define AUTHPLUGININTERFACE_H
+
+
+#include <authserver/authtypes.h>
+#include <ecom/implementationinformation.h>
+
+namespace AuthServer
+{
+
+/// The interface UID for the authentication plugin interface
+const TUid KCAuthPluginInterfaceUid = { 0x102740FE }; 
+
+
+/**
+ * The ECOM interface for authentication plugins. An authentication plugin is
+ * used to help identify the current device holder. When a plugin is asked to
+ * identify the holder, it interacts with the user and potentially hardware or
+ * services provided by other servers. The plugin then generates some data
+ * which is unique and repeatable for the input recieved. This data should
+ * not be persisted on the device in any form that can easily be used to
+ * recover the data.
+ *
+ * For example, a plugin might request a PIN number from the user. The plugin
+ * will take the number, perhaps compare the hash of the number against the
+ * hashes recorded during training and if a match is found return the identity
+ * along with some unique data associated with it.
+ *
+ */	
+class CAuthPluginInterface : public CBase
+	{
+public:
+
+	/**
+	 * @return the id of the plugin. This should be the ECOM implementation id.
+	 **/
+	virtual TPluginId Id() const = 0;
+
+	/**
+	 *
+	 * @return the name of the plugin.
+	 * 
+	 **/
+	virtual const TPtrC& Name() const = 0;
+	
+	/**
+	 *
+	 * @return a description of the plugin.
+	 * 
+	 **/
+	virtual const TPtrC& Description() const = 0;
+
+	/**
+	 *
+	 * @return the minimum entropy of the plugin.
+	 * 
+	 **/
+	virtual TEntropy MinEntropy() const = 0;
+	
+	/**
+	 *
+	 * @return the rate of false positive identifications.
+	 * 
+	 **/
+	virtual TPercentage FalsePositiveRate() const = 0;
+
+	/**
+	 *
+	 * @return the rate of false negative identifications.
+	 * 
+	 **/
+	virtual TPercentage FalseNegativeRate() const = 0;
+
+	/**
+	 *
+	 * @return the type of plugin
+	 * 
+	 **/
+	virtual TAuthPluginType Type() const = 0;
+
+	/**
+	 * Performs actions required to identify the current device holder. 
+	 *
+	 * For details see the reference/test implementation of a knowledge-type 
+	 * plugin called the pinplugin.
+	 *
+	 * @param aId in the event of a successfull call, aId will be set to the
+	 * id of the identity. The value is not modified otherwise. It should be
+	 * noted that a successful call includes the possibility of not
+	 * recognising the user in which case aId should be set to
+	 * KUnknownIdentity.
+	 *
+	 * @param aClientMessage A displayable text string parameter for authentication
+	 * requests.It shall be passed to plug-ins to display to the users.
+	 *
+	 * @param aResult in the event of a successfull call, aResult contains the
+	 * data generated from the identification process. This data is used by
+	 * the authentication server to generate a transient key which in turn is
+	 * used to decrypt the identities protection key. If the call was
+	 * unsuccessful or the user is unknown no buffer will be created. Ownership of 
+	 * the buffer is transfered to the caller.
+	 *
+	 * @param aRequest the request status through which the caller will be
+	 * notified of completion. Upon completion, the status value will be one of the
+	 * following :
+	 * KErrNone if the identification process is successful.
+	 * KErrAuthServPluginCancelled if the user cancels the identification process for
+	 * this plugin.
+	 * KErrAuthServPluginQuit if the user quits the whole identification
+	 * process.
+	 * ... or any of the system wide error codes.
+	 **/
+
+
+	virtual void Identify(TIdentityId& aId, const TDesC& aClientMessage, 
+						  HBufC8*& aResult, TRequestStatus& aRequest) = 0;
+
+	/**
+	 * Cancel the current action. This method must complete with KErrCancel
+	 * any outstanding asyncronous requests such as Train or Identify.
+	 **/
+
+
+	virtual void Cancel() = 0;
+	
+	/**
+	 * This method tells the plugin to operate in training mode. After the
+	 * successful this method the plugin should be able to correctly identify
+	 * the specified identity using the Identify method. If the plugin already
+	 * has existing training data for the identity then the data should be
+	 * replaced. Care should be taken to allow the user to cancel or quit the
+	 * training without losing the existing training.  
+	 * 
+	 * @param aId the identity for whom to train the plugin. This allows the
+	 * plugin to persist training data associated with the identity and delete
+	 * or update that data later on.
+	 *
+	 * @param aResult this buffer will be filled with data that matches the
+	 * current device holder. This should be the same data as is returned by
+	 * the Identify method for the same identity. Ownership of the buffer is 
+	 * transfered to the caller.
+	 *
+	 * @param aRequest the request status through which the caller will be
+	 * notified of completion. Upon completion the status value will be one of the
+	 * following :
+	 * KErrNone if the training process is successful.
+	 * KErrAuthServPluginCancelled if the user cancels the training process for
+	 * this plugin.
+	 * KErrAuthServPluginQuit if the user quits the whole training
+	 * process.
+	 * ... or any of the system wide error codes.
+	 **/
+
+
+	 virtual void Train(TIdentityId aId, HBufC8*& aResult,
+						TRequestStatus& aRequest) = 0;
+
+	/**
+	 * @return true if the plugin can be used for identification or training
+	 * purposes without further user intervention. 
+	 **/
+
+
+	virtual TBool IsActive() const = 0;
+	
+	/**
+	 * Remove any stored training data for the specified identity. This is
+	 * used if an identity is being removed from the device. No user
+	 * interaction should take place as a result of this call.
+	 *
+	 * @param aId the identity for whom to remove any persisted training data.
+	 *
+	 * @return KErrNone if the operation is successful.
+	 * @return KErrAuthServNoSuchIdentity if the TIdentityId wasn't recognised.
+	 * @return ... or any of the system wide error codes.
+	 **/
+
+
+	 virtual TInt Forget(TIdentityId aId) = 0;
+
+	/**
+	 * Pretend the device holder has identified themselves using a default
+	 * entry. For example, a pin number plugin would return the same data as
+	 * if the holder had entered the default pin. This call is used during the
+	 * creation of the initial device identity and allows the device to be
+	 * operated without the user being forced to train plugins the first time
+	 * the device is started. No user interaction should take place as a
+	 * result of this call.
+	 *
+	 * Only plugins of type EAuthKnowledge should support default
+	 * data. Plugins of other types will be ignored.
+	 *
+	 * @param aId The identity that will be registered using the default data. 
+	 * 
+	 * @param aOutputBuf This buffer should be filled with the data that would
+	 * be generated if the phone holder identified themselves using the
+	 * default manner. Ownership of the buffer is transfered to the caller. 
+	 *
+	 * @return KErrNone if the plugin supports default data.
+	 * @return KErrNotSupported if the plugin doesn't support default data.
+	 * @return ... or any of the system wide error codes.
+	 **/
+
+
+	 virtual TInt DefaultData(TIdentityId aId, HBufC8*& aOutputBuf) = 0;
+
+	/**
+	 * This method tells the plugin to remove the training data held for the given identity 
+	 * and to regenerate it using the supplied registration data. The intent of this method 
+	 * is to allow a backend reset of user credentials in situations where the user is not 
+	 * able to provide the credentials for some reason (for instance the user has forgotten 
+	 * the password). Note that no user interaction should take place as a result of this call. 
+	 * Since the registration data may not be usable by all plugin types it is expected that only 
+	 * EAuthKnowledge type plugins (those based on pins, passphrases, etc.) use this data for 
+	 * registering the user and return the result.
+	 *
+	 * @param aId The identity whose training data should be reset. 
+	 * 
+	 * @param aRegistrationData The data that can be used to register the identity. 
+	 * This data is meaningful for EAuthKnowledge type plugins. Other plugins may choose to 
+	 * ignore this parameter. An empty descriptor signifies the absence of registration data.
+	 *
+	 * @param aResult This buffer will be filled with data that matches the specified identity. 
+	 * This should be the same data subsequently returned by the Identify method for the same identity. 
+	 * Note that plugins that aren't supplied registration data or those that don't use the supplied 
+	 * registration data for the reset can return NULL. Ownership of the buffer is transfered to 
+	 * the caller.
+	 *
+	 * @return KErrNone if the plugin is successfully able to either remove and/or reset the training data.
+	 * @return KErrNotSupported if the plugin doesn't support a reset functionality.
+	 * @return ... or any of the system wide error codes.
+	 **/
+
+
+	 virtual TInt Reset(TIdentityId aId, const TDesC& aRegistrationData, 
+			 			HBufC8*& aResult) = 0;
+	
+	/**
+	 * 
+	 * Destructor.
+	 * 
+	 **/
+
+
+	virtual ~CAuthPluginInterface() {};
+	
+};	
+
+} // namespace
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/inc/authserver/authserver_client.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2005-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: 
+* This header file includes the header files which
+* applications need to use the authentication server.
+*
+*/
+
+
+/**
+ @file 
+ @internalTechnology 
+*/
+
+#ifndef AUTHSERVER_CLIENT_H
+#define AUTHSERVER_CLIENT_H
+
+#include <authserver/auth_srv_errs.h>
+#include <authserver/authtypes.h>
+#include <authserver/authexpression.h>
+#include <authserver/protectionkey.h>
+#include <authserver/identity.h>
+#include <authserver/plugindesc.h>
+#include <authserver/authclient.h>
+#include <authserver/authmgrclient.h>
+#include <authserver/aspubsubdefs.h>
+
+#endif	// #ifndef AUTHSERVER_CLIENT_H
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/inc/authserver/authtypes.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,71 @@
+/*
+* Copyright (c) 2005-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: 
+* Basic typedefs used by the Authentication Server
+*
+*/
+
+
+/**
+ @file 
+ @publishedAll
+ @released
+*/
+
+#ifndef AUTHTYPES_H
+#define AUTHTYPES_H
+
+#include <e32cmn.h>
+
+namespace AuthServer
+{
+typedef TUint32 TIdentityId;
+typedef TUint32 TPluginId;
+
+typedef TUint32 TEntropy;
+typedef TUint32 TPercentage;
+
+/////////////
+// constants and enums 
+/////////////
+
+const TUint32 KUnknownPluginId = 0;
+const TUint32 KUnknownIdentity = 0;
+const TUid KAuthServerSecureId = { 0x102740FC };
+const TInt KMaxDescLen = 255;
+
+enum TAuthPluginType
+    {
+	EAuthDefault   = 0,
+    EAuthBiometric = 1,
+    EAuthKnowledge = 64,
+    EAuthToken     = 128,
+	EAuthPerformance = 192
+    };
+    
+enum TAuthTrainingStatus
+    {
+    EAuthUntrained    = 1,
+    EAuthTrained      = 64,
+    EAuthFullyTrained = 128,
+    };
+
+/// Array types used by clients and server
+typedef RArray<TIdentityId>              RIdentityIdArray;
+typedef RArray<TPluginId>                RPluginIdArray;
+
+
+}   
+
+#endif // AUTHTYPES_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/inc/authserver/idandstring.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,67 @@
+/*
+* Copyright (c) 2005-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: 
+* CIdAndString class declaration
+*
+*/
+
+
+/**
+ @file 
+ @publishedAll
+ @released
+*/
+
+#ifndef IDANDSTRING_H
+#define IDANDSTRING_H
+
+#include <s32strm.h>
+#include <ct/rcpointerarray.h>
+#include "authserver/authtypes.h"
+
+namespace AuthServer
+{
+/**
+ * CIdAndString is an client side class of the authentication server. 
+ * It contains the relevant identity and corresponding displayable
+ * text associated with this identity.
+ * 
+ */
+NONSHARABLE_CLASS(CIdAndString) : public CBase
+	{
+public:
+
+	IMPORT_C static CIdAndString* NewLC(TIdentityId aId, const TDesC& aString);
+	IMPORT_C static CIdAndString* NewLC(RReadStream& aStream);
+
+	IMPORT_C void ConstructL(TIdentityId aId, const TDesC& aString);
+	
+	IMPORT_C ~CIdAndString(); 
+
+	IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+	void InternalizeL(RReadStream& aStream);
+	
+	IMPORT_C TIdentityId   Id()     const;
+	IMPORT_C HBufC*        String() const;
+	
+private:
+	TIdentityId iId;
+	HBufC*      iString;
+	};
+
+typedef RCPointerArray<CIdAndString> RIdAndStringArray;
+
+}   
+
+#endif // IDANDSTRING_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/inc/authserver/identity.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,78 @@
+/*
+* Copyright (c) 2005-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: 
+* CIdentity declaration
+*
+*/
+
+
+/**
+ @file 
+ @publishedAll
+ @released
+*/
+
+#ifndef IDENTITY_H
+#define IDENTITY_H
+
+#include "authserver/authtypes.h"
+#include "authserver/protectionkey.h"
+
+namespace AuthServer
+{
+/**
+ * CIdentity is an client side class of the authentication server. 
+ * CIdentity is returned as the result of an authentication.
+ * 
+ */
+class CIdentity : public CBase
+	{
+public:
+
+    IMPORT_C static CIdentity* NewL(TIdentityId aId,
+									CProtectionKey* aKey,
+									HBufC* aString);
+	
+    IMPORT_C static CIdentity* NewLC(TIdentityId aId,
+									 CProtectionKey* aKey,
+									 HBufC* aString);
+	
+    IMPORT_C static CIdentity* NewL(RReadStream& aStream);
+    IMPORT_C static CIdentity* NewLC(RReadStream& aStream);
+    
+	virtual ~CIdentity();
+
+	IMPORT_C TIdentityId Id() const;
+
+	IMPORT_C const CProtectionKey& Key() const;
+
+	IMPORT_C TDesC& String() const;
+	
+	IMPORT_C void ExternalizeL(RWriteStream& s) const;
+	IMPORT_C static CIdentity* InternalizeL(RReadStream& s);
+
+private:
+	void ConstructL(CProtectionKey* aKey,
+					HBufC* aString);
+	
+	CIdentity(TIdentityId aId);
+
+private:
+    TIdentityId           iId;
+    CProtectionKey* iKey;
+	HBufC*                iString;
+	};
+}
+
+#endif // IDENTITY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/inc/authserver/log.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,108 @@
+/*
+* Copyright (c) 2006-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: 
+* Prints debug information.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+*/
+ 
+#ifndef __AUTHSERVER_LOG_H__
+#define __AUTHSERVER_LOG_H__
+
+#include <e32debug.h>
+
+namespace AuthServ
+{
+
+#ifdef _DEBUG
+
+#define DEBUG_PRINTF(a) {AuthServ::DebugPrintf(__LINE__, __FILE__, a);}
+#define DEBUG_PRINTF2(a, b) {AuthServ::DebugPrintf(__LINE__, __FILE__, a, b);}
+#define DEBUG_PRINTF3(a, b, c) {AuthServ::DebugPrintf(__LINE__, __FILE__, a, b, c);}
+#define DEBUG_PRINTF4(a, b, c, d) {AuthServ::DebugPrintf(__LINE__, __FILE__, a, b, c, d);}
+#define DEBUG_PRINTF5(a, b, c, d, e) {AuthServ::DebugPrintf(__LINE__, __FILE__, a, b, c, d, e);}
+
+#define DEBUG_CODE_SECTION(a) TRAP_IGNORE({ a; }) 
+
+// UTF-8 overload of the DebufPrintf method. Should be used by default,
+// since it's cheaper both in CPU cycles and stack space.
+
+inline void DebugPrintf(TInt aLine, char* aFile, TRefByValue<const TDesC8> aFormat, ...)
+	{
+	VA_LIST list;
+	VA_START(list, aFormat);
+	
+	TTime now;
+	now.HomeTime();
+	
+	TBuf8<1024> buffer;
+	_LIT8(KAuthServLogPrefix, "[authserver] ");
+	_LIT8(KAuthServLineFileFormat, "%Ld Line: % 5d, File: %s -- ");
+	buffer.Append(KAuthServLogPrefix);
+	buffer.AppendFormat(KAuthServLineFileFormat, now.Int64(), aLine, aFile);
+	buffer.AppendFormatList(aFormat, list);
+	buffer.Append(_L8("\r\n"));
+	
+	RDebug::RawPrint(buffer);
+	
+	VA_END(list);
+	}
+	
+// Unicode DebufPrintf overload
+
+inline void DebugPrintf(TInt aLine, char* aFile, TRefByValue<const TDesC16> aFormat, ...)
+	{
+	VA_LIST list;
+	VA_START(list, aFormat);
+	
+	TTime now;
+	now.HomeTime();
+	
+	TBuf8<256> header;
+	_LIT8(KAuthServLogPrefix, "[authserver] ");
+	_LIT8(KAuthServLineFileFormat, "%Ld Line: % 5d, File: %s -- ");
+	header.Append(KAuthServLogPrefix);
+	header.AppendFormat(KAuthServLineFileFormat, now.Int64(), aLine, aFile);
+	
+	TBuf<1024> buffer;
+	buffer.Copy(header);
+	buffer.AppendFormatList(aFormat, list);
+	buffer.Append(_L("\r\n"));
+	
+	RDebug::RawPrint(buffer);
+	
+	VA_END(list);
+	}
+
+#else
+
+#define DEBUG_PRINTF(a)
+#define DEBUG_PRINTF2(a, b)
+#define DEBUG_PRINTF3(a, b, c)
+#define DEBUG_PRINTF4(a, b, c, d)
+#define DEBUG_PRINTF5(a, b, c, d, e)
+
+#define DEBUG_CODE_SECTION(a)
+
+#endif
+
+
+} // namespace AuthServ
+
+#endif // __AUTHSERVER_LOG_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/inc/authserver/plugindesc.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,99 @@
+/*
+* Copyright (c) 2005-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: 
+* CPluginDesc class declaration
+*
+*/
+
+
+/**
+ @file 
+ @publishedAll
+ @released
+*/
+
+#ifndef PLUGINDESC_H
+#define PLUGINDESC_H
+
+#include <s32strm.h>
+#include <ct/rcpointerarray.h>
+#include "authserver/authtypes.h"
+
+namespace AuthServer
+{
+
+/**
+ * Provides a description of an authentication plugin's properties.
+ **/
+NONSHARABLE_CLASS(CPluginDesc) : public CBase
+	{
+public:
+
+	IMPORT_C static CPluginDesc* NewL(
+		TPluginId aId, const TDesC& aName,
+		TAuthPluginType aType, TAuthTrainingStatus aTrainingStatus,
+		TEntropy aMinEntropy, TPercentage aFalsePositiveRate,
+		TPercentage aFalseNegativeRate);
+	IMPORT_C static CPluginDesc* NewLC(RReadStream& aIn);
+	
+	virtual ~CPluginDesc();
+	
+	IMPORT_C TPluginId           Id() const;
+	IMPORT_C const TDesC*        Name() const;
+	IMPORT_C TAuthPluginType     Type() const;
+	IMPORT_C TAuthTrainingStatus TrainingStatus() const;
+	IMPORT_C TEntropy            MinEntropy() const;
+	IMPORT_C TPercentage         FalsePositiveRate() const;
+	IMPORT_C TPercentage         FalseNegativeRate() const;
+
+	IMPORT_C void ExternalizeL(RWriteStream& aOut) const;
+		
+private:
+	static const TInt KMaxNameLength = 256;
+		
+	CPluginDesc(TPluginId           aId,
+				TAuthPluginType     aType,
+				TAuthTrainingStatus aTrainingStatus,
+				TEntropy            aMinEntropy,
+				TPercentage         aFalsePositiveRate,
+				TPercentage         aFalseNegativeRate);
+	void ConstructL(const TDesC& aName);
+
+	inline CPluginDesc();
+	void InternalizeL(RReadStream& aIn);
+
+	/// the id of the plugin
+	TPluginId           iId;
+	/// The name of the plugin
+	HBufC*              iName;
+	/// The type of plugin
+	TAuthPluginType     iType;
+	/// Indicates whether the plugin is trained for none, some or all
+	/// known identities.
+	TAuthTrainingStatus iTrainingStatus;
+	/// The minumum entropy provided by the plugin.
+	TEntropy            iMinEntropy;
+	/// The false positive rate of the plugin
+	TPercentage         iFalsePositiveRate;
+	/// The false negative rate of the plugin.
+	TPercentage         iFalseNegativeRate;
+    };
+
+typedef RCPointerArray<const CPluginDesc> RPluginDescriptions;
+
+}   
+
+#include <authserver/plugindesc.inl>
+
+#endif // PLUGINDESC_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/inc/authserver/plugindesc.inl	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2005-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: 
+*
+*/
+
+
+#ifndef AUTHSERVER_PLUGINDESC_INL
+#define AUTHSERVER_PLUGINDESC_INL
+
+#include <authserver/plugindesc.h>
+
+AuthServer::CPluginDesc::CPluginDesc()
+/**
+	This constructor is used by NewL to allocate
+	a CPluginDesc object when it restores one from
+	a stream.
+	
+	It does nothing, and is only defined because
+	this class has another, non-default, constructor.
+ */
+	{
+	// empty.
+	}
+
+#endif	// #ifndef AUTHSERVER_PLUGINDESC_INL
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/inc/authserver/protectionkey.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2005-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: 
+* TProtectionKey declaration
+*
+*/
+
+
+/**
+ @file 
+ @publishedAll
+ @released
+*/
+#ifndef PROTECTIONKEY_H
+#define PROTECTIONKEY_H
+
+#include <s32strm.h>
+
+namespace AuthServer
+{
+
+/**
+ * CProtectionKey is a cryptographic key that is assigned to an
+ * identity. Protection keys are used by authentication clients 
+ * to protect data that only the associated identity should be 
+ * able to access. Protection keys are generated by the AuthServer
+ * when a new identity is created.
+ */
+NONSHARABLE_CLASS(CProtectionKey) : public CBase
+	{
+public:
+	virtual ~CProtectionKey();
+	
+
+	IMPORT_C static CProtectionKey* NewL(TInt aKeySize);	
+	IMPORT_C static CProtectionKey* NewLC(TInt aKeySize);
+	IMPORT_C static CProtectionKey* NewL(HBufC8* aKeyData);
+	IMPORT_C static CProtectionKey* NewLC(HBufC8* aKeyData);
+
+	IMPORT_C CProtectionKey* ClientKeyL(TInt aClientUid) const;
+	IMPORT_C TPtrC8 KeyData() const;
+	
+private:
+	CProtectionKey();
+	void ConstructL(TInt aKeySize);
+	void ConstructL(HBufC8* aKeyData);
+
+	HBufC8* iKeyData;
+	};
+
+}
+
+#endif // PROTECTIONKEY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/inc/tAuthSvr.iby	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+
+
+#ifndef __TAUTHSVR_IBY__
+#define __TAUTHSVR_IBY__
+
+#include <testexecute.iby>
+#include "tpinplugin.iby"
+
+define ZDRIVE \epoc32\data\z
+file=ABI_DIR\BUILD_DIR\authtool.exe			sys\bin\authtool.exe
+file=ABI_DIR\BUILD_DIR\tauthkeys.exe		sys\bin\tauthkeys.exe
+file=ABI_DIR\BUILD_DIR\tauthdb.exe			sys\bin\tauthdb.exe
+file=ABI_DIR\BUILD_DIR\tauthcliserv.exe		sys\bin\tauthcliserv.exe
+file=ABI_DIR\BUILD_DIR\tauthplugins.exe		sys\bin\tauthplugins.exe
+data=ABI_DIR\BUILD_DIR\tAuthSvr.exe			sys\bin\tAuthSvr.exe
+file=ABI_DIR\BUILD_DIR\tauthsvrwdd.exe		sys\bin\tauthsvrwdd.exe
+file=ABI_DIR\BUILD_DIR\tauthsvrnc.exe		sys\bin\tauthsvrnc.exe
+REM security tests
+file=ABI_DIR\BUILD_DIR\authsecuritytests.dll	sys\bin\authsecuritytests.dll
+
+ECOM_PLUGIN(testplugins.dll, testplugins.rsc)
+ECOM_PLUGIN(tAuthPlugin.dll, tAuthPlugin.rsc)
+
+data = \epoc32\winscw\c\tauth\tAuthSvr\testdata\AuthSvrPolicy.ini				tauth\tAuthSvr\testdata\AuthSvrPolicy.ini	 attrib=W
+data = \epoc32\winscw\c\tauth\tAuthSvr\testdata\initialisation_Info.ini				tauth\tAuthSvr\testdata\initialisation_Info.ini	 attrib=W		  
+data = \epoc32\winscw\c\tauth\tAuthSvr\scripts\tAuthSvr2.script					tauth\tAuthSvr\scripts\tAuthSvr2.script				  
+data = \epoc32\winscw\c\tauth\tAuthSvr\scripts\tAuthSvr2.ini		                        tauth\tAuthSvr\scripts\tAuthSvr2.ini
+data = \epoc32\winscw\c\tauth\tAuthSvr\scripts\tAuthSvr2_unicode.ini				tauth\tAuthSvr\scripts\tAuthSvr2_unicode.ini
+data = \epoc32\winscw\c\tauth\tAuthSvr\testdata\Pin11113100Db.ini               		tauth\tAuthSvr\testdata\Pin11113100Db.ini        attrib=W
+data = \epoc32\winscw\c\tauth\tAuthSvr\testdata\Pin11113101Db.ini				tauth\tAuthSvr\testdata\Pin11113101Db.ini        attrib=W
+data = \epoc32\winscw\c\tauth\tAuthSvr\testdata\Pin11113102Db.ini				tauth\tAuthSvr\testdata\Pin11113102Db.ini        attrib=W
+data = \epoc32\winscw\c\tauth\tAuthSvr\testdata\Pin11113103Db.ini				tauth\tAuthSvr\testdata\Pin11113103Db.ini        attrib=W
+data = \epoc32\winscw\c\tauth\tAuthSvr\testdata\Pin11113104Db.ini				tauth\tAuthSvr\testdata\Pin11113104Db.ini        attrib=W
+data = \epoc32\winscw\c\tauth\tAuthSvr\testdata\Pin10234100Db.ini				tauth\tAuthSvr\testdata\Pin10234100Db.ini        attrib=W
+data = \epoc32\winscw\c\tauth\tauthcliserv\scripts\tauthcliserv.script		    tauth\tauthcliserv\scripts\tauthcliserv.script		  
+data = \epoc32\winscw\c\tauth\tauthplugins\scripts\tauthplugins.script		    tauth\tauthplugins\scripts\tauthplugins.script		  
+data = \epoc32\winscw\c\tauth\tauthdb\scripts\tauthdb.script				    tauth\tauthdb\scripts\tauthdb.script				  
+data = \epoc32\winscw\c\tauth\tauthexpr\scripts\tauthexpr.script			    tauth\tauthexpr\scripts\tauthexpr.script			  
+data = \epoc32\winscw\c\tauth\tauthkeys\scripts\tauthkeys.script			    tauth\tauthkeys\scripts\tauthkeys.script			  
+data = \epoc32\winscw\c\tauth\tpostmarketplugins\tauthpluginupgrade.rsc			    tauth\tpostmarketplugins\tauthpluginupgrade.rsc
+data = \epoc32\winscw\c\tauth\tpostmarketplugins\tauthpluginupgrade.dll			    tauth\tpostmarketplugins\tauthpluginupgrade.dll
+data = \epoc32\winscw\c\tauth\tpostmarketplugins\tpostmarketramplugin.rsc		    tauth\tpostmarketplugins\tpostmarketramplugin.rsc
+data = \epoc32\winscw\c\tauth\tpostmarketplugins\tpostmarketramplugin.dll		    tauth\tpostmarketplugins\tpostmarketramplugin.dll
+data = \epoc32\winscw\c\tauth\tpostmarketplugins\testpluginsupgrade.rsc			    tauth\tpostmarketplugins\testpluginsupgrade.rsc
+data = \epoc32\winscw\c\tauth\tpostmarketplugins\testpluginsupgrade.dll			    tauth\tpostmarketplugins\testpluginsupgrade.dll
+data = \epoc32\winscw\c\tauth\tAuthSvr\scripts\tpostmarketplugin.script					tauth\tAuthSvr\scripts\tpostmarketplugin.script	
+data = \epoc32\winscw\c\tauth\tAuthSvr\scripts\tpostmarketplugin_macroenabled.script	tauth\tAuthSvr\scripts\tpostmarketplugin_macroenabled.script	
+data = \epoc32\winscw\c\tauth\tAuthSvr\scripts\tpostmarketplugin.ini				    tauth\tAuthSvr\scripts\tpostmarketplugin.ini
+data = \epoc32\winscw\c\tauth\tAuthSvr\scripts\tclientsidsupport.script					tauth\tAuthSvr\scripts\tclientsidsupport.script				  
+data = \epoc32\winscw\c\tauth\tAuthSvr\scripts\tclientsidsupport.ini				    tauth\tAuthSvr\scripts\tclientsidsupport.ini
+data = \epoc32\winscw\c\tauth\tAuthSvr\testdata\pinplugin_inactive.txt				tauth\tAuthSvr\testdata\pinplugin_inactive.txt	attrib=W
+
+data = \epoc32\winscw\c\tauth\securitytests\scripts\authsecuritytests.ini			tauth\securitytests\scripts\authsecuritytests.ini
+data = \epoc32\winscw\c\tauth\securitytests\scripts\authsecuritytests.script			tauth\securitytests\scripts\authsecuritytests.script
+data = \epoc32\winscw\c\tauth\tAuthSvr\scripts\tauthsvr_performance.script			tauth\tAuthSvr\scripts\tauthsvr_performance.script				  
+data = \epoc32\winscw\c\tauth\tAuthSvr\scripts\tauthsvr_performance.ini				tauth\tAuthSvr\scripts\tauthsvr_performance.ini
+data = \epoc32\winscw\c\tauth\tAuthSvr\scripts\performance_log_parser.pl			tauth\tAuthSvr\scripts\performance_log_parser.pl
+data = \epoc32\winscw\c\tauth\tAuthSvr\scripts\tauthsvrclock.script					tauth\tAuthSvr\scripts\tauthsvrclock.script
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/inc_private/authrepository.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 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: 
+* Contains system wide default plugin and authentication strength aliases configuration parameters.
+* The strength aliases and it's corresponding authentication expression is specified in the 
+* authserver configuration(central repository) file.Also , defined are the enums corresponding 
+* to authentication expression creation.
+*
+*/
+
+
+/**
+ @file 
+ @released
+ @internalComponent 
+*/
+#ifndef AUTHREPOSITORY_H
+#define AUTHREPOSITORY_H
+
+#include <centralrepository.h>
+#include "authserver/authtypes.h"
+
+namespace AuthServer
+	{
+	
+	/**	 The default system wide plugin key*/
+	const TUint KAuthDefaultPlugin = {0x00000000}; 
+		
+	/**
+		AuthServer repository configuration parameter Enums.
+		These enums are the key Id's for authentication strength aliases and their respective authentication expression defining them.
+	 */
+	
+	enum TAuthStrengthAliasesKeys
+		{
+		EAuthAliasesCount			= 0x00000100,	// Number of authentication aliases.
+		EAuthAliases				= 0x00000200,   // The various authentication aliases like strong, weak, medium, fast etc.
+		EAuthAliasesExpr			= 0x00000300,	// The authentication expressions defining each authentication alias.
+		};
+	
+	/** The UID of the AuthServer repository. */
+	const TUid KUidAuthServerRepository = {0x2001ea7f};  //536996479
+
+	
+/**
+ * Provides methods to access information from
+ * AuthServer's Central Repository
+ */
+
+class CAuthRepository : public CBase
+	{
+	
+public:
+	
+	static CAuthRepository* NewL();
+	
+	static CAuthRepository* NewLC();
+	
+	TPluginId DefaultPluginL() const;
+	
+	void ListAliasL(RPointerArray<HBufC>& aAuthStrengthAliasList);
+	
+	void GetAliasDefinitionL(TInt aKey, TDes16& aValue);
+	
+	~CAuthRepository();
+	
+private:
+	
+	void ConstructL();
+	
+private:
+	CRepository* iRepository;
+	};
+
+
+}
+#endif //AUTHREPOSITORY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/client/asyncresponsedecoder.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,188 @@
+/*
+* Copyright (c) 2005-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: 
+* CAsyncResponseDecoder - Auth Client helper class
+*
+*/
+
+
+/**
+ @file 
+*/
+
+#include <e32debug.h>
+#include <s32mem.h>
+#include "authclient_impl.h"
+
+using namespace AuthServer;
+
+namespace AuthServer
+{
+HBufC8* ExternalizeExpressionL(const CAuthExpression* aExpr);
+
+enum {  EPanicBadCmd = 1 };
+
+_LIT(KAsyncDecoderBusy, "AuthClient busy");
+
+}
+
+CAsyncResponseDecoder::CAsyncResponseDecoder(const RAuthClient& aSession) :
+	CActive(EPriorityStandard), iSession(aSession), 
+	iBufDes(0,0), iParamsPtr(0,0)
+    {
+	CActiveScheduler::Add(this);
+	}
+
+CAsyncResponseDecoder::~CAsyncResponseDecoder()
+    {
+    Cleanup();
+    }
+
+
+void CAsyncResponseDecoder::AuthenticateL(
+						   const CAuthExpression& aExpression,
+						   TTimeIntervalSeconds   aTimeout,
+						   TBool                  aClientSpecificKey,
+						   TUid 				  aClientSid,
+						   TBool                  aWithString,
+						   const TDesC& 		  aClientMessage,
+						   CIdentity*&            aIdentityResult, 
+						   TRequestStatus&        aClientStatus)
+	{
+	__ASSERT_ALWAYS(!IsActive(), User::Panic(AuthServer::KAsyncDecoderBusy, 0));
+	
+	iExpression       	     = &aExpression;
+	iResult            	     = &aIdentityResult;
+	iClientStatus            = &aClientStatus;
+	
+	//Create a flat buffer.
+  	CBufFlat* flatBuffer = CBufFlat::NewL(KDefaultBufferSize);
+  	CleanupStack::PushL(flatBuffer);
+  	
+  	//Initialize the CAuthParams object.
+  	CAuthParams* params = CAuthParams::NewL(aTimeout,
+  											aClientSpecificKey,
+											aClientSid,
+  											aWithString,
+  											aClientMessage);
+  	CleanupStack::PushL(params);
+  	
+  	//Externalize params.
+  	RBufWriteStream stream(*flatBuffer);
+  	CleanupClosePushL(stream);
+  	params->ExternalizeL(stream);
+  	CleanupStack::PopAndDestroy(2, params);
+  		
+  	iParamsBuffer = HBufC8::NewL(flatBuffer->Size());
+  	iParamsPtr.Set(iParamsBuffer->Des());
+  	flatBuffer->Read(0, iParamsPtr, flatBuffer->Size());
+  	CleanupStack::PopAndDestroy(flatBuffer);
+  
+	//Externalize the expression.
+  	iExprBuf = ExternalizeExpressionL(iExpression);
+  
+	// allocate buffer for identity result.
+	iBuffer = HBufC8::NewL(KDefaultBufferSize);
+	iBufDes.Set(iBuffer->Des());
+  
+	iArgs = new (ELeave)TIpcArgs(iExprBuf,
+								 &iParamsPtr,
+								 &iBufDes); 
+	StartCall(EAuthenticate);
+	}
+void CAsyncResponseDecoder::RegisterIdentityL(CIdentity*& aIdentity,
+											 const TDesC& aDescription,  
+											 TRequestStatus& aClientStatus)
+	{
+	__ASSERT_ALWAYS(!IsActive(), User::Panic(KAsyncDecoderBusy, 0));
+	
+	iBuffer = HBufC8::NewL(KDefaultBufferSize);
+	iBufDes.Set(iBuffer->Des());
+	iResult = &aIdentity;
+	iDescription = HBufC::NewL(aDescription.Size());
+	*iDescription = aDescription;
+	iClientStatus = &aClientStatus;
+	iArgs = new (ELeave)TIpcArgs(&iBufDes, iDescription);
+  
+	StartCall(ERegisterIdentity);
+	}
+
+void CAsyncResponseDecoder::StartCall(TAuthServerMessages aCmd)
+	{
+	iCmd = aCmd;
+	iStatus = KRequestPending;
+	*iClientStatus = KRequestPending;
+	SetActive();
+	iSession.CallSessionFunction(iCmd, *iArgs, iStatus);
+	}
+
+void CAsyncResponseDecoder::RunL() 
+	{
+	if (iStatus.Int() == KErrNone)
+		{
+		RDesReadStream readStream(*iBuffer);
+		switch (iCmd)
+			{
+			case EAuthenticate:
+				*iResult = CIdentity::InternalizeL(readStream);
+				break;
+			case ERegisterIdentity:
+				*iResult = CIdentity::InternalizeL(readStream);
+				break;
+			default:
+				User::Panic(_L("AuthClient-AsyncResponseDecoder"),
+							EPanicBadCmd);
+			}
+		}
+	User::RequestComplete(iClientStatus,iStatus.Int());
+	Cleanup();
+	}
+
+TInt CAsyncResponseDecoder::RunError(TInt aError)
+	{	
+	User::RequestComplete(iClientStatus, aError);
+	Cleanup();    			
+	return KErrNone;
+	
+	}
+
+void CAsyncResponseDecoder::DoCancel()
+	{
+	switch (iCmd)
+		{
+		case EAuthenticate:
+		case ERegisterIdentity:
+			User::RequestComplete(iClientStatus, KErrCancel);
+			break;
+		default:
+		    break;
+		}
+	Cleanup();
+    }
+
+void CAsyncResponseDecoder::Cleanup()
+    {
+	delete iArgs;
+	iArgs = 0;
+	delete iExprBuf;
+	iExprBuf = 0;
+	delete iBuffer;
+	iBuffer = 0;
+    delete iDescription;
+    iDescription = 0;
+    delete iParamsBuffer;
+    iParamsBuffer = 0;
+	iCmd = ELastService;
+	iClientStatus = 0;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/client/asyncresponsedecoder.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2005-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: 
+* CAsyncResponseDecoder - Auth Client helper class
+*
+*/
+
+
+/**
+ @file 
+ @released
+ @internalComponent
+*/
+#ifndef ASYNCRESPONSEDECODER_H
+#define ASYNCRESPONSEDECODER_H
+namespace AuthServer
+{
+
+/** 
+ * This AO handles the return buffers from asynchronous RAuthClient /
+ * RAuthMgrClient calls and reconstructs the object from the stream returned,
+ * completing the caller when finished.
+ **/
+class CAsyncResponseDecoder : public CActive
+	{
+public:
+  
+	CAsyncResponseDecoder(const RAuthClient& aSession);
+	~CAsyncResponseDecoder();
+	
+	/**
+	 * Initiate the authenticate method
+	 */
+		
+	void AuthenticateL(const CAuthExpression& aExpression,
+						   TTimeIntervalSeconds   aTimeout,
+						   TBool                  aClientSpecificKey,
+						   TUid 				  aClientSid,
+						   TBool                  aWithString,
+						   const TDesC& 		  aClientMessage,
+						   CIdentity*&            aIdentityResult, 
+						   TRequestStatus&        aClientStatus);
+	
+	/**
+	 * Initiate the register identity method
+	 */
+	void RegisterIdentityL(CIdentity*& aIdentity,
+						  const TDesC& aDescription,  
+						  TRequestStatus& aRequest);
+	/**
+	 * common code to send the request and kickoff the active object
+	 **/
+	void StartCall(TAuthServerMessages aCmd);
+  
+	void RunL();
+
+	void DoCancel();
+  
+private:
+	void Cleanup();
+	TInt RunError(TInt aError);
+	
+	const RAuthClient&     		iSession;
+	const CAuthExpression* 		iExpression;
+	CIdentity**            		iResult;
+	HBufC8*                		iBuffer;
+	HBufC8*						iParamsBuffer;
+	TPtr8                  		iBufDes;
+	TPtr8                  		iParamsPtr;
+	TRequestStatus*        		iClientStatus;
+	TIpcArgs*              		iArgs;
+	HBufC8*                		iExprBuf;
+	HBufC*                		iDescription;
+	TAuthServerMessages         iCmd;
+};
+}
+#endif // ASYNCRESPONSEDECODER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/client/authclient.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,774 @@
+/*
+* Copyright (c) 2005-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: 
+* authclient - exported authentication client session  implementation
+*
+*/
+
+
+/**
+ @file 
+*/
+
+#include <e32debug.h>
+#include <s32mem.h>
+#include "authclient_impl.h"
+#include "authrepository.h"
+
+namespace AuthServer
+{
+
+/**
+	Helper function for Authenticate.  This allocates
+	a buffer to hold the externalized authentication expression.
+	
+	@param	aExpr			Expression to externalize.
+	@return					Descriptor containing externalized expression.
+							The memory must be freed by the caller.
+ */
+HBufC8* ExternalizeExpressionL(const CAuthExpression* aExpr)
+	{
+	AuthServer::TSizeStream ss;
+	RWriteStream ws(&ss);
+	aExpr->ExternalizeL(ws);
+	
+	TInt len = ss.Size();
+	HBufC8* buf = HBufC8::NewLC(len);
+	TPtr8 bufDes(buf->Des());
+	
+	RDesWriteStream dws(bufDes);
+	aExpr->ExternalizeL(dws);
+	dws.CommitL();
+		
+	CleanupStack::Pop(buf);
+	return buf;
+	}
+}
+
+using namespace AuthServer;
+
+
+/**
+ * Connect to the server, attempt to start it if it is not yet running
+ *
+ * @return KErrNone if successful or an error code
+ */
+EXPORT_C TInt RAuthClient::Connect()
+	{
+	const TUidType serverUid(KNullUid, KNullUid, KAuthServerSecureId);
+
+	TInt err = RScsClientBase::Connect(AuthServer::KAuthServerName, TVersion(1, 0, 0), 
+									   AuthServer::KAuthServerImg, serverUid );
+	return err;
+	}
+
+EXPORT_C RAuthClient::RAuthClient() : 
+	RScsClientBase(), iAsyncResponseDecoder(0)
+    {
+	
+    }
+    
+ 
+    
+/**
+  Authenticate the current device holder using a specified combination of
+  authentication methods. The ownership of the heap allocated CIdentity
+  object is passed to the caller. Requesting a user specific key
+  requires ReadUserData capability.
+ 
+  @capability None/ReadUserData
+ 
+  @param aExpression An authentication expression specifying which 
+  combination of methods to use to authenticate the device holder.
+ 
+  @param aTimeout If an authentication has previously been performed 
+  within this period then a cached identity is returned.
+ 
+  @param aClientSpecificKey If this value is true then the key returned
+  by this server will be unique to the calling client. This is achieved
+  by combining the identity protection key with the client process UID.
+  If this value is set to false then the call requires ReadUserData.
+ 
+  @param aWithString If this value is true then the identity object returned
+  by the server will contain the identities string. If this value is set to
+  true then the call requires ReadUserData.
+ 
+  @return CIdentity object corresponding to the authenticated device
+  holder. It is possible for the identity to be 'unknown'.
+  
+  @leave KErrServerTerminated, if the server no longer present
+  @leave KErrServerBusy, if the request cannot be handled at this time. 
+  @leave KErrNoMemory, if there is insufficient memory available.
+  @leave KErrPermissionDenied, if the caller has insufficient capabilities.
+  @leave ...			One of the AuthServer error codes defined in 
+  						auth_srv_errs.h or one of the system-wide error codes.
+ **/
+EXPORT_C CIdentity* RAuthClient::AuthenticateL(
+	const CAuthExpression& aExpression,
+	TTimeIntervalSeconds   aTimeout,
+	TBool                  aClientSpecificKey,
+	TBool                  aWithString)
+	{
+	TUid clientSid = {0};
+		
+	CIdentity* identity = AuthenticateL(aExpression, aTimeout,
+										aClientSpecificKey, clientSid, 
+										aWithString, KNullDesC());
+		
+	return identity;
+	
+    }
+
+    
+
+/**
+  Authenticate the current device holder using a specified combination of
+  authentication methods. The ownership of the heap allocated CIdentity
+  object is passed to the caller. Requesting a user specific key
+  requires ReadUserData capability.
+ 
+  @capability None/ReadUserData
+ 
+  @param aExpression An authentication expression specifying which 
+  combination of methods to use to authenticate the device holder.
+ 
+  @param aTimeout If an authentication has previously been performed 
+  within this period then a cached identity is returned.
+ 
+  @param aClientSpecificKey If this value is true then the key returned
+  by this server will be unique to the calling client. This is achieved
+  by combining the identity protection key with the client process UID.
+  If this value is set to false then the call requires ReadUserData.
+ 
+  @param aWithString If this value is true then the identity object returned
+  by the server will contain the identities string. If this value is set to
+  true then the call requires ReadUserData.
+ 
+  @param aIdentityResult The returned identity will be placed in this
+  parameter when the asynchronous request completes.  
+ 
+  @param aStatus The request status for this asynchronous request.
+ 
+  @leave KErrServerTerminated, if the server no longer present
+  @leave KErrServerBusy, if the request cannot be handled at this time. 
+  @leave KErrNoMemory, if there is insufficient memory available.
+  @leave KErrPermissionDenied, if the caller has insufficient capabilities.
+  @leave ...			One of the AuthServer error codes defined in 
+  						auth_srv_errs.h or one of the system-wide error codes.
+
+ **/
+EXPORT_C void RAuthClient::AuthenticateL(
+	const CAuthExpression& 	aExpression,
+	TTimeIntervalSeconds   	aTimeout,
+	TBool                  	aClientSpecificKey,
+	TBool                  	aWithString, 
+	CIdentity*&            	aIdentityResult, 
+	TRequestStatus&        	aStatus)
+	{
+	TUid clientSid = {0};
+	AuthenticateL(aExpression, aTimeout, aClientSpecificKey,
+				  clientSid, aWithString, KNullDesC(),
+			      aIdentityResult, aStatus);	
+	
+	}
+
+
+/**
+   Authenticate the current device holder using a specified combination of
+  authentication methods. The ownership of the heap allocated CIdentity 
+  object is passed to the caller. Requesting a user specific key requires 
+  ReadUserData capability.
+ 
+   @capability None/ReadUserData
+ 
+   @param aAuthStrength Descriptor specifying the authentication strength, 
+   which inturn maps to a combination of methods to be used to authenticate 
+   the device holder.
+ 
+   @param aTimeout If an authentication has previously been performed 
+   within this period then a cached identity is returned.
+ 
+   @param aClientSpecificKey If this value is true then the key returned
+   by this server will be unique to the calling client. This is achieved
+   by combining the identity protection key with the client process UID.
+   If this value is set to false then the call requires ReadUserData.
+          
+   @param aClientSid Sid of the client application from where the authentication
+   request originated and is used to generate protection key.This value is ignored 
+   when aClientSpecificKey is set to false. If aClientSid is non-zero and is not 
+   the calling application's sid, then the call requires ReadUserData.
+  
+   @param aWithString If this value is true then the identity object returned
+   by the server will contain the identities string. If this value is set to
+   true then the call requires ReadUserData.
+ 
+   @param aClientMessage A displayable text string parameter for authentication
+   requests.It shall be passed to plug-ins to display to the users.
+
+   @return the CIdentity object corresponding to the authenticated device
+   holder. It is possible for the identity to be 'unknown'.
+  
+   @leave KErrServerTerminated, if the server no longer present
+   @leave KErrServerBusy, if the request cannot be handled at this time. 
+   @leave KErrNoMemory, if there is insufficient memory available.
+   @leave KErrPermissionDenied, if the caller has insufficient capabilities.
+   @leave ...			One of the AuthServer error codes defined in 
+  						auth_srv_errs.h or one of the system-wide error codes.
+
+ **/	
+
+EXPORT_C CIdentity* RAuthClient::AuthenticateL(
+		const CAuthExpression& aAuthExpression,
+	    TTimeIntervalSeconds   aTimeout,
+		TBool                  aClientSpecificKey,
+		TUid 				   aClientSid,
+		TBool                  aWithString,
+		const TDesC&		   aClientMessage)
+	{
+	
+	//Create a flat buffer
+	CBufFlat* flatBuffer = CBufFlat::NewL(KDefaultBufferSize);
+	CleanupStack::PushL(flatBuffer);
+	
+	//Initialize the CAuthParams object
+	CAuthParams* params = CAuthParams::NewL(aTimeout,
+											aClientSpecificKey,
+											aClientSid,
+											aWithString,
+											aClientMessage);
+	CleanupStack::PushL(params);
+	//Externalize params
+	RBufWriteStream stream(*flatBuffer);
+	CleanupClosePushL(stream);
+	params->ExternalizeL(stream);
+	CleanupStack::PopAndDestroy(2, params);
+	
+	HBufC8* paramsBuffer = HBufC8::NewLC(flatBuffer->Size());
+	TPtr8 paramsPtr(paramsBuffer->Des());
+	flatBuffer->Read(0, paramsPtr, flatBuffer->Size());
+		
+	//Externalize the expression
+	HBufC8* exprBuf = ExternalizeExpressionL(&aAuthExpression);
+	CleanupStack::PushL(exprBuf);
+		
+	// allocate buffer for identity result
+	HBufC8* identityResultbuf = HBufC8::NewLC(KDefaultBufferSize);
+	TPtr8 bufDes(identityResultbuf->Des());
+		
+	TIpcArgs args(exprBuf, &paramsPtr, &bufDes); 
+	User::LeaveIfError(CallSessionFunction(EAuthenticate, args));
+		
+
+		
+	RDesReadStream readStream(*identityResultbuf);
+	CIdentity* identity = CIdentity::InternalizeL(readStream);
+	    
+	CleanupStack::PopAndDestroy(4,flatBuffer);//identityResultbuf, exprBuf,
+											  //paramsBuffer, flatBuffer	
+	return identity;
+	}
+
+/**
+  Authenticate the current device holder using a specified combination of
+  authentication methods. The ownership of the heap allocated CIdentity 
+  object is passed to the caller. Requesting a user specific key requires 
+  ReadUserData capability.
+ 
+  @capability None/ReadUserData
+ 
+  @param aAuthStrength	Descriptor specifying the authentication strength, 
+  which inturn maps to a combination of methods to be used to authenticate the device holder.
+ 
+  @param aTimeout If an authentication has previously been performed 
+  within this period then a cached identity is returned.
+ 
+  @param aClientSpecificKey If this value is true then the key returned
+  by this server will be unique to the calling client. This is achieved
+  by combining the identity protection key with the client process UID.
+  If this value is set to false then the call requires ReadUserData.
+  
+  @param aClientSid Sid of the client application from where the authentication
+  request originated and is used to generate protection key.This value is ignored 
+  when aClientSpecificKey is set to false. If aClientSid is non-zero and is not 
+  the calling application's sid, then the call requires ReadUserData.
+ 
+  @param aWithString If this value is true then the identity object returned
+  by the server will contain the identities string. If this value is set to
+  true then the call requires ReadUserData.
+ 
+  @param aClientMessage A displayable text string parameter for authentication
+  requests.It shall be passed to plug-ins to display to the users.
+   
+  @param aIdentityResult The returned identity will be placed in this
+  parameter when the asynchronous request completes.  
+ 
+  @param aStatus The request status for this asynchronous request.
+ 
+  @leave KErrServerTerminated, if the server no longer present
+  @leave KErrServerBusy, if the request cannot be handled at this time. 
+  @leave KErrNoMemory, if there is insufficient memory available.
+  @leave KErrPermissionDenied, if the caller has insufficient capabilities.
+  @leave ...			One of the AuthServer error codes defined in 
+  						auth_srv_errs.h or one of the system-wide error codes.
+
+ **/
+ 	
+EXPORT_C void RAuthClient::AuthenticateL(
+	const CAuthExpression& aExpression,
+	TTimeIntervalSeconds   aTimeout,
+	TBool                  aClientSpecificKey,
+	TUid 				   aClientSid,	
+	TBool                  aWithString, 
+	const TDesC&		   aClientMessage,
+	CIdentity*&            aIdentityResult,
+	TRequestStatus&        aStatus
+	)
+	{
+	
+	CheckAsyncDecoderL();
+	iAsyncResponseDecoder->AuthenticateL(aExpression,
+										 aTimeout,
+										 aClientSpecificKey,
+										 aClientSid,
+										 aWithString,
+										 aClientMessage,
+										 aIdentityResult,
+										 aStatus);
+										 
+	
+	}
+
+/**
+ * creates the async decoder if it's not already been created. 
+ */
+void RAuthClient::CheckAsyncDecoderL()
+    {
+    if (iAsyncResponseDecoder == 0)
+	    {
+	    iAsyncResponseDecoder = new (ELeave) CAsyncResponseDecoder(*this);
+	    }
+    }
+    
+	    
+
+
+/**
+ * Retrieves all plugin descriptions. 
+ *
+ * @param aPluginList will be filled with  the full list of plugins available on the device. 
+ *
+ * @leave KErrServerTerminated, if the server no longer present
+ * @leave KErrServerBusy, if the request cannot be handled at this time. 
+ * @leave KErrNoMemory, if there is insufficient memory available.
+ **/
+EXPORT_C void RAuthClient::PluginsL(RPluginDescriptions& aPluginList)
+    {
+	HBufC8* buffer = SendReceiveBufferLC(EPlugins);
+	// create a stream based on the buffer
+	RDesReadStream stream(*buffer);
+	CleanupClosePushL(stream);
+	
+	// reassemble the array from the stream
+	InternalizePointerArrayL(aPluginList, stream);
+	
+	CleanupStack::PopAndDestroy(2, buffer);// buffer, stream
+    }
+	
+/**
+ * @param aPluginList the list of active plugins available on the device. 
+ *
+ * @leave KErrServerTerminated, if the server no longer present
+ * @leave KErrServerBusy, if the request cannot be handled at this time. 
+ * @leave KErrNoMemory, if there is insufficient memory available.
+ **/
+EXPORT_C void RAuthClient::ActivePluginsL(RPluginDescriptions& aPluginList)
+    {
+ 	HBufC8* buffer = SendReceiveBufferLC(EActivePlugins);
+	// create a stream based on the buffer
+	RDesReadStream stream(*buffer);
+	CleanupClosePushL(stream);
+	
+	// reassemble the array from the stream
+	InternalizePointerArrayL(aPluginList, stream);
+	
+	CleanupStack::PopAndDestroy(2, buffer);// buffer, stream
+	}
+	
+/**
+ *
+ * Retrieves plugin descriptions for plugins matching the specified
+ * type.
+ *
+ * @param aType the plugin type for which the method should return 
+ * the list of plugins. 
+ *
+ * @param aPluginList the list of plugins with the specified type available
+ * on the device. 
+ *
+ * @leave KErrServerTerminated, if the server no longer present
+ * @leave KErrServerBusy, if the request cannot be handled at this time. 
+ * @leave KErrNoMemory, if there is insufficient memory available.
+ *
+ * @see TAuthPluginType
+ **/
+EXPORT_C void RAuthClient::PluginsOfTypeL(
+    TAuthPluginType aType,
+    RPluginDescriptions& aPluginList)
+    {
+	TIpcArgs args(TIpcArgs::ENothing, aType);
+	HBufC8* buffer = SendReceiveBufferLC(EPluginsByType, args);
+	// create a stream based on the buffer
+	RDesReadStream stream(*buffer);
+	CleanupClosePushL(stream);
+	
+	// reassemble the array from the stream
+	InternalizePointerArrayL(aPluginList, stream);
+	
+	CleanupStack::PopAndDestroy(2, buffer);// buffer, stream
+    }
+	
+/**
+ * Retrieves plugin descriptions for plugins matching the specified
+ * training status.
+ *
+ * @param aStatus the training status for which the method should 
+ * return the list of plugins. 
+ *
+ * @param aPluginList the list of plugins with the specified type available
+ * on the device.
+ *
+ * @leave KErrServerTerminated, if the server no longer present
+ * @leave KErrServerBusy, if the request cannot be handled at this time. 
+ * @leave KErrNoMemory, if there is insufficient memory available.
+ *
+ * @see TAuthTrainingStatus
+ **/
+EXPORT_C void RAuthClient::PluginsWithTrainingStatusL(
+    TAuthTrainingStatus aStatus,
+    RPluginDescriptions& aPluginList)
+    {
+	TIpcArgs args(TIpcArgs::ENothing, aStatus);
+	HBufC8* buffer = SendReceiveBufferLC(EPluginsByTraining, args);
+	// create a stream based on the buffer
+	RDesReadStream stream(*buffer);
+	CleanupClosePushL(stream);
+	
+	// reassemble the array from the stream
+	InternalizePointerArrayL(aPluginList, stream);
+	
+	CleanupStack::PopAndDestroy(2, buffer);// buffer, stream
+    }
+	
+/**
+ * @param aIdList populated with the list of identities known by the 
+ * phone.
+ *
+ * @capability ReadDeviceData
+ *
+ * @leave KErrServerTerminated, if the server no longer present
+ * @leave KErrServerBusy, if the request cannot be handled at this time. 
+ * @leave KErrNoMemory, if there is insufficient memory available.
+ * @leave KErrPermissionDenied, if the caller has insufficient capabilities.
+ **/
+EXPORT_C void RAuthClient::IdentitiesL(RIdentityIdArray& aIdList)
+    {
+	HBufC8* buffer = SendReceiveBufferLC(EIdentities);
+	// create a stream based on the buffer
+	RDesReadStream stream(*buffer);
+	CleanupClosePushL(stream);
+	
+	// reassemble the array from the stream
+	InternalizeArrayL(aIdList, stream);
+	
+	CleanupStack::PopAndDestroy(2, buffer);// buffer, stream
+    }
+
+/**
+ * @param aIdList populated with the list of identities and their strings
+ * known by the phone.
+ *
+ * @capability ReadDeviceData
+ * @capability ReadUserData
+ *
+ * @leave KErrServerTerminated, if the server no longer present
+ * @leave KErrServerBusy, if the request cannot be handled at this time. 
+ * @leave KErrNoMemory, if there is insufficient memory available.
+ * @leave KErrPermissionDenied, if the caller has insufficient capabilities.
+ **/
+EXPORT_C void RAuthClient::IdentitiesWithStringL(RIdAndStringArray& aIdList)
+    {
+	HBufC8* buffer = SendReceiveBufferLC(EIdentitiesWithString);
+	// create a stream based on the buffer
+	RDesReadStream stream(*buffer);
+	CleanupClosePushL(stream);
+	
+	// reassemble the array from the stream
+	InternalizePointerArrayL(aIdList, stream);
+	
+	CleanupStack::PopAndDestroy(2, buffer);// buffer, stream
+    }
+
+/**
+ * @param aId the Id number of the identity for which to set the
+ * string.
+ *
+ * @param aId the identity who's string to set.
+ * @param aString the string to use
+ *
+ * @capability WriteUserData
+ *
+ * @leave KErrServerTerminated, if the server no longer present
+ * @leave KErrServerBusy, if the request cannot be handled at this time. 
+ * @leave KErrNoMemory, if there is insufficient memory available.
+ * @leave KErrPermissionDenied, if the caller has insufficient capabilities.
+ * @leave KErrAuthServIdentityNotFound, if the id does not exist.
+ **/
+EXPORT_C void RAuthClient::SetIdentityStringL(TIdentityId aId,
+											  const TDesC& aString)
+  {
+  TIpcArgs args(aId, &aString);
+
+  User::LeaveIfError(CallSessionFunction(ESetIdentityString, args));
+  }
+
+/**
+ * Deauthenticates the current user. This means that clients requesting an
+ * authentication will always cause a plug-in to be called regardless of
+ * any timeout value specified.
+ *
+ * @leave KErrServerTerminated, if the server no longer present
+ * @leave KErrServerBusy, if the request cannot be handled at this time. 
+ * @leave KErrNoMemory, if there is insufficient memory available.
+ *
+ **/
+EXPORT_C void RAuthClient::DeauthenticateL()
+  {
+  User::LeaveIfError(CallSessionFunction(EDeauthenticate));
+  }
+
+/**
+ * @param aId the Id number of the identity for which to return the
+ * string.
+ * 
+ * @return the string associated with the specified identity.
+ *
+ * @capability ReadUserData
+ *
+ * @leave KErrServerTerminated, if the server no longer present
+ * @leave KErrServerBusy, if the request cannot be handled at this time. 
+ * @leave KErrNoMemory, if there is insufficient memory available.
+ * @leave KErrPermissionDenied, if the caller has insufficient capabilities.
+ * @leave KErrAuthServIdentityNotFound, if the id does not exist.
+ **/
+EXPORT_C HBufC* RAuthClient::IdentityStringL(TIdentityId aId)
+    {
+    HBufC* buffer = HBufC::NewLC(KDefaultBufferSize);
+	TPtr ptr = buffer->Des();
+	User::LeaveIfError(CallSessionFunction(EIdentityString, TIpcArgs(&ptr, aId)));
+	CleanupStack::Pop(buffer);
+	return buffer;
+    }
+
+
+/**
+ */
+HBufC8* RAuthClient::SendReceiveBufferLC(TInt aMessage) 
+	{
+	HBufC8* output = HBufC8::NewLC(KDefaultBufferSize);
+	
+	TPtr8 pOutput(output->Des());
+	
+	TInt result = CallSessionFunction(aMessage, TIpcArgs(&pOutput));
+	
+	if (result == KErrOverflow)
+		{
+		TInt sizeNeeded = 0;
+		TPckg<TInt> sizeNeededPackage(sizeNeeded);
+		sizeNeededPackage.Copy(*output);
+		
+		// Re-allocate buffer after reclaiming memory
+		CleanupStack::PopAndDestroy(output);
+		output = HBufC8::NewLC(sizeNeeded);
+
+		TPtr8 pResizedOutput(output->Des());
+		
+		result=CallSessionFunction(aMessage, TIpcArgs(&pResizedOutput));
+		}
+	User::LeaveIfError(result);
+	return output;
+	}
+
+/**
+ * aArgs[0] is set to the buffer to be sent/received
+ */
+HBufC8* RAuthClient::SendReceiveBufferLC(
+	TInt aMessage,
+	TIpcArgs& aArgs) 
+	{
+	HBufC8* output = HBufC8::NewLC(KDefaultBufferSize);
+	
+	TPtr8 pOutput(output->Des());
+
+	aArgs.Set(0, &pOutput);
+		  
+	TInt result = CallSessionFunction(aMessage, aArgs);
+	
+	if (result == KErrOverflow)
+		{
+		TInt sizeNeeded;
+		TPckg<TInt> sizeNeededPackage(sizeNeeded);
+		sizeNeededPackage.Copy(*output);
+		
+		// Re-allocate buffer
+		CleanupStack::PopAndDestroy(output);
+		output = HBufC8::NewLC(sizeNeeded);
+
+		TPtr8 pResizedOutput(output->Des());
+		aArgs.Set(0, &pResizedOutput);
+		result=CallSessionFunction(aMessage, aArgs);
+		}
+	User::LeaveIfError(result);
+	return output;
+	}
+
+/**
+ * @param aPluginType the type of plugin for which to return the preferred
+ * plugin id
+ * 
+ * @return the id of the preferred plugin for the specified type
+ *
+ * @leave KErrServerTerminated, if the server no longer present
+ * @leave KErrServerBusy, if the request cannot be handled at this time. 
+ * @leave KErrNoMemory, if there is insufficient memory available.
+ * @leave KErrPermissionDenied, if the caller has insufficient capabilities.
+ **/
+EXPORT_C TPluginId RAuthClient::PreferredTypePluginL(TAuthPluginType aPluginType)
+	{
+	TPluginId id = KUnknownPluginId;
+	TPckg<TPluginId> idPckg(id);
+	
+	User::LeaveIfError(CallSessionFunction(EGetAuthPreferences, TIpcArgs(aPluginType, &idPckg)));
+
+	return id;
+	}
+	
+/**
+ * Cancel any operation in progress.
+ * 
+ * @return KErrNone, if the send operation is successful or no operation
+ * is in effect.
+ * @return KErrServerTerminated, if the server no longer present
+ * @return KErrServerBusy, if the request cannot be handled at this time. 
+ * @return KErrNoMemory, if there is insufficient memory available.
+ **/
+EXPORT_C TUint RAuthClient::Cancel()
+    {
+    CallSessionFunction(ECancel);
+    if(iAsyncResponseDecoder)
+    	{
+    	iAsyncResponseDecoder->Cancel();
+    	}
+    
+    return KErrNone;
+	}
+	
+
+EXPORT_C void RAuthClient::Close()
+    {
+    delete iAsyncResponseDecoder;
+    iAsyncResponseDecoder = 0;
+     
+    RScsClientBase::Close();
+    }
+
+/**
+  Lists the authentication aliases.
+  
+  @return An array of authentication strength aliases.
+ 
+  @leave KErrServerTerminated, if the server no longer present
+  @leave KErrServerBusy, if the request cannot be handled at this time. 
+  @leave KErrNoMemory, if there is insufficient memory available.
+  @leave KErrPermissionDenied, if the caller has insufficient capabilities.
+ **/
+ 
+EXPORT_C void RAuthClient::ListAuthAliasesL(RPointerArray<HBufC>& aAuthAliasesList)
+    {
+	HBufC8* buffer = SendReceiveBufferLC(EListAuthAliases);
+	
+	// create a stream based on the buffer
+	RDesReadStream stream(*buffer);
+	CleanupClosePushL(stream);
+	
+	// reassemble the array from the stream
+	TInt strengthAliasCount = stream.ReadInt32L();
+	for(TInt i = 0; i < strengthAliasCount; ++i)
+		{
+		HBufC* strengthAlias = HBufC::NewLC(stream, KMaxTInt);
+		aAuthAliasesList.AppendL(strengthAlias);
+		CleanupStack::Pop(strengthAlias);
+		}
+	
+	CleanupStack::PopAndDestroy(2, buffer);// buffer, stream
+    }
+
+/**
+   Returns a CAuthExpression object from a free form expression
+   which can be a combination of plugin Ids, plugin types and alias names.
+   This can be used for calling the authentication APIs.
+   
+ 
+   @capability None
+ 
+   @param aAuthString Descriptor specifying a free form expression
+   which can be a combination of plugin Ids, plugin types and alias names.
+   
+ 
+   @return the CAuthExpression object which can be used to call the 
+   authentication APIs.
+  
+   @leave KErrServerTerminated, if the server no longer present
+   @leave KErrServerBusy, if the request cannot be handled at this time. 
+   @leave KErrNoMemory, if there is insufficient memory available.
+   @leave KErrPermissionDenied, if the caller has insufficient capabilities.
+   @leave ...			One of the AuthServer error codes defined in 
+  						auth_srv_errs.h or one of the system-wide error codes.
+
+ **/	
+
+EXPORT_C CAuthExpression* RAuthClient::CreateAuthExpressionL(const TDesC& aAuthString) const
+	{
+	CAuthExpression* authExpr(0);
+	
+	if(aAuthString == KNullDesC)
+		{
+		authExpr = AuthExpr();
+		return authExpr;
+		}
+	HBufC* buffer = HBufC::NewLC(KDefaultBufferSize);
+	TPtr bufDes(buffer->Des());
+		
+	// get the string in combination of plugin ID and plugin type.
+	User::LeaveIfError(CallSessionFunction(EResolveExpression, TIpcArgs(&bufDes, &aAuthString)));
+		
+	// create an auth expression from alias string.
+	authExpr = CAuthExpressionImpl::CreateAuthExprObjectL(*buffer);
+	CleanupStack::PopAndDestroy(buffer);
+	
+	return authExpr;
+	}
+
+ 
+
+   
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/client/authclient_impl.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2005-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: 
+* This header file includes all header files which are
+* required to build the authserver client DLL.
+*
+*/
+
+
+/**
+ @file 
+ @internalTechnology 
+*/
+
+#ifndef AUTHCLIENT_IMPL_H
+#define AUTHCLIENT_IMPL_H
+
+#include "authserver_client.h"
+
+#include "authcommon_impl.h"
+
+#include "authserveripc.h"
+#include "arrayutils.h"
+#include "asyncresponsedecoder.h"
+
+#endif	// #ifndef AUTHCLIENT_IMPL_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/client/authmgrclient.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,276 @@
+/*
+* Copyright (c) 2005-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: 
+* authmgrclient - exported authentication client session  implementation
+*
+*/
+
+
+/**
+ @file 
+*/
+
+#include "authclient_impl.h"
+#include "authserverutil.h"
+
+using namespace AuthServer;
+
+/**
+ * Register a new identity. This causes the server to create a new
+ * identity and attempt to train the user with all available active
+ * plugins. At least one plugin must be trained for this to be succesful.
+ *
+ * @param aIdentity The new heap allocated identity details will be
+ * pointed at by this parameter upon successful completion.
+ *
+ * @param aDescription The identity's description text.
+ *
+ * @param aRequest This status object will be completed when this
+ * asynchronous call finishes, the return values are described below. 
+ *
+ * @capability TrustedUI
+ *
+ * @return KErrServerTerminated, if the server no longer present
+ * @return KErrServerBusy, if the request cannot be handled at this time. 
+ * @return KErrNoMemory, if there is insufficient memory available.
+ * @return KErrPermissionDenied, if the caller has insufficient capabilities.
+ * @return KErrAuthServRegistrationFailed, if the all plugins failed to
+ * successfully train for the identity.
+ **/
+EXPORT_C void RAuthMgrClient::RegisterIdentityL(
+    CIdentity*& aIdentity,
+	const TDesC& aDescription,  
+    TRequestStatus& aRequest)
+    {
+    CheckAsyncDecoderL();
+	iAsyncResponseDecoder->RegisterIdentityL(aIdentity, aDescription, aRequest);
+    }
+
+/** 
+ * Remove an identity.
+ *
+ * @param aId The identity to remove.
+ *
+ * @capability WriteDeviceData
+ *
+ * @leave KErrServerTerminated, if the server no longer present
+ * @leave KErrServerBusy, if the request cannot be handled at this time. 
+ * @leave KErrNoMemory, if there is insufficient memory available.
+ * @leave KErrPermissionDenied, if the caller has insufficient capabilities.
+ * @leave KErrAuthServIdentityNotFound, if the id does not exist.
+ **/
+EXPORT_C void RAuthMgrClient::RemoveIdentityL(
+    TIdentityId aId)
+    {
+	User::LeaveIfError(CallSessionFunction(ERemoveIdentity, TIpcArgs(aId)));
+    }
+
+/**
+ * Train an authentication plugin for the specified identity. The identity
+ * to be trained must be authenticated prior to training. This is
+ * necessary for the AuthServer to decrypt the protection key prior to
+ * encrypting it with the new key generated through training.
+ *
+ * @param aId The identity for whom to train the plugin.
+ *
+ * @param aPlugin The id of the plugin to train.
+ *
+ * @param aRequest This status object will be completed when this
+ * asynchronous call finishes.
+ *
+ * @capability WriteUserData
+ *
+ * @return KErrServerTerminated, if the server no longer present
+ * @return KErrServerBusy, if the request cannot be handled at this time. 
+ * @return KErrNoMemory, if there is insufficient memory available.
+ * @return KErrPermissionDenied, if the caller has insufficient capabilities.
+ * @return KErrAuthServIdentityNotFound, if the id does not exist.
+ * @return KErrAuthServNoSuchPlugin, if the plugin does not exist.
+ * @return KErrAuthServAuthenticationRequired, if the identity to be
+ * trained is not currently authenticated.
+ **/
+EXPORT_C void RAuthMgrClient::TrainPlugin(
+    TIdentityId aId,
+	TPluginId aPlugin,
+	TRequestStatus& aRequest)
+    {
+    CallSessionFunction(ETrainPlugin, TIpcArgs(aId, aPlugin), aRequest);
+    }
+
+
+/**
+ * Remove the specified plugin as an authentication method for the
+ * identity.
+ *
+ * @param aId The identity for whom to forget plugin training.
+ *
+ * @param aPlugin The id of the plugin to retrain.
+ *
+ * @capability WriteUserData
+ *
+ * @return KErrServerTerminated, if the server no longer present
+ * @return KErrServerBusy, if the request cannot be handled at this time. 
+ * @return KErrNoMemory, if there is insufficient memory available.
+ * @return KErrPermissionDenied, if the caller has insufficient capabilities.
+ * @return KErrAuthServIdentityNotFound, if the id does not exist.
+ * @return KErrAuthServNoSuchPlugin, if the plugin does not exist.
+ **/
+EXPORT_C void RAuthMgrClient::ForgetPluginL(
+    TIdentityId aId,
+	TPluginId aPlugin)
+    {
+	User::LeaveIfError(CallSessionFunction(EForgetPlugin, TIpcArgs(aId, aPlugin)));
+    }
+
+
+/**
+ * Specifies the preferred plugin for the named type.
+ *
+ * @param aType The type of plugin for which to define the preference.
+ *
+ * @param aPluginId The id of the preferred plugin for the specified type.
+ *
+ * @capability WriteDeviceData
+ *
+ * @return KErrServerTerminated, if the server no longer present
+ * @return KErrServerBusy, if the request cannot be handled at this time. 
+ * @return KErrNoMemory, if there is insufficient memory available.
+ * @return KErrPermissionDenied, if the caller has insufficient capabilities.
+ * @return KErrAuthServNoSuchPlugin, if the plugin does not exist.
+ * @return KErrArgument, if aType does not match the plugin's type.
+ **/
+EXPORT_C void RAuthMgrClient::SetPreferredTypePluginL(TAuthPluginType aType,
+													  TPluginId aPluginId)
+	{
+	User::LeaveIfError(CallSessionFunction(ESetAuthPreferences, TIpcArgs(aType, aPluginId)));
+	}
+
+/**
+ * Reset the training data of a registered identity.
+ *
+ * @param aId The identity to reset.
+ *
+ * @param aRegistrationInformation The regisration information to be used for 
+ * identifying the user. This data is meaningful for knowledge based  authentication 
+ * server plugins (here the registration data could be the passphrase). 
+ * Note that a plugin may choose to ignore the supplied registration data and simply 
+ * remove the identity from its records.
+ *
+ * @capability WriteDeviceData
+ *
+ * @return KErrServerTerminated, if the server no longer present
+ * @return KErrServerBusy, if the request cannot be handled at this time. 
+ * @return KErrNoMemory, if there is insufficient memory available.
+ * @return KErrPermissionDenied, if the caller has insufficient capabilities.
+ * @return KErrAuthServIdentityNotFound, if the id cannot be found.
+ * @return KErrAuthServResetMayLoseIdentity, if a reset can result in the loss of an identity. 
+ * @see KErrAuthServResetMayLoseIdentity.
+ * @return KErrArgument, if the supplied arguments are incorrect.
+ * @return ... any of the system-wide error codes.
+ **/
+EXPORT_C void RAuthMgrClient::ResetIdentityL(TIdentityId aId,
+							 const TDesC& aRegistrationInformation)
+	{
+	// Sanity check arguments
+	if (aId == 0)
+		{
+		User::Leave(KErrArgument);
+		}
+	User::LeaveIfError(CallSessionFunction(EResetIdentity, TIpcArgs(aId, &aRegistrationInformation)));
+	}
+
+/**
+ * Reset the training data of a registered identity.
+ *
+ * @param aId The identity to reset.
+ *
+ * @param aPluginType The type of plugins for which to supply the registration data during the reset.
+ * Note that currently only EAuthKnowledge type plugins is supported for this parameter.
+ * 
+ * @param aRegistrationInformation The regisration information to be used for 
+ * identifying the user. This data is meaningful for knowledge based  authentication 
+ * server plugins (here the registration data could be the passphrase). 
+ * Note that a plugin may choose to ignore the supplied registration data and simply 
+ * remove the identity from its records.
+ *
+ * @capability WriteDeviceData
+ *
+ * @return KErrServerTerminated, if the server no longer present
+ * @return KErrServerBusy, if the request cannot be handled at this time. 
+ * @return KErrNoMemory, if there is insufficient memory available.
+ * @return KErrPermissionDenied, if the caller has insufficient capabilities.
+ * @return KErrAuthServIdentityNotFound, if the id cannot be found.
+ * @return KErrAuthServResetMayLooseIdentity, if a reset can result in the loss of an identity. 
+ * @see KErrAuthServResetMayLooseIdentity.
+ * @return KErrArgument, if the supplied arguments are incorrect.
+ * @return ... any of the system-wide error codes.
+ **/
+EXPORT_C void RAuthMgrClient::ResetIdentityL(TIdentityId aId,
+							 TAuthPluginType aPluginType,
+							 const TDesC& aRegistrationInformation)
+	{
+	// Sanity check arguments
+	if (aId == 0)
+		{
+		User::Leave(KErrArgument);
+		}
+	User::LeaveIfError(CallSessionFunction(EResetIdentityByType, TIpcArgs(aId, aPluginType, &aRegistrationInformation)));
+	}
+
+/**
+ * Reset the training data of a registered identity.
+ *
+ * @param aId The identity to reset.
+ *
+ * @param aPluginIdList The list of plugin ids for which to supply the registration data during the reset.
+ *
+ * @param aRegistrationInformation An array of regisration information to be used for 
+ * identifying the user. The order of elements in this array correspond to the order of plugin ids in 
+ * aPluginIdList. This data is meaningful for knowledge based  authentication server 
+ * plugins (here the registration data could be the passphrase). 
+ * Note that a plugin may choose to ignore the supplied registration data and simply 
+ * remove the identity from its records.
+ *
+ * @capability WriteDeviceData
+ *
+ * @return KErrServerTerminated, if the server no longer present
+ * @return KErrServerBusy, if the request cannot be handled at this time. 
+ * @return KErrNoMemory, if there is insufficient memory available.
+ * @return KErrPermissionDenied, if the caller has insufficient capabilities.
+ * @return KErrAuthServIdentityNotFound, if the id cannot be found.
+ * @return KErrAuthServResetMayLooseIdentity, if a reset can result in the loss of an identity. 
+ * @see KErrAuthServResetMayLooseIdentity.
+ * @return KErrArgument, if the supplied arguments are incorrect.
+ * @return ... any of the system-wide error codes.
+ **/
+EXPORT_C void RAuthMgrClient::ResetIdentityL(TIdentityId aId,
+							 RArray<TPluginId>& aPluginIdList,
+							 RPointerArray<const HBufC>& aRegistrationInformation)
+	{
+	// Sanity check arguments
+	TInt count = aPluginIdList.Count();
+	if ((aId == 0) || (count < 1) || (count != aRegistrationInformation.Count()))
+		{
+		User::Leave(KErrArgument);
+		}
+
+	// Flatten aPluginIdList
+	HBufC8* bufPluginIds = AuthServerUtil::FlattenDataArrayLC(aPluginIdList);
+
+	// Flatten aRegistrationInformation
+	HBufC8* bufRegInfo = AuthServerUtil::FlattenDataPointerArrayLC(aRegistrationInformation);
+
+	User::LeaveIfError(CallSessionFunction(EResetIdentityByList, TIpcArgs(aId, bufPluginIds, bufRegInfo)));
+	CleanupStack::PopAndDestroy(2, bufPluginIds); // bufRegInfo
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/common/arrayutils.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,78 @@
+/*
+* 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: 
+* Utility functions for streaming arrays.
+*
+*/
+
+
+/**
+ @file 
+ @released
+ @internalComponent 
+*/
+
+#ifndef __ARRAYUTILS_H_
+#define __ARRAYUTILS_H_
+
+#include <s32strm.h>
+
+namespace AuthServer
+{
+	
+/////////////////////////////////////////////////////////////////////
+// RPointerArray utilities
+/////////////////////////////////////////////////////////////////////
+
+template <class T>
+void ExternalizePointerArrayL(const RPointerArray<T>& aArray, RWriteStream& aStream);
+
+template <class T>
+void InternalizePointerArrayL(RPointerArray<T>& aArray, RReadStream& aStream);
+
+/////////////////////////////////////////////////////////////////////
+// RArray utilities
+/////////////////////////////////////////////////////////////////////
+
+template <class T>
+void ExternalizeArrayL(const RArray<T>& aArray, RWriteStream& aStream);
+
+template <class T>
+void InternalizeArrayL(RArray<T>& aArray, RReadStream& aStream);
+
+/////////////////////////////////////////////////////////////////////
+// Traits classes - internally required by RPointerArray functions
+/////////////////////////////////////////////////////////////////////
+
+template <class T>
+class TTraits
+	{
+public:
+	static T* ReadFromStreamLC(RReadStream& aStream) { return T::NewLC(aStream); }
+	static void WriteToStreamL(const T& aItem, RWriteStream& aStream) { aStream << aItem; }
+	};
+
+// Specialisation for HBufs
+template <>
+class TTraits<HBufC16>
+	{
+public:
+	static HBufC16* ReadFromStreamLC(RReadStream& aStream) { return HBufC16::NewLC(aStream, KMaxTInt); }
+	static void WriteToStreamL(const HBufC16& aItem, RWriteStream& aStream) { aStream << aItem; }
+	};
+
+#include "arrayutils.inl"
+} // namespace AuthServer
+
+#endif  // __ARRAYUTILS_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/common/arrayutils.inl	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,66 @@
+/*
+* 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: 
+* Utility functions for copying and streaming RArrays. 
+* RPointerArray utilities
+*
+*/
+
+template <class T>
+void ExternalizePointerArrayL(const RPointerArray<T>& aArray, RWriteStream& aStream)
+	{
+	aStream.WriteInt32L(aArray.Count());
+	for (TInt i = 0; i < aArray.Count(); ++i)
+		{
+		TTraits<T>::WriteToStreamL(*aArray[i], aStream);
+		}
+	}
+
+template <class T>
+void InternalizePointerArrayL(RPointerArray<T>& aArray, RReadStream& aStream)
+	{
+	TInt count = aStream.ReadInt32L();
+	for (TInt i = 0; i < count; ++i)
+		{
+		T* item = TTraits<T>::ReadFromStreamLC(aStream);
+		User::LeaveIfError(aArray.Append(item));
+		CleanupStack::Pop();
+		}
+	}
+
+/////////////////////////////////////////////////////////////////////
+// RArray utilities
+/////////////////////////////////////////////////////////////////////
+template <class T>
+void ExternalizeArrayL(const RArray<T>& aArray, RWriteStream& aStream)
+	{
+	aStream.WriteInt32L(aArray.Count());
+	for (TInt i = 0; i < aArray.Count(); ++i)
+		{
+		aStream.WriteL(TPckgC<T>(aArray[i]));
+		}
+	}
+
+template <class T>
+void InternalizeArrayL(RArray<T>& aArray, RReadStream& aStream)
+	{
+	TInt count = aStream.ReadInt32L();
+	for (TInt i = 0; i < count; ++i)
+		{
+		T item;
+		TPckg<T> itemPckg(item);
+		aStream.ReadL(itemPckg);
+		User::LeaveIfError(aArray.Append(item));
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/common/authcommon_impl.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2005-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: 
+* This header file includes other authserver includes
+* which are used by the authcommon source files.
+*
+*/
+
+
+/**
+ @file 
+ @internalTechnology
+*/
+ 
+#ifndef AUTHCOMMON_IMPL_H
+#define AUTHCOMMON_IMPL_H
+
+#include <des.h>
+#include <random.h>
+#include "authexpression_impl.h"
+#include "authserver/identity.h"
+#include "authserver/plugindesc.h"
+#include "authserver/protectionkey.h"
+#include "authserver/authtypes.h"
+#include "authserver/auth_srv_errs.h"
+
+#endif	// AUTHCOMMON_IMPL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/common/authexpression.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,891 @@
+/*
+* Copyright (c) 2005-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 "authcommon_impl.h"
+#include <scs/cleanuputils.h>
+
+using namespace AuthServer;
+
+const TInt CAuthExpressionImpl::KVersion = 1;
+
+// -------- TAuthExpressionWrapper --------
+
+
+TAuthExpressionWrapper::TAuthExpressionWrapper(CAuthExpression* aExpression)
+/**
+	This constructor stores the supplied expression pointer.
+	
+	@param	aExpression		A pointer to the supplied expression
+							is stored in the TAuthExpressionWrapper
+							object.  On exit, this object owns
+							the expression.
+ */
+:	iPtr(aExpression)
+	{
+	// empty.
+	}
+
+
+TAuthExpressionWrapper::TAuthExpressionWrapper(TAuthPluginType aType)
+/**
+	Allocates a new instance of CAuthExpressionImpl which
+	describes the supplied plugin type.  If there is not
+	enough memory, the pointer is NULL on exit.
+	
+	@param	aType			Plugin type used to create new instance
+							of CAuthExpressionImpl.
+ */
+:	iPtr(new CAuthExpressionImpl(aType))
+	{
+	// empty.
+	}
+
+
+TAuthExpressionWrapper::TAuthExpressionWrapper(TPluginId aPluginId)
+/**
+	Allocates a new instance of CAuthExpressionImpl which
+	describes the supplied plugin ID.  If there is not
+	enough memory, the pointer is NULL on exit.
+	
+	@param	aPluginId		Value which describes a specific plugin.
+ */
+:	iPtr(new CAuthExpressionImpl(aPluginId))
+	{
+	// empty.
+	}
+
+TAuthExpressionWrapper::TAuthExpressionWrapper()
+/**
+	Allocates a new instance of CAuthExpressionImpl which
+	describes the default plugin ID.  If there is not
+	enough memory, the pointer is NULL on exit.
+	
+ */
+:	iPtr(new CAuthExpressionImpl())
+	{
+	// empty.
+	}
+
+// -------- factory functions --------
+
+
+static CAuthExpressionImpl* AuthComb(
+	CAuthExpressionImpl::TType aType, CAuthExpressionImpl* aLeft, CAuthExpressionImpl* aRight);
+
+
+EXPORT_C TAuthExpressionWrapper AuthServer::AuthExpr(TAuthPluginType aType)
+/**
+	Returns a wrapper around a new authentication expression.
+	
+	@param	aType			Identifies a type of plugin.
+	@return					Wrapper object for an instance
+							of CAuthExpressionImpl.  The authentication
+							expression is allocated on the heap,
+							and is NULL if there is not
+							enough memory.
+ */
+	{
+	return TAuthExpressionWrapper(aType);
+	}
+
+
+EXPORT_C TAuthExpressionWrapper AuthServer::AuthExpr(TPluginId aPluginId)
+/**
+	Returns a wrapper around a new authentication expression.
+	
+	@param	aPluginId		Identifies a specific plugin.
+	@return					Wrapper object for an instance
+							of CAuthExpressionImpl.  The authentication
+							expression is allocated on the heap,
+							and is NULL if there is not
+							enough memory.
+ */
+	{
+	return TAuthExpressionWrapper(aPluginId);
+	}
+
+EXPORT_C TAuthExpressionWrapper AuthServer::AuthExpr()
+/**
+	Returns a wrapper around a new authentication expression.
+	
+	@return					Wrapper object for an instance
+							of CAuthExpressionImpl.  The authentication
+							expression is allocated on the heap,
+							and is NULL if there is not
+							enough memory.
+ */
+	{
+	return TAuthExpressionWrapper();
+	}
+
+EXPORT_C TAuthExpressionWrapper AuthServer::AuthOr(CAuthExpression* aLeft, CAuthExpression* aRight)
+/**
+	Allocate a CAuthExpressionImpl node which combines the supplied
+	left and right nodes as an OR operation.
+	
+	If either aLeft or aRight are NULL, or this operation fails
+	to allocate the required memory, then any allocated memory
+	is cleaned up NULL is returned.
+	
+	@param	aLeft			Left node.  This must be an instance
+							of CAuthExpresionImpl.
+	@param	aRight			Right node.  This must be an instance
+							of CAuthExpresionImpl.
+	@return					New wrapper around CAuthExpression, NULL
+							if could not allocate, or if either the
+							supplied nodes were NULL.
+ */
+	{
+	CAuthExpressionImpl* leftImpl = static_cast<CAuthExpressionImpl*>(aLeft);
+	CAuthExpressionImpl* rightImpl = static_cast<CAuthExpressionImpl*>(aRight);
+	return AuthComb(CAuthExpressionImpl::EOr, leftImpl, rightImpl);
+	}
+
+
+EXPORT_C TAuthExpressionWrapper AuthServer::AuthAnd(CAuthExpression* aLeft, CAuthExpression* aRight)
+/**
+	Allocate a CAuthExpressionImpl node which combines the supplied
+	left and right nodes as an AND operation.
+	
+	If either aLeft or aRight are NULL, or this operation fails
+	to allocate the required memory, then the subexpressions are
+	deleted and this function returns NULL.
+	
+	@param	aLeft			Left node.
+	@param	aRight			Right node.
+	@return					New wrapper around CAuthExpression, NULL
+							if could not allocate, or if either the
+							supplied nodes were NULL.
+	@see AuthOr
+ */
+	{
+	CAuthExpressionImpl* leftImpl = static_cast<CAuthExpressionImpl*>(aLeft);
+	CAuthExpressionImpl* rightImpl = static_cast<CAuthExpressionImpl*>(aRight);
+	return AuthComb(CAuthExpressionImpl::EAnd, leftImpl, rightImpl);
+	}
+
+
+static CAuthExpressionImpl* AuthComb(
+	CAuthExpressionImpl::TType aType, CAuthExpressionImpl* aLeft, CAuthExpressionImpl* aRight)
+/**
+	Helper function for AuthOr and AuthAnd.  This function
+	allocates the combining node, storing the combining method (AND
+	or OR) and pointers to the left and right nodes.
+	
+	If aLeft or aRight are NULL on entry, or this function cannot
+	allocate the required memory, then any previously allocated nodes
+	are freed, and this function returns NULL.
+	
+	@param	aType			Type of expression, AND/OR
+	@param	aLeft			Left node.
+	@param	aRight			Right node.
+	@return					New wrapper around CAuthExpression, NULL
+							if could not allocate, or if either the
+							supplied nodes were NULL.
+	@see AuthAnd
+	@see AuthOr
+ */
+	{
+	CAuthExpressionImpl* compound = 0;
+	
+	if (aLeft == 0 || aRight == 0)
+		goto failed;
+	
+	compound = new CAuthExpressionImpl(aType, aLeft, aRight);
+	if (compound == 0)
+		goto failed;
+	
+	return compound;
+	
+failed:
+	delete aLeft;
+	delete aRight;
+	
+	return 0;
+	}
+
+
+// -------- TSizeStream --------
+
+
+EXPORT_C void TSizeStream::DoWriteL(const TAny* /* aPtr */, TInt aLength)
+/**
+	Override MStreamBuf by incrementing the
+	accumulated size by aLength.
+	
+	@param	aLength			Length of data to write to stream.
+ */
+	{
+	iSize += aLength;
+	}
+
+
+// -------- CAuthExpressionImpl --------
+
+
+#ifdef _DEBUG
+#define VAR_FOLLOWS(___c, ___v1, ___v2)	\
+	(_FOFF(___c, ___v2) >= _FOFF(___c, ___v1) + sizeof(___c::___v1))
+#endif
+
+
+CAuthExpressionImpl::CAuthExpressionImpl(TAuthPluginType aType)
+:	iType(EPluginType),
+	iPluginType(aType)
+/**
+	Initialise this leaf node authentication expression
+	as describing a plugin type.
+	
+	@param	aType			Identifies a type of plugin.
+	@panic AUTHEXPR 16		This constructed object is internally
+							inconsistent (debug only.)
+ */
+	{
+#ifdef _DEBUG
+	// non-aligned value to detect invalid node pointers
+	__ASSERT_COMPILE(VAR_FOLLOWS(CAuthExpressionImpl, iPluginType, iComb.iRight));
+	iComb.iRight = (CAuthExpressionImpl*)0xB51DE;
+#endif
+
+	__ASSERT_DEBUG(Invariant(), Panic(ECtTyInvariant));
+	}
+
+
+CAuthExpressionImpl::CAuthExpressionImpl(TPluginId aPluginId)
+/**
+	Initialise this leaf node authentication expression
+	as describing a specific plugin.
+	
+	@param	aPluginId		Identifies a specific plugin.
+	@panic	AUTHEXPR 32		This constructed object is internally
+							inconsistent (debug only.)
+ */
+:	iType(EPluginId),
+	iPluginId(aPluginId)
+	{
+#ifdef _DEBUG
+	// non-aligned value to detect invalid node pointers
+	__ASSERT_COMPILE(VAR_FOLLOWS(CAuthExpressionImpl, iPluginId, iComb.iRight));
+	iComb.iRight = (CAuthExpressionImpl*)0xB51DE;
+#endif
+
+	__ASSERT_DEBUG(Invariant(), Panic(ECtIdInvariant));
+	}
+
+CAuthExpressionImpl::CAuthExpressionImpl()
+/**
+	Initialise this leaf node authentication expression
+	as describing a specific plugin.
+
+	@panic	AUTHEXPR 32		This constructed object is internally
+							inconsistent (debug only.)
+ */
+:	iType(ENull)
+	{
+#ifdef _DEBUG
+	// non-aligned value to detect invalid node pointers
+	__ASSERT_COMPILE(VAR_FOLLOWS(CAuthExpressionImpl, iPluginId, iComb.iRight));
+	iComb.iRight = (CAuthExpressionImpl*)0xB51DE;
+#endif
+
+	__ASSERT_DEBUG(Invariant(), Panic(ECtIdInvariant));
+
+	}
+
+
+CAuthExpressionImpl::CAuthExpressionImpl(TType aType, CAuthExpressionImpl* aLeft, CAuthExpressionImpl* aRight)
+/**
+	Initialise a complex - AND or OR - expression.
+	
+	@param	aType			The type of combination.  The only
+							allowed values are EAnd and EOr.
+	@param	aLeft			Left expression.  This cannot be NULL.
+	@param	aRight			Right expression.  This cannot be NULL.
+	@panic	AUTHEXPR 48		Called with expression type that was
+							neither AND nor OR (debug only.)
+	@panic	AUTHEXPR 49		Called with NULL left node (debug only.)
+	@panic	AUTHEXPR 50		Called with NULL right node (debug only.)
+	@panic	AUTHEXPR 51		This object is internally inconsistent
+							after construction (debug only.)
+ */
+:	iType(aType)
+	{
+	__ASSERT_DEBUG(aType == EAnd || aType == EOr, Panic(ECt2BadComb));
+	__ASSERT_DEBUG(aLeft != 0, Panic(ECt2NullLeft));
+	__ASSERT_DEBUG(aRight != 0, Panic(ECt2NullRight));
+	
+	iComb.iLeft = aLeft;
+	iComb.iRight = aRight;
+	aLeft->iParent = aRight->iParent = this;
+	
+	__ASSERT_DEBUG(Invariant(), Panic(ECt2Invariant));
+	}
+
+
+CAuthExpressionImpl::~CAuthExpressionImpl()
+/**
+	Deletes resources used by this expression.  If this is a complex
+	expression then it deletes the subexpression nodes.
+ */
+	{
+	// by construction iType is always correctly initialized
+	// before this function is called.
+	if (iType == EAnd || iType == EOr)
+		{
+		delete iComb.iLeft;
+		delete iComb.iRight;
+		}
+	}
+
+
+EXPORT_C void CAuthExpressionImpl::ExternalizeL(RWriteStream& aWriteStream) const
+/**
+	Write a persistent version of this object to the supplied
+	stream.  This function is used to transfer the expression
+	to the authentication server.
+	
+	@param	aWriteStream	Stream to write object to.
+	@panic	AUTHEXPR 160	This object is internally inconsistent
+							when this function is called.
+ */
+	{
+	__ASSERT_DEBUG(Invariant(), Panic(EExtInvariant));
+	
+	aWriteStream.WriteInt8L(KVersion);
+	Externalize2L(aWriteStream);
+	}
+
+
+void CAuthExpressionImpl::Externalize2L(RWriteStream& aWriteStream) const
+/**
+	Helper function for ExternalizeL.  This function writes
+	a persistent version of this expression object, including
+	any subexpressions, to the supplied stream.
+	
+	@param	aWriteStream	Stream to write object to.
+	@panic	AUTHEXPR 144	This object is internally inconsistent
+							when this function is called.
+ */
+	{
+	__ASSERT_DEBUG(Invariant(), Panic(EExtInvariant));
+	
+	aWriteStream.WriteInt8L(iType);
+	
+	switch (iType)
+		{
+	case EAnd:
+	case EOr:
+		iComb.iLeft->Externalize2L(aWriteStream);
+		iComb.iRight->Externalize2L(aWriteStream);
+		break;
+	
+	case EPluginId:
+		aWriteStream.WriteInt32L(iPluginId);
+		break;
+	
+	case EPluginType:
+		aWriteStream.WriteInt32L(iPluginType);
+		break;
+		
+	case ENull:
+		aWriteStream.WriteInt32L(iPluginId);
+		break;
+	default:
+		// this case should not be reached because this
+		// object has passed the invariant.
+		break;
+		}
+	}
+
+
+// restore the encoded authentication expression
+
+
+EXPORT_C CAuthExpressionImpl* CAuthExpressionImpl::NewL(RReadStream& aReadStream)
+/**
+	Factory function reconstructs an authentication
+	expression from the supplied stream.
+	
+	@param	aReadStream		Stream containing externalized
+							authentication expression.  This must
+							have been generated with CAuthExpressionImpl::ExternalizeL.	
+	@return					Authorisation expression internalized
+							from the supplied stream.
+	@leave KErrNoMemory		Not enough memory to reconstruct the expression.
+	@leave KErrInternalizeInvalidAuthExpr The supplied stream does not
+							describe a valid authentication expression.
+	@leave KErrAuthServUnsupportedExprVersion The supplied stream
+							was created with a later version of CAuthExpressionImpl.
+	@see CAuthExpressionImpl::ExternalizeL
+ */
+	{
+	TInt8 ver = aReadStream.ReadInt8L();
+	if (ver > KVersion)
+		User::Leave(KErrAuthServUnsupportedExprVersion);
+	
+	return New2L(aReadStream);
+	}
+	
+CAuthExpressionImpl* CAuthExpressionImpl::New2L(RReadStream& aReadStream)
+/**
+	Helper function for NewL.  This recursively constructs the
+	authentication expression after NewL has checked that it
+	supports the encoded version.
+	
+	@param	aReadStream		Stream containing externalized
+							authentication expression.  This must
+							have been generated with CAuthExpressionImpl::ExternalizeL.	
+	@return					Authorisation expression internalized
+							from the supplied stream.
+	@leave KErrNoMemory		Not enough memory to reconstruct the expression.
+	@leave KErrInternalizeInvalidAuthExpr The supplied stream does not
+							describe a valid authentication expression.
+	@see CAuthExpressionImpl::ExternalizeL
+ */
+	{
+	CAuthExpressionImpl::TType t;
+	t = static_cast<CAuthExpressionImpl::TType>(aReadStream.ReadInt8L());
+	
+	switch(t)
+		{
+	case CAuthExpressionImpl::EAnd:
+	case CAuthExpressionImpl::EOr:
+		{
+		CAuthExpressionImpl* left = CAuthExpressionImpl::New2L(aReadStream);
+		CleanupStack::PushL(left);
+		CAuthExpressionImpl* right = CAuthExpressionImpl::New2L(aReadStream);
+		CleanupStack::PushL(right);
+		CAuthExpressionImpl* complex = new(ELeave) CAuthExpressionImpl(t, left, right);
+		CleanupStack::Pop(2, left);	// complex now owns left and right
+		return complex;
+		}
+	
+	case CAuthExpressionImpl::EPluginId:
+		return new(ELeave) CAuthExpressionImpl(
+			static_cast<TPluginId>(aReadStream.ReadInt32L()));
+	
+	case CAuthExpressionImpl::EPluginType:
+		return new(ELeave) CAuthExpressionImpl(
+			static_cast<TAuthPluginType>(aReadStream.ReadInt32L()));
+	
+		
+	case CAuthExpressionImpl::ENull:
+		return new(ELeave) CAuthExpressionImpl();	
+	
+	default:
+		User::Leave(KErrAuthServInvalidInternalizeExpr);
+		return 0;	// avoid 'return value expected' warning
+		}
+	}
+	
+/**
+  Helper function which converts the string into a form that can 
+  be processed as tokens by TLex.Essentially, this method parses and appends
+  space in the input string when delimiters("(",")","&" and "|") are
+  encountered, consequenty the resultant string thus obtained can be parsed
+  using TLex.
+ 
+  @param	aStringToBeProcessed	string to be processed.	
+  @param	aResultantString		a buffer which does not already own any allocated memory, and is populated 
+  									with a string resulting from processing aStringToBeProcessed.
+ 	 									
+ */ 	
+
+EXPORT_C void CAuthExpressionImpl::InsertSpaceBetweenOperatorsL(const TDesC& aStringToBeProcessed, RBuf& aResultantString)
+	{
+	TChar ch = 0;
+	_LIT(KSeparator, " ");
+	HBufC* strBuffer = HBufC::NewLC(KMaxBufferSize);
+	TPtr strPtr(strBuffer->Des());
+	
+	// length of 2 KSeparator and 1 ch.
+	const TInt KAddLength = 3;
+	
+	for(TInt i = 0; i < aStringToBeProcessed.Length(); ++i)
+		{
+		ch = aStringToBeProcessed[i];
+		
+		// check whether appending 3 characters(2 KSeparator and 1 ch) to
+		// aResultantAliasString exceeds the Maxlength.
+		TInt resultingLen = strPtr.Length() + KAddLength;
+		if(resultingLen > KMaxBufferSize)
+			{
+			strBuffer->ReAllocL(resultingLen);
+			}
+				
+		if(ch == '(' || ch == ')' || ch == '&' || ch == '|')
+			{
+			strPtr.Append(KSeparator);
+			strPtr.Append(ch);
+			strPtr.Append(KSeparator);
+			}
+			
+		else
+			{
+			strPtr.Append(ch);
+			}
+		}
+	
+	CleanupStack::Pop(strBuffer);
+	aResultantString.Assign(strBuffer);
+	}
+		
+/**
+  Creates CAuthExpression object from a string defining an authentication.
+  strength.The ownership of CAuthExpression object is transferred to the caller.
+ 
+  @param aStrengthAliasString a string defining an authentication.
+  strength obtained from the authserver cenrep file.
+ 
+  @return CAuthExpression object.
+ 
+  @leave KErrAuthServInvalidAliasStringExpression, when aStrengthAliasString contains tokens other than pluginId, pluginType
+  and operators '&', '|', '(' and ')'		
+ 
+ */  
+    
+ EXPORT_C CAuthExpression* CAuthExpressionImpl::CreateAuthExprObjectL(const TDesC& aStrengthAliasString)
+ 	{
+   	RBuf resultantAliasString;
+   	CleanupClosePushL(resultantAliasString);
+     	
+   	// tokenize aStrengthAliasString, to facilitate parsing using TLex. 
+   	InsertSpaceBetweenOperatorsL(aStrengthAliasString, resultantAliasString);
+		
+    // facilitates ordering of expression evaluation via brackets.
+    CAuthExpression* authExpression = EvaluateAliasStringL(resultantAliasString);
+    CleanupStack::PopAndDestroy(); 
+
+    return authExpression;
+    }
+    
+  
+ /**
+  This method facilitates ordering of alias string expression (containing pluginIds or pluginTypes
+  or a combination of both) evaluation via brackets.The ownership of CAuthExpression object is 
+  transferred to the caller.
+ 
+  @param aStrengthAliasString	an alias string to be parsed and processed.This must be enclosed within brackets.
+ 
+  @return CAuthExpression object.
+ 
+  @leave KErrAuthServInvalidAliasStringExpression, when aStrengthAliasString contains tokens other than pluginId, pluginType
+  						and operators('&', '|') and brackets.		
+ 
+ */ 
+    
+  CAuthExpression* CAuthExpressionImpl::EvaluateAliasStringL(const RBuf& aStrengthAliasString)
+  	{
+  	TLex input(aStrengthAliasString);
+
+  	// array of operators (& and |) and brackets.
+  	const TInt KGranularity = 8;
+  	CArrayFixFlat<TPtrC>* opStack = new(ELeave) CArrayFixFlat<TPtrC>(KGranularity);
+   	CleanupStack::PushL(opStack);
+   	
+   	// array of CAuthExpression objects.
+    RPointerArray<CAuthExpression> authExpressionArray;
+    CleanupResetAndDestroyPushL(authExpressionArray);
+   	
+    for (TPtrC token = input.NextToken(); token.Size() > 0 ; 
+         token.Set(input.NextToken()))
+    	{
+    	TInt count = 0;
+    	TInt index = 0;
+    	if(token.CompareF(KAuthOpOr) == 0)
+    		{
+    		count = opStack->Count();
+    		index = count - 1;
+    		// only when the previous element in the opStack is not "&" , will token be added on the opStack.
+    		if(index >= 0 && opStack->At(index) != KAuthOpAnd)
+    			{
+    			opStack->AppendL(token);
+    			}
+    				
+    		else
+    			{
+    			// atleast 1 element in opStack is "&",hence iterate through opStack and   
+    			// keep creating auth expression object until the loop ends.
+    			while(index >= 0 && opStack->At(index) == KAuthOpAnd)
+    				{
+    				CAuthExpression* authExpr = CreateAuthExpressionL(authExpressionArray, opStack->At(index));
+    				opStack->Delete(index);
+    				opStack->Compress();
+    				CleanupStack::PushL(authExpr);
+					authExpressionArray.AppendL(authExpr);
+					CleanupStack::Pop(authExpr);
+					--index;
+    				}
+    					
+    			opStack->AppendL(token);	
+    			}	
+    		} //if(token.CompareF(KAuthOpOr) == 0)
+    			
+    	else if(token.CompareF(KAuthOpAnd) == 0 || token.CompareF(KOpenBracket) == 0)
+    		{
+    		opStack->AppendL(token);
+    		}
+    				
+    	else if(token.CompareF(KCloseBracket) == 0)
+    		{
+    		// when the previous element in the opStack is "(", delete it.
+    		count = opStack->Count();
+    		index = count - 1;
+    		TInt exprCount = authExpressionArray.Count();
+    			
+    		if(index >= 0 && opStack->At(index) == KOpenBracket)
+    			{
+    			opStack->Delete(index);
+    			opStack->Compress();
+    			}
+    			
+    		// the previous element could be an operator/operators of same precedence.	
+    		else
+    			{
+    			while(index >= 0 && opStack->At(index) != KOpenBracket)
+					{
+					CAuthExpression* expr = CreateAuthExpressionL(authExpressionArray, opStack->At(index));
+					CleanupStack::PushL(expr);
+					authExpressionArray.AppendL(expr);
+					CleanupStack::Pop(expr);
+					opStack->Delete(index);	
+					opStack->Compress();
+					--index;
+					}	//while
+						
+				if(index == -1)
+					{
+					User::Leave(KErrAuthServInvalidAliasStringExpression);
+					}
+						
+				opStack->Delete(index);
+				opStack->Compress();
+    			}
+			}	//else if(token.CompareF(KCloseBracket) == 0)
+    		
+    	//when the token is neither "(","|","&" and ")" , it must be a plugin id or plugin Type,
+    	//hence create a CAuthExpression object.
+    	else
+    		{
+    		CAuthExpression* expression = CreateAuthExpressionL(token);
+    		CleanupStack::PushL(expression);
+			authExpressionArray.AppendL(expression);
+			CleanupStack::Pop(expression);
+    		}
+		}	//for loop
+    
+  // since authExpressionArray will eventually contain only 1 authExpression pointer,
+  // remove it from the array, as the ownership of this pointer is transferred to the caller.
+  __ASSERT_ALWAYS((authExpressionArray.Count() == 1), User::Leave(KErrAuthServInvalidAliasStringExpression));
+   		
+  CAuthExpression* authExpression = authExpressionArray[0];
+  authExpressionArray.Remove(0);
+  
+  CleanupStack::PopAndDestroy(2, opStack);	//opStack and authExpressionArray
+  return authExpression;
+  
+  }
+        
+/**
+  Creates CAuthExpression object from an alias string containing either 
+  plugin Id  or plugin type.The ownership of the object is transferred to the caller.
+ 
+  @param aAliasString	string containing either plugin Id or plugin Type.
+ 
+  @return CAuthExpression object.
+ 
+  @leave KErrAuthServInvalidAliasStringExpression, if the operands or operators are invalid strings.	
+ 
+  @leave KErrNoMemory, if there was insufficient memory to allocate the CAuthExpression object.
+ */ 	
+  CAuthExpression* CAuthExpressionImpl::CreateAuthExpressionL(const TDesC& aAliasString)
+  	{
+   	TLex  input(aAliasString);
+   	CAuthExpression* expression = 0;
+    TPluginId plugin = 0;
+    	
+  	for (TPtrC token = input.NextToken(); token.Size() > 0 ; 
+         token.Set(input.NextToken()))
+       {
+    	TLex lexer(token);
+    	if(token.CompareF(KAuthBiometric) == 0)
+    		{
+    		expression = AuthExpr(EAuthBiometric);
+    		}
+    	else if(token.CompareF(KAuthKnowledge) == 0)
+    		{
+    		expression = AuthExpr(EAuthKnowledge);
+    		}
+    	else if(token.CompareF(KAuthToken) == 0)
+    		{
+    		expression = AuthExpr(EAuthToken);
+    		}
+    	else if(token.CompareF(KAuthPerformance) == 0)
+    		{
+    		expression = AuthExpr(EAuthPerformance);
+    		}
+    	else if(token.CompareF(KAuthDefault) == 0)
+    		{
+    		expression = AuthExpr(EAuthDefault);
+    		}	
+       	else if(lexer.Val(plugin, EHex) == KErrNone)
+    		{
+    		expression = AuthExpr(plugin);
+    		}	
+    	else
+    		{
+    		User::Leave(KErrAuthServInvalidAliasStringExpression);
+    		}
+       }
+     		
+
+    if(expression == NULL)
+		{
+		User::Leave(KErrNoMemory);
+		}
+
+    return expression;    	
+   	}
+ 
+/**
+  Creates CAuthExpression object from an array of authexpression objects and an operator.
+  The ownership of the object is transferred to the caller.
+ 
+  @param aAuthExprArray		an array of authexpression objects. 
+  @param aOperator			an authexpression operator ( '&' or '|').
+  
+  @return CAuthExpression object.
+  @leave KErrAuthServInvalidAliasStringExpression, if the operands or operators are invalid strings.
+ 
+ */  	
+ CAuthExpression* CAuthExpressionImpl::CreateAuthExpressionL(RPointerArray<CAuthExpression>& aAuthExprArray, TPtrC aOperator)
+  	{
+  	// aAuthExprArray must contain minimum of 2 elements.
+  	__ASSERT_ALWAYS((aAuthExprArray.Count() >= 2), User::Leave(KErrAuthServInvalidAliasStringExpression));
+  	
+  	CAuthExpression* authExpression = 0;
+   	TInt exprIndex = aAuthExprArray.Count() - 1;
+   	
+  	if(aOperator.CompareF(KAuthOpAnd) == 0)
+  		{
+  		authExpression = AuthAnd(aAuthExprArray[exprIndex], aAuthExprArray[exprIndex-1]);
+  		}
+    	
+  	else if(aOperator.CompareF(KAuthOpOr) == 0)
+  		{
+  		authExpression = AuthOr(aAuthExprArray[exprIndex], aAuthExprArray[exprIndex-1]);
+  		}
+  		
+    else
+    	{
+    	User::Leave(KErrAuthServInvalidAliasStringExpression);
+    	}
+	
+	// array elements are not deleted since the ownership is transferred to authExpression,
+	aAuthExprArray.Remove(exprIndex);
+	aAuthExprArray.Remove(exprIndex-1);
+	aAuthExprArray.Compress();
+	
+	return authExpression;
+  	}
+
+
+#ifndef _DEBUG
+// In release mode provide stub functions for Panic() and Invariant().
+
+EXPORT_C void CAuthExpressionImpl::Panic(TPanic /* aPanic */)
+	{
+	// empty.
+	}
+
+EXPORT_C TBool CAuthExpressionImpl::Invariant() const
+	{
+	return ETrue;
+	}
+
+#else
+
+EXPORT_C void CAuthExpressionImpl::Panic(TPanic aPanic)
+/**
+	This function is defined for debug builds only.
+	It halts the current thread when an invalid
+	argument is supplied to one of CAuthExpressionImpl's functions.
+	
+	The current thread is panicked with category "AUTHEXPR"
+	and the supplied reason.
+	
+	@param	aPanic			Panic reason.
+ */
+	{
+	_LIT(KPanicCat, "AUTHEXPR");
+	User::Panic(KPanicCat, aPanic);
+	}
+
+EXPORT_C TBool CAuthExpressionImpl::Invariant() const
+/**
+	This function is defined for debug builds, and
+	checks that the object is internally consistent.
+	
+	The node's type must be a supported value - AND, OR,
+	plugin ID, or plugin type.
+	
+	If this is a combining node then recursively ensure
+	that both the left and right nodes are internally
+	consistent.
+ */
+	{
+	// this node's parent sees it as a child
+	if (iParent != 0 && !(iParent->iComb.iLeft == this || iParent->iComb.iRight == this))
+		return EFalse;
+	
+	switch (iType)
+		{
+	case EPluginId:
+	case EPluginType:
+		return ETrue;
+		
+	case EAnd:
+	case EOr:
+		// these will fault, as opposed to fail the invariant,
+		// if the pointers are invalid, but so would the original
+		// call to this function if the this pointer were invalid.
+		
+		// this node's children see it as the parent
+		// don't use Parent() because that asserts on the
+		// subexpression, whereas this function should
+		// return EFalse.
+		if (iComb.iLeft->iParent != this)
+			return EFalse;
+		
+		if (iComb.iRight->iParent != this)
+			return EFalse;
+		
+		return iComb.iLeft->Invariant() && iComb.iRight->Invariant();
+	
+	case ENull:
+		return ETrue;
+		
+	default:
+		// unrecognized node type, so fail invariant
+		return EFalse;
+		}
+	}
+	
+#endif	// #ifdef _DEBUG
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/common/authexpression_impl.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,199 @@
+/*
+* Copyright (c) 2005-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: 
+* This file contains the implementation for CAuthExpression which is only visible
+* to implementation, and not the the client code.
+*
+*/
+
+
+/**
+ @file 
+ @released
+ @internalComponent
+*/
+ 
+#ifndef AUTHEXPRESSION_IMPL_H
+#define AUTHEXPRESSION_IMPL_H
+
+#include <s32buf.h>
+#include <authserver/authexpression.h>
+
+namespace AuthServer {
+
+// constants and operators used for processing authentication expression.
+
+_LIT(KAuthOpAnd,"&");
+_LIT(KAuthOpOr,"|");
+_LIT(KAuthBiometric, "Biometric");
+_LIT(KAuthDefault, "Default");
+_LIT(KAuthKnowledge, "Knowledge");
+_LIT(KAuthToken, "Token");
+_LIT(KAuthPerformance, "Performance");
+_LIT(KOpenBracket, "(");
+_LIT(KCloseBracket, ")");
+const TInt KMaxBufferSize = 2048;
+    
+class TSizeStream : public MStreamBuf
+/**
+	This subclass of MStreamBuf is used with
+	RWriteStream to count how many bytes are
+	required to externalize an object.
+ */
+	{
+public:
+	inline TSizeStream();
+	inline TInt Size() const;
+
+	// override MStreamBuf
+	IMPORT_C virtual void DoWriteL(const TAny* /* aPtr */, TInt aLength);
+
+private:
+	/** Accumulated stream length in bytes. */
+	TInt iSize;
+	};
+
+
+class CAuthExpressionImpl : public CAuthExpression
+/**
+	This class, which is not visible to clients,
+	defines the variables and functions which are
+	used by authentication expressions.
+	
+	Clients should use the CAuthExpression base class
+	which provides type safety but provides no implementation,
+	so authentication expressions can be re-implemented
+	later without breaking BC.
+
+	@internalComponent
+ */
+	{
+public:
+	/**
+		The type of expression represented by an instance
+		of this object, namely a plugin type, a plugin ID,
+		or a complex AND expression, OR expression or a 
+		NULL expression.
+	 */
+	enum TType {EPluginType, EPluginId, EAnd, EOr, ENull};
+		
+	CAuthExpressionImpl(TAuthPluginType aType);
+	CAuthExpressionImpl(TPluginId aPluginId);
+	CAuthExpressionImpl();
+	CAuthExpressionImpl(TType aType, CAuthExpressionImpl* aLeft, CAuthExpressionImpl* aRight);
+
+	IMPORT_C static CAuthExpressionImpl* NewL(RReadStream& aReadStream);
+
+	virtual ~CAuthExpressionImpl();
+
+	// implement CAuthExpression
+	virtual void ExternalizeL(RWriteStream& aWriteStream) const;
+	
+	IMPORT_C static CAuthExpression* CreateAuthExprObjectL(const TDesC& aStrengthAliasString);
+	
+	IMPORT_C static void InsertSpaceBetweenOperatorsL(const TDesC& aAliasStringToBeProcessed, RBuf& aResultantAliasString);
+	
+	inline TType Type() const;
+	inline const CAuthExpressionImpl* Left() const;
+	inline const CAuthExpressionImpl* Right() const;
+	inline TAuthPluginType PluginType() const;
+	inline TPluginId PluginId() const;
+	inline CAuthExpressionImpl* Parent() const;
+
+private:
+	/**
+		Current authentication expression version.
+		This is embedded in the externalized expression
+		so the server can reject the expression if it
+		uses an unsupported version.
+	 */
+	static const TInt KVersion;
+	void Externalize2L(RWriteStream& aWriteStream) const;
+	static CAuthExpressionImpl* New2L(RReadStream& aReadStream);
+	static CAuthExpression* CreateAuthExpressionL(const TDesC& aAliasString);
+	static CAuthExpression* CreateAuthExpressionL(RPointerArray<CAuthExpression>& aAuthExprArray, TPtrC aOperator);
+	static CAuthExpression* EvaluateAliasStringL(const RBuf& aStrengthAliasString);
+	
+	
+private:
+	/**
+		This expression's parent node.  This value is
+		used to navigate the expression tree during
+		evaluation.
+	 */
+	CAuthExpressionImpl* iParent;
+	
+	/** This expression's type. */
+	TType iType;
+	
+	class TBinaryComb
+	/**
+		This class contains pointers to the left and
+		right subexpressions when this expression is
+		an AND or an OR.
+	 */
+		{
+	public:
+		/** Left subexpression.  This cannot be NULL. */
+		CAuthExpressionImpl* iLeft;
+		/** Right subexpression.  This cannot be NULL. */
+		CAuthExpressionImpl* iRight;
+		};
+
+	union
+		{
+		/** This field is valid iff iType == EPluginType. */
+		TAuthPluginType iPluginType;
+		/** This field is valid iff iType == EPluginId. */
+		TPluginId iPluginId;
+		/** This field is valid iff iType == EAnd or iType == EOr. */
+		TBinaryComb iComb;
+		};
+		
+private:
+	// Invariant and Panic are defined, but only as stub
+	// functions for release mode.
+
+	enum TPanic
+	/**
+		In debug builds the current thread can be halted
+		with panic category "AUTHEXPR" and one of the
+		following reasons to indicate that the object has
+		become corrupt or that a caller has supplied an
+		invalid argument to one of this class' functions.
+	 */
+		{
+		ECtTyInvariant = 0x10,
+		ECtIdInvariant = 0x20,
+		ECt2BadComb = 0x30, ECt2NullLeft, ECt2NullRight, ECt2Invariant,
+		ETyAInvariant = 0x40,
+		ELfInvariant = 0x50, ELfNotComplex,
+		ERgInvariant = 0x60, ERgNotComplex,
+		EPTyInvariant = 0x70, EPTyNotPluginType,
+		EPIdInvariant = 0x80, EPIdNotPluginId,
+		EPPrInvariant = 0x90,
+		EExtInvariant = 0xa0
+		};
+		
+
+	IMPORT_C TBool Invariant() const;
+	IMPORT_C static void Panic(TPanic aPanic);
+	};
+
+}	// namespace AuthServer {
+
+#include "authexpression_impl.inl"
+
+#endif	// #ifndef AUTHEXPRESSION_IMPL_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/common/authexpression_impl.inl	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,162 @@
+/*
+* Copyright (c) 2005-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: 
+*
+*/
+
+
+#ifndef AUTHEXPRESSION_IMPL_INL
+#define AUTHEXPRESSION_IMPL_INL
+
+#include "authexpression_impl.h"
+
+namespace AuthServer {
+
+// -------- TSizeStream --------
+
+
+inline TSizeStream::TSizeStream()
+/**
+	Initialise the accumulated stream size to zero.
+ */
+:	iSize(0)
+	{
+	// empty.
+	}
+
+
+inline TInt TSizeStream::Size() const
+/**
+	Accessor function returns the accumulated
+	stream size in bytes.
+	
+	@return					Accumulated stream size in bytes.
+ */
+	{
+	return iSize;
+	}
+
+
+// -------- CAuthExpressionImpl --------
+
+
+inline CAuthExpressionImpl::TType CAuthExpressionImpl::Type() const
+/**
+	Accessor function returns this expression type, i.e.
+	whether it is a plugin ID, a plugin type, an AND expression,
+	or an OR expression.
+	
+	@return					This expression's type.
+	@panic	AUTHEXPR 64		This object is internally inconsistent
+							when the function is called (debug only.)
+ */
+	{
+	__ASSERT_DEBUG(Invariant(), Panic(ETyAInvariant));
+	return iType;
+	}
+
+
+inline const CAuthExpressionImpl* CAuthExpressionImpl::Left() const
+/**
+	Accessor function returns this expression's left node.
+	
+	@return					A non-modifiable pointer to
+							this expression's left node.
+	@panic	AUTHEXPR 80		This object is internally inconsistent	
+							when this function is called (debug only.)
+	@panic	AUTHEXPR 81		This object is not an AND or OR expression
+							(debug only.)
+	@see Right
+ */
+	{
+	__ASSERT_DEBUG(Invariant(), Panic(ELfInvariant));
+	__ASSERT_DEBUG(iType == EAnd || iType == EOr, Panic(ELfNotComplex));
+	return iComb.iLeft;
+	}
+
+	
+inline const CAuthExpressionImpl* CAuthExpressionImpl::Right() const
+/**
+	Accessor function returns this expression's left node.
+	
+	@return					A non-modifiable pointer to
+							this expression's right node.
+	@panic	AUTHEXPR 96		This object is not an AND or OR expression
+							(debug only.)
+	@see Left
+ */
+	{
+	__ASSERT_DEBUG(Invariant(), Panic(ERgInvariant));
+	__ASSERT_DEBUG(iType == EAnd || iType == EOr, Panic(ERgNotComplex));
+	return iComb.iRight;
+	}
+
+
+inline TAuthPluginType CAuthExpressionImpl::PluginType() const
+/**
+	Accessor function returns this expression's plugin type.
+	
+	@return					This expression's plugin type.
+	@panic	AUTHEXPR 112	This object is internally inconsistent
+							when this function is called (debug only.)
+	@panic	AUTHEXPR 113	This object does not describe a
+							plugin type (debug only.)
+ */
+	{
+	__ASSERT_DEBUG(Invariant(), Panic(EPTyInvariant));
+	__ASSERT_DEBUG(iType == EPluginType, Panic(EPTyNotPluginType));
+	return iPluginType;
+	}
+
+
+inline TPluginId CAuthExpressionImpl::PluginId() const
+/**
+	Accessor function returns this expression's plugin ID.
+	
+	@return					This expression's plugin ID.
+	@panic AUTHEXPR 128		This object is internally inconsistent
+							when this function is called (debug only.)
+	@panic AUTHEXPR 129		This object does not identify a
+							specific plugin (debug only.)
+ */
+	{
+	__ASSERT_DEBUG(Invariant(), Panic(EPIdInvariant));
+	__ASSERT_DEBUG(iType == EPluginId, Panic(EPIdNotPluginId));
+	return iPluginId;
+	}
+
+
+inline CAuthExpressionImpl* CAuthExpressionImpl::Parent() const
+/**
+	Accessor function returns this node's parent.
+	
+	@return					This node's parent.  This is
+							NULL for a root node.
+	@panic AUTHEXPR 144		This object is internally inconsistent
+							when this function is called (debug only.)
+	@internalComponent
+ */
+	{
+	__ASSERT_DEBUG(Invariant(), Panic(EPPrInvariant));
+
+	return iParent;
+	}
+
+
+
+}	// namespace AuthServer {
+
+
+#endif	// #ifndef AUTHEXPRESSION_IMPL_INL
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/common/authpatchdata.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2008-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 <e32base.h>
+
+// All the patchable variables in the authcommon.dll need to be in a separate file.
+// Care should be taken not to define the exported data in the same source file 
+// in which they are referred, lest the compiler inline's it. If inlined, the 
+// data cannot be patched. Hence, the definition of data must be put in a 
+// separate source file and they must be declared in other source files by 
+// #including "authpatchdata.h".
+
+EXPORT_C extern const TUint8 KEnablePostMarketAuthenticationPlugins = 0x00;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/common/authserveripc.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 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: 
+* authserver client server IPC parameters implementation
+*
+*/
+
+
+/**
+ @file 
+*/
+#include "authcommon_impl.h"
+#include "authserveripc.h"
+
+using namespace AuthServer;
+
+
+
+EXPORT_C CAuthParams* CAuthParams::NewL(TTimeIntervalSeconds aTimeout,
+							   TBool aClientKey,
+							   TUid  aClientSid,
+							   TBool aWithString,
+							   const TDesC& aClientMessage)
+	{
+	CAuthParams* self = new (ELeave)CAuthParams(aTimeout,
+												aClientKey,
+												aClientSid,
+												aWithString);
+	CleanupStack::PushL(self);
+	self->ConstructL(aClientMessage);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+void CAuthParams::ConstructL(const TDesC& aClientMessage)
+	{
+	iClientMessage = aClientMessage.AllocL();
+	}
+
+
+CAuthParams::CAuthParams(TTimeIntervalSeconds aTimeout,
+						TBool aClientKey,
+						TUid  aClientSid,
+						TBool aWithString):
+	iTimeout(aTimeout),
+	iClientKey(aClientKey),
+	iClientSid(aClientSid),
+	iWithString(aWithString)
+	{
+	
+	}
+	
+
+EXPORT_C void CAuthParams::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream.WriteInt32L(iClientMessage->Des().Length());
+	aStream.WriteInt32L(iTimeout.Int());
+	aStream.WriteInt8L(iClientKey);
+	aStream.WriteInt32L(iClientSid.iUid);
+	aStream.WriteInt8L(iWithString);
+
+	aStream << *iClientMessage;
+	}
+
+
+EXPORT_C void CAuthParams::InternalizeL(RReadStream& aStream)
+	{
+	TInt maxLength 	= aStream.ReadInt32L();
+	iTimeout       	= aStream.ReadInt32L();
+	iClientKey     	= aStream.ReadInt8L();
+	iClientSid.iUid	= aStream.ReadInt32L();
+	iWithString     = aStream.ReadInt8L();
+	
+	*iClientMessage = KNullDesC;
+	iClientMessage = iClientMessage->ReAllocL(maxLength);
+	TPtr ptr(iClientMessage->Des());
+	aStream >> ptr;
+	}
+
+
+CAuthParams::~CAuthParams()
+	{
+	delete iClientMessage;
+	iClientMessage = 0;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/common/authserveripc.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,139 @@
+/*
+* Copyright (c) 2005-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: 
+* Authserver - shared client/server definitions
+*
+*/
+
+
+/**
+ @file 
+ @internalComponent
+ @released
+*/
+
+#ifndef AUTHSERVERCLIENTSERVER_H
+#define AUTHSERVERCLIENTSERVER_H
+
+#include <e32std.h>
+
+namespace AuthServer
+{
+_LIT(KAuthServerName,"!AuthServer");    // name to connect to
+_LIT(KAuthServerImg, "AuthServer");		// DLL/EXE name
+_LIT(KAuthServerShortName, "AuthServer");	    // name used for identication when panicking 
+                                                // clients  - has to be less than 16 bytes
+
+const TInt KMaxAuthServerMessage	=100;
+const TInt KDefaultBufferSize		=2048;
+
+enum TAuthServerMessages
+    {
+	/////////////////////////////////////////////////////////////////
+	ERequireNoCapabilities = 0x100,
+
+	ECancel,                     		///< cancel current async operation
+	EPlugins,                     		///< return all plugins
+	EActivePlugins,               		///< return active plugins only
+	EPluginsByType,               		///< return plugins matching a type
+	EPluginsByTraining,           		///< return plugins matching a training
+								  		///< status
+	EDeauthenticate,              		///< deauthenticate the current user
+	EGetAuthPreferences,          		///< get a plugin type to plugin mapping
+	EListAuthAliases,	  				///< get the list of available authentication aliases.				
+	EResolveExpression,					///< resolve any alias definitions in the auth expression string.
+	
+	/////////////////////////////////////////////////////////////////
+	ERequireReadUserData = 0x200,
+	
+	EIdentityString,              ///< return the given identity's description 
+ 
+	/////////////////////////////////////////////////////////////////
+	ERequireWriteUserData = 0x300,
+
+	ESetIdentityString,           ///< set the description for an identity
+	ETrainPlugin,				  ///< train a plugin for an identity
+	EForgetPlugin,				  ///< forget identity training data
+
+	/////////////////////////////////////////////////////////////////
+	ERequireReadDeviceData = 0x400,
+
+	EIdentities,                  ///< return a list of identity numbers
+
+	/////////////////////////////////////////////////////////////////
+	ERequireWriteDeviceData = 0x500,
+	ERemoveIdentity,			  ///< remove an identity
+	ESetAuthPreferences,          ///< set a plugin type to plugin mapping
+	ESetPreferredPlugin,          ///< set the default plugin to use
+	EResetIdentity,				  ///< reset identity for all registered plugins
+	EResetIdentityByType,		  ///< reset identity for given plugin type
+	EResetIdentityByList,		  ///< reset identity for given list of plugins
+	
+	/////////////////////////////////////////////////////////////////
+	ERequireTrustedUi = 0x600,
+
+	ERegisterIdentity,            ///< register a new identity
+
+	/////////////////////////////////////////////////////////////////
+	ERequireReadDeviceAndUserData = 0x700,
+
+	EIdentitiesWithString,
+	
+	////////////////////////////////////////////////////////////////
+	ERequireCustomCheck = 0x800,
+	
+	EAuthenticate,
+	
+	ELastService = 0x900,
+	};
+
+/**
+ * Aggregates the parameters to the RAuthClient::AuthenticateL ipc call.
+ *
+ **/
+class CAuthParams : public CBase
+    {
+    
+public:
+	IMPORT_C static CAuthParams* NewL(TTimeIntervalSeconds aTimeout,
+									  TBool aClientKey,
+									  TUid  aClientSid,
+									  TBool aWithString,
+									  const TDesC& aClientMessage);
+	
+	
+	IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+	
+	IMPORT_C void InternalizeL(RReadStream& aStream);
+	
+	~CAuthParams();
+	
+private:
+	CAuthParams(TTimeIntervalSeconds aTimeout,
+				TBool aClientKey,
+				TUid  aClientSid,
+	    		TBool aWithString);
+		
+    void ConstructL(const TDesC& aClientMessage);
+    
+public:    
+	TTimeIntervalSeconds iTimeout;
+	TBool                iClientKey;
+	TUid				 iClientSid;
+	TBool                iWithString;
+	HBufC*				 iClientMessage;
+};
+
+} //namespace
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/common/authserverutil.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,153 @@
+/*
+* Copyright (c) 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: 
+* AuthServerUtil a utility class used by Authentication Server
+* implemented as static functions
+*
+*/
+
+
+/**
+ @file 
+ @internalComponent
+ @released
+*/
+
+#ifndef __AUTHSERVERUTIL_H__
+#define __AUTHSERVERUTIL_H__
+
+#include <f32file.h>
+#include <s32mem.h>
+#include "arrayutils.h"
+
+namespace AuthServer
+{
+
+class AuthServerUtil
+	{
+public:
+	// IPC helper methods
+	template<class T> 
+		static HBufC8* FlattenDataArrayLC(const RArray<T>& aArray);
+	template<class T> 
+		static void SendDataArrayL(const RMessage2& aMessage, const RArray<T>& aArray, TInt aIpcIndx);
+
+	template<class T> 
+		static HBufC8* FlattenDataPointerArrayLC(const RPointerArray<T>& aPointerArray);
+	template<class T> 
+		static void SendDataPointerArrayL(const RMessage2& aMessage, const RPointerArray<T>& aPointerArray, TInt aIpcIndx);
+	};
+
+// Templated function definitions must appear in the header file
+
+template<class T> 
+HBufC8* AuthServerUtil::FlattenDataArrayLC(const RArray<T>& aArray)
+	{
+	// dynamic buffer since we don't know in advance the size required
+    CBufFlat* tempBuffer = CBufFlat::NewL(KDefaultBufferSize);
+	CleanupStack::PushL(tempBuffer);
+	
+	RBufWriteStream stream(*tempBuffer);
+	CleanupClosePushL(stream);
+	
+	// externalise the array of objects		
+	ExternalizeArrayL(aArray, stream);
+	stream.CommitL();
+	
+	// Now, create an HBufC8 from the stream buf's length, and copy 
+	// the stream buffer into this descriptor
+	HBufC8* buffer = HBufC8::NewL(tempBuffer->Size());
+	TPtr8 ptr(buffer->Des());
+	tempBuffer->Read(0, ptr, tempBuffer->Size());
+	CleanupStack::PopAndDestroy(2, tempBuffer); // tempBuffer,  stream
+
+	CleanupStack::PushL(buffer);
+	return buffer;
+	}
+
+template<class T> 
+void AuthServerUtil::SendDataArrayL(const RMessage2& aMessage,
+					const RArray<T>& aArray,
+					TInt aIpcIndx)
+	{
+	HBufC8* buffer = FlattenDataArrayLC(aArray);
+    TPtr8 pbuffer(buffer->Des());
+    
+	if (aMessage.GetDesMaxLengthL(aIpcIndx) < buffer->Size())
+		{
+		TInt bufferSize = buffer->Size();
+		TPckgC<TInt> bufferSizePackage(bufferSize);
+		aMessage.WriteL(aIpcIndx, bufferSizePackage);
+		aMessage.Complete(KErrOverflow);
+		}
+	else
+		{
+		aMessage.WriteL(aIpcIndx, *buffer);
+		aMessage.Complete(KErrNone);
+		}
+	
+	CleanupStack::PopAndDestroy(buffer);
+	}	
+
+template<class T> 
+HBufC8* AuthServerUtil::FlattenDataPointerArrayLC(const RPointerArray<T>& aPointerArray)
+	{
+	// dynamic buffer since we don't know in advance the size required
+    CBufFlat* tempBuffer = CBufFlat::NewL(KDefaultBufferSize);
+	CleanupStack::PushL(tempBuffer);
+	
+	RBufWriteStream stream(*tempBuffer);
+	CleanupClosePushL(stream);
+	
+	// externalise the pointer array		
+	ExternalizePointerArrayL(aPointerArray, stream);
+	stream.CommitL();
+	
+	// Create an HBufC8 from the stream buf's length, and copy 
+	// the stream buffer into this descriptor
+	HBufC8* buffer = HBufC8::NewL(tempBuffer->Size());
+	TPtr8 ptr(buffer->Des());
+	tempBuffer->Read(0, ptr, tempBuffer->Size());
+	CleanupStack::PopAndDestroy(2, tempBuffer); // tempBuffer, stream,
+	
+	CleanupStack::PushL(buffer);
+	return buffer;
+	}
+
+template<class T> 
+void AuthServerUtil::SendDataPointerArrayL(const RMessage2& aMessage,
+						   const RPointerArray<T>& aPointerArray,
+						   TInt aIpcIndx)
+	{
+	HBufC8* buffer = FlattenDataPointerArrayLC(aPointerArray);
+    TPtr8 pbuffer(buffer->Des());
+    
+	if (aMessage.GetDesMaxLengthL(aIpcIndx) < buffer->Size())
+		{
+		TInt bufferSize = buffer->Size();
+		TPckgC<TInt> bufferSizePackage(bufferSize);
+		aMessage.WriteL(aIpcIndx, bufferSizePackage);
+		aMessage.Complete(KErrOverflow);
+		}
+	else
+		{
+		aMessage.WriteL(aIpcIndx, *buffer);
+		aMessage.Complete(KErrNone);
+		}
+		
+	CleanupStack::PopAndDestroy(buffer);
+	}
+
+} // namespace
+#endif //__AUTHSERVERUTIL_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/common/idandstring.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,77 @@
+/*
+* Copyright (c) 2005-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: 
+* CIdAndString implementation
+*
+*/
+
+
+/**
+ @file 
+*/
+
+#include "authcommon_impl.h"
+#include "authserver/idandstring.h"
+
+using namespace AuthServer;
+
+EXPORT_C CIdAndString* CIdAndString::NewLC(TIdentityId aId, const TDesC& aString)
+	{
+	CIdAndString* me = new (ELeave) CIdAndString();
+	CleanupStack::PushL(me);
+	me->ConstructL(aId, aString);
+	return me;
+	}
+
+EXPORT_C void CIdAndString::ConstructL(TIdentityId aId, const TDesC& aString)
+    {
+    iId = aId;
+	iString = aString.AllocL();
+	}
+
+	
+EXPORT_C CIdAndString::~CIdAndString() { delete iString; }
+
+EXPORT_C CIdAndString* CIdAndString::NewLC(RReadStream& aStream)
+	    {
+		CIdAndString* me = new (ELeave) CIdAndString();
+		CleanupStack::PushL(me);
+		me->InternalizeL(aStream);
+		return me;
+		}
+EXPORT_C void CIdAndString::ExternalizeL(RWriteStream& aStream) const
+	    {
+		  aStream << iId;
+		  aStream << *iString;
+	    }
+
+void CIdAndString::InternalizeL(RReadStream& aStream) 
+	{
+	aStream >> iId;
+	if (iString)
+		{
+		delete iString;
+		iString = 0;
+		}
+	iString = HBufC::NewL(aStream,255);
+	}
+	
+EXPORT_C TIdentityId CIdAndString::Id() const
+  {
+  return iId;
+  }
+EXPORT_C HBufC* CIdAndString::String() const
+  {
+  return iString;
+  }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/common/identity.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,125 @@
+/*
+* Copyright (c) 2005-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: 
+* CIdentity implementation
+*
+*/
+
+
+/**
+ @file 
+*/
+
+#include "authcommon_impl.h"
+
+using namespace AuthServer;
+
+EXPORT_C CIdentity* CIdentity::NewL(TIdentityId aId,
+									CProtectionKey* aKey,
+									HBufC* aString)
+	{
+	CIdentity* me = CIdentity::NewLC(aId, aKey, aString);
+	CleanupStack::Pop();
+	return me;
+	} 
+
+EXPORT_C CIdentity* CIdentity::NewLC(TIdentityId aId,
+									 CProtectionKey* aKey,
+									 HBufC* aString)
+	{ 
+	CIdentity* me = new (ELeave) CIdentity(aId);
+	CleanupStack::PushL(me);
+	me->ConstructL(aKey, aString);
+	return me;
+	}
+
+void CIdentity::ConstructL(CProtectionKey* aKey,
+						   HBufC* aString)
+    {
+	iString = aString;
+	iKey = aKey;
+	}
+
+CIdentity::CIdentity(TIdentityId aId) 
+  : iId(aId)
+    {
+    }
+
+CIdentity::~CIdentity()
+	{
+	delete iKey;
+	delete iString;
+	}
+	
+/**
+ * Returns the id number for the identity.
+ *
+ * @return KUnknown if the identity of the device holder could not be
+ * determined.
+ **/
+EXPORT_C TIdentityId CIdentity::Id() const
+	{
+	return iId;
+	}
+
+/**
+ * Returns the protecion key associated with the returned identity. The
+ * key will only be valid if the identity is not unknown.
+ *
+ * @return the protection key of 
+ * the method specified to the RAuthClient::Authenticate method.
+ **/
+EXPORT_C const CProtectionKey& CIdentity::Key() const
+	{
+	return *iKey;
+	}
+
+/**
+ * Returns the string associated with the returned identity. The string will
+ * only be valid if a) the identity is not unknown and b) the identity was
+ * retrieved using the withString parameter of RAuthClient::AuthenticateL set
+ * to true. If this is not the case then an empty string is returned.
+ *
+ * @return the protection key of 
+ * the method specified to the RAuthClient::Authenticate method.
+ **/
+EXPORT_C TDesC& CIdentity::String() const
+	{
+	return *iString;
+	}
+
+EXPORT_C void CIdentity::ExternalizeL(RWriteStream& aWriteStream) const
+    {
+    aWriteStream.WriteInt32L(iId);
+    aWriteStream.WriteInt32L(iKey->KeyData().Length());
+    aWriteStream << iKey->KeyData();
+    aWriteStream<< *iString;
+    }
+ 
+EXPORT_C CIdentity* CIdentity::InternalizeL(RReadStream& aReadStream)
+    {
+    TIdentityId id;
+    id = aReadStream.ReadInt32L();
+    TInt keyLength = aReadStream.ReadInt32L();
+    HBufC8* keydata = HBufC8::NewLC(aReadStream, keyLength);
+    CProtectionKey* prot = CProtectionKey::NewL(keydata);
+    CleanupStack::Pop(keydata);
+	CleanupStack::PushL(prot);
+
+    HBufC* stringdata = HBufC::NewLC(aReadStream, KMaxDescLen );
+    CIdentity* identity = CIdentity::NewL(id, prot, stringdata);
+    CleanupStack::Pop(2, prot);
+	return identity; 
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/common/plugindesc.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,251 @@
+/*
+* Copyright (c) 2005-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: 
+* CPluginDesc class definition
+*
+*/
+
+
+/**
+ @file 
+*/
+
+#include "authcommon_impl.h"
+
+using namespace AuthServer;
+
+
+// -------- factory functions --------
+
+
+/**
+	Factory function allocates a new instance of CPluginDesc
+	from the supplied arguments.
+
+	The supplied values are arbitrary and need not correlate with
+	the actual plugins on the device.
+	
+	@param	aId				The plugin's ID.  This value is used
+							to specify the plugin in an authentication
+							expression.
+							actually available on the system.
+	@param	aName			The plugin's name.  The newly-created
+							description object allocates its own copy
+							of this name, so aName does not have to remain
+							in scope after the object has been created.
+	@param	aType			The plugin's type.
+	@param	aTrainingStatus	The plugin's training status.
+	@param	aMinEntropy		The plugin's minimum entropy as a percentage.
+	@param	aFalsePositiveRate	The plugin's false positive rate as a
+							percentage.
+	@param	aFalseNegativeRate	The plugin's false negative rate as a
+							percentage.
+ */
+EXPORT_C CPluginDesc* CPluginDesc::NewL(
+	TPluginId aId, const TDesC& aName,
+	TAuthPluginType aType, TAuthTrainingStatus aTrainingStatus,
+	TEntropy aMinEntropy, TPercentage aFalsePositiveRate,
+	TPercentage aFalseNegativeRate)
+
+	{
+	CPluginDesc* self = new(ELeave) CPluginDesc(
+		aId, aType, aTrainingStatus, aMinEntropy,
+		aFalsePositiveRate, aFalseNegativeRate);
+	
+	CleanupStack::PushL(self);
+	self->ConstructL(aName);
+	CleanupStack::Pop(self);
+	
+	return self;
+	}
+
+/**
+	Record supplied information in this new object,
+	See NewL for argument descriptions.
+	
+	@see NewL
+ */
+CPluginDesc::CPluginDesc(
+	TPluginId aId, TAuthPluginType aType,
+	TAuthTrainingStatus aTrainingStatus, TEntropy aMinEntropy,
+	TPercentage aFalsePositiveRate, TPercentage aFalseNegativeRate)
+:	iId(aId),
+	iType(aType),
+	iTrainingStatus(aTrainingStatus),
+	iMinEntropy(aMinEntropy),
+	iFalsePositiveRate(aFalsePositiveRate),
+	iFalseNegativeRate(aFalseNegativeRate)
+	{
+	// empty.
+	}
+
+
+/**
+	Allocate a copy of the supplied name.  The
+	copy is freed in the destructor.
+	
+	@param	aName			This plugin's name.
+ */
+void CPluginDesc::ConstructL(const TDesC& aName)
+	{
+	iName = aName.AllocL();
+	}
+
+
+/**
+	Free resources allocated in ConstructL.
+	
+	@see ConstructL
+ */
+CPluginDesc::~CPluginDesc()
+    {
+    delete iName;
+    }
+
+
+// -------- persistence --------
+
+/**
+	Recreate an instance of CPluginDesc from the supplied
+	stream.  On success the object is placed on the cleanup stack.
+	
+	@param	aIn				Stream containing persisted plugin
+							description.
+	@return					New instance of CPluginDesc, created
+							from information in the supplied stream.
+ */
+EXPORT_C CPluginDesc* CPluginDesc::NewLC(RReadStream& aIn)
+	{
+	CPluginDesc* self = new(ELeave) CPluginDesc;
+	CleanupStack::PushL(self);
+	self->InternalizeL(aIn);
+	return self;
+	}
+
+/**
+	Initialize this object from the supplied stream.
+	This function is used to copy plugin descriptions
+	across IPC boundaries.
+	
+	@param	aIn				Stream which contains externalized
+							plugin descriptor.
+	@see ExternalizeL
+ */
+void CPluginDesc::InternalizeL(RReadStream& aIn)
+	{
+	iId = aIn.ReadUint32L();
+	iName = HBufC::NewL(aIn, KMaxNameLength);
+	iType = static_cast<TAuthPluginType>(aIn.ReadUint32L());
+	iTrainingStatus = static_cast<TAuthTrainingStatus>(aIn.ReadUint32L());
+	iMinEntropy = aIn.ReadUint32L();
+	iFalsePositiveRate = aIn.ReadUint32L();
+	iFalseNegativeRate = aIn.ReadUint32L();
+	}
+
+
+/**
+	Write information about this object to the supplied stream
+	so it can be reconstructed later.
+	
+	This function is used to copy plugin descriptions
+	across IPC boundaries.
+	
+	@see InternalizeL
+ */
+EXPORT_C void CPluginDesc::ExternalizeL(RWriteStream& aOut) const
+	{
+	aOut << iId;
+	aOut << *iName;
+	aOut.WriteInt32L(iType);
+	aOut.WriteInt32L(iTrainingStatus);
+	aOut << iMinEntropy;
+	aOut << iFalsePositiveRate;
+	aOut << iFalseNegativeRate;
+	}
+
+
+// -------- accessors --------
+
+    
+/**
+ * The plugin id.
+ * @return The plugin id
+ **/
+EXPORT_C TPluginId CPluginDesc::Id() const
+  {
+  return iId;
+  }
+
+/**
+ * The plugin name.
+ *
+ * @return The plugin name, ownership of the returned pointer remains the
+ * plugin description
+ **/
+EXPORT_C const TDesC* CPluginDesc::Name() const
+  {
+  return iName;
+  }
+
+/**
+ * The plugin type.
+ * @return the plugin type
+ **/
+EXPORT_C TAuthPluginType CPluginDesc::Type() const
+  {
+  return iType;
+  }
+	
+/**
+ * Indicates whether the plugin is trained for none, some or all known
+ * identities.
+ *
+ * @return the training status
+ **/
+EXPORT_C TAuthTrainingStatus CPluginDesc::TrainingStatus() const
+  {
+  return iTrainingStatus;
+  }
+
+/**
+ * How many unique identities the plugin supports.
+ * @return The minumum entropy provided by the plugin.
+ **/
+EXPORT_C TEntropy CPluginDesc::MinEntropy() const
+  {
+  return iMinEntropy;
+  }
+	
+/**
+ * The percentage of times an device holder is falsely identified as an
+ * known identity.
+ *
+ * @return The false positive rate of the plugin
+ **/
+EXPORT_C TPercentage CPluginDesc::FalsePositiveRate() const
+  {
+  return iFalsePositiveRate;
+  }
+
+/**
+ * The percentage of times a known identity is not identified. 
+ *
+ * @return The false negative rate of the plugin.
+ **/
+EXPORT_C TPercentage CPluginDesc::FalseNegativeRate() const
+  {
+  return iFalseNegativeRate;
+  }
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/common/protectionkey.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,164 @@
+/*
+* Copyright (c) 2005-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: 
+* CProtectionKey implementation
+*
+*/
+
+
+/**
+ @file 
+*/
+
+#include "authcommon_impl.h"
+#include <hash.h>
+
+using namespace AuthServer;
+
+/**
+ * Generate a new key upon construction
+ * @param aKeySize the length of the key in bits.  
+ **/
+EXPORT_C CProtectionKey* CProtectionKey::NewL(TInt aKeySize)
+	{
+	CProtectionKey* key = NewLC(aKeySize);
+	CleanupStack::Pop(key);
+	return key;
+	}
+/**
+ * Generate a new key upon construction
+ * @param aKeySize the length of the key in bits.  
+ **/
+EXPORT_C CProtectionKey* CProtectionKey::NewLC(TInt aKeySize)
+	{
+	CProtectionKey* key = new (ELeave) CProtectionKey();
+	CleanupStack::PushL(key);
+	key->ConstructL(aKeySize);
+	return key;
+	}
+
+/**
+ * Creates a new key, passing in the key data. Should
+ * really only be called by a CTransientKey::EncryptL. The new object
+ * assumes ownership of the data.
+ *
+ * @param aKeyData the data to use as the key
+ **/
+EXPORT_C CProtectionKey* CProtectionKey::NewL(HBufC8* aKeyData)
+	{
+	CProtectionKey*  key =
+	  CProtectionKey::NewLC(aKeyData);
+	CleanupStack::Pop(key);
+	return key;
+	}
+
+/**
+ * Creates a new key, passing in the key data. Should
+ * really only be called by a CTransientKey::EncryptL. The new object
+ * assumes ownership of the data.
+ *
+ * @param aKeyData the data to use as the key
+ **/
+EXPORT_C CProtectionKey* CProtectionKey::NewLC(HBufC8* aKeyData)
+	{
+	CProtectionKey*  key = new (ELeave) CProtectionKey();
+	CleanupStack::PushL(key);
+	key->ConstructL(aKeyData);
+	return key;
+	}
+/**
+ * Constructor
+ */
+CProtectionKey::CProtectionKey()
+	{
+	}
+
+/**
+ * Creates a new random key of aKeySize
+ * @param aKeySize the size of the key to generate
+ **/
+void CProtectionKey::ConstructL(TInt aKeySize)
+	{
+	iKeyData = HBufC8::NewMaxL(aKeySize);
+	TPtr8 data = iKeyData->Des();
+	TRandom::RandomL(data);
+	}
+
+/**
+ * Deletes the keydata.
+ **/
+CProtectionKey::~CProtectionKey()
+	{
+	delete iKeyData;
+	}
+
+
+/**
+ * Creates a new protection key generated using a combination of this key
+ * and the client UID. Ownership of the returned object is passed to the 
+ * caller.
+ *
+ * @param aClientUid the client uid to use in the generation process.
+ *
+ * @return a new heap allocated protection key 
+ **/
+EXPORT_C CProtectionKey* CProtectionKey::ClientKeyL(TInt aClientUid) const
+	{
+	CSHA1* sha1 = CSHA1::NewL();
+	CleanupStack::PushL(sha1);
+
+	TPckg<TIdentityId> idPckg(aClientUid);
+	
+	sha1->Update(idPckg);
+	sha1->Update(*iKeyData);
+
+	TInt keyLength = iKeyData->Length();
+	
+	HBufC8* newKey = HBufC8::NewLC(keyLength);
+
+	TInt remaining = keyLength;
+	do
+	  {
+		newKey->Des().Append(sha1->Hash(idPckg).Left(remaining));
+		remaining = keyLength - newKey->Length(); 
+	  } while ( remaining > 0);
+		  
+	CProtectionKey* key = NewL(newKey);
+	CleanupStack::Pop(newKey);
+	CleanupStack::PopAndDestroy(sha1);
+	return key;
+	}
+	
+/**
+ * Returns a descriptor to the key data for use in encryption and 
+ * decryption methods. 
+ *
+ * @return a descripter pointing to the key data. 
+ **/
+EXPORT_C TPtrC8 CProtectionKey::KeyData() const
+    {
+	return *iKeyData;
+    }
+
+/**
+ * Constructs the key using supplied data.
+ **/
+void CProtectionKey::ConstructL(HBufC8* aKeyData)
+	{
+	__ASSERT_DEBUG(((iKeyData == 0) &&
+				   (aKeyData != 0)),
+					User::Leave(KErrArgument));
+	iKeyData = aKeyData;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/server/authdb.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,937 @@
+/*
+* Copyright (c) 2005-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: 
+* CAuthDb Authentication server data store implementation
+*
+*/
+
+
+/**
+ @file 
+*/
+
+#include "authserver_impl.h"
+
+using namespace AuthServer;
+
+// The number of decimal digits needed to represent a 32 bit unsigned integer
+const TInt KUint32Digits = 10;
+
+// -------- DB helper functions --------
+
+
+static void RollbackDb(TAny* aPtr)
+/**
+	Implements the TCleanupOperation prototype.  This
+	function is used to rollback a database transaction
+	if a leave occurs before it is committed.
+	
+	@param	aPtr			Pointer to RDbDatabase object
+							to roll back.
+	@see CleanupRollbackPushL
+ */
+	{
+	RDbDatabase* db = static_cast<RDbDatabase*>(aPtr);
+	if (db->InTransaction())
+		db->Rollback();
+	}
+
+
+inline void CleanupRollbackPushL(RDbDatabase& aDb)
+/**
+	Puts the supplied database on the cleanup stack.
+	The database is rolled back if a leave occurs.
+	
+	If a leave does not occur then the supplied database
+	should be committed.  Do not call CleanupStack::PopAndDestroy
+	to delete this object.
+	
+	@param	aDb				Database to roll back if
+							a leave occurs.
+ */
+	{
+	CleanupStack::PushL(TCleanupItem(RollbackDb, &aDb));
+	}
+
+
+static void StartTransactionLC(RDbDatabase& aDb)
+/**
+	Helper function starts a database transaction and
+	puts a rollback cleanup item on the cleanup stack.
+	
+	@param	aDb				Database to start transaction on.
+	@see CommitTransactionLD
+ */
+	{
+	User::LeaveIfError(aDb.Begin());
+	CleanupRollbackPushL(aDb);
+	}
+
+
+static void CommitTransactionLD(RDbDatabase& aDb)
+/**
+	Complements StartTransactionLC by removing the
+	the rollback cleanup item from the cleanup stack
+	and committing the database.
+	
+	@see StartTransactionLC
+ */
+	{
+	CleanupStack::Pop(&aDb);
+	User::LeaveIfError(aDb.Commit());
+	}
+
+
+// -------- factory functions --------
+
+
+CAuthDb2* CAuthDb2::NewL(RFs& aFs)
+/**
+	Factory function allocates a new instance of CAuthDb.
+	The database file is created if it does not already exist.
+	
+	@return					New instance of CAuthDb.
+ */
+	{
+	CAuthDb2* self = CAuthDb2::NewLC(aFs);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+CAuthDb2* CAuthDb2::NewLC(RFs& aFs)
+/**
+	Factory function allocates new instance of CAuthDb2,
+	putting it on the cleanup stack.  The database file
+	is created if it does not already exist.
+	
+	@return					New instance of CAuthDb.
+ */
+	{
+	CAuthDb2* self = new(ELeave) CAuthDb2;
+	CleanupStack::PushL(self);
+	self->ConstructL(aFs);
+	return self;
+	}
+
+
+void CAuthDb2::ConstructL(RFs& aFs)
+/**
+	This second-phase constructor opens the
+	database file, creating it if it does not
+	already exist.
+ */
+	{
+	TInt r;
+	TFileName dbName(KDbName);
+	dbName[0] = RFs::GetSystemDriveChar();
+
+	r = OpenDbFileL(aFs, dbName);
+	
+	if (r == KErrNone)
+		{
+		if (! iAuthDbFile.IsDamaged() || iAuthDbFile.Recover() == KErrNone)
+			return;
+		}
+	
+	User::LeaveIfError(iAuthDbFile.Replace(aFs, dbName));
+	iIsDbOpen = ETrue;
+	StartTransactionLC(iAuthDbFile);
+	
+	// These commands are stored as narrow instead of wide
+	// text to save c. 500 bytes in decompressed exe size.
+	// The non-XIP EXE size is almost the same because DEFLATE
+	// is used on the ELF file.
+	
+	static const TText8*const cmds[] =
+		{
+		_S8("CREATE TABLE Identities (idName COUNTER, IdentityId UNSIGNED INTEGER NOT NULL, Description VARCHAR(255) NOT NULL)"),
+		_S8("CREATE UNIQUE INDEX idIndex ON Identities (idName)"),
+		_S8("CREATE UNIQUE INDEX identityIdx ON Identities (IdentityId DESC)"),
+		_S8("CREATE TABLE Prefs (PluginType UNSIGNED INTEGER NOT NULL, PluginId UNSIGNED INTEGER NOT NULL)"),
+		_S8("CREATE UNIQUE INDEX typeIdx ON Prefs (PluginType ASC)"),
+		_S8("CREATE TABLE TrainedPlugins (IdentityId UNSIGNED INTEGER NOT NULL, PluginId UNSIGNED INTEGER NOT NULL, TransientKey LONG VARBINARY NOT NULL)"),
+		_S8("CREATE UNIQUE INDEX identityPluginIdx ON TrainedPlugins (IdentityId DESC, PluginId ASC)")
+		};
+	
+	const TInt elemCount = sizeof(cmds) / sizeof(cmds[0]);
+	TBuf<140> cmd;
+	for (TInt i = 0; i < elemCount; ++i)
+		{
+		TPtrC8 cmd8(cmds[i]);
+		cmd.Copy(cmd8);
+		User::LeaveIfError(iAuthDbFile.Execute(cmd));
+		}
+
+	CommitTransactionLD(iAuthDbFile);
+	}
+
+
+CAuthDb2::~CAuthDb2()
+/**
+	Close the database file used by this object.
+ */
+	{
+	CloseDbFile();
+	}
+
+TInt CAuthDb2::OpenDbFileL(RFs& aFs, const TFileName& aDbName)
+	{
+	
+	TInt r(0);
+	if(!iIsDbOpen)
+		{
+		r = iAuthDbFile.Open(aFs, aDbName);
+		if(KErrNone == r)
+			{
+			iIsDbOpen = ETrue;
+			}
+		else if (KErrNotFound != r)
+			{
+			User::Leave(r);
+			}
+		}
+	return r;
+	}
+
+void CAuthDb2::CloseDbFile()
+	{
+	if(iIsDbOpen)
+		{
+		RollbackDb(&iAuthDbFile);
+		if(iAuthDbFile.IsDamaged())
+			{
+			iAuthDbFile.Recover();
+			}
+		iAuthDbFile.Close();
+		iIsDbOpen = EFalse;
+		}
+	}
+
+// -------- identities --------
+
+
+void CAuthDb2::AddIdentityWithTrainedPluginL(
+	TIdentityId aIdentityId, const TDesC& aDesc,
+	const CTransientKeyInfo& aTransKeyInfo)
+/**
+	Adds an identity and trains a plugin for it in a single
+	atomic operation.
+	
+	@param	aIdentityId		New identity.
+	@param	aDesc			Identity's description.  This must
+							have no more than KMaxDescLen characters.
+	@param	aTransKeyInfo	A transient key which trains this identity
+							for a plugin.
+	@leave	KErrAuthServIdentityAlreadyExists  The supplied identity
+							is already in the database.
+ */
+	{
+	StartTransactionLC(iAuthDbFile);
+	
+	AddIdentityL(aIdentityId, aDesc);
+	
+	SetTrainedPluginL(aIdentityId, aTransKeyInfo.PluginId(), aTransKeyInfo);
+	
+	CommitTransactionLD(iAuthDbFile);
+	}
+
+
+void CAuthDb2::AddIdentityL(TIdentityId aIdentityId, const TDesC& aDesc)
+/**
+	Add the supplied identity to the database.
+	
+	@param	aIdentityId		New identity.
+	@param	aDesc			Identity's description.  This must
+							have no more than KMaxDescLen characters.
+	@leave	KErrAuthServDescTooLong The supplied description is more than
+							255 characters.
+	@leave	KErrAuthServIdentityAlreadyExists  The supplied identity
+							is already in the database.
+ */
+	{
+	if (aDesc.Length() > KMaxDescLen)
+		User::Leave(KErrAuthServDescTooLong);
+
+	RDbTable table;
+	
+	// EUpdatable instead of EInsertOnly so can navigate to any
+	// existing row.
+	if (FindIdentityLC(table, RDbView::EUpdatable, aIdentityId))
+		User::Leave(KErrAuthServIdentityAlreadyExists);
+	
+	table.InsertL();		// start automatic transaction
+	table.SetColL(KIdentitiesIdentityIdCol, aIdentityId);
+	table.SetColL(KIdentitiesDescCol, aDesc);
+	table.PutL();			// end automatic transaction
+	
+	CleanupStack::PopAndDestroy(&table);
+	}
+
+
+void CAuthDb2::RemoveIdentityL(TIdentityId aIdentityId)
+/**
+	Remove the supplied identity from the auth server's database.
+	Any trained entries for the supplied identity are also removed.
+	All updates to the database happen within a single transaction.
+
+	@param	aIdentityId		Identity to remove from database;
+	@leave	KErrAuthServIdentityNotFound The supplied identity could
+							not be found in the database.
+ */
+	{
+	StartTransactionLC(iAuthDbFile);
+	
+	RDbTable table;
+	FindExistingIdentityLC(table, RDbView::EUpdatable, aIdentityId);
+	table.DeleteL();
+	CleanupStack::PopAndDestroy(&table);
+
+	// remove each training record for this identity
+	_LIT(KDelTrainFmt, "DELETE FROM TrainedPlugins WHERE IdentityId=%u");
+	TBuf<(46 - 2) + 10> bufCmd;
+	bufCmd.Format(KDelTrainFmt, aIdentityId);
+	iAuthDbFile.Execute(bufCmd);
+	
+	CommitTransactionLD(iAuthDbFile);
+	}
+
+
+TInt CAuthDb2::NumIdentitiesL() 
+ /**
+	Retrieve the number of identities in the database.
+	@return the number of identities in the database.
+  */
+	{
+	TInt result = 0;
+	RDbTable table;
+	OpenTableLC(table, KIdentitiesTableName, RDbRowSet::EReadOnly, KIdentitiesIndex);
+	result = table.CountL();
+	CleanupStack::PopAndDestroy(&table);
+	return result;
+	}
+  
+void CAuthDb2::IdentitiesL(RArray<TIdentityId>& aResults)
+/**
+	Populate the supplied array with the currently
+	registered identities.
+	
+	@param	aResults		On success this array is populated
+							with the currently registered identities.
+							Any items which were in the array when
+							this function is called are removed.  On
+							failure this array is emptied so the caller
+							does not have to place it on the cleanup stack.
+ */
+	{
+	aResults.Reset();
+	CleanupClosePushL(aResults);
+	
+	RDbTable table;
+	OpenTableLC(table, KIdentitiesTableName, RDbRowSet::EReadOnly, KIdIndexNum);
+	while (table.NextL())
+		{
+		table.GetL();
+		aResults.AppendL(table.ColUint32(KIdentitiesIdentityIdCol));
+		}
+	
+	CleanupStack::PopAndDestroy(&table);
+	CleanupStack::Pop(&aResults);
+	}
+
+void CAuthDb2::IdentitiesWithDescriptionL(RIdAndStringArray& aList)
+/**
+	Populate the supplied array with the currently
+	registered identities and descriptions.
+	
+	@param	aList   		On success this array is populated
+							with the currently registered identities.
+							Any items which were in the array when
+							this function is called are removed.  On
+							failure this array is emptied so the caller
+							does not have to place it on the cleanup stack.
+ */
+	{
+	aList.Reset();
+	CleanupClosePushL(aList);
+	
+	RDbTable table;
+	OpenTableLC(table, KIdentitiesTableName, RDbRowSet::EReadOnly, KIdentitiesIndex);
+	while (table.NextL())
+		{
+		table.GetL();
+		CIdAndString* id =
+		  CIdAndString::NewLC(table.ColUint32(KIdentitiesIdentityIdCol),
+							  table.ColDes(KIdentitiesDescCol));
+		aList.AppendL(id);
+		CleanupStack::Pop(id);
+		}
+	
+	CleanupStack::PopAndDestroy(&table);
+	CleanupStack::Pop(&aList);
+	}
+
+HBufC* CAuthDb2::DescriptionL(TIdentityId aIdentityId)
+/**
+	Allocate a descriptor containing the supplied identity's
+	description.
+	
+	@param	aIdentityId		Identity whose description is returned.
+	@return					Newly-allocated descriptor containing the
+							identity's description.  The client must
+							free this object.
+	@leave	KErrAuthServIdentityNotFound The supplied identity could
+							not be found in the database.
+ */
+	{
+	RDbTable table;
+	FindExistingIdentityLC(table, RDbView::EReadOnly, aIdentityId);
+	
+	table.GetL();
+	HBufC* retDesc = table.ColDes(KIdentitiesDescCol).AllocL();
+	
+	CleanupStack::PopAndDestroy(&table);
+	return retDesc;
+	}
+
+
+
+void CAuthDb2::SetDescriptionL(TIdentityId aIdentityId, const TDesC& aDesc)
+/**
+	Update an identity's description.
+	
+	@param	aIdentityId		Identity to update.
+	@param	aDesc			New description text.  This must have
+							no more than KMaxDescLen characters.
+	@leave	KErrAuthServIdentityNotFound The supplied identity could
+							not be found in the database.
+ */
+	{
+	if (aDesc.Length() > KMaxDescLen)
+		User::Leave(KErrAuthServDescTooLong);
+	
+	RDbTable table;
+	FindExistingIdentityLC(table, RDbView::EUpdatable, aIdentityId);
+	
+	table.UpdateL();			// start automatic transaction
+	table.SetColL(KIdentitiesDescCol, aDesc);
+	table.PutL();				// end automatic transaction
+	
+	CleanupStack::PopAndDestroy(&table);
+	}
+
+
+void CAuthDb2::FindExistingIdentityLC(
+	RDbTable& aTable, RDbRowSet::TAccess aAccess, TIdentityId aIdentityId)
+/**
+	Find the supplied identity and navigate to it.
+	On success, the table handle is on the cleanup stack.
+	
+	@param	aTable			Caller's table handle.
+	@param	aAccess			Mode in which to open the handle.
+	@param	aIdentityId		Identity to navigate to.
+	@leave	KErrAuthServIdentityNotFound The supplied identity could
+							not be found.
+ */
+	{
+	TBool found = FindIdentityLC(aTable, aAccess, aIdentityId);
+	if (! found)
+		User::Leave(KErrAuthServIdentityNotFound);
+	}
+
+
+TBool CAuthDb2::FindIdentityLC(RDbTable& aTable, RDbRowSet::TAccess aAccess, TIdentityId aIdentityId)
+/**
+	Navigate to the supplied identity in the Identities table.
+	On success, the table handle is on the cleanup stack.
+	
+	@param	aTable			Caller's table handle.
+	@param	aAccess			Mode in which to open the table.
+	@param	aIdentityId		Identity to navigate to.
+	@return					Zero if could not find identity in table;
+							Non-zero otherwise.
+ */
+	{
+	TBool found = OpenTableAndNavigateLC(
+		aTable, KIdentitiesTableName, aAccess, KIdentitiesIndex, aIdentityId);
+
+	return found;
+	}
+
+
+// -------- plugins --------
+
+TInt CAuthDb2::NumTrainedPluginsL(TIdentityId aId)
+/**
+    Retrieve the number of trained plugins for the specified id.
+    
+    @param aId the identity for whom to retrieve the number of trained plugins.
+    @return the number of trained plugins for the specified id.
+ */
+	{
+	_LIT(KGetTrainedFmt, "SELECT IdentityId FROM TrainedPlugins WHERE IdentityId=%u");
+	TBuf<(57 - 2) + 10> bufCmd;
+	bufCmd.Format(KGetTrainedFmt, aId);
+	
+	TDbQuery q(bufCmd);
+	RDbView viewTp;
+	CleanupClosePushL(viewTp);
+	User::LeaveIfError(viewTp.Prepare(iAuthDbFile, q));
+	User::LeaveIfError(viewTp.EvaluateAll());
+	TInt trainedCount = viewTp.CountL();
+	CleanupStack::PopAndDestroy(&viewTp);
+
+	return trainedCount;
+	}
+
+/**
+	Returns list of plugins that are trained for the given identity
+
+	@param	aIdentityId		The identity for whom to retrieve the list of trained plugins.
+	@param 	aTrainedPlugins	The array to fill the returned plugin ids.
+*/
+void CAuthDb2::TrainedPluginsListL(TIdentityId aIdentityId, RArray<TPluginId>& aTrainedPlugins)
+	{
+	_LIT(KGetTrainedFmt, "SELECT PluginId FROM TrainedPlugins WHERE IdentityId=%u");
+	RBuf queryBuf;
+	CleanupClosePushL(queryBuf);
+	queryBuf.CreateL(KGetTrainedFmt().Length() + KUint32Digits);
+	queryBuf.Format(KGetTrainedFmt, aIdentityId);
+
+	TDbQuery query(queryBuf);
+	RDbView viewTp;
+	CleanupClosePushL(viewTp);
+	User::LeaveIfError(viewTp.Prepare(iAuthDbFile, query));
+	User::LeaveIfError(viewTp.EvaluateAll());
+
+	if (viewTp.FirstL())
+		{
+		do
+			{
+			viewTp.GetL();
+			aTrainedPlugins.AppendL(viewTp.ColUint32(1));
+			}
+		while (viewTp.NextL());
+		}
+	CleanupStack::PopAndDestroy(2, &queryBuf); // viewTp
+	}
+
+TAuthTrainingStatus CAuthDb2::PluginStatusL(TPluginId aPluginId)
+/**
+	Return the supplied plugin's training status.
+
+		EAuthUntrained			No identities have been trained for this plugin.
+		EAuthTrained			Some (but not all) identities have been trained for this plugin
+		EAuthFullyTrained		All identities have been trained for this plugin.
+	
+	@param	aPluginId		Plugin whose status should be retrieved.
+	@return					The plugin's training status.
+ */
+	{
+	// get number of identities trained for this plugin
+	
+	// This involves filtering all trainings for this plugin
+	// from the TrainedPlugins table.  For small numbers of users
+	// it is simpler to do this; for large numbers of users
+	// (registered identities) it may be better to maintain another
+	// table which matches each plugin against its training count.
+
+	_LIT(KGetTrainedFmt, "SELECT IdentityId FROM TrainedPlugins WHERE PluginId=%u");
+	TBuf<(55 - 2) + 10> bufCmd;
+	bufCmd.Format(KGetTrainedFmt, aPluginId);
+	
+	TDbQuery q(bufCmd);
+	RDbView viewTp;
+	CleanupClosePushL(viewTp);
+	User::LeaveIfError(viewTp.Prepare(iAuthDbFile, q));
+	User::LeaveIfError(viewTp.EvaluateAll());
+	TInt trainCount = viewTp.CountL();
+	CleanupStack::PopAndDestroy(&viewTp);
+	
+	if (trainCount == 0)
+		return EAuthUntrained;
+
+	// get total number of identities in the database
+	RDbTable tableId;
+	OpenTableLC(tableId, KIdentitiesTableName, RDbRowSet::EReadOnly, KIdentitiesIndex);
+	TInt idCount = tableId.CountL();
+	CleanupStack::PopAndDestroy(&tableId);
+	
+	return (trainCount < idCount) ? EAuthTrained : EAuthFullyTrained;
+	}
+
+
+// -------- preferences --------
+
+
+void CAuthDb2::SetPreferredPluginL(TAuthPluginType aPluginType, TPluginId aPluginId)
+/**
+	Set the preferred plugin for the supplied plugin type.
+
+	If the type already has a preferred plugin type, its entry is
+	updated.  Otherwise, a new entry is created.
+
+	@param	aPluginType		Type of plugin to associate with a specific
+							plugin ID.
+	@param	aPluginId		Specific plugin to use for the plugin type.
+ */
+	{
+	RDbTable table;
+
+	// start automatic transaction
+	if (FindPrefLC(table, RDbRowSet::EUpdatable, aPluginType))
+		table.UpdateL();
+	else
+		table.InsertL();
+	
+	table.SetColL(KPrefsTypeCol, (TUint) aPluginType);
+	table.SetColL(KPrefsIdCol, (TUint) aPluginId);
+	table.PutL();			// end automatic transaction
+
+	CleanupStack::PopAndDestroy(&table);
+	}
+
+
+void CAuthDb2::ClearPreferredPluginL(TAuthPluginType aPluginType)
+/**
+	Remove and preferred plugin ID for the supplied plugin type.
+	
+	If the supplied plugin type does not have a preferred plugin
+	then the database is not modified.
+
+	@param	aPluginType		Type of plugin to remove from the
+							Prefs table.
+ */
+	{
+	RDbTable table;
+	if (FindPrefLC(table, RDbRowSet::EUpdatable, aPluginType))
+		table.DeleteL();
+
+	CleanupStack::PopAndDestroy(&table);
+	}
+
+
+TPluginId CAuthDb2::PreferredPluginL(TAuthPluginType aPluginType)
+/**
+	Retrieve the preferred plugin for the supplied plugin type.
+	If the plugin type does not have a preferred plugin this function
+	returns KUnknownPluginId.
+
+	@param	aPluginType		Plugin type to find preferred plugin for.
+	@return					Preferred plugin for aPluginType.  This is
+							KUnknownPluginId if the type does not
+							have a preferred plugin.
+ */
+	{
+	TPluginId pluginId;
+
+	RDbTable table;
+	if (! FindPrefLC(table, RDbRowSet::EReadOnly, aPluginType))
+		pluginId = KUnknownPluginId;
+	else
+		{
+		table.GetL();
+		pluginId = static_cast<TPluginId>(table.ColUint(KPrefsIdCol));
+		}
+
+	CleanupStack::PopAndDestroy(&table);
+	return pluginId;
+	}
+
+
+TBool CAuthDb2::FindPrefLC(RDbTable& aTable, RDbRowSet::TAccess aAccess, TAuthPluginType aPluginType)
+/**
+	Open the Prefs table and navigate to the supplied plugin type.
+	On success the table handle is placed on the cleanup stack.
+
+	@param	aTable			Table handle to open.  On success this
+							is placed on the cleanup stack.
+	@param	aAccess			Mode in which the table should be opened.
+	@param	aPluginType		Plugin type to navigate to.
+	@return					Zero if could not find plugin type;
+							Non-zero otherwise.
+ */
+	{
+	return OpenTableAndNavigateLC(aTable, KPrefsTableName, aAccess, KPrefsTypeIndex, aPluginType);
+	}
+
+
+// -------- trained plugins --------
+
+
+void CAuthDb2::SetTrainedPluginL(
+	TIdentityId aIdentityId, TPluginId aPluginId, const CTransientKeyInfo& aTransKeyInfo)
+/**
+	Sets the transient key for the supplied identity, plugin pair.
+
+	If the identity has already been trained for this plugin
+	then the existing record is replaced.
+
+	@param	aIdentityId		Identity to update.
+	@param	aPluginId		Plugin to associate with identity.
+	@param	aTransKeyInfo	The salt and encrypted protection key
+							for this identity / plugin pair.
+	@leave	KErrAuthServIdentityNotFound The supplied identity has
+							not been registered.
+ */
+	{
+	RDbTable table;
+
+	TBool update = FindTrainedPluginLC(table, RDbRowSet::EUpdatable, aIdentityId, aPluginId);
+	
+	// start automatic transaction
+	if (update)
+		{
+		table.UpdateL();
+		}
+	else
+		{
+		CheckIdentityRegisteredL(aIdentityId);
+		table.InsertL();
+		}
+
+	table.SetColL(KTpIdentityIdCol, (TUint) aIdentityId);
+	table.SetColL(KTpPluginIdCol, (TUint) aPluginId);
+	
+	RDbColWriteStream dbcws;
+	dbcws.OpenLC(table, KTpTransientKeyCol);
+	aTransKeyInfo.ExternalizeL(dbcws);
+	dbcws.CommitL();
+	CleanupStack::PopAndDestroy(&dbcws);
+	table.PutL();
+	
+	CleanupStack::PopAndDestroy(&table);
+	}
+
+
+void CAuthDb2::RemoveTrainedPluginL(TIdentityId aIdentityId, TPluginId aPluginId)
+/**
+	Remove the transient key info (i.e. the encrypted protection key
+	and its salt) for the supplied identity, plugin pair.
+
+	@param	aIdentityId		Identity which should be trained for
+							the supplied plugin.
+	@param	aPluginId		Plugin which should be trained for the
+							supplied identity.
+	@leave	KErrAuthServTrainingNotFound Attempted to remove an
+							identity, plugin pair which was not in the
+							trained plugins table.
+ */
+	{
+	RDbTable table;
+	TBool found = FindTrainedPluginLC(table, RDbRowSet::EUpdatable, aIdentityId, aPluginId);
+
+	if (! found)
+		User::Leave(KErrAuthServTrainingNotFound);
+
+	table.DeleteL();
+	CleanupStack::PopAndDestroy(&table);
+	}
+
+
+CTransientKeyInfo* CAuthDb2::KeyInfoL(TIdentityId aIdentity, TPluginId aPluginId)
+/**
+	Retrieve the transient key associated with the supplied identity,
+	plugin pair.
+
+	@param	aIdentity		Identity to search for.
+	@param	aPluginId		Plugin which should be registered
+							with the supplied identity.
+	@return					Transient key info, including encrypted
+							protection key, associated with identity,
+							plugin pair.
+	@leave KErrAuthServTrainingNotFound There was no transient key
+							information for the supplied identity,
+							plugin pair.
+ */
+	{
+	RDbTable table;
+	TBool found = FindTrainedPluginLC(table, RDbRowSet::EReadOnly, aIdentity, aPluginId);
+	if (! found)
+		User::Leave(KErrAuthServTrainingNotFound);
+
+	table.GetL();
+	RDbColReadStream dbcrs;
+	dbcrs.OpenLC(table, KTpTransientKeyCol);
+	CTransientKeyInfo* keyInfo = CTransientKeyInfo::NewL(dbcrs);
+
+	CleanupStack::PopAndDestroy(2, &table);		// dbcrs, table
+	return keyInfo;
+	}
+
+
+TBool CAuthDb2::FindTrainedPluginLC(
+	RDbTable& aTable, RDbRowSet::TAccess aAccess,
+	TIdentityId aIdentityId, TPluginId aPluginId)
+/**
+	Helper function for SetTrainedPluginL and ClearTrainedPluginL.
+	This function opens the TrainedPlugins table and navigates to
+	the supplied identity, plugin pair if they are present.
+
+	@param	aTable			Table handle to open.
+	@param	aAccess			Mode in which to open the table.
+	@param	aIdentityId		Identity to navigate to.
+	@param	aPluginId		Plugin to navigate to.
+	@return					Zero if could not navigate to the
+							identity, plugin ID pair; non-zero
+							otherwise.
+ */
+	{
+	OpenTableLC(aTable, KTpTableName, aAccess, KTpIndex);
+
+	TDbSeekMultiKey<2> dbsmk;
+	dbsmk.Add((TUint) aIdentityId);
+	dbsmk.Add((TUint) aPluginId);
+	return aTable.SeekL(dbsmk);
+	}
+
+
+// -------- helper functions --------
+
+
+TBool CAuthDb2::OpenTableAndNavigateLC(
+	RDbTable& aTable, const TDesC& aTableName, RDbRowSet::TAccess aAccess,
+	const TDesC& aIndexName, TUint aKey)
+/**
+	Open the described table and navigate to the identified row.
+
+	@param	aTable			Caller's table handle.  On success
+							this is placed on the cleanup stack.
+	@param	aTableName		Table to open in auth db.
+	@param	aAccess			Mode to open table in.
+	@param	aIndexName		Index to use for navigating.
+	@param	aKey			Key to find in database.
+	@return					Zero if could not find row in table;
+							Non-zero otherwise.
+ */
+	{
+	OpenTableLC(aTable, aTableName, aAccess, aIndexName);
+
+	TDbSeekKey seekKey((TUint)aKey);	// from TUint32
+	return aTable.SeekL(seekKey);
+	}
+
+
+void CAuthDb2::OpenTableLC(
+	RDbTable& aTable, const TDesC& aTableName,
+	RDbRowSet::TAccess aAccess, const TDesC& aIndexName)
+/**
+	Open the named table in the supplied access mode,
+	and use the index on it.
+
+	@param	aTable			Caller's table handle.  On success
+							this is placed on the cleanup stack.
+	@param	aTableName		Table to open in the authentication db.
+	@param	aAccess			Mode to open table in.
+	@param	aIndexName		Index to activate on table.
+ */
+	{
+	CleanupClosePushL(aTable);
+	User::LeaveIfError(aTable.Open(iAuthDbFile, aTableName, aAccess));
+
+	if (aAccess != RDbRowSet::EInsertOnly)
+		{
+		User::LeaveIfError(aTable.SetIndex(aIndexName));
+		}
+	}
+
+
+void CAuthDb2::CheckIdentityRegisteredL(TUint aIdentityId)
+/**
+	Checks if the supplied identity has been registered with
+	the database.  If not, it leaves with KErrAuthServIdentityNotFound.
+	
+	This function is used to validate arguments to other functions.
+	
+	@param	aIdentityId		Identity to search for.
+	@leave	KErrAuthServIdentityNotFound The supplied identity has not
+							been registered.
+ */
+	{
+	CheckItemRegisteredL(
+		KIdentitiesTableName, KIdentitiesIndex,
+		aIdentityId, KErrAuthServIdentityNotFound);
+	}
+
+
+void CAuthDb2::CheckItemRegisteredL(
+	const TDesC& aTableName, const TDesC& aIndexName,
+	TUint aValue, TInt aNotFoundError)
+/**
+	Helper function for CheckIdentityRegisteredL.
+	
+	@param	aTableName		Name of table to search.
+	@param	aIndexName		Name of index to use on table.
+	@param	aValue			Key value to search for.
+	@param	aNotFoundError	If the key value cannot be found
+		`					then leave with this value.
+ */
+ 	{
+	RDbTable table;
+	if (! OpenTableAndNavigateLC(table, aTableName, RDbRowSet::EReadOnly, aIndexName, aValue))
+		User::Leave(aNotFoundError);
+	CleanupStack::PopAndDestroy(&table);
+ 	}
+
+
+// -------- compaction --------
+
+
+const TInt KBlockSize = 512;
+const TInt KBlockMask = KBlockSize - 1;
+
+
+void CAuthDb2::CompactIfRequired()
+/**
+	Compacts the database file if compacting it would
+	recover at least one 512 byte block.
+	
+	This function does not report any error status
+	but, if the database is damaged, ConstructL will
+	attempt to repair it.
+ */
+	{
+	TInt r = iAuthDbFile.UpdateStats();
+	
+	if (r == KErrNone)
+		{
+		RDbDatabase::TSize sz = iAuthDbFile.Size();
+		
+		// approx used bytes - sz.iUsage is a percentage
+		TInt usedBytes = sz.iUsage * 100;
+		if ((usedBytes & ~KBlockMask) < (sz.iSize & ~KBlockMask))
+			/* ignore */ iAuthDbFile.Compact();
+		}
+	}
+
+TIdentityId CAuthDb2::DefaultIdentityL()
+/**
+ 	Return the default identity which is the first identity
+ 	in the table when indexed based on the order of insertion.
+*/
+	{
+	TIdentityId identity(0);
+	RDbTable table;	
+	OpenTableLC(table, KIdentitiesTableName, RDbRowSet::EReadOnly, KIdIndexNum);
+	
+	//Position the cursor on the first row and retrieve the Identity.
+	if (table.FirstL())
+		{
+		table.GetL();
+		identity = table.ColUint32(KIdentitiesIdentityIdCol);
+		}	
+		
+	CleanupStack::PopAndDestroy(&table);
+	return identity;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/server/authdb.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,159 @@
+/*
+* Copyright (c) 2005-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: 
+* CAuthDb Authentication server data store declaration
+*
+*/
+
+
+/**
+ @file 
+ @released
+ @internalComponent
+*/
+
+#ifndef AUTHDB_H
+#define AUTHDB_H
+
+#include <d32dbms.h>
+#include "authserver/authtypes.h"
+#include "authserver/idandstring.h"
+
+namespace AuthServer
+{
+
+class CTransientKeyInfo;
+
+NONSHARABLE_CLASS(CAuthDb2) : public CBase
+	{
+public:
+	static CAuthDb2* NewL(RFs& aFs);
+	static CAuthDb2* NewLC(RFs& aFs);
+	virtual ~CAuthDb2();
+	
+	// identities
+	TInt NumIdentitiesL();
+	void AddIdentityWithTrainedPluginL(
+		TIdentityId aIdentityId, const TDesC& aDesc,
+		const CTransientKeyInfo& aTransKeyInfo);
+	void AddIdentityL(TIdentityId aIdentityId, const TDesC& aDesc);
+	void RemoveIdentityL(TIdentityId aIdentityId);
+	void IdentitiesL(RArray<TIdentityId>& aResults);
+	HBufC* DescriptionL(TIdentityId aIdentityId);
+	void SetDescriptionL(TIdentityId aIdentityId, const TDesC& aDesc);
+	void IdentitiesWithDescriptionL(RIdAndStringArray& aList);
+	TIdentityId DefaultIdentityL();
+	// plugins
+	TInt NumPluginsL();
+	TInt NumTrainedPluginsL(TIdentityId aId);
+	// Returns list of plugins that are trained for the given identity
+	void TrainedPluginsListL(TIdentityId aIdentityId, RArray<TPluginId>& aTrainedPlugins);
+	TAuthTrainingStatus PluginStatusL(TPluginId aPluginId);
+
+	// preferences
+	void SetPreferredPluginL(TAuthPluginType aPluginType, TPluginId aPluginId);
+	void ClearPreferredPluginL(TAuthPluginType aPluginType);
+	TPluginId PreferredPluginL(TAuthPluginType aPluginType);
+
+	// trained plugins
+	void SetTrainedPluginL(
+		TIdentityId aIdentityId, TPluginId aPluginId, const CTransientKeyInfo& aTransKeyInfo);
+	void RemoveTrainedPluginL(TIdentityId aIdentityId, TPluginId aPluginId);
+	CTransientKeyInfo* KeyInfoL(TIdentityId aIdentity, TPluginId aPluginId);
+
+	void CompactIfRequired();
+	void CloseDbFile();
+	TInt OpenDbFileL(RFs& aFs, const TFileName& aDbName);
+	
+private:
+	void ConstructL(RFs& aFs);
+
+	void FindExistingIdentityLC(RDbTable& aTable, RDbRowSet::TAccess aAccess, TIdentityId aIdentityId);
+	TBool FindIdentityLC(RDbTable& aTable, RDbRowSet::TAccess aAccess, TIdentityId aIdentityId);
+
+	TBool FindPrefLC(RDbTable& aTable, RDbRowSet::TAccess aAccess, TAuthPluginType aPluginType);
+
+	TBool FindTrainedPluginLC(
+		RDbTable& aTable, RDbRowSet::TAccess aAccess,
+		TIdentityId aIdentityId, TPluginId aPluginId);
+
+	TBool OpenTableAndNavigateLC(
+		RDbTable& aTable, const TDesC& aTableName, RDbRowSet::TAccess aAccess,
+		const TDesC& aIndexName, TUint aKey);
+	void OpenTableLC(
+		RDbTable& aTable, const TDesC& aTableName,
+		RDbRowSet::TAccess aAccess, const TDesC& aIndexName);
+	void CheckIdentityRegisteredL(TUint aIdentityId);
+
+	void CheckItemRegisteredL(
+		const TDesC& aTableName, const TDesC& aIndexName,
+		TUint aValue, TInt aNotFoundError);
+	
+
+
+private:	
+	/**
+	 * The database file itself, used to persist identities
+	 * 	when the server is not in use.
+	 */
+	RDbNamedDatabase iAuthDbFile;
+	
+	/**
+	 * Keep track of whether the database is open or not.
+	 */
+	TBool iIsDbOpen;
+	
+	};
+
+
+// databases structure
+
+_LIT(KDbName, "!:\\private\\102740FC\\auth.db");
+
+/** Identities table name. */
+_LIT(KIdentitiesTableName, "Identities");
+/** Identities index number */
+_LIT(KIdentitiesIndex, "identityIdx");
+/** Identities index number.- Based on order of insertion */
+_LIT(KIdIndexNum, "idIndex");
+/** Identity column number in Identities table. */
+const TInt KIdentitiesIdentityIdCol = 2;
+/** Description column number in Identities table. */
+const TInt KIdentitiesDescCol = 3;
+
+/** Prefs table name. */
+_LIT(KPrefsTableName, "Prefs");
+/** Prefs index name. */
+_LIT(KPrefsTypeIndex, "typeIdx");
+
+/** Type column number in Prefs table. */
+const TInt KPrefsTypeCol = 1;
+/** PluginId column number is Prefs table. */
+const TInt KPrefsIdCol = 2;
+
+/** TrainedPlugins table name. */
+_LIT(KTpTableName, "TrainedPlugins");
+/** TrainedPlugins index name. */
+_LIT(KTpIndex, "identityPluginIdx");
+
+/** IdentityId column number in TrainedPlugins table. */
+const TInt KTpIdentityIdCol = 1;
+/** PluginId column number in TrainedPlugins table. */
+const TInt KTpPluginIdCol = 2;
+/** TransientKey column number in TrainedPlugins table. */
+const TInt KTpTransientKeyCol = 3;
+
+}	// namespace AuthServer
+
+#endif // AUTHDB_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/server/authmain.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2005-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: 
+* AuthServer startup code implementation
+*
+*/
+
+
+/**
+ @file 
+*/
+
+#include "authserver_impl.h"
+
+using namespace AuthServer;
+
+namespace
+{
+
+/**
+ * Perform all server initialisation, in particular creation of the
+ * scheduler and server and then run the scheduler
+ */
+static CScsServer* NewAuthServerLC()
+/**
+	This factory function is called by SCS.  It allocates
+	the server object and leaves it on the cleanup stack.
+
+	@return					New initialized instance of CScsTestServer.
+							On return this is on the cleanup stack.
+ */
+	{
+	return AuthServer::CAuthServer::NewLC();
+	}
+
+}
+
+/**
+ * Server process entry-point
+ **/
+TInt E32Main()
+	{
+	TInt err = StartScsServer(NewAuthServerLC);
+
+	/**
+     *  err can either be KErrNone (AuthServer is started successfully) or  
+     *  KErrAlreadyExists(AuthServer is currently running). Panic for all other
+     *  cases.
+	 **/
+		
+	__ASSERT_DEBUG(err == KErrNone || err == KErrAlreadyExists, User::Panic(KAuthServerShortName, err));
+	return err;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/server/authrepository.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,143 @@
+/*
+* Copyright (c) 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: 
+* authrepository - Central Repository methods implementation
+*
+*/
+
+
+/**
+ @file 
+*/
+
+#include "authrepository.h"
+#include "authserver_impl.h"
+
+using namespace AuthServer;
+
+CAuthRepository* CAuthRepository::NewL()
+	{
+	CAuthRepository* self = CAuthRepository::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+CAuthRepository* CAuthRepository::NewLC()
+	{
+	CAuthRepository* self = new (ELeave)CAuthRepository();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+void CAuthRepository::ConstructL()
+	{
+	iRepository = CRepository::NewL(KUidAuthServerRepository);
+	}
+
+
+CAuthRepository::~CAuthRepository()
+	{
+	delete iRepository;
+	}
+
+
+
+/**
+	Retrieves the default system wide plugin Id as defined in the 
+	central repository file
+
+
+	@leave	KErrArgument			If the default plugin is not
+									defined in the central repository 
+									file.
+									
+	@return  The retrieved Plugin Id from the repository is returned.								
+									
+ */
+
+TPluginId CAuthRepository::DefaultPluginL() const
+	{
+	//Read the default plugin value from the configuration file.
+	TInt defaultPlugin(0);
+	User::LeaveIfError(iRepository->Get(KAuthDefaultPlugin, defaultPlugin));
+ 	
+	//If the default plugin is not set.
+	if(defaultPlugin == 0)
+		{	
+		User::Leave(KErrArgument);
+		}
+	
+	return defaultPlugin;
+	
+	}
+
+
+/**
+	Retrieves the authentication alias as defined in the authserver's 
+	central repository file .
+	
+	@param	aAuthAliasList			An array to be populated with the
+									authentication alias as obtained 
+									from the authserver's central repository 
+									file.
+	@leave	KErrArgument			when the count of authentication aliases
+									in authserver's central repository file is
+									negative.
+	@leave	KErrNotFound			when there is no authentication aliases
+									defined in authserver's central repository file.
+ */
+ 
+ void CAuthRepository::ListAliasL(RPointerArray<HBufC>& aAuthAliasList)
+	{
+	TInt authStrengthAliasCount(0);
+ 	 
+	User::LeaveIfError(iRepository->Get(EAuthAliasesCount, authStrengthAliasCount));
+	
+	// leave if the count is a negative value.
+	if(authStrengthAliasCount < 0)
+		User::Leave(KErrArgument);
+	
+	// leave with KErrNotFound when the count is zero.
+	if(authStrengthAliasCount == 0)
+		User::Leave(KErrNotFound);
+	
+	for(TInt i = 0; i < authStrengthAliasCount; ++i)
+		{
+		HBufC* strengthAlias = HBufC::NewLC(KMaxDescLen);
+		TPtr value(strengthAlias->Des());
+		User::LeaveIfError(iRepository->Get(EAuthAliases+i, value));
+		aAuthAliasList.AppendL(strengthAlias);
+		CleanupStack::Pop(strengthAlias);
+		}
+	}
+ 
+
+ /**
+ 	Retrieves the authentication definition corresponding to the alias 
+ 	as defined in the authserver's central repository file .
+ 	
+ 	@param	aKey					The index of the authentication alias
+ 									in the central repository file.
+ 									zero.
+ 	
+ 	@param	aValue					The retrieved definition value for 
+ 									the alias.		
+  */
+
+ void CAuthRepository::GetAliasDefinitionL(TInt aKey, TDes16& aValue)
+	 {
+	 User::LeaveIfError(iRepository->Get(EAuthAliasesExpr+aKey, aValue));
+	 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/server/authserver.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,2011 @@
+/*
+* Copyright (c) 2005-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: 
+* CAuthServer implementation
+*
+*/
+
+
+/**
+ @file 
+*/
+
+#include <s32mem.h>
+#include <s32file.h>
+#include <ecom/ecom.h>
+#include <pbedata.h>
+#include <scs/cleanuputils.h>
+#include "authserver_impl.h"
+#include "authtransaction.h"
+#include "authserver/aspubsubdefs.h"
+#include "authserverutil.h"
+
+using namespace AuthServer;
+
+const TUint CAuthServer::iRangeCount = KPolicyRanges;
+
+const TInt CAuthServer::iRanges[KPolicyRanges] = 
+	{
+	0,
+	CScsServer::EBaseSession,
+	CScsServer::EBaseSession |ERequireNoCapabilities, 		   // accessible by all clients.
+	CScsServer::EBaseSession |ERequireReadUserData,		   	   // accessible by ReadUserData clients only.
+	CScsServer::EBaseSession |ERequireWriteUserData,	   	   // accessible by WriteUserData clients only.
+	CScsServer::EBaseSession |ERequireReadDeviceData, 	       // accessible by ReadDeviceData clients only.
+	CScsServer::EBaseSession |ERequireWriteDeviceData,         // accessible by WriteDeviceData clients only.
+	CScsServer::EBaseSession |ERequireTrustedUi,               // accessible by TrustedUi clients only.
+	CScsServer::EBaseSession |ERequireReadDeviceAndUserData,   // accessible by clients with both
+																// ReadUserData and ReadDeviceData.
+	CScsServer::EBaseSession |ERequireCustomCheck,		       // Require custom check.
+	CScsServer::EBaseSession |ELastService,
+	CScsServer::EBaseMustAllow     			                   // SCS Internal.
+	};
+
+const TUint8 CAuthServer::iElementsIndex[iRangeCount] = 
+	{
+	CPolicyServer::ENotSupported,
+	CPolicyServer::EAlwaysPass,
+	0,  // all clients can have access 
+	1,  // ReadUserData clients only
+	2,  // WriteUserData clients only
+	3,	// ReadDeviceData
+	4,  // WriteDeviceData
+	5,  // trusted ui
+	6,  // ReadUserData and ReadDeviceData
+	CPolicyServer::ECustomCheck,	// custom check
+	CPolicyServer::EAlwaysPass, 
+	CPolicyServer::EAlwaysPass, 
+	};
+
+const CPolicyServer::TPolicyElement CAuthServer::iPolicyElements[] = 
+	{
+	{_INIT_SECURITY_POLICY_C1(ECapability_None), CPolicyServer::EFailClient},
+	{_INIT_SECURITY_POLICY_C1(ECapabilityReadUserData), CPolicyServer::EFailClient},
+	{_INIT_SECURITY_POLICY_C1(ECapabilityWriteUserData), CPolicyServer::EFailClient},
+	{_INIT_SECURITY_POLICY_C1(ECapabilityReadDeviceData), CPolicyServer::EFailClient}, 
+	{_INIT_SECURITY_POLICY_C1(ECapabilityWriteDeviceData), CPolicyServer::EFailClient},
+	{_INIT_SECURITY_POLICY_C1(ECapabilityTrustedUI), CPolicyServer::EFailClient},
+	{_INIT_SECURITY_POLICY_C2(ECapabilityReadDeviceData, ECapabilityReadUserData), CPolicyServer::EFailClient},
+	};
+
+const CPolicyServer::TPolicy CAuthServer::iPolicy =
+	{
+		CPolicyServer::EAlwaysPass, // so that any client can connect	
+		iRangeCount,                                   
+		iRanges,
+		iElementsIndex,
+		iPolicyElements,
+	};
+
+_LIT_SECURITY_POLICY_S0(CAuthServer::iPropertyWritePolicy, KAuthServerSecureId.iUid);
+_LIT_SECURITY_POLICY_PASS(CAuthServer::iPropertyReadPolicy);
+
+
+inline CAuthServer::CAuthServer(CActive::TPriority aPriority)
+	:CScsServer(TVersion(1,0,0), iPolicy, aPriority)
+	{}
+	
+CAuthServer* CAuthServer::NewLC(CActive::TPriority aPriority)
+	{
+	CAuthServer* self = new(ELeave) CAuthServer(aPriority);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+void CAuthServer::ConstructL()
+    {
+    // Delay starting of shutdown timer till we finish construction since
+    // loading of ECOM plugins takes a while
+    CScsServer::ConstructL(0);
+    TInt r;
+    StartL(KAuthServerName);
+	r = iFs.Connect();
+    User::LeaveIfError(r);
+    r = iFs.CreatePrivatePath(RFs::GetSystemDrive());
+    User::LeaveIfError(r);
+
+    // Retrieve the key size to be used for protection keys
+	CPBEncryptElement* pbee = CPBEncryptElement::NewLC(_L(""));
+    iKeySize = pbee->EncryptionData().AuthData().Key().Size();
+    CleanupStack::PopAndDestroy(pbee);
+    iAuthRepository = CAuthRepository::NewL();
+	iAuthDb2 = CAuthDb2::NewL(iFs);
+	iPluginMgr  = CPluginMgr::NewL();
+    iPluginObserver = CPluginObserver::NewL(*iPluginMgr);
+    iEvaluator = CEvaluator::NewL(this,this);
+    iTrainingMgr = new (ELeave) CTrainingMgr(*iPluginMgr, *iAuthDb2, *iAuthRepository);
+	TUid clientSid = {0};
+	iParams = CAuthParams::NewL(0,
+								EFalse,
+								clientSid,
+								EFalse,
+								KNullDesC());
+    CreatePropertiesL();
+	FirstStartL();
+
+	// Construction complete, now start the shutdown timer
+	CScsServer::EnableShutdownTimerL(AuthServer::KDefaultShutdownDelay);
+    }
+    
+    
+CPolicyServer::TCustomResult CAuthServer::CustomSecurityCheckL(const RMessage2& aMessage, 
+	TInt& /*aAction*/, TSecurityInfo& aMissing)
+	{
+	TInt KAuthParams = 1; 
+	TInt paramsLen = aMessage.GetDesLength(KAuthParams);
+	
+	if(paramsLen != KErrBadDescriptor)
+		{
+		//Create a buffer.
+		HBufC8* buffer = HBufC8::NewLC(paramsLen);
+		TPtr8 bufDes(buffer->Des());
+		aMessage.ReadL(EIpcArgument1, bufDes);
+			
+		//Internalize the params object.
+		RDesReadStream readStream(*buffer);
+		CleanupClosePushL(readStream);
+		iParams->InternalizeL(readStream);
+		CleanupStack::PopAndDestroy(2, buffer);
+		}
+
+	TBool clientKey = iParams->iClientKey;
+	TBool withString = iParams->iWithString;
+	TInt clientSid = iParams->iClientSid.iUid;
+		
+	if((!clientKey || withString || ((clientSid != aMessage.SecureId()) && clientSid != 0 )) && !(aMessage.HasCapability(ECapabilityReadUserData)))
+		{
+		// Missing ReadUserData capability.
+		aMissing.iCaps.Set(ECapabilityReadUserData);
+		return CPolicyServer::EFail;
+		}	
+		
+	else
+		{
+		return CPolicyServer::EPass;	
+		}
+	}
+	
+/**
+ * Creates and initialises the two AuthServer properties -
+ * KUidAuthServerLastAuth and KUidAuthServerAuthChangeEvent.
+ *
+ **/
+void CAuthServer::CreatePropertiesL()
+	{
+	// KUidAuthServerLastAuth
+	TInt err1 = iAuthProperty.Define(KUidAuthServerLastAuth, RProperty::EText,
+									iPropertyReadPolicy, iPropertyWritePolicy,
+									sizeof(TLastAuth));
+
+	User::LeaveIfError(iAuthProperty.Attach(KAuthServerSecureId,
+											KUidAuthServerLastAuth));
+
+	
+	// KUidAuthServerAuthChangeEvent
+	TInt err2 = iAuthEventProperty.Define(KUidAuthServerAuthChangeEvent,
+									RProperty::EInt,
+									iPropertyReadPolicy,
+									iPropertyWritePolicy);
+	
+	User::LeaveIfError(iAuthEventProperty.Attach(KAuthServerSecureId,
+												 KUidAuthServerAuthChangeEvent));
+
+	if (err1 == KErrNone || err2 == KErrNone )
+		{
+		ClearPropertiesL();
+		}
+	}
+
+void CAuthServer::ClearPropertiesL()
+	{
+	TLastAuth lastAuth;
+	TPckg<TLastAuth> authPckg(lastAuth);
+	User::LeaveIfError(iAuthProperty.Set(authPckg));
+	User::LeaveIfError(iAuthEventProperty.Set(KUnknownIdentity));
+	}
+
+
+/**
+ * Checks the number of identities in the database and iff zero asks the
+ * training mgr to register the first identity.
+ *
+ * @leave KErrAuthServerCanNotCreateFirstId if the first identity cannot
+ * be created
+ **/
+void CAuthServer::FirstStartL()
+	{
+	TInt numIds = iAuthDb2->NumIdentitiesL();
+	if (numIds == 0)
+		{
+		TIdentityId id = 0;
+		TPckg<TIdentityId> idPkg(id);
+		TRandom::RandomL(idPkg);
+		
+		CProtectionKey* key = CProtectionKey::NewL(iKeySize);
+		if (!iTrainingMgr->RegisterFirstIdentityL(id, *key))
+			{
+			User::Panic(KAuthServerShortName, EPanicNoFirstStartPlugin);
+			}
+		}
+	}
+
+CAuthServer::~CAuthServer()
+	{
+	delete iAuthRepository;
+	delete iAuthTransaction;
+	
+	delete iTrainingMgr;
+	delete iLastIdentity;
+	delete iEvaluator;
+	delete iPluginMgr;
+	delete iPluginObserver;	
+	delete iParams;
+	if (iAuthDb2 != 0)
+		{
+		iAuthDb2->CompactIfRequired();
+		delete iAuthDb2;
+		}
+	
+	iFs.Close();
+	REComSession::FinalClose();
+	}
+
+		
+/**
+ *  Creates a new session
+ * @param aClientVersion the version of the connecting client
+ * @param aMessage the connect message
+ */
+CScsSession* CAuthServer::DoNewSessionL(const RMessage2& /*aMessage*/)
+	{
+	return CAuthServerSession::NewL(*this);
+	}
+
+
+/**
+ * Returns the last identity to be authenticated within the period 
+ * currTime to currTime-timeout.  
+ * 
+ * @param currTime the current universal time
+ * 
+ * @param timeout the number of seconds within which the last
+ * authentication should have been made
+ *
+ * @return 0 if there has been no previous authentications either in the
+ * server lifetime or within the timeout period. 
+ *
+ * @return a pointer to the cached identity object
+ **/
+CIdentity* CAuthServer::CachedIdentity( const TTimeIntervalSeconds& aTimeOut)
+    {
+    // process request
+    TTime currentTime;
+	if(currentTime.UniversalTimeSecure() == KErrNoSecureTime)
+		{
+		// Fall back to nonsecure time. 
+		currentTime.UniversalTime();
+		}
+    
+    CIdentity* id = 0;
+  
+    TTimeIntervalSeconds timeSinceLast;
+    currentTime.SecondsFrom(iLastAuthTime, timeSinceLast);    
+   
+    if (timeSinceLast.Int() >= 0 && timeSinceLast < aTimeOut)
+		{
+		id = iLastIdentity;
+		}
+    
+    return id;
+    }
+    
+
+
+/**
+ *
+ * @param aMessage the message to process
+ **/
+void CAuthServer::DeauthenticateL(const RMessage2& aMessage)
+	{
+	if (ServerBusy())
+		{
+		aMessage.Complete(KErrServerBusy);
+		return;
+		}
+
+	delete iLastIdentity;
+	iLastIdentity = 0;
+	iLastAuthTime = 0L;
+
+	ClearPropertiesL();	
+	aMessage.Complete(KErrNone);
+	}
+
+HBufC* CAuthServer::StringOrNullLC(TBool aReturnString, TIdentityId aId)
+    {
+	HBufC* str = 0;
+	if (aReturnString)
+		{
+		TRAPD(err, str = iAuthDb2->DescriptionL(aId));  
+		if (!err)
+			{
+			CleanupStack::PushL(str);
+			}
+		
+		}
+	if (str == 0)
+		{
+		str = HBufC::NewLC(0);  
+		}
+	return str;
+    }
+
+void CAuthServer::AuthenticateL(const RMessage2& aMessage)
+    {
+	if (ServerBusy())
+		{
+		aMessage.Complete(KErrServerBusy);
+		return;
+		}
+		
+	TInt KAuthParams = 1; 
+	TInt paramsLen = aMessage.GetDesLength(KAuthParams);
+	
+	if(paramsLen != KErrBadDescriptor)
+		{
+		//Create a buffer.
+		HBufC8* buffer = HBufC8::NewLC(paramsLen);
+		TPtr8 bufDes(buffer->Des());
+			
+		aMessage.ReadL(EIpcArgument1, bufDes);
+		
+		//Internalize the params object.
+		RDesReadStream readStream(*buffer);
+		CleanupClosePushL(readStream);
+		iParams->InternalizeL(readStream);
+		CleanupStack::PopAndDestroy(2, buffer);	
+		}
+    
+	CIdentity* id = CachedIdentity(iParams->iTimeout);
+  
+	if (id == 0) // no valid cache available
+		{
+		const TInt KAuthExprParam = 0;
+	
+		// reconstruct the authentication expression
+		TInt extLen = aMessage.GetDesLengthL(KAuthExprParam);
+		HBufC8* extSrv = HBufC8::NewLC(extLen);
+		TPtr8 desSrv8 = extSrv->Des();
+		aMessage.ReadL(KAuthExprParam, desSrv8);
+		
+		RDesReadStream drs(desSrv8);
+		CAuthExpression* authExpr = CAuthExpressionImpl::NewL(drs);
+		// don't need the stream any more, so free it
+		CleanupStack::PopAndDestroy(extSrv);
+		CleanupStack::PushL(authExpr);
+
+		const CAuthExpressionImpl* expr = static_cast<const CAuthExpressionImpl*>(authExpr);
+		
+		iAuthTransaction = CAuthTransaction::NewL(aMessage,
+												  iParams->iClientKey,
+												  iParams->iClientSid.iUid,
+												  iParams->iWithString,
+												  *iParams->iClientMessage,
+												  expr);
+		CleanupStack::Pop(authExpr);
+		
+		iEvaluator->Evaluate(expr);
+		
+		return;
+        }
+        
+	else if (iParams->iClientKey && (id->Id() != KUnknownIdentity))
+		{
+		
+		HBufC* str = StringOrNullLC(iParams->iWithString, id->Id());
+		CIdentity* id2 = 0;
+		
+		TInt clientId = aMessage.SecureId();
+		
+		if(iParams->iClientSid.iUid != 0)
+			{
+			clientId = iParams->iClientSid.iUid;
+			}
+		
+		id2 = CIdentity::NewL(id->Id(), id->Key().ClientKeyL(clientId), str);
+			
+		CleanupStack::Pop(str);
+		CleanupStack::PushL(id2);
+		// id pointer already stored as iLastIdentity
+		id = id2; 
+		}
+  
+	CompleteAuthenticationL(aMessage, id);
+  
+	if (id != iLastIdentity) 
+		{
+		// only clean up the allocated id if it has not been transferred to us.
+		CleanupStack::PopAndDestroy(id);  
+		}
+   
+	}
+
+// -------- plugin lists --------
+
+
+/**
+	Build an array containing descriptions for the
+	plugins available on the system and send it to
+	the client.
+	
+	@param	aMessage		Message describing client
+							request.
+	@param	aFilter			Function which decides whether
+							or not to include a plugin in the
+							list.
+ */
+void CAuthServer::FilterPluginsL(
+	const RMessage2& aMessage, CAuthServer::TInterfaceFilter aFilter)
+
+	{
+	RCPointerArray<const CPluginDesc> descs;
+	GetDescriptionsFromEComLC(aFilter, descs);
+	AuthServerUtil::SendDataPointerArrayL(aMessage, descs, 0);
+	CleanupStack::PopAndDestroy(&descs);
+	}
+
+
+/**
+	Populate the supplied array with plugin descriptions generated
+	from the available ECOM plugins.
+	
+	@param	aFilter			Predicate function decides whether or not
+							to include each plugin in the list.
+	@param	aDescs			Array to populate.  When this function is
+							called, any existing entries are removed.
+							If this function leaves then any entries are
+							removed from the array.  On success, the
+							array is on the cleanup stack.
+ */
+void CAuthServer::GetDescriptionsFromEComLC(
+	CAuthServer::TInterfaceFilter aFilter,
+	RCPointerArray<const CPluginDesc>& aDescs)
+	{
+	aDescs.Reset();
+	CleanupClosePushL(aDescs);
+	
+	// ownership of the data pointed by this array is with 
+	// the plugin manager. 
+	const RPointerArray<CImplementationInformation>& implInfo = iPluginMgr->ImplementationsL();
+	TInt implCount = implInfo.Count();
+	
+	for (TInt i = 0; i < implCount; ++i)
+		{
+		// avoid RVCT warning C2874W: pi may be used before being set
+		CAuthPluginInterface* pi = 0;
+		
+		TRAPD(r, pi = iPluginMgr->ImplementationL(i));
+		
+		// skip plugins which are not available
+		if (KErrNone != r)
+			continue;
+		
+		if (! (this->*aFilter)(*pi))
+			{
+			continue;
+			}
+		
+		// get training status from db
+		TAuthTrainingStatus ts = iAuthDb2->PluginStatusL(pi->Id());
+		
+		CPluginDesc* pd = CPluginDesc::NewL(
+			pi->Id(), pi->Name(), pi->Type(),
+			ts, pi->MinEntropy(),
+			pi->FalsePositiveRate(), pi->FalseNegativeRate() );
+				
+		CleanupStack::PushL(pd);
+		aDescs.AppendL(pd);
+		CleanupStack::Pop(pd);
+		}
+	
+	}
+
+
+
+/**
+	Build an array containing plugin descriptions for
+	each plugin which is available on the system, and
+	copy this into the client's space.
+	
+	@param	aMessage		Client message.  This contains
+							the client-side buffer.
+ */
+void CAuthServer::PluginsL(const RMessage2& aMessage)
+	{
+	FilterPluginsL(aMessage, &CAuthServer::FilterAllPlugins);
+	}
+
+
+/**
+	Predicate function used by PluginsL.. This accepts all plugins.
+	
+	@return					Always ETrue.
+	@see PluginsL
+ */
+TBool CAuthServer::FilterAllPlugins(const CAuthPluginInterface&)
+	{
+	return ETrue;
+	}
+
+
+/**
+ *
+ * @param aMessage the message to process
+ **/
+void CAuthServer::ActivePluginsL(const RMessage2& aMessage)
+	{
+	FilterPluginsL(aMessage, &CAuthServer::FilterActivePlugins);
+	}
+
+
+/**
+ * Indicates a plugin is active. 
+ *
+ * @param aInterface the auth plugin interface to check
+ * @return true if aInterface.IsActive()
+ **/
+TBool CAuthServer::FilterActivePlugins(const CAuthPluginInterface& aInterface)
+	{
+	return aInterface.IsActive();
+	}
+
+
+/**
+	Build an array which containing plugin descriptions
+	for each plugin which is available and has the type
+	supplied by the client.
+	
+	@param	aMessage		Client message.  This contains
+							the plugin type and points to the
+							client-side buffer.
+ */
+void CAuthServer::PluginsByTypeL(const RMessage2& aMessage)
+	{
+	iFilterType = static_cast<TAuthPluginType>(aMessage.Int1());
+	FilterPluginsL(aMessage, &CAuthServer::FilterPluginsByType);
+	}
+
+
+/**
+	Predicate which checks whether the supplied description should
+	be included in the result list.
+	
+	The type to filter on is stored as a member variable.
+	
+	@param	aInterface		Interface to check.
+	@return					Zero if interface's type does not match
+							filter type, non-zero otherwise.
+	@see PluginsByTypeL
+ */
+TBool CAuthServer::FilterPluginsByType(const CAuthPluginInterface& aInterface)
+	{
+	return (aInterface.Type() == iFilterType);
+	}
+
+
+/**
+	Build an array which contains plugin descriptions
+	for each plugin which has the supplied training status,
+	and write that array into the caller's space.
+	
+	@param	aMessage		Client message contains the status
+							to filter on.
+ */
+void CAuthServer::PluginsByTrainingL(const RMessage2& aMessage)
+	{
+	iFilterTraining = static_cast<TAuthTrainingStatus>(aMessage.Int1());
+	FilterPluginsL(aMessage, &CAuthServer::FilterPluginsByTraining);
+	}
+
+
+/**
+	Predicate checks if the supplied interface describes
+	a plugin with the required training status.
+	
+	@param	aInterface		Interface to check.
+	@return					Zero if interface's training status
+							does not match the filter status;
+							non-zero otherwise.
+	@see PluginsByTrainingL
+ */
+TBool
+CAuthServer::FilterPluginsByTraining(const CAuthPluginInterface& aInterface)
+	{
+	// training status is stored in the db, not in the ECOM interface.
+	// If this function returns non-zero, the same request will be made
+	// on the DB to get the status again to construct the description.
+	// This is suboptimal, and could be improved by special-casing the
+	// training filter if required.
+
+	TAuthTrainingStatus ts = EAuthUntrained;
+	TRAPD(err, ( ts = iAuthDb2->PluginStatusL(aInterface.Id())));
+	return err == KErrNone ? ts == iFilterTraining : EFalse;
+	}
+
+
+/**
+	Populate a client-side array with the set of identities.
+	
+	@param	aMessage		Client message which points to the
+							user-side array.
+ */
+void CAuthServer::IdentitiesL(const RMessage2& aMessage)
+	{
+    RArray<TIdentityId> ids;
+    iAuthDb2->IdentitiesL(ids);
+    CleanupClosePushL(ids);
+    AuthServerUtil::SendDataArrayL(aMessage, ids, 0);
+    CleanupStack::PopAndDestroy(&ids);
+	}
+/**
+	Retrieve the preferred plugin for the specified type
+	
+	@param	aMessage		Client message
+ */
+void CAuthServer::PreferredTypePluginL(const RMessage2& aMessage)
+	{
+    TPluginId id =
+	  iAuthDb2->PreferredPluginL(static_cast<TAuthPluginType>(aMessage.Int0()));
+	
+	TPckg<TPluginId> idPckg(id);
+	aMessage.WriteL(1, idPckg);
+	aMessage.Complete(KErrNone);
+	}
+
+/**
+	Set the preferred plugin for the specified type
+	
+	@param	aMessage		Client message
+ */
+void CAuthServer::SetPreferredTypePluginL(const RMessage2& aMessage)
+	{
+	TInt            err        = KErrArgument;
+	TAuthPluginType pluginType = static_cast<TAuthPluginType>(aMessage.Int0());
+	TPluginId       pluginId   = aMessage.Int1();
+	
+	if (iPluginMgr->PluginL(pluginId)->Type() == pluginType)
+		{
+		iAuthDb2->SetPreferredPluginL(pluginType,pluginId);
+		err = KErrNone;
+		}
+	aMessage.Complete(err);
+	}
+
+/**
+	Retrieve description for a supplied identity.
+	
+	@param	aMessage		Client message which contains the
+							identity and points to a client-side
+							buffer, to which the description will
+							be copied.
+ */
+void CAuthServer::IdentityStringL(const RMessage2& aMessage)
+	{
+	HBufC* desc = iAuthDb2->DescriptionL(aMessage.Int1());
+	CleanupStack::PushL(desc);
+	aMessage.WriteL(EIpcArgument0, *desc);	
+	CleanupStack::PopAndDestroy(desc);
+	aMessage.Complete(KErrNone);	
+	}
+
+/**
+	Retrieve description & id for all identities.
+	
+	@param	aMessage		Client message which contains the
+							identity and points to a client-side
+							buffer, to which the description will
+							be copied.
+ */
+void CAuthServer::IdentitiesWithStringL(const RMessage2& aMessage)
+	{
+	RIdAndStringArray result;
+
+	iAuthDb2->IdentitiesWithDescriptionL(result);
+	CleanupClosePushL(result);
+
+	AuthServerUtil::SendDataPointerArrayL(aMessage,result,0);
+	CleanupStack::PopAndDestroy(&result);
+	}
+
+/**
+ *
+ * @param aMessage the message to process
+ **/
+void CAuthServer::SetIdentityStringL(const RMessage2& aMessage)
+	{
+	HBufC* str = HBufC::NewLC(aMessage.GetDesLengthL(1));
+	TPtr strDes = str->Des();
+	TInt err = aMessage.Read(1, strDes);
+
+	if (err == KErrNone)
+	  {
+	  iAuthDb2->SetDescriptionL(aMessage.Int0(), *str);
+	  }	
+	CleanupStack::PopAndDestroy(str);
+	aMessage.Complete(err);
+	}
+
+
+ 
+/**
+	Copies the authentication alias list obtained using 
+	ListAliasL() method to a client-side buffer .
+	
+	@param	aMessage		Client message which points to a client-side
+							buffer, to which the authentication strength 
+							list will be copied.
+ */
+ 
+void CAuthServer::ListAuthAliasesL(const RMessage2& aMessage)
+	{
+	RPointerArray<HBufC> aliasList;
+	CleanupResetAndDestroyPushL(aliasList);
+	
+	//get the list of available authentication strengths from the cenrep file.
+	iAuthRepository->ListAliasL(aliasList);
+
+	AuthServerUtil::SendDataPointerArrayL(aMessage, aliasList, EIpcArgument0);
+	CleanupStack::PopAndDestroy(&aliasList);
+	}
+	
+/**
+	Resolves any alias occurrence in the expression to its corresponding
+	value. 
+	
+	@param	aMessage	Client message which contains the free form
+						authentication expression and points to a 
+						client-side buffer, to which the string will 
+						be copied.
+	
+ */
+void CAuthServer::ResolveExpressionL(const RMessage2& aMessage)
+	{
+	
+	// the auth strength passed by the client. 
+	TInt length = aMessage.GetDesLength(EIpcArgument1);
+	HBufC* clientExpression = HBufC::NewLC(length);
+	TPtr clientExprPtr(clientExpression->Des());
+
+	aMessage.ReadL(EIpcArgument1, clientExprPtr);
+	
+	RBuf resultantString;
+	CleanupClosePushL(resultantString);
+	
+	resultantString.CreateL(KDefaultBufferSize/2);
+		
+	// get the alias list
+	RPointerArray<HBufC> aliasList;
+	CleanupResetAndDestroyPushL(aliasList);
+	
+	//get the list of available authentication strength from the cenrep file.
+	iAuthRepository->ListAliasL(aliasList);
+		
+		
+	// parse the client side expression to see whether there
+	// are any alias, if present process them accordingly.
+	TLex input(clientExprPtr);
+	
+	// append the open bracket first so that the entire expression is within brackets.
+	resultantString.Append(KOpenBracket);
+	
+	for(TPtrC token = input.NextToken(); token.Size() > 0; token.Set(input.NextToken()))
+		{
+		
+		if(	token.CompareF(KOpenBracket) == 0 ||
+			token.CompareF(KCloseBracket) == 0 ||
+			token.CompareF(KAuthOpAnd) == 0 ||
+			token.CompareF(KAuthOpOr) == 0
+			)
+			{
+			int reqdBufferLength = resultantString.Length() + token.Length();			
+			
+			if(resultantString.MaxLength() < reqdBufferLength)
+				{
+				if(resultantString.MaxLength() == 0)
+					{
+					resultantString.Close();
+					}
+				resultantString.ReAllocL(reqdBufferLength);
+				}
+						
+			resultantString.Append(token);
+			}
+		else if(token.CompareF(KAuthBiometric) == 0 ||
+				token.CompareF(KAuthDefault) == 0 ||
+				token.CompareF(KAuthKnowledge) == 0 ||
+				token.CompareF(KAuthToken) == 0 ||
+				token.CompareF(KAuthPerformance) == 0	)
+			{
+			RBuf tokenType;
+			CleanupClosePushL(tokenType);
+			TokenizeStringL(token, tokenType);
+			int reqdBufferLength = resultantString.Length() + tokenType.Length();
+			if(resultantString.MaxLength() < reqdBufferLength)
+				{
+				if(resultantString.MaxLength() == 0)
+					{
+					resultantString.Close();
+					}
+				resultantString.ReAllocL(reqdBufferLength);
+				}
+			
+			resultantString.Append(tokenType);
+			CleanupStack::PopAndDestroy(&tokenType);
+			}
+		else
+			{
+			// should not be a number
+			TInt32 val = 0;
+			TLex value(token);
+			if(value.Val(val) == KErrNone)
+				{
+				RBuf tokenPluginId;
+				CleanupClosePushL(tokenPluginId);
+				TokenizeStringL(token, tokenPluginId);
+				int reqdBufferLength = resultantString.Length() + tokenPluginId.Length();
+				if(resultantString.MaxLength() < reqdBufferLength)
+					{
+					if(resultantString.MaxLength() == 0)
+						{
+						resultantString.Close();
+						}
+					resultantString.ReAllocL(reqdBufferLength);
+					}
+				resultantString.Append(tokenPluginId);
+				CleanupStack::PopAndDestroy(&tokenPluginId);
+				continue;
+				}
+			
+			RBuf aliasString;
+			CleanupClosePushL(aliasString);
+				
+			// this is a alias value which should be processed
+			ResolveAliasL(token, aliasList, aliasString);
+			int reqdBufferLength = resultantString.Length() + aliasString.Length();
+			if(resultantString.MaxLength() < reqdBufferLength)
+				{
+				if(resultantString.MaxLength() == 0)
+					{
+					resultantString.Close();
+					}
+				resultantString.ReAllocL(reqdBufferLength);
+				}
+			resultantString.Append(aliasString);
+			CleanupStack::PopAndDestroy(&aliasString);
+			}
+		}
+	
+	int reqdBufferLength = resultantString.Length() + KCloseBracket().Length();
+	
+	if(resultantString.MaxLength() < reqdBufferLength)
+		{
+		if(resultantString.MaxLength() == 0)
+			{
+			resultantString.Close();
+			}
+		resultantString.ReAllocL(reqdBufferLength);
+		}
+										
+	// append the close bracket in the end so that the entire expression is within brackets.
+	resultantString.Append(KCloseBracket);
+					
+	//see if we have enough space on the client.
+	length = resultantString.Length();
+	if(aMessage.GetDesMaxLengthL(EIpcArgument0) < length)
+		{
+		TPckg<TInt> lenPckg(length);
+		aMessage.WriteL(EIpcArgument0, lenPckg);
+		aMessage.Complete(KErrOverflow);
+		}
+	
+	aMessage.WriteL(EIpcArgument0, resultantString);	
+	CleanupStack::PopAndDestroy(3, clientExpression);	//aliasList, resultantString.
+	aMessage.Complete(KErrNone);
+	}
+
+/**
+	Inserts space in between operators and inserts brackets for as 
+	expression
+	
+	@param	aStringToBeProcessed	string to be tokenized.
+	@param  aResultantString		would contain the final tokenized
+									string
+ */
+
+void CAuthServer::TokenizeStringL( const TDesC& aStringToBeProcessed, RBuf& aResultantString )
+	{
+	TInt newLength = aStringToBeProcessed.Length() + 2;
+	HBufC* resultantBuffer = HBufC::NewLC(newLength);
+	TPtr resultantBufPtr(resultantBuffer->Des());
+	resultantBufPtr.Append(KOpenBracket);
+	resultantBufPtr.Append(aStringToBeProcessed);
+	TInt index = resultantBufPtr.Length();
+	resultantBufPtr.Append(KCloseBracket);
+	
+	CAuthExpressionImpl::InsertSpaceBetweenOperatorsL(*resultantBuffer, aResultantString);
+	CleanupStack::PopAndDestroy(resultantBuffer);
+	
+	}
+
+/**
+	Retrieves the alias string corresponding to the 
+	supplied authentication strength.
+	
+	@param	aMessage	Client message which contains the
+						authentication strength and points to a 
+						client-side buffer, to which the alais
+						string will be copied.
+	
+ */
+ 	
+void CAuthServer::ResolveAliasL(const TDesC& aAliasName, 
+								RPointerArray<HBufC>& aAliasList, 
+								RBuf& aResultantString)
+	{
+	HBufC* aliasString = HBufC::NewLC(KDefaultBufferSize/2);
+	TPtr aliasStringPtr(aliasString->Des());
+	
+	TBool aliasFound = EFalse;
+		
+	// find a match for the client supplied alias from the aliasList.
+	for(TInt i = 0; i < aAliasList.Count(); ++i)
+		{
+		if(aAliasName.CompareF(*aAliasList[i]) != 0)
+			{
+			continue;
+			}
+		
+		aliasFound = ETrue;
+		// retrieve the alias string corresponding to a given authentication strength.
+		iAuthRepository->GetAliasDefinitionL(i, aliasStringPtr);
+		if(aliasStringPtr.Length() == 0)
+			{
+			User::Leave(KErrAuthStrengthAliasNotDefined);
+			}
+			
+		// enclose the alias string within brackets.This would facilitate easy evaluation 
+		// of the alias string expression.
+		TInt newLength = aliasStringPtr.Length() + 2;
+		if(newLength > aliasStringPtr.MaxLength())
+			{
+			aliasString->ReAllocL(newLength);
+			}
+			
+		aliasStringPtr.Insert(0, KOpenBracket);
+		TInt index = aliasStringPtr.Length();
+		aliasStringPtr.Insert(index, KCloseBracket);
+		
+		// tokenize aliasString, to facilitate parsing using TLex.
+		CAuthExpressionImpl::InsertSpaceBetweenOperatorsL(*aliasString, aResultantString);
+				
+		if(aResultantString.Length() > aliasStringPtr.MaxLength())
+			{
+			aliasString = aliasString->ReAllocL(aResultantString.Length());
+			}
+		
+		aliasStringPtr.Copy(aResultantString);
+		aResultantString.Close();
+		
+		// aliasString contains an alias, so process it until we end up 
+		// with an expression containing plugin Id or plugin Type or a combination of both.		
+		ProcessAliasStringL(aAliasList, *aliasString, aResultantString);
+				
+		// ensure that the aliasString processing doesn't end in an infinite loop.
+		// In case it does , leave with KErrAuthServInvalidAliasStringExpression.
+		// For instance : fast = (medium & weak), medium = fast i.e 
+		// medium = (medium & weak).
+				
+		if(aResultantString.FindC(aAliasName) != KErrNotFound)
+			{
+			User::Leave(KErrAuthServInvalidAliasStringExpression);
+			}
+							
+		TBool found = CheckForAliasInAliasString(aAliasList, aResultantString);
+		// 'resultantAliasString' may inturn contain an alias.So loop through the ProcessAliasStringL,
+		// until  we end up with an alias string containing only plugin Id,plugin Type or a combination of both.
+		while(found)
+			{
+			for(TInt j = 0; j < aAliasList.Count(); ++j)
+				{
+				if(aResultantString.FindC(*aAliasList[j]) != KErrNotFound)
+					{
+					if(aResultantString.Length() > aliasStringPtr.MaxLength())
+						{
+						aliasString->ReAllocL(aResultantString.Length());
+						}
+							
+					aliasStringPtr.Copy(aResultantString);
+					aResultantString.Close();
+										
+					CAuthExpressionImpl::InsertSpaceBetweenOperatorsL(*aliasString, aResultantString);
+					if(aResultantString.Length() > aliasStringPtr.MaxLength())
+						{
+						aliasString->ReAllocL(aResultantString.Length());
+						}
+						
+					aliasStringPtr.Copy(aResultantString);
+					aResultantString.Close();
+								
+				 	ProcessAliasStringL(aAliasList, *aliasString, aResultantString);
+					// ensure that the aliasString processing doesn't end in an infinite loop.
+					// In case it does , leave with KErrArgument.
+					// For instance : fast = (medium & weak), medium = fast i.e 
+					// medium = (medium & weak).
+					if(aResultantString.FindC(aAliasName) != KErrNotFound)
+						{
+						User::Leave(KErrAuthServInvalidAliasStringExpression);
+						}
+					break;
+					}
+				}
+					
+				// check if 'resultantExpr' still contains an alias.
+			found = CheckForAliasInAliasString(aAliasList, aResultantString);				
+			
+			}
+				
+		break;
+		}
+	
+	CleanupStack::PopAndDestroy(aliasString);
+	
+	//if the client supplied alias is not in the alias list, leave.
+	if(!aliasFound)
+		{
+		User::Leave(KErrUnknownAuthStrengthAlias);
+		}
+
+	}
+
+// Resets the training data for the supplied identity.
+//	
+// @param aMessage Client message which contains the details of 
+//					identity and plugins for doing the reset
+void CAuthServer::ResetIdentityL(TInt aFunction, const RMessage2& aMessage)
+	{
+	// Check if either an authentication or a training is going on
+	if (ServerBusy())
+		{
+		aMessage.Complete(KErrServerBusy);
+		return;
+		}
+
+	// For reset by type only EAuthKnowledge type is supported
+	if (aFunction == EResetIdentityByType)
+		{
+		TAuthPluginType pluginType = static_cast<TAuthPluginType>(aMessage.Int1());
+		if (pluginType != EAuthKnowledge)
+			{
+			aMessage.Complete(KErrAuthServResetMayLoseIdentity);
+			return;
+			}
+		}
+
+	// Get the list of trained plugins for this identity
+	TIdentityId identityId = static_cast<TIdentityId>(aMessage.Int0());
+	RArray<TPluginId> trainedPluginIdList;
+	CleanupClosePushL(trainedPluginIdList);
+	iAuthDb2->TrainedPluginsListL(identityId, trainedPluginIdList);
+
+	// Ensure at least one plugin knows identity
+	TInt numTrained = trainedPluginIdList.Count();
+	if (numTrained < 1)
+		{
+		CleanupStack::PopAndDestroy(&trainedPluginIdList);
+		aMessage.Complete(KErrAuthServIdentityNotFound);
+		return;
+		}
+
+	// Try and ensure that after reset at least one plugin has an identity trained
+	// Since all the trained plugins for the identity are being reset make sure
+	// at least one of them is of the knowledge type to be reasonably sure it registers 
+	// the new identity data
+	TBool knowledgePluginFound = EFalse;
+	for (TInt index = 0; index < numTrained; ++index)
+		{
+		TPluginId pluginId = trainedPluginIdList[index];
+		CAuthPluginInterface* plugin = iPluginMgr->PluginL(pluginId);
+		if (plugin->Type() == EAuthKnowledge)
+			{
+			knowledgePluginFound = ETrue;
+			break;
+			}
+		}
+	if (!knowledgePluginFound)
+		{
+		CleanupStack::PopAndDestroy(&trainedPluginIdList);
+		aMessage.Complete(KErrAuthServResetMayLoseIdentity);
+		return;
+		}
+
+	// Get the registration data
+	HBufC* regData = NULL;
+	TInt ipcArg = (aFunction == EResetIdentity) ?  EIpcArgument1:EIpcArgument2;
+	regData = HBufC::NewLC(aMessage.GetDesLengthL(ipcArg));
+	TPtr regPtr = regData->Des();
+	aMessage.ReadL(ipcArg, regPtr);
+
+	// Finally start the reset process
+	// Generate a new protection key
+	CProtectionKey* protKey = CProtectionKey::NewLC(iKeySize);
+	TInt lastErr = KErrNone;
+	TBool oneSuccess = EFalse; // To keep track if at least one reset succeeded
+	for (TInt index = 0; index < numTrained; ++index)
+		{
+		TPluginId pluginId = trainedPluginIdList[index];
+		CAuthPluginInterface* plugin = iPluginMgr->PluginL(pluginId);
+		HBufC8* result = NULL;
+		TInt err = KErrNone;
+		// For reset by type the registration data needs to be specified only for the plugins of specified type
+		// and this restricted to knowledge type only
+		if ((aFunction == EResetIdentity) ||
+			((aFunction == EResetIdentityByType) && (plugin->Type() == EAuthKnowledge)))
+			{
+			err = plugin->Reset(identityId, *regData, result);
+			}
+		else
+			{
+			err = plugin->Reset(identityId, KNullDesC, result);
+			}
+		if (err == KErrNone && result)
+			{
+			oneSuccess = ETrue;
+			// Use the plugin data to generate transient key and then encrypt the protection key
+			// using the transient key. A plugin may not return data if it does not use the supplied
+			// registration information 
+			CleanupStack::PushL(result);
+			CTransientKeyInfo* keyInfo = CreateKeyInfoLC(pluginId, *result, *protKey);
+			// Replace the trained information in the db
+			iAuthDb2->SetTrainedPluginL(identityId, pluginId, *keyInfo);
+			CleanupStack::PopAndDestroy(2, result); // keyInfo
+			}
+		else if (err == KErrNone)
+			{
+			oneSuccess = ETrue;
+			// Remove the entry in the auth db for the plugin
+			// Ignore errors
+			TRAP_IGNORE(iAuthDb2->RemoveTrainedPluginL(identityId, pluginId));
+			}
+		else
+			{
+			// Remember the last error
+			lastErr = err;
+			}
+		}
+
+	CleanupStack::PopAndDestroy(3, &trainedPluginIdList); // regData, protKey
+	
+	// If none of the plugins reset correctly then return the last error
+	if (oneSuccess)
+		{
+		lastErr = KErrNone;
+		}
+	
+	aMessage.Complete(lastErr);
+	}
+
+// Resets the training data for the supplied identity.
+//	
+// @param aMessage Client message which contains the details of 
+//					identity and plugins for doing the reset
+void CAuthServer::ResetIdentityByListL(const RMessage2& aMessage)
+	{
+	// Check if either an authentication or a training is going on
+	if (ServerBusy())
+		{
+		aMessage.Complete(KErrServerBusy);
+		return;
+		}
+
+	// Get the list of trained plugins for this identity
+	TIdentityId identityId = static_cast<TIdentityId>(aMessage.Int0());
+	RArray<TPluginId> trainedPluginIdList;
+	CleanupClosePushL(trainedPluginIdList);
+	iAuthDb2->TrainedPluginsListL(identityId, trainedPluginIdList);
+
+	// Ensure at least one plugin knows identity
+	TInt numTrained = trainedPluginIdList.Count();
+	if (numTrained < 1)
+		{
+		CleanupStack::PopAndDestroy(&trainedPluginIdList);
+		aMessage.Complete(KErrAuthServIdentityNotFound);
+		return;
+		}
+
+	// Extract the array of plugin ids and their registration information
+	RArray<TPluginId> pluginIdList;
+	CleanupClosePushL(pluginIdList);
+	HBufC8* buf = HBufC8::NewLC(aMessage.GetDesLengthL(EIpcArgument1));
+	TPtr8 ptr = buf->Des();
+	aMessage.ReadL(EIpcArgument1, ptr);
+	RDesReadStream stream(*buf);
+	CleanupClosePushL(stream);
+	InternalizeArrayL(pluginIdList, stream);
+	CleanupStack::PopAndDestroy(2, buf); // stream
+
+	RPointerArray<HBufC> regInfoList;
+	CleanupResetAndDestroyPushL(regInfoList);
+	buf = HBufC8::NewLC(aMessage.GetDesLengthL(EIpcArgument2));
+	ptr.Set(buf->Des());
+	aMessage.ReadL(EIpcArgument2, ptr);
+	stream.Open(*buf);
+	CleanupClosePushL(stream);
+	InternalizePointerArrayL(regInfoList, stream);
+	CleanupStack::PopAndDestroy(2, buf); // stream
+
+	// Sanity check
+	if (pluginIdList.Count() != regInfoList.Count())
+		{
+		CleanupStack::PopAndDestroy(3, &trainedPluginIdList); // pluginIdList, regInfoList
+		aMessage.Complete(KErrArgument);
+		return;
+		}
+
+	// Prepare an array of TPluginResetDetails to aid during resetting
+	RPointerArray<TPluginResetDetails> resetDetails;
+	CleanupResetAndDestroyPushL(resetDetails);
+	
+	for (TInt index = 0; index < numTrained; ++index)
+		{
+		TPluginId pluginId = trainedPluginIdList[index];
+		// Check if the trained plugin needs to be sent registration data
+		TInt indexA = pluginIdList.Find(pluginId);
+		
+		TPluginResetDetails *resetDetailsEntry;
+		if (indexA != KErrNotFound)
+			{
+			// Note: Ownership of the descriptor pointers remains with regInfoList
+			resetDetailsEntry = new (ELeave) TPluginResetDetails(pluginId, *regInfoList[indexA]);
+			}
+		else
+			{
+			resetDetailsEntry = new (ELeave) TPluginResetDetails(pluginId, KNullDesC());
+			}
+		CleanupStack::PushL(resetDetailsEntry);
+		resetDetails.AppendL(resetDetailsEntry);
+		CleanupStack::Pop(resetDetailsEntry);
+		}
+
+	// Try and ensure that after reset at least one plugin has an identity trained
+	// Since all the trained plugins for the identity are being reset make sure
+	// at least one of them is of the knowledge type and is being passed the registration data 
+	// to be reasonably sure it registers the new identity data
+	TBool knowledgePluginFound = EFalse;
+	for (TInt index = 0; index < numTrained; ++index)
+		{
+		TPluginId pluginId = resetDetails[index]->PluginId();
+		CAuthPluginInterface* plugin = iPluginMgr->PluginL(pluginId);
+		if ((plugin->Type() == EAuthKnowledge) && (resetDetails[index]->RegistrationData() != KNullDesC))
+			{
+			knowledgePluginFound = ETrue;
+			break;
+			}
+		}
+	if (!knowledgePluginFound)
+		{
+		CleanupStack::PopAndDestroy(4, &trainedPluginIdList); // pluginIdList, regInfoList, resetDetails
+		aMessage.Complete(KErrAuthServResetMayLoseIdentity);
+		return;
+		}
+
+	// Finally start the reset process
+	// Generate a new protection key
+	CProtectionKey* protKey = CProtectionKey::NewLC(iKeySize);
+	TInt lastErr = KErrNone;
+	TBool oneSuccess = EFalse; // To keep track if at least one reset succeeded
+	for (TInt index = 0; index < numTrained; ++index)
+		{
+		TPluginResetDetails* reset = resetDetails[index];
+		TPluginId pluginId = reset->PluginId();
+		CAuthPluginInterface* plugin = iPluginMgr->PluginL(pluginId);
+		HBufC8* result = NULL;
+		TInt err = plugin->Reset(identityId, reset->RegistrationData(), result);
+		if (err == KErrNone && result)
+			{
+			oneSuccess = ETrue;
+			// Use the plugin data to generate transient key and then encrypt the protection key
+			// using the transient key. A plugin may not return data if it does not use the supplied
+			// registration information 
+			CleanupStack::PushL(result);
+			CTransientKeyInfo* keyInfo = CreateKeyInfoLC(pluginId, *result, *protKey);
+			// Replace the trained information in the db
+			iAuthDb2->SetTrainedPluginL(identityId, pluginId, *keyInfo);
+			CleanupStack::PopAndDestroy(2, result); // keyInfo
+			}
+		else if (err == KErrNone)
+			{
+			oneSuccess = ETrue;
+			// Remove the entry in the auth db for the plugin
+			// Ignore errors
+			TRAP_IGNORE(iAuthDb2->RemoveTrainedPluginL(identityId, pluginId));
+			}
+		else
+			{
+			// Remember the last error
+			lastErr = err;
+			}
+		}
+	
+	CleanupStack::PopAndDestroy(5, &trainedPluginIdList); // pluginIdList, regInfoList, resetDetails, protKey
+
+	// If none of the plugins reset correctly then return the last error
+	if (oneSuccess)
+		{
+		lastErr = KErrNone;
+		}
+	
+	aMessage.Complete(lastErr);
+	}
+
+// Generates and returns transient key info using the supplied plugin data and the protection key
+CTransientKeyInfo* CAuthServer::CreateKeyInfoLC(TPluginId aPluginId, const TDesC8& aPluginData, const CProtectionKey& aProtKey)
+	{
+	CTransientKeyInfo* keyInfo = CTransientKeyInfo::NewLC(aPluginId);
+
+	CTransientKey* transKey = keyInfo->CreateTransientKeyL(aPluginData);
+	CleanupStack::PushL(transKey);
+    
+	CEncryptedProtectionKey* encProtKey = transKey->EncryptL(aProtKey);
+	CleanupStack::PushL(encProtKey);
+	
+	keyInfo->SetEncryptedProtectionKeyL(encProtKey);
+	CleanupStack::Pop(encProtKey);
+	CleanupStack::PopAndDestroy(transKey);
+	return keyInfo;
+	}
+
+/**
+	Checks if the value of strength alias inturn contains an alias.
+	
+	@param	aAuthAliasList		an array of authentication strengths as obtained from
+								authserver cenrep file.
+	@param	aAliasString		an alias string containing the alias to be searched for.
+	
+ */	
+	
+TBool CAuthServer::CheckForAliasInAliasString(RPointerArray<HBufC>& aAuthAliasList, const TDes& aAliasString)
+	{
+	// find a match for the client supplied alias from the aliasList.
+	for(TInt i = 0; i < aAuthAliasList.Count(); ++i)
+		{
+		TInt found = aAliasString.FindC(*aAuthAliasList[i]);
+		if(found > 0)
+			{
+			return ETrue;
+			}
+		}
+		
+	return EFalse;
+	}
+	
+/**
+	Processes an alias string, This method is called recursively until we end
+	up with an alias string containing only pluginIds and pluginTypes or a 
+	combination of both.
+	
+	
+	@param	aAliasList					an array of authentication strengths as obtained from
+										authserver cenrep file.
+	@param	aAliasStringToBeProcessed	an alias string to be processed.	
+	@param	aResultantAliasString		Buffer to be populated with an alias string resulting from processing aAliasStringToBeProcessed.				
+	 
+ */
+ 	
+void CAuthServer::ProcessAliasStringL(RPointerArray<HBufC>& aAliasList, const TDesC& aAliasStringToBeProcessed, RBuf& aResultantAliasString)
+	{
+	TBuf<KDefaultBufferSize> exprString;
+	HBufC* aliasString = HBufC::NewLC(KMaxBufferSize);
+	TPtr aliasStringPtr(aliasString->Des());
+		
+	TLex input(aAliasStringToBeProcessed);
+	_LIT(KDelimiter, " ");
+	TBool aliasFoundInString = EFalse;
+	
+	//iterate through the obtained expression to verify if it contains any strength subsets.
+	for(TPtrC token = input.NextToken(); token.Size() > 0; token.Set(input.NextToken()))
+		{
+		TInt resultingLen = 0;
+		aliasFoundInString = EFalse;
+		for(TInt i = 0; i < aAliasList.Count(); ++i)
+			{
+			if(token.FindC(*aAliasList[i]) != KErrNotFound)
+				{
+				aliasFoundInString = ETrue;
+				iAuthRepository->GetAliasDefinitionL(i, exprString);
+				if(exprString.Length() == 0)
+					{
+					User::Leave(KErrAuthStrengthAliasNotDefined);
+					}
+					
+				// resulting length obtained by appending exprString ,KCloseBracket and KOpenBracket to aliasString.
+				resultingLen = (exprString.Length() + 2);
+				if(resultingLen > KMaxBufferSize)
+					{
+					aliasString->ReAllocL(resultingLen);
+					}
+				
+				aliasStringPtr.Append(KOpenBracket);	
+				aliasStringPtr.Append(exprString);
+				aliasStringPtr.Append(KCloseBracket);
+				break;
+				}
+			}
+		
+		//if the token is an operator or a plugin type or pluginId, append it to aResultantExpr.
+		if(!aliasFoundInString)
+			{
+			// resulting length obtained by appending token and delimiter to be aliasString.
+			resultingLen = (exprString.Length() + token.Length() + 1);
+			if(resultingLen > KMaxBufferSize)
+					{
+					aliasString->ReAllocL(resultingLen);
+					}
+					
+			aliasStringPtr.Append(token);
+			aliasStringPtr.Append(KDelimiter);	
+			}
+		}
+	
+	CleanupStack::Pop(aliasString);
+	aResultantAliasString.Assign(aliasString);	
+	
+	}
+	
+
+/**
+ *
+ * @param aMessage the message to process
+ **/
+void CAuthServer::RegisterIdentityL(const RMessage2& aMessage)
+	{
+	if (ServerBusy())
+		{
+		aMessage.Complete(KErrServerBusy);
+		return;
+		}
+
+	TIdentityId id = 0;
+	TPckg<TIdentityId> idPkg(id);
+	TRandom::RandomL(idPkg);
+
+	CProtectionKey* key = CProtectionKey::NewL(iKeySize);
+	
+	iTrainingMgr->RegisterIdentityL(aMessage, id, *key);
+	}
+
+/**
+ *
+ * @param aMessage the message to process
+ **/
+void CAuthServer::CancelL(const RMessage2& aMessage)
+    {
+	TInt err = KErrNone;
+
+	if (iTrainingMgr->IsBusy())
+		{
+		iTrainingMgr->Cancel();
+		}
+	else if (iAuthTransaction != 0)
+		{
+		if (aMessage.SecureId() == iAuthTransaction->Message().SecureId())
+			{
+			iEvaluator->Cancel();
+			}
+		else
+			{
+			// Shouldn't come here since we don't support share-able sessions
+			err = KErrInUse;
+			}
+		}
+	aMessage.Complete(err);
+	}
+
+
+/**
+	Remove the supplied identity from the database.
+	
+	@param	aMessage		Client which contains identity
+							to remove.
+ */
+void CAuthServer::RemoveIdentityL(const RMessage2& aMessage)
+	{
+	TInt result = KErrNone;
+	
+	//The identity to be removed
+	TIdentityId id = static_cast<TIdentityId>(aMessage.Int0());
+	
+	//Check if the identity to be removed is not the default identity.
+	TIdentityId defaultIdentity = iAuthDb2->DefaultIdentityL();
+
+	if(defaultIdentity != id)
+		{
+		iAuthDb2->RemoveIdentityL(id);
+
+		if (iLastIdentity && iLastIdentity->Id() == id)
+			{
+			delete iLastIdentity;
+			iLastIdentity = 0;
+			iLastAuthTime = 0L;
+			}
+		iPluginMgr->ForgetIdentityL(id);
+		}
+	else
+		{
+		result = KErrAuthServCanNotRemoveDefaultIdentity;
+		}
+	aMessage.Complete(result);
+	}
+
+/**
+ * @return true if either the training mgr or authentication transaction
+ * is busy
+ **/
+TBool CAuthServer::ServerBusy()
+	{
+	return iTrainingMgr->IsBusy() || iAuthTransaction != 0;
+	}
+
+
+/**
+ *
+ * @param aMessage the message to process
+ **/
+void CAuthServer::TrainPluginL(const RMessage2& aMessage)
+	{
+	if (ServerBusy())
+		{
+		aMessage.Complete(KErrServerBusy);
+		return;
+		}
+
+	if (iLastIdentity == 0 || iLastIdentity->Id() != aMessage.Int0())
+		{
+		// we need a cached identity to get the protection key
+		aMessage.Complete(KErrAuthServAuthenticationRequired);
+		return;
+		}
+	
+	TIdentityId retrainId = aMessage.Int0();
+	
+	//The default identity cannot be retrained.
+	TIdentityId defaultIdentity = iAuthDb2->DefaultIdentityL();
+		
+	if(defaultIdentity == retrainId)
+		{
+		aMessage.Complete(KErrNotSupported);
+		return;
+		}
+	
+	HBufC8* data = HBufC8::NewLC(iLastIdentity->Key().KeyData().Size());
+	*data = iLastIdentity->Key().KeyData(); 
+
+	CProtectionKey* key = CProtectionKey::NewL(data);
+	CleanupStack::Pop(data);
+	
+	iTrainingMgr->TrainPluginL(aMessage, *key);
+	
+    }
+
+
+  
+/**
+ * Remove the supplied identity, plugin pair from the
+ * authentication database.
+ *
+ * @param aMessage  Client message which contains the
+ * 					identity and the plugin.
+ **/
+void CAuthServer::ForgetPluginL(const RMessage2& aMessage)
+	{
+	if (ServerBusy())
+		{
+		aMessage.Complete(KErrServerBusy);
+		return;
+		}
+	
+	TIdentityId id   = static_cast<TIdentityId>(aMessage.Int0());
+	TPluginId plugin = static_cast<TPluginId>(aMessage.Int1());
+	TInt err         = KErrNone;
+
+	TInt numTrained = iAuthDb2->NumTrainedPluginsL(id);
+
+	switch (numTrained)
+	  {
+	case 0:
+	  err = KErrAuthServNoSuchIdentity;
+	  break;
+	case 1:	
+	  err = KErrAuthServCanNotRemoveLastPlugin;	  
+	  break;
+	default:
+	  iAuthDb2->RemoveTrainedPluginL(id, plugin);
+	  iPluginMgr->PluginL(plugin)->Forget(id);
+	  break;
+	  }
+
+	aMessage.Complete(err);
+	}
+
+
+void CAuthServer::EvaluateL(TPluginId aPluginId,
+						   TIdentityId& aIdentityId,
+						   CAuthExpressionImpl::TType aType,
+						   TRequestStatus& aStatus)
+	{
+	
+	if(aPluginId == 0 && aType == CAuthExpressionImpl::ENull)
+		{
+		aPluginId = iAuthRepository->DefaultPluginL();
+		}
+		
+  	CAuthPluginInterface* plugin = iPluginMgr->PluginL(aPluginId);
+
+	if (plugin != 0)
+	  {
+	  const HBufC* clientMessage = iAuthTransaction->ClientMessage();
+	  
+	  HBufC8*& data = iAuthTransaction->AddPluginL(aPluginId, aIdentityId);
+	  	
+	  if (plugin->IsActive())
+		  {
+		  plugin->Identify(aIdentityId, *clientMessage, data, aStatus);
+		  }
+		  
+	  else
+		  {
+		  User::Leave(KErrAuthServPluginNotActive);
+		  }
+	  }
+	}
+/**
+ * @see MEvaluatorPluginInterface::Evaluate
+ **/
+void CAuthServer::Evaluate(TPluginId aPluginId,
+						   TIdentityId& aIdentityId,
+						   CAuthExpressionImpl::TType aType,
+						   TRequestStatus& aStatus)
+	{
+	TRAPD(err, EvaluateL(aPluginId, aIdentityId, aType, aStatus));
+
+	if (err != KErrNone) 
+	  {
+	  TRequestStatus* status = &aStatus;
+      User::RequestComplete(status, err);
+	  }
+	}
+
+/**
+ * Retrieve the preferred plugin for the supplied type and
+ * get an identity from it.
+ * @see MEvaluatorPluginInterface::Evaluate
+ *
+ **/
+void CAuthServer::Evaluate(TAuthPluginType aPluginType,
+						   TIdentityId& aIdentityId,
+						   CAuthExpressionImpl::TType aType,	
+						   TRequestStatus& aStatus)
+	{
+	TPluginId id = 0;
+	TRAPD(r, id = iAuthDb2->PreferredPluginL(aPluginType));
+	if (r == KErrNone)
+	    {
+	    Evaluate(id, aIdentityId, aType, aStatus);
+	    }
+	else
+		{
+		// Pass back error (can happen if a user preference hasn't been defined)
+		aStatus = KRequestPending;
+		TRequestStatus* rs = &aStatus;
+		User::RequestComplete(rs, r);
+		}
+	}
+
+/**
+ * Completes the message and sends the id on it's way back to the client
+ **/
+void CAuthServer::CompleteAuthenticationL(const RMessagePtr2& aMessage,
+										 CIdentity* aId)
+	{
+	// write to client
+	HBufC8* idBuff = HBufC8::NewLC(KDefaultBufferSize);
+	TPtr8  idPtr =  idBuff->Des();
+	RDesWriteStream writeStream(idPtr);
+	writeStream << *aId;
+	writeStream.CommitL();
+
+	TInt clientBuffSize = aMessage.GetDesMaxLength(2);
+  
+	if (clientBuffSize >= idBuff->Size())
+		{
+		aMessage.Write(2, *idBuff);
+		}
+	else
+		{
+		User::Leave(KErrUnderflow);
+		}
+	
+	CleanupStack::PopAndDestroy(idBuff);  
+  
+	aMessage.Complete(KErrNone);
+	}
+
+/**
+ * @see MEvaluatorClientInterface::EvaluationSucceeded
+ **/
+void CAuthServer::EvaluationSucceeded(TIdentityId aIdentityId)
+	{
+
+	TRAPD(err, EvaluationSucceededL(aIdentityId));
+	
+	switch(err)
+	    {
+	    case KErrNone:
+	        break;
+	    default:
+	        EvaluationFailed(err);
+	    }
+	}
+
+
+/**
+ * The full, leaving, implementation of EvaluationSucceeded (which is a trap
+ * harness).
+ *
+ * @param aIdentityId the identity discovered
+ **/
+void CAuthServer::EvaluationSucceededL(TIdentityId aIdentityId)
+	{
+
+	CAuthTransaction::RResultArray& results = iAuthTransaction->Results();
+
+	HBufC8* data = 0;
+	TPluginId plugin = KUnknownPluginId;
+
+	TLastAuth lastAuth;
+	lastAuth.iId = aIdentityId;
+	
+	for (TInt i = 0 ; i < results.Count() ; ++i)
+		{
+		if (aIdentityId == *results[i]->iId)
+			{
+			plugin = results[i]->iPlugin;
+			data = results[i]->iData;
+			UpdateAuthL(lastAuth, plugin); 
+			}
+		}
+  
+    CProtectionKey* key = 0;
+
+    // Ensure that the ID and DATA are valid.
+    if (( aIdentityId != KUnknownIdentity ) && ( data != 0 ))
+        {
+        // get the protection key 
+        CTransientKeyInfo* keyInfo = iAuthDb2->KeyInfoL(aIdentityId, plugin);
+		CleanupStack::PushL(keyInfo);
+        		  
+		CTransientKey* transKey = keyInfo->CreateTransientKeyL(*data);
+        CleanupStack::PushL(transKey);
+  
+        key = transKey->DecryptL(keyInfo->EncryptedKey());
+        CleanupStack::PopAndDestroy(2,keyInfo);
+        CleanupStack::PushL(key);
+        
+        // convert to a client key if we need to
+        if (iAuthTransaction->ClientKey())
+           {
+           CProtectionKey* key2 = key->ClientKeyL(iAuthTransaction->ClientSid());
+            
+           CleanupStack::PopAndDestroy(key);
+           key = key2;
+           CleanupStack::PushL(key);
+           }   
+        }
+	else
+	    {
+	    // create a blank key
+	    key = CProtectionKey::NewLC(0);
+	    
+	    // clear the cached identity
+	    delete iLastIdentity;
+        iLastIdentity = 0;
+        iLastAuthTime = 0L;
+        }
+
+	HBufC* str =
+		StringOrNullLC(iAuthTransaction->WithString(), aIdentityId);
+	
+	// create the client identity object
+	CIdentity* identity = CIdentity::NewL(aIdentityId, key, str);
+    CleanupStack::Pop(2, key);
+	CleanupStack::PushL(identity);
+    
+    CompleteAuthenticationL(iAuthTransaction->Message(),
+    					    identity);
+	
+    if (aIdentityId != KUnknownIdentity)
+        {
+		TIdentityId oldId = iLastIdentity ? iLastIdentity->Id() : 0;
+
+        // cache the latest id
+        delete iLastIdentity;
+        iLastIdentity = identity;
+        if(iLastAuthTime.UniversalTimeSecure() == KErrNoSecureTime)
+        	{
+            // Fall back to nonsecure time. 
+            iLastAuthTime.UniversalTime();
+            }
+		// and publish it
+		lastAuth.iAuthTime = iLastAuthTime;
+		TPckg<TLastAuth> authPckg(lastAuth);
+		User::LeaveIfError(iAuthProperty.Set(authPckg));
+
+		// if the identity has changed publish that fact	
+		if (oldId != aIdentityId)
+			{
+			User::LeaveIfError(iAuthEventProperty.Set(aIdentityId));
+			}
+
+		CleanupStack::Pop(identity);
+        }
+	else
+	   {
+		CleanupStack::PopAndDestroy(identity);
+	   }
+	delete iAuthTransaction;
+	iAuthTransaction = 0;
+    }
+
+/**
+ * Tells the authserver to cancel the current evaluation (i.e. call to
+ * the plugin)
+ *
+ * @see MEvaluatorPluginInterface::Evaluate
+ *
+ **/
+void CAuthServer::CancelEvaluate()
+	{
+	if (iAuthTransaction)
+		{
+		TPluginId pluginId = iAuthTransaction->LastPluginId();
+		CAuthPluginInterface* plugin = 0;
+		TRAPD(err, (plugin = iPluginMgr->PluginL(pluginId)));
+		if (err == KErrNone)
+		  {
+			plugin->Cancel();
+		  }
+		}
+	}
+
+
+/**
+ * @see MEvaluatorClientInterface::EvaluationFailed
+ **/
+void CAuthServer::EvaluationFailed(TInt aReason)
+	{
+	iAuthTransaction->Message().Complete(aReason);
+	delete iAuthTransaction;
+	iAuthTransaction = 0;
+	// there's nothing we can do here. Panic? 
+	TRAP_IGNORE(ClearPropertiesL());
+	}
+	  
+
+void CAuthServer::UpdateAuthL(TLastAuth& aAuth, TPluginId aPlugin)
+	{
+	CAuthPluginInterface* plugin = iPluginMgr->PluginL(aPlugin);
+
+	aAuth.iMaxCombinations =
+		Max(aAuth.iMaxCombinations, plugin->MinEntropy());
+	aAuth.iFalsePositiveRate =
+		Max(aAuth.iFalsePositiveRate, plugin->FalsePositiveRate());
+	aAuth.iFalseNegativeRate =
+		Max(aAuth.iFalseNegativeRate, plugin->FalseNegativeRate());
+	++aAuth.iNumFactors;
+	}
+
+
+/**
+ * Free all the uncompressable memory before the 
+ * heap mark is set/reset to get the OOM tests to pass.
+ **/
+void CAuthServer::FreeMemoryBeforeHeapMark()
+	{
+#ifdef _DEBUG
+	
+	if(iTrainingMgr)
+		{
+		delete iTrainingMgr;
+		iTrainingMgr = 0;
+		}
+
+	if(iPluginMgr)
+		{
+		delete iPluginMgr;
+		iPluginMgr = 0;
+		}
+	
+	if(iLastIdentity)
+		{
+		delete iLastIdentity;
+		iLastIdentity = 0;
+		}
+	
+	iAuthDb2->CloseDbFile();
+	
+	REComSession::FinalClose();
+	
+#endif
+	}
+
+
+/**
+ * Recreate all the variables deleted after the heap mark has 
+ * been set/reset.
+ **/
+void CAuthServer::SetupVariablesAfterHeapMarkEndL()
+	{
+#ifdef _DEBUG
+	
+	//Opening Db file.
+	TFileName dbName(KDbName);
+	dbName[0] = RFs::GetSystemDriveChar();
+	iAuthDb2->OpenDbFileL(iFs, dbName);
+	
+	//Creating plugin manager.
+	if(!iPluginMgr)
+		{
+		iPluginMgr  = CPluginMgr::NewL();
+		}
+	
+	//Creating training manager.
+	if(!iTrainingMgr)
+		{
+		 iTrainingMgr = new (ELeave) CTrainingMgr(*iPluginMgr, *iAuthDb2, *iAuthRepository);
+		}
+#endif	
+	}
+
+/**
+ * Things to be done before the heap mark is set/reset 
+ * during OOM testing
+ **/
+void CAuthServer::DoPreHeapMarkOrCheckL()
+	{
+#ifdef _DEBUG
+	FreeMemoryBeforeHeapMark();
+#endif
+	}
+
+/**
+ * Things to be done after the heap mark is set/reset 
+ * during OOM testing
+ **/
+void CAuthServer::DoPostHeapMarkOrCheckL()
+	{
+#ifdef _DEBUG
+	SetupVariablesAfterHeapMarkEndL();
+#endif
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/server/authserver.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,271 @@
+/*
+* Copyright (c) 2005-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: 
+* CAuthServer class definition
+*
+*/
+
+
+/**
+ @file 
+ @released
+ @internalComponent
+*/
+#ifndef AUTHSERVER_H
+#define AUTHSERVER_H
+
+#include <e32cmn.h>
+#include <ct/rcpointerarray.h>
+#include <e32property.h>
+#include <f32file.h>
+#include <scs/scsserver.h>
+#include "authserveripc.h"
+#include "authrepository.h"
+
+ 
+namespace AuthServer 
+{
+
+/**
+ *Panic values associated with the AuthServer
+ */
+enum TAuthServerPanic
+	{
+	EPanicCorruptDescriptor = 0,
+	/// An invalid service request number has been receieved by the
+	/// server. This should not be received by those using the RAuthClient or
+	/// derived classes.
+	EPanicInvalidFunction = 1,
+	
+	EPanicAlreadyReceiving = 2,
+	/// An internal error indicating the received authentication expression 
+	/// is malformed. This should not be received by those using the 
+	/// RAuthClient or derived classes.
+	EPanicBadExternalizedAuthExpr = 3,
+	/// A request has been made that refers to a non-existent plugin.
+	EPanicNoSuchAuthPlugin = 4,
+	/// In order to create a first identity, the authserver requires that 
+	/// at least one plugin supports default data. 
+	EPanicNoFirstStartPlugin = 5,
+	/// A call has been made to the authserver's training manager while one 
+	/// is already in progress.
+	EPanicTrainingMgrBusy = 6,
+	/// A plugin has reported that it supports default data but has returned
+	/// an invalid data buffer.
+	EPanicInvalidDefaultData = 7        
+	};
+
+const TInt KPolicyRanges= 12;
+const TInt KPolicyElements = 7;
+
+const TInt KDefaultShutdownDelay = 3 * 1000 * 1000;	// 3 seconds
+
+class CIdentity;
+
+class CPluginMgr;
+class CPluginObserver;
+class CTrainingMgr;
+class CEvaluator;
+class CAuthExpression;
+class CAuthTransaction;
+struct TLastAuth;
+
+// The description for the default identity.
+_LIT(KDefaultUserDescription, "DefaultUser");
+
+/**
+ * Helper class to manage details during identity reset operation
+ **/
+class TPluginResetDetails
+	{
+public:
+	TPluginResetDetails(TPluginId aPluginId, const TDesC& aRegistrationData):
+		iPluginId(aPluginId),
+		iRegistrationData(aRegistrationData)
+		{}
+
+public:
+	TPluginId PluginId() const { return iPluginId;};
+	const TDesC& RegistrationData() const { return iRegistrationData;};
+
+private:
+	TPluginId iPluginId;
+	const TDesC& iRegistrationData;
+	};
+
+
+/**
+ * Provides authentication and identity management services.
+ *
+ * A CPolicyServer derived class providing management of identity
+ * authentication services. Responsible for managing identities in accordance
+ * with the requests made by clients.
+ * 
+ **/
+class CAuthServer : public CScsServer, public MEvaluatorPluginInterface,
+    public MEvaluatorClientInterface
+	{
+public:
+	// implement CScsServer.
+	virtual CScsSession* DoNewSessionL(const RMessage2& aMessage);
+	
+
+	// implement CScsServer.
+	virtual void DoPreHeapMarkOrCheckL();
+	
+	// implement CScsServer.
+	virtual void DoPostHeapMarkOrCheckL();
+	
+
+	static CAuthServer* NewLC(CActive::TPriority = CActive::EPriorityStandard);
+
+	void AuthenticateL(const RMessage2& aMessage);
+	
+	void DeauthenticateL(const RMessage2& aMessage);
+	void CancelL(const RMessage2& aMessage);
+	void PluginsL(const RMessage2& aMessage);
+	void ActivePluginsL(const RMessage2& aMessage);
+	void PluginsByTypeL(const RMessage2& aMessage);
+	void PluginsByTrainingL(const RMessage2& aMessage);
+	void IdentitiesL(const RMessage2& aMessage);
+	void SetIdentityStringL(const RMessage2& aMessage);
+	void IdentityStringL(const RMessage2& aMessage);
+	void RegisterIdentityL(const RMessage2& aMessage);
+	void RemoveIdentityL(const RMessage2& aMessage);
+	void TrainPluginL(const RMessage2& aMessage);
+	void ForgetPluginL(const RMessage2& aMessage);
+	void PreferredTypePluginL(const RMessage2& aMessage);
+	void SetPreferredTypePluginL(const RMessage2& aMessage);
+	void IdentitiesWithStringL(const RMessage2& aMessage);
+	void ListAuthAliasesL(const RMessage2& aMessage);
+	void ResolveExpressionL(const RMessage2& aMessage);
+	void ResetIdentityL(TInt aFunction, const RMessage2& aMessage);
+	void ResetIdentityByListL(const RMessage2& aMessage);
+
+	virtual void Evaluate(TPluginId aPluginId,
+						  TIdentityId& aIdentityId,
+						  CAuthExpressionImpl::TType aType,
+						  TRequestStatus& aStatus);
+	
+	virtual void Evaluate(TAuthPluginType aPluginType,
+						  TIdentityId& aIdentityId,
+						  CAuthExpressionImpl::TType aType,
+						  TRequestStatus& aStatus);
+
+	virtual void CancelEvaluate(); 
+	virtual void EvaluationSucceeded(TIdentityId aIdentityId);
+	virtual void EvaluationFailed(TInt aReason);
+
+private:
+	
+	CAuthServer(CActive::TPriority aPriority);
+
+	/// 2nd phase construction
+	void ConstructL();
+	
+	~CAuthServer();
+
+    CIdentity* CachedIdentity(const TTimeIntervalSeconds& timeout);						   
+
+	TBool FilterActivePlugins(const CAuthPluginInterface& aInterface);
+
+	void FirstStartL();
+	void CreatePropertiesL();
+	void ClearPropertiesL();
+
+	TBool ServerBusy();
+	
+	void EvaluationSucceededL(TIdentityId aIdentityId) ;
+	void CompleteAuthenticationL(const RMessagePtr2& aMessage, CIdentity* aId);
+
+	typedef TBool (CAuthServer::* TInterfaceFilter)(const CAuthPluginInterface&);
+	
+	void FilterPluginsL(
+		const RMessage2& aMessage, TInterfaceFilter aFilter);
+	
+	void GetDescriptionsFromEComLC(
+		TInterfaceFilter aFilter, RCPointerArray<const CPluginDesc>& aDescs);
+	
+	TBool FilterAllPlugins(const CAuthPluginInterface&);
+	TBool FilterPluginsByType(const CAuthPluginInterface&);
+	TBool FilterPluginsByTraining(const CAuthPluginInterface& aInterface);
+
+	void UpdateAuthL(TLastAuth& aAuth, TPluginId aPlugin);
+	
+	HBufC* StringOrNullLC(TBool aReturnString, TIdentityId id);
+
+	void EvaluateL(TPluginId aPluginId,
+				   TIdentityId& aIdentityId,
+				   CAuthExpressionImpl::TType aType,
+				   TRequestStatus& aStatus);
+	
+	void ProcessAliasStringL(RPointerArray<HBufC>& aAuthAliasList, const TDesC& aAliasStringToProcess , RBuf& aResultantAliasString);
+	
+	TBool CheckForAliasInAliasString(RPointerArray<HBufC>& aAuthAliasList, const TDes& aAliasString);
+	CTransientKeyInfo* CreateKeyInfoLC(TPluginId aPluginId, const TDesC8& aPluginData, const CProtectionKey& aProtKey);
+	TCustomResult CustomSecurityCheckL(const RMessage2& aMsg, 
+		TInt& aAction, TSecurityInfo& aMissing);
+	void TokenizeStringL( const TDesC& aStringToBeProcessed, RBuf& aResultantString );
+	void ResolveAliasL(	const TDesC& aAliasName, 
+						RPointerArray<HBufC>& aAliasList, 
+						RBuf& aResultantString);
+	
+
+	void FreeMemoryBeforeHeapMark();
+	void SetupVariablesAfterHeapMarkEndL();
+
+private:
+	RFs iFs;
+	/// The persistent authentication database
+	CAuthDb2*  iAuthDb2;
+	//plugin manager
+	CPluginMgr* iPluginMgr;
+	// The training manager 
+	CTrainingMgr* iTrainingMgr;
+	/// the auth expression evaluator
+	CEvaluator* iEvaluator;
+	/// the last authenticated identity
+	CIdentity* iLastIdentity;
+	/// the last authentication time
+	TTime iLastAuthTime;
+	/// holds the information about the authentication taking place
+	CAuthTransaction* iAuthTransaction;
+	/// used to publish information about the last authentication 
+	RProperty iAuthProperty;
+	/// used to notify subscribers of changes to the authenticated identity
+	RProperty iAuthEventProperty;
+	/// The authentication repository
+	CAuthRepository* iAuthRepository;
+	/// The key size to be used for protection keys
+	TInt iKeySize;
+	/// The parameters from the IPC Call
+	CAuthParams* iParams;
+	
+	
+	TAuthTrainingStatus iFilterTraining;
+	TAuthPluginType iFilterType;
+	CPluginObserver* iPluginObserver;
+	
+	// Server Policies
+	static const TUint iRangeCount;
+	static const TInt iRanges[KPolicyRanges];
+	static const TUint8 iElementsIndex[KPolicyRanges];
+	static const CPolicyServer::TPolicyElement iPolicyElements[KPolicyElements];
+	static const CPolicyServer::TPolicy iPolicy;
+	static const TStaticSecurityPolicy iPropertyWritePolicy;
+	static const TStaticSecurityPolicy iPropertyReadPolicy;
+	};
+} //namespace
+
+#endif // AUTHSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/server/authserver_impl.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2005-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: 
+* This header file includes other header files which
+* are required to build the authentication server.
+*
+*/
+
+
+/**
+ @file 
+ @internalTechnology
+*/
+
+#ifndef SERVER_AUTHSERVER_H
+#define SERVER_AUTHSERVER_H
+
+#include <authserver/authplugininterface.h>
+#include <authserver/auth_srv_errs.h>
+#include "authcommon_impl.h"
+#include "arrayutils.h"
+#include "encryptedprotectionkey.h"
+#include "transientkey.h"
+#include "transientkeyinfo.h"
+#include "authdb.h"
+#include "evaluator.h"
+#include "authserver.h"
+#include "authserversession.h"
+#include "pluginmgr.h"
+#include "pluginobserver.h"
+#include "trainingmgr.h"
+
+#endif	// #ifndef SERVER_AUTHSERVER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/server/authserversession.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,196 @@
+/*
+* Copyright (c) 2005-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: 
+* authserverserversession.cpp
+* CAuthserverSession class implementation
+*
+*/
+
+
+/**
+ @file 
+*/
+
+#include "authserver_impl.h"
+#include "log.h"
+
+using namespace AuthServer;
+
+void CAuthServerSession::PanicClient(const RMessagePtr2& aMessage,
+									 TAuthServerPanic aPanic)
+	{
+	aMessage.Panic(KAuthServerShortName, aPanic);
+	}
+
+//
+// 2nd phase construct for sessions - called by the CServer framework
+//
+void CAuthServerSession::CreateL()
+	{
+	iAuthServer =
+	  static_cast<CAuthServer*>(const_cast<CServer2*>(CSession2::Server()));
+	}
+CAuthServerSession* CAuthServerSession::NewL(CAuthServer &aServer)
+/**
+	Factory function allocates new instance of CAuthServerSession.
+
+	@return					New, initialized instance of CAuthServerSession
+							which is owned by the caller.
+ */
+	{
+	CAuthServerSession* self = new(ELeave) CAuthServerSession(aServer);
+	CleanupStack::PushL(self);
+	self->ConstructL();			// CScsSession implementation
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CAuthServerSession::CAuthServerSession(CAuthServer &aServer)
+/**
+	This private constructor prevents direct instantiation.
+ */
+ :	CScsSession(aServer)
+	{
+	// empty.
+	}
+
+
+CAuthServerSession::~CAuthServerSession()
+	{
+	}
+
+//
+// Handle a client request.
+// Leaving is handled by CAuthServer::ServiceError() which reports
+// the error code to the client
+//
+TBool CAuthServerSession::DoServiceL(TInt aFunction, const RMessage2& aMessage)
+/**
+	Implement CScsSession by handling the supplied message.
+
+	Note the subsession creation command is automatically sent to
+	DoCreateSubsessionL, and not this function.
+
+	@param	aFunction		Function identifier without SCS code.
+	@param	aMessage		Standard server-side handle to message.	 Not used.
+ */
+	{
+	TAuthServerMessages func = static_cast<TAuthServerMessages>(aFunction);
+	
+	switch (func)
+		{
+    case EAuthenticate:
+        iAuthServer->AuthenticateL(aMessage);
+        break;
+    case ECancel:
+		iAuthServer->CancelL(aMessage);
+		break;
+	case EPlugins:
+		iAuthServer->PluginsL(aMessage);
+		break;
+	case EActivePlugins:
+		iAuthServer->ActivePluginsL(aMessage);
+		break;
+	case EPluginsByType:
+		iAuthServer->PluginsByTypeL(aMessage);
+		break;
+	case EPluginsByTraining:
+		iAuthServer->PluginsByTrainingL(aMessage);
+		break;
+	case EIdentities:
+		iAuthServer->IdentitiesL(aMessage);
+		break;
+	case EIdentityString:
+		iAuthServer->IdentityStringL(aMessage);
+		break;
+	case ESetIdentityString:
+		iAuthServer->SetIdentityStringL(aMessage);
+		break;
+	case ERegisterIdentity:
+		iAuthServer->RegisterIdentityL(aMessage);
+		break;
+	case ERemoveIdentity:
+		iAuthServer->RemoveIdentityL(aMessage);
+		break;
+	case ETrainPlugin:
+		iAuthServer->TrainPluginL(aMessage);
+		break;
+	case EForgetPlugin:
+		iAuthServer->ForgetPluginL(aMessage); 
+		break;
+    case EDeauthenticate:
+		iAuthServer->DeauthenticateL(aMessage);
+		break;
+	case EGetAuthPreferences:
+		iAuthServer->PreferredTypePluginL(aMessage);
+	    break;
+	case ESetAuthPreferences:
+		iAuthServer->SetPreferredTypePluginL(aMessage);
+		break;
+	case EIdentitiesWithString:
+		iAuthServer->IdentitiesWithStringL(aMessage);
+		break;
+	case EListAuthAliases:
+		iAuthServer->ListAuthAliasesL(aMessage);
+		break;
+	case EResolveExpression:
+		iAuthServer->ResolveExpressionL(aMessage);
+		break;
+	case EResetIdentity:
+	case EResetIdentityByType:
+		iAuthServer->ResetIdentityL(aFunction, aMessage);
+		break;
+	case EResetIdentityByList:
+		iAuthServer->ResetIdentityByListL(aMessage);
+		break;
+	default:
+		PanicClient(aMessage,EPanicInvalidFunction);
+		break;
+		}
+	return EFalse;
+	}
+
+//
+// Handle an error from CAuthServerSession::ServiceL()
+// A bad descriptor error implies a badly programmed client, so panic it;
+// otherwise use the default handling (report the error to the client)
+//
+void CAuthServerSession::ServiceError(const RMessage2& aMessage, TInt aError)
+	{
+	TBool panicClient = ETrue;
+	TAuthServerPanic cliPanicReason = EPanicCorruptDescriptor;	//Init
+	
+	switch (aError)
+		{
+	case KErrBadDescriptor:
+		cliPanicReason = EPanicCorruptDescriptor;
+		break;
+	
+	case KErrAuthServInvalidInternalizeExpr:
+		cliPanicReason = EPanicBadExternalizedAuthExpr;
+		break;
+	case KErrAuthServNoSuchPlugin:
+		cliPanicReason = EPanicNoSuchAuthPlugin;
+		break;
+	
+	default:
+		panicClient = EFalse;
+		}
+	DEBUG_PRINTF3(_L8("Error in CAuthServerSession %d, func %d"), aError, aMessage.Function());
+
+	if (panicClient)
+		PanicClient(aMessage, cliPanicReason);
+	else
+		CScsSession::ServiceError(aMessage, aError);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/server/authserversession.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2005-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: 
+* CAuthServerSession class definition
+*
+*/
+
+
+/**
+ @file 
+ @released
+ @internalComponent
+*/
+#ifndef AUTHSERVERSESSION_H
+#define AUTHSERVERSESSION_H
+
+#include "authserver.h"
+#include <authserver/auth_srv_errs.h>
+#include <scs/scsserver.h>
+
+namespace AuthServer
+{
+
+/**
+ * This enum is used to make IPC indexes used as arguments in function calls
+ * less obscure.
+ * @internalComponent
+ * @released
+ */
+enum TIpcIndexes
+	{
+	EIpcArgument0 = 0,  ///< IPC indexes arguments 0
+	EIpcArgument1,      ///< IPC indexes arguments 1
+	EIpcArgument2,      ///< IPC indexes arguments 2
+	EIpcArgument3       ///< IPC indexes arguments 3
+	};
+
+
+/**
+ * @internalComponent
+ * @released
+ */
+class CAuthServerSession : public CScsSession
+	{
+public:
+	void CreateL();
+	static CAuthServerSession* NewL(CAuthServer &aServer);
+private:
+	~CAuthServerSession();
+	
+	/**
+	 * Handle a client request.
+	 * Leaving is handled by CAuthServer::ServiceError() which reports
+	 * the error code to the client
+	 **/
+	TBool DoServiceL(TInt aFunction, const RMessage2& aMessage);
+	
+	/**
+	 * Handle an error from CAuthServerSession::ServiceL().
+	 * A bad descriptor error implies a badly programmed client, so panic it;
+	 * otherwise use the default handling (report the error to the client)
+	 **/
+	void ServiceError(const RMessage2& aMessage,TInt aError);
+
+ 	void PanicClient(const RMessagePtr2& aMessage, TAuthServerPanic aPanic);
+
+ 	CAuthServerSession(CAuthServer &aServer);
+ 	
+	CAuthServer* iAuthServer; 
+	};
+	
+	
+} //namespace
+
+#endif // AUTHSERVERSESSION_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/server/authtransaction.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,93 @@
+/*
+* Copyright (c) 2005-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: 
+* CAuthTransaction implementation
+*
+*/
+
+
+/**
+ @file 
+*/
+
+#include <s32file.h>
+#include <s32mem.h>
+#include "authtransaction.h"
+#include "authexpression_impl.h"
+#include "authserveripc.h"
+
+using namespace AuthServer;
+
+
+CAuthTransaction* CAuthTransaction::NewL(const RMessage2& aMsg,
+										 TBool aClientKey, 
+										 TInt aClientSid,
+										 TBool aWithString,
+									 	 const TDesC& aClientMessage,
+									 	 const CAuthExpressionImpl* aExpr)
+	{
+	CAuthTransaction* me =
+		new (ELeave) CAuthTransaction(aMsg, aClientKey, aClientSid, aWithString,
+									  aClientMessage, aExpr);
+	return me;
+	}
+	
+
+CAuthTransaction::CAuthTransaction(const RMessage2& aMsg, TBool aClientKey, 
+									TInt aClientSid, TBool aWithString,
+									 const TDesC& aClientMessage, const CAuthExpressionImpl* aExpr) :
+	iMsg(aMsg), iClientKey(aClientKey),
+	iClientSid(aClientSid), iWithString(aWithString),
+	iClientMessage(aClientMessage),	iExpr(aExpr)
+	{
+	 
+	if(iClientSid == 0)
+		{
+		iClientSid = iMsg.SecureId();
+		}
+	}
+	
+HBufC8*& CAuthTransaction::AddPluginL(TPluginId& aPluginId,
+									 TIdentityId& aIdentityId)
+	{
+	TPluginResult* result  = new (ELeave) TPluginResult;
+	CleanupStack::PushL(result);
+	
+	Mem::FillZ(result, sizeof(TPluginResult));
+	result->iPlugin = aPluginId;
+	result->iId = &aIdentityId;
+	iRecords.AppendL(result);
+	CleanupStack::Pop(result);
+	return result->iData;
+	}
+
+
+TPluginId CAuthTransaction::LastPluginId() const
+	{
+	return iRecords[iRecords.Count()-1]->iPlugin; 
+	}
+	
+CAuthTransaction::~CAuthTransaction()
+	{
+	delete iExpr;
+	TInt count = iRecords.Count();
+	for (TInt i = 0 ; i < count ; ++i)
+	    {
+		delete iRecords[i]->iData;
+		delete iRecords[i];
+	    }
+	
+	iRecords.Close();
+	
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/server/authtransaction.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,109 @@
+/*
+* Copyright (c) 2005-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: 
+* CAuthTransaction class definition
+*
+*/
+
+
+/**
+ @file 
+ @released
+ @internalComponent
+*/
+#ifndef AUTHTRANSACTION_H
+#define AUTHTRANSACTION_H
+
+#include <e32cmn.h>
+#include <e32base.h>
+#include "authserver/authtypes.h"
+
+namespace AuthServer 
+{
+
+class CAuthExpressionImpl;
+
+/**
+ * This class holds state information about the current asynchronous
+ * authentication taking place.
+ **/
+class CAuthTransaction : public CBase
+	{
+public:
+	struct TPluginResult
+		{
+		TPluginId iPlugin;
+		TIdentityId* iId;		
+		HBufC8* iData;
+	    }; 
+
+	typedef RPointerArray<TPluginResult> RResultArray;
+	
+	static CAuthTransaction* NewL(const RMessage2& aMsg,
+								  TBool aClientKey, TInt aClientSid,
+								  TBool aWithString, const TDesC& aClientMessage,
+								  const CAuthExpressionImpl* aExpr);
+	
+	HBufC8*& AddPluginL(TPluginId& aPluginId,
+						TIdentityId& aIdentityId);
+					   
+	const RMessagePtr2& Message() { return iMsg; }
+
+	RResultArray& Results() { return iRecords; }
+	
+	TBool ClientKey() { return iClientKey; }
+
+	TBool WithString() { return iWithString; }
+	
+	TInt ClientSid()  { return iClientSid;	}
+
+	const HBufC* ClientMessage() {return static_cast<const HBufC*>(&iClientMessage); }
+
+	TPluginId LastPluginId() const;
+	
+	~CAuthTransaction();
+	
+private:
+
+	CAuthTransaction(const RMessage2& aMsg, TBool aClientKey, TInt aClientSid,
+					 TBool aWithString, const TDesC& aClientMessage,
+					 const CAuthExpressionImpl* aExpr);
+					 
+	void ConstructL(const RMessage2& aMessage);
+	
+	/// the message to complete at the end
+    const RMessagePtr2         iMsg;
+    
+	/// are we returning a client key?
+	TBool                      iClientKey;
+	   
+	TInt					   iClientSid;
+       
+	/// are we returning a client key?
+	TBool                      iWithString;
+	
+    /// the displayable text string to the plugin
+    const TDesC&              	iClientMessage;
+    
+	// the authentication expression being used
+	const CAuthExpressionImpl* iExpr;
+	
+	/// A list of results returned by each plugin called
+    RResultArray               iRecords;
+    
+    };
+
+} //namespace
+
+#endif // AUTHTRANSACTION_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/server/encryptedprotectionkey.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2005-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: 
+* CEncryptedProtectionKey implementation
+*
+*/
+
+
+/**
+ @file 
+*/
+
+#include "authserver_impl.h"
+
+
+using namespace AuthServer;
+
+CEncryptedProtectionKey* CEncryptedProtectionKey::NewL(HBufC8* aKeyData)
+	{
+	CEncryptedProtectionKey*  key =
+	  CEncryptedProtectionKey::NewLC(aKeyData);
+	CleanupStack::Pop(key);
+	return key;
+	}
+
+CEncryptedProtectionKey* CEncryptedProtectionKey::NewLC(HBufC8* aKeyData)
+	{
+	CEncryptedProtectionKey*  key = new (ELeave) CEncryptedProtectionKey();
+	CleanupStack::PushL(key);
+	key->ConstructL(aKeyData);
+	return key;
+	}
+
+void CEncryptedProtectionKey::ConstructL(HBufC8* aKeyData)
+	{
+	iKeyData = aKeyData;
+    }
+
+CEncryptedProtectionKey::~CEncryptedProtectionKey()
+	{
+	delete iKeyData;
+	}
+
+void CEncryptedProtectionKey::InternalizeL(RReadStream& aSrcData)
+	{
+	iKeyData = HBufC8::NewL(aSrcData, aSrcData.Source()->SizeL()); 
+	}
+
+
+void CEncryptedProtectionKey::ExternalizeL(RWriteStream& aDest) const
+	{
+	aDest << *iKeyData;
+	}
+
+	
+TPtrC8 CEncryptedProtectionKey::KeyData() const
+    {
+        return *iKeyData;
+    }
+
+CEncryptedProtectionKey* CEncryptedProtectionKey::NewL(RReadStream& aSrcData)
+	{
+	CEncryptedProtectionKey* key = NewLC(aSrcData);
+	CleanupStack::Pop(key);
+	return key;
+	}
+
+CEncryptedProtectionKey* CEncryptedProtectionKey::NewLC(RReadStream& aSrcData)
+	{
+	CEncryptedProtectionKey* key = new (ELeave) CEncryptedProtectionKey();
+	CleanupStack::PushL(key);
+	key->InternalizeL(aSrcData);
+	return key;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/server/encryptedprotectionkey.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2005-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: 
+* CEncryptedProtectionKey declaration
+*
+*/
+
+
+/**
+ @file 
+ @released
+ @internalComponent
+*/
+
+#ifndef ENCRYPTEDPROTECTIONKEY_H
+#define ENCRYPTEDPROTECTIONKEY_H
+
+#include "authcommon_impl.h"
+
+namespace AuthServer
+{
+
+/**
+ * CEncryptedProtectionKey containst the encrypted version of an identity's
+ * protection key.  Encrypted protection keys are generated via the
+ * CTransientKey class and are stored on the device, unlike the raw
+ * protection key data.
+ */
+class CEncryptedProtectionKey : public CBase
+	{
+public:	
+
+	/**
+	 * Creates a new encrypted key, passing in the encrypted key data. Should
+	 * really only be called by a CTransientKey::EncryptL. The new object
+	 * assumes ownership of the data.
+	 *
+	 * @param aKeyData the data to use as the encrypted key
+	 **/
+	static CEncryptedProtectionKey* NewL(HBufC8* aKeyData);
+	
+	/**
+	 * Creates a new encrypted key, passing in the encrypted key data. Should
+	 * really only be called by a CTransientKey::EncryptL
+	 *
+	 * @param aKeyData the data to use as the encrypted key
+	 **/
+	static CEncryptedProtectionKey* NewLC(HBufC8* aKeyData);
+	
+	/**
+	 * Internalize a persisted key  from the stream.
+	 * @param aSrcData the source data
+	 **/
+	static CEncryptedProtectionKey* NewL(RReadStream& aSrcData);	
+
+	/**
+	 * Internalize a persisted key from the stream.
+	 * @param aSrcData the source data
+	 **/
+	static CEncryptedProtectionKey* NewLC(RReadStream& aSrcData);
+
+	/**
+	 * Returns a descriptor to the encrypted key data
+	 *
+	 * @return a descriptor pointing to the encrypted key data. 
+	 **/
+	TPtrC8 KeyData() const;
+
+	/**
+	 * Writes the key data to the specified write stream. The key can be
+	 * recreated using the appropriate NewL member.
+	 *
+	 * @param aDest the destination write stream.
+	 *
+	 **/
+	void ExternalizeL(RWriteStream& aDest) const;
+	
+	~CEncryptedProtectionKey();
+
+private:
+	void ConstructL(HBufC8* aKeyData);
+	void InternalizeL(RReadStream& aSrcData);
+
+	HBufC8* iKeyData;
+    };
+
+}
+
+#endif // ENCRYPTEDPROTECTIONKEY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/server/evaluator.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,410 @@
+/*
+* Copyright (c) 2005-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 "authserver_impl.h"
+
+
+using namespace AuthServer;
+
+const CAuthExpressionImpl::TType CEvaluator::KAnd = CAuthExpressionImpl::EAnd;
+const CAuthExpressionImpl::TType CEvaluator::KOr = CAuthExpressionImpl::EOr;
+const TInt CEvaluator::KRPNGranularity = 4;
+
+// -------- (de)allocation --------
+
+
+CEvaluator* CEvaluator::NewL(MEvaluatorPluginInterface* aPluginInterface, MEvaluatorClientInterface* aClientInterface)
+/**
+	Factory function allocates and initializes new
+	instance of CEvaluator.
+	
+	@param	aPluginInterface	Used to invoke plugins.
+	@param	aClientInterface	Used to notify clients when
+								an evaluation has completed.
+ */
+	{
+	CEvaluator* ev = new(ELeave) CEvaluator(aPluginInterface, aClientInterface);
+	CleanupStack::PushL(ev);
+	ev->ConstructL();
+	CleanupStack::Pop(ev);
+	return ev;
+	}
+
+
+CEvaluator::CEvaluator(MEvaluatorPluginInterface* aPluginInterface, MEvaluatorClientInterface* aClientInterface)
+/**
+	Constructor records the supplied plugin and client interfaces.
+	
+	@param	aPluginInterface	Used to invoke plugins.
+	@param	aClientInterface	Used to notify clients when
+								an evaluation has completed.
+ */
+:	CActive(CActive::EPriorityStandard),
+	iPluginInterface(aPluginInterface),
+	iClientInterface(aClientInterface)
+//	,iRpnStack(0)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+
+void CEvaluator::ConstructL()
+/**
+	Allocate resources (i.e. RPN stack) used by
+	this object throughout its lifetime.
+ */
+	{
+	iRpnStack = new(ELeave) CArrayFixFlat<TIdentityId>(KRPNGranularity);
+	}
+
+
+CEvaluator::~CEvaluator()
+/**
+	Free any resources (i.e. RPN stack) successfully
+	allocated by this object.
+ */
+	{
+	Cancel();
+	delete iRpnStack;
+	}
+
+
+// -------- evaluation --------
+
+
+void CEvaluator::Evaluate(const CAuthExpressionImpl* aExpr)
+/**
+	Evaluate the current expression.  This finds
+	the leftmost leaf node from the supplied expression
+	and calls the appropriate plugin.
+ */
+	{
+	__ASSERT_DEBUG(!IsActive(),
+					Panic(EBusy));	
+	// iterate through left branches until find
+	// a leaf node
+	
+	while (aExpr->Type() == KAnd || aExpr->Type() == KOr)
+		{
+		aExpr = aExpr->Left();
+		}
+	
+	iCurrentNode = aExpr;
+	
+	if (aExpr->Type() == CAuthExpressionImpl::EPluginId)
+		iPluginInterface->Evaluate(aExpr->PluginId(), iIdentity, aExpr->Type(), iStatus);
+	else if (aExpr->Type() == CAuthExpressionImpl::ENull)
+		{
+		iPluginInterface->Evaluate(0, iIdentity, aExpr->Type(), iStatus);
+		}
+	else /* aExpr->Type() == CAuthExpression::EPluginType */
+		iPluginInterface->Evaluate(aExpr->PluginType(), iIdentity, aExpr->Type(), iStatus);
+	SetActive();
+	}
+
+
+void CEvaluator::RunL()
+/**
+	Implement CActive by recording the identity
+	returned by the plugin.  If the individual
+	plugin failed then fail the entire evaluation.
+ */
+	{
+	switch (iStatus.Int())
+	    {
+	    case KErrAuthServPluginNotActive:
+	        // don't break
+	    case KErrAuthServPluginCancelled:
+	        iIdentity = KUnknownIdentity;
+	        // don't break
+	    case KErrNone:
+	        EvaluatedNode(iIdentity);
+    		break;
+    	default: 
+    	    NotifyClientFailed(iStatus.Int());
+    	    break;
+	    }
+	}
+
+
+void CEvaluator::DoCancel()
+/**
+	Implement CActive.  This function does not
+	currently do anything.
+ */
+	{
+	iPluginInterface->CancelEvaluate();
+
+	NotifyClientFailed(KErrCancel);
+	}
+
+void CEvaluator::EvaluatedNode(TIdentityId aIdentity)
+/**
+	This function is called when the plugin has
+	returned an identity.
+	
+	If it is a root node then complete the client request.
+
+	If it is a left node, then push the identity on the
+	RPN stack and evaluate the right node.
+	
+	If it is a right node then combine it with the stacked
+	left result using the parent node's operator.
+ */
+	{
+	CAuthExpressionImpl* parent = iCurrentNode->Parent();
+	
+	// If parent node complete client request.
+	// This path is only used if the expression contains
+	// a single leaf node.  If the root node is complex
+	// then EvaluateCompound() calls HaveFinalResult().
+	if (parent == 0)
+		{
+		__ASSERT_DEBUG(RpnDepth() == 0, Panic(EENRpnStackNonZero));
+		NotifyClientSucceeded(aIdentity);
+		}
+	// if left node then push identity and evaluate sibling
+	else
+		{	
+		if (! PushIdentity(aIdentity))
+			NotifyClientFailed(KErrNoMemory);
+		else
+			{
+			const CAuthExpressionImpl* rhsExpr = parent->Right();
+			// if just evaluated RHS then compound result
+			if (rhsExpr == iCurrentNode)
+				{
+				EvaluateCompound(parent);
+				}
+			else if ( 	(aIdentity == KUnknownIdentity && parent->Type() == KAnd) || 
+						(aIdentity != KUnknownIdentity && parent->Type() == KOr)
+					)
+				{
+				if (! PushIdentity(aIdentity))
+					NotifyClientFailed(KErrNoMemory);
+				else
+					EvaluateCompound(parent);
+				}
+			// can't be short-circuited so evaluate RHS
+			else
+				{
+				Evaluate(rhsExpr);
+				}
+			}	// else (! PushIdentity(aIdentity))
+		}
+	}
+
+
+void CEvaluator::EvaluateCompound(const CAuthExpressionImpl* aParent)
+/**
+	This function is called by EvaluatedNode when
+	both the left and right identities are on the
+	RPN stack.
+	
+	Those two values are replaced with a single value
+	from the combining operator.
+ */
+	{
+	__ASSERT_DEBUG(RpnDepth() >= 2, Panic(EECRpnStackTooLow));
+	TIdentityId rhs = PopIdentity();
+	TIdentityId& lhs = LastIdentity();	// replace this with result
+	
+	switch (aParent->Type())
+		{
+	case KAnd:
+		// unknown if left and right don't match.
+		// These are both unknown for short-circuit.
+		if (lhs != rhs)
+			lhs = KUnknownIdentity;
+		break;
+	
+	case KOr:
+		// only take right value if left unknown.
+		// Both same non-unknown for short-circuit.
+		if (lhs == KUnknownIdentity)
+			lhs = rhs;
+		break;
+	
+	default:
+		__ASSERT_DEBUG(EFalse, Panic(EECBadParentType));
+		break;
+		}
+	
+	// combine the parent complex node with _its_ sibling
+	CAuthExpressionImpl* parent2 = aParent->Parent();
+
+	// if parent2 is the root node, then complete the client request
+	if (parent2 == 0)
+		{
+		__ASSERT_DEBUG(RpnDepth() == 1, Panic(EECRpnStackNotOneAtRoot));
+		// reset stack after notifying client because
+		// lhs is a reference to the top (only) item.
+		NotifyClientSucceeded(lhs);
+		}
+	
+	// if parent is parent2's left node then evaluate parent's right
+	// sibling.  At this point parent's result is on the stack.
+	else if (parent2->Left() == aParent)
+		{
+		// (lhs == unknown && type == AND) || (lhs != unknown && type == OR)
+		if ((lhs == KUnknownIdentity) == (parent2->Type() == KAnd))
+			{
+			if (! PushIdentity(lhs))
+				NotifyClientFailed(KErrNoMemory);
+			else
+				EvaluateCompound(parent2);
+			}
+		
+		else
+			Evaluate(parent2->Right());
+		}
+	
+	// parent must have been parent2's right child so combine
+	// its result with its left sibling.
+	else
+		{
+		__ASSERT_DEBUG(parent2->Right() == aParent, Panic(EECBadRightParent));
+		EvaluateCompound(parent2);
+		}
+	}
+
+
+// -------- client notification --------
+
+
+void CEvaluator::NotifyClientSucceeded(TIdentityId aIdentityId)
+/**
+	Notify the client that the evaluation has completed
+	successfully, and free the RPNStack.
+	
+	@param	aIdentityId		Identified user.  This can be KUnknownIdentity.
+ */
+	{
+	iClientInterface->EvaluationSucceeded(aIdentityId);
+	ResetRpnStack();
+	}
+
+
+void CEvaluator::NotifyClientFailed(TInt aReason)
+/**
+	Notify the client that the evaluation has failed
+	and free the RPN stack.
+	
+	@param	aReason			Symbian OS error code.
+ */
+	{
+	iClientInterface->EvaluationFailed(aReason);
+	ResetRpnStack();
+	}
+
+
+// -------- RPN stack --------
+
+
+TBool CEvaluator::PushIdentity(TIdentityId aIdentity)
+/**
+	Append the supplied entity to the RPN stack.
+	
+	@param	aIdentity		Function to append to the RPN stack.
+	@return					zero if could not append the item,
+							i.e. OOM, non-zero otherwise.
+ */
+	{
+	TRAPD(r, iRpnStack->AppendL(aIdentity));
+	return r == KErrNone;
+	}
+
+
+TIdentityId CEvaluator::PopIdentity()
+/**
+	Remove the last identity from the RPN stack
+	and return it.
+	
+	@return					The identity which was the last
+							item on the RPN stack when this
+							function was called.
+	@pre The RPN stack contains at least one identity.
+ */
+	{
+	TInt lastIndex = iRpnStack->Count() - 1;
+	TIdentityId id = iRpnStack->At(lastIndex);
+	
+	// This function will not leave because the array
+	// if not being grown.  It is only trapped to satisfy
+	// leavescan.
+	
+	TRAP_IGNORE(iRpnStack->ResizeL(lastIndex));
+	return id;
+	}
+
+
+TIdentityId& CEvaluator::LastIdentity()
+/**
+	Return a reference to the last item on the
+	RPN stack.  This function is defined so
+	ReplaceComplexIdentity() can efficiently
+	put a result on the RPN stack without reallocating.
+	
+	@return					Reference to last item on the RPN stack.
+	@pre The RPN stack contains at least one identity.
+ */
+	{
+	TInt lastIndex = iRpnStack->Count() - 1;
+	return iRpnStack->At(lastIndex);	
+	}
+
+
+void CEvaluator::ResetRpnStack()
+/**
+	Clear the RPN stack.
+ */
+	{
+	iRpnStack->Reset();
+	}
+
+
+#ifdef _DEBUG
+
+
+TInt CEvaluator::RpnDepth() const
+/**
+	Returns the depth of the RPN stack.  This is
+	defined for debug builds only to ensure the
+	stack depth is within an acceptable range.
+ */
+	{
+	return iRpnStack->Count();
+	}
+
+
+void CEvaluator::Panic(CEvaluator::TPanic aPanic)
+/**
+	Halt the current thread with the category "AUTHEVAL"
+	and the supplied reason.
+	
+	@param	aPanic			Panic reason.
+ */
+	{
+	_LIT(KPanicCat, "AUTHEVAL");
+	User::Panic(KPanicCat, aPanic);
+	}
+
+
+#endif	// #ifdef _DEBUG
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/server/evaluator.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,211 @@
+/*
+* Copyright (c) 2005-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: 
+* Evaluator mix-in classes implementation
+*
+*/
+
+
+/**
+ @file 
+ @released
+ @internalComponent 
+*/
+ 
+#ifndef AUTHSERVER_EVALUATOR_H
+#define AUTHSERVER_EVALUATOR_H
+
+#include "authexpression_impl.h"
+
+namespace AuthServer {
+
+class MEvaluatorPluginInterface
+/**
+	CEvaluator uses this interface to invoke a plugin,
+	which can be specified by type or ID.
+	
+	@see CEvaluator
+ */
+	{
+public:
+	/**
+		Invoke the specified plugin and record the identity
+		which was returned.
+		
+		@param	aPluginId		Plugin to use.
+		@param	aIdentityId		On successful completion this
+								object is set to the returned
+								identity.
+		@param	aType			The type of plugin represented 
+								by this instance.						
+		@param	aStatus			On completion (successful or
+								otherwise) this object is
+								completed with the error code.
+	 */
+	virtual void Evaluate(TPluginId aPluginId, TIdentityId& aIdentityId, 
+						  CAuthExpressionImpl::TType aType, TRequestStatus& aStatus) = 0;
+
+	/**
+	    Cancel the plugin currently being invoked.
+	 **/
+	virtual void CancelEvaluate() = 0;
+	
+	/**
+		Invoke a plugin of the requested type and record
+		the identity which was returned.
+		
+		@param	aPluginType		Type of plugin to use.  The
+								implementation maps this to a
+								single, specific plugin.
+		@param	aIdentityId		On successful completion this
+								object is set to the returned
+								identity.
+		@param	aType			The type of plugin represented 
+								by this instance.						
+		@param	aStatus			On completion (successful or
+								otherwise) this object is
+								completed with the error code.
+	 */
+	virtual void Evaluate(TAuthPluginType aPluginType, TIdentityId& aIdentityId, 
+						  CAuthExpressionImpl::TType aType, TRequestStatus& aStatus) = 0;
+	};
+
+class MEvaluatorClientInterface
+/**
+	CEvaluator uses this interface to notify the server
+	when an evaluation has finished, successfully or otherwise.
+	
+	The server implements this interface to notify
+	the client that the authentication request has
+	completed.
+ */
+	{
+public:
+	/**
+		This function is called by the evaluator when it
+		has successfully parsed and evaluated an expression.
+		
+		In this context, successful means there were no
+		errors in running the plugins, or otherwise in
+		evaluating the expression, such as OOM.  It does
+		not mean that a specific user was identified -
+		aIdentity can still be CIdentity::KUnknown.
+		
+		@param	aIdentityId		Identified user.  This can
+								be CIdentity::KUnknown.
+		@see EvaluationFailed
+	 */
+	virtual void EvaluationSucceeded(TIdentityId aIdentityId) = 0;
+	/**
+		This function is called by the evaluator when
+		it has failed to evaluate an expression.  Reasons
+		for failure include failing to run a plugin;
+		the user cancelling a plugin; OOM; and others.
+		
+		Failure in this sense does not means the expression
+		was evaluated but no specific user was identified.
+		That case is handled by EvaluationSucceeded.
+		
+		@param	aReason		Symbian OS error code.
+		
+		@see EvaluationSucceeded
+	 */
+	virtual void EvaluationFailed(TInt aReason) = 0;
+	};
+
+class CEvaluator : public CActive
+/**
+	Expression evaluator.  This asynchronously
+	evaluates the supplied expression by calling
+	the referenced plugins.
+ */
+	{
+public:
+	static CEvaluator* NewL(MEvaluatorPluginInterface* aPluginInterface, MEvaluatorClientInterface* aClientInterface);
+	virtual ~CEvaluator();
+
+	void Evaluate(const CAuthExpressionImpl* aExpr);
+	
+private:
+	CEvaluator(MEvaluatorPluginInterface* aPluginInterface, MEvaluatorClientInterface* aClientInterface);
+	void ConstructL();
+	
+	void EvaluatedNode(TIdentityId aIdentity);
+	void EvaluateCompound(const CAuthExpressionImpl* aParent);
+	void ReplaceComplexIdentity(TIdentityId aIdentity);
+	
+	// complete client request
+	void NotifyClientSucceeded(TIdentityId aIdentity);
+	void NotifyClientFailed(TInt aReason);
+	
+	// manipulate RPN stack
+	TBool PushIdentity(TIdentityId aIdentity);
+	TIdentityId PopIdentity();
+	TIdentityId& LastIdentity();
+	void ResetRpnStack();
+	// implement CActive
+	virtual void RunL();
+	virtual void DoCancel();
+	
+#ifdef _DEBUG
+	enum TPanic
+		{
+		EENRpnStackNonZero = 0x10,
+		EECRpnStackTooLow = 0x20, EECBadParentType, EECRpnStackNotOneAtRoot, EECBadRightParent,
+		EBusy = 0x30,
+		};
+	static void Panic(TPanic aPanic);
+	TInt RpnDepth() const;
+#endif
+	
+private:
+	/** The evaluator uses this to invoke plugins. */
+	MEvaluatorPluginInterface*const iPluginInterface;
+	/**
+		The evaluator uses this to notify the server
+		when an evaluation has completed, successfully
+		or otherwise.
+	 */
+	MEvaluatorClientInterface*const iClientInterface;
+	
+	/** Constant value defined for short name readability only. */
+	static const CAuthExpressionImpl::TType KAnd;
+	/** Constant value defined for short name readability only. */
+	static const CAuthExpressionImpl::TType KOr;
+
+	/** The expression which is currently being evaluated. */
+	const CAuthExpressionImpl* iCurrentNode;
+	
+	/** The plugin sets this value to the returned identity. */
+	TIdentityId iIdentity;
+	
+	/**
+		Granularity of RPN stack.  This value should be large
+		to parse a reasonable expression without having to
+		reallocate, and without wasting too much memory.
+	 */
+	static const TInt KRPNGranularity;
+	/**
+		Intermediate results.  (A CArrayFixFlat is used here
+		instead of an RArray because, although it uses more
+		memory, it can be resized when items are popped.)
+	 */
+	CArrayFixFlat<TIdentityId>* iRpnStack;
+	};
+
+}	// namespace AuthServer
+
+#endif	// #ifndef AUTHSERVER_EVALUATOR_H
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/server/pluginmgr.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,253 @@
+/*
+* Copyright (c) 2005-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 of CPluginMgr
+*
+*/
+
+
+/**
+ @file
+*/
+
+#include "authserver_impl.h"
+#include <authserver/authpatchdata.h>
+#include <u32hal.h> 
+using namespace AuthServer;
+
+TLinearOrder<CAuthPluginInterface> CPluginMgr::SPluginOrder(PluginCompare);
+
+TInt CPluginMgr::PluginCompare(const CAuthPluginInterface& aLhs,
+									  const CAuthPluginInterface& aRhs)
+  {
+  return aLhs.Id() - aRhs.Id();
+  }
+
+TInt CPluginMgr::FindById(const TPluginId* aId,
+						 const CAuthPluginInterface& aRhs)
+  {
+  return *aId - aRhs.Id();
+  }
+
+
+CPluginMgr* CPluginMgr::NewLC()
+  {
+  CPluginMgr* me = new (ELeave) CPluginMgr();
+  CleanupStack::PushL(me);
+  me->ConstructL();
+  return me;
+  } 
+
+CPluginMgr* CPluginMgr::NewL()
+  {
+  CPluginMgr* me = CPluginMgr::NewLC();
+  CleanupStack::Pop(me);
+  return me;
+  }
+
+CPluginMgr::~CPluginMgr()
+  {
+  ReleasePlugins();
+  ReleaseImplInfo();
+  }
+
+
+void CPluginMgr::ConstructL()
+  {
+  BuildAuthPluginsListL();
+  }
+
+CAuthPluginInterface* CPluginMgr::PluginL(const TPluginId& aId)
+  {
+  TInt idx = iPlugins.FindInOrder<>(aId, CPluginMgr::FindById);
+  CAuthPluginInterface* plugin = 0;
+  if (idx == KErrNotFound)
+	{
+	  plugin = CreatePluginImplementationL(aId);
+	  iPlugins.InsertInOrder(plugin, SPluginOrder);
+	}
+  else
+	{
+	plugin = iPlugins[idx];
+	}
+  
+  return plugin;
+  }
+
+CAuthPluginInterface* CPluginMgr::ImplementationL(TInt aIndex)
+	{
+	if( aIndex < 0 || aIndex > iPlugins.Count()-1 )
+		{
+		User::Leave(KErrArgument);
+		}
+	return iPlugins[aIndex];
+	}
+
+const RImplInfoPtrArray& CPluginMgr::ImplementationsL()
+    {
+    if (iImplArray.Count() == 0) 
+        {
+        //To load plugins from sources other than ROM the patch 
+        // data KEnablePostMarketAuthenticationPlugins must be set to True.
+        TUint32 enablePostMarketPlugin = KEnablePostMarketAuthenticationPlugins;
+
+        #ifdef __WINS__
+
+        // Default SymbianOS behavior is to only load auth plugins from ROM.
+        enablePostMarketPlugin = 0;
+
+        // For the emulator allow the constant to be patched via epoc.ini
+        UserSvr::HalFunction(EHalGroupEmulator, EEmulatorHalIntProperty,
+        (TAny*)"KEnablePostMarketAuthenticationPlugins", &enablePostMarketPlugin); // read emulator property (if present)
+
+        #endif
+          
+        if(enablePostMarketPlugin == 0)
+        	{
+         	TEComResolverParams resolverParams;
+           	REComSession::ListImplementationsL(KCAuthPluginInterfaceUid,
+        									 resolverParams,
+        									 KRomOnlyResolverUid,
+        									 iImplArray);
+        									 
+            }
+            
+         else
+         	{
+         	REComSession::ListImplementationsL(KCAuthPluginInterfaceUid, iImplArray);
+          	}
+        }
+    return iImplArray;
+    }
+
+void CPluginMgr::ReleasePlugins()
+  {
+  TInt i = iPlugins.Count();
+  while (i)
+	{
+	delete iPlugins[--i];
+	}
+  
+  i = iPluginDtorUids.Count();
+  
+  while(i)
+	  {
+	  REComSession::DestroyedImplementation(iPluginDtorUids[--i]);
+	  }
+  iPlugins.Reset();
+  iPluginDtorUids.Reset();
+  }
+
+void CPluginMgr::ForgetIdentityL(TIdentityId aId)
+  {
+  ImplementationsL();
+  
+  TInt i = iImplArray.Count();
+  while (i)
+	{
+	PluginL(iImplArray[--i]->ImplementationUid().iUid)->Forget(aId);
+	}
+  }
+
+void CPluginMgr::ReleaseImplInfo()
+  {
+  TInt i = iImplArray.Count();
+  while (i)
+	{
+	  delete iImplArray[--i];
+	}
+  
+  iImplArray.Reset();
+  }
+  
+void CPluginMgr::BuildAuthPluginsListL()
+	{
+	ReleasePlugins();
+  	ReleaseImplInfo();
+  	
+	ImplementationsL();
+  	CAuthPluginInterface* plugin = 0;
+  	for( TInt count=0; count < iImplArray.Count(); ++count)
+		{
+		plugin = CreatePluginImplementationL(iImplArray[count]->ImplementationUid().iUid);
+
+		CleanupStack::PushL(plugin);
+		User::LeaveIfError(iPlugins.InsertInOrder(plugin, SPluginOrder));
+		CleanupStack::Pop(plugin);
+		}
+	}
+
+CAuthPluginInterface* CPluginMgr::CreatePluginImplementationL(const TPluginId &aId)
+	{
+	TEComResolverParams resolverParams;
+	TBufC8<16> pluginIdTxt;
+	pluginIdTxt.Des().Format(_L8("%x"), aId);
+	pluginIdTxt.Des().UpperCase();
+	resolverParams.SetDataType(pluginIdTxt);
+		  
+	//To load plugins from sources other than ROM the patch 
+	// data KEnablePostMarketAuthenticationPlugins must be set to True.
+	TUint32 enablePostMarketPlugin = KEnablePostMarketAuthenticationPlugins;
+
+#ifdef __WINS__
+
+	// Default SymbianOS behavior is to only load auth plugins from ROM.
+	enablePostMarketPlugin = 0;
+
+	// For the emulator allow the constant to be patched via epoc.ini
+	UserSvr::HalFunction(EHalGroupEmulator, EEmulatorHalIntProperty,
+	(TAny*)"KEnablePostMarketAuthenticationPlugins", &enablePostMarketPlugin); // read emulator property (if present)
+
+#endif
+
+	TAny* plugin = 0;
+	TInt err = 0;
+	TUid dtor_ID_Key = TUid::Null();
+	if(enablePostMarketPlugin == 0) 
+	  	{
+	  	TRAP(err, plugin = 
+		REComSession::CreateImplementationL(KCAuthPluginInterfaceUid,
+											dtor_ID_Key,
+											resolverParams,
+											KRomOnlyResolverUid));
+	  	}
+		  
+	  else
+	  	{
+	  	TRAP(err, plugin = 
+		REComSession::CreateImplementationL(KCAuthPluginInterfaceUid,
+											dtor_ID_Key,
+											resolverParams));
+	  	}
+		  
+	 if (err == KErrNotFound)
+	    {
+	    err = KErrAuthServNoSuchPlugin;  
+	    }
+	 
+	 //Add key to plugin destructor keys list .
+	 TInt err2 =  iPluginDtorUids.Append(dtor_ID_Key);
+	 
+	 if(KErrNoMemory == err2)
+		 {
+		 CAuthPluginInterface* authPlugin = reinterpret_cast<CAuthPluginInterface*>(plugin);
+		 delete authPlugin;
+		 REComSession::DestroyedImplementation(dtor_ID_Key);
+		 User::LeaveNoMemory();
+		 }
+	 User::LeaveIfError(err);
+
+	return reinterpret_cast<CAuthPluginInterface*>(plugin);
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/server/pluginmgr.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,129 @@
+/*
+* Copyright (c) 2005-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: 
+*
+*/
+
+
+/**
+ @file
+ @released
+ @internalComponent
+*/
+#ifndef PLUGINMGR_H
+#define PLUGINMGR_H
+
+#include <authserver/authplugininterface.h>
+namespace AuthServer 
+{
+
+/**
+ * The plugin manager is responsible for managing the lifetime of plugin DLLs.
+ **/
+
+class CPluginMgr : public CBase
+	{
+public:
+	static CPluginMgr* NewL();
+	static CPluginMgr* NewLC();
+	
+	~CPluginMgr();
+
+	/**
+	 * Returns the requested plugin. If the plugin has not yet been loaded
+	 * then it will be instantiated and cached prior to returning.
+	 *
+	 * @param aId the id of the plugin to return.
+	 *
+	 * @return the requested plugin
+	 *
+	 * @leave KErrAuthServerNoSuchPlugin
+	 *
+	 **/
+	CAuthPluginInterface* PluginL(const TPluginId& aId);
+
+    /**
+	 * Returns the list of plugin implementations. The list is cached for use
+	 * rather than reloading it in multiple places.
+	 *
+	 * @return the array of implementation info objects
+	 *
+	 **/
+	const RImplInfoPtrArray& ImplementationsL();
+	
+	CAuthPluginInterface* ImplementationL(TInt aIndex);
+	
+	/**
+	 * Forces all plugins to forget their training for id
+	 *
+	 * @param aId the id of the identitiy to forget.
+	 *
+	 **/
+	void ForgetIdentityL(TIdentityId aId);
+	
+	/**
+	 * Builds authentication plugins list.
+	 **/
+	void BuildAuthPluginsListL();
+	
+private:
+	static TInt PluginCompare(const CAuthPluginInterface& lhs,
+							  const CAuthPluginInterface& rhs);
+							  
+	static TInt FindById(const TPluginId* lhs,
+						 const CAuthPluginInterface& rhs);
+						 
+	static 	TLinearOrder<CAuthPluginInterface> SPluginOrder;
+	
+	void ConstructL();
+	
+	
+	/**
+	 * Forces the plugin manager to free all plugin objects.
+	 **/
+	void ReleasePlugins();
+	
+	/**
+	 * Forces the plugin manager to free the implemtation info array and
+	 * reload it on the next call to Implementations.
+	 **/
+	void ReleaseImplInfo();
+	
+	/**
+	 * Creates an implementation of the specified plugin.
+	 * 
+	 * @param aId Id of the plugin to be created.
+	 *	
+	 * @return the requested plugin
+	 *	 
+	 **/
+	CAuthPluginInterface* CreatePluginImplementationL(const TPluginId &aId);
+	
+private:	
+	mutable RPointerArray<CAuthPluginInterface> iPlugins;
+	
+	mutable RImplInfoPtrArray iImplArray;
+	
+	/**
+	 * Maintain a list of plugin destructor keys.
+	 * This is used to destroy all plugin instances when ReleasePlugins
+	 * is called.
+	 * */
+	mutable RArray<TUid>iPluginDtorUids;
+	
+    };
+
+} //namespace
+
+#endif // PLUGINMGR_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/server/pluginobserver.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,119 @@
+/*
+* Copyright (c) 2008-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: 
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+
+#include <e32debug.h>
+#include <s32mem.h>
+#include "authserver_impl.h"
+#include "log.h"
+
+using namespace AuthServer;
+
+/**
+  CPluginObserver registers for ECOM notification when new authentication plugins are added 
+  or removed and updates the plugin manager accordingly. 
+ 
+  */
+
+/** 
+  Constructs a new CPluginObserver object and puts it on the cleanup stack.
+  */
+
+CPluginObserver* CPluginObserver::NewLC(CPluginMgr& aPluginMgr)
+	{
+	CPluginObserver* self = new (ELeave) CPluginObserver(aPluginMgr);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+/** 
+  Constructs a new CPluginObserver object.
+  */
+
+CPluginObserver* CPluginObserver::NewL(CPluginMgr& aPluginMgr)
+	{
+	CPluginObserver* self = CPluginObserver::NewLC(aPluginMgr);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CPluginObserver::CPluginObserver(CPluginMgr& aPluginMgr) : CActive(EPriorityStandard), iPluginMgr(aPluginMgr)
+	{
+	
+	}
+
+CPluginObserver::~CPluginObserver()
+	{
+	Cancel();
+		
+	// Close our ECOM session
+	if(iEcomSession)
+		{
+		iEcomSession->CancelNotifyOnChange(iStatus);
+		iEcomSession->Close();
+		REComSession::FinalClose();
+		}
+	}
+
+void CPluginObserver::ConstructL()
+	{
+	// Add ourselves to the current active scheduler so we can get dynamic 
+	// updates when authentication plugins are removed or new plugins are added
+	CActiveScheduler::Add(this);
+	
+	iEcomSession = &REComSession::OpenL();
+	
+	// register for ECOM update notifications in case a new agent appears
+	iEcomSession->NotifyOnChange(iStatus);
+	SetActive();
+	}
+	
+void CPluginObserver::DoCancel()
+	{
+	// Abort any update notification 
+	iEcomSession->CancelNotifyOnChange(iStatus);
+	}
+
+void CPluginObserver::RunL()
+	{
+	// Leave if there has been an error
+	User::LeaveIfError(iStatus.Int());
+	
+	// the ownership is with auth server, so dont delete it.
+	iPluginMgr.BuildAuthPluginsListL();
+	
+	// request notification of any further changes
+	iEcomSession->NotifyOnChange(iStatus);
+	SetActive();
+	}
+	
+TInt CPluginObserver::RunError(TInt aError)
+    {
+    _LIT(KAuthError, "Authserver Panic :");
+    User::Panic(KAuthError, aError);
+	    			
+	return KErrNone;
+	}
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/server/pluginobserver.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2008-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: 
+*
+*/
+
+
+/**
+ @file 
+ @internalComponent
+*/
+  
+#ifndef PLUGINOBSERVER_H
+#define PLUGINOBSERVER_H
+
+#include <e32cmn.h>
+#include <ecom/ecom.h>
+
+namespace AuthServer
+{
+class CPluginMgr;
+
+class CPluginObserver : public CActive
+	{
+public:
+
+	static CPluginObserver* NewLC(CPluginMgr& aPluginMgr);
+	static CPluginObserver* NewL(CPluginMgr& aPluginMgr);
+	virtual ~CPluginObserver();	
+	
+private:
+
+	// From CActive, used for dynamically updating the list of authentication plugins.
+	virtual void DoCancel();
+	virtual void RunL();
+	TInt RunError(TInt aError);
+	
+	CPluginObserver(CPluginMgr& aPluginMgr);
+	void ConstructL();
+
+private:
+	
+	REComSession* iEcomSession;
+	CPluginMgr& iPluginMgr;
+	};
+	
+}	//namespace
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/server/trainingmgr.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,381 @@
+/*
+* Copyright (c) 2005-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: 
+* CTrainingMgr - Auth Server helper class
+*
+*/
+
+
+/**
+ @file 
+*/
+#include <e32debug.h>
+#include <s32mem.h>
+#include "authserver_impl.h"
+#include "log.h"
+#include "authrepository.h"
+
+using namespace AuthServer;
+
+
+CTrainingMgr::CTrainingMgr(CPluginMgr&      aPluginMgr,
+						   CAuthDb2&        aAuthDb,
+						   CAuthRepository& aAuthRepository) :
+	CActive(EPriorityStandard),
+	iPluginMgr(&aPluginMgr),
+	iAuthDb(&aAuthDb),
+	iAuthRepository(aAuthRepository)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+CTrainingMgr::~CTrainingMgr()
+    {
+    Cancel();
+    Cleanup();
+    }
+
+/**
+ * @param aMessage
+ * @param aId The id number to use for the identity
+ * @param aProtKey the protection key will be returned here
+ */
+void CTrainingMgr::RegisterIdentityL(const RMessage2& aMessage,
+									TIdentityId aId,
+									CProtectionKey&  aProtKey)
+	{
+	__ASSERT_ALWAYS(!IsActive(),
+					User::Panic(KAuthServerShortName,
+								EPanicTrainingMgrBusy));	
+
+	iProtKey = &aProtKey;
+	iMessage = new (ELeave) RMessage2(aMessage);
+	iCurrentPluginIdx = 0;
+	iIdentity = aId;
+	iDescription = HBufC::NewL(aMessage.GetDesLength(1));
+	TPtr ptr = iDescription->Des();
+	aMessage.Read(1,ptr); 
+
+	iState = ERegistrationFirstStep;
+	DoRegistrationStepL();
+	}
+
+TBool CTrainingMgr::RegisterFirstIdentityL(TIdentityId aId,
+										  CProtectionKey& aProtKey)
+	{
+	__ASSERT_ALWAYS(!IsActive(),
+					User::Panic(KAuthServerShortName,
+								EPanicTrainingMgrBusy));	
+
+	iIdentity = aId;
+	iProtKey  = &aProtKey;
+    iDescription = HBufC::NewL(KDefaultUserDescription().Length());
+    *iDescription = KDefaultUserDescription;
+    
+    TBool result = EFalse;
+    
+    //Get the default plugin id from the configuration file.
+    TPluginId defaultPluginId = iAuthRepository.DefaultPluginL();
+	
+    CAuthPluginInterface* plugin = 0;
+	TRAPD(err, plugin = iPluginMgr->PluginL(defaultPluginId));
+	
+	if ((err == KErrNone) &&
+		(plugin->IsActive()) &&
+		(plugin->Type() == EAuthKnowledge) && 
+	    (plugin->DefaultData(aId, iResult) == KErrNone))
+		{
+		iCurrentPlugin = plugin->Id(); 
+		AddIdentityL(); 
+		AddTrainingResultL();
+		result = ETrue;
+		}	
+	
+	Cleanup();		    	
+	return result;
+	}
+
+void CTrainingMgr::TrainPluginL(const RMessage2& aMessage,
+							   CProtectionKey&  aProtKey)
+	{
+	__ASSERT_ALWAYS(!IsActive(),
+					User::Panic(KAuthServerShortName,
+								EPanicTrainingMgrBusy));	
+
+	iProtKey = &aProtKey;
+ 	iIdentity = aMessage.Int0();
+	iCurrentPlugin = aMessage.Int1();
+	iMessage = new (ELeave) RMessage2(aMessage);
+	CAuthPluginInterface* plugin = 0;
+
+	TRAPD(err, plugin = iPluginMgr->PluginL(iCurrentPlugin));
+	
+	if (err != KErrNone)
+		{
+		iMessage->Complete(err);
+		Cleanup();
+		return;
+		}
+	else
+		{
+		SetActive();
+		iState=ETrainingDone;
+		if (plugin->IsActive())
+			{
+			plugin->Train(iIdentity, iResult, iStatus);
+			}
+		else
+			{
+			TRequestStatus* status = &iStatus;
+			User::RequestComplete(status, KErrAuthServPluginNotActive);
+			}
+		}
+	}
+
+TInt CTrainingMgr::RunError(TInt aError)
+    {
+    iMessage->Complete(aError);
+	return KErrNone;
+	
+  }
+
+void CTrainingMgr::RunL()
+	{
+	if (iStatus != KErrNone && 
+		(iStatus != KErrAuthServPluginCancelled && 
+		iStatus != KErrAuthServPluginNotActive))
+		{	
+		// error results other than plugin cancelled or inactive handled  here
+		Complete();
+		return;
+		}
+	switch (iState)
+		{
+    	case ERegistrationFirstStep:
+			if (AddIdentityL())
+				{
+				iState = ERegistering;
+				}
+			DoRegistrationStepL();
+			break;
+       case ERegistering:
+			AddTrainingResultL();
+    		DoRegistrationStepL();
+    		break;
+       case ETrainingDone:
+            if (iStatus == KErrAuthServPluginCancelled)
+			  {
+    		  DEBUG_PRINTF(_L8("Plugin cancelled in training"));
+			  }
+    	    AddTrainingResultL();
+    		Complete();
+    		break;
+    	case ERegistrationDone:
+			WriteResultToMsgL();
+    		Complete();
+    		break;
+    	}
+	}
+
+void CTrainingMgr::DoCancel()
+	{
+	CAuthPluginInterface* plugin = 0;
+	TRAPD(err, plugin = iPluginMgr->PluginL(iCurrentPlugin));
+	
+	if (err == KErrNone)
+		{
+		iMessage->Complete(KErrCancel);
+		plugin->Cancel();
+		}
+	else
+		{
+		User::Panic(KAuthServerShortName, EPanicNoSuchAuthPlugin);
+		}
+	Cleanup();
+	}
+
+TBool CTrainingMgr::IsBusy() const
+  {
+  return iState != EIdle;
+  }
+
+CTransientKeyInfo* CTrainingMgr::CreateKeyInfoLC()
+	{
+    __ASSERT_ALWAYS(iResult != 0 && iResult->Size() > 0,
+					User::Panic(KAuthServerShortName,
+								EPanicInvalidDefaultData));	
+
+	CTransientKeyInfo* keyInfo = CTransientKeyInfo::NewLC(iCurrentPlugin);
+
+	CTransientKey* key = keyInfo->CreateTransientKeyL(*iResult);
+	CleanupStack::PushL(key);
+    
+	CEncryptedProtectionKey* encKey = key->EncryptL(*iProtKey);
+	CleanupStack::PushL(encKey);
+		
+	keyInfo->SetEncryptedProtectionKeyL(encKey);
+	CleanupStack::Pop(encKey);
+	CleanupStack::PopAndDestroy(key);
+	return keyInfo;
+	}
+
+TBool CTrainingMgr::AddTrainingResultL()
+	{
+	TBool result = EFalse;
+	if (iStatus == KErrNone)
+		{	
+		CTransientKeyInfo* keyInfo = CreateKeyInfoLC();
+		iAuthDb->SetTrainedPluginL(iIdentity, keyInfo->PluginId(),
+								   *keyInfo);
+		CleanupStack::PopAndDestroy(keyInfo);
+		result = ETrue;
+		}
+	return result;
+	}
+
+TBool CTrainingMgr::AddIdentityL()
+	{
+	TBool result = EFalse;
+	if (iStatus == KErrNone)
+		{
+		CTransientKeyInfo* keyInfo = CreateKeyInfoLC();
+		iAuthDb->AddIdentityWithTrainedPluginL(iIdentity, *iDescription, *keyInfo);
+		CleanupStack::PopAndDestroy(keyInfo);
+		result = ETrue;
+		}
+	return result;
+	}
+
+void CTrainingMgr::DoRegistrationStepL()
+	{
+	
+
+	if (iCurrentPluginIdx == iPluginMgr->ImplementationsL().Count())
+		{	
+		SetActive();
+		iState = ERegistrationDone;
+		TRequestStatus* status = &iStatus;
+		User::RequestComplete(status, KErrNone);
+		return;
+		}
+
+	iCurrentPlugin  =
+		iPluginMgr->ImplementationsL()[iCurrentPluginIdx++]
+	      ->ImplementationUid().iUid;
+	
+	CAuthPluginInterface* plugin = 0;
+	TRAPD(err, plugin = iPluginMgr->PluginL(iCurrentPlugin));
+	
+	SetActive();
+	switch (err)
+		{
+    	case KErrAuthServNoSuchPlugin:
+			{
+			// skip this plugin
+			TRequestStatus* status = &iStatus;
+			User::RequestComplete(status, KErrNone);
+			return;
+			}
+    	case KErrNone:
+			break;
+    	default:
+			User::Leave(err);
+			break;
+		}
+	delete iResult;
+	iResult = 0;
+	if (plugin->IsActive())
+		{
+		plugin->Train(iIdentity, iResult, iStatus);
+		}
+	else
+		{
+		TRequestStatus* status = &iStatus;
+		User::RequestComplete(status, KErrAuthServPluginNotActive);
+		}
+	}
+
+void CTrainingMgr::WriteResultToMsgL()
+    {
+
+	if (iAuthDb->NumTrainedPluginsL(iIdentity) > 0)
+		{
+		CIdentity* identity = CIdentity::NewLC(iIdentity, iProtKey,
+											   iDescription);
+		iProtKey = 0;
+		iDescription = 0;
+	
+		HBufC8* idBuff = HBufC8::NewLC(KDefaultBufferSize);
+		TPtr8  idPtr =  idBuff->Des();
+    
+		RDesWriteStream writeStream(idPtr);
+		CleanupClosePushL(writeStream);
+    
+		writeStream << *identity;
+		writeStream.CommitL();
+
+		TInt clientBuffSize = iMessage->GetDesMaxLength(0);
+  
+		if (clientBuffSize >= idBuff->Size())
+			{
+				iMessage->Write(0, *idBuff);
+			}
+		else
+			{
+				User::Leave(KErrUnderflow);
+			}
+		CleanupStack::PopAndDestroy(3,identity);
+		}
+	else
+		{
+
+		iStatus = KErrAuthServRegistrationFailed;
+		}
+
+    }
+    
+void CTrainingMgr::Complete()
+	{
+	iMessage->Complete(iStatus.Int());
+	Cleanup();
+	}
+
+void CTrainingMgr::Cleanup()
+	{
+	if(iDescription)
+		{
+		delete iDescription;
+		iDescription = 0;
+		}
+	
+	if(iResult)
+		{
+		delete iResult;
+		iResult = 0;
+		}
+	
+	if(iMessage)
+		{
+		delete iMessage;
+		iMessage = 0;
+		}
+	
+	if(iProtKey)
+		{
+		delete iProtKey;
+		iProtKey = 0;
+		}
+	
+	iState = EIdle;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/server/trainingmgr.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2005-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: 
+* CTrainingmgr - Auth Server helper class
+*
+*/
+
+
+/**
+ @file 
+ @internalComponent
+ @released
+*/
+#ifndef TRAININGMGR_H
+#define TRAININGMGR_H
+
+#include <e32cmn.h>
+
+#include "authrepository.h"
+#include "authdb.h"
+#include "pluginmgr.h"
+
+namespace AuthServer
+{
+
+/** 
+ * This AO handles the training of plugins for identities.  
+ **/
+class CTrainingMgr : public CActive
+	{
+public:
+  
+	CTrainingMgr(CPluginMgr&      aPluginMgr,
+				 CAuthDb2&        aAuthDb,
+				 CAuthRepository& aAuthRepository);
+    
+    ~CTrainingMgr();
+    
+	void RegisterIdentityL(const RMessage2& aMessage,
+						  TIdentityId aId,
+						  CProtectionKey& aProtKey);
+	
+	TBool RegisterFirstIdentityL(TIdentityId aId,
+								CProtectionKey& aProtKey);
+	
+
+	void TrainPluginL(const RMessage2& aMessage,
+					 CProtectionKey& aProtKey);
+
+
+	TBool IsBusy() const;
+	
+	void RunL();  
+
+	void DoCancel(); 
+	
+private:
+	
+	enum TState
+		{
+		EIdle,
+		ERegistrationFirstStep,
+		ERegistering,
+		ERegistrationDone,
+		ETrainingDone,
+		};
+
+	CTransientKeyInfo* CreateKeyInfoLC();
+	
+	TBool AddIdentityL();
+	TBool AddTrainingResultL();
+	void  DoRegistrationStepL();
+	void  WriteResultToMsgL();
+	void  Complete();
+	void  Cleanup();
+	TInt RunError(TInt aError);
+
+	TState           iState;
+	const RMessage2* iMessage;
+	CPluginMgr*      iPluginMgr;
+	CAuthDb2*        iAuthDb;
+	TInt             iCurrentPluginIdx;
+	TPluginId        iCurrentPlugin;
+	TIdentityId      iIdentity;
+	HBufC8*          iResult;
+	HBufC*           iDescription;
+	CProtectionKey*  iProtKey;
+	CAuthRepository& iAuthRepository;
+};
+}
+#endif //  TRAININGMGR_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/server/transientkey.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,95 @@
+/*
+* Copyright (c) 2005-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: 
+* CTransientKey implementation
+*
+*/
+
+
+/**
+ @file 
+*/
+
+#include "authserver_impl.h"
+
+
+using namespace AuthServer;
+
+CTransientKey* CTransientKey::NewL(CPBEncryptElement* aEncryptor)
+	{
+	CTransientKey*  key =
+		CTransientKey::NewLC(aEncryptor);
+	CleanupStack::Pop(key);
+	return key;
+	}
+
+CTransientKey* CTransientKey::NewLC(CPBEncryptElement* aEncryptor)
+	{
+	CTransientKey*  key = new (ELeave) CTransientKey();
+	CleanupStack::PushL(key);
+	key->ConstructL(aEncryptor);
+	return key;
+	}
+
+void CTransientKey::ConstructL(CPBEncryptElement* aEncryptor)
+	{
+	iPbeElement = aEncryptor;
+    }
+
+CTransientKey::~CTransientKey()
+	{
+	delete iPbeElement;
+	}
+
+CEncryptedProtectionKey*
+CTransientKey::EncryptL(const CProtectionKey& aKey) const
+	{
+	TPtrC8 protData = aKey.KeyData();
+	
+	CPBEncryptor* encryptor = iPbeElement->NewEncryptLC();
+	
+	HBufC8* ciphertext =
+		HBufC8::NewLC(encryptor->MaxFinalOutputLength(protData.Length()));
+
+	TPtr8 ciphertextTemp = ciphertext->Des();
+	
+	encryptor->ProcessFinalL(protData, ciphertextTemp);
+
+	CEncryptedProtectionKey* key = CEncryptedProtectionKey::NewL(ciphertext);
+	
+	CleanupStack::Pop(ciphertext); // don't delete cipher text
+	CleanupStack::PopAndDestroy(encryptor);
+	
+	return key;
+	}
+
+CProtectionKey*
+CTransientKey::DecryptL(const CEncryptedProtectionKey& aKey) const
+	{
+	TPtrC8 encData = aKey.KeyData();
+	
+	CPBDecryptor* decryptor = iPbeElement->NewDecryptLC();
+
+	HBufC8* plaintext =
+		HBufC8::NewLC(decryptor->MaxFinalOutputLength(encData.Length()));
+	TPtr8 plaintextTemp = plaintext->Des();
+
+	// Decrypt the data
+	decryptor->ProcessFinalL(encData, plaintextTemp);
+		 
+	CProtectionKey* key = CProtectionKey::NewL(plaintext);
+	CleanupStack::Pop(plaintext);
+	CleanupStack::PopAndDestroy(decryptor);
+	return key;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/server/transientkey.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 2005-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: 
+* CTransientKey declaration
+*
+*/
+
+
+/**
+ @file 
+ @released
+ @internalComponent
+*/
+
+#ifndef TRANSIENTKEY_H
+#define TRANSIENTKEY_H
+
+#include <pbe.h>
+#include "authserver_client.h"
+#include "encryptedprotectionkey.h"
+
+namespace AuthServer
+{
+
+/**
+ * CTransientKey is a cryptographic key that is generated on the fly and never
+ * stored on the device.  Transient keys are used to encrypt and decrypt
+ * protection keys, they are generated by the AuthServer using data gathered
+ * from CAuthPlugin derived classes.
+ */
+class CTransientKey : public CBase
+	{
+public:
+	
+	/**
+	 * Creates a new transient key, passing in the plugin data from which to
+	 * derive it.
+	 *
+	 * @param aEncryptor encryption element to use as the key. Ownership
+	 * passes to this object.
+	 **/
+	static CTransientKey* NewL(CPBEncryptElement* aEncryptor);
+
+	/**
+	 * Creates a new transient key, passing in the plugin data from which to
+	 * derive it.
+	 *
+	 * @param aEncryptor encryption element to use as the key. Ownership
+	 * passes to this object.
+	 **/
+	static CTransientKey* NewLC(CPBEncryptElement* aEncryptor);
+
+	~CTransientKey();
+
+	/**
+	 * Create an version of the provided protection key encrypted by this
+	 * key. Ownership of the returned object is passed to the caller.
+	 *
+	 * @param aKey the protection key to encrypt.
+	 *
+	 * @return an protection key encrypted by this key.
+	 **/
+	CEncryptedProtectionKey* EncryptL(const CProtectionKey& aKey) const;
+
+	/**
+	 * Decrypts an CEncryptedProtectionKey created by this transient
+	 * key. Ownership of the returned object is passed to the caller.
+	 *
+	 * @param aKey the encrypted protection key to decrypt.
+	 *
+	 * @return a protection key
+	 **/
+	CProtectionKey* DecryptL(const CEncryptedProtectionKey& aKey) const;
+
+		
+private:
+	void ConstructL(CPBEncryptElement* aEncryptor);
+	
+	CPBEncryptElement* iPbeElement;
+    };
+}
+
+#endif // TRANSIENTKEY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/server/transientkeyinfo.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,132 @@
+/*
+* Copyright (c) 2005-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: 
+* CTransientKeyInfo implementation
+*
+*/
+
+
+/**
+ @file 
+*/
+#include <pbedata.h>
+#include "authserver_impl.h"
+
+using namespace AuthServer;
+
+CTransientKeyInfo* CTransientKeyInfo::NewL(
+	TPluginId aPluginId)
+	{
+	CTransientKeyInfo*  key =
+		CTransientKeyInfo::NewLC(aPluginId);
+	CleanupStack::Pop(key);
+	return key;
+	}
+
+CTransientKeyInfo* CTransientKeyInfo::NewLC(
+	TPluginId aPluginId)
+	{
+	CTransientKeyInfo*  key = new (ELeave) CTransientKeyInfo();
+	CleanupStack::PushL(key);
+	key->ConstructL(aPluginId);
+	return key;
+	}
+
+void CTransientKeyInfo::ConstructL(TPluginId aPluginId)
+	{
+	iPluginId = aPluginId;
+	}
+
+CTransientKeyInfo* CTransientKeyInfo::NewL(RReadStream& aInputStream)
+	{
+	CTransientKeyInfo*  key =
+		CTransientKeyInfo::NewLC(aInputStream);
+	CleanupStack::Pop(key);
+	return key;
+	}
+
+CTransientKeyInfo* CTransientKeyInfo::NewLC(RReadStream& aInputStream)
+	{
+	CTransientKeyInfo*  key = new (ELeave) CTransientKeyInfo();
+	CleanupStack::PushL(key);
+	key->InternalizeL(aInputStream);
+	return key;
+	}
+
+
+CTransientKeyInfo::~CTransientKeyInfo()
+	{
+	delete iEncryptedKey;
+	delete iEncryptionData;
+	}
+
+CTransientKey*
+CTransientKeyInfo::CreateTransientKeyL(const TDesC8& aPluginData) const
+	{
+	CPBEncryptElement* encrypt = 0;
+	if (!iEncryptionData)
+		{
+		// Plugin data used as password
+		encrypt = CPBEncryptElement::NewL(aPluginData);
+		CleanupStack::PushL(encrypt);
+		iEncryptionData = CPBEncryptionData::NewL(encrypt->EncryptionData());
+		}
+	else
+		{
+		// Plugin data used as password
+		encrypt = CPBEncryptElement::NewL(*iEncryptionData, aPluginData);			
+		CleanupStack::PushL(encrypt);
+		}
+	
+	CTransientKey* key = CTransientKey::NewL(encrypt);	// Ownership of encrypt transferred
+	CleanupStack::Pop(encrypt);
+	return key;
+	}
+
+const CEncryptedProtectionKey& CTransientKeyInfo::EncryptedKey() const
+	{
+	return *iEncryptedKey;
+	}
+
+void CTransientKeyInfo::SetEncryptedProtectionKeyL(
+    CEncryptedProtectionKey* aEncryptedKey)
+	{
+	if (iEncryptedKey != 0)
+		{
+		User::Leave(KErrAlreadyExists);
+		}
+	
+	iEncryptedKey = aEncryptedKey;
+	}
+  
+void CTransientKeyInfo::ExternalizeL(RWriteStream& aOutStream) const
+	{
+	ASSERT(iEncryptedKey != 0);
+	
+	aOutStream << iPluginId;
+	aOutStream << *iEncryptedKey;
+	aOutStream << *iEncryptionData;
+	}
+
+void CTransientKeyInfo::InternalizeL(RReadStream& aInStream)
+	{
+	iPluginId = aInStream.ReadInt32L();
+	iEncryptedKey = CEncryptedProtectionKey::NewL(aInStream);
+	iEncryptionData  = CPBEncryptionData::NewL(aInStream);
+	}
+
+TPluginId CTransientKeyInfo::PluginId() const
+  {
+  return iPluginId;
+  }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/source/server/transientkeyinfo.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,120 @@
+/*
+* Copyright (c) 2005-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: 
+* CTransientKeyInfo declaration
+*
+*/
+
+
+/**
+ @file 
+ @released
+ @internalComponent
+*/
+
+#ifndef TRANSIENTKEYINFO_H
+#define TRANSIENTKEYINFO_H
+
+#include "transientkey.h"
+
+namespace AuthServer
+{
+
+/**
+ * CTransientKeyInfo holds persistent data related to transient keys which it
+ * also generates. The class records the parameters required to (re)generate a
+ * transient key from the plugin data, and is used to link encrypted protection
+ * keys a generated transient key.
+ */
+class CTransientKeyInfo : public CBase
+	{
+public:
+	/**
+	 * Sets member data from parameters and randomly initialises the transient
+	 * key generation parameters. Use this method to create a key
+	 * for encrypting a new key.
+	 **/
+	static CTransientKeyInfo* NewL(TPluginId  aPluginId);
+
+	/**
+	 * Sets member data from parameters and randomly initialises the transient
+	 * key generation parameters. Use this method to create a key
+	 * for encrypting a new key.
+	 **/
+	static CTransientKeyInfo* NewLC(TPluginId  aPluginId);
+
+	/**
+	 * Reads all data from the input stream. Use this method to recreate a key
+	 * used to encrypt a key.
+	 **/
+	static CTransientKeyInfo* NewL(RReadStream& aInputStream);
+	
+	/**
+	 * Reads all data from the input stream. Use this method to recreate a key
+	 * used to encrypt a key.
+	 **/
+	static CTransientKeyInfo* NewLC(RReadStream& aInputStream);
+
+	~CTransientKeyInfo();
+
+	/**
+	 * @return the id of the plugin that was used to generate the transient
+	 * key.
+	 **/
+	TPluginId PluginId() const;
+
+	/**
+	 * @return the encrypted protection key
+	 * key.
+	 **/
+	const CEncryptedProtectionKey& EncryptedKey() const;
+
+    /**
+	 * Assign the encrypted protection key associated with the transient
+	 * key. Ownership of the key is taken by this object.
+ 	 *
+	 * @param aEncryptedKey the protection key encrypted with this transient key.
+	 **/
+    void SetEncryptedProtectionKeyL(CEncryptedProtectionKey* aEncryptedKey);
+	  
+	/**
+	 * Create transient key using the plugin data. If this object was created
+	 * from a stream the method will leave with KErrBadPassword if the plugin
+	 * data does not match the original. Ownership of the CTransientKey object
+	 * is returned to the caller.
+	 **/ 
+	CTransientKey* CreateTransientKeyL(const TDesC8& aPluginData) const;
+
+	/**
+	 *
+	 **/
+	void ExternalizeL(RWriteStream& aOutStream) const;
+
+private:
+	
+    void ConstructL(TPluginId aPluginId);
+    void InternalizeL(RReadStream& aInStream);
+
+	/// the id of the plugin that encrypted the key
+	TPluginId iPluginId;
+		
+	/// the encrypted protection key
+	CEncryptedProtectionKey* iEncryptedKey;
+	
+	/// the encryption parameters
+	mutable CPBEncryptionData* iEncryptionData;
+    };
+}
+
+#endif // TRANSIENTKEYINFO_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/authtool/authtool.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,185 @@
+/*
+* Copyright (c) 2005-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: 
+* AuthTool provides a console interface to the AuthServer query
+* methods, basically dumping the contents of the AuthServer's database.
+*
+*/
+
+
+/**
+ @file 
+*/
+#include <e32cons.h>
+#include "authserver_client.h"
+
+using namespace AuthServer;
+
+_LIT(KAnyStr, "Default");
+_LIT(KBiometricStr, "Biometric");
+_LIT(KKnowledgeStr, "Knowledge");
+_LIT(KTokenStr, "Token");
+
+TAuthPluginType types[] = { EAuthDefault, EAuthBiometric, EAuthKnowledge, EAuthToken };
+TPtrC typeNames[] = {KAnyStr(), KBiometricStr(), KKnowledgeStr(), KTokenStr() }; 
+
+_LIT(KUnTrainedStr, "Untrained");
+_LIT(KTrainedStr , "Trained");
+_LIT(KFullyTraininedStr, "Fully Trained");
+TPtrC trainNames[] = { KUnTrainedStr(), KTrainedStr(), KFullyTraininedStr() }; 
+
+_LIT(KMsgAuthToolPanic,"AuthTool: ");
+
+TInt ExtractDetailsL();
+TInt DisplayPlugins(RPluginDescriptions&);
+
+
+GLDEF_C TInt E32Main()
+    {
+    __UHEAP_MARK;
+	
+    CTrapCleanup* cleanupstack=CTrapCleanup::New(); 
+    TRAPD(error,ExtractDetailsL());
+    __ASSERT_ALWAYS(!error,User::Panic(KMsgAuthToolPanic, error)); 
+    delete cleanupstack;
+	
+    __UHEAP_MARKEND;
+    return 0;
+    }
+
+CConsoleBase* console = 0;
+
+TInt ExtractDetailsL()
+  {
+  // create the console
+  console = Console::NewL(_L("AuthTool"),
+										TSize(KDefaultConsWidth,
+											  KDefaultConsHeight));
+  CleanupStack::PushL(console);
+    
+  // connect to server
+  RAuthClient authClient;
+  User::LeaveIfError(authClient.Connect());
+  CleanupClosePushL(authClient);
+
+  // get the plugins
+  RPluginDescriptions plugins;
+  authClient.PluginsL(plugins);
+  CleanupClosePushL(plugins);
+
+  DisplayPlugins(plugins);
+  
+  // get the preferences
+  console->Printf(_L("\nPreferences\n-----------\n"));
+
+  TInt count = sizeof(types)/sizeof(TInt);
+  for (TInt i = 0  ; i < count ; ++i)
+	{
+    console->Printf(_L("%10S : 0x%x\n"), &typeNames[i],
+					authClient.PreferredTypePluginL(types[i]));
+	}
+  console->Printf(_L("\nPress any key to continue\n"));
+  console->Getch();
+
+  // get the identities
+  console->Printf(_L("\nIdentities\n-----------\n"));
+  
+  RIdentityIdArray ids;
+  authClient.IdentitiesL(ids);
+  CleanupClosePushL(ids);
+  
+  for (TInt index = 0  ; index < ids.Count(); ++index)
+	{
+    HBufC* str = authClient.IdentityStringL(ids[index]);	
+
+	CleanupStack::PushL(str);
+	if (str != 0)
+	  {
+      console->Printf(_L("0x%x : %S\n"), ids[index],
+						str);
+	  }
+	else
+	  {
+      console->Printf(_L("0x%x : No Name\n"), ids[index]);
+	  }
+	CleanupStack::PopAndDestroy(str);
+	}
+  console->Printf(_L("\nPress any key to finish\n"));	
+  console->Getch();
+
+  CleanupStack::PopAndDestroy(4,console);
+  return 0;
+  }
+
+TPtrC* train(TAuthTrainingStatus aT)
+  {
+  TInt idx =0; 
+  switch (aT)
+	{
+  case EAuthUntrained:
+	idx = 0;
+	break;
+  case EAuthTrained:
+	idx = 1;
+	break;
+  case EAuthFullyTrained:
+	idx = 2;
+	break;
+	}
+  return &trainNames[idx];
+  } 
+
+TPtrC* type(TAuthPluginType aT)
+  {
+  TInt idx =0; 
+  switch (aT)
+	{
+  case EAuthDefault:
+	idx = 0;
+	break;
+  case EAuthBiometric:
+	idx = 1;
+	break;
+  case EAuthKnowledge:
+	idx = 2;
+	break;
+  case EAuthToken:
+	idx = 3;
+	break;
+  case EAuthPerformance:
+	idx = 4;
+	break;
+	}
+  return &typeNames[idx];
+  } 
+
+TInt DisplayPlugins(RPluginDescriptions& aPlugins)
+  {
+  console->Printf(_L("\nPlugin Descriptions\n-------------------\n"));
+  for (TInt i = 0  ; i < aPlugins.Count(); ++i)
+	{
+	console->Printf(_L("ID            : 0x%x\n"), aPlugins[i]->Id());
+	console->Printf(_L("Name          : %S\n"), aPlugins[i]->Name());
+	console->Printf(_L("Type          : %S\n"), type(aPlugins[i]->Type()));
+	console->Printf(_L("Training      : %S\n"), train(aPlugins[i]->TrainingStatus()));
+	console->Printf(_L("#Combinations : %d\n"), aPlugins[i]->MinEntropy());
+	console->Printf(_L("FPR           : %d\n"), aPlugins[i]->FalsePositiveRate());
+	console->Printf(_L("FNR           : %d\n\n"), aPlugins[i]->FalseNegativeRate());
+    console->Printf(_L("\nPress any key to continue\n"));
+    console->Getch();
+	}
+  
+  return 0;
+  }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/authtool/authtool.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+
+/**
+@file
+
+@SYMPurpose authtool.exe used to dump the contents of the AuthServer's database.
+*/
+
+TARGET	authtool.exe
+TARGETTYPE	exe
+
+UID 0x10000079 0x10001011
+VENDORID 0x70000001
+
+CAPABILITY WriteDeviceData ReadDeviceData ReadUserData WriteUserData
+
+SOURCEPATH	.
+SOURCE authtool.cpp
+
+SYSTEMINCLUDE /epoc32/include
+USERINCLUDE ../../inc/authserver
+
+LIBRARY	euser.lib authclient.lib authcommon.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/group/200032E7.rss	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2006-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: 
+* t_pinplugindlg notifier resource file.
+*
+*/
+
+
+#include <ecom/registryinfo.rh>
+#include <uikon.hrh>
+
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <uiklaf/private/pluginuid.hrh>
+#endif
+
+
+RESOURCE REGISTRY_INFO r_registry
+	{
+	dll_uid = 0x200032E7;
+	interfaces =
+		{
+		INTERFACE_INFO
+			{
+			interface_uid = KUikonUidPluginInterfaceNotifiers;
+			implementations =
+				{
+				BINARY_IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x200032E7;
+					version_no = 1;
+					display_name = "t_pinplugindlg notifier";
+					default_data = {0};
+					opaque_data = {0};
+					}
+				};
+			}
+		};
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/group/bld.inf	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2005-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: 
+* Reference Pin Plugin implementation 
+*
+*/
+
+
+/**
+ @file
+*/
+
+PRJ_PLATFORMS
+DEFAULT GCCE
+
+PRJ_EXPORTS
+
+// ROMKIT includes
+../inc/pinplugin.iby /epoc32/rom/include/pinplugin.iby
+
+../inc/pinplugindialogdefs.h				SYMBIAN_OS_LAYER_PLATFORM_EXPORT_PATH(pinplugindialogdefs.h)
+
+#ifndef TOOLS
+#ifndef TOOLS2
+
+PRJ_MMPFILES
+pinplugin.mmp
+
+
+PRJ_TESTMMPFILES
+tpinplugin.mmp
+t_pinplugindlg.mmp
+t_pinplugindlg_text.mmp
+
+#endif // TOOLS2
+#endif // TOOLS
+
+PRJ_TESTEXPORTS
+
+// ROMKIT includes
+../inc/tpinplugin.iby /epoc32/rom/include/tpinplugin.iby
+
+../tpinplugin/scripts/tpinplugin.script 	 /epoc32/winscw/c/tauth/tpinplugin/scripts/tpinplugin.script
+../tpinplugin/scripts/tpinplugin.ini		 /epoc32/winscw/c/tauth/tpinplugin/scripts/tpinplugin.ini
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/group/pinplugin.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2006-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: 
+*
+*/
+
+
+
+TARGET 		pinplugin.dll
+TARGETTYPE 	PLUGIN
+
+// ECom Dll recognition UID followed by the unique UID for this dll
+UID			0x10009D8D 0x200032E4
+VENDORID		0x70000001
+CAPABILITY	TrustedUI ProtServ ReadDeviceData WriteDeviceData Location SurroundingsDD UserEnvironment ReadUserData WriteUserData AllFiles 
+
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+USERINCLUDE	.
+
+USERINCLUDE	../pinplugin
+USERINCLUDE	../../../inc_private
+
+SOURCEPATH	../pinplugin
+SOURCE		pinplugin.cpp		
+SOURCE		pinpluginao.cpp
+SOURCE		pinplugindb.cpp
+SOURCE		pinplugindialog.cpp
+
+
+start resource 200032E4.rss
+#ifdef SYMBIAN_SECURE_ECOM
+TARGET pinplugin.rsc
+#endif
+end
+
+start resource pinpluginconfig.rss
+TARGETPATH /resource/pinplugin
+HEADER
+end
+
+
+LIBRARY	ecom.lib
+LIBRARY	euser.lib
+LIBRARY	estor.lib
+LIBRARY	efsrv.lib  	
+LIBRARY	hash.lib
+LIBRARY	bafl.lib
+LIBRARY	authcommon.lib 
+SMPSAFE
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/group/t_pinplugindlg.mmh	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2006-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: 
+* tpinplugindlg.mmh
+* The Test nofifier is built both as a text shell and as an extended notifer
+*
+*/
+
+
+#ifdef T_PINPLUGINDLG_TEXTSHELL
+
+MACRO _T_PINPLUGINDLG_TEXTSHELL
+
+TARGET          tpinplugindlg_text.dll
+TARGETTYPE      TEXTNOTIFIER2
+TARGETPATH  	\sys\bin\tnotifiers
+
+UID				0x101fe38b 0x200032E7
+
+#else
+
+TARGET          tpinplugindlg.dll
+TARGETTYPE		PLUGIN
+UID				0x10009d8d 0x200032E7
+
+LIBRARY			eiksrv.lib
+
+start resource	200032E7.RSS
+target tpinplugindlg.rsc
+end
+
+#endif
+
+CAPABILITY    	All -Tcb
+
+USERINCLUDE		.
+
+SYSTEMINCLUDE   \epoc32\include\techview
+SYSTEMINCLUDE	\epoc32\include\ecom
+SYSTEMINCLUDE 	\epoc32\include
+SYSTEMINCLUDE 	\epoc32\include\test
+
+SOURCEPATH	    ..\tpinplugindlg
+
+SOURCE			tpinplugindlg.cpp
+
+LIBRARY			euser.lib 
+LIBRARY			estor.lib 
+LIBRARY			efsrv.lib
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/group/t_pinplugindlg.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2006-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: 
+* Tpinplugindlg.mmp
+*
+*/
+
+
+#include "t_pinplugindlg.mmh"
+
+VENDORID 0x70000001
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/group/t_pinplugindlg_text.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2006-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: 
+*
+*/
+
+
+#define T_PINPLUGINDLG_TEXTSHELL
+
+#include "t_pinplugindlg.mmh"
+
+VENDORID 0x70000001
+SMPSAFE
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/group/tpinplugin.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2006-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: 
+* tpinplugin.exe Tests plugin
+*
+*/
+
+
+/**
+ @file
+*/
+
+TARGET      	tpinplugin.exe
+TARGETTYPE  	exe
+
+// To allow setcap to work
+ROMTARGET    // Empty ROM path means don't include normal execute-in-place file
+RAMTARGET /sys/bin/    // Target path (in ROM) for RAM executable image
+
+UID         	0x102740FC 0x102740FC 
+VENDORID    	0x70000001
+
+CAPABILITY TrustedUI ProtServ ReadDeviceData WriteDeviceData Location SurroundingsDD UserEnvironment
+
+SYSTEMINCLUDE 	/epoc32/include
+SYSTEMINCLUDE	/epoc32/include/authserver
+SYSTEMINCLUDE 	/epoc32/include/test
+
+USERINCLUDE		.
+USERINCLUDE		../../../source/common
+USERINCLUDE		../../../inc_private
+USERINCLUDE     ../pinplugin
+
+SOURCEPATH  	../tpinplugin
+SOURCE			tpinplugin.cpp
+SOURCE			tpinpluginteststep.cpp
+SOURCE			tpinplugintestactive.cpp
+
+
+LIBRARY     	euser.lib
+LIBRARY			testexecuteutils.lib
+LIBRARY			testexecutelogclient.lib
+LIBRARY			bafl.lib
+LIBRARY			ecom.lib
+LIBRARY			estor.lib
+LIBRARY			efsrv.lib
+LIBRARY			authcommon.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/inc/pinplugin.iby	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+
+
+#ifndef __PINPLUGIN_IBY__
+#define __PINPLUGIN_IBY__
+
+REM Pinplugin a reference Plugin
+ECOM_PLUGIN(pinplugin.dll, 0x200032E4.rsc)
+data=MULTI_LINGUIFY(RSC ZRESOURCE\pinplugin\pinpluginconfig			resource\pinplugin\pinpluginconfig)
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/inc/pinplugindialogdefs.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,174 @@
+/*
+* Copyright (c) 2006-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: 
+*
+*/
+
+
+/**
+ @file 
+ @internalAll
+ @test
+*/
+
+#ifndef __PINPLUGINDIALOGDEFS_H__
+#define __PINPLUGINDIALOGDEFS_H__
+
+/** PinPlugin Dialog Notifier Uid */
+const TUid KUidPinPluginDialogNotifier = { 0x200032E6 };
+/** Pinplugin Dialog Notification for the DialogOperation */
+typedef TUint TPinPluginDialogNotification;
+
+
+/**
+ Defines the operations provided by the Pin Plugin dialog. 
+ It is used to identify the operation when transferring over to the notifier plugin.
+ */
+enum TPinPluginDialogOperation
+	{
+	/** Displays the message about Training/Retraining/Identify process met success/failure */
+	EPinPluginInfo = 0x100,
+	/** Train/ReTrain Pin */
+	EPinPluginTraining = 0x102,
+	/** Identify Pin */
+	EPinPluginIdentify = 0x104
+	};
+	
+/** Pinplugin Dialog Operation Bit Mask */
+const TUint KPinPluginDialogOperationMask = 0xFFFF;
+
+/** 
+ Pinplugin Info Message display about the result for few seconds
+ without expecting the user input.
+ */
+enum TPinPluginInfoMessage 
+	{
+	/** PinPlugin TrainingSuccess Message */
+	EPinPluginTrainingSuccess = 0,
+	/** PinPlugin ReTrainingSuccess Message */
+	EPinPluginReTrainingSuccess,
+	/** PinPlugin IdentificationSuccess Message */
+	EPinPluginIdentificationSuccess,
+	/** PinPlugin IdentificationFailure Message */
+	EPinPluginIdentificationFailure
+	};
+
+/** PinPlugin TrainingMessage display the process is Train/ReTrain */
+enum TPinPluginTrainingMessage
+	{
+	/** ETraining */
+	ETraining = 0x10,
+	/** EReTraining */
+	EReTraining
+	};
+	
+/** PinPlugin DialogResult used to get the result of the Dialog */
+enum TPinPluginDialogResult
+	{
+	/** Command OK */
+	EOk = 0x01,
+	/** Command CANCEL */
+	ECancel,
+	/** Command QUIT */
+	EQuit,
+	/** Command NEXT */
+	ENext
+	};
+
+/** The max Pin length should not exceed 32, because this is the maximum
+ *	size possible in the CEikSecretEditor class. */
+const TInt KMaxPinLength = 32;
+
+/** A Pin value */
+typedef TBuf8<KMaxPinLength> TPinValue;
+
+
+/**  Input data for the PinIdentify */
+class TPinIdentifyInput
+	{
+public:
+	TPinPluginDialogNotification iOperation;
+
+	/** minimum pin length */
+	TInt iMinLength;
+	/** maximum pin length */
+	TInt iMaxLength;
+	/** retry true or not */
+	TBool iRetry;
+	};
+
+/** Pin IdentifyInput Buffer */
+typedef TPckgBuf<TPinIdentifyInput> TPinIdentifyInputBuf;
+
+/** Input data for the PinTraining */
+class TPinTrainingInput
+	{
+public:
+	TPinPluginDialogNotification iOperation;
+	TPinPluginTrainingMessage iMessage;
+	
+	/** minimum pin length */
+	TInt iMinLength;
+	/** maximum pin length */
+	TInt iMaxLength;
+	/** current pin length used for the pinvalues */
+	TInt iCurrentPinLength;
+	/** Random PinValue for Choice 1 */
+	TPinValue iPinValue1;
+	/** Random PinValue for Choice 2 */
+	TPinValue iPinValue2;
+	/** Random PinValue for Choice 3 */
+	TPinValue iPinValue3;
+	/** Random PinValue for Choice 4 */
+	TPinValue iPinValue4;
+	};
+
+/** Pin TrainingInput Buffer */
+typedef TPckgBuf<TPinTrainingInput> TPinTrainingInputBuf;
+
+/** Input data for the PinInfo */
+class TPinInfoInput
+	{
+public:
+	TPinPluginDialogNotification iOperation;
+	TPinPluginInfoMessage iMessage;
+	};
+
+/** The buffer holds the Message about the result of the Training/ReTraining success
+    or Identification success/failure for few seconds without expecting the user input. */
+typedef TPckgBuf<TPinInfoInput> TPinInfoInputBuf;
+
+
+/** Output data for the PinIdentify, PinTraining */
+class TPinDialogOutput
+	{
+public:
+	/** iPinValue - To get the pinvalue when case is PinIdentify */
+	TPinValue iPinValue;
+	/** 
+	 iIndex - To get the index of selected pin when case is PinTraining 
+	 iIndex value should be within the range 0 - 3.
+	 */
+	TInt iIndex;
+	/** iNewPinLength - To get the new pin length for the next dialog */
+	TInt iNewPinLength; 
+	/** iResult - To get the output command when case is PinTraining / PinIdentify */
+	TPinPluginDialogResult iResult;
+	};
+
+/** The buffer holds the data for the TPinDialogOutput */
+typedef TPckgBuf<TPinDialogOutput> TPinDialogOutputBuf;
+
+
+#endif // __PINPLUGINDIALOGDEFS_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/inc/tpinplugin.iby	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+
+
+#ifndef __TPINPLUGIN_IBY__
+#define __TPINPLUGIN_IBY__
+
+#include <testexecute.iby>
+
+file=ABI_DIR\BUILD_DIR\tpinplugin.exe		sys\bin\tpinplugin.exe
+ECOM_PLUGIN(tpinplugindlg.dll, 200032E7.rsc)
+
+data = \epoc32\winscw\c\tauth\tpinplugin\scripts\tpinplugin.ini				tauth\tpinplugin\scripts\tpinplugin.ini        attrib=W
+data = \epoc32\winscw\c\tauth\tpinplugin\scripts\tpinplugin.script		    tauth\tpinplugin\scripts\tpinplugin.script		  
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/pinplugin/200032E4.rss	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2006-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: 
+* UIDs quick-ref
+* ECOM DLL UID:		0x200032E4 
+* ECOM interface UID:		0x102740FE
+* ECOM Implementation:		0x200032E5	
+*
+*/
+
+
+
+#include <ecom/registryinfov2.rh>
+
+// Declares info for one implementation
+RESOURCE REGISTRY_INFO theInfo
+	{
+	// UID for the plug-in DLL; matches name of this file
+	dll_uid = 0x200032E4;
+	resource_format_version = RESOURCE_FORMAT_VERSION_2;
+
+	// Declare array of interface info
+	interfaces = 
+		{
+		INTERFACE_INFO
+		 	{
+		 	// UID of interface that is implemented (i.e. CAuthPluginInterface)							
+		 	interface_uid = 0x102740FE;			
+			implementations = 
+				{
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x200032E5;
+					version_no = 1;
+					display_name = "Symbian PIN Plugin Reference Implementation";
+					default_data = "200032E5";
+					opaque_data = "";
+					rom_only=1;
+					}
+				};	
+			}
+		};			
+	}		
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/pinplugin/pinpanic.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2006-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: 
+* The panic String and panic code declarations	
+*
+*/
+
+
+/**
+ @file 
+*/
+
+#ifndef __PINPANIC_H__
+#define __PINPANIC_H__
+
+/** Panic codes generated by the pinplugin */
+enum TPinPanics
+	{
+	/** The Resource file configuration values are not valid */
+	EPinPanicInvalidConfigValues=0,
+	/** The new Pinlength received from Dialog Interface is incorrect */
+	EPinPanicInvalidPinLength=1,
+	/** The index of the selected Pin for the Train process otherthan 0 - 3 */
+	EPinPanicIncorrectIndex=2
+	};
+
+/** The Panic String to Display */
+_LIT(KPinPluginPanicString,"PINPLUGIN");
+
+#endif // __PINPANIC_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/pinplugin/pinplugin.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,257 @@
+/*
+* Copyright (c) 2006-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: 
+* CPinPlugin implementation
+*
+*/
+
+
+/**
+ @file 
+*/
+
+
+#include "pinplugin.h"
+#include <bautils.h>
+#include <barsread.h>
+#include <e32math.h>
+#include <pinpluginconfig.rsg>
+#include <ecom/ecom.h>
+#include <ecom/implementationproxy.h>
+#include <f32file.h>
+
+using namespace AuthServer;
+
+_LIT(KPinPluginResourceFile, "z:\\Resource\\pinplugin\\pinpluginconfig.rsc");
+
+const TPluginId KPinPluginImplementationUid = 0x200032E5;
+
+CPinPlugin* CPinPlugin::NewL()
+ 	{
+ 	CPinPlugin* self = CPinPlugin::NewLC();
+ 	CleanupStack::Pop();
+ 	return self;
+	}
+	
+CPinPlugin* CPinPlugin::NewLC()
+	{
+	CPinPlugin* self = new(ELeave) CPinPlugin();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+	
+CPinPlugin::~CPinPlugin()
+	{
+	delete iPinPluginAO;
+	delete iPinName;
+	delete iPinDescription;
+	}
+
+CPinPlugin::CPinPlugin()
+	{	
+	iActive = ETrue;
+	}
+		
+void CPinPlugin::ConstructL()
+	{
+	TInt retryCount, pinSize, pinMinSize, pinMaxSize;
+	TReal val;
+	
+	// Verifies the UID/SID of the Authentication server
+	// to make sure pinplugin is loaded from Authentication server.  
+	RProcess process;
+        
+	ReadResourceL(retryCount, pinSize, pinMinSize, pinMaxSize);
+
+	__ASSERT_ALWAYS(retryCount >= 0 && pinSize >= 0 && pinMinSize >= 0 &&
+	 		pinMaxSize >= 0 && pinSize >= pinMinSize && pinSize <= pinMaxSize,
+	 		User::Panic(KPinPluginPanicString(), EPinPanicInvalidConfigValues));
+
+	iName.Set(iPinName->Des());
+	iDescription.Set(iPinDescription->Des());
+	Math::Pow10(val, pinMinSize);
+	// since pinMinSize is always a Int value, val never have a floating point
+	// in future if entropy is changed to have real value also, it will work
+	// now in our case, compiler do the default truncation.
+	iMinEntropy = val;
+	iFalsePositiveRate = 0;
+	iFalseNegativeRate = 0;
+	iType = AuthServer::EAuthKnowledge;
+	 
+	//Create a new implementation object
+	iPinPluginAO = CPinPluginAO::NewL(pinSize, pinMinSize, pinMaxSize, retryCount);
+	
+	SetPluginStateL();
+	
+	}
+	
+	
+//Implement CAuthPluginInterface definitions
+
+void CPinPlugin::Identify(TIdentityId& aId,const TDesC& aClientMessage,
+						  HBufC8*& aResult, TRequestStatus& aRequest)
+	{
+	iPinPluginAO->Identify(aId, aClientMessage, aResult, aRequest);
+	}
+	
+void CPinPlugin::Cancel()
+	{
+	iPinPluginAO->Cancel();		
+	}
+
+void CPinPlugin::Train(TIdentityId aId, HBufC8*& aResult, TRequestStatus& aRequest)
+	{
+	iPinPluginAO->Train(aId, aResult, aRequest);
+	}
+
+TInt CPinPlugin::Forget(TIdentityId aId)
+	{
+	return iPinPluginAO->Forget(aId);
+	}
+
+TBool CPinPlugin::IsActive() const
+	{
+	return iActive;
+	}
+	
+TInt CPinPlugin::DefaultData(TIdentityId aId, HBufC8*& aOutputBuf)
+	{
+	return iPinPluginAO->DefaultData(aId, aOutputBuf);
+	}
+
+TInt CPinPlugin::Reset(TIdentityId aIdentityId, const TDesC& aRegistrationData, HBufC8*& aResult)
+	{
+	TRAPD(err, iPinPluginAO->ResetL(aIdentityId, aRegistrationData, aResult));
+	return err;
+	}
+
+TPluginId CPinPlugin::Id() const
+	{
+	return KPinPluginImplementationUid;
+	}
+
+void CPinPlugin::ReadResourceL(TInt& aRetryCount, TInt& aPinSize, TInt& aPinMinSize,
+							TInt& aPinMaxSize)
+	{
+	RFs fs;
+	TFileName fileName(KPinPluginResourceFile);
+	User::LeaveIfError(fs.Connect());
+	CleanupClosePushL(fs);
+	BaflUtils::NearestLanguageFile(fs,fileName);
+	RResourceFile resourceFile;
+	resourceFile.OpenL(fs,fileName);
+	CleanupClosePushL(resourceFile);
+	resourceFile.ConfirmSignatureL(0);
+	resourceFile.Offset();
+	
+	aRetryCount = ResourceValueL(resourceFile, R_IDENTIFY_DIALOG_RETRY_COUNT);
+	aPinSize = ResourceValueL(resourceFile, R_PIN_SIZE);
+	aPinMinSize = ResourceValueL(resourceFile, R_PIN_MIN_SIZE);
+	aPinMaxSize = ResourceValueL(resourceFile, R_PIN_MAX_SIZE);
+
+	HBufC8* res = resourceFile.AllocReadLC(R_PLUGIN_INFO);
+	TResourceReader reader;
+	reader.SetBuffer(res);
+	iPinName = reader.ReadTPtrC().AllocL();
+	iPinDescription = reader.ReadTPtrC().AllocL();
+	CleanupStack::PopAndDestroy(3, &fs);
+	}
+
+TInt CPinPlugin::ResourceValueL(RResourceFile& aResFile, const TInt aResourceID)
+	{
+	TResourceReader reader;
+	HBufC8* res = aResFile.AllocReadLC(aResourceID);
+	reader.SetBuffer(res);
+	TInt val = reader.ReadInt8();
+	CleanupStack::PopAndDestroy(res);
+	return val;
+	}
+	
+void CPinPlugin::SetPluginStateL()
+	{
+	// identifies the pinplugins state by looking for a file 
+	// in system drive.
+	_LIT(KPinPlugin,"pinplugin_inactive.txt");
+	TFileName filename;
+	filename.Copy(KPinPlugin); // convert from 8 -> 16 bit descriptor
+			
+	TDriveUnit sysDrive = RFs::GetSystemDrive();
+	TDriveName sysDriveName (sysDrive.Name());
+	filename.Insert(0,sysDriveName);
+	filename.Insert(2,_L("\\"));
+		
+	RFs fs;
+	User::LeaveIfError(fs.Connect());
+	TEntry entry;
+	TInt err = fs.Entry(filename, entry);
+	if(err == KErrNone)
+		{
+		iActive = EFalse;
+		}
+	else if( err == KErrNotFound )
+		{
+		iActive = ETrue;
+		}
+	else
+		{
+		User::LeaveIfError(err);
+		}
+	}
+
+// Map the interface UIDs to implementation factory functions
+const TImplementationProxy ImplementationTable[] = 
+	{
+	IMPLEMENTATION_PROXY_ENTRY(KPinPluginImplementationUid,	CPinPlugin::NewL)
+	};
+
+// Exported proxy function to resolve intstantiation methods for an ECOM plugin dll
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+	{
+	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+	return ImplementationTable;
+	}
+
+
+const TPtrC& CPinPlugin::Name() const
+  {
+  return iName;
+  }
+const TPtrC& CPinPlugin::Description() const
+  {
+  return iDescription;
+  }
+TAuthPluginType CPinPlugin::Type() const 
+  {
+  return iType;
+  }
+
+TEntropy CPinPlugin::MinEntropy() const
+  {
+  return iMinEntropy;
+  }
+
+TPercentage CPinPlugin::FalsePositiveRate() const
+  {
+  return iFalsePositiveRate;
+  }
+
+TPercentage CPinPlugin::FalseNegativeRate() const
+  {
+  return iFalseNegativeRate;
+  }
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/pinplugin/pinplugin.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,119 @@
+/*
+* Copyright (c) 2006-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: 
+* CPinPlugin is an CAuthPluginInterface implementation.
+*
+*/
+
+
+/**
+ @file 
+ @internalAll
+ @test
+*/
+
+
+#ifndef PIN_PLUGIN_H
+#define PIN_PLUGIN_H
+
+#include <barsc.h>
+#include <authserver/authplugininterface.h>
+#include "pinpluginao.h"
+
+/**
+ An implementation of the CAuthPluginInterface definition
+ */
+class CPinPlugin : public AuthServer::CAuthPluginInterface
+	{
+public:
+	/** static methods to constuct the object of the CPinPlugin */
+	static CPinPlugin* NewL();
+	static CPinPlugin* NewLC();
+	/** Destructor */
+	~CPinPlugin();
+
+public:			//from CAuthPluginInterface
+	void Identify(AuthServer::TIdentityId& aId, const TDesC& aClientMessage,
+				  HBufC8*& aResult, TRequestStatus& aRequest);	
+	void Train(AuthServer::TIdentityId aId, HBufC8*& aResult, TRequestStatus& aRequest);		
+	TInt Forget(AuthServer::TIdentityId aId);
+	TInt DefaultData(AuthServer::TIdentityId aId, HBufC8*& aOutputBuf);
+	TInt Reset(AuthServer::TIdentityId aIdentityId, const TDesC& aRegistrationData, HBufC8*& aResult);
+	TBool IsActive() const;
+	void Cancel();
+	AuthServer::TPluginId Id() const;
+	const TPtrC& Name() const;
+	const TPtrC& Description() const;
+	AuthServer::TEntropy MinEntropy() const;
+	AuthServer::TPercentage FalsePositiveRate() const;
+	AuthServer::TPercentage FalseNegativeRate() const;
+	AuthServer::TAuthPluginType Type() const;
+private:
+	/** 
+	  Second Phase Constructor
+	  @panic EPinPanicInvalidConfigValues	if the resource file contains the invalid entries
+	  */
+	void ConstructL();
+	/** Constructor */
+	CPinPlugin();
+	/**
+	 Opens the Resource file and Read the values from it.
+	 
+	 @param aRetryCount		On return, it holds Retry Count value.
+	 @param aPinSize		On return, it holds Default Pin Size.
+	 @param aPinMinSize		On return, it holds Minimum Pin Size.
+	 @param aPinMaxSize		On return, it holds Maximum Pin Size.
+	 */
+	void ReadResourceL(TInt& aRetryCount, TInt& aPinSize, TInt& aPinMinSize,
+					TInt& aPinMaxSize);
+	/**
+	 Utility function to give a value for a particular resource Id.
+	 
+	 @param aResFile		The resource file to be read
+	 @param aResourceID		The resource Id to be read from the resource file
+	 @return				returns the value read from the resource file.
+ 	 */
+	TInt ResourceValueL(RResourceFile& aResFile, const TInt aResourceID);
+
+	void SetPluginStateL();
+	
+private:
+	/** CPinpluginAO object to process the operation in AO */
+	CPinPluginAO* iPinPluginAO;
+	/** The name of plugin read from the resource file */
+	HBufC* iPinName;
+	/** The Description for the plugin read from the resource file */
+	HBufC* iPinDescription;
+protected:
+	/// The name of the plugin. Derived classes should set this member.
+	TPtrC iName;
+	/// The plugin's description. Derived classes should set this member.
+	TPtrC iDescription;
+	/// The minumum entropy provided by the plugin. Derived classes should set
+	/// this member.
+	AuthServer::TEntropy iMinEntropy;
+	/// The false positive rate of the plugin. Derived classes should set this
+	/// member.
+	AuthServer::TPercentage iFalsePositiveRate;
+	/// The false negative rate of the plugin. Derived classes should set this
+	/// member.
+	AuthServer::TPercentage iFalseNegativeRate;
+ 	/// The type of the plugin. Derived classes should set this member.
+	AuthServer::TAuthPluginType iType;
+	/// the state of the plugin.
+	TBool iActive;
+	};
+
+#endif	/* PIN_PLUGIN_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/pinplugin/pinplugin.rh	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2006-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: 
+*
+*/
+
+
+
+#define KMaxLength 256
+
+STRUCT PIN_SIZE
+	{
+	LONG pinsize;
+	}
+
+STRUCT PIN_MIN_SIZE
+	{
+	LONG minsize;
+	}
+
+STRUCT PIN_MAX_SIZE
+	{
+	LONG maxsize;
+	}
+
+STRUCT IDENTIFY_DIALOG_RETRY_COUNT
+	{
+	LONG retrycount;
+	}
+
+STRUCT PLUGIN_INFO
+	{
+	LTEXT name(KMaxLength) = "";
+	LTEXT Description(KMaxLength) = "";
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/pinplugin/pinpluginao.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,477 @@
+/*
+* Copyright (c) 2006-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: 
+* CPinPluginAO implementation
+*
+*/
+
+
+/**
+ @file 
+*/
+
+#include "pinpluginao.h"
+#include <hash.h>
+#include <authserver/auth_srv_errs.h>
+#include <authserver/authtypes.h>
+#include <e32math.h>
+
+using namespace AuthServer;
+
+/** 
+ KDefaultPinDigit is used to generate the default pinvalue for the DefaultData().
+ The default pinvalue is generated by appending KDefaultPinDigit for iPinSize times.
+ */
+const TUint KDefaultPinDigit = 1;
+
+/** 
+ The selected pin index for the Train/Retrain operation, returned by
+ Dialog Notifier should be in the range KIndexLow and KIndexHigh. This should
+ be validated in the Dialog implementation. If Pinplugin receives any other
+ values, then pinplugin will panic.
+ */
+const TInt KIndexLow = 0;
+const TInt KIndexHigh = 3;
+
+CPinPluginAO* CPinPluginAO::NewL(TInt aPinSize, TInt aPinMinSize, TInt aPinMaxSize, TInt aRetryCount)
+	{
+	CPinPluginAO* self = CPinPluginAO::NewLC(aPinSize, aPinMinSize, aPinMaxSize, aRetryCount);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CPinPluginAO* CPinPluginAO::NewLC(TInt aPinSize, TInt aPinMinSize, TInt aPinMaxSize, TInt aRetryCount)
+	{
+	CPinPluginAO* self = new(ELeave) CPinPluginAO(aPinSize, aPinMinSize, aPinMaxSize, aRetryCount);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+	
+CPinPluginAO::CPinPluginAO(TInt aPinSize, TInt aPinMinSize, TInt aPinMaxSize, TInt aRetryCount)
+	:CActive(EPriorityStandard), iRetryCount(aRetryCount), iPinSize(aPinSize), iPinMinSize(aPinMinSize),
+	iPinMaxSize(aPinMaxSize)
+	{
+	CActiveScheduler::Add(this);
+	}
+	
+void CPinPluginAO::ConstructL()
+	{
+	iNewPinSize = iPinSize;
+	
+	// construct PinpluginDialog
+	iPinPluginDialog = CPinPluginDialog::NewL();
+	// construct the DB
+	iPinPluginDb = CPinPluginDB::NewL();
+	iDialogResult = new (ELeave) TPinPluginDialogResult;
+	iRetryRefCount = iRetryCount;
+	}
+
+CPinPluginAO::~CPinPluginAO()
+	{
+	Deque();
+	delete iDialogResult;
+	delete iPinPluginDialog;
+	delete iPinPluginDb;
+	iPinList.ResetAndDestroy();
+	iIdKeyList.ResetAndDestroy();
+	iIdKeyHashList.ResetAndDestroy();
+	}
+	
+void CPinPluginAO::Identify(TIdentityId& aId, const TDesC& aClientMessage,
+							HBufC8*& aResult, TRequestStatus& aRequest)
+	{
+	iState = EIdentify;
+	iIdentityId = aId;
+	iIdentityIdPtr = &aId;
+	
+	aRequest = KRequestPending;
+	iRequestStatus = &aRequest;
+
+	iClientMessage = static_cast<const HBufC*>(&aClientMessage);
+	iResult = &aResult;
+	aResult = NULL;	
+ 
+	SetActive();
+	TRequestStatus* stat = &iStatus;
+	User::RequestComplete(stat, KErrNone);
+	}
+
+void CPinPluginAO::Train(TIdentityId aId, HBufC8*& aResult, TRequestStatus& aRequest)
+	{
+	iState = ETrain;
+	iIdentityId = aId;
+
+	aRequest = KRequestPending;
+	iRequestStatus = &aRequest;
+
+	iResult = &aResult;
+	aResult = NULL;	
+
+	SetActive();
+	TRequestStatus* stat = &iStatus;
+	User::RequestComplete(stat, KErrNone);
+    }
+	
+TInt CPinPluginAO::DefaultData(TIdentityId aId, HBufC8*& aOutputBuf)
+	{
+	aOutputBuf = NULL;
+	TPinValue defaultPin;
+	for (TInt i = 0; i < iPinSize; i++)
+		{
+		defaultPin.AppendNum(KDefaultPinDigit);	
+		}
+		
+	HBufC8* identityKey = NULL;
+	HBufC8* identityKeyHash = NULL;
+	TRAPD(err, 
+		identityKeyHash = GenerateKeyHashL(defaultPin, identityKey);
+		CleanupStack::PushL(identityKeyHash);
+		CleanupStack::PushL(identityKey);
+		aOutputBuf = (*identityKey).AllocL();
+		iPinPluginDb->AddPinL(aId, *identityKeyHash);
+		CleanupStack::PopAndDestroy(2, identityKeyHash));
+		
+	return err;
+	}
+
+TInt CPinPluginAO::Forget(TIdentityId aId)
+	{
+	TInt err = KErrNone;
+	TRAP(err, iPinPluginDb->RemovePinL(aId));
+	if (err == KErrNotFound)
+		{
+		err = KErrAuthServNoSuchIdentity;
+		}
+	return err;
+	}
+
+void CPinPluginAO::ResetL(TIdentityId aIdentityId, const TDesC& aRegistrationData, HBufC8*& aResult)
+	{
+	// Remove the current trained information and register using the newly supplied registration
+	// data (Since pin plugin is a knowledge based plugin, the registration data supplied is assumed to be the pin)
+	// For other plugin types this information is ignored and the identity is simply set as untrained
+
+	// If no registration data is supplied then just perform a forget
+	if (aRegistrationData == KNullDesC)
+		{
+		aResult = NULL;
+		TInt err = Forget(aIdentityId);
+		User::LeaveIfError(err);
+		return;
+		}
+
+	// Ensure registration data length is less than or equal to max allowed pin length
+	TInt pinLen = aRegistrationData.Length();
+	if (pinLen > KMaxPinLength)
+		{
+		User::Leave(KErrArgument);
+		}
+
+	// Convert registration data to 8 bit 
+	// Note that no unicode conversion is being done here since a pin cannot be in unicode
+	RBuf8 pinBuf;
+	pinBuf.CreateL(pinLen);
+	CleanupClosePushL(pinBuf);
+	pinBuf.Copy(aRegistrationData.Left(pinLen));
+	TPinValue pin(pinBuf);
+	CleanupStack::PopAndDestroy(&pinBuf);
+
+	// Generate the identity key and identity key hash
+	HBufC8* identityKey = NULL;
+	HBufC8* identityKeyHash = GenerateKeyHashL(pin, identityKey);
+	CleanupStack::PushL(identityKeyHash);
+	CleanupStack::PushL(identityKey);
+
+	// Ensure another identity doesn't have the same pin
+	TIdentityId tempId = iPinPluginDb->IdFromPin(*identityKeyHash);
+	if ((tempId != aIdentityId) && (tempId != KUnknownIdentity))
+		{
+		CleanupStack::PopAndDestroy(2, identityKeyHash);
+		// This appears to be the most appropriate error code - The important point is to convery Reset has failed.
+		User::Leave(KErrInUse);
+		}
+	else if (tempId == aIdentityId)
+		{
+		// Nothing to do
+		aResult = identityKey;		// Ownership transferred to caller
+		CleanupStack::Pop(identityKey);
+		CleanupStack::PopAndDestroy(identityKeyHash);
+		return;
+		}
+
+	// Replace the training data
+	iPinPluginDb->UpdatePinL(aIdentityId, *identityKeyHash);
+	aResult = identityKey;		// Ownership transferred to caller
+	CleanupStack::Pop(identityKey);
+	CleanupStack::PopAndDestroy(identityKeyHash);
+	}
+
+void CPinPluginAO::DoCancel()
+	{
+	iPinPluginDialog->Cancel();
+	if(iRequestStatus)
+		{
+		User::RequestComplete(iRequestStatus, KErrCancel);
+		}
+	}
+	
+void CPinPluginAO::RunL()
+	{
+	// Leave if there has been an error
+	User::LeaveIfError(iStatus.Int());
+	
+	switch(iState)
+		{
+		case EIdentify:
+			{
+			IdentifyId();	
+			}
+			break;
+		case EIdentifyResult:
+			{
+			if (*iDialogResult == EOk)
+				{
+				IdentifyResultL();
+				}
+			else if (*iDialogResult == ECancel)
+				{
+				User::RequestComplete(iRequestStatus, KErrAuthServPluginCancelled);
+				}
+			else if (*iDialogResult == EQuit)
+				{
+				User::RequestComplete(iRequestStatus, KErrAuthServPluginQuit);
+				}
+			*iDialogResult = static_cast<TPinPluginDialogResult>(0);
+			}
+			break;
+		case ETrain:
+			{
+			TrainIdL();	
+			}
+			break;
+		case ETrainResult:
+			{
+			if (*iDialogResult == EOk)
+				{
+				AddTrainResultToDBL();
+				}
+			else if (*iDialogResult == ECancel)
+				{
+				User::RequestComplete(iRequestStatus, KErrAuthServPluginCancelled);
+				}
+			else if (*iDialogResult == EQuit)
+				{
+				User::RequestComplete(iRequestStatus, KErrAuthServPluginQuit);
+				}
+			else if (*iDialogResult == ENext)
+				{
+				iState = ETrain;
+				TRequestStatus* status = &iStatus;
+				User::RequestComplete(status, KErrNone);
+				SetActive();
+				}
+			*iDialogResult = static_cast<TPinPluginDialogResult>(0);
+			}
+			break;
+		case EInfo:
+			{
+			iPinPluginDialog->PinInfo(iMessage, iStatus);
+			iState = EFinished;
+			SetActive();
+			}
+			break;
+		case EFinished:
+			{
+			User::RequestComplete(iRequestStatus, iStatus.Int());
+			}
+			break;
+		default:
+			{
+			User::Leave(KErrNotSupported);
+			}
+			break;
+		}
+	}
+	
+TInt CPinPluginAO::RunError(TInt aError)
+	{
+	if(iRequestStatus)
+		{
+		User::RequestComplete(iRequestStatus, aError);
+		}
+	return KErrNone;
+	}
+
+void CPinPluginAO::IdentifyId()
+	{
+	if (iRetryRefCount--)
+		{
+		iPinPluginDialog->PinIdentify(iPinMinSize, iPinMaxSize, ETrue, iPinValue, *iDialogResult, iStatus);
+		iState = EIdentifyResult;
+		}
+	else
+		{
+		iRetryRefCount = iRetryCount;
+		*iIdentityIdPtr = KUnknownIdentity;
+		iMessage = EPinPluginIdentificationFailure;
+		TRequestStatus* status = &iStatus;
+		User::RequestComplete(status, KErrNone);
+		iState = EInfo;
+		}
+	SetActive();
+	}
+
+void CPinPluginAO::IdentifyResultL()
+	{
+	TIdentityId identityId;
+	HBufC8* identityKey = NULL;
+	HBufC8* identityKeyHash = GenerateKeyHashL(iPinValue, identityKey);
+	CleanupStack::PushL(identityKeyHash);
+	CleanupStack::PushL(identityKey);	
+	identityId = iPinPluginDb->IdFromPin(*identityKeyHash);
+	if (identityId != KUnknownIdentity)
+		{
+		*iIdentityIdPtr = identityId;
+		iRetryRefCount = iRetryCount;
+		*iResult = identityKey;
+		iMessage = EPinPluginIdentificationSuccess;
+		iState = EInfo;
+		CleanupStack::Pop(identityKey);
+		}
+	else
+		{	
+		CleanupStack::PopAndDestroy(identityKey);
+		iState = EIdentify;
+		}
+	CleanupStack::PopAndDestroy(identityKeyHash);
+	TRequestStatus* status = &iStatus;
+	User::RequestComplete(status, KErrNone);
+	SetActive();
+	}
+		
+void CPinPluginAO::TrainIdL()
+	{
+        // Check for invalid pinsize.
+	if( !(iNewPinSize >= iPinMinSize && iNewPinSize <= iPinMaxSize)  )
+                {
+                User::Leave(KErrAuthServRegistrationFailed);
+                }
+
+
+	iPinList.ResetAndDestroy();
+	iIdKeyList.ResetAndDestroy();
+	iIdKeyHashList.ResetAndDestroy();
+	GenerateUniquePinsL(iPinList, iIdKeyList, iIdKeyHashList);
+	TInt indexValue = iPinPluginDb->IdIndex(iIdentityId);
+	TPinPluginTrainingMessage trainMessage;
+	if (indexValue >= 0)
+		{
+		trainMessage = EReTraining;
+		}
+	else
+		{
+		trainMessage = ETraining;
+		}
+	iPinPluginDialog->PinTraining(trainMessage, iPinList, iPinMinSize, iPinMaxSize, iIndex, iNewPinSize, *iDialogResult, iStatus);
+	iState = ETrainResult;
+	SetActive();	
+	}
+
+void CPinPluginAO::AddTrainResultToDBL()
+	{
+	__ASSERT_ALWAYS(iIndex >= KIndexLow && iIndex <= KIndexHigh,
+		User::Panic(KPinPluginPanicString(), EPinPanicIncorrectIndex));
+
+	TInt indexValue = iPinPluginDb->IdIndex(iIdentityId);
+	if (indexValue >= 0)
+		{
+		iPinPluginDb->UpdatePinL(iIdentityId, *iIdKeyHashList[iIndex]);
+		iMessage = EPinPluginReTrainingSuccess;
+		}
+	else
+		{
+		iPinPluginDb->AddPinL(iIdentityId, *iIdKeyHashList[iIndex]);
+		iMessage = EPinPluginTrainingSuccess;
+		}
+	TPtrC8 idKeyPtr = *iIdKeyList[iIndex];
+	HBufC8* identityKey = idKeyPtr.AllocL();
+	*iResult = identityKey;
+	iNewPinSize = iPinSize;
+	iState = EInfo;
+	TRequestStatus* status = &iStatus;
+	User::RequestComplete(status, KErrNone);
+	SetActive();
+	}
+
+HBufC8* CPinPluginAO::GenerateKeyHashL(TPinValue& aPinValue, HBufC8*& aIdentityKey)
+	{
+	CSHA1* sha1 = CSHA1::NewL();
+	CleanupStack::PushL(sha1);
+	HBufC8* pinValue = aPinValue.AllocLC();
+	TPtrC8 hash = sha1->Hash(*pinValue);
+	CleanupStack::PopAndDestroy(pinValue);
+	aIdentityKey = hash.AllocLC();
+	TPtrC8 hash1 = sha1->Hash(hash);
+	HBufC8* idkeyHash = hash1.AllocL();
+	CleanupStack::Pop(aIdentityKey);
+	CleanupStack::PopAndDestroy(sha1);
+	return idkeyHash;
+	}
+	
+	
+void CPinPluginAO::GenerateUniquePinsL(RPointerArray<TPinValue>& aPinList,
+		RPointerArray<HBufC8>& aIdKeyList, RPointerArray<HBufC8>& aIdKeyHashList)
+	{
+	TInt count = 4; 
+	while (count)
+		{
+		TPinValue* randomPin = new (ELeave) TPinValue;
+		CleanupStack::PushL(randomPin);
+		for (TInt k = 0; k < iNewPinSize ; k++)
+			{
+			TUint8 num = Math::Random();
+			num = num % 10;
+			randomPin->AppendNum(num);
+			}
+		HBufC8* identityKey = NULL;
+		HBufC8* identityKeyHash = GenerateKeyHashL(*randomPin, identityKey);
+		CleanupStack::PushL(identityKeyHash);
+		CleanupStack::PushL(identityKey);
+		if (iPinPluginDb->IsUniquePin(*identityKeyHash))
+			{
+			aIdKeyList.AppendL(identityKey);
+			CleanupStack::Pop(identityKey);
+			aIdKeyHashList.AppendL(identityKeyHash);
+			CleanupStack::Pop(identityKeyHash);
+			aPinList.AppendL(randomPin);
+			CleanupStack::Pop(randomPin);
+			count--;
+			}
+		}
+	}
+
+
+
+
+
+
+
+
+
+
+	
+	
+	
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/pinplugin/pinpluginao.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2006-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: 
+* CPinPluginAO declaration
+*
+*/
+
+
+/**
+ @file 
+ @internalComponent
+ @released
+*/
+
+#ifndef PIN_PLUGINAO_H
+#define PIN_PLUGINAO_H
+
+#include "pinplugindialog.h"
+#include "pinplugindb.h"
+#include "pinpanic.h"
+
+class CPinPluginAO : public CActive
+	{
+public:
+	/** static methods to constuct the object of the CPinpluginAO */
+	static CPinPluginAO* NewL(TInt aPinSize, TInt aPinMinSize, TInt aPinMaxSize, TInt aRetryCount);
+	static CPinPluginAO* NewLC(TInt aPinSize, TInt aPinMinSize, TInt aPinMaxSize, TInt aRetryCount);
+	/** Destructor */
+	~CPinPluginAO();
+public: //CAuthPluginInterface
+	void Identify(AuthServer::TIdentityId& aId, const TDesC& aClientMessage,
+				  HBufC8*& aResult, TRequestStatus& aRequest);
+	void Train(AuthServer::TIdentityId aId, HBufC8*& aResult, TRequestStatus& aRequest);
+	TInt Forget(AuthServer::TIdentityId aId);
+	TInt DefaultData(AuthServer::TIdentityId aId, HBufC8*& aOutputBuf);
+	void ResetL(AuthServer::TIdentityId aId, const TDesC& aRegistrationData, HBufC8*& aResult);
+
+private:			//Active
+	void DoCancel();
+	void RunL();	
+	TInt RunError(TInt aError);
+private:
+	/** Constructor */
+	CPinPluginAO(TInt aPinSize, TInt aPinMinSize, TInt aPinMaxSize, TInt aRetryCount);
+	
+	/** Second Phase Constructor */
+	void ConstructL();
+	
+	/**
+	 Issue a Request for Identify Dialog upto iRetryCount times to 
+	 PinPluginDialog. If the pinvalue received is wrong for all the
+	 retries, reset the identityId as KUnknownIdentity.
+	 */
+	void IdentifyId();
+	
+	/**
+ 	 Issue a Request for Train Dialog to PinPluginDialog. 
+ 	 It will generate 4 random pin of length iNewPinSize and send 
+ 	 the pin Numbers and iNewPinSize to PinpluginDialog. Once it completed
+ 	 it have the selected pin index and new pin size which is used to generate
+ 	 another set of pin numbers for the next dialogs if required.
+
+	 @panic EPinPanicInvalidPinLength	if plugin receives invalid pinlength fron Dialog Notifier
+	 */
+	void TrainIdL();
+	
+	/**
+ 	 It will generate KeyHash for the pin number given in the Identify Dialog.
+ 	 and verify the keyHash and Id with DB entries. If same, the state will be
+ 	 changed to EInfo and message is set to EPinPluginIdentificationSuccess 
+ 	 which is used to display info message to the user. 
+ 	 If not, same state will be maintained so that it will ask another Identify
+ 	 dialog to the user.
+ 	 */
+	void IdentifyResultL();
+	
+	/**
+	 It will add/update the DB with the pin selected in Pin Train/ReTrain Dialog.
+	 
+	 @panic EPinPanicIncorrectIndex		if plugin receives index values otherthan 0 -3
+	 */
+	void AddTrainResultToDBL();
+	
+	/**
+ 	 It will generate two KeyHash for the pin value using SHA1 Algorithm
+ 	 Intermediate result will return to the Authentication server whereas
+ 	 final result is stored in the DB.
+ 	  
+	 @param aPinValue		The Pin number for which Hash value required
+	 @param aIdentityKey	aIdentityKey is updated with intermediate KeyHash generated.
+	 @return				It will return the final KeyHash Value generated
+	 */
+	HBufC8* GenerateKeyHashL(TPinValue& aPinValue, HBufC8*& aIdentityKey);
+	
+	/**
+	 It will generate four Unique Pins which is not used any of the
+	 existing identities.
+	 
+	 @param aPinList		On return, it holds the array of Pin numbers generated
+	 @param idKeyList		On return, it holds the array of intermediate KeyHash 
+	 						values for the Pin Numbers in the aPinList
+	 @param idKeyHashList	On return, it holds the array of Final KeyHash values
+	 						for the Pin Numbers in the aPinList
+ 	 */
+	void GenerateUniquePinsL(RPointerArray<TPinValue>& aPinList, RPointerArray<HBufC8>& idKeyList,
+								 RPointerArray<HBufC8>& idKeyHashList);
+private:
+	enum TProcessState
+		{
+		EIdentify,
+		EIdentifyResult,
+		ETrain,
+		ETrainResult,
+		EInfo,
+		EFinished
+		};
+	CPinPluginDialog* iPinPluginDialog;
+	CPinPluginDB* iPinPluginDb;
+	TRequestStatus* iRequestStatus;
+	TProcessState iState;
+	TInt iIndex;
+	TPinValue iPinValue;
+	AuthServer::TIdentityId iIdentityId;
+	AuthServer::TIdentityId* iIdentityIdPtr;
+	HBufC8** iResult;
+	TPinPluginDialogResult* iDialogResult;
+	TPinPluginInfoMessage iMessage;
+	
+	TInt iRetryCount;
+	TInt iRetryRefCount;
+	TInt iPinSize;
+	TInt iPinMinSize;
+	TInt iPinMaxSize;
+	TInt iNewPinSize;
+		
+	RPointerArray<TPinValue> iPinList;
+	RPointerArray<HBufC8> iIdKeyList;
+	RPointerArray<HBufC8> iIdKeyHashList;
+	
+	//Displayable text string
+	const HBufC* iClientMessage;
+
+	};
+
+#endif /* PIN_PLUGINAO_H */
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/pinplugin/pinpluginconfig.rss	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2006-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: 
+* Defines the default pin size, min and max of pin size, retry 
+* count for the identify dialog, name and Description
+* for the pin plugin.
+*
+*/
+
+
+/**
+ @file 
+*/
+
+NAME PINP
+
+#include <uikon.rh>
+#include "pinplugin.rh"
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE PIN_SIZE r_pin_size
+	{
+	pinsize = 5;
+	}
+
+RESOURCE PIN_MIN_SIZE r_pin_min_size
+	{
+	minsize = 4;
+	}
+
+RESOURCE PIN_MAX_SIZE r_pin_max_size
+	{
+	maxsize = 10;
+	}
+
+RESOURCE IDENTIFY_DIALOG_RETRY_COUNT r_identify_dialog_retry_count
+	{
+	retrycount = 3;
+	}
+
+RESOURCE PLUGIN_INFO r_plugin_info
+	{
+	name = "PinPlugin";
+	Description = "Pinplugin authenticates device holder using PIN numbers generated from 0-9 digits";
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/pinplugin/pinplugindb.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,402 @@
+/*
+* Copyright (c) 2006-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: 
+* CPinPluginDB pin plugin data store implementation
+*
+*/
+
+
+/**
+ @file 
+*/
+
+#include "pinplugindb.h"
+
+_LIT(KPluginStoreName, "plugin.store");
+_LIT(KFileDrive, "c:");
+
+using namespace AuthServer;
+
+CPinPluginDB* CPinPluginDB::NewL()
+	{
+	CPinPluginDB* self = CPinPluginDB::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CPinPluginDB* CPinPluginDB::NewLC()
+	{
+	CPinPluginDB* self = new(ELeave) CPinPluginDB();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+	
+CPinPluginDB::CPinPluginDB() :
+	iRootStreamId(KNullStreamId),
+	iIdentityStreamId(KNullStreamId)
+	{
+	}
+
+CPinPluginDB::~CPinPluginDB()
+	{
+	if (iFileStore)
+		{
+		CompactStore();
+		delete iFileStore;
+		}
+
+	iFile.Close(); 
+	iFs.Close();
+
+	iId.Reset();
+	iId.Close();
+	iIdKeyHash.ResetAndDestroy();
+	iIdKeyHash.Close();
+	}
+	
+		
+void CPinPluginDB::ConstructL()
+	{
+	User::LeaveIfError(iFs.Connect());
+	
+	TFileName privatePath;
+	iFs.PrivatePath(privatePath);
+	iPluginDBName.Copy(KFileDrive);
+	iPluginDBName.Append(privatePath);
+	iPluginDBName.Append(KPluginStoreName);
+	OpenStoreL();
+	
+	ReadIdKeysFromStoreL();
+	}
+
+
+void CPinPluginDB::AddPinL(const TIdentityId& aId, const TDesC8& aIdentityKeyHash)
+	{
+	if(IdIndex(aId) == KErrNotFound && IsUniquePin(aIdentityKeyHash))
+		{
+		// Add the IdentityId to the array, rewrite the identitystream and 
+		// Only then commit the store
+		HBufC8* keyHash = aIdentityKeyHash.AllocLC();
+		TInt err = KErrNone;
+		iIdKeyHash.AppendL(keyHash);
+		err = iId.Append(aId);
+		if(err != KErrNone)
+			{
+			iIdKeyHash.Remove(iIdKeyHash.Count() - 1);
+			User::Leave(err);
+			}
+		TCleanupItem cleanupStore(RevertStore, iFileStore);
+		// write the idkeys to the store.
+		TRAP(err,
+			CleanupStack::PushL(cleanupStore);
+			WriteIdKeysToStoreL();
+			CleanupStack::Pop(iFileStore));
+
+		if (err != KErrNone)
+			{
+			iId.Remove(iId.Count() - 1);
+			iIdKeyHash.Remove(iIdKeyHash.Count() - 1);
+			User::Leave(err);
+			}
+		CleanupStack::Pop(keyHash); 
+		}
+	else
+		{
+		User::Leave(KErrAlreadyExists);
+		}
+ 	}
+
+void CPinPluginDB::UpdatePinL(const TIdentityId& aId, const TDesC8& aIdentityKeyHash)
+	{
+	if(IdIndex(aId) != KErrNotFound)
+		{
+		// Get the index of the existing id and key hash
+		TInt index = IdIndex(aId);
+		TInt err = KErrNone;
+		HBufC8* keyHash = aIdentityKeyHash.AllocLC();
+		// delete the old keyHash and store the new keyHash to the index
+		delete iIdKeyHash[index];
+		iIdKeyHash[index] = keyHash;
+
+		TCleanupItem cleanupStore(RevertStore, iFileStore);
+		// write the idkeys to the store.
+		TRAP(err ,
+			CleanupStack::PushL(cleanupStore);
+			WriteIdKeysToStoreL();
+			CleanupStack::Pop(iFileStore));
+		if (err!= KErrNone)
+			{
+			CleanupStack::Pop(keyHash);
+			ReadIdKeysFromStoreL();
+			User::Leave(err);
+			}
+		CleanupStack::Pop(keyHash);
+		}
+	else
+		{
+		User::Leave(KErrNotFound);
+		}
+	}
+	
+void CPinPluginDB::RemovePinL(const TIdentityId& aId)
+	{
+	if(IdIndex(aId) != KErrNotFound)
+		{
+		TInt err = KErrNone;
+		TInt index = IdIndex(aId);
+
+		// Delete the IdentityId from the array, rewrite the identitystream and 
+	   	// Only then commit the store
+		delete iIdKeyHash[index];
+  		iIdKeyHash.Remove(index);
+   		iId.Remove(index);
+ 
+		TCleanupItem cleanupStore(RevertStore, iFileStore);
+		// write the idkeys to the store.
+		TRAP(err, 
+			CleanupStack::PushL(cleanupStore);
+			WriteIdKeysToStoreL();
+			CleanupStack::Pop(iFileStore));
+		if(err != KErrNone)
+			{
+			ReadIdKeysFromStoreL();
+   			User::Leave(err);
+			}
+		}
+	else
+		{
+		User::Leave(KErrNotFound);
+		}
+	}
+	
+TBool CPinPluginDB::IsUniquePin(const TDesC8& aIdentityKeyHash) const
+	{
+	//	Check each iIdKeyHash in the store to determine if aIdentityId already exists
+	TInt count = iIdKeyHash.Count();
+	TBool isUnique = ETrue;
+	for (TInt index = 0; index < count; ++index)
+		{
+		if (aIdentityKeyHash.CompareF(*iIdKeyHash[index]) == 0)
+			{
+			isUnique = EFalse;
+			break;
+			}
+		}
+	return isUnique;
+	}
+	
+TInt CPinPluginDB::IdIndex(const TIdentityId& aId) const
+	{
+	TInt count = iId.Count();
+	for (TInt index = 0; index < count; ++index)
+		{
+		if (aId == iId[index])
+			{
+			return index;
+			}
+		}
+	return KErrNotFound;
+	}
+	
+TIdentityId CPinPluginDB::IdFromPin(const TDesC8& aIdentityKeyHash) const
+	{
+	TInt count = iIdKeyHash.Count();
+	for (TInt index = 0; index < count; ++index)
+		{
+		if (aIdentityKeyHash.CompareF(*iIdKeyHash[index]) == 0)
+			{
+			return iId[index];
+			}
+		}
+	return KUnknownIdentity;
+	}
+	
+void CPinPluginDB::OpenStoreL()
+	{
+	//	Tries to Open a plugin store file on the private path of the process. 
+	//	If it cannot find one, create a file with permanent file store
+	//	it should initialise iFileStore unless it cannot
+	//	create the file/store/streams
+	
+	TRAPD(result, OpenStoreInFileL(iPluginDBName));
+
+	if (result == KErrNotFound || result == KErrPathNotFound) 
+		{		
+		// Not yet opened a valid store, either no file to be found, or no valid
+		// store in it.
+		CreateStoreInFileL(iPluginDBName);
+		}
+	else if (result != KErrNone)
+		{
+		// DB gets corrupted or File may be in use. Abort startup.
+		User::Leave(result);
+		}
+	}
+
+
+void CPinPluginDB::CreateStoreInFileL(const TDesC& aFile)
+	{
+	TInt r = iFs.MkDirAll(aFile);
+	if ((r!=KErrNone) && (r!=KErrAlreadyExists))
+		{
+		User::Leave(r);
+		}
+	
+	delete iFileStore;
+	iFileStore = NULL;
+
+	iFileStore = CPermanentFileStore::ReplaceL(iFs, aFile, EFileRead | EFileWrite | EFileStream | EFileShareExclusive);
+	iFileStore->SetTypeL(KPermanentFileStoreLayoutUid);
+
+	TCleanupItem cleanupStore(RevertStore, iFileStore);
+	CleanupStack::PushL(cleanupStore);
+	
+	// Create Identity stream - Currently no Identity created, and no IdentityKeyHash
+	RStoreWriteStream identityStream;
+	iIdentityStreamId = identityStream.CreateLC(*iFileStore);
+	identityStream.WriteUint32L(KNullStreamId.Value()); //contains the id of dataStream
+	identityStream.WriteUint32L(0); // Write IdentityId count of zero
+	identityStream.CommitL();
+	CleanupStack::PopAndDestroy(&identityStream);
+
+	// Create root stream - just contains id of Identity stream
+	RStoreWriteStream rootStream;
+	iRootStreamId = rootStream.CreateLC(*iFileStore);
+	iFileStore->SetRootL(iRootStreamId);
+	rootStream.WriteUint32L(iIdentityStreamId.Value());		
+	rootStream.CommitL();
+	CleanupStack::PopAndDestroy(&rootStream);
+	
+	iFileStore->CommitL();
+	CleanupStack::Pop(iFileStore); 
+	}
+
+void CPinPluginDB::OpenStoreInFileL(const TDesC& aFile)
+	{
+	// Make sure the file isn't write protected
+	User::LeaveIfError(iFs.SetAtt(aFile, 0, KEntryAttReadOnly));
+	
+	User::LeaveIfError(iFile.Open(iFs, aFile, EFileRead | EFileWrite | EFileStream | EFileShareExclusive));
+	
+	delete iFileStore;
+	iFileStore = NULL;
+
+	iFileStore = CPermanentFileStore::FromL(iFile);		
+
+	// Get the root StreamId
+	iRootStreamId = iFileStore->Root();
+	if (iRootStreamId == KNullStreamId)
+		{
+		User::Leave(KErrCorrupt);
+		}
+	
+	RStoreReadStream rootStream;
+	rootStream.OpenLC(*iFileStore, iRootStreamId);
+	iIdentityStreamId = (TStreamId)(rootStream.ReadUint32L());
+	CleanupStack::PopAndDestroy(&rootStream);
+	}
+
+// Rewrites the Identity stream (ie the array of IdentityId) to the store
+void CPinPluginDB::WriteIdKeysToStoreL()
+	{
+	TInt count = iId.Count();
+	TInt hashCount = iIdKeyHash.Count();
+	if (count != hashCount)
+		{
+		User::Leave(KErrCorrupt);
+		}
+	
+	TStreamId dataStreamId = KNullStreamId;
+	if (count > 0)
+		{
+		RStoreWriteStream dataStream;
+		dataStreamId = dataStream.CreateLC(*iFileStore);
+		//write the Identity Id key to a data stream
+		for (TInt index = 0; index < count; ++index)
+			{
+			dataStream.WriteUint32L(iId[index]);
+			dataStream.WriteUint32L((*iIdKeyHash[index]).Length());
+			dataStream.WriteL(*iIdKeyHash[index]);
+			}
+		dataStream.CommitL();
+		CleanupStack::PopAndDestroy(&dataStream); 	
+		}
+	RStoreReadStream readStream;
+	readStream.OpenLC(*iFileStore, iIdentityStreamId);
+	TStreamId oldDataStreamId = (TStreamId)(readStream.ReadInt32L());
+	CleanupStack::PopAndDestroy(&readStream);
+		
+	iFileStore->DeleteL(oldDataStreamId);
+	
+	RStoreWriteStream writeStream;
+	writeStream.OpenLC(*iFileStore, iIdentityStreamId);
+	writeStream.WriteUint32L(dataStreamId.Value());
+	writeStream.WriteInt32L(count);
+	writeStream.CommitL();
+	CleanupStack::PopAndDestroy(&writeStream); 	
+	iFileStore->CommitL();
+	CompactStore();
+	}
+	
+void CPinPluginDB::ReadIdKeysFromStoreL()
+	{
+	iId.Reset();
+	iIdKeyHash.ResetAndDestroy();
+	
+	RStoreReadStream readStream;
+	readStream.OpenLC(*iFileStore, iIdentityStreamId);
+	TStreamId dataStreamId = (TStreamId)(readStream.ReadInt32L());
+	TInt count = readStream.ReadInt32L();
+	CleanupStack::PopAndDestroy(&readStream);
+	
+	if (count > 0)
+		{
+		RStoreReadStream dataStream;
+		dataStream.OpenLC(*iFileStore, dataStreamId);
+		for (TInt index = 0; index < count; ++index)
+			{
+			TIdentityId identityId = (TIdentityId)(dataStream.ReadInt32L());
+			iId.AppendL(identityId);
+			TInt length = dataStream.ReadInt32L();
+			HBufC8* idKeyHash = HBufC8::NewMaxLC(length);
+			TPtr8 idKeyHashPtr = idKeyHash->Des();
+			dataStream.ReadL(idKeyHashPtr, length);
+			iIdKeyHash.AppendL(idKeyHash);
+			CleanupStack::Pop(idKeyHash);
+			}
+		CleanupStack::PopAndDestroy(&dataStream);
+		}
+	}
+
+void CPinPluginDB::RevertStore(TAny* aStore)
+	{
+	CPermanentFileStore* store = reinterpret_cast<CPermanentFileStore*>(aStore);
+	TRAP_IGNORE(store->RevertL());
+	// We're ignoring the leave code from this becuase there's no way we can
+	// handle this sensibly.  This shouldn't be a problem in practice - this
+	// will leave if for example the file store is on removable which is
+	// unexpectedly remove, and this is never the case for us.
+	}
+
+
+void CPinPluginDB::CompactStore()
+	{
+	ASSERT(iFileStore);
+	TRAP_IGNORE(iFileStore->ReclaimL(); iFileStore->CompactL());
+	}
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/pinplugin/pinplugindb.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,160 @@
+/*
+* Copyright (c) 2006-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: 
+* CPinPluginDB pin plugin data store declaration
+*
+*/
+
+
+/**
+ @file 
+*/
+
+#ifndef PIN_PLUGINDB_H
+#define PIN_PLUGINDB_H
+
+#include <s32file.h>
+#include <authserver/authtypes.h>
+
+// PinPlugin DB
+class CPinPluginDB : public CBase
+	{
+public:
+	/** static methods to constuct the object of the CPinPluginDB */
+	static CPinPluginDB* NewL();
+	static CPinPluginDB* NewLC();
+	
+	/** Destructor */
+	virtual ~CPinPluginDB();
+
+	/** 
+	 Add Id and KeyHash to the store if the id is not exist in the
+	 store and pin is not used by any other id. 
+	 
+	 @param aId				 The Id to be Trained 
+	 @param aIdentityKeyHash The pin used to Train the Id
+	 @leave					 It leaves with KErrAlreadyExists if the id is
+	 						 already exist or pin is used by other identity.
+	 */
+	void AddPinL(const AuthServer::TIdentityId& aId, const TDesC8& aIdentityKeyHash);
+	
+	/** 
+	 Update the Id and Pin in the store With the new Pin, if the id exists.
+	 
+ 	 @param aId				 The Id to be ReTrained 
+	 @param aIdentityKeyHash The pin used to ReTrain the Id
+	 @leave 				 It leaves with KErrNotFound if the id is
+	 						 not exist.
+	 */
+	void UpdatePinL(const AuthServer::TIdentityId& aId, const TDesC8& aIdentityKeyHash);
+	
+	/**
+	 Remove the Id from the store, if the Id exists
+	 
+	 @param aId				 The Id to be ReTrained 
+	 @leave					 It leaves with KErrNotFound if the id is
+	 						 not exist.
+	 */
+	void RemovePinL(const AuthServer::TIdentityId& aId);
+	
+	/**
+	 Searches the pinvalue in the store
+	 
+	 @param aIdentityKeyHash The pinvalue to be search for
+	 @return				 It return the IdentityId for the pin, if search
+	 						 is success else return KUnknownIdentity.
+	 */
+	AuthServer::TIdentityId IdFromPin(const TDesC8& aIdentityKeyHash) const;
+	
+	/**
+	 Searches the Id in the store.
+	 
+	 @param aId				 The Id to be search for. 
+	 @return				 It return the index of the Id if the search
+	 						 is success else return KErrNotFound.
+	 */
+	TInt IdIndex(const AuthServer::TIdentityId& aId) const ;
+	
+	/**
+ 	 Verifies the pin is unique.
+	 
+	 @param aIdentityKeyHash The pinvalue to be search for
+	 @return				 return ETrue if the pin is not used by any of 
+	 						 the identity else EFalse.
+	 */
+	TBool IsUniquePin(const TDesC8& aIdentityKeyHash) const;
+	
+private:
+	CPinPluginDB();
+	void ConstructL();
+
+private:					
+	/**
+	 Create and open a New Store If it is first time
+	 else Open the existing store. 
+	 */
+	void OpenStoreL();
+	
+	/** 
+	 Open the existing store 
+	 @param aFile 			The name of the file to open
+	 */
+	void OpenStoreInFileL(const TDesC& aFile);
+	
+	/** 
+	 Create the new store
+	 @param aFile 			The name of the file to create
+	 */
+	void CreateStoreInFileL(const TDesC& aFile);
+	
+	/** 
+	Write the In memory represtation to the store.
+	*/
+	void WriteIdKeysToStoreL();
+	
+	/**
+	Read the Id and keys from the store
+	*/
+	void ReadIdKeysFromStoreL();
+	
+private:
+	/**
+	Methods dealing with atomic updates to key data file 
+	cleanup item that reverts the store.
+	*/
+	static void RevertStore(TAny* aStore);
+	/**
+ 	 Attempt to compact the store - it doesn't matter if these calls leave, it
+ 	 will only mean that the store takes up more space than necessary.
+ 	*/	
+	void CompactStore();
+private:
+	RFile iFile;
+	RFs iFs;
+	/** FileStore Object */
+	CPermanentFileStore* iFileStore;
+	/** Root Stream that constains identityStreamId */
+	TStreamId iRootStreamId;
+	/** Identity Stream that contains dataStreamId and count of idHashes stored in the DB */
+	TStreamId iIdentityStreamId;
+	/** DB file Name */
+	TFileName iPluginDBName;
+private:
+	/** In memory representation of id in the store */
+	RArray<AuthServer::TIdentityId> iId;
+	/** In memory representation of hash in the store */
+	RPointerArray<HBufC8> iIdKeyHash;
+	};
+
+#endif /* PIN_PLUGINDB_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/pinplugin/pinplugindialog.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,192 @@
+/*
+* Copyright (c) 2006-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: 
+* CPinPluginDialog implementation 
+*
+*/
+
+
+/**
+ @file 
+*/
+
+#include "pinplugindialog.h"
+#include <authserver/auth_srv_errs.h>
+
+CPinPluginDialog::~CPinPluginDialog()
+	{
+	Deque();
+	iNotifier.Close();
+	}
+
+CPinPluginDialog* CPinPluginDialog::NewL()
+	{
+	CPinPluginDialog* self = CPinPluginDialog::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CPinPluginDialog* CPinPluginDialog::NewLC()
+	{
+	CPinPluginDialog* self = new (ELeave) CPinPluginDialog();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CPinPluginDialog::CPinPluginDialog(): CActive(EPriorityStandard)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+void CPinPluginDialog::ConstructL()
+	{
+	User::LeaveIfError(iNotifier.Connect());
+	}
+
+void CPinPluginDialog::PinIdentify(const TInt aMinLength, const TInt aMaxLength, const TBool aRetry,
+						TPinValue& aPinValue, TPinPluginDialogResult& aResult, TRequestStatus& aStatus)
+	{
+	iClientPinValue = &aPinValue;
+	iClientPinDialogResult = &aResult;
+	iState = KPinPluginIdentify;
+	DoInitialize(EPinPluginIdentify, aStatus);
+	TPinIdentifyInput pinInput;
+	pinInput.iOperation = EPinPluginIdentify;
+	pinInput.iRetry = aRetry;
+	pinInput.iMinLength = aMinLength;
+	pinInput.iMaxLength = aMaxLength;
+	TPinIdentifyInputBuf pinInputBuf(pinInput);
+	iPinIdentifyInputBuf.Copy(pinInputBuf);
+	RequestDialog(iPinIdentifyInputBuf, iPinDialogOutputBuf);
+	}
+
+
+
+void CPinPluginDialog::PinTraining(const TPinPluginTrainingMessage aType, const RPointerArray<TPinValue>& aPinNumbers,
+	                        const TInt aMinLength, const TInt aMaxLength, TInt& aIndex, TInt& aCurrentLength,
+	                        TPinPluginDialogResult& aResult, TRequestStatus& aStatus)
+	{
+	iClientPinIndex = &aIndex;
+	iClientPinDialogResult = &aResult;
+	iClientNewPinLength = &aCurrentLength;
+	iState = KPinPluginTraining;
+	DoInitialize(EPinPluginTraining, aStatus);
+	TPinTrainingInput pinInput;
+	pinInput.iOperation = EPinPluginTraining;
+	pinInput.iMessage = aType;
+	pinInput.iMinLength = aMinLength;
+	pinInput.iMaxLength = aMaxLength;
+	pinInput.iCurrentPinLength = aCurrentLength;
+	pinInput.iPinValue1 = *(aPinNumbers[0]);
+	pinInput.iPinValue2 = *(aPinNumbers[1]);
+	pinInput.iPinValue3 = *(aPinNumbers[2]);
+	pinInput.iPinValue4 = *(aPinNumbers[3]);
+	TPinTrainingInputBuf pinInputBuf(pinInput);
+	iPinTrainingInputBuf.Copy(pinInputBuf);
+	RequestDialog(iPinTrainingInputBuf, iPinDialogOutputBuf);
+	}
+
+
+void CPinPluginDialog::PinInfo(const TPinPluginInfoMessage aMessage, TRequestStatus& aStatus)
+	{
+	iState = KPinPluginInfo;
+	DoInitialize(EPinPluginInfo, aStatus);
+	TPinInfoInput pinInput;
+	pinInput.iOperation = EPinPluginInfo;
+	pinInput.iMessage = aMessage;
+	TPinInfoInputBuf pinInputBuf(pinInput);
+	iPinInfoInputBuf.Copy(pinInputBuf);
+	RequestDialog(iPinInfoInputBuf, iPinDialogOutputBuf);
+	}
+
+void CPinPluginDialog::DoInitialize(const TPinPluginDialogOperation aOperation, TRequestStatus& aStatus)
+	{
+	iCurrentOperation = aOperation;
+
+	aStatus = KRequestPending;
+	iClientStatus = &aStatus;
+	}
+
+
+void CPinPluginDialog::RequestDialog(const TDesC8& aData, TDes8& aResponse)
+	{
+	iNotifier.StartNotifierAndGetResponse(iStatus, KUidPinPluginDialogNotifier,
+											aData, aResponse);
+	SetActive();
+	}
+	
+void CPinPluginDialog::DoCancel()
+	{
+	iNotifier.CancelNotifier(KUidPinPluginDialogNotifier);
+	if (iClientStatus)
+		{
+		User::RequestComplete(iClientStatus, KErrCancel);
+		}
+	}
+
+void CPinPluginDialog::RunL()
+	{
+	switch (iState)
+		{
+		case KPinPluginInfo:
+			{
+			//ignore the output as Info Dialog won't wait for user inputs
+			}
+			break;
+		case KPinPluginTraining:
+			{
+			TPinDialogOutput& pinDialogOutput = iPinDialogOutputBuf();
+			*iClientPinIndex = pinDialogOutput.iIndex;
+			*iClientNewPinLength = pinDialogOutput.iNewPinLength;
+			*iClientPinDialogResult = pinDialogOutput.iResult;
+			if(iStatus.Int() != KErrNone)
+				{
+				User::RequestComplete(iClientStatus, KErrAuthServRegistrationFailed);
+				return;
+				}
+			}
+			break;
+		case KPinPluginIdentify:
+			{
+			TPinDialogOutput& pinDialogOutput = iPinDialogOutputBuf();
+			*iClientPinValue = pinDialogOutput.iPinValue;
+			*iClientPinDialogResult = pinDialogOutput.iResult;
+			}
+			break;
+		default:
+			{
+			User::Leave(KErrNotSupported);
+			}
+			break;
+		}
+	User::RequestComplete(iClientStatus, iStatus.Int());
+	}
+	
+TInt CPinPluginDialog::RunError(TInt aError)
+	{
+	if (iClientStatus)
+		{
+		User::RequestComplete(iClientStatus, aError);
+		}
+	return KErrNone;
+	}
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/pinplugin/pinplugindialog.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,124 @@
+/*
+* Copyright (c) 2006-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: 
+* CPinPluginDialog declaration
+*
+*/
+
+
+/**
+ @file 
+*/
+
+#ifndef PIN_PLUGINDIALOG_H
+#define PIN_PLUGINDIALOG_H
+
+#include <e32base.h>
+#include <pinplugindialogdefs.h>
+
+/**
+ Definition of the pin plugin dialog interface 
+ */
+class CPinPluginDialog : public CActive
+	{
+public:
+	/**
+	 Prompts the user to enter a pin. 
+	 
+	 @param aMinLength	The minimum length of the pin.
+	 @param aMaxLength	The maximum length of the pin.
+	 @param aRetry		Indicates whether the user is retrying.
+	 @param aPinValue	On return, It holds the pin that the user entered.
+	 @param aResult		On return, It holds output of the dialog
+	 @param aStatus		An asynchronous request status object.
+	 */
+	void PinIdentify(const TInt aMinLength, const TInt aMaxLength, const TBool aRetry, TPinValue& aPinValue,
+	                       TPinPluginDialogResult& aResult, TRequestStatus& aStatus);
+
+	/**
+	 Prompts the user to select a pin from the list.
+	  
+	 @param aType			Information about the pin to train/retrain
+	 @param aPinNumbers		array of pin number to display
+	 @param aMinLength		The minimum length of the pin.
+	 @param aMaxLength		The maximum length of the pin.
+	 @param aIndex			On return, It holds the index of the selected pin.
+	 @param aCurrentLength	By default, It has the current length of the pin
+	 						On return, It holds the new length of the pin if user changes.
+ 	 @param aResult			On return, It holds output of the dialog.
+ 	 @param aStatus			An asynchronous request status object. 
+	 */
+	void PinTraining(const TPinPluginTrainingMessage aType, const RPointerArray<TPinValue>& aPinNumbers,
+	                        const TInt aMinLength, const TInt aMaxLength, TInt& aIndex, TInt& aCurrentLength,
+	                        TPinPluginDialogResult& aResult, TRequestStatus& aStatus);
+
+	/**
+	 Display the message to the user. 
+	  
+	 @param aMessage	Information about the PIN to display.
+	 @param aStatus		An asynchronous request status object.	
+	 */
+	 void PinInfo(const TPinPluginInfoMessage aMessage,TRequestStatus& aStatus);
+	
+public:
+	/**
+	 Destructor for the CPinPluginDialog class
+	 */
+	~CPinPluginDialog();
+	/** static methods to constuct the object of the CPinPluginDialog */
+	static CPinPluginDialog* NewL();
+	static CPinPluginDialog* NewLC();
+private:
+	CPinPluginDialog();
+	void ConstructL();
+	/**
+	 Helper function to perform basic initialization
+	 */
+	void DoInitialize(const TPinPluginDialogOperation aOperation, TRequestStatus& aStatus);
+	/**
+	 Helper function to Issue Notifier request for the Dialog.
+	 */
+	void RequestDialog(const TDesC8& aData, TDes8& aResponse);
+
+private: // from CActive
+	void RunL();
+	void DoCancel();
+	TInt RunError(TInt aError);
+
+private:
+	enum TState 
+		{ 	
+		KPinPluginInfo,
+		KPinPluginTraining,
+		KPinPluginIdentify
+		};
+
+	TPinPluginDialogOperation iCurrentOperation;
+	TRequestStatus* iClientStatus;
+	RNotifier iNotifier;
+	TState iState;
+
+	TPinIdentifyInputBuf iPinIdentifyInputBuf;
+	TPinTrainingInputBuf iPinTrainingInputBuf;
+	TPinInfoInputBuf iPinInfoInputBuf;
+	TPinDialogOutputBuf iPinDialogOutputBuf;
+	TInt* iClientPinIndex;
+	TPinValue* iClientPinValue;
+	TInt* iClientNewPinLength;
+	TPinPluginDialogResult* iClientPinDialogResult;
+	};
+
+
+#endif /* PIN_PLUGINDIALOG_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/tpinplugin/scripts/tpinplugin.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,306 @@
+[plugin_properties]
+pinprocesstype=Property
+
+[default_data]
+pinprocesstype=DefaultData
+identityid=4164
+
+[train_ok1]
+pinprocesstype=Train
+identityid=4165
+outputatdialog=1
+expectedoutput=TrainingSuccess
+selectindex=0
+
+[train_ok2]
+pinprocesstype=Train
+identityid=4166
+outputatdialog=2
+expectedoutput=TrainingSuccess
+selectindex=0
+
+[train_ok3]
+pinprocesstype=Train
+identityid=4167
+outputatdialog=3
+expectedoutput=TrainingSuccess
+selectindex=0
+
+[train_ok4]
+pinprocesstype=Train
+identityid=4168
+outputatdialog=5
+expectedoutput=TrainingSuccess
+selectindex=0
+
+[train_ok5]
+pinprocesstype=Train
+identityid=4169
+outputatdialog=10
+expectedoutput=TrainingSuccess
+selectindex=0
+
+[train_changepin]
+pinprocesstype=Train
+identityid=4170
+selectindex=0
+newpinlength=8
+outputatdialog=2
+expectedoutput=TrainingSuccess
+
+[train_cancel]
+pinprocesstype=Train
+identityid=4123
+selectindex=1
+outputatdialog=3
+expectedoutput=Cancel
+
+[train_quit]
+pinprocesstype=Train
+identityid=4123
+selectindex=3
+outputatdialog=3
+expectedoutput=Quit
+
+[retrain_ok1]
+pinprocesstype=ReTrain
+identityid=4175
+outputatdialog=1
+expectedoutput=ReTrainingSuccess
+
+[retrain_ok2]
+pinprocesstype=ReTrain
+identityid=4176
+outputatdialog=2
+selectindex=0
+expectedoutput=ReTrainingSuccess
+
+[retrain_ok3]
+pinprocesstype=ReTrain
+identityid=4177
+outputatdialog=3
+selectindex=0
+expectedoutput=ReTrainingSuccess
+
+[retrain_ok4]
+pinprocesstype=ReTrain
+identityid=4178
+outputatdialog=5
+selectindex=0
+expectedoutput=ReTrainingSuccess
+
+[retrain_ok5]
+pinprocesstype=ReTrain
+identityid=4179
+outputatdialog=10
+selectindex=0
+expectedoutput=ReTrainingSuccess
+
+[retrain_changepin]
+pinprocesstype=ReTrain
+identityid=4180
+selectindex=0
+newpinlength=10
+outputatdialog=2
+expectedoutput=ReTrainingSuccess
+
+[retrain_cancel]
+pinprocesstype=ReTrain
+identityid=4185
+selectindex=1
+expectedoutput=Cancel
+
+[retrain_quit]
+pinprocesstype=ReTrain
+identityid=4186
+selectindex=3
+expectedoutput=Quit
+
+[identify_ok_fail]
+pinprocesstype=Identify
+identityid=4164
+pinvalue=123456
+expectedoutput=IdentifyFailure
+
+[identify_ok_pass]
+pinprocesstype=Identify
+identityid=4164
+pinvalue=11111
+expectedoutput=IdentifySuccess
+
+[identify_cancel]
+pinprocesstype=Identify
+identityid=4165
+pinvalue=123456
+expectedoutput=Cancel
+
+[identify_quit]
+pinprocesstype=Identify
+identityid=4166
+pinvalue=123456
+expectedoutput=quit
+
+[newpin_morethanmax]
+pinprocesstype=Train
+identityid=4123
+selectindex=0
+newpinlength=12
+outputatdialog=2
+expectedoutput=TrainingSuccess
+
+[newpin_lessthanmin]
+pinprocesstype=Train
+identityid=4123
+selectindex=0
+newpinlength=2
+outputatdialog=2
+expectedoutput=TrainingSuccess
+
+
+[forget_fail]
+pinprocesstype=Forget
+identityid=4100
+expectedoutput=Failure
+
+
+[forget_pass1]
+pinprocesstype=Forget
+identityid=4170
+expectedoutput=Success
+
+[forget_pass2]
+pinprocesstype=Forget
+identityid=4168
+expectedoutput=Success
+
+[forget_pass3]
+pinprocesstype=Forget
+identityid=4167
+expectedoutput=Success
+
+[forget_pass4]
+pinprocesstype=Forget
+identityid=4166
+expectedoutput=Success
+
+[forget_pass5]
+pinprocesstype=Forget
+identityid=4169
+expectedoutput=Success
+
+[forget_pass6]
+pinprocesstype=Forget
+identityid=4165
+expectedoutput=Success
+
+[forget_pass7]
+pinprocesstype=Forget
+identityid=4180
+expectedoutput=Success
+
+[forget_pass8]
+pinprocesstype=Forget
+identityid=4178
+expectedoutput=Success
+
+[forget_pass9]
+pinprocesstype=Forget
+identityid=4177
+expectedoutput=Success
+
+[forget_pass10]
+pinprocesstype=Forget
+identityid=4176
+expectedoutput=Success
+
+[forget_pass11]
+pinprocesstype=Forget
+identityid=4179
+expectedoutput=Success
+
+[forget_pass12]
+pinprocesstype=Forget
+identityid=4175
+expectedoutput=Success
+
+[forget_pass13]
+pinprocesstype=Forget
+identityid=4185
+expectedoutput=Success
+
+[forget_pass14]
+pinprocesstype=Forget
+identityid=4186
+expectedoutput=Success
+
+[train_server_cancel1]
+pinprocesstype=TrainServerCancel
+identityid=4187
+selectindex=1
+timeout=100
+expectedoutput=ServerCancel
+
+[retrain_server_cancel1]
+pinprocesstype=ReTrainServerCancel
+identityid=4188
+selectindex=1
+timeout=100
+outputatdialog=3
+expectedoutput=ServerCancel
+
+[identify_server_cancel1]
+pinprocesstype=identifyServerCancel
+identityid=4189
+pinvalue=123456
+timeout=100
+expectedoutput=ServerCancel
+
+[forget_pass15]
+pinprocesstype=Forget
+identityid=4188
+expectedoutput=Success
+
+[sequence]
+pinprocesstype=Sequence
+identityid=4189
+expectedoutput=Success
+
+[forget_pass16]
+pinprocesstype=Forget
+identityid=4189
+expectedoutput=Success
+
+[forget_pass17]
+pinprocesstype=Forget
+identityid=4164
+expectedoutput=Success
+
+[oom1]
+pinprocesstype=Oom
+oomtest=1
+
+[oom2]
+pinprocesstype=Oom
+oomtest=2
+
+[oom3]
+pinprocesstype=Oom
+oomtest=3
+
+[oom4]
+pinprocesstype=Oom
+oomtest=4
+
+[oom5]
+pinprocesstype=Oom
+oomtest=5
+
+[oom6]
+pinprocesstype=Oom
+oomtest=6
+
+[datfile]
+pinprocesstype=Train
+selectedindex=0
+newpinlength=4
+outputatdialog=2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/tpinplugin/scripts/tpinplugin.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,1309 @@
+//
+// Copyright (c) 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: 
+//
+//
+// Copyright (c) 2009 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:
+//
+
+PRINT PinPlugin tests...
+
+LOAD_SUITE tpinplugin
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0050
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Delete already existing plugin store.
+//!@SYMPREQ                 PREQ218
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestExpectedResults	Deletion successful.
+//!@SYMTestType				UT
+/////////////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0050
+
+RUN_UTILS DeleteFile c:\private\102740fc\plugin.store
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0050
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0001 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and get the
+//					properties of the pin plugin.
+//!@SYMREQ 				REQ5004, REQ5005, REQ5006, REQ5007,REQ5019,REQ5001
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1.Load Pin Plugin
+//      				2.Get the Properties of the plugin
+//      				3.Verify the properties
+//!@SYMTestExpectedResults		verification returns success
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0001
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini plugin_properties
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0001
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0002 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and get the
+//					default data of the pin plugin.
+//!@SYMREQ 				REQ5019
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1.Load Pin Plugin
+//      				2.Get the default data of the plugin
+//      				3.Verify with identify operation
+//!@SYMTestExpectedResults		verification returns success
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0002
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini default_data
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0002
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0003 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and train the
+//					User with the selected Pin and store the pin and ID of
+//					the user to the DB.
+//!@SYMREQ 				REQ5021, REQ5012
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in and call Train Function
+//					2. Select first Pin from first Train dialog (EPINPlugInTraining).
+//					3. Save the Identity ID and returned Identify hash in aResult parameter inside test 	
+//					harness.
+//					4. Call Identify function.
+//					5. Displays Identify dialogs (EPINPlugInIdentify), enter PIN saved in previous 		
+//					operation from notification dialog code.
+//!@SYMTestExpectedResults		Saved values from Train operation and returned values from Identity
+//					operation match
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0003
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini train_ok1
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0003
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0004 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and train the
+//					User with the selected Pin and store the pin and ID of
+//					the user to the DB.
+//!@SYMREQ 				REQ5021, REQ5012
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in and call Train Function
+//					2. Select first Pin from second Train dialog (EPINPlugInTraining).
+//					3. Save the Identity ID and returned Identify hash in aResult parameter inside test 	
+//					harness.
+//					4. Call Identify function.
+//					5. Displays Identify dialogs (EPINPlugInIdentify), enter PIN saved in previous 		
+//					operation from notification dialog code.
+//!@SYMTestExpectedResults		Saved values from Train operation and returned values from Identity
+//					operation match
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0004
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini train_ok2
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0004
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0005 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and train the
+//					User with the selected Pin and store the pin and ID of
+//					the user to the DB.
+//!@SYMREQ 				REQ5021, REQ5012
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in and call Train Function
+//					2. Select first Pin from Third Train dialog (EPINPlugInTraining).
+//					3. Save the Identity ID and returned Identify hash in aResult parameter inside test 	
+//					harness.
+//					4. Call Identify function.
+//					5. Displays Identify dialogs (EPINPlugInIdentify), enter PIN saved in previous 		
+//					operation from notification dialog code.
+//!@SYMTestExpectedResults		Saved values from Train operation and returned values from Identity
+//					operation match
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0005
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini train_ok3
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0005
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0006 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and train the
+//					User with the selected Pin and store the pin and ID of
+//					the user to the DB.
+//!@SYMREQ 				REQ5021, REQ5012
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in and call Train Function
+//					2. Select first Pin from fifth Train dialog (EPINPlugInTraining).
+//					3. Save the Identity ID and returned Identify hash in aResult parameter inside test 	
+//					harness.
+//					4. Call Identify function.
+//					5. Displays Identify dialogs (EPINPlugInIdentify), enter PIN saved in previous 		
+//					operation from notification dialog code.
+//!@SYMTestExpectedResults		Saved values from Train operation and returned values from Identity
+//					operation match
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0006
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini train_ok4
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0006
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0007
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and train the
+//					User with the selected Pin and store the pin and ID of
+//					the user to the DB.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in and call Train Function
+//					2. Select first Pin from Tenth Train dialog (EPINPlugInTraining).
+//					3. Save the Identity ID and returned Identify hash in aResult parameter inside test 	
+//					harness.
+//					4. Call Identify function.
+//					5. Displays Identify dialogs (EPINPlugInIdentify), enter PIN saved in previous 		
+//					operation from notification dialog code.
+//!@SYMTestExpectedResults		Saved values from Train operation and returned values from Identity
+//					operation match
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0007
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini train_ok5
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0007
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0008 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and train the
+//					User with the selected Pin and store the pin and ID of
+//					the user to the DB.
+//!@SYMREQ 				REQ5021,REQ5020
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in and call Train Function
+//					2. Enter the new pinlength in first Train dialog and Enter Next button.
+//					3. Select first Pin from next Train dialog which displays pin with new length.
+//					4. Save the Identity ID and returned Identify hash in aResult parameter inside test 	
+//					harness.
+//					4. Call Identify function.
+//					5. Displays Identify dialogs (EPINPlugInIdentify), enter PIN saved in previous 		
+//					operation from notification dialog code.
+//!@SYMTestExpectedResults		Saved values from Train operation and returned values from Identity
+//					operation match
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0008
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini train_changepin
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0008
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0009 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and train the
+//					User with the selected Pin and store the pin and ID of
+//					the user to the DB.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in and call Train Function
+//					2. Select Cancel button when Training dialog displayed.
+//					3. Call Identify function.
+//					4. Displays Identify dialogs (EPINPlugInIdentify), enter random PIN		
+//!@SYMTestExpectedResults		Train function should complete with KErrAuthServPluginCancelled
+//					and Identify Fails and gives the result as no identity Exist.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0009
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini train_cancel
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0009
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0010
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and train the
+//					User with the selected Pin and store the pin and ID of
+//					the user to the DB.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in and call Train Function
+//					2. Select Quit button when Training dialog displayed.
+//					3. Call Identify function.
+//					4. Displays Identify dialogs (EPINPlugInIdentify), enter random PIN		
+//!@SYMTestExpectedResults		Train function should complete with KErrAuthServPluginuit
+//					and Identify Fails and gives the result as no identity Exist.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0010
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini train_quit
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0010
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0011 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and train the
+//					User with the selected Pin and store the pin and ID of
+//					the user to the DB.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in and call Train Function
+//					2. Call Cancel function of Plug-in object.
+//					4. Call Identify function.
+//					5. Displays Identify dialogs (EPINPlugInIdentify), enter random pin.
+//!@SYMTestExpectedResults		Train asynchronous operation shall be stopped. Calling active object receive
+//					KErrCancel. and identify Fails and gives the result as no identity Exist.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0011
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini train_server_cancel1
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0011
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0012 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and train the
+//					User with the selected Pin and store the pin and ID of
+//					the user to the DB.
+//!@SYMREQ 				REQ5022, REQ5013
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in 
+//					2. call Train Function
+//					3. Select first Pin from first Train dialog (EPINPlugInTraining).
+//					4. Save the Identity ID and returned Identify hash in aResult parameter inside test 	
+//					harness.
+//					5. Call Identify function.
+//					6. Displays Identify dialogs (EPINPlugInIdentify), enter PIN saved in previous 		
+//					operation from notification dialog code.
+//					7. Repeat 1-6 to ReTrain
+//!@SYMTestExpectedResults		Saved values from Train operation and returned values from Identity
+//					operation match
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0012
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini retrain_ok1
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0012
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0013
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and train the
+//					User with the selected Pin and store the pin and ID of
+//					the user to the DB.
+//!@SYMREQ 				REQ5022, REQ5013
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in 
+//					2. call Train Function
+//					3. Select first Pin from Second Train dialog (EPINPlugInTraining).
+//					4. Save the Identity ID and returned Identify hash in aResult parameter inside test 	
+//					harness.
+//					5. Call Identify function.
+//					6. Displays Identify dialogs (EPINPlugInIdentify), enter PIN saved in previous 		
+//					operation from notification dialog code.
+//					7. Repeat 1-6 to ReTrain
+//!@SYMTestExpectedResults		Saved values from Train operation and returned values from Identity
+					operation match
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0013
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini retrain_ok2
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0013
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0014
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and train the
+//					User with the selected Pin and store the pin and ID of
+//					the user to the DB.
+//!@SYMREQ 				REQ5022, REQ5013
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in 
+//					2. call Train Function
+//					3. Select first Pin from Third Train dialog (EPINPlugInTraining).
+//					4. Save the Identity ID and returned Identify hash in aResult parameter inside test 	
+//					harness.
+//					5. Call Identify function.
+//					6. Displays Identify dialogs (EPINPlugInIdentify), enter PIN saved in previous 		
+//					operation from notification dialog code.
+//					7. Repeat 1-6 to ReTrain
+//!@SYMTestExpectedResults		Saved values from Train operation and returned values from Identity
+					operation match
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0014
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini retrain_ok3
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0014
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0015 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and train the
+//					User with the selected Pin and store the pin and ID of
+//					the user to the DB.
+//!@SYMREQ 				REQ5022, REQ5013
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in 
+//					2. call Train Function
+//					3. Select first Pin from Fifth Train dialog (EPINPlugInTraining).
+//					4. Save the Identity ID and returned Identify hash in aResult parameter inside test 	
+//					harness.
+//					5. Call Identify function.
+//					6. Displays Identify dialogs (EPINPlugInIdentify), enter PIN saved in previous 		
+//					operation from notification dialog code.
+//					7. Repeat 1-6 to ReTrain
+//!@SYMTestExpectedResults		Saved values from Train operation and returned values from Identity
+//					operation match
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0015
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini retrain_ok4
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0015
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0016 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and train the
+//					User with the selected Pin and store the pin and ID of
+//					the user to the DB.
+//!@SYMREQ 				REQ5022
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in 
+//					2. call Train Function
+//					3. Select first Pin from Tenth Train dialog (EPINPlugInTraining).
+//					4. Save the Identity ID and returned Identify hash in aResult parameter inside test 	
+//					harness.
+//					5. Call Identify function.
+//					6. Displays Identify dialogs (EPINPlugInIdentify), enter PIN saved in previous 		
+//					operation from notification dialog code.
+//					7. Repeat 1-6 to ReTrain
+//!@SYMTestExpectedResults		Saved values from Train operation and returned values from Identity
+//					operation match
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0016
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini retrain_ok5
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0016
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0017
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and train the
+//					User with the selected Pin and store the pin and ID of
+//					the user to the DB.
+//!@SYMREQ 				REQ5021,REQ5020
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in, call Train Function and select first pin form first dialog.
+//					2. Call Identify function, enter PIN saved in previous operation from notification 
+//					dialog code.
+//					3. call Train Function. Enter the new pinlength in first Train dialog and Enter Next 
+//					button.
+//					3. Select first Pin from next Train dialog which displays pin with new length.
+//					4. Save the Identity ID and returned Identify hash in aResult parameter inside test 	
+//					harness.
+//					4. Call Identify function.
+//					5. Displays Identify dialogs (EPINPlugInIdentify), enter PIN saved in previous 		
+//					operation from notification dialog code.
+//!@SYMTestExpectedResults		Saved values from Train operation and returned values from Identity
+//					operation match
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0017
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini retrain_changepin
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0017
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0018 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and train the
+//					User with the selected Pin and store the pin and ID of
+//					the user to the DB.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in, call Train Function and select first pin form first dialog.
+//					2. Call Identify function, enter PIN saved in previous operation from notification 
+//					dialog code.
+//					3. call Train Function. Enter the Cancel button.
+//					4. Call Identify function.
+//					5. Displays Identify dialogs (EPINPlugInIdentify), enter random PIN		
+//!@SYMTestExpectedResults		Train function complete with KErrAuthServPluginCancelled
+//					and Identify Fails and gives the result as identityexist given a wrong pin
+//					while repeat identy function with correct pin gives success.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0018
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini retrain_cancel
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0018
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0019
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and train the
+//					User with the selected Pin and store the pin and ID of
+//					the user to the DB.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in, call Train Function and select first pin form first dialog.
+//					2. Call Identify function, enter PIN saved in previous operation from notification 
+//					dialog code.
+//					3. call Train Function. Enter the Quit button.
+//					3. Call Identify function.
+//					4. Displays Identify dialogs (EPINPlugInIdentify), enter random PIN		
+//!@SYMTestExpectedResults		Train function complete with KErrAuthServPluginCancelled
+//					and Identify Fails and gives the result as identityexist given a wrong pin
+//					while repeat identy function with correct pin gives success.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0019
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini retrain_quit
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0019
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0020 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and train the
+//					User with the selected Pin and store the pin and ID of
+//					the user to the DB.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in, call Train Function and select first pin form first dialog.
+//					2. Call Identify function, enter PIN saved in previous operation from notification 
+//					dialog code.
+//					3. call Train Function. Call Cancel function of Plug-in object.
+//					4. Call Identify function.
+//					5. Displays Identify dialogs (EPINPlugInIdentify), enter random pin.
+//!@SYMTestExpectedResults		Train asynchronous operation shall be stopped. Calling active object receive
+//					KErrCancel. and Identify Fails and gives the result as identityexist given a wrong
+//					pin while repeat identy function with correct pin gives success.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0020
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini retrain_server_cancel1
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0020
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0021 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and identify the
+//					User with the given Pin and return the keyhash to the server.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in 
+//					2. Call Identify function which already trained with default pin.
+//					5. Displays Identify dialogs (EPINPlugInIdentify), enter default pin in first dialog.
+//!@SYMTestExpectedResults		identify returns success in first dialog itself
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0021
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini identify_ok_pass
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0021
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0022
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and identify the
+//					User with the given Pin and return the keyhash to the server.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in 
+//					2. Call Identify function which already trained.
+//					5. Displays Identify dialogs (EPINPlugInIdentify), enter wrong pin 3 retry dialogs.
+//!@SYMTestExpectedResults		identify operation not displayed 4 dialog and failed with 
+//					EPinPluginIdentificationFailure.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0022
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini identify_ok_fail
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0022
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0023
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and identify the
+//					User with the given Pin and return the keyhash to the server.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in and call Identify Function
+//					2. Select Cancel button when Identify dialog displayed.
+//!@SYMTestExpectedResults		Identify function complete with KErrAuthServPluginCancelled(code = -10804)  
+//					and Identify Fails with EPinPluginIdentificationFailure.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0023
+
+RUN_TEST_STEP !Error=-10804  100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini identify_cancel
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0023
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0024 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and identify the
+//					User with the given Pin and return the keyhash to the server.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in and call Identify Function
+//					2. Select Quit button when Identify dialog displayed.
+//!@SYMTestExpectedResults		Identify function complete with KErrAuthServPluginQuit(code = -10805)
+//					and Identify Fails with EPinPluginIdentificationFailure.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0024
+
+RUN_TEST_STEP !Error=-10805 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini identify_quit
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0024
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0025
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and identify the
+//					User with the given Pin and return the keyhash to the server.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in and call Identify Function
+//					2. Call Cancel function of Plug-in object.
+//!@SYMTestExpectedResults		Identify asynchronous operation shall be stopped. Calling active object receive
+//					KErrCancel. 
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0025
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini identify_server_cancel1
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0025
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0026
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases will load the pinplugin and while training the
+//					User because of invalid pinsize the registration fails.  
+//					the user to the DB.
+//!@SYMREQ 				REQ5021,REQ5020
+//!@SYMPREQ                   		PREQ219, DEF141405
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in and call Train Function
+//					2. Enter the new pinlength which is more than the max value in first Train dialog and 
+//					Enter Next button.
+//!@SYMTestExpectedResults		Pinplugin leaves with KErrAuthServRegistrationFailed(-10810).
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0026
+
+RUN_TEST_STEP !Error=-10810  100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini newpin_morethanmax
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0026
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0027 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and while train the
+//					User because of invalid pinsize the registration fails.
+//!@SYMREQ 				REQ5021,REQ5020
+//!@SYMPREQ                   		PREQ219, DEF141405
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in and call Train Function
+//					2. Enter the new pinlength which is less than the min value in first Train dialog and 
+//					Enter Next button.
+//!@SYMTestExpectedResults		Pinplugin leaves with KErrAuthServRegistrationFailed(-10810).
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0027
+
+RUN_TEST_STEP !Error=-10810  100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini newpin_lessthanmin
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0027
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0028 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and perform various train, 
+//					identify, cancel functions sequentially.
+//!@SYMREQ 				REQ5021, REQ 5020
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in 
+//					2. call Train Function verify with Identify Function.
+//					2. call Train Function
+//					3. Call Forget Function verify with Identify Function.
+//					4. call Train Function and while training the user cancel from dialog.
+//					5. call Train Function and verify with identify Function.
+//!@SYMTestExpectedResults		All the Function returns expected results
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0028
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini sequence
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0028
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0029 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and forget
+//					the trained data if already trained.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in and 
+//					2. Call Forget operation for unknown identity
+//					3. verify with identify operation
+//!@SYMTestExpectedResults		return with KErrAuthServNoSuchIdentity. Identify fails
+//					and gives the reason as no identity exists.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0029
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini forget_fail
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0029
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0030 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and forget
+//					the trained data if already trained.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in
+//					2. Call Forget operation for already trained identity
+//					and number of trained entries in the DB is more than one.
+//					3. verify with identify operation
+//!@SYMTestExpectedResults		Identify fails and gives the reason as no such identity exists.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0030
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini forget_pass1
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0030
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0031 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and forget
+//					the trained data if already trained.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in
+//					2. Call Forget operation for already trained identity
+//					and number of trained entries in the DB is more than one.
+//					3. verify with identify operation
+//!@SYMTestExpectedResults		Identify fails and gives the reason as no such identity exists.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0031
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini forget_pass2
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0031
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0032
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and forget
+//					the trained data if already trained.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in
+//					2. Call Forget operation for already trained identity
+//					and number of trained entries in the DB is more than one.
+//					3. verify with identify operation
+//!@SYMTestExpectedResults		Identify fails and gives the reason as no such identity exists.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0032
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini forget_pass3
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0032
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0033
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and forget
+//					the trained data if already trained.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in
+//					2. Call Forget operation for already trained identity
+//					and number of trained entries in the DB is more than one.
+//					3. verify with identify operation
+//!@SYMTestExpectedResults		Identify fails and gives the reason as no such identity exists.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0033
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini forget_pass4
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0033
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0034
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and forget
+//					the trained data if already trained.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in
+//					2. Call Forget operation for already trained identity
+//					and number of trained entries in the DB is more than one.
+//					3. verify with identify operation
+//!@SYMTestExpectedResults		Identify fails and gives the reason as no such identity exists.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0034
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini forget_pass5
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0034
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0035 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and forget
+//					the trained data if already trained.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in
+//					2. Call Forget operation for already trained identity
+//					and number of trained entries in the DB is more than one.
+//					3. verify with identify operation
+//!@SYMTestExpectedResults		Identify fails and gives the reason as no such identity exists.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0035
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini forget_pass6
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0035
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0036
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and forget
+//					the trained data if already trained.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in
+//					2. Call Forget operation for already trained identity
+//					and number of trained entries in the DB is more than one.
+//					3. verify with identify operation
+//!@SYMTestExpectedResults		Identify fails and gives the reason as no such identity exists.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0036
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini forget_pass7
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0036
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0037 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and forget
+//					the trained data if already trained.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in
+//					2. Call Forget operation for already trained identity
+//					and number of trained entries in the DB is more than one.
+//					3. verify with identify operation
+//!@SYMTestExpectedResults		Identify fails and gives the reason as no such identity exists.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0037
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini forget_pass8
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0037
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0038 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and forget
+//					the trained data if already trained.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in
+//					2. Call Forget operation for already trained identity
+//					and number of trained entries in the DB is more than one.
+//					3. verify with identify operation
+//!@SYMTestExpectedResults		Identify fails and gives the reason as no such identity exists.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0038
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini forget_pass9
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0038
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0039
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and forget
+//					the trained data if already trained.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in
+//					2. Call Forget operation for already trained identity
+//					and number of trained entries in the DB is more than one.
+//					3. verify with identify operation
+//!@SYMTestExpectedResults		Identify fails and gives the reason as no such identity exists.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0039
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini forget_pass10
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0039
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0040 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and forget
+//					the trained data if already trained.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in
+//					2. Call Forget operation for already trained identity
+//					and number of trained entries in the DB is more than one.
+//					3. verify with identify operation
+//!@SYMTestExpectedResults		Identify fails and gives the reason as no such identity exists.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0040
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini forget_pass11
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0040
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0041 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and forget
+//					the trained data if already trained.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in
+//					2. Call Forget operation for already trained identity
+//					and number of trained entries in the DB is more than one.
+//					3. verify with identify operation
+//!@SYMTestExpectedResults		Identify fails and gives the reason as no such identity exists.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0041
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini forget_pass12
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0041
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0042
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and forget
+//					the trained data if already trained.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in
+//					2. Call Forget operation for already trained identity
+//					and number of trained entries in the DB is more than one.
+//					3. verify with identify operation
+//!@SYMTestExpectedResults		Identify fails and gives the reason as no such identity exists.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0042
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini forget_pass13
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0042
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0043
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and forget
+//					the trained data if already trained.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in
+//					2. Call Forget operation for already trained identity
+//					and number of trained entries in the DB is more than one.
+//					3. verify with identify operation
+//!@SYMTestExpectedResults		Identify fails and gives the reason as no such identity exists.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0043
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini forget_pass14
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0043
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0044 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and forget
+//					the trained data if already trained.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in
+//					2. Call Forget operation for already trained identity
+//					and number of trained entries in the DB is more than one.
+//					3. verify with identify operation
+//!@SYMTestExpectedResults		Identify fails and gives the reason as no such identity exists.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0044
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini forget_pass15
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0044
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0045 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and forget
+//					the trained data if already trained.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in
+//					2. Call Forget operation for already trained identity
+//					and number of trained entries in the DB is more than one.
+//					3. verify with identify operation
+//!@SYMTestExpectedResults		Identify fails and gives the reason as no such identity exists.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0045
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini forget_pass16
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0045
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0046 
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test cases perform load the pinplugin and forget
+//					the trained data if already trained.
+//!@SYMREQ 				REQ5021
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestActions  			1. Load Plug-in
+//					2. Call Forget operation for already trained identity
+//					and number of trained entrie in the DB is exactly one.
+//					3. verify with identify operation
+//!@SYMTestExpectedResults		Identify fails and gives the reason as no such identity exists.
+//!@SYMTestType				UT
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0046
+
+RUN_TEST_STEP 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini forget_pass17
+
+// delete the source file
+RUN_UTILS DeleteFile c:\private\102740fc\plugin.store
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0046
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0047
+//!@SYMTestCaseDependencies		TEF, ini file (pinplugin.ini) containing the test data path for 
+//					the OOM tests.
+//!@SYMTestCaseDesc			Below test cases perform out of memory tests for the Pin Plugin.
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestExpectedResults		
+//!@SYMTestType				UT
+/////////////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0047
+
+// Test case perform out of memory tests for CAuthPluginInterface* NewL()
+RUN_TEST_STEP !OOM 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini oom1
+
+// Test case perform out of memory tests for DefaultData()
+RUN_TEST_STEP !OOM 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini oom2
+
+// Test case perform out of memory tests for Identify()
+RUN_TEST_STEP !OOM 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini oom3
+
+// Test case perform out of memory tests for Train()
+RUN_TEST_STEP !OOM 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini oom4
+
+// Test case perform out of memory tests for ReTrain()
+RUN_TEST_STEP !OOM 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini oom5
+
+// Test case perform out of memory tests for Forget()
+RUN_TEST_STEP !OOM 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini oom6
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0047
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////
+//!@file				
+//!@SYMTestCaseID			SEC-AUT-PINPLUGIN-0049
+//!@SYMTestCaseDependencies		TestData ini file(pinplugin.ini) containing the data 
+//!@SYMTestCaseDesc			Below test case try to load the plugin when the DB was corrupted.
+//!@SYMPREQ                   		PREQ219
+//!@SYMTestStatus			Implemented
+//!@SYMTestPriority			High
+//!@SYMTestExpectedResults		Load fails with error code
+//!@SYMTestType				UT
+/////////////////////////////////////////////////////////////////////////////////////////////////////
+
+START_TESTCASE SEC-AUT-PINPLUGIN-0049
+
+RUN_UTILS DeleteFile c:\private\102740fc\plugin.store
+RUN_UTILS CopyFile c:\tauth\tauthsvr\testdata\authsvrpolicy.ini c:\private\102740fc\plugin.store
+RUN_TEST_STEP_RESULT -5 100 tpinplugin tPinPluginTestStep c:\tauth\tpinplugin\scripts\tpinplugin.ini plugin_properties
+RUN_UTILS DeleteFile c:\private\102740fc\plugin.store
+
+END_TESTCASE SEC-AUT-PINPLUGIN-0049
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/tpinplugin/tpinplugin.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,115 @@
+/*
+* Copyright (c) 2006-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: 
+* TestExecute Server testing pin plugin
+*
+*/
+
+
+/**
+ @file 
+*/
+#include "tpinplugin.h"
+#include "tpinpluginteststep.h"
+
+using namespace AuthServer;
+
+CPinPluginTestServer* CPinPluginTestServer::NewL()
+	{
+	CPinPluginTestServer* server = new (ELeave) CPinPluginTestServer();
+	CleanupStack::PushL(server);
+	
+	// Either use a StartL or ConstructL, the latter will permit
+	// Server Logging.
+	TParsePtrC serverName(RProcess().FileName());	
+	server->ConstructL(serverName.Name());
+	CleanupStack::Pop(server);
+	return server;
+	}
+
+// EKA2 much simpler
+// Just an E32Main and a MainL()
+LOCAL_C void MainL()
+/**
+ * Much simpler, uses the new Rendezvous() call to sync with the client
+ */
+	{
+	// Leave the hooks in for platform security
+#if (defined __DATA_CAGING__)
+	RProcess().DataCaging(RProcess::EDataCagingOn);
+	RProcess().SecureApi(RProcess::ESecureApiOn);
+#endif
+	CActiveScheduler* sched=NULL;
+	sched=new(ELeave) CActiveScheduler;
+	CleanupStack::PushL(sched);
+	CActiveScheduler::Install(sched);
+	CPinPluginTestServer* server = NULL;
+	// Create the CTestServer derived server
+	TRAPD(err,server = CPinPluginTestServer::NewL());
+	if(!err)
+		{
+		// Sync with the client and enter the active scheduler
+		RProcess::Rendezvous(KErrNone);
+		sched->Start();
+		}
+	CleanupStack::Pop(sched);
+	delete server;
+	delete sched;
+	}
+
+// Only a DLL on emulator for typhoon and earlier
+
+GLDEF_C TInt E32Main()
+/**
+ @return - Standard Epoc error code on exit
+ */
+	{
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	if(cleanup == NULL)
+		{
+		return KErrNoMemory;
+		}
+	TRAP_IGNORE(MainL());
+	delete cleanup;
+	return KErrNone;
+    }
+
+// Create a thread in the calling process
+// Emulator typhoon and earlier
+
+CTestStep* CPinPluginTestServer::CreateTestStep(const TDesC& aStepName)
+	{
+	CTestStep* testStep = NULL;
+
+	// This server creates just one step 
+	// They are created "just in time" when the worker thread is created
+
+	if(aStepName == KPinPluginTestStep)
+		{
+		testStep = new CPinPluginTestStep();
+		}
+	else if (aStepName == KCreateInputFile)
+		{
+		testStep = new CCreateFile();
+		}
+	else
+		{
+		ERR_PRINTF1(_L("The test step name specified does not exist."));
+		}
+
+	return testStep;
+	}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/tpinplugin/tpinplugin.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2006-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 <test/TestExecuteServerBase.h>
+
+class CPinPluginTestServer : public CTestServer
+	{
+public:
+	/**
+ 	 Called inside the MainL() function to create and start the
+ 	 CTestServer derived server.
+ 	 
+ 	 @return - Instance of the test server
+ 	 */
+	static CPinPluginTestServer* NewL();
+	
+	/**
+	 Implementation of CTestServer pure virtual
+ 	 @return - A CTestStep derived instance
+ 	 */
+	virtual CTestStep* CreateTestStep(const TDesC& aStepName);
+	RFs& Fs(){return iFs;};
+
+private:
+	RFs iFs;
+	};
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/tpinplugin/tpinplugintestactive.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,1105 @@
+/*
+* Copyright (c) 2006-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 "tpinpluginteststep.h"
+#include <authserver/authplugininterface.h>
+#include <test/testexecutelog.h>
+#include <ecom/ecom.h>
+#include <ecom/implementationinformation.h>
+#include <s32file.h>
+#include <authserver/auth_srv_errs.h>
+#include <authserver/authpatchdata.h>
+#include <u32hal.h> 
+using namespace AuthServer;
+
+_LIT(KTrainSuccess,   	"TrainingSuccess");
+_LIT(KReTrainSuccess, 	"ReTrainingSuccess");
+_LIT(KIdentifySuccess,	"IdentifySuccess");
+_LIT(KIdentifyFailure,  "IdentifyFailure");
+
+_LIT(KSuccess,   	"Success");
+_LIT(KFailure,   	"Failure");
+_LIT(KDialogCancel, "Cancel");
+_LIT(KDialogQuit, 	"Quit");
+_LIT(KServerCancel, "ServerCancel");
+
+_LIT(KInputFile, 	"C:\\t_pinplugindlg_in.dat");
+_LIT(KOutputFile, 	"C:\\t_pinplugindlg_out.dat");
+
+const TPluginId KPinPluginImplementationUid = 0x200032E5;
+const TUint32 KEntropy = 10000;
+const TUint32 KFalsePositiveRate = 0;
+const TUint32 KFalseNegativeRate = 0;
+const TBool KActive = ETrue;
+const TAuthPluginType KPluginType = EAuthKnowledge;
+
+_LIT(KPluginName, "PinPlugin");
+_LIT(KPluginDesc, "Pinplugin authenticates device holder using PIN numbers generated from 0-9 digits");
+
+TInt CPinPluginTestActive::KAuthenticationServerStackSize=0x2000;
+TInt CPinPluginTestActive::KAuthenticationServerInitHeapSize=0x1000;
+TInt CPinPluginTestActive::KAuthenticationServerMaxHeapSize=0x1000000;
+
+CPinPluginTestActive* CPinPluginTestActive::NewL(CTestExecuteLogger& aLogger, AuthServer::TIdentityId& aIdentityId, TPtrC& aPinProcessType, CPinPluginTestStep &aTestStep)
+	{
+	CPinPluginTestActive* pinPlugin = new (ELeave) CPinPluginTestActive(aLogger, aIdentityId, aPinProcessType, aTestStep);
+	pinPlugin->ContructL();
+	return pinPlugin;
+	}
+
+void CPinPluginTestActive::ContructL()
+	{
+	User::LeaveIfError(iFs.Connect());
+	}
+
+CPinPluginTestActive::CPinPluginTestActive(CTestExecuteLogger& aLogger, TIdentityId& aIdentityId,TPtrC& aPinProcessType, CPinPluginTestStep &aTestStep) 
+	:CActive(EPriorityStandard), 
+	iLogger(aLogger), 
+	iOperation(EPinPluginInfo),
+	iIdentityId(aIdentityId),
+	iPinProcessType(aPinProcessType),
+    iTestStep(aTestStep)
+	{
+	CActiveScheduler::Add( this );
+	}
+
+CPinPluginTestActive::~CPinPluginTestActive()
+	{
+	Cancel();
+	iFs.Close();
+	if (iPinPlugin)
+		{
+		REComSession::DestroyedImplementation(iDtor_ID_Key);
+		delete iPinPlugin;
+		}
+	REComSession::FinalClose();
+	}
+
+	
+void CPinPluginTestActive::RunL()
+	{
+        iTestStep.SetTestStepError(iStatus.Int()); 
+    	CActiveScheduler::Stop();
+	return;
+	}
+	
+TVerdict CPinPluginTestActive::DoTestPropertyL()
+	{
+	TBool res = ETrue; 
+
+__UHEAP_MARK;		// Check for memory leaks
+		
+	iPinPlugin = LoadPluginL();
+	if (iPinPlugin != NULL)
+		{
+		if(iPinPlugin->Id() != KPinPluginImplementationUid)
+			res = EFalse;
+		if(iPinPlugin->Name().CompareF(KPluginName) != 0)
+			res = EFalse;
+		if(iPinPlugin->Description().CompareF(KPluginDesc) != 0)
+			res = EFalse;
+		if(iPinPlugin->Type() != KPluginType)
+			res = EFalse;
+		if(iPinPlugin->MinEntropy() != KEntropy)
+			res = EFalse;
+		if(iPinPlugin->FalsePositiveRate() != KFalsePositiveRate)
+			res = EFalse;
+		if(iPinPlugin->FalseNegativeRate() != KFalseNegativeRate)
+			res = EFalse;
+		if(iPinPlugin->IsActive() != KActive)
+			res = EFalse;
+
+		INFO_PRINTF2(_L("ID			 : 0x%x"), iPinPlugin->Id());
+	    INFO_PRINTF2(_L("Name		 : %S"), &iPinPlugin->Name());
+	    INFO_PRINTF2(_L("Description	 : %S"), &iPinPlugin->Description());
+	    INFO_PRINTF2(_L("MinEntropy		 : %d"), iPinPlugin->MinEntropy());
+	    INFO_PRINTF2(_L("False Positive Rate : %d"), iPinPlugin->FalsePositiveRate());
+	    INFO_PRINTF2(_L("False Negative Rate : %d"), iPinPlugin->FalseNegativeRate());
+	    _LIT(KETrue, "ETrue");
+		_LIT(KEFalse, "EFalse");
+	    INFO_PRINTF2(_L("IsActive   	 : %S"), iPinPlugin->IsActive() ? &KETrue : &KEFalse);
+	    switch(iPinPlugin->Type())
+	    	{
+	    	case EAuthDefault:
+	    		INFO_PRINTF1(_L("Type       	 : EAuthDefault"));
+	    		break;
+	    	case EAuthBiometric:
+	    		INFO_PRINTF1(_L("Type       	 : EAuthBiometric"));
+	    		break;
+	    	case EAuthKnowledge:
+	    		INFO_PRINTF1(_L("Type       	 : EAuthKnowledge"));
+	    		break;
+	    	case EAuthToken:
+	    		INFO_PRINTF1(_L("Type       	 : EAuthToken"));
+	    		break;
+	    	case EAuthPerformance:
+	    		INFO_PRINTF1(_L("Type       	 : EAuthPerformance"));
+	    		break;
+	    	default:
+	    		INFO_PRINTF1(_L("Invalid Type"));
+	    	}
+		}
+	else
+		{
+		iLogInfo.Copy( _L("Cannot Load PinPlugin") );
+		return EFail;
+		}
+	UnLoadPlugin();
+	
+__UHEAP_MARKEND;
+
+	if (!res)
+		{
+		INFO_PRINTF1(_L("PinPlugin returns Unexpected Values"));
+		return EFail;
+		}
+	return EPass;
+	}
+
+TVerdict CPinPluginTestActive::DoTestDefaultDataL()
+	{
+	TBool res = ETrue;
+	
+__UHEAP_MARK;		// Check for memory leaks
+		
+	iPinPlugin = LoadPluginL();
+	if (iPinPlugin != NULL)
+		{
+		HBufC8* result = NULL;
+		TInt err = iPinPlugin->DefaultData(iIdentityId, result);
+		if(result != NULL)
+			{
+			delete result;
+			}
+		if (err != KErrNone)
+			{
+			if (err == KErrNoMemory)
+				{
+				User::Leave(err);
+				}
+			res = EFalse;
+			INFO_PRINTF3(_L("Err :%d while receiving the default data for the identity : %d"), err, iIdentityId);
+			}
+		else
+			{
+			_LIT(KPinValue, "11111");
+			iPinValue.Copy(KPinValue);
+			INFO_PRINTF2(_L("Requesting Identify the Identity : %d with the default pin"), iIdentityId);
+			TIdentityId identityId = iIdentityId;
+			PreferDialogInputL(KIdentifySuccess, EPinPluginIdentify, 1);
+			res = DoIdentifyL(result);
+			if(result != NULL)
+				{
+				INFO_PRINTF2(_L("The Identity : %d is Successfully identified"), iIdentityId);
+				delete result;
+				}
+			else
+				{
+				INFO_PRINTF2(_L("IdentityId : %d is not identified"), identityId);
+				}
+			}
+		}
+	else
+		{
+		iLogInfo.Copy( _L("Cannot Load PinPlugin") );
+		return EFail;
+		}
+	UnLoadPlugin();
+	
+__UHEAP_MARKEND;
+
+	return ReturnResultL(res);
+	}
+
+TVerdict CPinPluginTestActive::DoTestIdentifyL()
+	{ 
+	if(!ReadDetailsFromIni(iTestStep))
+		{
+		return EFail;
+		}
+	PreferDialogInputL(iExpectedOutput, EPinPluginIdentify, iDialogNumber);
+	TBool res = ETrue;
+
+__UHEAP_MARK;		// Check for memory leaks
+		
+	TIdentityId identityId = iIdentityId;
+	iPinPlugin = LoadPluginL();
+	if (iPinPlugin != NULL)
+		{
+		HBufC8* result = NULL;
+		INFO_PRINTF2(_L("Requesting Identify the Identity : %d"), iIdentityId);
+		res = DoIdentifyL(result);
+		if(result != NULL)
+			{
+			INFO_PRINTF2(_L("The Identity : %d is Successfully identified"), iIdentityId);
+			delete result;
+			}
+		else
+			{
+			INFO_PRINTF2(_L("IdentityId : %d is not identified"), identityId);
+			}
+		}
+	else
+		{
+		iLogInfo.Copy( _L("Cannot Load PinPlugin") );
+		return EFail;
+		}
+	UnLoadPlugin();
+__UHEAP_MARKEND;
+	
+	return ReturnResultL(res);
+	}
+	
+TVerdict CPinPluginTestActive::DoTestTrainL()
+	{
+	if(!ReadDetailsFromIni(iTestStep))
+		{
+		return EFail;
+		}
+	PreferDialogInputL(iExpectedOutput, EPinPluginTraining, iDialogNumber);
+	TBool res = ETrue;
+	
+__UHEAP_MARK;		// Check for memory leaks
+		
+	iPinPlugin = LoadPluginL();
+	if (iPinPlugin != NULL)
+		{
+		INFO_PRINTF2(_L("Requesting Train the Identity : %d"), iIdentityId);
+		res = TrainIdentifyL();
+		}
+	else
+		{
+		iLogInfo.Copy( _L("Cannot Load PinPlugin") );
+		return EFail;
+		}
+	UnLoadPlugin();
+	
+__UHEAP_MARKEND;
+	
+	return ReturnResultL(res);
+	}
+
+TVerdict CPinPluginTestActive::DoTestForgetL()
+	{
+	if(!ReadDetailsFromIni(iTestStep))
+		{
+		return EFail;
+		}
+
+	TBool res = ETrue;
+
+__UHEAP_MARK;		// Check for memory leaks
+		
+	iPinPlugin = LoadPluginL();
+	if (iPinPlugin != NULL)
+		{
+		ForgetIdentifyL();
+		}
+	else
+		{
+		iLogInfo.Copy( _L("Cannot Load PinPlugin") );
+		return EFail;
+		}
+	UnLoadPlugin();
+__UHEAP_MARKEND;
+
+	return ReturnResultL(res);
+	}
+
+void CPinPluginTestActive::DoCancel() 
+	{ 
+	iPinPlugin->Cancel();
+	}
+
+TVerdict CPinPluginTestActive::DoTestReTrainL()
+	{
+	if(!ReadDetailsFromIni(iTestStep))
+		{
+		return EFail;
+		}
+
+	TInt dialogno = iDialogNumber;
+	TBool DialogCancel = EFalse;
+	if (iExpectedOutput.CompareF(KDialogCancel) == 0
+		|| iExpectedOutput.CompareF(KDialogQuit) == 0)
+		{
+		DialogCancel = ETrue;
+		}
+	PreferDialogInputL(KTrainSuccess, EPinPluginTraining, 1);
+	TBool res = ETrue;
+
+__UHEAP_MARK;		// Check for memory leaks
+	TIdentityId identityId = iIdentityId;
+	iPinPlugin = LoadPluginL();
+	if (iPinPlugin != NULL)
+		{
+		INFO_PRINTF2(_L("Requesting Train the Identity : %d"), iIdentityId);
+		res = TrainIdentifyL();
+		if (res)
+			{
+			iTempPinValue.Copy(iPinValue);
+			if (DialogCancel)
+				{
+				PreferDialogInputL(KDialogCancel, EPinPluginTraining, dialogno);
+				}
+			else
+				{
+				PreferDialogInputL(KReTrainSuccess, EPinPluginTraining, dialogno);		
+				}
+			INFO_PRINTF2(_L("Requesting ReTrain the Identity : %d"), iIdentityId);
+			res = TrainIdentifyL();
+			if (res)
+				{
+				iPinValue.Copy(iTempPinValue);
+				iIdentityId = identityId;
+				if (DialogCancel)
+					{
+					PreferDialogInputL(KIdentifySuccess, EPinPluginIdentify, dialogno);	
+					}
+				else
+					{
+					PreferDialogInputL(KIdentifyFailure, EPinPluginIdentify, 3);		
+					}		
+				HBufC8* result = NULL;
+				HBufC* pinVal = HBufC::NewLC(iPinValue.Length());
+			   	pinVal->Des().Copy(iPinValue);
+				INFO_PRINTF3(_L("Requesting Identify the Identity : %d with the pin : %S"), iIdentityId, pinVal);
+				CleanupStack::PopAndDestroy(pinVal);
+				res = DoIdentifyL(result);
+				if(result != NULL)
+					{
+					INFO_PRINTF2(_L("The Identity : %d is Successfully identified"), iIdentityId);
+					delete result;
+					}
+				else
+					{
+					INFO_PRINTF2(_L("IdentityId : %d is not identified"), identityId);
+					}
+				}
+			}
+		}
+	else
+		{
+		iLogInfo.Copy( _L("Cannot Load PinPlugin") );
+		return EFail;
+		}
+	UnLoadPlugin();
+__UHEAP_MARKEND;
+	
+	return ReturnResultL(res);
+	}
+	
+TVerdict CPinPluginTestActive::DoTestServerCancelL()
+	{
+	if(!ReadDetailsFromIni(iTestStep))
+		{
+		return EFail;
+		}
+	PreferDialogInputL(iExpectedOutput, EPinPluginTraining, 1);
+	
+	TBool res = ETrue;
+	
+__UHEAP_MARK;		// Check for memory leaks
+	TIdentityId identityId = iIdentityId;
+	iPinPlugin = LoadPluginL();
+	if (iPinPlugin != NULL)
+		{
+		if (iPinProcessType.CompareF(KReTrainServerCancel) == 0)
+			{
+			INFO_PRINTF2(_L("Requesting Train the Identity : %d"), iIdentityId);
+			res = TrainIdentifyL();
+			}
+		HBufC8* result = NULL;
+		if (iPinProcessType.CompareF(KTrainServerCancel) == 0
+			|| iPinProcessType.CompareF(KReTrainServerCancel) == 0)
+			{
+			iTempPinValue.Copy(iPinValue);
+			INFO_PRINTF2(_L("Requesting Train the Identity : %d"), iIdentityId);
+			iPinPlugin->Train(iIdentityId, result, iStatus);
+			SetActive();
+			}
+		else if (iPinProcessType.CompareF(KIdentifyServerCancel) == 0)
+			{
+			INFO_PRINTF2(_L("Identify the Identity : %d"), iIdentityId);
+			iPinPlugin->Identify(iIdentityId, KNullDesC(), result, iStatus);
+			SetActive();
+			}
+
+		INFO_PRINTF1(_L("Cancel the process from the Authentication Server"));
+
+		Cancel();
+		
+		if(iStatus.Int() != -3)
+			{
+			res = EFalse;
+			}
+		if (res && iPinProcessType.CompareF(KIdentifyServerCancel) != 0)
+			{
+			iIdentityId = identityId;
+			if (iPinProcessType.CompareF(KTrainServerCancel) == 0)
+				{
+				_LIT(KPinValue, "123456");
+				iPinValue.Copy(KPinValue);
+				PreferDialogInputL(KIdentifyFailure, EPinPluginIdentify, 3);	
+				}
+			else
+				{
+				iPinValue.Copy(iTempPinValue);
+				PreferDialogInputL(KIdentifySuccess, EPinPluginIdentify, 1);		
+				}		
+			HBufC8* result = NULL;
+			HBufC* pinVal = HBufC::NewLC(iPinValue.Length());
+		   	pinVal->Des().Copy(iPinValue);
+			INFO_PRINTF3(_L("Requesting Identify the Identity : %d with the pin : %S"), iIdentityId, pinVal);
+			CleanupStack::PopAndDestroy(pinVal);
+			res = DoIdentifyL(result);
+			if(result != NULL)
+				{
+				INFO_PRINTF2(_L("The Identity : %d is Successfully identified"), iIdentityId);
+				delete result;
+				}
+			else
+				{
+				INFO_PRINTF2(_L("IdentityId : %d is not identified"), identityId);
+				}
+			}
+		}
+	else
+		{
+		iLogInfo.Copy( _L("Cannot Load PinPlugin") );
+		return EFail;
+		}
+	UnLoadPlugin();
+
+__UHEAP_MARKEND;
+	
+	return ReturnResultL(res);
+	}
+	
+TVerdict CPinPluginTestActive::DoTestSequenceL()
+	{
+	PreferDialogInputL(KTrainSuccess, EPinPluginTraining, 1);
+	
+	TBool res = ETrue;
+	
+__UHEAP_MARK;		// Check for memory leaks
+		
+	iPinPlugin = LoadPluginL();
+	if (iPinPlugin != NULL)
+		{
+		INFO_PRINTF2(_L("Requesting Train the Identity : %d"), iIdentityId);
+		res = TrainIdentifyL();
+		if (res)
+			{
+			PreferDialogInputL(KReTrainSuccess, EPinPluginTraining, 1);
+			INFO_PRINTF2(_L("Requesting ReTrain the Identity : %d"), iIdentityId);
+			HBufC8* result = NULL;
+			res = DoTrainL(result);
+			if (result != NULL)
+				{
+				delete result;
+				}
+			if (res)
+				{
+				TIdentityId id = iIdentityId;
+				res = ForgetIdentifyL();
+				if(res)
+					{
+					for (TInt i = 0; i <= 2; i++)
+						{
+						iIdentityId = id;
+						INFO_PRINTF2(_L("Requesting Train the Identity : %d"), iIdentityId);
+						if (i==2)
+							{
+							PreferDialogInputL(KTrainSuccess, EPinPluginTraining, 1);
+							}
+						else
+							{
+							iInfoMsg = EPinPluginTrainingSuccess;
+							PreferDialogInputL(KDialogCancel, EPinPluginTraining, 1);
+							}
+						res = TrainIdentifyL();
+						if (!res)
+							{
+							break;
+							}
+						}
+					}
+				}
+			}
+		}
+	else
+		{
+		iLogInfo.Copy( _L("Cannot Load PinPlugin") );
+		return EFail;
+		}
+	UnLoadPlugin();
+
+__UHEAP_MARKEND;
+	
+	return ReturnResultL(res);
+	}
+	
+TVerdict CPinPluginTestActive::DoTestOomL()
+	{
+ 	if(!iTestStep.GetIntFromConfig(iTestStep.ConfigSection(), _L("oomtest"), iOomTest))
+   		{
+   		INFO_PRINTF1(_L("Test about which function is needed"));
+   		return EFail;
+   		}
+	__UHEAP_MARK;
+		TIdentityId id = 1234;
+		HBufC8* result = NULL;
+	switch(iOomTest)
+		{
+		case 1:
+			{
+			iPinPlugin = LoadPluginL();
+			UnLoadPlugin();
+			}
+			break;
+		case 2:
+			{
+			iPinPlugin = LoadPluginL();
+			TInt err = iPinPlugin->DefaultData(id, result);
+			CleanupStack::PushL(result);
+			if (err == KErrNoMemory)
+				{
+				User::Leave(err);
+				}
+			err = iPinPlugin->Forget(id);
+			if (err == KErrNoMemory)
+				{
+				User::Leave(err);
+				}
+			CleanupStack::PopAndDestroy(result);
+			UnLoadPlugin();
+			}
+			break;
+		case 3:
+			{
+			iPinPlugin = LoadPluginL();
+			iStatus = KRequestPending;
+			_LIT(KPinValue, "11111");
+			iPinValue.Copy(KPinValue);
+			PreferDialogInputL(KIdentifySuccess, EPinPluginIdentify, 1);
+			iPinPlugin->Identify(id, KNullDesC(), result, iStatus);
+			CleanupStack::PushL(result);
+			SetActive();
+			CActiveScheduler::Start();
+			CleanupStack::PopAndDestroy(result);
+			UnLoadPlugin();
+			}
+			break;
+		case 4:
+			{
+			iPinPlugin = LoadPluginL();
+			iStatus = KRequestPending;
+			PreferDialogInputL(KTrainSuccess, EPinPluginTraining, 1);
+			iPinPlugin->Train(id, result, iStatus);
+			SetActive();
+			CActiveScheduler::Start();
+			if (result != NULL)
+				{
+				delete result;
+				}
+			TInt err = iPinPlugin->Forget(id);
+			if (err == KErrNoMemory)
+				{
+				User::Leave(err);
+				}
+			UnLoadPlugin();
+			}
+			break;
+		case 5:
+			{
+			iPinPlugin = LoadPluginL();
+			iStatus = KRequestPending;
+			PreferDialogInputL(KTrainSuccess, EPinPluginTraining, 1);
+			iPinPlugin->Train(id, result, iStatus);
+			SetActive();
+			CActiveScheduler::Start();
+			if (result != NULL)
+				{
+				delete result;
+				}
+			UnLoadPlugin();
+			}
+			break;
+		case 6:
+			{
+			iPinPlugin = LoadPluginL();
+			TInt err = iPinPlugin->Forget(id);
+			if (err == KErrNoMemory)
+				{
+				User::Leave(err);
+				}
+			UnLoadPlugin();
+			}
+			break;
+		}
+
+	__UHEAP_MARKEND;
+ 	return EPass;
+	}
+
+CPinPlugin* CPinPluginTestActive::LoadPluginL()
+	{
+	 TEComResolverParams resolverParams;
+	  TBufC8<16> pluginIdTxt;
+	  
+	  pluginIdTxt.Des().Format(_L8("%x"), KPinPluginImplementationUid);
+	  pluginIdTxt.Des().UpperCase();
+	  resolverParams.SetDataType(pluginIdTxt);
+	  
+	  //To load plugins from sources other than ROM the patch 
+	  // data KEnablePostMarketAuthenticationPlugins must be set to True.
+	  TUint32 enablePostMarketPlugin = KEnablePostMarketAuthenticationPlugins;
+
+	#ifdef __WINS__
+
+	  // Default SymbianOS behavior is to only load auth plugins from ROM.
+	  enablePostMarketPlugin = 0;
+
+	  // For the emulator allow the constant to be patched via epoc.ini
+	  UserSvr::HalFunction(EHalGroupEmulator, EEmulatorHalIntProperty,
+	  (TAny*)"KEnablePostMarketAuthenticationPlugins", &enablePostMarketPlugin); // read emulator property (if present)
+
+	#endif
+
+	  TAny* plugin = 0;
+	  TInt err = 0;
+	  
+	  if(enablePostMarketPlugin == 0) 
+	  	{
+	  	TRAP(err, plugin = 
+		REComSession::CreateImplementationL(KCAuthPluginInterfaceUid,
+											iDtor_ID_Key,
+											resolverParams,
+											KRomOnlyResolverUid));
+	  	}
+	  
+	  else
+	  	{
+	  	TRAP(err, plugin = 
+		REComSession::CreateImplementationL(KCAuthPluginInterfaceUid,
+											iDtor_ID_Key,
+											resolverParams));
+	  	}
+	  
+	 if (err == KErrNotFound)
+	    {
+	    err = KErrAuthServNoSuchPlugin;  
+	    }
+	  User::LeaveIfError(err);
+	    
+	  return reinterpret_cast<CPinPlugin*>(plugin);
+	
+	}
+
+void CPinPluginTestActive::UnLoadPlugin()
+	{
+	delete iPinPlugin;
+	iPinPlugin = NULL;
+	REComSession::DestroyedImplementation(iDtor_ID_Key);
+	REComSession::FinalClose();
+	}
+	
+TVerdict CPinPluginTestActive::ReturnResultL(TBool aRes)
+	{
+	TVerdict result = EPass;
+	DeleteFileL();
+	if (!aRes)
+		{
+		result = EFail;
+		}
+	return result;
+	}
+	
+TBool CPinPluginTestActive::TrainIdentifyL()
+	{
+	TBool res = ETrue;
+
+	HBufC8* result = NULL;
+	res = DoTrainL(result);
+	if (res)
+		{
+		HBufC* pinVal = HBufC::NewLC(iPinValue.Length());
+	   	pinVal->Des().Copy(iPinValue);
+		INFO_PRINTF3(_L("Identify the Identity : %d using pin : %S"), iIdentityId, pinVal);
+		HBufC8* result1 = NULL;
+		TIdentityId identityId = iIdentityId;
+		res = DoIdentifyL(result1);
+		if(res && result1 != NULL)
+			{
+			if (result->Des().CompareF(result1->Des()) != 0)
+				{
+				INFO_PRINTF1( _L("Trained result is different from identification result"));
+				res = EFalse;
+				}
+			else
+				{
+				INFO_PRINTF3(_L("The Identity : %d is Successfully identified with pin : %S"), iIdentityId, pinVal);
+				}
+			delete result1;
+			}
+		else
+			{
+			INFO_PRINTF2(_L("The Identity %d is not trained"), identityId);
+			}
+		CleanupStack::PopAndDestroy(pinVal);
+		}
+	if(result != NULL)
+		{
+		delete result;
+		}
+		
+	return res;
+	}
+
+TBool CPinPluginTestActive::ForgetIdentifyL()
+	{
+	INFO_PRINTF2(_L("Requesting Forget the Identity : %d"), iIdentityId);
+	TInt err = iPinPlugin->Forget(iIdentityId);
+	
+	TBool res = CheckResultL(err);
+	if (res)
+		{
+		INFO_PRINTF2(_L("IdentityId :%d is successfully removed"), iIdentityId);
+		INFO_PRINTF1(_L("Verify using Identify Process"));	
+		HBufC8* result = NULL;
+		res = DoIdentifyL(result);
+		if(res && result != NULL)
+			{
+			INFO_PRINTF2(_L("The Identity : %d is Successfully identified"), iIdentityId);
+			delete result;
+			}
+		}
+	return res;	
+	}
+	
+TBool CPinPluginTestActive::DoTrainL(HBufC8*& aResult)
+	{
+	TBool res = ETrue;
+	iStatus = KRequestPending;
+	
+	iPinPlugin->Train(iIdentityId, aResult, iStatus);
+	SetActive();
+	CActiveScheduler::Start();
+		
+	res = VerifyResultL(iStatus.Int());
+	return res;
+	}
+	
+TBool CPinPluginTestActive::DoIdentifyL(HBufC8*& aResult)
+	{
+	TBool res = ETrue;
+		
+	iPinPlugin->Identify(iIdentityId, KNullDesC(), aResult, iStatus);
+	if(!IsActive())
+		SetActive();
+	CActiveScheduler::Start();
+	
+	res = VerifyResultL(iStatus.Int());
+	return res;
+	}
+	
+TBool CPinPluginTestActive::VerifyResultL(TInt aOutputVal)
+	{
+	TBool result = ETrue;
+	
+	if ((iExpectedOutput.CompareF(KDialogCancel) == 0)
+		&& (aOutputVal != KErrAuthServPluginCancelled))
+		{
+		INFO_PRINTF1(_L("RequestStatus is not completed with expected result"));
+		result = EFalse;
+		}
+	else if ((iExpectedOutput.CompareF(KDialogQuit) == 0)
+		&& (aOutputVal != KErrAuthServPluginQuit))
+		{
+		INFO_PRINTF1(_L("RequestStatus is not completed with expected result"));
+		result = EFalse;
+		}
+	else if ((iExpectedOutput.CompareF(KTrainSuccess) == 0)
+		&& (aOutputVal == KErrAuthServRegistrationFailed))
+		{
+		INFO_PRINTF2(_L("Authserver registration failed. Returned error code = %d"), aOutputVal);
+		result = EFalse;
+		}	
+	else if ((iExpectedOutput.CompareF(KDialogCancel) != 0)
+			&& (iExpectedOutput.CompareF(KDialogQuit) != 0)
+			&& (iExpectedOutput.CompareF(KServerCancel) != 0)
+			&& (aOutputVal != KErrNone))
+		{
+		INFO_PRINTF1(_L("RequestStatus is not completed with expected result"));
+		result = EFalse;
+		}
+	if (result && aOutputVal == KErrNone)
+		{
+		TInt dialogNumber;
+		TPinValue pinValue;
+		TPinPluginInfoMessage displayedMsg;
+		ReadOutputDetailsL(dialogNumber, pinValue, displayedMsg);
+		TPtrC message;
+		switch(displayedMsg)
+	    	{
+	    	case EPinPluginTrainingSuccess:
+	    		message.Set(_L("EPinPluginTrainingSuccess"));
+	    		break;
+	    	case EPinPluginReTrainingSuccess:
+	    		message.Set(_L("EPinPluginReTrainingSuccess"));
+	    		break;
+	    	case EPinPluginIdentificationSuccess:
+	    		message.Set(_L("EPinPluginIdentificationSuccess"));	  
+	    		break;
+	    	case EPinPluginIdentificationFailure:
+	    		message.Set(_L("EPinPluginIdentificationFailure"));
+	    		break;
+	    	}
+		if(displayedMsg != iInfoMsg)
+			{
+			INFO_PRINTF2(_L("INFO :%S which is not expected"), &message);
+			result = EFalse;
+			}
+		if (iCmdResult == EOk && dialogNumber != iDialogNumber)
+			{
+			INFO_PRINTF3(_L("Number of dialog displayed : %d differ from expected dialog: %d."), dialogNumber,iDialogNumber);
+			result = EFalse;
+			}
+		if (displayedMsg == EPinPluginIdentificationFailure
+			&& dialogNumber == 0)
+			{
+			INFO_PRINTF2(_L("INFO :%S because IdentityId is not available in the DB"), &message);
+			}
+		if (displayedMsg == EPinPluginIdentificationFailure
+			&& dialogNumber == 3)
+			{
+			INFO_PRINTF2(_L("INFO :%S because wrong pin input for all retries and IdentityId exists in the DB"), &message);
+			}
+		if (displayedMsg == EPinPluginIdentificationFailure
+			&& iIdentityId != KUnknownIdentity)
+			{
+			INFO_PRINTF2(_L("IdentityId was not reset for %S"), &message);
+			}
+		if (displayedMsg != EPinPluginIdentificationSuccess
+			&& displayedMsg != EPinPluginIdentificationFailure)
+			{
+			iPinValue.Copy(pinValue);
+			if (iInfoMsg == EPinPluginTrainingSuccess 
+				|| iInfoMsg == EPinPluginReTrainingSuccess)
+				{
+				HBufC* pinVal = HBufC::NewLC(pinValue.Length());
+			   	pinVal->Des().Copy(pinValue);
+				INFO_PRINTF3(_L("The Identity %d is trained with pin number %S"), iIdentityId, pinVal);
+				CleanupStack::PopAndDestroy(pinVal);
+				PreferDialogInputL(KIdentifySuccess, EPinPluginIdentify, 1);
+				}
+			else
+				{
+				PreferDialogInputL(KIdentifyFailure, EPinPluginIdentify, 0);
+				}
+			}
+		}
+	if(aOutputVal != KErrNone)
+		{
+		if (aOutputVal == KErrAuthServPluginCancelled)
+			{
+			INFO_PRINTF1(_L("Cancel the process from the Dialog Notifier"));	
+			}
+		else if (aOutputVal == KErrAuthServPluginQuit)
+			{
+			INFO_PRINTF1(_L("Quit the process from the Dialog Notifier"));	
+			}
+		CheckResultL(aOutputVal);
+		}
+	return result;
+	}
+	
+TBool CPinPluginTestActive::CheckResultL(TInt aResult)
+	{
+	_LIT(KPinValue, "123456");
+	if (iExpectedOutput.CompareF(KSuccess) == 0
+		&& aResult == KErrAuthServNoSuchIdentity)
+		{
+		INFO_PRINTF2(_L("IdentityId : %d is not identified when should be"), iIdentityId);
+		return EFalse;
+		}
+	else if(iExpectedOutput.CompareF(KFailure) == 0
+		&& aResult == KErrNone)
+		{
+		INFO_PRINTF2(_L(" IdentityId : %d is identified when should not be"), iIdentityId);
+		return EFalse;
+		}
+	iPinValue.Copy(KPinValue);
+	PreferDialogInputL(KIdentifyFailure, EPinPluginIdentify, 3);
+	return ETrue;
+	}
+	
+TBool CPinPluginTestActive::ReadDetailsFromIni(CPinPluginTestStep& aStep)
+	{
+	TPtrC pinVal;
+	if(!aStep.GetStringFromConfig(aStep.ConfigSection(), _L("expectedoutput"), iExpectedOutput))
+		{
+		INFO_PRINTF1(_L("expectedoutput value is missing"));
+		return EFalse;
+		}
+	// Optional input, if the input is not available by default the iIndex is set to 0.
+	if(!aStep.GetIntFromConfig(aStep.ConfigSection(), _L("selectindex"), iIndex))
+		{
+		iIndex = 0;
+		}
+	// optional input, if not pinplugin use the default pinlength from the config file.
+	aStep.GetIntFromConfig(aStep.ConfigSection(), _L("newpinlength"), iNewPinLength);
+
+	// optional input, 
+	aStep.GetStringFromConfig(aStep.ConfigSection(), _L("pinvalue"), pinVal);
+	iPinValue.Copy(pinVal);
+
+	// Optional input, if the input is not available by default the resultant output cmd will given
+	// in the dialog No 1.
+	if(!aStep.GetIntFromConfig(aStep.ConfigSection(), _L("outputatdialog"), iDialogNumber))
+		{
+		if (iExpectedOutput.CompareF(KIdentifyFailure) == 0)
+			{
+			iDialogNumber = 3;
+			}
+		else
+			{
+			iDialogNumber = 1;
+			}
+		}
+	return ETrue;
+	}
+	
+void CPinPluginTestActive::PreferDialogInputL(const TDesC& aExpectedOutput,
+			TPinPluginDialogOperation aOp, TInt aDialogNo)
+	{
+	// iPinValue, iIndex, iNewPinLength is not changing for every operation. if
+	// any changes occurs , we have to reset just before calling this function.
+	iOperation = aOp;
+	iDialogNumber = aDialogNo;
+	iExpectedOutput.Set(aExpectedOutput);
+		
+	if (aExpectedOutput.CompareF(KTrainSuccess) == 0)
+		{
+		iInfoMsg = EPinPluginTrainingSuccess;
+		}
+	else if (aExpectedOutput.CompareF(KReTrainSuccess) == 0)
+		{
+		iInfoMsg = EPinPluginReTrainingSuccess;
+		}
+	else if (aExpectedOutput.CompareF(KIdentifySuccess) == 0)
+		{
+		iInfoMsg = EPinPluginIdentificationSuccess;
+		}
+	else if (aExpectedOutput.CompareF(KIdentifyFailure) == 0)
+		{
+		iInfoMsg = EPinPluginIdentificationFailure;
+		}
+
+	if (aExpectedOutput.CompareF(KDialogCancel) == 0)
+		{
+		iCmdResult = iCmdFinalResult = ECancel;
+		}
+	else if (aExpectedOutput.CompareF(KDialogQuit) == 0)
+		{
+		iCmdResult = iCmdFinalResult = EQuit;
+		}
+	else 
+		{
+		iCmdResult = iCmdFinalResult = EOk;
+		}
+		
+	if (iDialogNumber > 1 && 
+	   	aExpectedOutput.CompareF(KIdentifyFailure) != 0 &&
+		aExpectedOutput.CompareF(KIdentifySuccess) != 0)
+		{
+		iCmdResult = ENext;
+		}
+	DeleteFileL();
+	WriteOutputDetailsL();
+	}
+	
+void CPinPluginTestActive::WriteOutputDetailsL()
+	{
+	RFileWriteStream stream;
+	TInt err = stream.Create(iFs, KInputFile, EFileWrite | EFileShareExclusive);
+	User::LeaveIfError(err);
+	stream.PushL();
+
+	MStreamBuf* streamBuf = stream.Sink();
+	streamBuf->SeekL(MStreamBuf::EWrite, EStreamEnd);
+	stream.WriteInt32L(iOperation);
+	stream.WriteInt32L(iPinValue.Length());
+	stream.WriteL(iPinValue);
+	stream.WriteInt32L(iIndex);
+	stream.WriteInt32L(iNewPinLength);
+	stream.WriteInt32L(iCmdResult);
+	iOperation = EPinPluginInfo;
+	stream.WriteInt32L(iOperation);
+	stream.WriteInt32L(iCmdFinalResult);
+	stream.WriteInt32L(iDialogNumber);
+	stream.CommitL();
+	CleanupStack::PopAndDestroy(); // stream
+	}
+
+void CPinPluginTestActive::ReadOutputDetailsL(TInt& aDialogNumber, TPinValue& aPinValue, TPinPluginInfoMessage& aDisplayedMsg)
+	{
+	RFileReadStream stream;
+	User::LeaveIfError(stream.Open(iFs, KOutputFile, EFileRead | EFileShareExclusive));
+	stream.PushL();
+
+	MStreamBuf* streamBuf = stream.Source();
+	TPinValue pinvalue;
+	TInt pinValueSize;
+	
+	aDialogNumber = stream.ReadInt32L();
+	
+	pinValueSize = stream.ReadInt32L();
+	HBufC8* pinValueBuf = HBufC8::NewMaxLC(pinValueSize);
+	TPtr8 pinValuePtr(pinValueBuf->Des());
+	stream.ReadL(pinValuePtr, pinValueSize);
+	aPinValue.Copy(pinValuePtr);
+	CleanupStack::PopAndDestroy(1, pinValueBuf);	
+
+	aDisplayedMsg = static_cast<TPinPluginInfoMessage>(stream.ReadInt32L());
+	
+	CleanupStack::PopAndDestroy(&stream); 
+	}
+	
+void CPinPluginTestActive::DeleteFileL()
+	{
+	CFileMan* fileMan = CFileMan::NewL(iFs);
+	CleanupStack::PushL(fileMan);
+	TInt err = fileMan->Delete(KInputFile);
+	if ( err != KErrNotFound && err != KErrNone )
+		{
+		User::LeaveIfError(err);
+		}
+	err = fileMan->Delete(KOutputFile);
+	if (err != KErrNotFound && err != KErrNone )
+		{
+		User::LeaveIfError(err);
+		}
+	CleanupStack::PopAndDestroy(fileMan);	
+	}
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/tpinplugin/tpinpluginteststep.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,276 @@
+/*
+* Copyright (c) 2006-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 "tpinpluginteststep.h"
+#include <test/testexecutelog.h>
+#include <s32file.h>
+
+_LIT(KProperties,   		"Property");
+_LIT(KDefaultData,			"DefaultData");
+_LIT(KIdentify,				"Identify");
+_LIT(KTrain,   				"Train");
+_LIT(KReTrain,   			"ReTrain");
+_LIT(KForget,   			"Forget");
+_LIT(KSequence,   			"Sequence");
+_LIT(KOom,   				"Oom");
+
+_LIT(KInputFile, 	"C:\\t_pinplugindlg_in.dat");
+_LIT(KOutputFile, "C:\\t_pinplugindlg_out.dat");
+
+using namespace AuthServer;
+
+CPinPluginTestStep::~CPinPluginTestStep()
+	{
+	}
+
+CPinPluginTestStep::CPinPluginTestStep()
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KPinPluginTestStep);
+	}
+
+TVerdict CPinPluginTestStep::doTestStepPreambleL()
+	{
+	// get step parameters
+	if (!GetStringFromConfig(ConfigSection(), _L("pinprocesstype"), iPinProcessType))
+		{
+		ERR_PRINTF1(_L("Requested Pin Process Type is missing"));
+		SetTestStepResult(EFail);
+		}
+	else
+		{
+		if (iPinProcessType.CompareF(KProperties) != 0 
+			&& iPinProcessType.CompareF(KOom) != 0)
+			{
+			TInt id  = 0;
+			if (!GetIntFromConfig(ConfigSection(), _L("identityid"), id))
+				{
+				ERR_PRINTF1(_L("Identity Id Value is missing"));
+				SetTestStepResult(EFail);	
+				}
+			else
+				{
+				iIdentityId = TIdentityId(id);
+				SetTestStepResult(EPass);
+				INFO_PRINTF3(_L("\"%S\" the Identity '%d' using PinPlugin System"), &iPinProcessType, id/*iIdentityId*/);
+				}
+			}
+		}
+	return TestStepResult();
+	}
+
+TVerdict CPinPluginTestStep::doTestStepL()
+	{
+	if (TestStepResult() != EPass)
+		{
+		return TestStepResult();
+		}
+
+	CActiveScheduler* sched = NULL;
+	sched = new (ELeave) CActiveScheduler;
+	CleanupStack::PushL(sched);
+	CActiveScheduler::Install(sched);	
+	CPinPluginTestActive* activeObj = CPinPluginTestActive::NewL(Logger(), iIdentityId, iPinProcessType, *this);
+	CleanupStack::PushL(activeObj);
+	
+	if (iPinProcessType.CompareF(KProperties) == 0)
+		{
+		iVerdict = activeObj->DoTestPropertyL();
+		INFO_PRINTF1(activeObj->iLogInfo);
+		}
+	else if (iPinProcessType.CompareF(KDefaultData) == 0)
+		{
+		iVerdict = activeObj->DoTestDefaultDataL();
+		INFO_PRINTF1(activeObj->iLogInfo);
+		}
+	else if (iPinProcessType.CompareF(KIdentify) == 0)
+		{
+		iVerdict = activeObj->DoTestIdentifyL();
+		INFO_PRINTF1(activeObj->iLogInfo);
+		}
+	else if (iPinProcessType.CompareF(KTrain) == 0)
+		{
+		iVerdict = activeObj->DoTestTrainL();
+		INFO_PRINTF1(activeObj->iLogInfo);
+		}
+	else if (iPinProcessType.CompareF(KReTrain) == 0)
+		{
+		iVerdict = activeObj->DoTestReTrainL();
+		INFO_PRINTF1(activeObj->iLogInfo);
+		}
+	else if (iPinProcessType.CompareF(KForget) == 0)
+		{
+		iVerdict = activeObj->DoTestForgetL();
+		INFO_PRINTF1(activeObj->iLogInfo);
+		}
+	else if (iPinProcessType.CompareF(KTrainServerCancel) == 0
+			|| (iPinProcessType.CompareF(KReTrainServerCancel) == 0)
+			|| (iPinProcessType.CompareF(KIdentifyServerCancel) == 0))
+		{
+		iVerdict = activeObj->DoTestServerCancelL();
+		INFO_PRINTF1(activeObj->iLogInfo);
+		}
+	else if (iPinProcessType.CompareF(KSequence) == 0)
+		{
+		iVerdict = activeObj->DoTestSequenceL();
+		INFO_PRINTF1(activeObj->iLogInfo);
+		}
+	else if (iPinProcessType.CompareF(KOom) == 0)
+		{
+		iVerdict = activeObj->DoTestOomL();
+		INFO_PRINTF1(activeObj->iLogInfo);
+		}
+	CleanupStack::PopAndDestroy(2, sched);
+	SetTestStepResult(iVerdict);
+	return TestStepResult();
+	}
+
+TVerdict CPinPluginTestStep::doTestStepPostambleL()
+	{
+	CActiveScheduler::Install(NULL);
+	return TestStepResult();
+	}
+
+CCreateFile::~CCreateFile()
+	{}
+
+CCreateFile::CCreateFile()
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KCreateInputFile);
+	}
+
+TVerdict CCreateFile::doTestStepPreambleL()
+	{
+	TPtrC pinProcessType;
+	// get step parameters
+	if (!GetStringFromConfig(ConfigSection(), _L("pinprocesstype"), pinProcessType))
+		{
+		ERR_PRINTF1(_L("Index not present"));
+		SetTestStepResult(EFail);
+		}
+	else
+		{
+		if (pinProcessType.CompareF(KTrain) == 0)
+			{
+			iOperation = EPinPluginTraining;
+			}
+		else if (pinProcessType.CompareF(KIdentify) == 0)
+			{
+			iOperation = EPinPluginIdentify;
+			}
+		}
+	TPtrC pinValue;
+	if (GetStringFromConfig(ConfigSection(), _L("pinvalue"), pinValue))
+		{
+		if(pinValue == _L("readoutput"))
+			{
+			iPinValue = GetPinFromOutputFileL();
+			}
+		else
+			{
+			iPinValue.Copy(pinValue);
+			}
+		}
+	
+	if (!GetIntFromConfig(ConfigSection(), _L("selectedindex"), iIndex))
+		{
+		ERR_PRINTF1(_L("Index not present"));
+		SetTestStepResult(EFail);
+		}
+	if (!GetIntFromConfig(ConfigSection(), _L("newpinlength"), iNewPinLength))
+		{
+		ERR_PRINTF1(_L("new pin length missing"));
+		SetTestStepResult(EFail);	
+		}
+	if (!GetIntFromConfig(ConfigSection(), _L("outputatdialog"), iDialogNumber))
+		{
+		ERR_PRINTF1(_L("dialog number missing"));
+		SetTestStepResult(EFail);	
+		}
+	
+	return TestStepResult();
+	}
+
+TVerdict CCreateFile::doTestStepL()
+	{
+	if (TestStepResult() != EPass)
+		{
+		return TestStepResult();
+		}
+	
+	RFileWriteStream stream;
+	RFs fs;
+	User::LeaveIfError(fs.Connect());
+	TInt err = stream.Replace(fs, KInputFile, EFileWrite | EFileShareExclusive);
+	User::LeaveIfError(err);
+	stream.PushL();
+	
+	MStreamBuf* streamBuf = stream.Sink();
+	streamBuf->SeekL(MStreamBuf::EWrite, EStreamEnd);
+	stream.WriteInt32L(iOperation);
+	stream.WriteInt32L(iPinValue.Length());
+	stream.WriteL(iPinValue);
+	stream.WriteInt32L(iIndex);
+	stream.WriteInt32L(iNewPinLength);
+	TPinPluginDialogResult cmdResult = EOk;
+	stream.WriteInt32L(cmdResult);
+	iOperation = EPinPluginInfo;
+	stream.WriteInt32L(iOperation);
+	TPinPluginDialogResult cmdFinalResult = EOk;
+	stream.WriteInt32L(cmdFinalResult);
+	stream.WriteInt32L(iDialogNumber);
+	stream.CommitL();
+	CleanupStack::PopAndDestroy(); // stream
+	
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TPinValue CCreateFile::GetPinFromOutputFileL()
+	{
+	RFileReadStream stream;
+	RFs fs;
+	User::LeaveIfError(fs.Connect());
+	User::LeaveIfError(stream.Open(fs, KOutputFile, EFileRead | EFileShareExclusive));
+	stream.PushL();
+
+	TPinValue pinvalue;
+	
+	stream.ReadInt32L();
+	TInt pinValueLength = stream.ReadInt32L();
+	HBufC8* pinValueBuf = HBufC8::NewMaxLC(pinValueLength);
+	TPtr8 pinValuePtr(pinValueBuf->Des());
+	stream.ReadL(pinValuePtr, pinValueLength);
+	pinvalue.Copy(pinValuePtr);
+	
+	CleanupStack::PopAndDestroy(2, &stream);	
+
+	return pinvalue;
+	}
+
+TVerdict CCreateFile::doTestStepPostambleL()
+	{
+	CActiveScheduler::Install(NULL);
+	return TestStepResult();
+	}
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/tpinplugin/tpinpluginteststep.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,187 @@
+/*
+* Copyright (c) 2006-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: 
+*
+*/
+
+
+#ifndef TPINPLUGINTESTSTEP_H
+#define TPINPLUGINTESTSTEP_H
+
+#include <test/TestExecuteStepBase.h>
+#include <authserver/authtypes.h>
+#include <pinplugindialogdefs.h>
+#include <authserver/authplugininterface.h>
+#include "pinplugin.h"
+
+class CPinPluginTestStep : public CTestStep
+	{
+public:
+	/** Constructor */
+	CPinPluginTestStep();
+
+	/** Destructor */
+	~CPinPluginTestStep();
+	
+	/**	
+	 Override of base class virtual
+ 	 @return - TVerdict code
+  	 */
+	virtual TVerdict doTestStepPreambleL();
+
+	/**
+ 	 Override of base class virtual
+ 	 @return - TVerdict code
+ 	 */
+	virtual TVerdict doTestStepPostambleL();
+
+	/**
+	 Override of base class pure virtual
+ 	 Demonstrates reading configuration parameters fom an ini file section
+ 	 @return - TVerdict code
+ 	 */
+	virtual TVerdict doTestStepL();
+
+private:
+	TVerdict iVerdict;
+	TPtrC iPinProcessType;
+	AuthServer::TIdentityId iIdentityId;
+	};
+
+class CPinPluginTestActive : public CActive
+	{
+public:
+	static CPinPluginTestActive* NewL(CTestExecuteLogger& aLogger, AuthServer::TIdentityId& aIdentityId, TPtrC& aPinProcessType, CPinPluginTestStep &aTestStep);
+	/** Destructor */
+	~CPinPluginTestActive();
+
+	TVerdict DoTestPropertyL();
+	TVerdict DoTestDefaultDataL();	
+	TVerdict DoTestIdentifyL();
+	TVerdict DoTestTrainL();
+	TVerdict DoTestForgetL();
+	TVerdict DoTestReTrainL();
+	TVerdict DoTestServerCancelL();
+	TVerdict DoTestSequenceL();
+	TVerdict DoTestOomL();	
+		
+	//Active
+	void DoCancel();
+	void RunL();
+	CTestExecuteLogger& Logger(){return iLogger;}
+	//Log buffer
+	TBuf<150> iLogInfo;
+   	CTestExecuteLogger& iLogger;
+
+private:
+	/** Constructor */
+	CPinPluginTestActive(CTestExecuteLogger& aLogger, AuthServer::TIdentityId& aIdentityId, TPtrC& aPinProcessType, CPinPluginTestStep &aTestStep);
+	void ContructL();
+	
+private:
+	void WriteOutputDetailsL();
+	void ReadOutputDetailsL(TInt& aDialogNumber, TPinValue& aPinValue, TPinPluginInfoMessage& aDisplayedMsg);
+	TBool ReadDetailsFromIni(CPinPluginTestStep& aStep);
+	void DeleteFileL();
+	TBool VerifyResultL(TInt aOutputVal);
+	TBool CheckResultL(TInt aResult);
+	TBool TrainIdentifyL();
+	TBool ForgetIdentifyL();
+	TBool DoTrainL(HBufC8*& aResult);
+	TBool DoIdentifyL(HBufC8*& aResult);
+	TBool DoForgetL();
+	CPinPlugin* LoadPluginL();
+	void UnLoadPlugin();
+	TVerdict ReturnResultL(TBool aRes);
+	void PreferDialogInputL(const TDesC& aExpectedOutput, TPinPluginDialogOperation aOp, 
+		TInt aDialogNo);
+private:
+	
+	static TInt KAuthenticationServerStackSize;
+	static TInt KAuthenticationServerInitHeapSize;
+	static TInt KAuthenticationServerMaxHeapSize;
+		
+  	AuthServer::CAuthPluginInterface* iPinPlugin;
+   	RFs iFs;
+	TPinPluginDialogOperation iOperation;
+	TInt iIndex;
+	TInt iNewPinLength;
+	TPinValue iPinValue;
+	TPinValue iTempPinValue;
+	TPtrC iExpectedOutput;
+	TPinPluginDialogResult iCmdResult,iCmdFinalResult;
+	TPinPluginInfoMessage iInfoMsg;
+	TInt iDialogNumber;
+	AuthServer::TIdentityId iIdentityId;
+	TPtrC iPinProcessType;	
+	TInt iOomTest;
+	HBufC* iClientMessage;
+    CPinPluginTestStep &iTestStep;
+	TUid iDtor_ID_Key;
+	};
+
+class CCreateFile : public CTestStep
+	{
+public:
+	/** Constructor */
+	CCreateFile();
+
+	/** Destructor */
+	~CCreateFile();
+	
+	/**	
+	 Override of base class virtual
+ 	 @return - TVerdict code
+  	 */
+	virtual TVerdict doTestStepPreambleL();
+
+	/**
+ 	 Override of base class virtual
+ 	 @return - TVerdict code
+ 	 */
+	virtual TVerdict doTestStepPostambleL();
+
+	/**
+	 Override of base class pure virtual
+ 	 Demonstrates reading configuration parameters fom an ini file section
+ 	 @return - TVerdict code
+ 	 */
+	virtual TVerdict doTestStepL();
+
+private:
+	TPinValue GetPinFromOutputFileL();
+
+private:
+	TPinPluginDialogOperation iOperation;
+	TPinValue iPinValue;
+	TInt iIndex;
+	TInt iNewPinLength;
+	TPinPluginDialogResult iCmdResult;
+	TPinPluginDialogResult iCmdFinalResult;
+	TInt iDialogNumber;
+	
+	};
+
+// Strings for the server create test step code
+_LIT(KPinPluginTestStep,	"tPinPluginTestStep");
+_LIT(KCreateInputFile,	"CreateInputFile");
+
+_LIT(KTrainServerCancel,  	"TrainServerCancel");
+_LIT(KReTrainServerCancel,  "ReTrainServerCancel");
+_LIT(KIdentifyServerCancel, "IdentifyServerCancel");
+
+
+#endif /* TPINPLUGINTESTSTEP_H */
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/tpinplugindlg/tpinplugindlg.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,404 @@
+/*
+* Copyright (c) 2006-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: 
+* Pinplugindlg.cpp
+*
+*/
+
+
+#include "tpinplugindlg.h"
+#include <s32file.h>
+
+const TInt KErrInvalidPinLength			= -1002;
+_LIT(KPinPluginDailogPanicString,"CTestPinPluginDlgNotifier");
+
+// Lib main entry point.
+
+#ifdef _T_PINPLUGINDLG_TEXTSHELL
+EXPORT_C CArrayPtr<MNotifierBase2>* NotifierArray()
+#else
+CArrayPtr<MNotifierBase2>* NotifierArray()
+#endif
+	{
+	CArrayPtrFlat<MNotifierBase2>* subjects = NULL;
+	CTestPinPluginDlgNotifier* notifier;
+	TRAPD(err,
+		subjects = new (ELeave) CArrayPtrFlat<MNotifierBase2>(1);
+		CleanupStack::PushL(subjects);
+		notifier = CTestPinPluginDlgNotifier::NewL();
+		CleanupStack::PushL(notifier);
+		subjects->AppendL(notifier);
+		CleanupStack::Pop(2,subjects));	//notifier, subjects
+	if (err != KErrNone)
+		{
+		subjects = NULL;
+		}
+	return subjects;
+	}
+
+// Ecom plugin implementation for UI notifier
+
+#ifndef _T_PINPLUGINDLG_TEXTSHELL
+
+const TImplementationProxy ImplementationTable[] =
+	{
+	IMPLEMENTATION_PROXY_ENTRY(KTPinPluginDlgNotiferUid, NotifierArray)
+	};
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+	{
+	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+	return (ImplementationTable);
+	}
+
+#endif
+
+// TInputDetails
+//
+
+TInputDetails::TInputDetails(TPinPluginDialogOperation aOp, TInt aIndex, TInt aNewPinLength, TPinPluginDialogResult aCommandOutput) :
+	iOp(aOp), iPinValue(0), iIndex(aIndex), iNewPinLength(aNewPinLength), iCommandOutput(aCommandOutput)
+	{
+	}
+
+TInputDetails::TInputDetails(TPinPluginDialogOperation aOp, TPinValue& aPinValue, TPinPluginDialogResult aCommandOutput) :
+	iOp(aOp), iPinValue(aPinValue), iCommandOutput(aCommandOutput)
+	{
+	}
+
+
+// CTestPinPluginDlgNotifier
+//
+
+_LIT(KInputFile, "C:\\t_pinplugindlg_in.dat");
+_LIT(KOutputFile, "C:\\t_pinplugindlg_out.dat");
+
+CTestPinPluginDlgNotifier* CTestPinPluginDlgNotifier::NewL()
+	{
+	CTestPinPluginDlgNotifier* self=new (ELeave) CTestPinPluginDlgNotifier();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CTestPinPluginDlgNotifier::CTestPinPluginDlgNotifier()
+	{
+	iInfo.iUid = KUidPinPluginDialogNotifier;
+	iInfo.iChannel = TUid::Uid(0x00001200); // test uid
+	iInfo.iPriority = ENotifierPriorityHigh;
+	}
+
+void CTestPinPluginDlgNotifier::ConstructL()
+	{
+	User::LeaveIfError(iFs.Connect());
+	}
+
+TInt CTestPinPluginDlgNotifier::ReadDialogCountL()
+	{
+	RFileReadStream stream;
+	TInt err = stream.Open(iFs, KOutputFile, EFileRead | EFileShareExclusive);
+	// If the file doesn't exist yet just return zero
+	if (err == KErrNotFound)
+		{
+		return 0;
+		}
+	User::LeaveIfError(err);
+	stream.PushL();
+	TInt dialogCount = stream.ReadInt32L();
+	CleanupStack::PopAndDestroy(&stream); 
+	return dialogCount;
+	}
+
+TPinValue CTestPinPluginDlgNotifier::ReadPinValueL()
+	{
+	TPinValue pinValue;
+	RFileReadStream stream;
+	TInt err = stream.Open(iFs, KOutputFile, EFileRead | EFileShareExclusive);
+	// If the file doesn't exist yet just return zero
+	if (err == KErrNotFound)
+		{
+		pinValue.Copy(_L("0"));
+		return pinValue;
+		}
+	User::LeaveIfError(err);
+	stream.PushL();
+	stream.ReadInt32L();
+	TInt pinValueSize = stream.ReadInt32L();
+	HBufC8* pinValueBuf = HBufC8::NewMaxLC(pinValueSize);
+	TPtr8 pinValuePtr(pinValueBuf->Des());
+	stream.ReadL(pinValuePtr, pinValueSize);
+	pinValue.Copy(pinValuePtr);
+	CleanupStack::PopAndDestroy(2, &stream);	
+	return pinValue;
+	}
+	
+void CTestPinPluginDlgNotifier::WriteDialogCountL(TInt aCount)
+	{
+	RFileWriteStream stream;
+	TInt err = stream.Replace(iFs, KOutputFile, EFileWrite | EFileShareExclusive);
+	if (err == KErrNotFound)
+		{
+		err = stream.Create(iFs, KOutputFile, EFileWrite | EFileShareExclusive);
+		}
+	User::LeaveIfError(err);
+	stream.PushL();
+	stream.WriteInt32L(aCount);
+	stream.CommitL();
+	CleanupStack::PopAndDestroy(&stream); 
+	}
+
+void CTestPinPluginDlgNotifier::WritePinL(const TPinValue& aPinValue)
+	{
+	TInt dialogCount = ReadDialogCountL();
+
+	RFileWriteStream stream;
+	TInt err = stream.Replace(iFs, KOutputFile, EFileWrite | EFileShareExclusive);
+	if (err == KErrNotFound)
+		{
+		err = stream.Create(iFs, KOutputFile, EFileWrite | EFileShareExclusive);
+		}
+	User::LeaveIfError(err);
+	stream.PushL();
+	stream.WriteInt32L(dialogCount);
+	stream.WriteInt32L(aPinValue.Length());
+	stream.WriteL(aPinValue);
+	stream.CommitL();
+	CleanupStack::PopAndDestroy(&stream); 
+	}
+	
+void CTestPinPluginDlgNotifier::WriteMsgL(const TPinPluginInfoMessage& aMessage)
+	{
+	TInt dialogCount = ReadDialogCountL();
+	TPinValue pinValue = ReadPinValueL();
+	
+	RFileWriteStream stream;
+	TInt err = stream.Replace(iFs, KOutputFile, EFileWrite | EFileShareExclusive);
+	if (err == KErrNotFound)
+		{
+		err = stream.Create(iFs, KOutputFile, EFileWrite | EFileShareExclusive);
+		}
+	User::LeaveIfError(err);
+	stream.PushL();
+	stream.WriteInt32L(dialogCount);
+	stream.WriteInt32L(pinValue.Length());
+	stream.WriteL(pinValue);
+	stream.WriteInt32L(aMessage);
+	stream.CommitL();
+	CleanupStack::PopAndDestroy(&stream); 
+	}
+	
+TInputDetails* CTestPinPluginDlgNotifier::ReadInputDetailsL(TUint aOperation)
+	{
+	RFileReadStream stream;
+	User::LeaveIfError(stream.Open(iFs, KInputFile, EFileRead | EFileShareExclusive));
+	stream.PushL();
+
+	TPinValue pinvalue;
+	TInt index, newLength,dialogNumber;
+	TInt pinValueSize;
+
+	TPinPluginDialogOperation op = static_cast<TPinPluginDialogOperation>(stream.ReadInt32L());
+	
+	pinValueSize = stream.ReadInt32L();
+	HBufC8* pinValueBuf = HBufC8::NewMaxLC(pinValueSize);
+	TPtr8 pinValuePtr(pinValueBuf->Des());
+	stream.ReadL(pinValuePtr, pinValueSize);
+	pinvalue.Copy(pinValuePtr);
+	
+	index = stream.ReadInt32L();
+	if (index < 0 && index > 3)
+		{
+		index = 0;
+		}
+	newLength = stream.ReadInt32L();
+	
+	TPinPluginDialogResult outputCommand = static_cast<TPinPluginDialogResult>(stream.ReadInt32L());
+	TPinPluginDialogOperation op1 = static_cast<TPinPluginDialogOperation>(stream.ReadInt32L());
+	TPinPluginDialogResult finalOutputCommand = static_cast<TPinPluginDialogResult>(stream.ReadInt32L());
+	dialogNumber = stream.ReadInt32L();
+	if (op != aOperation)
+		{
+		op = op1;
+		}
+	else
+		{
+		// Update dialog count here so test code can see how many dialogs were
+		// requested if there were more than expected
+		TInt dialogCount = ReadDialogCountL() + 1;
+		WriteDialogCountL(dialogCount);
+		if (dialogNumber == dialogCount)
+			{
+			outputCommand = finalOutputCommand;
+			}
+		}
+	
+	TInputDetails* inputDetail = NULL;
+	if (op == EPinPluginTraining)
+		{
+		inputDetail = new (ELeave) TInputDetails(op, index, newLength, outputCommand);
+		}
+	else if (op == EPinPluginIdentify) 
+		{
+		inputDetail = new (ELeave) TInputDetails(op, pinvalue, outputCommand);
+		}
+	CleanupStack::PopAndDestroy(1, pinValueBuf);	
+	CleanupStack::PopAndDestroy(&stream); 
+
+	return inputDetail;
+	}
+
+
+void CTestPinPluginDlgNotifier::DoSelectPinL(const TInputDetails& aDetail, const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage)
+	{
+	const TPinTrainingInput& input = reinterpret_cast<const TPinTrainingInput&>(*aBuffer.Ptr());
+
+	TPinDialogOutput output;
+	output.iIndex = aDetail.Index();
+	TInt pinLength = aDetail.NewPinLength();
+	if (pinLength == 0)
+		{
+		output.iNewPinLength = input.iCurrentPinLength;
+		}
+	else
+		{
+		output.iNewPinLength = pinLength;
+		}
+	output.iResult = aDetail.CommandOutput();
+	
+	TPinValue pinValue;
+	switch(output.iIndex)
+		{
+		case 0:
+			pinValue = input.iPinValue1;
+			break; 
+		case 1:
+			pinValue = input.iPinValue2;
+			break; 
+		case 2:
+			pinValue = input.iPinValue3;
+			break; 
+		case 3:
+			pinValue = input.iPinValue4;
+			break; 
+		}
+	WritePinL(pinValue);
+	TPinDialogOutputBuf outputBuf(output);
+	aMessage.WriteL(aReplySlot, outputBuf);
+	}
+
+void CTestPinPluginDlgNotifier::DoIdentifyPinL(const TInputDetails& aDetail, const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage)
+	{
+	const TPinIdentifyInput& input = reinterpret_cast<const TPinIdentifyInput&>(*aBuffer.Ptr());
+
+	TPinDialogOutput output;
+	const TPinValue& pinInput = reinterpret_cast<const TPinValue&>(aDetail.PinValue());
+	TInt pinLength = pinInput.Length();
+	if (pinLength >= input.iMinLength && pinLength <= input.iMaxLength)
+		{
+		output.iPinValue = pinInput;
+		}
+	else
+		{
+		User::Leave(KErrInvalidPinLength);	
+		}
+	
+	WritePinL(pinInput);
+	output.iResult = aDetail.CommandOutput();
+	TPinDialogOutputBuf outputBuf(output);
+	aMessage.WriteL(aReplySlot, outputBuf);
+	}
+
+void CTestPinPluginDlgNotifier::DoInfoPinL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage)
+	{
+	const TPinInfoInput& input = reinterpret_cast<const TPinInfoInput&>(*aBuffer.Ptr());
+	WriteMsgL(input.iMessage);
+	
+	TPinDialogOutput output;
+	TPinDialogOutputBuf outputBuf(output);
+	aMessage.WriteL(aReplySlot, outputBuf);
+	}
+
+void CTestPinPluginDlgNotifier::Release()
+	{
+	delete this;
+	}
+
+CTestPinPluginDlgNotifier::TNotifierInfo CTestPinPluginDlgNotifier::RegisterL()
+	{
+	return iInfo;
+	}
+
+CTestPinPluginDlgNotifier::TNotifierInfo CTestPinPluginDlgNotifier::Info() const
+	{
+	return iInfo;
+	}
+
+void CTestPinPluginDlgNotifier::StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage)
+	{
+	TRAPD(err, DoStartL(aBuffer, aReplySlot, aMessage));
+	aMessage.Complete(err);
+	}
+	
+void CTestPinPluginDlgNotifier::DoStartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage)
+	{
+	TUint operation = *reinterpret_cast<const TInt *>(aBuffer.Ptr()) & KPinPluginDialogOperationMask;
+	
+	TInputDetails* detail = NULL;
+
+	TRAPD(err, detail = ReadInputDetailsL(operation));
+	
+	User::LeaveIfError(err);
+
+	CleanupStack::PushL(detail);
+	
+	switch (operation)
+		{
+		case EPinPluginTraining:
+			DoSelectPinL(*detail, aBuffer, aReplySlot, aMessage);
+			break;
+
+		case EPinPluginIdentify:
+			DoIdentifyPinL(*detail, aBuffer, aReplySlot, aMessage);
+			break;
+		case EPinPluginInfo:
+			DoInfoPinL(aBuffer, aReplySlot, aMessage);
+			break;
+		default:
+			User::Panic(_L("CTestPinPluginDlgNotifier"), 0);
+		}
+	CleanupStack::PopAndDestroy(detail);
+	}
+
+TPtrC8 CTestPinPluginDlgNotifier::StartL( const TDesC8& /*aBuffer*/ )
+	{
+	User::Panic(_L("CTestPinPluginDlgNotifier"), 0);
+	return TPtrC8(KNullDesC8);
+	}
+
+void CTestPinPluginDlgNotifier::Cancel()
+	{
+	// Don't think there is much we can do here. If a client deletes the
+	// client-side pinplugin dialog instance, after calling a method that 
+	// displays a dialog, this will not get called until the user dismisses
+	// the dialog. We can't do anything then.
+	}
+
+TPtrC8 CTestPinPluginDlgNotifier::UpdateL( const TDesC8& /*aBuffer*/ )
+	{
+	User::Panic(KPinPluginDailogPanicString, 0);
+	return NULL;
+	}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/reftestplugin/tpinplugindlg/tpinplugindlg.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,161 @@
+/*
+* Copyright (c) 2006-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: 
+*
+*/
+
+
+#ifndef __TPINPLUGINDLG_H__
+#define __TPINPLUGINDLG_H__
+
+#include <e32base.h>
+#include <pinplugindialogdefs.h>
+
+const TUint KTPinPluginDlgNotiferUid = 0x200032E7;
+
+#ifdef _T_PINPLUGINDLG_TEXTSHELL
+
+#include <twintnotifier.h>
+
+/** Method at ordinal 1 to get a list of notifiers from this dll. */
+IMPORT_C CArrayPtr<MNotifierBase2>* NotifierArray();
+
+#else
+
+#include <eiknotapi.h>
+#include <ecom/ImplementationProxy.h>
+#define MNotifierBase2 MEikSrvNotifierBase2
+
+IMPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount);
+CArrayPtr<MNotifierBase2>* NotifierArray();
+
+#endif
+
+/**
+ It reads the Input datas from t_pinplugindlg_in.dat and constructs
+ TInputDetails to use in CTestPinPluginDlgNotifier.
+ */
+class TInputDetails
+	{
+ public:
+ 	/**
+ 	 Constructs the object while the request is Train/ReTrain.
+ 	 */
+	TInputDetails(TPinPluginDialogOperation aOp, TInt aIndex, TInt aNewPinLength, TPinPluginDialogResult aCommandOutput);
+	/**
+ 	 Constructs the object while the request is Identify.
+ 	 */
+	TInputDetails(TPinPluginDialogOperation aOp, TPinValue& aPinValue, TPinPluginDialogResult aCommandOutput);
+	/** Returns the current process Dialog Notification Operation */
+	TPinPluginDialogNotification Operation() const { return iOp; }
+	/** Returns the current process Pin Value Selected/Entered. */
+	const TPinValue& PinValue() const { return iPinValue; }
+	/** Returns the current process selected index. */
+	TInt Index() const { return iIndex; }
+	/** Returns the current process New pin Length given. */
+	TInt NewPinLength() const { return iNewPinLength; }
+	/** Returns the current process Dialog output. */
+	TPinPluginDialogResult CommandOutput() const { return iCommandOutput; }
+ private:
+	TPinPluginDialogNotification iOp;
+	TPinValue iPinValue;
+	TInt iIndex;
+	TInt iNewPinLength;
+	TPinPluginDialogResult iCommandOutput;
+	TPinPluginInfoMessage iExpectedMsg;
+	};
+
+/**
+ This is a test implementation of the pinplugin dialog notifier. This version
+ responds to dialogs with data read from c:\t_pinplugindlg_in.dat. This contains
+ the expected input for the dialog. It keeps a number of dialog displayed
+ and pin selected for the Train/ReTrain or pin given in Identify Dialog and
+ displayed info message in c:\t_pinplugindlg_out.dat.
+ */
+class CTestPinPluginDlgNotifier : public CBase, public MNotifierBase2
+	{
+public:
+	static CTestPinPluginDlgNotifier* NewL();
+
+private:
+	void ConstructL();
+	CTestPinPluginDlgNotifier();
+
+	/**
+	 Read the Number of Dialog displayed already from t_pinplugindlg_out.dat.
+	 */
+	TInt ReadDialogCountL();
+	/**
+	 Read the PinValue Selected/Entered in the last dialog request from
+	 t_pinplugindlg_out.dat.
+	 */
+	TPinValue ReadPinValueL();
+	/**
+	 Write the dialog count to the output file t_pinplugindlg_out.dat.
+	 
+	 @param aCount		The Count of the Current Dialog.
+	 */
+	void WriteDialogCountL(TInt aCount);
+	/**
+	 Write the PinValue to the output file t_pinplugindlg_out.dat.
+
+ 	 @param aPinValue		The pinvalue to be write.
+	 */
+	void WritePinL(const TPinValue& aPinValue);
+	/**
+	 Write the info message to the output file t_pinplugindlg_out.dat.
+	 
+	 @param aMessage		The message to be write.
+	 */
+	void WriteMsgL(const TPinPluginInfoMessage& aMessage);
+	
+	/**
+	 Read an input specification.
+	 
+	 @param aOperation		Consturct the InputDetails for the aOperation.
+	 */
+	TInputDetails* ReadInputDetailsL(TUint aOperation);
+	
+	/**
+	 Construct the output Details from aDetail and complete the RMessagePtr2
+	 with the details.
+	 
+	 @param aDetail		The input Details read from .dat file for this dialog
+	 @param aBuffer		Data that can be passed from the client-side.
+	 @param aReplySlot	Identifies which message argument to use for the reply.
+	 @param aMessage	Encapsulates a client request.
+	 */
+	void DoSelectPinL(const TInputDetails& aDetail, const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+	void DoIdentifyPinL(const TInputDetails& aDetail, const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+	void DoInfoPinL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+public: 		// from MEikSrvNotifierBase2
+	void DoStartL( const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage );
+
+private:     	// from MEikSrvNotifierBase2
+	void Release();
+	TNotifierInfo RegisterL();
+	TNotifierInfo Info() const;
+	
+	virtual void StartL( const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage );
+	virtual TPtrC8 StartL( const TDesC8& aBuffer );
+	
+	void Cancel();
+	TPtrC8 UpdateL( const TDesC8& aBuffer );
+
+private:
+	RFs iFs;
+	TNotifierInfo iInfo;
+	};
+
+#endif // __TPINPLUGINDLG_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/securitytests/bwins/authsecuritytestsU.def	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,3 @@
+EXPORTS
+	?CapabilityTestFactory@@YAPAVMCapabilityTestFactory@@XZ @ 1 NONAME ; class MCapabilityTestFactory * CapabilityTestFactory(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/securitytests/eabi/authsecuritytestsU.def	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,15 @@
+EXPORTS
+	_Z21CapabilityTestFactoryv @ 1 NONAME
+	_ZTI21CAuthTrustedUISecTest @ 2 NONAME
+	_ZTI24CAuthReadUserDataSecTest @ 3 NONAME
+	_ZTI25CAuthWriteUserDataSecTest @ 4 NONAME
+	_ZTI26CAuthReadDeviceDataSecTest @ 5 NONAME
+	_ZTI27CAuthWriteDeviceDataSecTest @ 6 NONAME
+	_ZTI33CAuthReadUserAndDeviceDataSecTest @ 7 NONAME
+	_ZTV21CAuthTrustedUISecTest @ 8 NONAME
+	_ZTV24CAuthReadUserDataSecTest @ 9 NONAME
+	_ZTV25CAuthWriteUserDataSecTest @ 10 NONAME
+	_ZTV26CAuthReadDeviceDataSecTest @ 11 NONAME
+	_ZTV27CAuthWriteDeviceDataSecTest @ 12 NONAME
+	_ZTV33CAuthReadUserAndDeviceDataSecTest @ 13 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/securitytests/group/authsecuritytests.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 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: 
+* authsecuritytests.dll Test harness for AuthServer security testing without the TCB capability
+*
+*/
+
+
+/**
+ @file
+*/
+
+// Capabilities are set by captestframework
+CAPABILITY All -TCB
+
+TARGET			authsecuritytests.dll
+TARGETTYPE		dll
+UID				0x101F7295 0x1082D53E
+VENDORID		0x70000001
+
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+SOURCEPATH		../source
+SOURCE			authsecuritytests.cpp
+SOURCE			authreaddevicedata.cpp
+SOURCE			authreaduserdata.cpp
+SOURCE			authwriteuserdata.cpp
+SOURCE			authwritedevicedata.cpp
+SOURCE			authtrustedui.cpp
+SOURCE			authreaduseranddevicedata.cpp
+
+USERINCLUDE		.
+USERINCLUDE		../inc
+USERINCLUDE		../../../../../cryptomgmtlibs/securitytestfw/test/captestframework
+
+
+LIBRARY			euser.lib efsrv.lib
+LIBRARY			captestframeworkutil.lib
+LIBRARY			authclient.lib authcommon.lib
+SMPSAFE
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/securitytests/inc/authreaddevicedata.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 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 "captestutility.h"
+
+class CAuthReadDeviceDataSecTest : public CDefaultCapabilityTest
+	{
+public:
+	static CAuthReadDeviceDataSecTest* NewL();
+	
+private:
+	CAuthReadDeviceDataSecTest();
+	
+	void RunTestL();
+
+	void ConstructL();
+	};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/securitytests/inc/authreaduseranddevicedata.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 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: 
+* authreaduseranddevicedata.cpp
+*
+*/
+
+
+#include "captestutility.h"
+
+class CAuthReadUserAndDeviceDataSecTest : public CDefaultCapabilityTest
+	{
+public:
+	static CAuthReadUserAndDeviceDataSecTest* NewL();
+	
+private:
+	CAuthReadUserAndDeviceDataSecTest();
+	
+	void RunTestL();
+
+	void ConstructL();
+	};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/securitytests/inc/authreaduserdata.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 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: 
+* authreaduserdata.cpp
+*
+*/
+
+
+#include "captestutility.h"
+
+class CAuthReadUserDataSecTest : public CDefaultCapabilityTest
+	{
+public:
+	static CAuthReadUserDataSecTest* NewL();
+
+private:
+	CAuthReadUserDataSecTest();
+	
+	void RunTestL();
+
+	void ConstructL();
+	};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/securitytests/inc/authtrustedui.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 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: 
+* authtrustedui.cpp
+*
+*/
+
+
+#include "captestutility.h"
+#include <authserver/authclient.h>
+#include <authserver/authmgrclient.h>
+#include <e32def.h>
+
+class CRegActive;
+
+class CAuthTrustedUISecTest : public CDefaultCapabilityTest
+	{
+public:
+	static CAuthTrustedUISecTest* NewL();
+	
+private:
+	CAuthTrustedUISecTest();
+	
+	void RunTestL();
+	
+	void DoTestL();
+
+	void ConstructL();
+	};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/securitytests/inc/authwritedevicedata.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 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: 
+* authwritedevicedata.cpp
+*
+*/
+
+
+
+#include "captestutility.h"
+
+class CAuthWriteDeviceDataSecTest : public CDefaultCapabilityTest
+	{
+public:
+	static CAuthWriteDeviceDataSecTest* NewL();
+	
+private:
+	CAuthWriteDeviceDataSecTest();
+	
+	void RunTestL();
+
+	void ConstructL();
+	};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/securitytests/inc/authwriteuserdata.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 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: 
+* authwriteuserdata.cpp
+*
+*/
+
+
+#include "captestutility.h"
+#include <authserver/authclient.h>
+#include <authserver/authmgrclient.h>
+
+class CAuthWriteUserDataSecTest : public CDefaultCapabilityTest
+	{
+public:
+	static CAuthWriteUserDataSecTest* NewL();
+	
+private:
+	CAuthWriteUserDataSecTest();
+	
+	void RunTestL();
+	
+	void DoTestL(AuthServer::RAuthMgrClient& authMgrClient);
+
+	void ConstructL();
+	};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/securitytests/scripts/authsecuritytests.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,3 @@
+[authsecuritytests]
+DllName=authsecuritytests.dll
+OmitTCBCapInComplementSet=True
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/securitytests/scripts/authsecuritytests.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,62 @@
+//
+// Copyright (c) 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: 
+//
+//
+// Copyright (c) 2009 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:
+//
+//! @file
+// Auth Security tests
+PRINT Run Auth Security tests
+
+// Prepare a clone of TAuthSvr to possess authserver's SID.
+// This is required for modifying the authserver's central repository file.
+// This clone must be deleted at the end of the test.
+
+RUN_PROGRAM 100 SETCAP tAuthSvr.exe 188b0 -SID 102740FC tAuthSvr_new.exe
+
+LOAD_SUITE captestframework
+LOAD_SUITE tAuthSvr_new
+
+// This test must be executed in order to set the default plugin, else authserver will never start.
+
+RUN_UTILS DeleteFile C:\pinplugin_inactive.txt
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr_new 	INIT_CENREP c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defaultplugin
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_in.dat
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_out.dat
+
+//! @SYMTestCaseID SEC-AUT-SecurityTests
+//! @SYMTestCaseDesc Runs the whole suite of security test cases for authserver. Both negative and positive tests are included.
+//! @SYMREQ REQ0000
+//! @SYMTestPriority Medium
+//! @SYMTestActions Tests IPC calls from different capabilities
+//! @SYMTestExpectedResults KErrPermissionDenied received on calls which should fail
+//! @SYMDevelopedForRelease Diran
+
+
+START_TESTCASE AuthSecTest
+RUN_TEST_STEP 100 captestframework RunThoroughCapabilityChecks c:\tauth\securitytests\scripts\authsecuritytests.ini authsecuritytests
+END_TESTCASE AuthSecTest
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/securitytests/source/authreaddevicedata.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 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: 
+* authreadedvicedata.cpp
+*
+*/
+
+
+
+#include "authreaddevicedata.h"
+
+#include <authserver/authclient.h>
+#include <authserver/authmgrclient.h>
+#include <e32def.h>
+
+_LIT(KAuthReadDeviceDataSecName, "Auth ReadDeviceData APIs test");
+
+using namespace AuthServer;
+
+CAuthReadDeviceDataSecTest* CAuthReadDeviceDataSecTest::NewL()
+	{
+	CAuthReadDeviceDataSecTest* self=new(ELeave) CAuthReadDeviceDataSecTest();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CAuthReadDeviceDataSecTest::CAuthReadDeviceDataSecTest()
+	{
+	SetCapabilityRequired(ECapabilityReadDeviceData);
+	}
+	
+void CAuthReadDeviceDataSecTest::ConstructL()
+	{
+	SetNameL(KAuthReadDeviceDataSecName);
+	}
+
+void CAuthReadDeviceDataSecTest::RunTestL()
+	{
+	AuthServer::RAuthMgrClient authMgrClient;	
+	User::LeaveIfError(authMgrClient.Connect());
+	CleanupClosePushL(authMgrClient);
+	
+	TInt err(0);
+	
+	AuthServer::RIdentityIdArray idList;
+	TRAP(err, authMgrClient.IdentitiesL(idList));
+	idList.Close();
+	CheckFailL(err, _L("AuthServer::IdentitiesL()."));
+	
+	CleanupStack::PopAndDestroy(&authMgrClient);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/securitytests/source/authreaduseranddevicedata.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 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 "authreaduseranddevicedata.h"
+
+#include <authserver/authclient.h>
+#include <authserver/authmgrclient.h>
+#include <e32def.h>
+
+_LIT(KAuthReadUserAndDeviceDataSecName, "Auth ReadUserAndDeviceDeviceData APIs test");
+
+using namespace AuthServer;
+
+CAuthReadUserAndDeviceDataSecTest* CAuthReadUserAndDeviceDataSecTest::NewL()
+	{
+	CAuthReadUserAndDeviceDataSecTest* self=new(ELeave) CAuthReadUserAndDeviceDataSecTest();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CAuthReadUserAndDeviceDataSecTest::CAuthReadUserAndDeviceDataSecTest()
+	{
+	SetCapabilityRequired(ECapabilityReadUserData);
+	SetCapabilityRequired(ECapabilityReadDeviceData);	
+	}
+	
+void CAuthReadUserAndDeviceDataSecTest::ConstructL()
+	{
+	SetNameL(KAuthReadUserAndDeviceDataSecName);
+	}
+
+void CAuthReadUserAndDeviceDataSecTest::RunTestL()
+	{
+	AuthServer::RAuthMgrClient authMgrClient;	
+	User::LeaveIfError(authMgrClient.Connect());
+	CleanupClosePushL(authMgrClient);
+
+	TInt err(0);
+	
+	RIdAndStringArray idWithString;
+	TRAP(err, authMgrClient.IdentitiesWithStringL(idWithString));
+	idWithString.Close();
+	CheckFailL(err, _L("AuthServer::IdentitiesWithStringL()."));
+	
+	CleanupStack::PopAndDestroy(&authMgrClient);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/securitytests/source/authreaduserdata.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,90 @@
+/*
+* Copyright (c) 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 "authreaduserdata.h"
+
+#include <authserver/authclient.h>
+#include <authserver/authmgrclient.h>
+#include <e32def.h>
+
+_LIT(KAuthReadUserDataSecName, "Auth ReadUserData APIs test");
+
+using namespace AuthServer;
+
+CAuthReadUserDataSecTest* CAuthReadUserDataSecTest::NewL()
+	{
+	CAuthReadUserDataSecTest* self=new(ELeave) CAuthReadUserDataSecTest();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CAuthReadUserDataSecTest::CAuthReadUserDataSecTest()
+	{
+	SetCapabilityRequired(ECapabilityReadUserData);
+	}
+	
+void CAuthReadUserDataSecTest::ConstructL()
+	{
+	SetNameL(KAuthReadUserDataSecName);
+	}
+
+void CAuthReadUserDataSecTest::RunTestL()
+	{
+	AuthServer::RAuthMgrClient authMgrClient;	
+	User::LeaveIfError(authMgrClient.Connect());
+	CleanupClosePushL(authMgrClient);
+
+	TInt err(0);
+	CAuthExpression* authExpr = AuthExpr(EAuthKnowledge);
+	CleanupStack::PushL(authExpr);
+	
+	TUid clientSid = {0};
+	
+	AuthServer::CIdentity* identity = NULL;
+	TRAP(err, identity = authMgrClient.AuthenticateL(*authExpr, 0, EFalse, clientSid, EFalse, KNullDesC()));
+	CheckFailL(err, _L("AuthServer::AuthenticateL : Client Specific Key set to false."));
+	
+	TRAP(err, identity = authMgrClient.AuthenticateL(*authExpr, 0, ETrue, clientSid, ETrue, KNullDesC()));
+	CheckFailL(err, _L("AuthServer::AuthenticateL : Identity String set to true"));
+	
+	clientSid.iUid = 12345678;	
+	TRAP(err, identity = authMgrClient.AuthenticateL(*authExpr, 0, ETrue, clientSid, EFalse, KNullDesC()));
+	CheckFailL(err, _L("AuthServer::AuthenticateL : ClientSid greater than zero."));
+	
+	if(identity != NULL)
+		{
+		delete identity;
+		}
+		
+	TIdentityId id = 5110;
+	HBufC* idString = NULL;
+	TRAP(err, idString = authMgrClient.IdentityStringL(id));
+	CheckFailL(err, _L("AuthServer::IdentityStringL()."));
+	
+	if(idString != NULL)
+		{
+		delete idString;
+		}
+	
+	CleanupStack::PopAndDestroy(2, &authMgrClient);
+	}
+
+	
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/securitytests/source/authsecuritytests.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 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 "captestutility.h"
+#include "authwriteuserdata.h"
+#include "authreaduserdata.h"
+#include "authreaddevicedata.h"
+#include "authwritedevicedata.h"
+#include "authtrustedui.h"
+#include "authreaduseranddevicedata.h"
+
+#include <s32file.h>
+
+// Factory function
+MCapabilityTestFactory* CapabilityTestFactoryL()
+	{
+	CDefaultCapabilityTestFactory* factory=new(ELeave) CDefaultCapabilityTestFactory();
+
+	factory->AddTestL(CAuthReadUserDataSecTest::NewL());
+	factory->AddTestL(CAuthReadDeviceDataSecTest::NewL());
+	factory->AddTestL(CAuthWriteUserDataSecTest::NewL());
+	factory->AddTestL(CAuthWriteDeviceDataSecTest::NewL());
+	factory->AddTestL(CAuthReadUserAndDeviceDataSecTest::NewL());
+	factory->AddTestL(CAuthTrustedUISecTest::NewL());
+	
+	return factory;
+	}
+
+EXPORT_C MCapabilityTestFactory* CapabilityTestFactory()
+	{
+	MCapabilityTestFactory* factory=NULL;
+	TRAP_IGNORE(factory = CapabilityTestFactoryL());
+	return factory;
+	}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/securitytests/source/authtrustedui.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,114 @@
+/*
+* Copyright (c) 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 "authtrustedui.h"
+
+_LIT(KAuthTrustedUISecName, "Auth TrustedUI APIs test");
+
+using namespace AuthServer;
+
+class CRegActive : public CActive
+    {
+	public:
+    CRegActive(RAuthMgrClient& aClient, CIdentity*& aResult) : 
+         CActive(EPriorityNormal),
+         iFirstTime(true),
+         iClient(aClient), 
+         iResult(aResult),
+         iErr(KErrNone)
+        {
+        CActiveScheduler::Add(this);
+        }
+        
+    void doReg()
+        {
+        SetActive();		
+		iClient.RegisterIdentityL(iResult, KAuthTrustedUISecName, iStatus);
+		}
+        
+    void DoCancel() 
+        {
+        }
+        
+    void RunL() 
+    	{
+        iErr = iStatus.Int();
+        CActiveScheduler::Stop();
+		}
+        
+    TInt RunError(TInt aError)
+    	{
+    	iErr = aError;
+	   	CActiveScheduler::Stop();
+    	return KErrNone;
+    	}
+        
+    TBool iFirstTime;
+    RAuthMgrClient& iClient;
+    CIdentity*& iResult;
+    TInt iErr;
+    };
+    
+
+CAuthTrustedUISecTest* CAuthTrustedUISecTest::NewL()
+	{
+	CAuthTrustedUISecTest* self=new(ELeave) CAuthTrustedUISecTest();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CAuthTrustedUISecTest::CAuthTrustedUISecTest()
+	{
+	SetCapabilityRequired(ECapabilityTrustedUI);
+	}
+	
+void CAuthTrustedUISecTest::ConstructL()
+	{
+	SetNameL(KAuthTrustedUISecName);
+	}
+
+void CAuthTrustedUISecTest::RunTestL()
+	{
+	TInt err(0);
+	
+	TRAP(err, DoTestL());
+	CheckFailL(err, _L("AuthServer::RegisterIdentityL()."));
+	}
+	
+void CAuthTrustedUISecTest::DoTestL()
+	{
+	AuthServer::RAuthMgrClient authMgrClient;	
+	User::LeaveIfError(authMgrClient.Connect());
+	CleanupClosePushL(authMgrClient);
+	
+	CActiveScheduler* sched = NULL;
+	sched = new(ELeave) CActiveScheduler;
+	CleanupStack::PushL(sched);
+	CActiveScheduler::Install(sched);
+
+	CIdentity* identity = 0;
+	CRegActive active(authMgrClient, identity);
+    active.doReg();
+	CActiveScheduler::Start();	
+	
+	CleanupStack::PopAndDestroy(2, &authMgrClient);
+	User::LeaveIfError(active.iErr);
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/securitytests/source/authwritedevicedata.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,83 @@
+/*
+* Copyright (c) 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 "authwritedevicedata.h"
+#include <authserver/authclient.h>
+#include <authserver/authmgrclient.h>
+#include <scs/cleanuputils.h>
+#include <e32def.h>
+
+_LIT(KAuthWriteDeviceDataSecName, "Auth WriteDeviceData APIs test");
+
+using namespace AuthServer;
+
+CAuthWriteDeviceDataSecTest* CAuthWriteDeviceDataSecTest::NewL()
+	{
+	CAuthWriteDeviceDataSecTest* self=new(ELeave) CAuthWriteDeviceDataSecTest();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CAuthWriteDeviceDataSecTest::CAuthWriteDeviceDataSecTest()
+	{
+	SetCapabilityRequired(ECapabilityWriteDeviceData);
+	}
+	
+void CAuthWriteDeviceDataSecTest::ConstructL()
+	{
+	SetNameL(KAuthWriteDeviceDataSecName);
+	}
+
+void CAuthWriteDeviceDataSecTest::RunTestL()
+	{
+	AuthServer::RAuthMgrClient authMgrClient;	
+	User::LeaveIfError(authMgrClient.Connect());
+	CleanupClosePushL(authMgrClient);
+
+	TInt err(0);
+	TPluginId pluginId = 536883941;
+			
+	TRAP(err, authMgrClient.SetPreferredTypePluginL(EAuthKnowledge, pluginId));
+	CheckFailL(err, _L("AuthServer::SetPreferredTypePluginL()."));
+
+	TIdentityId identity = 420; // Any thing but 0 since client does sanity check
+	
+	TRAP(err, authMgrClient.RemoveIdentityL(identity));
+	CheckFailL(err, _L("AuthServer::RemoveIdentityL()."));
+		
+	TRAP(err, authMgrClient.ResetIdentityL(identity, _L("")));
+	CheckFailL(err, _L("AuthServer::ResetIdentityL() 1st overload."));
+
+	TRAP(err, authMgrClient.ResetIdentityL(identity, EAuthKnowledge, _L("")));
+	CheckFailL(err, _L("AuthServer::ResetIdentityL() 2nd overload."));
+
+	RArray<TPluginId> pluginList;
+	CleanupClosePushL(pluginList);
+	RPointerArray<const HBufC> regDataList;
+	CleanupResetAndDestroyPushL(regDataList);
+	pluginList.AppendL(pluginId);
+	regDataList.AppendL(KNullDesC().AllocL());
+	TRAP(err, authMgrClient.ResetIdentityL(identity, pluginList, regDataList));
+	CheckFailL(err, _L("AuthServer::ResetIdentityL() 3rd overload."));
+	CleanupStack::PopAndDestroy(2, &pluginList);
+
+	CleanupStack::PopAndDestroy(&authMgrClient);
+	}
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/securitytests/source/authwriteuserdata.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,77 @@
+/*
+* Copyright (c) 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 "authwriteuserdata.h"
+#include <e32def.h>
+
+_LIT(KAuthWriteUserDataSecName, "Auth WriteUserData APIs test");
+
+using namespace AuthServer;
+
+CAuthWriteUserDataSecTest* CAuthWriteUserDataSecTest::NewL()
+	{
+	CAuthWriteUserDataSecTest* self=new(ELeave) CAuthWriteUserDataSecTest();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CAuthWriteUserDataSecTest::CAuthWriteUserDataSecTest()
+	{
+	SetCapabilityRequired(ECapabilityWriteUserData);
+	}
+	
+void CAuthWriteUserDataSecTest::ConstructL()
+	{
+	SetNameL(KAuthWriteUserDataSecName);
+	}
+
+void CAuthWriteUserDataSecTest::RunTestL()
+	{
+	AuthServer::RAuthMgrClient authMgrClient;	
+	User::LeaveIfError(authMgrClient.Connect());
+	CleanupClosePushL(authMgrClient);
+	
+	TInt err(0);
+	TIdentityId id = 34567890;
+		
+	TRAP(err, authMgrClient.SetIdentityStringL(id, KAuthWriteUserDataSecName));
+	CheckFailL(err, _L("AuthServer::SetIdentityStringL()."));
+	
+	TRAP(err, DoTestL(authMgrClient));
+	CheckFailL(err, _L("AuthServer::TrainPlugin()."));
+	
+	TPluginId pluginId = 11113100;
+	TRAP(err, authMgrClient.ForgetPluginL(id, pluginId));
+	CheckFailL(err, _L("AuthServer::ForgetPluginL()."));
+		
+	CleanupStack::PopAndDestroy(&authMgrClient);
+	}
+	
+void CAuthWriteUserDataSecTest::DoTestL(AuthServer::RAuthMgrClient& aAuthMgrClient)
+	{
+	TRequestStatus status;
+	TIdentityId id = 34567890;
+	TPluginId pluginId = 11113100;
+	
+	aAuthMgrClient.TrainPlugin(id, pluginId, status);
+	User::WaitForRequest(status);
+	
+	User::LeaveIfError(status.Int());
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/bwins/tAuthSvrServerU.DEF	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,3 @@
+EXPORTS
+	?NewServer@@YAHXZ @ 1 NONAME ; int __cdecl NewServer(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/bwins/tMiscAuthPluginU.def	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,3 @@
+EXPORTS
+	?ImplementationGroupProxy@@YAPBUTImplementationProxy@@AAH@Z @ 1 NONAME ; struct TImplementationProxy const * ImplementationGroupProxy(int &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/group/tAuthPlugin.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,70 @@
+/*
+* 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: 
+*
+*/
+
+
+TARGET tauthplugin.dll
+TARGETTYPE PLUGIN
+
+// ECom Dll recognition UID followed by the unique UID for this dll
+UID 0x10009D8D 0x10204F10
+VENDORID 0x70000001
+CAPABILITY All -TCB
+
+SOURCEPATH	../src
+SOURCE		main.cpp
+SOURCE		proxy.cpp
+SOURCE		tPinAuthPlugin.cpp		//One of the implementations available
+
+
+start resource 10204F10.rss
+#ifdef SYMBIAN_SECURE_ECOM
+TARGET tauthplugin.rsc
+#endif
+end
+
+USERINCLUDE   	../src
+USERINCLUDE		../../../inc
+USERINCLUDE		../../../inc/authserver
+
+USERINCLUDE		../../../source/server
+USERINCLUDE		../../../source/common
+USERINCLUDE		../../../source/client
+USERINCLUDE		../../../inc_private
+
+SYSTEMINCLUDE 	/epoc32/include 
+SYSTEMINCLUDE 	/epoc32/include/ecom
+
+
+//Use of Test Execute logging functions
+//SYSTEMINCLUDE 	/epoc32/include/test
+//LIBRARY			testexecuteutils.lib
+//LIBRARY			testexecutelogclient.lib
+
+LIBRARY cinidata.lib	// add text INI file parsing ability
+LIBRARY ecom.lib	//ECOM plug-in DLLs must link against ECOM.lib
+
+LIBRARY	euser.lib 	//For LowerCase()
+LIBRARY	efsrv.lib
+
+LIBRARY	authcommon.lib
+
+//LIBRARY c32.lib bafl.lib	
+
+//#ifdef	__SWI_LOGGING__
+//LIBRARY			flogger.lib
+//#endif	/* __SWI_LOGGING__ */
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/group/tAuthSvr.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2005-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: 
+*
+*/
+
+
+TARGET			tauthsvr.exe
+TARGETTYPE		exe
+UID				0x1000007A 0x10204F0D
+VENDORID		0x70000001
+
+CAPABILITY		AllFiles ReadUserData WriteUserData ReadDeviceData WriteDeviceData TrustedUI
+
+SYSTEMINCLUDE 	/epoc32/include
+SYSTEMINCLUDE 	/epoc32/include/test
+
+USERINCLUDE		../../../source/server
+USERINCLUDE		../../../source/common
+USERINCLUDE		../../../source/client
+USERINCLUDE		../../../inc_private
+USERINCLUDE		../../../../../cryptomgmtlibs/securitytestfw/test/testutil/client
+USERINCLUDE             ../../../inc/authserver
+
+SOURCEPATH  	../../tauthdb
+USERINCLUDE  	../../tauthdb
+SOURCE			step_createtestdb.cpp
+
+SOURCEPATH  		../src
+USERINCLUDE   	../src
+USERINCLUDE		../../../inc_private
+SOURCE			tAuthSvrServer.cpp
+SOURCE			step_FirstStart.cpp
+SOURCE			step_base.cpp
+SOURCE			step_AuthSvrCheck.cpp
+SOURCE			step_RegIdentity.cpp
+SOURCE			step_IdentifyMultiple.cpp
+SOURCE			step_retrainplugin.cpp
+SOURCE			step_removedbs.cpp
+SOURCE			step_removeauthmethod.cpp
+SOURCE			step_removeidentity.cpp
+SOURCE			step_authenticate.cpp
+SOURCE			step_setauthprefs.cpp
+SOURCE			step_resultavailability.cpp  ../../../source/server/authdb.cpp ../../../source/server/transientkeyinfo.cpp ../../../source/server/transientkey.cpp ../../../source/server/encryptedprotectionkey.cpp step_resetidentity.cpp
+SOURCE			step_postmarketplugin.cpp
+SOURCE			step_clientsidsupport.cpp
+SOURCE			step_oom.cpp
+SOURCE			step_multithreaded.cpp
+
+
+LIBRARY			testexecutelogclient.lib testexecuteutils.lib
+LIBRARY			ecom.lib c32.lib bafl.lib
+LIBRARY			edbms.lib estor.lib efsrv.lib euser.lib
+LIBRARY         authclient.lib authcommon.lib scsclient.lib
+LIBRARY         random.lib pbe.lib cryptography.lib
+LIBRARY			sectcbutil.lib
+LIBRARY 		cinidata.lib	// add text INI file parsing ability
+LIBRARY			centralrepository.lib
+LIBRARY			testutilclient.lib
+#ifdef	__SWI_LOGGING__
+LIBRARY			flogger.lib
+#endif	/* __SWI_LOGGING__ */
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/group/tMiscAuthPlugin.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2005-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: 
+*
+*/
+
+
+TARGET			tmiscauthplugin.dll
+TARGETTYPE		PLUGIN
+UID			0x10009d8d 0x10204F0F
+VENDORID		0x70000001
+CAPABILITY              ALL -TCB
+SOURCEPATH		../miscPlugins\
+
+SOURCE			tpluginbase.cpp
+SOURCE			proxy.cpp
+
+START RESOURCE        10204f0f.rss
+#ifdef SYMBIAN_SECURE_ECOM
+TARGET tmiscauthplugin.rsc
+#endif
+END
+USERINCLUDE		. 
+USERINCLUDE		../../../inc
+USERINCLUDE		../../../inc/authserver
+
+USERINCLUDE		../../../source/server
+USERINCLUDE		../../../source/common
+USERINCLUDE		../../../source/client
+
+SYSTEMINCLUDE	/epoc32/include
+SYSTEMINCLUDE   /EPOC32/INCLUDE/ECOM
+
+LIBRARY		euser.lib
+LIBRARY     ecom.lib
+SMPSAFE
+  
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/group/tauthpluginupgrade.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,58 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+
+
+TARGET tauthpluginupgrade.dll
+TARGETTYPE PLUGIN
+
+// ECom Dll recognition UID followed by the unique UID for this dll
+UID 0x10009D8D 0x10204F10
+VENDORID 0x70000001
+CAPABILITY All -TCB
+
+SOURCEPATH	../src
+SOURCE		main.cpp
+SOURCE		proxy.cpp
+SOURCE		tpinauthpluginupgrade.cpp	//a dummy dll upgrade implementation.
+
+
+start resource 10204F10_upgrade.rss
+#ifdef SYMBIAN_SECURE_ECOM
+TARGET tauthpluginupgrade.rsc
+#endif
+end
+
+USERINCLUDE   	../src
+USERINCLUDE		../../../inc
+USERINCLUDE		../../../inc/authserver
+USERINCLUDE		../../../inc_private
+
+USERINCLUDE		../../../source/server
+USERINCLUDE		../../../source/common
+USERINCLUDE		../../../source/client
+
+SYSTEMINCLUDE 	/epoc32/include 
+SYSTEMINCLUDE 	/epoc32/include/ecom
+
+LIBRARY cinidata.lib	// add text INI file parsing ability
+LIBRARY ecom.lib	//ECOM plug-in DLLs must link against ECOM.lib
+
+LIBRARY	euser.lib 	//For LowerCase()
+LIBRARY	efsrv.lib
+LIBRARY authcommon.lib
+
+SMPSAFE
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/group/tauthsvrnc.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2005-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: 
+*
+*/
+
+
+TARGET			tauthsvrnc.exe
+TARGETTYPE		exe
+UID				0x1000007A 0x10204F12
+VENDORID		0x70000001
+
+
+SYSTEMINCLUDE 	/epoc32/include
+SYSTEMINCLUDE 	/epoc32/include/test
+
+USERINCLUDE		../../../source/server
+USERINCLUDE		../../../source/common
+USERINCLUDE		../../../source/client
+USERINCLUDE		../../../inc_private
+USERINCLUDE		../../../../../cryptomgmtlibs/securitytestfw/test/testutil/client
+USERINCLUDE             ../../../inc/authserver
+
+SOURCEPATH  	../../tauthdb
+USERINCLUDE  	../../tauthdb
+SOURCE			step_createtestdb.cpp
+
+SOURCEPATH  		../src
+USERINCLUDE   	../src
+USERINCLUDE   	../../../inc_private
+SOURCE			tauthsvrservernc.cpp
+SOURCE			step_FirstStart.cpp
+SOURCE			step_base.cpp
+SOURCE			step_AuthSvrCheck.cpp
+SOURCE			step_RegIdentity.cpp
+SOURCE			step_IdentifyMultiple.cpp
+SOURCE			step_retrainplugin.cpp
+SOURCE			step_removedbs.cpp
+SOURCE			step_removeauthmethod.cpp
+SOURCE			step_removeidentity.cpp
+SOURCE			step_authenticate.cpp
+SOURCE			step_setauthprefs.cpp
+
+
+SOURCE          ../../../source/server/authdb.cpp
+SOURCE          ../../../source/server/transientkeyinfo.cpp
+SOURCE          ../../../source/server/transientkey.cpp
+SOURCE          ../../../source/server/encryptedprotectionkey.cpp
+
+LIBRARY			testexecutelogclient.lib testexecuteutils.lib
+LIBRARY			ecom.lib c32.lib bafl.lib
+LIBRARY			edbms.lib estor.lib efsrv.lib euser.lib
+LIBRARY         authclient.lib authcommon.lib scsclient.lib
+LIBRARY         random.lib pbe.lib cryptography.lib
+LIBRARY			sectcbutil.lib
+LIBRARY 		cinidata.lib	// add text INI file parsing ability
+LIBRARY			testutilclient.lib
+LIBRARY			centralrepository.lib
+#ifdef	__SWI_LOGGING__
+LIBRARY			flogger.lib
+#endif	/* __SWI_LOGGING__ */
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/group/tauthsvrwdd.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2005-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: 
+*
+*/
+
+
+TARGET			tauthsvrwdd.exe
+TARGETTYPE		exe
+UID				0x1000007A 0x10204F11
+VENDORID		0x70000001
+CAPABILITY		AllFiles ReadUserData WriteUserData ReadDeviceData WriteDeviceData
+
+SYSTEMINCLUDE 	/epoc32/include
+SYSTEMINCLUDE 	/epoc32/include/test
+
+USERINCLUDE		../../../source/server
+USERINCLUDE		../../../source/common
+USERINCLUDE		../../../source/client
+USERINCLUDE		../../../../../cryptomgmtlibs/securitytestfw/test/testutil/client
+USERINCLUDE             ../../../inc/authserver
+
+USERINCLUDE		../../../inc_private
+SOURCEPATH  	../../tauthdb
+USERINCLUDE  	../../tauthdb
+SOURCE			step_createtestdb.cpp
+
+SOURCEPATH  		../src
+USERINCLUDE   	../src
+USERINCLUDE   	../../../inc_private
+
+SOURCE			tauthsvrserverwdd.cpp
+SOURCE			step_FirstStart.cpp
+SOURCE			step_base.cpp
+SOURCE			step_AuthSvrCheck.cpp
+SOURCE			step_RegIdentity.cpp
+SOURCE			step_IdentifyMultiple.cpp
+SOURCE			step_retrainplugin.cpp
+SOURCE			step_removedbs.cpp
+SOURCE			step_removeauthmethod.cpp
+SOURCE			step_removeidentity.cpp
+SOURCE			step_authenticate.cpp
+SOURCE			step_setauthprefs.cpp
+
+SOURCE          ../../../source/server/authdb.cpp
+SOURCE          ../../../source/server/transientkeyinfo.cpp
+SOURCE          ../../../source/server/transientkey.cpp
+SOURCE          ../../../source/server/encryptedprotectionkey.cpp
+
+LIBRARY			testexecutelogclient.lib testexecuteutils.lib
+LIBRARY			ecom.lib c32.lib bafl.lib
+LIBRARY			edbms.lib estor.lib efsrv.lib euser.lib
+LIBRARY         authclient.lib authcommon.lib scsclient.lib
+LIBRARY         random.lib pbe.lib cryptography.lib
+LIBRARY			sectcbutil.lib
+LIBRARY 		cinidata.lib	// add text INI file parsing ability
+LIBRARY			testutilclient.lib
+LIBRARY			centralrepository.lib
+#ifdef	__SWI_LOGGING__
+LIBRARY			flogger.lib
+#endif	/* __SWI_LOGGING__ */
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/group/tpostmarketramplugin.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+
+
+TARGET tpostmarketramplugin.dll
+TARGETTYPE PLUGIN
+
+// ECom Dll recognition UID followed by the unique UID for this dll
+UID 0x10009D8D 0x1023F3F4
+VENDORID 0x70000001
+CAPABILITY All -TCB
+
+VERSION 10.1
+
+SOURCEPATH	../tpostmarketplugins
+SOURCE		main.cpp
+SOURCE		proxy.cpp
+SOURCE		tpostmarketramplugin.cpp		//dummy implementation of a RAM plugin.
+
+start resource testdata/1023F3F4.rss
+#ifdef SYMBIAN_SECURE_ECOM
+TARGET tpostmarketramplugin.rsc
+#endif
+end
+
+USERINCLUDE   	../tpostmarketplugins
+USERINCLUDE		../../../inc
+USERINCLUDE		../../../inc/authserver
+USERINCLUDE		../../../inc_private
+
+USERINCLUDE		../../../source/server
+USERINCLUDE		../../../source/common
+USERINCLUDE		../../../source/client
+
+SYSTEMINCLUDE 	/epoc32/include 
+SYSTEMINCLUDE 	/epoc32/include/ecom
+
+LIBRARY cinidata.lib	// add text INI file parsing ability
+LIBRARY ecom.lib	//ECOM plug-in DLLs must link against ECOM.lib
+
+LIBRARY	euser.lib 	//For LowerCase()
+LIBRARY	efsrv.lib
+LIBRARY authcommon.lib
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/miscPlugins/10204F0F.rss	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,168 @@
+/*
+* Copyright (c) 2005-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: 
+* Registry file for the miscellaneous authServer Interface Implementation Collection
+* UIDs quick-ref
+* ECOM DLL UID:			0x10204F0F 
+* ECOM interface UID:		0x102740FE
+* ECOM Implementation:		0x11113000
+*
+*/
+
+
+/**
+ @file 10204F0F.rss
+*/
+
+
+#include "RegistryInfoV2.rh"
+
+// Declares info for one implementation
+RESOURCE REGISTRY_INFO theInfo
+	{
+	// UID for the plug-in DLL; matches name of this file
+	dll_uid = 0x10204F0F;
+	resource_format_version = RESOURCE_FORMAT_VERSION_2;
+
+	// Declare array of interface info
+	interfaces = 
+		{
+		INTERFACE_INFO
+		 	{
+		 	// UID of interface that is implemented (i.e. CAuthPluginInterface)							
+		 	interface_uid = 0x102740FE;			
+			implementations = 
+				{
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x11112FFF;
+					version_no = 1;
+					display_name = "11112FFF Implementation of AuthServer plugin -Unknown";
+					default_data = "11112FFF";
+					opaque_data = "";
+					rom_only=1;
+					},				
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x11113000;
+					version_no = 1;
+					display_name = "11113000 Implementation of AuthServer plugin";
+					default_data = "11113000";
+					opaque_data = "";
+					rom_only=1;
+					},
+				// Info for CTPlugin11113001
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x11113001;
+					version_no = 1;
+					display_name = "11113001 Implementation of AuthServer plugin";
+					//default_data is used for cue lookup by the default ECOM resolver
+					default_data = "11113001";
+					//default_data = "text/wml||This is the type of data that this implementation understands. (Can be anything which will allow the resolver to identify this implementation as the correct one at run time. In this case it is a mime type).";
+					opaque_data = "";
+					rom_only=1;
+					},
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x11113002;
+					version_no = 1;
+					display_name = "11113002 Implementation of AuthServer plugin";
+					//default_data is used for cue lookup by the default ECOM resolver
+					default_data = "11113002";
+					//default_data = "text/wml||This is the type of data that this implementation understands. (Can be anything which will allow the resolver to identify this implementation as the correct one at run time. In this case it is a mime type).";
+					opaque_data = "";
+					rom_only=1;
+					},				
+					IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x11113003;
+					version_no = 1;
+					display_name = "11113003 Implementation of AuthServer plugin";
+					//default_data is used for cue lookup by the default ECOM resolver
+					default_data = "11113003";
+					//default_data = "text/wml||This is the type of data that this implementation understands. (Can be anything which will allow the resolver to identify this implementation as the correct one at run time. In this case it is a mime type).";
+					opaque_data = "";
+					rom_only=1;
+					},
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x11113004;
+					version_no = 1;
+					display_name = "11113004 Implementation of AuthServer plugin";
+					//default_data is used for cue lookup by the default ECOM resolver
+					default_data = "11113004";
+					//default_data = "text/wml||This is the type of data that this implementation understands. (Can be anything which will allow the resolver to identify this implementation as the correct one at run time. In this case it is a mime type).";
+					opaque_data = "";
+					rom_only=1;
+					},
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x11113005;
+					version_no = 1;
+					display_name = "11113005 Implementation of AuthServer plugin";
+					//default_data is used for cue lookup by the default ECOM resolver
+					default_data = "11113005";
+					//default_data = "text/wml||This is the type of data that this implementation understands. (Can be anything which will allow the resolver to identify this implementation as the correct one at run time. In this case it is a mime type).";
+					opaque_data = "";
+					rom_only=1;
+					},
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x11113006;
+					version_no = 1;
+					display_name = "11113006 Implementation of AuthServer plugin";
+					//default_data is used for cue lookup by the default ECOM resolver
+					default_data = "11113006";
+					//default_data = "text/wml||This is the type of data that this implementation understands. (Can be anything which will allow the resolver to identify this implementation as the correct one at run time. In this case it is a mime type).";
+					opaque_data = "";
+					rom_only=1;
+					},
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x11113007;
+					version_no = 1;
+					display_name = "11113007 Implementation of AuthServer plugin";
+					//default_data is used for cue lookup by the default ECOM resolver
+					default_data = "11113007";
+					//default_data = "text/wml||This is the type of data that this implementation understands. (Can be anything which will allow the resolver to identify this implementation as the correct one at run time. In this case it is a mime type).";
+					opaque_data = "";
+					rom_only=1;
+					},
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x11113008;
+					version_no = 1;
+					display_name = "11113008 Implementation of AuthServer plugin";
+					//default_data is used for cue lookup by the default ECOM resolver
+					default_data = "11113008";
+					//default_data = "text/wml||This is the type of data that this implementation understands. (Can be anything which will allow the resolver to identify this implementation as the correct one at run time. In this case it is a mime type).";
+					opaque_data = "";
+					rom_only=1;
+					},										
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x11113009;
+					version_no = 1;
+					display_name = "11113009 Implementation of AuthServer plugin";
+					//default_data is used for cue lookup by the default ECOM resolver
+					default_data = "11113009";
+					//default_data = "text/wml||This is the type of data that this implementation understands. (Can be anything which will allow the resolver to identify this implementation as the correct one at run time. In this case it is a mime type).";
+					opaque_data = "";
+					rom_only=1;
+					}
+				};	
+			}
+		};			
+	}		
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/miscPlugins/authplugininterface.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+
+
+/**
+ @file
+*/
+
+#include "authserver_client.h"
+#include <authserver/authplugininterface.h>
+
+using namespace AuthServer;
+
+//EXPORT_C CAuthPluginInterface::CAuthPluginInterface()
+//	{}
+
+EXPORT_C CAuthPluginInterface::~CAuthPluginInterface()
+	{
+	// Destroy any instance variables and then
+	// inform the framework that this specific
+	// instance of the interface has been destroyed.
+	REComSession::DestroyedImplementation(iDtor_ID_Key);
+	}
+/*
+EXPORT_C CAuthPluginInterface* CAuthPluginInterface::NewL()
+	{// Hardcoded to be the PIN plugin by default
+	
+	const TUid KPINPluginUid = { 0x102740FD };
+	TAny* defaultPlugin = REComSession::CreateImplementationL(KPINPluginUid, _FOFF(CAuthPluginInterface, iDtor_ID_Key));
+	return (reinterpret_cast<CAuthPluginInterface*>(defaultPlugin));
+	}
+*/
+
+EXPORT_C CAuthPluginInterface* CAuthPluginInterface::NewL(TPluginId aPluginId)
+	{// Use the default ECOM resolver
+/*	
+	//TDesC8& aCue = aPluginId;
+	//aCue = aPluginId;
+	TBuf8<32> cueValue;
+	//TDes8 cueValue;
+	_LIT8(KFormatValue2, "%x");
+	cueValue.Format(KFormatValue2, aPluginId);		
+
+	TEComResolverParams resolverParams;
+	resolverParams.SetDataType(cueValue);	//(aCue);
+	
+	resolverParams.SetWildcardMatch(ETrue);	//There might be problems with this
+	
+	//TAny* pluginInterface =	REComSession::CreateImplementationL(KCAuthPluginInterfaceUid,
+	//_FOFF(CAuthPluginInterface,iDtor_ID_Key),NULL,resolverParams);
+	TAny* pluginInterface =	REComSession::CreateImplementationL(KCAuthPluginInterfaceUid,
+	_FOFF(CAuthPluginInterface,iDtor_ID_Key),resolverParams);
+
+
+	return (reinterpret_cast<CAuthPluginInterface*>(pluginInterface));
+*/
+  TEComResolverParams resolverParams;
+  TBufC8<16> pluginIdTxt;
+  
+  pluginIdTxt.Des().Format(_L8("%x"), aPluginId);
+  
+  resolverParams.SetDataType(pluginIdTxt);
+  
+  TAny* plugin = 0; 
+
+  plugin = 
+	REComSession::CreateImplementationL(KCAuthPluginInterfaceUid,
+										_FOFF(CAuthPluginInterface,
+											  iDtor_ID_Key),
+										resolverParams,
+										KRomOnlyResolverUid);	
+	return reinterpret_cast<CAuthPluginInterface*>(plugin);										
+	}
+
+
+EXPORT_C void CAuthPluginInterface::ListImplementationsL(RImplInfoPtrArray& aImplInfoArray)
+	{
+	REComSession::ListImplementationsL(KCAuthPluginInterfaceUid, aImplInfoArray);
+	}
+
+const TPtrC& CAuthPluginInterface::GetName() const
+	{
+	return iName;
+	}
+	
+const TPtrC& CAuthPluginInterface::GetDescription() const
+	{
+	return iDescription;
+	}
+	
+TAuthPluginType CAuthPluginInterface::GetType() const
+	{
+	return iType;
+	}
+
+/** DLL Entry point */
+//GLDEF_C TInt E32Dll(TDllReason /*aReason*/)
+//	{
+//	return(KErrNone);
+//	}
+
+/*
+//Defined in main.cpp
+TBool E32Dll()
+	{
+	return (ETrue);
+	}
+*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/miscPlugins/main.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2005-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 <e32base.h>
+
+/** DLL Entry point */
+
+//GLDEF_C TInt E32Dll(TDllReason /*aReason*/)
+//	{
+//	return(KErrNone);
+//	}
+
+TBool E32Dll()
+	{
+	return (ETrue);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/miscPlugins/proxy.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2005-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 <e32std.h>
+#include <ecom/ImplementationProxy.h>	// ECOM header file
+//#include <ImplementationInformation.h>
+
+#include "tPluginBase.h"			// Class definition for with the available implementations
+
+
+// Map the interface UIDs to implementation factory functions
+const TImplementationProxy ImplementationTable[] = 
+	{
+		IMPLEMENTATION_PROXY_ENTRY(0x11112FFF,	CTPlugin11112FFF::NewL),
+		IMPLEMENTATION_PROXY_ENTRY(0x11113000,	CTPlugin11113000::NewL),
+		IMPLEMENTATION_PROXY_ENTRY(0x11113001,	CTPlugin11113001::NewL),		
+		IMPLEMENTATION_PROXY_ENTRY(0x11113002,	CTPlugin11113002::NewL),
+		IMPLEMENTATION_PROXY_ENTRY(0x11113003,	CTPlugin11113003::NewL),
+		IMPLEMENTATION_PROXY_ENTRY(0x11113004,	CTPlugin11113004::NewL),
+		IMPLEMENTATION_PROXY_ENTRY(0x11113005,	CTPlugin11113005::NewL),
+		IMPLEMENTATION_PROXY_ENTRY(0x11113006,	CTPlugin11113006::NewL),
+		IMPLEMENTATION_PROXY_ENTRY(0x11113007,	CTPlugin11113007::NewL),
+		IMPLEMENTATION_PROXY_ENTRY(0x11113008,	CTPlugin11113008::NewL),
+		IMPLEMENTATION_PROXY_ENTRY(0x11113009,	CTPlugin11113009::NewL)
+	};
+
+// Exported proxy function to resolve intstantiation methods for an ECOM plugin dll
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+	{
+	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+	return ImplementationTable;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/miscPlugins/tPluginBase.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,357 @@
+/*
+* Copyright (c) 2005-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: 
+* tMiscAuthPlugin.cpp
+* Improvements: 
+*
+*/
+
+ 
+
+#include <f32file.h>
+
+
+#ifndef __INIPARSER_H__
+	#include <cinidata.h>
+#endif // __INIPARSER_H__
+
+#include "tPluginBase.h"
+#include <e32svr.h>
+#include <authserver/auth_srv_errs.h>
+
+TBool E32Dll()
+{
+
+	return ETrue;
+}
+
+
+// Construction and destruction functions
+//CTPluginUnknown* CTPluginUnknown::NewL(const TPluginId aPluginId)
+CTPluginUnknown* CTPluginUnknown::NewL()
+ 	{
+ 	CTPluginUnknown* self = new (ELeave) CTPluginUnknown();
+ 	CleanupStack::PushL(self);
+ 	self->ConstructL();
+ 	CleanupStack::Pop();
+ 	return self;
+	}
+
+CTPluginUnknown::~CTPluginUnknown()
+	{}
+
+//CTPluginUnknown::CTPluginUnknown(const TPluginId aPluginId)
+CTPluginUnknown::CTPluginUnknown()
+	{ // See ConstructL() for initialisation completion.
+	}
+		
+void CTPluginUnknown::ConstructL()
+// Safely complete the initialization of the constructed object	
+	{
+	
+	//TUid iDtor_ID_Key;
+	
+	// Initialise member data
+	/*
+	iName = "Pin1";
+	iDescription = "PIN Plugin";
+	iMinEntropy = 0.8;
+	iFalsePositiveRate = 1;
+	iFalseNegativeRate = 1;
+	iType = EAuthKnowledge;
+	
+	// TPtrC iName;
+	// TPtrC iDescription;
+	// TEntropy iMinEntropy;
+	// TPercentage iFalsePositiveRate;
+	// TPercentage iFalseNegativeRate;
+	// TPluginType iType;
+	*/
+	
+	iSupportsDefaultData = true;
+	iNumTimesTrained = 0;
+	}
+
+	
+//Implement CAuthPluginInterface definitions	
+void CTPluginUnknown::Identify(TIdentityId& aId, HBufC8*& aResult, TRequestStatus& aRequest)
+	{
+	// We are simulating user input by reading from a file
+	// (The data contained in this file has been freshly written by the 'client part in TestExecute')
+	
+	aRequest = KRequestPending;
+	//aId = USER;
+	aId = KUnknownIdentity;	//Unknown Id
+	aResult = HBufC8::New(16);
+	
+	TRequestStatus* status  = &aRequest;
+	
+	if(aResult == NULL)
+		{
+		User::RequestComplete(status, KErrNoMemory);
+		return;
+		}
+	
+	aResult->Des().Format(_L8("%x"), aId);
+	
+		
+	
+	//aRequest = AuthServer::KIdCancel;	//KIdCancel not defined yet
+	//aResult will not be updated, as specified
+	
+	
+	//aRequest = AuthServer::KIdQuit;	//KIdQuit not defined yet
+	//aResult will not be updated, as specified
+	
+	
+	//aRequest = AuthServer::KIdUnknown;		
+	
+	//return aRequest.Int();
+	
+	User::RequestComplete(status, KErrNone);
+	}
+
+void CTPluginUnknown::Cancel()
+	{	
+	}	
+	
+void CTPluginUnknown::Train(TIdentityId /*aId*/, HBufC8*& /*aResult*/, TRequestStatus& aRequest)							
+	{
+	
+	aRequest = KRequestPending;
+	iNumTimesTrained++;
+	//Possibly update aResult here, later for now we'll pretend that the plugin was cancelled
+		
+	TRequestStatus* status  = &aRequest;
+	User::RequestComplete(status, KErrAuthServPluginCancelled);
+	}
+	
+		
+TBool CTPluginUnknown::IsActive() const
+	{
+	// There is never any user intervention required
+	return true;
+	
+	// As a future development note, this value may be read from a file (or a section in a file)
+	}
+	
+TInt CTPluginUnknown::Forget(TIdentityId /*aId*/)
+	{
+	
+	//Dummy implementation	
+	return KErrNone;	
+	}
+	
+TInt CTPluginUnknown::DefaultData(TIdentityId /*aId*/, HBufC8*& aOutputBuf)
+	{
+	
+	// This implementation of the PIN plugin does support default data.
+	// There will be cases where i don't want this available. Hence the addition of a 
+	// new class member iSupportsDefaultData
+	
+	TInt result = KErrNone;
+	
+	if (iSupportsDefaultData)	//Class member initialised in the constructor
+		{
+		//_LIT(KDefaultData, "0000");	// in tPluginBase.h
+		aOutputBuf = HBufC8::New(KDefaultData().Size());
+		if(aOutputBuf == NULL)
+			{
+			return KErrNoMemory;
+			}
+		*aOutputBuf = KDefaultData;		
+		}
+	else
+		result = KErrNotSupported;
+	
+	return result;	
+	}
+
+TPluginId CTPluginUnknown::Id() const
+	{
+	return 0x11112FFF;
+	}
+
+
+
+//=========================================================================
+
+//=========================================================================
+
+// Construction and destruction functions
+/*CTPluginBase* CTPluginBase::NewL()
+ 	{
+	CTPluginBase* self = new (ELeave) TMyType();
+ 	CleanupStack::PushL(self);
+ 	self->ConstructL();
+ 	CleanupStack::Pop();
+ 	return self;
+	}
+*/
+
+CTPluginBase::~CTPluginBase()
+	{}
+
+CTPluginBase::CTPluginBase()
+	{
+	// See ConstructL() for initialisation completion.
+	}
+
+void CTPluginBase::ConstructL()
+// Safely complete the initialization of the constructed object	
+	{
+	
+	//TUid iDtor_ID_Key;
+	
+	
+	/*
+	iName = "Pin1";
+	iDescription = "PIN Plugin";
+	iMinEntropy = 0.8;
+	iFalsePositiveRate = 1;
+	iFalseNegativeRate = 1;
+	iType = EAuthKnowledge;
+	
+	// TPtrC iName;
+	// TPtrC iDescription;
+	// TEntropy iMinEntropy;
+	// TPercentage iFalsePositiveRate;
+	// TPercentage iFalseNegativeRate;
+	// TPluginType iType;
+	*/
+	
+	iType = GetType();
+	
+	iSupportsDefaultData = true;
+	iNumTimesTrained = 0;
+	}
+
+	
+//Implement CAuthPluginInterface definitions
+
+void CTPluginBase::Identify(TIdentityId& aId, HBufC8*& aResult, TRequestStatus& aRequest)
+	{
+	// We are simulating user input by reading from a file
+	// (The data contained in this file has been freshly written by the 'client part in TestExecute')
+	
+//	aRequest = KRequestPending;
+//	aId = USER;
+	//delete aResult;
+//	aResult = HBufC8::NewL(16);
+	
+	//aResult->Des().Format(_L8("%x"), aResult);
+//	aResult->Des().Format(_L8("%d"), aId);
+	
+	
+	//aRequest = AuthServer::KIdCancel;	//KIdCancel not defined yet
+	//aResult will not be updated, as specified
+	
+	
+	//aRequest = AuthServer::KIdQuit;	//KIdQuit not defined yet
+	//aResult will not be updated, as specified
+	
+	
+	//aRequest = AuthServer::KIdUnknown;		
+	
+//	aRequest = KIdSuccess;
+	//return aRequest.Int();
+
+	aRequest = KRequestPending;
+	aId = GetId();
+	aResult = HBufC8::New(16);
+	
+	TRequestStatus* status = &aRequest;
+	if(aResult == NULL)
+		{
+		User::RequestComplete(status, KErrNoMemory);
+		return;
+		}
+	
+	aResult->Des().Format(_L8("%x"), aId);
+	User::RequestComplete(status, KErrNone);
+	}
+
+
+void CTPluginBase::Cancel()
+	{	
+	}
+
+void CTPluginBase::Train(TIdentityId aId, HBufC8*& aResult, TRequestStatus& aRequest)							
+	{
+	
+	aRequest = KRequestPending;
+	iNumTimesTrained++;
+	aResult = HBufC8::New(16);
+	TRequestStatus* status  = &aRequest;
+	if(aResult == NULL)
+		{
+		User::RequestComplete(status, KErrNoMemory);
+		return;
+		}
+	TInt number = iNumTimesTrained*GetId();
+	aResult->Des().Format(_L8("%x"), aId);
+	
+	User::RequestComplete(status, KErrNone);
+	}
+
+
+TBool CTPluginBase::IsActive() const
+	{
+	// There is never any user intervention required
+	return true;
+	
+	// As a future development note, this value may be read from a file (or a section in a file)
+	}
+
+TInt CTPluginBase::Forget(TIdentityId /*aId*/)
+	{
+	
+	//Dummy implementation	
+	return KErrNone;
+	
+	//Improvement
+	// If (NumTimesTrained == 0) 
+	//	return AuthServer::KIdUnknown;	// This is what is returned for the CTUnknownPlugin class
+			
+	}
+
+TInt CTPluginBase::DefaultData(TIdentityId /*aId*/, HBufC8*& aOutputBuf)
+	{
+	
+	// This implementation of the PIN plugin does support default data.
+	// There will be cases where i don't want this available. Hence the addition of a 
+	// new class member iSupportsDefaultData
+	
+	TInt result = KErrNone;
+	
+	if (iSupportsDefaultData)	//Class member initialised in the constructor
+		{
+		//_LIT(KDefaultData, "0000");	// in tPinAuthPlugin.h
+		aOutputBuf = HBufC8::New(KDefaultData().Size());
+		if(aOutputBuf == NULL)
+			{
+			return KErrNoMemory;
+			}
+		*aOutputBuf = KDefaultData;
+		}
+	else
+		result = KErrNotSupported;
+	
+	return result;	
+	}
+
+TPluginId CTPluginBase::Id() const
+	{
+	return GetId();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/miscPlugins/tPluginBase.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,154 @@
+/*
+* Copyright (c) 2005-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: 
+* tMiscAuthPlugin.h
+* CTPluginUnknown and CTPluginBase are interface implementations for
+* CAuthPluginInterface
+*
+*/
+
+
+
+#ifndef T_PLUGIN_BASE_H
+#define T_PLUGIN_BASE_H
+
+//#include <ImplementationInformation.h>
+//#include <TestExecuteStepBase.h>
+//#include <TestExecuteServerBase.h>
+//#include <TestExecuteStepBase.h>
+
+#include "authPluginInterface.h"	//'authserver' folder is included in mmp file
+
+
+//An implementation of the CAuthPluginInterface definition
+
+using namespace AuthServer;
+
+class CTPluginUnknown : public CBase, public MAuthPluginInterface
+	{
+public:
+	// Two phase constructor
+	// Standardised safe construction which leaves nothing the cleanup stack.
+	static CTPluginUnknown* NewL();
+	// Destructor
+	~CTPluginUnknown();
+
+	virtual void Identify(TIdentityId& aId,  HBufC8*& aResult, TRequestStatus& aRequest);	
+	virtual void Cancel();
+	virtual void Train(TIdentityId aId, HBufC8*& aResult, TRequestStatus& aRequest);		
+
+	virtual TBool IsActive() const;
+	virtual TInt Forget(TIdentityId aId);
+	virtual TInt DefaultData(TIdentityId aId, HBufC8*& aOutputBuf);
+	virtual TPluginId Id() const;
+	
+		
+private:
+	CTPluginUnknown();
+	void ConstructL();
+	
+	// Data read from file determining if this plugin supports default data
+	TBool iSupportsDefaultData;
+	TInt iNumTimesTrained;
+	};
+
+//=========================================================================
+
+//=========================================================================	
+//implementation_uid = 0x11113000 to 0x11113031 	//(50 of them)
+
+class CTPluginBase : public CBase, public MAuthPluginInterface
+	{
+public:
+
+	// Destructor
+	~CTPluginBase();
+	
+	//Implementation of CAuthPluginInterface definitions using a PIN system
+	virtual void Identify(TIdentityId& aId,  HBufC8*& aResult, TRequestStatus& aRequest);	
+	virtual void Cancel();	
+	virtual void Train(TIdentityId aId, HBufC8*& aResult, TRequestStatus& aRequest);		
+
+	virtual TBool IsActive() const;
+	virtual TInt Forget(TIdentityId aId);
+	virtual TInt DefaultData(TIdentityId aId, HBufC8*& aOutputBuf);
+	virtual TPluginId Id() const;
+	
+	// Utility functions
+	//TInt ReadUserInputL(TBuf<32> inputValue);
+	//TInt CheckForStringPresenceL(TBuf<32> inputValue, TRequestStatus& requestValue);
+	//TInt CheckForNewStringPresenceL(TIdentityId aId, TBuf<32> inputValue, TRequestStatus& requestValue);
+	//TInt FindStringAndRemoveL(TIdentityId aId);
+
+	virtual TPluginId GetId() const = 0;
+	virtual TAuthPluginType GetType() const = 0;
+		
+//private:
+	//CTPluginBase(const TPluginId aPluginId);
+	CTPluginBase();
+	void ConstructL();
+	
+	// Data read from file determining if this plugin supports default data
+	TBool iSupportsDefaultData;	
+	// Can be used to generate results that are multiples of the plugin IDs
+	TInt iNumTimesTrained;
+	};
+
+
+// Constants used in the utility functions -File locations, etc
+//_LIT(KInitInfoFile, "c:\\tAuthSvr\\initialisation_Info.ini");
+//_LIT(KPinInputFile, "c:\\tAuthSvr\\pin_Input.ini");
+//_LIT(KPinContentsFile, "c:\\tAuthSvr\\pin_Contents.ini");
+//_LIT8(KDefaultData, "0000");
+_LIT8(KDefaultData, "CCCCCCCCCCCCCCCCCCCC");
+
+// Provide a consistent naming structure
+typedef CTPluginUnknown CTPlugin11112FFF ;
+
+
+//=========================================================================	
+// The various classes that are spawned from this base class by inheriting the implementations besides
+// the identify() function
+
+// number is hex, type is one of the TAuthPluginType enums
+#define DEF_PLUGIN(number, type) class CTPlugin##number : public CTPluginBase\
+	{                                        \
+public:                                      \
+	typedef CTPlugin##number TMyType;        \
+	TIdentityId GetId() const                \
+	{ return 0x##number; }                   \
+	TAuthPluginType GetType() const          \
+	{ return type; }                         \
+    static TMyType* NewL()                   \
+    {										 \
+	  TMyType* r = new (ELeave) TMyType();   \
+	  r->ConstructL();						 \
+	  return r;                              \
+	}                                        \
+private:                                     \
+	}         
+
+DEF_PLUGIN(11113000, EAuthKnowledge);
+DEF_PLUGIN(11113001, EAuthKnowledge);
+DEF_PLUGIN(11113002, EAuthKnowledge);
+DEF_PLUGIN(11113003, EAuthBiometric);
+DEF_PLUGIN(11113004, EAuthBiometric);
+DEF_PLUGIN(11113005, EAuthBiometric);
+DEF_PLUGIN(11113006, EAuthToken);
+DEF_PLUGIN(11113007, EAuthToken);
+DEF_PLUGIN(11113008, EAuthToken);
+DEF_PLUGIN(11113009, EAuthToken);
+
+#endif	/* T_PLUGIN_BASE_H */
+
Binary file authenticationservices/authenticationserver/test/tAuthSvr/scripts/SGL.GT0255.301_Test Spec Authentication Server.doc has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/batchfiles/post_postmarketplugin.bat	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,23 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+if exist \epoc32\data\epoc_temp.ini copy \epoc32\data\epoc_temp.ini \epoc32\data\epoc.ini
+if exist \epoc32\data\epoc_temp.ini del \epoc32\data\epoc_temp.ini
+
+rmdir /s /q \epoc32\winscw\c\sys
+rmdir /s /q \epoc32\winscw\c\resource\plugins
+
+REM deletes cloned client tauthsvr_1.exe (cloned using SETCAP)
+del \epoc32\winscw\c\sys\bin\tauthsvr_new.exe
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/batchfiles/post_tauthsvr.bat	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,20 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+if exist \epoc32\winscw\c\private\10202be9\persists\2001ea7f.cre del /s /f /q \epoc32\winscw\c\private\10202be9\persists\2001ea7f.cre
+
+REM deletes cloned client tauthsvr_1.exe (cloned using SETCAP)
+del \epoc32\winscw\c\sys\bin\tauthsvr_new.exe
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/batchfiles/post_tclientsidsupport.bat	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,19 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+del \epoc32\winscw\c\sys\bin\tauthsvr1.exe
+
+REM deletes cloned client tauthsvr_1.exe (cloned using SETCAP)
+del \epoc32\winscw\c\sys\bin\tauthsvr_new.exe
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/batchfiles/posttauthsvroom.bat	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,26 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+if exist \epoc32\data\z\resource\plugins\tauthplugin.rsc del /s /f /q \epoc32\data\z\resource\plugins\tauthplugin.rsc
+if exist \epoc32\release\winscw\udeb\z\resource\plugins\tauthplugin.rsc del /s /f /q \epoc32\release\winscw\udeb\z\resource\plugins\tauthplugin.rsc
+if exist \epoc32\release\winscw\udeb\z\resource\plugins\tauthplugin.rsc del /s /f /q \epoc32\release\winscw\udeb\z\resource\plugins\tauthplugin.rsc
+
+
+REM Restore tauthplugin.rsc after OOM tests
+
+rename \epoc32\data\z\resource\plugins\tauthplugin.rsc.backup tauthplugin.rsc 
+rename  \epoc32\release\winscw\udeb\z\resource\plugins\tauthplugin.rsc.backup tauthplugin.rsc
+rename \epoc32\release\winscw\urel\z\resource\plugins\tauthplugin.rsc.backup tauthplugin.rsc 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/batchfiles/pre_patchdata_negative.bat	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,17 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+copy \epoc32\data\epoc.ini \epoc32\data\epoc_temp.ini
+copy \epoc32\data\epoc_patchdatanegative.ini \epoc32\data\epoc.ini
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/batchfiles/pre_patchdata_positive.bat	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,17 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+copy \epoc32\data\epoc.ini \epoc32\data\epoc_temp.ini
+copy \epoc32\data\epoc_patchdatapositive.ini \epoc32\data\epoc.ini
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/batchfiles/pre_postmarketplugin.bat	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,17 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+copy \epoc32\data\epoc.ini \epoc32\data\epoc_temp.ini
+copy \epoc32\data\epoc_enablepostmarketplugin.ini \epoc32\data\epoc.ini
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/batchfiles/pretauthsvroom.bat	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,25 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+if exist \epoc32\winscw\c\private\10202be9\persists\2001ea7f.cre del /s /f /q \epoc32\winscw\c\private\10202be9\persists\2001ea7f.cre
+if exist \epoc32\data\z\resource\plugins\tauthplugin.rsc.backup del /s /f /q \epoc32\data\z\resource\plugins\tauthplugin.rsc.backup
+if exist \epoc32\release\winscw\udeb\z\resource\plugins\tauthplugin.rsc.backup del /s /f /q \epoc32\release\winscw\udeb\z\resource\plugins\tauthplugin.rsc.backup
+if exist \epoc32\release\winscw\urel\z\resource\plugins\tauthplugin.rsc.backup del /s /f /q \epoc32\release\winscw\urel\z\resource\plugins\tauthplugin.rsc.backup
+
+REM Rename tauthplugin.rsc to prevent loading of test plugins for OOM tests
+rename \epoc32\data\z\resource\plugins\tauthplugin.rsc tauthplugin.rsc.backup
+rename \epoc32\release\winscw\udeb\z\resource\plugins\tauthplugin.rsc tauthplugin.rsc.backup
+rename \epoc32\release\winscw\urel\z\resource\plugins\tauthplugin.rsc tauthplugin.rsc.backup
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/batchfiles/te_tauthsvr4_post1.bat	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,22 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+REM Remove the .cre file
+del /s /f /q \epoc32\winscw\c\private\10202be9\persists\2001ea7f.cre
+
+REM Restore the Cenrep file with the backup.
+copy \epoc32\winscw\c\tauth\tauthsvr\testdata\2001ea7f_backup.txt \epoc32\release\winscw\udeb\z\private\10202be9\2001ea7f.txt 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/batchfiles/te_tauthsvr4_pre1.bat	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,25 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+
+REM Create a backup of the existing AuthServer Cenrep file
+copy \epoc32\release\winscw\udeb\z\private\10202be9\2001ea7f.txt \epoc32\winscw\c\tauth\tauthsvr\testdata\2001ea7f_backup.txt
+
+REM Remove the .cre file
+del /s /f /q \epoc32\winscw\c\private\10202be9\persists\2001ea7f.cre
+
+REM Copy new initialisation file
+copy \epoc32\winscw\c\tauth\tauthsvr\testdata\cenrep1.txt \epoc32\release\winscw\udeb\z\private\10202be9\2001ea7f.txt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/batchfiles/te_tauthsvr4_pre2.bat	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,25 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+
+REM Create a backup of the existing AuthServer Cenrep file
+copy \epoc32\release\winscw\udeb\z\private\10202be9\2001ea7f.txt \epoc32\winscw\c\tauth\tauthsvr\testdata\2001ea7f_backup.txt
+
+REM Remove the .cre file
+del /s /f /q \epoc32\winscw\c\private\10202be9\persists\2001ea7f.cre
+
+REM Copy new initialisation file
+copy \epoc32\winscw\c\tauth\tauthsvr\testdata\cenrep2.txt \epoc32\release\winscw\udeb\z\private\10202be9\2001ea7f.txt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/batchfiles/te_tauthsvr4_pre3.bat	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,25 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+
+REM Create a backup of the existing AuthServer Cenrep file
+copy \epoc32\release\winscw\udeb\z\private\10202be9\2001ea7f.txt \epoc32\winscw\c\tauth\tauthsvr\testdata\2001ea7f_backup.txt
+
+REM Remove the .cre file
+del /s /f /q \epoc32\winscw\c\private\10202be9\persists\2001ea7f.cre
+
+REM Copy new initialisation file
+copy \epoc32\winscw\c\tauth\tauthsvr\testdata\cenrep3.txt \epoc32\release\winscw\udeb\z\private\10202be9\2001ea7f.txt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/performance_log_parser.pl	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,174 @@
+#
+# Copyright (c) 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: 
+# Script: performance_log_parser.pl
+#
+
+use strict;
+use FileHandle;
+
+my $Test_Case_Start_Tag = "script START_TESTCASE";
+my $Test_Case_End_Tag = "END_TESTCASE";
+my $Event_print = "PERFORMANCE_LOG_INFORMATION";
+my $Test_Case_Actual_Duration = "TEST_CASE_ACTUAL_DURATION";
+my $ScrEventCode = 1;
+
+my $defInputFile = "/epoc32/winscw/c/logs/testexecute/tauthsvr_performance.htm";
+my $defOutputFile = "/epoc32/winscw/c/logs/authsvr_performance.txt";
+
+sub millisec
+	{  
+	no warnings 'uninitialized';
+	my ($mytime) = @_ ;
+	$mytime =~ /([0-9]*):([0-9]*):([0-9]*):([0-9]*)$/;
+	my $milisec = $4;
+	my $sec = $3;
+	my $min = $2;
+	my $hour = $1;
+
+	my $msecs = ($milisec / 1000) + ($sec *1000) + ($min * 60000) + ($hour * 3600000);
+	return $msecs;
+	}
+
+sub process_log_file
+	{
+	my ($data_file, $output_FH) = @_;
+	print $output_FH "#Test Case Name,Actual Duration(ms),Result\n";
+	
+	# enable reading whole file as one chunk
+	my $SAVE_RS = $/;
+	undef $/;
+	
+	# open and read the log file in a single line
+	open(DAT, $data_file) || die("Could not open file $data_file!");
+	my $raw_data=<DAT>;
+	close(DAT);
+	$raw_data=~ s/\n/ /g;
+
+	# restore previous record separator
+	$/ = $SAVE_RS;	
+	
+	my $num_passed = 0;
+	my $num_failed = 0;
+	
+	while ($raw_data && $raw_data =~ /$Test_Case_Start_Tag\s+(\S+)/)
+		{
+		# step through the file in chunks delimited by the start/end test case tags.
+		
+		my $test_case_name = $1;
+		my ($test_case_data) = ($raw_data =~ /$Test_Case_Start_Tag(.*?)$Test_Case_End_Tag/);
+		
+		if (not $test_case_data)
+			{
+			print STDERR "Error: Test case: $test_case_name: Suspected missing END_TESTCASE tag.\n";
+			}
+		
+		($raw_data) = ($raw_data =~ /$Test_Case_End_Tag(.*)/);
+		($raw_data) = ($raw_data =~ /($Test_Case_Start_Tag.*)/) if $raw_data;
+		
+		#my ($max_duration) = ($test_case_data =~ /$Test_Case_Max_Duration,([0-9]+)/);
+		#if (!defined $max_duration)
+			#{
+			#$max_duration = 1000;
+			#}
+			
+		my $start_time = "0";
+		my $end_time = "0";
+		my $first = 1;
+		
+		while ($test_case_data and ($test_case_data =~ /$Event_print(.*)/) )
+			{
+			# get the event time. if this is the first time value in the chunk, it is the start time of the event.
+			#otherwise, continue until reaching the last time value.
+			my $start_log_msg = $1;
+		   
+			$start_log_msg =~ /,(.+?)\s(.*)/;
+			
+			if($first == 1)
+				{
+				$start_time = $1;
+				$first = 0;
+				}
+			else
+				{
+				$end_time = $1;
+				}
+	
+			$test_case_data = $2;
+			}	
+		
+		if(!($start_time eq "0") && !($end_time eq "0"))
+			{
+			my ($actual_duration) = ($test_case_data =~ /$Test_Case_Actual_Duration,([0-9]+)/);
+			#my $actual_duration = millisec($end_time) - millisec($start_time);
+			my $result;
+			if( $actual_duration)
+				{
+				$result = "Passed";
+				$num_passed += 1;
+				}
+						
+			print $output_FH "$test_case_name,$actual_duration,$result\n";	
+			}
+		}
+	print $output_FH (sprintf "\n\n%d tests failed out of %d\n", $num_failed, $num_passed+$num_failed);
+	}
+	
+	
+sub usage
+	{
+	print <<USAGE;
+usage:
+	performance_log_parser.pl <input_file> <output_file>
+
+	<input_file>: A log file to process 
+			(default- $defInputFile)
+
+	<out_file>: Final output file name 
+			(default- $defOutputFile)
+USAGE
+	}
+
+	
+sub Main
+	{
+	my @argv = @_;
+	# if input and output files are not provided, default ones will be used
+	my $input_file = $defInputFile;
+	my $output_file = $defOutputFile;
+	
+	if(@argv > 2)
+		{
+		usage;
+		exit;
+		}
+	elsif(@argv == 2)
+		{# input and output files are provided, don't use default ones
+		$input_file = shift @argv;
+		$output_file = shift @argv;
+		}
+	
+	my $outputFH = \*STDOUT; # results to STDOUT by default
+	
+	if (defined $output_file)
+		{
+		$outputFH = FileHandle->new;
+		$outputFH->open("> $output_file") or die "Error: File $output_file: $!";
+		}
+	process_log_file($input_file,$outputFH);
+
+	$outputFH->close;
+}
+
+Main(@ARGV);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/tAuthSvr.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,64 @@
+# Index of key values
+#iSupportsDefaultData 	- bool that defines if the chosen plugin supports default data
+#NumIdentities		- int that defines the expected number of identities that are registered on the server
+#pluginType		- 
+#isDefaultPlugin	- No longer in use. defaultPlugin is used instead
+#defaultPlugin		- string that defines which plugin to use as the default. Used to update the AuthServer policy file
+
+[Test0001]
+iSupportsDefaultData = true
+NumIdentities = 1
+pluginType = EAuthKnowledge
+#isDefaultPlugin = true
+defaultPlugin = PIN
+
+
+[Test0002]
+iSupportsDefaultData = true
+NumIdentities = 0
+pluginType = EAuthKnowledge
+#isDefaultPlugin = false
+#defaultPlugin = PIN
+
+[Test0003]
+iSupportsDefaultData = true
+NumIdentities = 0
+pluginType = EAuthBiometric
+isDefaultPlugin = true
+defaultPlugin = FINGER
+
+
+[Test0004]
+iSupportsDefaultData = false
+NumIdentities = 0
+pluginType = EAuthKnowledge
+#isDefaultPlugin = true
+defaultPlugin = PIN
+
+
+[Test0021]
+iSupportsDefaultData = true
+NumIdentities = 0
+pluginType = EAuthKnowledge
+defaultPlugin = PIN
+
+
+
+
+
+
+
+
+
+[Copied-Test1.1]
+SIS1 = c:\tswi\trevocation\data\ocsp_02.sis
+UID1 = 11112102
+FILE1.1 = c:\sys\bin\tswiusergrantable_all.exe
+#ocsp_uri = http://lon-sysbuild03.intra:19021/
+PerformRevocationCheck = false
+validationStatus = EValidatedToAnchor
+revocationStatus = EOcspNotPerformed
+isTrusted = false
+resultDate = 0
+lastCheckDate = 0
+sameDate = true
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/tAuthSvr.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,118 @@
+//
+// Copyright (c) 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: 
+//
+//
+// Copyright (c) 2009 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:
+//
+
+PRINT Authentication Server tests...
+
+LOAD_SUITE tAuthSvr -SharedData
+//Next line makes use of the new keyword that is more readable
+//LOAD_SERVER tAuthSvr -SharedData		
+
+
+//============================================================
+//
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0001
+//! @SYMTestCaseDesc Start the authServer with no identities, having a default plugin defined
+//! 		     (FirstStart1_Normal)
+//! @SYMREQ REQ , REQ , REQ , REQ 
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Identity API
+//! @SYMTestExpectedResults Default identity is the only one listed
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0001
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	FIRST_START	c:\tAuthSvr\scripts\tauthsvr.ini Test0001
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tAuthSvr\scripts\tauthsvr.ini Test0001
+END_TESTCASE SEC-AUT-AUTHSVR-0001 
+
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0002
+//! @SYMTestCaseDesc Start the authServer with no identities, having no default plugin defined
+//! 		     (FirstStart2_NoDefaultPlugin)
+//! @SYMREQ REQ , REQ , REQ , REQ 
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have no default plugin defined, use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Identity API.
+//! @SYMTestExpectedResults KErrServerTerminated is received when trying to call the Identities API
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0002
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	FIRST_START	c:\tAuthSvr\scripts\tauthsvr.ini Test0002
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tAuthSvr\scripts\tauthsvr.ini Test0002
+END_TESTCASE SEC-AUT-AUTHSVR-0002
+
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0003
+//! @SYMTestCaseDesc Start the authServer with no identities, having a default plugin defined which is a Biometric type
+//! 		     (FirstStart3_DefaultIsBiometricType)
+//! @SYMREQ REQ , REQ , REQ , REQ 
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is of Biometric type. use a client that has ReadDeviceData 
+//!			capability to connect to the AuthServer, call the Enumerate Identity API.
+//! @SYMTestExpectedResults KErrServerTerminated is received when trying to call the Identities API
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0003
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	FIRST_START	c:\tAuthSvr\scripts\tauthsvr.ini Test0003
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tAuthSvr\scripts\tauthsvr.ini Test0003
+END_TESTCASE SEC-AUT-AUTHSVR-0003
+
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0004
+//! @SYMTestCaseDesc Start the authServer with no identities, having a default plugin which does not support the returning of a default result
+//! 		     (FirstStart4_NoDefaultResult)
+//! @SYMREQ REQ , REQ , REQ , REQ 
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which returns a default result. 
+//! 			Use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Identity API
+//! @SYMTestExpectedResults KErrServerTerminated is received when trying to call the Identities API
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0004
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	FIRST_START	c:\tAuthSvr\scripts\tauthsvr.ini Test0004
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tAuthSvr\scripts\tauthsvr.ini Test0004
+END_TESTCASE SEC-AUT-AUTHSVR-0004
+
+
+//----------------------------------------------------------------------
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0005
+//! @SYMTestCaseDesc Attempt to register a new identity
+//! 		     (RegisterIdentity1_Normal)
+//! @SYMREQ REQ , REQ , REQ , REQ 
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which supports the returning of a default result. 
+//! 			Use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//! 			Call the RegisterNewUser API with a client that has WriteDeviceData then train the 1 existing active plugin
+//!			call the Enumerate Identity API
+//! @SYMTestExpectedResults KErrServerTerminated is received when trying to call the Identities API
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0005
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tAuthSvr\scripts\tauthsvr.ini Test0021
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tAuthSvr\scripts\tauthsvr.ini Test0021
+END_TESTCASE SEC-AUT-AUTHSVR-0005
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/tAuthSvr2.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,2059 @@
+# Index of key values
+#iSupportsDefaultData 	- bool that defines if the chosen plugin supports default data
+#NumIdentities		- int that defines the expected number of identities that are registered on the server
+#pluginType		- 
+#isDefaultPlugin	- No longer in use. defaultPlugin is used instead
+#defaultPlugin		- string that defines which plugin to use as the default. Used to update the AuthServer policy file
+#pluginId		- Hex string that is the uid of the Ecom implementation. In the Test0000 to Test0009, it's used as a cue, and is also the expected UserId
+#userResult		- Int that contains what the user has input on being prompted to 'identify', i.e. the PIN
+#			In cases where this is absent, then we're expecting the 'data' returned to be the same as the pluginId value (cueValue)
+#userId			- String that contains the expected Id
+
+#plugin1Id		- Hex string that is the uid of the Ecom implementation
+#			  	In the RetrainPlugin steps, this is the plugin that is to be trained.
+#plugin1Status		- Int that specifies the expected status of the above plugin 
+				(0, 64, 128 -EAuthUntrained, EAuthTrained, EAuthFullyTrained)
+#Pin11113100Default	- bool that defines whether the plugins support default data. Also Pin11113101Default and Pin11113102Default
+#Pin11113100Active	- bool that defines whether the plugin is active or not. Also Pin11113101Active, Pin11113102Active
+#Pin11113100InputId	- string that defines the input to the plugin. Else, the default is used. (in Identify function)
+#Pin11113100InputTrain	- string that defines the input to the plugin. Else, the default is used. (in Train function)
+#finalUserName 		- string that defines the new name (description or identitystring) of a given identity
+#retryRemove		- bool that defines whether the attempt to remove an identity is tried again in the same test step
+#freshness		- Int that defines the number of seconds(timeout) within which a cached identity is returned 
+				(Authentication is skipped)
+#forgetPlugin 		- Hex that specifies the plugin that is to be forgotten
+#forgetUnknown 		- Bool that if true means we're trying to forget an unknown identity
+
+[defaultplugin]
+default = 200032E5
+
+
+[Test0001]
+NumIdentities = 1
+pluginId = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100Default = true
+Pin11113101Default = false
+Pin11113102Default = false
+Pin11113100Active = true
+Pin11113101Active = true
+Pin11113102Active = true
+
+
+[Test0002]
+NumIdentities = 0
+pluginId = 11113100
+#EAuthFullyTrained
+plugin1Status = 1
+Pin11113100Default = false
+Pin11113101Default = false
+Pin11113102Default = false
+Pin11113100Active = true
+Pin11113101Active = true
+Pin11113102Active = true
+
+[Test0003]
+iSupportsDefaultData = true
+NumIdentities = 0
+pluginType = EAuthBiometric
+isDefaultPlugin = true
+defaultPlugin = FINGER
+Pin11113100Default = false
+Pin11113101Default = false
+Pin11113102Default = false
+Pin11113103Default = true
+Pin11113100Active = true
+Pin11113101Active = true
+Pin11113102Active = true
+Pin11113103Active = true
+
+[Test0004]
+iSupportsDefaultData = false
+NumIdentities = 0
+pluginType = EAuthKnowledge
+#isDefaultPlugin = true
+defaultPlugin = PIN
+Pin11113100Default = false
+Pin11113101Default = false
+Pin11113102Default = false
+Pin11113100Active = true
+Pin11113101Active = true
+Pin11113102Active = true
+
+[Test0021a]
+#iSupportsDefaultData = false
+pluginType = EAuthKnowledge
+defaultPlugin = PIN
+Pin11113100InputTrain = 2035
+Pin11113100Default = true
+Pin11113100Active = true
+#initUserName = SOMENAME
+finalUserName = NewNameOfId2
+
+[Test0021b]
+plugin1Id = 11113100
+Pin11113100InputId = 2035
+freshness = 0
+Pin11113100Default = true
+Pin11113100Active = true
+DisplayMessage = " Display String 1 "
+
+[Test0021c]
+NumIdentities = 2
+plugin1Id = 11113100
+plugin1Status = 64
+
+#==========================================================
+#Next section is what is according to the test spec
+[Test0022a]
+#iSupportsDefaultData = true
+#pluginType = EAuthKnowledge
+#defaultPlugin = PIN
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+Pin11113100InputId = 5110
+Pin11113101InputId = 5101
+Pin11113102InputId = 5102
+Pin11113100InputTrain = 5110
+Pin11113101InputTrain = 5101
+Pin11113102InputTrain = 5102
+Pin11113100Default = false
+Pin11113101Default = false
+Pin11113102Default = false
+Pin11113100Active = false
+Pin11113101Active = false
+Pin11113102Active = false
+finalUserName = NewNameOfId2
+
+
+[Test0022b]
+plugin1Id = 11113100
+Pin11113100InputId = 5110
+Pin11113100Default = false
+Pin11113101Default = false
+Pin11113102Default = false
+Pin11113100Active = false
+Pin11113101Active = false
+Pin11113102Active = false
+freshness = 0
+
+[Test0022c]
+NumIdentities = 2
+plugin1Id = 11113100
+#EAuthUnTrained
+plugin1Status = 1
+
+[Test0022-works]
+iSupportsDefaultData = true
+pluginType = EAuthKnowledge
+defaultPlugin = PIN
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthTrained
+plugin1Status = 64
+#Value below should be used.
+#plugin1Status = 128
+Pin11113100InputId = 5110
+Pin11113101InputId = 5101
+Pin11113102InputId = 5102
+Pin11113100InputTrain = 5110
+Pin11113101InputTrain = 5101
+Pin11113102InputTrain = 5102
+Pin11113100Default = true
+Pin11113101Default = true
+Pin11113102Default = true
+Pin11113100Active = true
+Pin11113101Active = true
+Pin11113102Active = true
+finalUserName = NewNameOfId2
+
+[Test0022-Unused]
+iSupportsDefaultData = true
+pluginType = EAuthKnowledge
+defaultPlugin = PIN
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthTrained
+plugin1Status = 64
+Pin11113100Default = false
+Pin11113101Default = false
+Pin11113102Default = false
+Pin11113100Active = false
+Pin11113101Active = false
+Pin11113102Active = false
+initUserName = SOMENAME
+finalUserName = NewNameOfId2
+
+#==========================================================
+[Test0023a]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthUnTrained
+plugin1Status = 1
+#Pin11113100InputId = 5110
+Pin11113100InputTrain = 5110
+Pin11113100Default = false
+Pin11113101Default = false
+Pin11113102Default = false
+Pin11113100Active = false
+Pin11113101Active = false
+Pin11113102Active = false
+DisplayMessage = "This is the second display message sent by the client to the plugin" 
+[Test0023b]
+plugin1Id = 11113100
+Pin11113100InputId = 5110
+Pin11113100Default = false
+Pin11113101Default = false
+Pin11113102Default = false
+Pin11113100Active = false
+Pin11113101Active = false
+Pin11113102Active = false
+
+
+[Test0023c]
+NumIdentities = 1
+plugin1Id = 11113100
+#EAuthUnTrained
+plugin1Status = 1
+
+[Test0023d]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullTrained
+plugin1Status = 128
+#Pin11113100InputId = 5110
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113101Default = true
+Pin11113102Default = true
+Pin11113100Active = true
+Pin11113101Active = true
+Pin11113102Active = true
+
+[Test0023e]
+NumIdentities = 2
+plugin1Id = 11113100
+#EAuthUnTrained
+plugin1Status = 128
+
+[Test0023f]
+plugin1Id = 11113100
+Pin11113100InputId = 5110
+Pin11113100Default = true
+Pin11113101Default = true
+Pin11113102Default = true
+Pin11113100Active = true
+Pin11113101Active = true
+Pin11113102Active = true
+#==========================================================
+[Test0024a]
+#This test expects the presence of plugin 10274104, else i'll need to supply the 3 properties for 11113101, input being 5101
+
+Pin11113100InputTrain = 5110
+Pin11113101InputTrain = 0000
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = true
+Pin11113101Active = true
+finalUserName = NewNameOfId2
+
+[Test0024b]
+plugin1Id = 11113100
+Pin11113100InputId = 5110
+Pin11113100Default = true
+Pin11113101Default = true
+Pin11113102Default = true
+Pin11113100Active = true
+Pin11113101Active = true
+Pin11113102Active = true
+
+[Test0024c]
+NumIdentities = 2
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 64
+
+[Test0024d]
+NumIdentities = 2
+plugin1Id = 11113101
+#EAuthTrained
+plugin1Status = 64
+
+#==========================================================
+[Test0025a]
+NumIdentities = 1
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 1
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = false
+Pin11113101Active = true
+
+[Test0025b]
+NumIdentities = 1
+plugin1Id = 11113101
+#EAuthUnTrained
+plugin1Status = 1
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = false
+Pin11113101Active = true
+
+[Test0025c]
+Pin11113100InputTrain = 5110
+Pin11113101InputTrain = Cancel
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = false
+Pin11113101Active = true
+
+[Test0025d]
+NumIdentities = 2
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 64
+
+[Test0025e]
+NumIdentities = 2
+plugin1Id = 11113101
+#EAuthUnTrained
+plugin1Status = 1
+
+[Test0025f]
+plugin1Id = 11113100
+Pin11113100InputId = 5110
+Pin11113100Default = true
+Pin11113100Active = true
+freshness = 0
+Pin11113101Default = false
+Pin11113101Active = true
+
+[Test0025g]
+plugin1Id = 11113101
+Pin11113101InputTrain = 5112
+Pin11113101Default = false
+Pin11113101Active = true
+
+[Test0025h]
+NumIdentities = 2
+plugin1Id = 11113101
+#EAuthTrained
+plugin1Status = 64
+
+[Test0025i]
+plugin1Id = 11113101
+Pin11113101InputId = 5112
+Pin11113101Default = false
+Pin11113101Active = true
+freshness = 0
+
+#=========================================
+[Test0026a]
+NumIdentities = 1
+#plugin1Id = 11113100
+#EAuthTrained
+#plugin1Status = 64
+Pin11113100InputTrain = 5110
+Pin11113101InputTrain = Quit
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = false
+Pin11113101Active = true
+
+[Test0026b]
+plugin1Id = 11113101
+Pin11113101InputId = 5110
+Pin11113101Default = false
+Pin11113101Active = true
+freshness = 0
+
+#=========================================
+[defaultplugin1]
+default = 11113100
+ 
+
+[Test0027a]
+#Requires the presence of only 3 plugins.
+NumIdentities = 1
+#The plugin below is for the pinAuthPlugin
+
+Pin11113100InputTrain = 0000
+Pin11113100Default = true
+Pin11113100Active = true 
+Pin11113101Active = false
+Pin11113102Active = false
+Pin11113103Active = false 
+Pin11113104Active = false 
+Pin200032E5Active = false
+
+[Test0027b]
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+NumIdentities = 1
+
+[Test0028a]
+#Requires the presence of only 3 plugins, or i can set the other plugins to use the 'cancel' code
+NumIdentities = 1
+#The plugin below is for the pinAuthPlugin
+#plugin1Id = 11113100
+#EAuthTrained
+#plugin1Status = 64
+Pin11113100InputTrain = Cancel
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101InputTrain = Cancel 
+Pin11113101Default = true
+Pin11113101Active = true 
+Pin11113102InputTrain = cancel
+Pin11113102Default = true
+Pin11113102Active = true
+Pin11113103Active = false 
+Pin11113104Active = false 
+Pin11113103Default = false 
+Pin11113104Default = false 
+Pin200032E5Active = false
+
+[Test0028b]
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+NumIdentities = 1
+
+[Test0041a]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+#Pin11113100InputId = 5110
+
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+
+[Test0041b]
+Pin11113100InputId = 5110
+plugin1Id = 11113100
+
+[Test0041c]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+#Pin11113100InputId = 5110
+Pin11113100InputTrain = 5118
+Pin11113100Default = true
+Pin11113100Active = true 
+
+[Test0041d]
+Pin11113100InputId = 5118
+plugin1Id = 11113100
+#================================
+[Test0042a]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+#Pin11113100InputId = 5110
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+
+[Test0042b]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputId = 51194
+Pin11113100InputTrain = 5118
+Pin11113100Default = true
+Pin11113100Active = true 
+
+
+[Test0043a]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+
+[Test0043b]
+plugin1Id = 11113100
+Pin11113100InputId = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+
+[Test0043c]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113188
+#EAuthUnTrained
+plugin1Status = 1
+Pin11113100InputId = 5110
+Pin11113100InputTrain = 5118
+Pin11113100Default = true
+Pin11113100Active = true 
+
+[Test0044a]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+Pin11113101InputTrain = 5111
+Pin11113101Default = true
+Pin11113101Active = true 
+
+
+[Test0044b]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+#Pin11113100InputId = 5110
+Pin11113100InputTrain = 5118
+Pin11113100Default = true
+Pin11113100Active = true 
+
+[Test0044c]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+#Pin11113100InputId = 5117
+Pin11113100InputTrain = 5116
+Pin11113100Default = true
+Pin11113100Active = true 
+#freshness = 0
+
+[Test0044d]
+plugin1Id = 11113100
+Pin11113100InputId = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+freshness = 0
+
+[Test0044e]
+plugin1Id = 11113100
+Pin11113100InputId = 5113823
+Pin11113100Default = true
+Pin11113100Active = true 
+freshness = 0
+
+#================================
+[Test0045a]
+NumIdentities = 2
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 64
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+Pin11113103Active = false 
+Pin11113104Active = false 
+Pin11113103Default = false 
+Pin11113104Default = false 
+
+[Test0045b]
+NumIdentities = 3
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 64
+Pin11113100InputTrain = 6110
+Pin11113100Default = true
+Pin11113100Active = true 
+Pin11113103Active = false 
+Pin11113104Active = false 
+Pin11113103Default = false 
+Pin11113104Default = false 
+
+[Test0045c]
+plugin1Id = 11113100
+Pin11113100InputId = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+Pin11113103Active = false 
+Pin11113104Active = false 
+Pin11113103Default = false 
+Pin11113104Default = false 
+freshness = 0
+
+[Test0045d]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 64
+Pin11113100InputId = 5110
+Pin11113100InputTrain = Cancel
+Pin11113100Default = true
+Pin11113100Active = true 
+Pin11113103Active = false 
+Pin11113104Active = false 
+Pin11113103Default = false 
+Pin11113104Default = false 
+
+
+#================================
+[Test0046a]
+NumIdentities = 2
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 64
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+
+[Test0046b]
+Pin11113100InputId = 5110
+plugin1Id = 11113100
+Pin11113100Default = true
+Pin11113100Active = true 
+freshness = 0
+
+[Test0046c]
+NumIdentities = 2
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 64
+Pin11113100InputTrain = Cancel
+Pin11113100Default = true
+Pin11113100Active = true 
+
+#================================
+[Test0047a]
+NumIdentities = 2
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 64
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+
+[Test0047b]
+Pin11113100InputId = 5110
+plugin1Id = 11113100
+Pin11113100Default = true
+Pin11113100Active = true 
+freshness = 0
+
+[Test0047c]
+NumIdentities = 2
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 64
+Pin11113100InputTrain = Quit
+Pin11113100Default = true
+Pin11113100Active = true
+
+#================================
+[Test0048a]
+NumIdentities = 2
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 64
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+Pin11113101InputTrain = 5111
+Pin11113101Default = true
+Pin11113101Active = true 
+
+[Test0048b]
+Pin11113100InputId = 5110
+plugin1Id = 11113100
+Pin11113100Default = true
+Pin11113100Active = true 
+freshness = 0
+
+[Test0048c]
+NumIdentities = 2
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputTrain = 51178
+Pin11113100Default = true
+Pin11113100Active = true
+
+[Test0048d]
+Pin11113100InputId = 51178
+Pin11113101InputId = 0000
+plugin1Id = 11113100
+Pin11113100Default = true
+Pin11113100Active = true 
+freshness = 0
+
+[Test0048e]
+NumIdentities = 2
+plugin1Id = 11113101
+#EAuthFullyTrained
+plugin1Status = 64
+Pin11113101InputTrain = 51175
+Pin11113101Default = true
+Pin11113101Active = true 
+
+[Test0048f]
+Pin11113101InputId = 0000
+plugin1Id = 11113101
+Pin11113101Default = true
+Pin11113101Active = true 
+freshness = 0
+
+#================================
+[Test0061a]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 64
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = false
+Pin11113101Active = false
+
+[Test0061b]
+NumIdentities = 2
+plugin1Id = 11113101
+#EAuthUnTrained
+plugin1Status = 1
+
+[Test0061Ta]
+plugin1Id = 11113100
+Pin11113100InputId = 0000
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = false
+Pin11113101Active = false
+freshness = 0
+
+[Test0061c]
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101InputTrain = 5111
+Pin11113101Active = true
+freshness = 60
+plugin1Id = 11113101
+#EAuthTrained
+plugin1Status = 1
+
+[Test0061d]
+plugin1Id = 11113101
+#EAuthTrained
+plugin1Status = 1
+
+[Test0061Tb]
+plugin1Id = 11113100
+Pin11113100InputId = 5110
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = false
+Pin11113101Active = false
+freshness = 0
+
+[Test0061e]
+Pin11113100InputId = 0000
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101InputTrain = 5112
+Pin11113101Active = true
+freshness = 60
+plugin1Id = 11113101
+#EAuthFullyTrained
+plugin1Status = 64
+
+[Test0061f]
+plugin1Id = 11113101
+#EAuthFullyTrained
+plugin1Status = 64
+
+
+#================================
+[Test0062a]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 64
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = false
+Pin11113101Active = false
+#freshness = 0
+
+[Test0062b]
+NumIdentities = 2
+plugin1Id = 11113100
+#EAuthUnTrained
+plugin1Status = 128
+
+[Test0062c]
+NumIdentities = 2
+plugin1Id = 11113101
+#EAuthUnTrained
+plugin1Status = 1
+
+[Test0062d]
+plugin1Id = 11113100
+Pin11113100InputId = 7737373737
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = false
+Pin11113101Active = false
+freshness = 0
+
+[Test0062e]
+plugin1Id = 11113101
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101InputTrain = 5111
+Pin11113101Default = false
+Pin11113101Active = true
+
+[Test0062f]
+plugin1Id = 11113101
+#EAuthUnTrained
+plugin1Status = 1
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = false
+Pin11113101Active = true
+
+#================================
+[Test0063a]
+NumIdentities = 2
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 64
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = false
+Pin11113101Active = false
+
+[Test0063b]
+plugin1Id = 11113100
+Pin11113100InputId = 5110
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = false
+Pin11113101Active = false
+freshness = 0
+
+[Test0063c]
+plugin1Id = 11113888
+Pin11113100Default = true
+Pin11113100Active = true
+#Pin11113101InputTrain = 6111
+Pin11113101Default = false
+Pin11113101Active = false
+
+#================================
+[Test0065a]
+NumIdentities = 2
+plugin1Id = 11113100
+plugin1Status = 64
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = true
+Pin11113101Active = true
+
+
+[Test0065b]
+plugin1Id = 11113100
+Pin11113100InputId = 5110
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = true
+Pin11113101Active = true
+freshness = 0
+
+[Test0065c]
+plugin1Id = 11113101
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101InputTrain = 0000
+Pin11113101Default = true
+Pin11113101Active = true
+
+#================================
+[Test0066a]
+NumIdentities = 2
+plugin1Id = 11113100
+plugin1Status = 64
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = false
+Pin11113101Active = false
+
+
+[Test0066b]
+plugin1Id = 11113100
+Pin11113100InputId = 5110
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = false
+Pin11113101Active = false
+freshness = 0
+
+[Test0066c]
+plugin1Id = 11113101
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101InputTrain = CancEL
+Pin11113101Default = false
+Pin11113101Active = true
+
+#================================
+[Test0067a]
+NumIdentities = 2
+plugin1Id = 11113100
+plugin1Status = 64
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = false
+Pin11113101Active = false
+
+[Test0067b]
+plugin1Id = 11113100
+Pin11113100InputId = 5110
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = false
+Pin11113101Active = false
+freshness = 0
+
+[Test0067c]
+plugin1Id = 11113101
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101InputTrain = QUit
+Pin11113101Default = false
+Pin11113101Active = true
+
+#==============================
+[AuthTestRegister]
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+Pin11113101InputTrain = 5111
+Pin11113101Default = true
+Pin11113101Active = true 
+Pin11113102InputTrain = 5112
+Pin11113102Default = true
+Pin11113102Active = true 
+Pin11113103InputTrain = 5113
+Pin11113103Default = true
+Pin11113103Active = true 
+Pin11113104InputTrain = 5114
+Pin11113104Default = true
+Pin11113104Active = true 
+
+#==============================
+
+[Test0081b]
+plugin1Id = 11113100 & 11113101
+Pin11113100Active = true 
+Pin11113100InputId = 5110
+Pin11113101Active = true 
+Pin11113101InputId = 5111
+freshness = 0
+
+#==============================
+
+[Test0082b]
+plugin1Id = 11113100 & 11113101
+Pin11113100Active = true 
+Pin11113100InputId = 5110
+Pin11113101Active = true 
+# fail - wrong pin
+Pin11113101InputId = 6666
+freshness = 0
+
+[Test0082c]
+plugin1Id = 11113100 | 11113101 
+Pin11113100Active = true 
+Pin11113100InputId = 6666
+Pin11113101Active = true 
+Pin11113101InputId = 5111
+freshness = 0
+
+[Test0082d]
+plugin1Id = 11113100 | 11113101 
+Pin11113100Active = true 
+Pin11113100InputId = 5110
+Pin11113101Active = true 
+# fail - wrong pin
+Pin11113101InputId = 6666
+freshness = 0
+
+[Test0082e]
+plugin1Id = 11113100 | 11113101 
+Pin11113100Active = true 
+# fail - wrong pin
+Pin11113100InputId = 937474
+Pin11113101Active = true 
+# fail - wrong pin
+Pin11113101InputId = 6666
+freshness = 300
+#==============================
+
+[Test0083b]
+plugin1Id = 11113100 | 11113101 | 11113102
+Pin11113100Active = false 
+Pin11113100InputId = 5110
+Pin11113101Active = false 
+Pin11113101InputId = 5111
+Pin11113102Active = false 
+Pin11113102InputId = 5112
+freshness = 0
+
+#==============================
+
+[Test0084b]
+plugin1Id = 11113100 & 11113101
+Pin11113100Active = true 
+Pin11113100InputId = 5110
+Pin11113101Active = true 
+Pin11113101InputId = 5111
+freshness = 0
+
+[Test0084c]
+plugin1Id = 11113100 & 11113101
+Pin11113100Active = true 
+Pin11113100InputId = 5110
+Pin11113101Active = true 
+Pin11113101InputId = 5111
+freshness = 0
+clientSpecificKey = true
+
+[Test0084d]
+plugin1Id = 11113100 & 11113101
+Pin11113100Active = true 
+#Pin11113100InputId = 5110
+Pin11113101Active = true 
+#Pin11113101InputId = 5111
+freshness = 60
+clientSpecificKey = true
+#==============================
+
+[Test0086b]
+
+# set prefs
+KnowledgePref = 11113100
+BiometricPref = 11113103
+TokenPref     = 11113104
+# auth using prefs
+Pin11113100Active = true 
+Pin11113100InputId = 5110 
+Pin11113103Active = true 
+Pin11113103InputId = 5113
+Pin11113104Active = true 
+Pin11113104InputId = 5114 
+plugin1Id = B & K & T
+freshness=0
+
+[Test0086c]
+plugin1Id = B & K & T
+Pin11113100Active = false 
+Pin11113100InputId = 5110
+Pin11113103Active = false 
+Pin11113103InputId = 5113
+Pin11113104Active = false 
+Pin11113104InputId = 5114
+freshness = 300
+
+#==============================
+
+[Test0087b]
+
+# set prefs
+KnowledgePref = 11113100
+BiometricPref = 11113103
+TokenPref     = 11113104
+# auth using prefs
+Pin11113100Active = true 
+Pin11113100InputId = 5110 
+Pin11113103Active = false
+Pin11113103InputId = 5113
+Pin11113104Active = true
+Pin11113104InputId = 5114
+plugin1Id = B
+freshness=0
+
+[Test0087c]
+plugin1Id = K
+Pin11113100Active = false 
+Pin11113100InputId = 5110
+Pin11113103Active = true 
+Pin11113103InputId = 5113
+Pin11113104Active = true 
+Pin11113104InputId = 5114
+freshness = 0
+
+[Test0087d]
+plugin1Id = T
+Pin11113100Active = true
+Pin11113100InputId = 5110
+Pin11113103Active = true 
+Pin11113103InputId = 5113
+Pin11113104Active = false
+Pin11113104InputId = 5114
+freshness = 0
+
+==============================
+[Test0088b]
+
+# set prefs
+KnowledgePref = 11113100
+BiometricPref = 11113103
+TokenPref     = 11113104
+# auth using prefs
+Pin11113100Active = false
+Pin11113103Active = true
+Pin11113103InputId = 5113
+Pin11113104Active = false
+plugin1Id = K | B 
+freshness=0
+
+[Test0088c]
+Pin11113100Active = false
+Pin11113103Active = true
+Pin11113103InputId = 5113
+Pin11113104Active = false
+plugin1Id = K | B 
+freshness=300
+
+#==============================
+
+[Test0089b]
+plugin1Id = 11113100 & 11113101
+Pin11113100Active = true 
+Pin11113100InputId = 5110
+Pin11113101Active = true 
+Pin11113101InputId = 5111
+freshness = 0
+
+[Test0089c]
+plugin1Id = 11113100 & 11113101
+Pin11113100Active = false 
+Pin11113101Active = false
+Pin11113102Active = false
+freshness = 300
+
+#==============================
+
+[Test0092b]
+plugin1Id = 11113100 | 11113101
+Pin11113100Active = true 
+Pin11113100InputId = 5055
+Pin11113101Active = true 
+Pin11113101InputId = 5055
+freshness = 0
+
+#==============================
+
+[Test0093b]
+plugin1Id = 11113101 | 11113102
+Pin11113100Active = true 
+Pin11113100InputId = 5055
+Pin11113101Active = true 
+Pin11113101InputId = 5055
+Pin11113102Active = true 
+Pin11113102InputId = 5112
+freshness = 0
+
+[Test0093c]
+plugin1Id = 11113100 & 11113101
+Pin11113100Active = true 
+Pin11113100InputId = 505446
+Pin11113101Active = true 
+Pin11113101InputId = 507744
+Pin11113102Active = true 
+#Pin11113102InputId = 549383
+freshness = 300
+#==============================
+[Test0101a]
+NumIdentities = 2
+plugin1Id = 11113100
+#EAuthFullyTrained
+#plugin1Status = 64
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+Pin11113101InputTrain = 5111
+Pin11113101Default = true
+Pin11113101Active = true 
+
+[Test0101b]
+Pin11113101InputId = 5111
+plugin1Id = 11113101
+freshness = 0
+plugin1Status = 1
+
+[Test0101c]
+NumIdentities = 1
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 64
+Pin11113100InputId = 5110
+Pin11113100InputTrain = 51178
+Pin11113100Default = true
+Pin11113100Active = true
+#freshness = 0
+
+[Test0101d]
+Pin11113101InputId = 5111
+plugin1Id = 11113101
+freshness = 0
+
+#==============================
+[Test0102a]
+Pin11113101InputId = 0000
+plugin1Id = 11113100
+freshness = 0
+
+[Test0102b]
+plugin1Id = 11113100
+Pin11113100InputId = 0000
+Pin11113100Default = true
+Pin11113100Active = true
+
+[Test0102c]
+plugin1Id = 11113100
+NumIdentities = 1
+plugin1Status = 128
+
+#==============================
+[Test0103a]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 64
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+Pin11113101InputTrain = 5111
+Pin11113101Default = true
+Pin11113101Active = true 
+
+[Test0103b]
+Pin11113101InputId = 377377377
+plugin1Id = 11113101
+freshness = 0
+
+[Test0103c]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputId = 5110
+#Pin11113100InputTrain = 51178
+Pin11113100Default = true
+Pin11113100Active = true
+freshness = 0
+retryRemove = true
+
+#==============================
+[Test0104a]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 64
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+Pin11113101InputTrain = 5111
+Pin11113101Default = true
+Pin11113101Active = true 
+
+[Test0104b]
+Pin11113101InputId = 773737
+plugin1Id = 11113101
+freshness = 0
+
+[Test0104c]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputId = 51178
+#Pin11113100InputTrain = 51178
+Pin11113100Default = true
+Pin11113100Active = true
+freshness = 0
+
+#==============================
+[Test0105a]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 64
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+Pin11113101InputTrain = 5111
+Pin11113101Default = true
+Pin11113101Active = true 
+
+[Test0105b]
+NumIdentities = 3
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 64
+Pin11113100InputTrain = 6110
+Pin11113100Default = true
+Pin11113100Active = true 
+Pin11113101InputTrain = 6111
+Pin11113101Default = true
+Pin11113101Active = true 
+
+[Test0105c]
+Pin11113101InputId = 37777733
+plugin1Id = 11113101
+freshness = 0
+
+[Test0105d]
+NumIdentities = 3
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputId = 5110
+Pin11113100Default = true
+Pin11113100Active = true
+freshness = 0
+retryRemove = true
+
+
+#==============================
+[Test0121a]
+#iSupportsDefaultData = true
+plugin1Id = 11113100 & 11113101
+Pin11113100InputId = 5110
+Pin11113101InputId = 6110
+freshness = 0
+Pin11113100Default = true
+Pin11113101Active = true
+Pin11113100Active = true
+
+[Test0121b]
+NumIdentities = 2
+Pin11113100Active = true
+Pin11113100InputTrain = 5110
+Pin11113101Active = true
+Pin11113101InputTrain = 6110
+
+[Test0121c]
+forgetPlugin = 11113100
+
+[Test0121d]
+
+NumIdentities = 2
+plugin1Id = 11113100
+Pin11113100Active = true
+Pin11113100InputId = 5110
+freshness = 0
+
+[Test0122a]
+#iSupportsDefaultData = true
+plugin1Id = 11113100
+Pin11113100InputId = 5110
+freshness = 0
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Active = false
+Pin11113102Active = false
+Pin11113103Active = false
+Pin11113104Active = false
+Pin200032E5Active = false
+
+[Test0122b]
+NumIdentities = 2
+Pin11113100Active = true
+Pin11113100InputTrain = 5110
+Pin11113101Active = false
+Pin11113102Active = false
+Pin11113103Active = false
+Pin11113104Active = false
+Pin200032E5Active = false
+
+[Test0122c]
+forgetPlugin = 11113100
+Pin11113100Active = true
+Pin11113101Active = false
+Pin11113102Active = false
+Pin11113103Active = false
+Pin11113104Active = false
+Pin200032E5Active = false
+
+[Test0123a]
+#iSupportsDefaultData = true
+plugin1Id = 11113100 & 11113102
+Pin11113100InputId = 5110
+Pin11113102InputId = 6220
+freshness = 0
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Active = false
+Pin11113102Active = true
+
+[Test0123b]
+NumIdentities = 2
+Pin11113100Active = true
+Pin11113100InputTrain = 5110
+Pin11113102Active = true
+Pin11113102InputTrain = 6220
+Pin11113101Active = false
+
+[Test0123c]
+forgetPlugin = 11113101
+Pin11113100Active = true
+Pin11113101Active = true
+Pin11113102Active = true
+
+[Test0124a]
+#iSupportsDefaultData = true
+plugin1Id = 11113100 & 11113102
+Pin11113100InputId = 5110
+Pin11113102InputId = 6220
+freshness = 0
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Active = false
+Pin11113102Active = true
+
+[Test0124b]
+NumIdentities = 2
+Pin11113100Active = true
+Pin11113100InputTrain = 5110
+Pin11113102Active = true
+Pin11113102InputTrain = 6220
+Pin11113101Active = false
+
+[Test0124c]
+forgetPlugin = ffffffff
+Pin11113100Active = true
+Pin11113101Active = true
+Pin11113102Active = true
+
+[Test0125]
+forgetPlugin = 11113100
+forgetUnknown = true
+Pin11113100Active = true
+Pin11113100Default = true
+Pin11113101Active = true
+Pin11113102Active = true
+#iSupportsDefaultData = true
+
+#==========================================
+[Test0141]
+Pin11113100InputId = 5000
+Pin11113100InputTrain = 5000
+Pin11113100Default = true
+Pin11113100Active = true 
+Pin11113103InputId = 5003
+Pin11113103InputTrain = 5003
+Pin11113103Default = true
+Pin11113103Active = true 
+Pin11113104InputId = 5004
+Pin11113104InputTrain = 5004
+Pin11113104Default = true
+Pin11113104Active = true 
+plugin1Id = B & K & T
+KnowledgePref = 11113100
+BiometricPref = 11113103
+TokenPref     = 11113104
+
+[Test0142]
+Pin11113100InputId = 5000
+Pin11113100InputTrain = 5000
+Pin11113100Default = true
+Pin11113100Active = true 
+Pin11113103InputId = 5003
+Pin11113103InputTrain = 5003
+Pin11113103Default = true
+Pin11113103Active = true 
+Pin11113104InputId = 5004
+Pin11113104InputTrain = 5004
+Pin11113104Default = true
+Pin11113104Active = true 
+plugin1Id = B & K & T
+KnowledgePref = 11113100
+BiometricPref = 11113101
+TokenPref     = 11119999
+
+[Test0143]
+Pin11113100InputId = 5000
+Pin11113100InputTrain = 5000
+Pin11113100Default = true
+Pin11113100Active = true 
+Pin11113101InputId = 5001
+Pin11113101InputTrain = 5001
+Pin11113101Default = true
+Pin11113101Active = true 
+Pin11113102InputId = 5002
+Pin11113102InputTrain = 5002
+Pin11113102Default = true
+Pin11113102Active = true 
+Pin11113103InputId = 5003
+Pin11113103InputTrain = 5003
+Pin11113103Default = true
+Pin11113103Active = true 
+plugin1Id = B & K & T
+KnowledgePref = 11113103
+BiometricPref = 11113101
+TokenPref     = 11113102
+
+
+#-----------------------------------------------
+#Authentication via Aliases test cases.
+
+[Test0166]
+alias = strong
+aliasString0 = fast & medium | weak
+aliasString1 =
+aliasString2 =
+aliasString3 = 11113100
+freshness = 0
+
+[Test0170]
+alias = strong
+aliasString0 = fast & medium | weak
+aliasString1 = ""
+aliasString2 = ""
+aliasString3 =
+freshness = 0
+
+[Test0171]
+alias = strong
+aliasString0 = fast & sometext | weak
+aliasString1 = 11113100
+aliasString2 = 11113101
+aliasString3 = 11113102
+freshness = 0
+
+[Test0172]
+alias = strong
+aliasString0 = fast + medium | weak
+aliasString1 = 11113100
+aliasString2 = 11113101
+aliasString3 = 11113102
+freshness = 0
+
+[Test0173]
+alias = strong
+aliasString0 = fast & medium | weak
+aliasString1 = 11113101
+aliasString2 = 11113102
+aliasString3 = 11113100
+synchronous = true
+
+[Test0174]
+Pin11113101Active = true 
+Pin11113101InputId = 6111
+alias = strong
+aliasString0 = (fast) & (medium) | (weak)
+aliasString1 = 11113101
+aliasString2 = 11113102
+aliasString3 = 11113100
+freshness = 0
+
+[Test0175]
+Pin11113101Active = true 
+Pin11113101InputId = 6111
+alias = strong
+aliasString0 = fast | weak
+aliasString1 = medium & weak
+aliasString2 = (11113101 & 11113102) | weak
+aliasString3 = 11113100
+freshness = 0
+
+[Test0176]
+Pin11113103Active = true 
+Pin11113103InputId = 6113
+alias = strong
+aliasString0 = medium | ((weak & fast) | 11113103)
+aliasString1 = 11113103 & 11113100
+aliasString2 = 11113100
+aliasString3 = 11113100 | 11113103
+freshness = 0
+
+[Test0177]
+Pin11113100Active = true 
+Pin11113100InputId = 5110
+Pin11113101Active = true 
+Pin11113101InputId = 5111
+Pin11113102Active = true 
+Pin11113102InputId = 5112
+alias = strong
+aliasString0 = fast & medium
+aliasString1 = medium | 11113100
+aliasString2 = weak & 11113101
+aliasString3 = strong & 11113102
+freshness = 0
+
+[Test0178]
+alias = strong
+aliasString0 = strong & medium
+aliasString1 = 11113100
+aliasString2 = strong & 11113101
+aliasString3 = 11113102
+freshness = 0
+
+[Test0179]
+alias = unknownalias
+aliasString0 = fast & medium
+aliasString1 = 11113100
+aliasString2 = 11113101
+aliasString3 = 11113102
+freshness = 0
+synchronous = true
+
+[Test0180]
+Pin11113101Active = true 
+Pin11113101InputId = 6111
+Pin11113102Active = true 
+Pin11113102InputId = 6112
+alias = strong
+aliasString0 = fast | weak
+aliasString1 = medium & weak
+aliasString2 = (11113101 & 11113100) | weak
+aliasString3 = 11113102
+freshness = 0
+synchronous = true
+
+[Test0183]
+alias = strong
+aliasCount = -2
+
+[Test0184]
+alias = strong
+aliasCount = 0
+
+#-------------------------------------------------------------------
+
+
+[Test0156]
+Pin11113102InputTrain = 5112
+Pin11113102Default = true
+Pin11113102Active = true 
+
+[Test0157]
+plugin1Id = 11113102
+Pin11113102Active = true 
+Pin11113102InputId = 5114
+freshness = 0
+
+
+[Test0158]
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+
+[Test0159]
+plugin1Id = 11113100
+Pin11113100Active = true 
+Pin11113100InputId = 5110
+freshness = 0
+
+[Test0160]
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+plugin1Id = 11113100
+Pin11113100Active = true 
+Pin11113100InputId = 5110
+freshness = 0
+stop = FALSE 
+
+[Test0161]
+Pin11113101InputTrain = 5111
+Pin11113101Default = true
+plugin1Id = 11113101
+Pin11113101Active = true 
+Pin11113101InputId = 5112
+freshness = 0
+
+[Test0162]
+Pin11113102InputTrain = 5112
+Pin11113102Default = true
+plugin1Id = 11113102
+Pin11113102Active = true 
+Pin11113102InputId = 5112
+deauth = 1
+freshness = 0
+stop = FALSE 
+
+#-------------------------------------------------------------------
+[defidentity1]
+plugin1Id = 00000
+Pin11113100InputId = 0000
+defaultpluginusage = true
+
+[defidentity2]
+plugin1Id = 00000
+Pin11113100InputId = 0000
+defaultpluginusage = true
+synchnronous = true
+
+[defidentity3]
+plugin1Id = 00000
+Pin11113100InputId = 0001
+defaultpluginusage = true
+
+[defidentity4]
+plugin1Id = 00000
+Pin11113100InputId = 0001
+defaultpluginusage = true
+synchronous = true
+
+[defaultplugin2]
+default = 11113101
+
+[defidentity5]
+iSupportsDefaultData = false
+plugin1Id = 00000
+Pin11113101InputId = 0000
+defaultpluginusage = true
+synchronous = true
+
+[defaultplugin3]
+iSupportsDefaultData = false
+plugin1Id = 00000
+Pin11113101InputId = 0000
+defaultpluginusage = true
+synchronous = true
+
+[defaultplugin4]
+plugin1Id = 11113101
+Pin11113101InputTrain = 5112
+Pin11113101Default = true
+Pin11113101Active = true
+
+[defidentity6]
+Pin11113101InputId = 0000
+plugin1Id = 11113101
+freshness = 0
+plugin1Status = 1
+
+[defidentity7]
+forgetPlugin = 11113101
+Pin11113101Active = true
+Pin11113101Default = true
+
+
+[defidentity8]
+alias =
+Pin11113100InputId = 0000
+defaultpluginusage = true
+
+[defidentity9]
+alias =
+Pin11113100InputId = 0000
+defaultpluginusage = true
+synchronous = true
+
+
+[defidentity10]
+alias =
+Pin11113100InputId = 0001
+defaultpluginusage = true
+
+[defidentity11]
+alias =
+Pin11113100InputId = 0001
+defaultpluginusage = true
+synchronous = true
+
+######################
+# Sections for Reset Identity Tests #
+######################
+[RegisterId]
+defaultPlugin = PIN
+IdentityString=AmazingUser
+Pin11113100InputTrain = 420
+Pin11113100Active = true
+Pin11113101Active = false
+Pin11113102Active = false
+
+[RegisterIdLotsOfPlugins]
+defaultPlugin = PIN
+IdentityString=AmazingUser
+Pin11113100Active = true
+Pin11113100InputTrain = 420
+Pin11113101Active = true
+Pin11113101InputTrain = 421
+Pin11113102Active = true
+Pin11113102InputTrain = 422
+Pin11113103Active = true
+Pin11113103InputTrain = 423
+Pin11113104Active = true
+Pin11113104InputTrain = 424
+
+[ResetIdAll]
+ResetType=ResetAll
+IdentityString=AmazingUser
+RegistrationData=1234
+
+[AuthPinPlugin]
+# For post reset authenticate
+plugin1Id = 200032E5
+Pin200032E5Active = true
+pinvalue = 1234
+freshness = 0
+
+[AuthPinPluginOldPin]
+plugin1Id = 200032E5
+Pin200032E5Active = true
+freshness = 0
+
+[AuthPlugin11113100OldPin]
+plugin1Id = 11113100
+Pin11113100Active = true
+Pin11113100InputId = 420
+freshness = 0
+
+[AuthPlugin11113100]
+plugin1Id = 11113100
+Pin11113100Active = true
+Pin11113100InputId = 1234
+freshness = 0
+
+[AuthPluginResetNoReTrainOldPin]
+plugin1Id = 11113101
+Pin11113101Active = true
+Pin11113101InputId = 421
+freshness = 0
+
+[AuthPluginResetNoReTrain]
+plugin1Id = 11113101
+Pin11113101Active = true
+Pin11113101InputId = 1234
+freshness = 0
+
+[AuthPluginResetUnsupOldPin]
+plugin1Id = 11113102
+Pin11113102Active = true
+Pin11113102InputId = 422
+freshness = 0
+
+[AuthPluginResetUnsup]
+plugin1Id = 11113102
+Pin11113102Active = true
+Pin11113102InputId = 1234
+freshness = 0
+
+[AuthPluginBiometricOldPin]
+plugin1Id = 11113103
+Pin11113103Active = true
+Pin11113103InputId = 423
+freshness = 0
+
+[AuthPluginBiometric]
+plugin1Id = 11113103
+Pin11113103Active = true
+Pin11113103InputId = 1234
+freshness = 0
+
+[AuthPluginTokenOldPin]
+plugin1Id = 11113104
+Pin11113104Active = true
+Pin11113104InputId = 424
+freshness = 0
+
+[AuthPluginToken]
+plugin1Id = 11113104
+Pin11113104Active = true
+Pin11113104InputId = 1234
+freshness = 0
+
+[ResetIdAllMissingUser]
+ResetType=ResetAll
+IdentityString=MoreAmazingUser
+RegistrationData=1234
+
+[ResetIdAllInvalidUser]
+ResetType=ResetAll
+IdentityString=
+RegistrationData=1234
+
+[ResetIdTypeInvalidUser]
+ResetType=ResetByType
+PluginType=EAuthKnowledge
+IdentityString=
+RegistrationData=1234
+
+[ResetIdListInvalidUser]
+ResetType=ResetByList
+IdentityString=
+PluginCount=1
+PluginId0=200032E5
+RegistrationData0=1234
+
+[ResetIdListNoPlugins]
+ResetType=ResetByList
+IdentityString=AmazingUser
+PluginCount=0
+
+[ResetIdListCountMismatch]
+ResetType=ResetByList
+IdentityString=AmazingUser
+PluginCount=-1
+
+[ResetIdTypeKnowledge]
+ResetType=ResetByType
+PluginType=EAuthKnowledge
+IdentityString=AmazingUser
+RegistrationData=1234
+
+[ResetIdTypeBiometric]
+ResetType=ResetByType
+PluginType=EAuthBiometric
+IdentityString=AmazingUser
+RegistrationData=1234
+
+[ResetIdListPinPlugin]
+ResetType=ResetByList
+IdentityString=AmazingUser
+PluginCount=1
+PluginId0=200032E5
+RegistrationData0=1234
+
+[ResetIdListInvalidUser]
+ResetType=ResetByList
+IdentityString=MoreAmazingUser
+PluginCount=1
+PluginId0=200032E5
+RegistrationData0=1234
+
+[ResetIdListUnsupPlugin]
+ResetType=ResetByList
+IdentityString=AmazingUser
+PluginCount=1
+PluginId0=11113102
+RegistrationData0=1234
+
+[ResetIdListBiometricPlugin]
+ResetType=ResetByList
+IdentityString=AmazingUser
+PluginCount=1
+PluginId0=11113103
+RegistrationData0=1234
+
+[Test0193]
+alias = 11113100 & ( weak | strong )
+aliasString0 = fast & medium | weak
+aliasString1 = 11113101
+aliasString2 = 11113102
+aliasString3 = 11113100
+synchronous = true
+
+[Test0194]
+alias = 11113333 | ( Knowledge & Biometric & Token )
+aliasString0 = fast & medium | weak
+aliasString1 = 11113101
+aliasString2 = 11113102
+aliasString3 = 11113100
+synchronous = true
+KnowledgePref = 11113100
+BiometricPref = 11113103
+TokenPref     = 11113104
+
+[Test0195]
+alias = ( 11113100 & ( weak | strong )
+aliasString0 = fast & medium | weak
+aliasString1 = 11113101
+aliasString2 = 11113102
+aliasString3 = 11113100
+synchronous = true
+
+[Test0196]
+alias = 11113333 | Knoledge
+synchronous = true
+KnowledgePref = 11113100
+BiometricPref = 11113103
+TokenPref     = 11113104
+
+
+
+[Test0197]
+defaultPlugin = PIN
+IdentityString=AmazingUser
+Pin11113100InputTrain = 420
+Pin11113100Active = true
+Pin11113101Active = false
+Pin11113102Active = false
+
+[Test0198]
+plugin1Id = 11113100
+Pin11113100Active = true 
+Pin11113100InputId = 420
+
+[time]
+time = 0
+
+[time1]
+time = 600
+
+[Test0199]
+plugin1Id = 11113100
+Pin11113100Active = true 
+Pin11113100InputId = 1234
+freshness = 300
+
+
+[Test0200]
+Pin11113101InputTrain = 5112
+Pin11113101Default = true
+Pin11113101Active = true 
+
+[Test0201]
+plugin1Id = 11113101
+Pin11113101Active = true 
+Pin11113101InputId = 5112
+
+[time2]
+time = -600
+
+[Test0202]
+plugin1Id = 11113101
+Pin11113101Active = true 
+Pin11113101InputId = 1234
+freshness = 5
+
+[multithreadedRegister]
+pluginType = EAuthKnowledge
+defaultPlugin = PIN
+Pin11113100InputTrain = 2035
+Pin11113100Default = true
+Pin11113100Active = true
+finalUserName = NewUser
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/tAuthSvr2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,1935 @@
+//
+// Copyright (c) 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: 
+//
+//
+// Copyright (c) 2009 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:
+//
+
+PRINT Authentication Server tests...
+
+// Prepare a clone of TAuthSvr to possess authserver's SID.
+// This is required for modifying the authserver's central repository file.
+// This clone must be deleted at the end of the test.
+
+RUN_PROGRAM 100 SETCAP tAuthSvr.exe 188b0 -SID 102740FC tAuthSvr_new.exe
+
+LOAD_SUITE tAuthSvr
+LOAD_SUITE tAuthSvr_new
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0144
+//! @SYMTestCaseDesc Remove_PinPlugin_Data
+START_TESTCASE SEC-AUT-AUTHSVR-0144
+RUN_UTILS DeleteFile C:\pinplugin_inactive.txt
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr_new 	INIT_CENREP c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defaultplugin
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_in.dat
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_out.dat
+END_TESTCASE SEC-AUT-AUTHSVR-0144
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0006
+//! @SYMTestCaseDesc Start the authServer with no identities, having a default plugin defined
+//! 		     (FirstStart1_Normal)
+//! @SYMREQ REQ 4941 4943 4953 4954 4955 4956
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Identity API
+//! @SYMTestExpectedResults Default identity is the only one present
+//! @SYMDevelopedForRelease Intulo
+
+START_TESTCASE SEC-AUT-AUTHSVR-0006
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0001
+END_TESTCASE SEC-AUT-AUTHSVR-0006
+
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0007
+//! @SYMTestCaseDesc Start the authServer with no identities, and no default plug-in exists
+//! 		     (FirstStart2_NoDefaultPlugin)
+//! @SYMREQ REQ 4941 4943 4953 4954
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Identity API
+//! @SYMTestExpectedResults AuthServer panics, since there are no identities
+//! @SYMDevelopedForRelease Intulo
+
+START_TESTCASE SEC-AUT-AUTHSVR-0007
+RUN_UTILS CopyFile C:\tauth\tauthsvr\testdata\pinplugin_inactive.txt C:\pinplugin_inactive.txt
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !RESULT=-2 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0002
+END_TESTCASE SEC-AUT-AUTHSVR-0007 
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0008
+//! @SYMTestCaseDesc Start the authServer with no identities, and the default plugin is set to a biometric plugin
+//! 		     (FirstStart3_DefaultIsBiometricType)
+//! @SYMREQ REQ 4941 4943 4953 4954
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Identity API
+//! @SYMTestExpectedResults AuthServer panics, since default plugins have to be of knowledge or token type
+//! @SYMDevelopedForRelease Intulo
+
+START_TESTCASE SEC-AUT-AUTHSVR-0008
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !RESULT=-2 100	tAuthSvr 	AUTHSVR_CHECK   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0003
+RUN_UTILS DeleteFile C:\pinplugin_inactive.txt
+END_TESTCASE SEC-AUT-AUTHSVR-0008
+
+
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0009
+//! @SYMTestCaseDesc Start the authServer with no identities, having a default plugin defined
+//! 		     (RegisterIdentity1_Normal)
+//! @SYMREQ REQ4969 4970 4971 4972 4975 4976 4977 4978 4963 4985 5008 5009
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Identity API
+//! @SYMTestExpectedResults Default identity is the only one listed
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0009
+
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !Result=Fail  100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0021b
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0021a
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0021b
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0021c
+
+END_TESTCASE SEC-AUT-AUTHSVR-0009
+
+
+// //============================================================
+//
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0010
+//! @SYMTestCaseDesc , Attempt to register a new identity, while a specific plugin inactive, the plugin should be remain untrained
+//! 		     (RegisterIdentity2_NoActivePlugin)
+//! @SYMREQ REQ4941 REQ4943 REQ4953 REQ4954 4963 4985 4993 5008 5009
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Start the authServer with no identities. 
+//!			Have a default plugin defined, which is inactive,
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//! @SYMTestExpectedResults Specific plugin is untrained
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0010
+
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+// RUN_TEST_STEP !RESULT=-2 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0022b
+// RUN_TEST_STEP !RESULT=-2  100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0022a
+// RUN_TEST_STEP !RESULT=-2  100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0022b
+// RUN_TEST_STEP !RESULT=-2  100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0022c
+
+END_TESTCASE SEC-AUT-AUTHSVR-0010
+
+
+// //============================================================
+//
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0011
+//! @SYMTestCaseDesc Attempt to register a new identity, while no plugins are active, then one is activated.
+//! 		     (RegisterIdentity3_PluginActivatedLater)
+//! @SYMREQ REQ4947 REQ4954 REQ4960 REQ4962 REQ4968 REQ4957 REQ4963 4985 4993 5008 5009
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is inactive, and a second one which is inactive
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!                     Attempt to register a new identity, attempt to authenticate assuming this identity
+//!                     was registered. Check the number of identities.
+//!                     Reset the state of the system
+//!                     Set one of the plugins to be active then attempt to register an identity
+//!                     Attempt to read and set the username.
+//!                     Attempt to authenticate assuming this identity was registered. 
+//!                     Check the number of identities.
+//! @SYMTestExpectedResults Default plugin is untrained, then fully trained after the 2nd try
+//!                     The authentication fails first time(no errors), fails again the second time (no errors)
+//!                     It passes the third time 
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0011
+
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+// RUN_TEST_STEP !Error=-2 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0023b
+// RUN_TEST_STEP !Error=-2 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0023a
+// RUN_TEST_STEP !Error=-2  100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0023b
+// RUN_TEST_STEP !Error=-2  100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0023c
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0023d
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0023f
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0023e
+// RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+
+END_TESTCASE SEC-AUT-AUTHSVR-0011
+
+// ////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0012
+//! @SYMTestCaseDesc Attempt to register a new identity, but the transient key obtained from one of auth Plugin is non-unique.
+//! 		     (RegisterIdentity4_NonUniqueTransientkey)
+//! @SYMREQ REQ4953 REQ4954 REQ4955 REQ4957 REQ4958 REQ4963 4985 4993 5008 5009
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is inactive, and a second one which is inactive
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Try to register a 2nd identity while using the same 'Entered-Pin' as for the default identity.
+//! @SYMTestExpectedResults KErrAuthServPluginCancelled is received, then the plugin is showed as 
+//!				partially trained, not fully trained
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0012
+
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !RESULT=Fail 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0024b
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0024a
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0024b
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0024c
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0024d
+
+END_TESTCASE SEC-AUT-AUTHSVR-0012
+
+
+// ////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0013
+//! @SYMTestCaseDesc Attempt to register a new identity, but a plugin returns the cancellation code
+//! 		     (RegisterIdentity5_PluginCancel)
+//! @SYMREQ REQ4954 REQ4955 REQ4958 REQ4968 REQ4970 4971 4972 4963 4985 4993 5008 5009
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is inactive, and a second one which is inactive
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Try to register a 2nd identity while using the 'Cancel' code as the PIN input
+//! @SYMTestExpectedResults KErrAuthServPluginCancelled is received, then the plugin is showed as 
+//!				partially trained, not fully trained
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0013
+
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0025a
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0025b
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0025c
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0025d
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0025e
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0025f
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0025g
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0025d
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0025h
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0025i
+
+END_TESTCASE SEC-AUT-AUTHSVR-0013
+
+// ////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0014
+//! @SYMTestCaseDesc Attempt to register a new identity, but a plugin returns the 'quit' code
+//! 		     (RegisterIdentity6_PluginExit)
+//! @SYMREQ REQ4954 REQ4955 REQ4958 REQ4968 REQ4970 4971 4972 4963 4985 4993 5008 5009
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is inactive, and a second one which is inactive
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Try to register a 2nd identity while using the 'Quit' code as the PIN input
+//! @SYMTestExpectedResults KErrAuthServPluginQuit is received, then the plugin is showed as 
+//!				partially trained, not fully trained
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0014
+
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !Error=-10805 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0026a
+RUN_TEST_STEP !RESULT=Fail 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0026b
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0026c
+
+END_TESTCASE SEC-AUT-AUTHSVR-0014 
+
+
+// ////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0015
+//! @SYMTestCaseDesc Attempt to register a new identity, but the authserver cannot uniquely resolve the identity with any of the supplied plugins
+//! 		     (RegisterIdentity7_NonUniqueIdentity_Retrain)
+//! @SYMREQ REQ4953 REQ4954 4955 4956 4963 4985 4993 5008 5009
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and two others which are active
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Try to register a 2nd identity. While training all the plug-ins, 
+//!			use the same data that was used with the default identity
+//! @SYMTestExpectedResults The second identity is not registered. All the plugins are still 
+//!				fully trained
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0015
+
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr_new 	INIT_CENREP c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defaultplugin1
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !Error=-10810  100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0027a
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0027b
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+
+END_TESTCASE SEC-AUT-AUTHSVR-0015 
+
+
+// ////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0016
+//! @SYMTestCaseDesc Attempt to register a new identity, but the training for the 2 active plugins is cancelled
+//! 		     (RegisterIdentity8_NonUniqueIdentity_AllPluginsCancelled)
+//! @SYMREQ REQ4953 REQ4954 4955 4956 4963 4985 4993 5008 5009
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is inactive, and a second one which is inactive
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API 
+//!			Try to register a 2nd identity while using the 'Cancel' code as the PIN input for all 3 plugins
+//! @SYMTestExpectedResults The 2nd identity is not registered then the 3 plugins are showed as fully trained
+//!			       
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0016
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !Error=-10810 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0028a
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0028b
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+END_TESTCASE SEC-AUT-AUTHSVR-0016
+
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0017
+//! @SYMTestCaseDesc Successful attempt at retraining a specified plugin
+//! 		     (RetrainPlug-in1_Normal)
+//! @SYMREQ REQ4953 REQ4954 4955 4956 4963 4985 4993 5008 5009
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Successfully register a 2nd identity while using a specified PIN input
+//!			Authenticate using the same PIN input so that the identity to be trained is one
+//!			that has been previously trained. 
+//!			Then call the Train() function, giving a different input. Then attempt to authenticate,
+//!			giving the new input
+//! @SYMTestExpectedResults The authentication, registration and retrain are successful. The plugin status is 
+//!			fully trained, then fully trained again. The new authenticate is successful.
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0017
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0041a
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0041b
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0041c
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0041d
+END_TESTCASE SEC-AUT-AUTHSVR-0017 
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0018
+//! @SYMTestCaseDesc Attempt at retraining a specified plugin, but authentication fails
+//! 		     (RetrainPlug-in2_AuthFailed)
+//! @SYMREQ 4969 4970 4971 4972 4975 4976 4977 4952 4963 4985 4993 5008 5009
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Successfully register a 2nd identity while using a specified PIN input
+//!			Authenticate then call the Train() function. Use the a PIN input that has not been used before 
+//!			so that no identity is returned as having that PIN. 
+//! @SYMTestExpectedResults The registration is successful, the authentication fails, and so the retrain is unsuccessful. 
+//!			The plugin status is fully trained, then fully trained again
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0018
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0042a
+RUN_TEST_STEP !RESULT=Fail 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0042b
+RUN_TEST_STEP !Error=-10806 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0042b
+END_TESTCASE SEC-AUT-AUTHSVR-0018
+
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0019
+//! @SYMTestCaseDesc Attempt to retrain a specified plugin, but the plugin is unknown
+//! 		     (RetrainPlug-in3_UnknownPlugin)
+//! @SYMREQ 4969 4970 4971 4972 4975 4976 4977 4952 4963 4985 4993 5008 5009
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Successfully register a 2nd identity while using a specified PIN input
+//!			Authenticate then call the Train() function. Use the a valid PIN so that an identity is 
+//!                     returned as having that PIN. 
+//!                     Attempt to retrain a plugin, but specify an unknown plugin.
+//! @SYMTestExpectedResults The registration is successful, the authentication passes, the retrain is unsuccessful. 
+//!                     and the KErrauthServNoSuchPlugin is returned
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0019
+
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0043a
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0043b
+RUN_TEST_STEP !Error=-10802 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0043c
+END_TESTCASE SEC-AUT-AUTHSVR-0019
+
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0020
+//! @SYMTestCaseDesc Attempt to retrain a specified plugin, but the 2nd authentication fails
+//! 		     (RetrainPlug-in4_2ndAuthFailed)
+//! @SYMREQ 4969 4970 4971 4972 4975 4976 4977 4978 4952 4963 4985 4993 5008 5009
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Successfully register a 2nd identity while using a specified PIN input
+//!			Authenticate then call the Train() function. Use the a PIN input that was used before so that the 
+//!			2nd identity is returned. A new PIN is now associated with the identity and that plugin
+//!			Attempt the authentication again, but using a wrong PIN. 
+//!                     Attempt the retrain a second time, given that the authentication has failed
+//! @SYMTestExpectedResults The registration is successful, The first 'authenticate' and 'train' calls succeed. 
+//!			The 2nd authentication fails, and so the 2nd call to train is unsuccessful. 
+//!			The plugin status is fully trained, all three times that it is checked
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0020
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0044a
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0044d
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0044b
+RUN_TEST_STEP !RESULT=Fail 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0044e
+RUN_TEST_STEP !Error=-10806 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0044c
+END_TESTCASE SEC-AUT-AUTHSVR-0020
+
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0030
+//! @SYMTestCaseDesc Attempt to retrain a specified plugin, but a non-unique transient key is generated, prompting 
+//!			the retrain to be cancelled
+//! 		     (RetrainPlug-in5_NonUniqueTransientKey)
+//! @SYMREQ 4969 4970 4971 4972 4975 4976 4977 4978 4963 4985 4993 5008 5009
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Successfully register a 2nd identity while using a unique PIN input
+//!                     Successfully register a 3rd identity while using another unique PIN input
+//!			Authenticate so that the 2nd identity is returned then call the Train() function. 
+//!                     Attempt to use the same PIN input that was used to register the 3rd Id, to train the 2nd Id
+//!			so that the retrain is cancelled.
+//! @SYMTestExpectedResults The registrations are successful, the authentication passes, but the retrain is cancelled. 
+//!			The plugin status is fully trained, then fully trained again
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0030
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0045a
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0045b
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0045c
+RUN_TEST_STEP !Error=-10804 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0045d
+
+END_TESTCASE SEC-AUT-AUTHSVR-0030
+
+
+// //// //
+// //! @SYMTestCaseID SEC-AUT-AUTHSVR-0031
+// //! @SYMTestCaseDesc Attempt to retrain a specified plugin, but a cancellation code is entered at the 'retrain' stage
+// //! 		        (RetrainPlug-in6_Cancel)
+// //! @SYMREQ 4969 4970 4971 4972 4975 4976 4977 4978 4963 4985 4993 5008 5009
+// //! @SYMTestPriority Medium
+// //! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+// //!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+// //!			call the Enumerate Plugins API
+// //!			Successfully register a 2nd identity while using a specified PIN input
+// //!			Authenticate then call the Train() function. Use the a cancellation code as the input
+// //!			so that the retrain is cancelled.
+// //! @SYMTestExpectedResults The registration is successful, the authentication passes, but the retrain is cancelled. 
+// //!			The plugin status is fully trained, then fully trained again
+// //! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0031
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0046a
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0046b
+RUN_TEST_STEP !Error=-10804	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0046c
+END_TESTCASE SEC-AUT-AUTHSVR-0031
+
+// ////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0032
+//! @SYMTestCaseDesc Attempt to retrain a specified plugin, but a Quit code is entered at the 'retrain' stage
+//! 		     (RetrainPlug-in7_Quit)
+//! @SYMREQ 4969 4970 4971 4972 4975 4976 4977 4978 4963 4985 4993 5008 5009
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Successfully register a 2nd identity while using a specified PIN input
+//!			Authenticate then call the Train() function. Use the a Quit code as the input
+//!			so that the retrain is quit.
+//! @SYMTestExpectedResults The registration is successful, the authentication passes, but the retrain is quit 
+//!			The plugin status is fully trained, then fully trained again
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0032
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0047a
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0047b
+RUN_TEST_STEP !Error=-10805 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0047c
+END_TESTCASE SEC-AUT-AUTHSVR-0032
+
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0033
+//! @SYMTestCaseDesc Successful attempt to retrain a specified plugin, then another plugin. 
+//! 		     (RetrainPlug-in8_TwoPlugins)
+//! @SYMREQ 4969 4970 4971 4972 4975 4976 4977 4978 4963 4985 4993 5008 5009
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Successfully register a 2nd identity while using a specified PIN input
+//!			Authenticate then call the Train() function on the first plugin. Use the a valid, unique input
+//!			Authenticate then call the Train function on the second plugin. Use a valid, unique input
+//!                  Attempt an authentication using a now-invalid input.(what was used earlier)
+//! @SYMTestExpectedResults The registration is successful, the authentication is successful in both cases, 
+//!			as well as the retrain calls. The last authentication fails since the training data has changed.
+//!			The plugin status for both plugins is fully trained, then fully trained again
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0033
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0048a
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0048b
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0048c
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0048d
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0048e
+RUN_TEST_STEP !RESULT=Fail 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0048f
+END_TESTCASE SEC-AUT-AUTHSVR-0033
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0034
+//! @SYMTestCaseDesc Attempt to add a new authentication method first to one then the second of the
+//!			two present identities
+//! 		     (AddAuthMethod1_BothIdentities_Normal)
+//! @SYMREQ 4969 4970 4971 4972 4975 4976 4977 4978 4963 4993 5008 5009
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is inactive
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Successfully register a 2nd identity while using a specified PIN input with the default plugin only
+//!			Authenticate then call the Train() function. Use an identifying input that corresponds to what
+//!			was used to register the default identity using the default plugin. Therefore the default identity
+//!			is returned following the Authentication. The training is then done for the 2nd plugin
+//!			Carry out the same process with the second identity
+//! @SYMTestExpectedResults The authentication is successful,  and the first train call passes.
+//!			but the second train call passes as well
+//!			The plugin status for the second plugin is untrained, trained, then fully trained
+//!			There are 2 identities present after the register identity step
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0034
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0061a
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0061b
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0061Ta
+RUN_TEST_STEP !Error=-5 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0061c
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0061d
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0061Tb
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0061e
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0061f
+END_TESTCASE SEC-AUT-AUTHSVR-0034
+
+// ////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0035
+//! @SYMTestCaseDesc Attempt to add a new authentication method first to one then the second of the
+//!			two present identities. Authentication fails in both cases.
+//! 		     (AddAuthMethod2_BothIdentities_AuthFailed)
+//! @SYMREQ 4969 4970 4971 4972 4975 4976 4977 4978 4963 4993 5008 5009
+//! @SYMTestPriority Medium
+//! @SYMTestActions   Have a default plugin defined, which is active, and a second one which is inactive
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Successfully register a 2nd identity while using a specified PIN input with the default plugin only
+//!			Fail to authenticate then try to call the Train() function. Use an identifying input that does not 
+//!			correspond to what was used to register the default identity using the default plugin. Therefore no identity
+//!			is returned following the Authentication. The training is then attempted for the 2nd plugin
+//!			Carry out the same process with the second identity
+//! @SYMTestExpectedResults The authentication is successful,  and the first train call passes.
+//!			but the second train call passes as well
+//!			The plugin status for the second plugin is untrained, trained, then fully trained
+//!			There are 2 identities present after the register identity step
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0035
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0062a
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0062b
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0062c
+RUN_TEST_STEP !RESULT=Fail 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0062d
+RUN_TEST_STEP !Error=-10806 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0062e
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0062f
+END_TESTCASE SEC-AUT-AUTHSVR-0035
+
+// ////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0063
+//! @SYMTestCaseDesc Attempt to add a new authentication method to one identity,
+//!		        but the pluginId is unknown
+//! 		     (AddAuthMethod3_UnknownPlugin)
+//! @SYMREQ 4969 4970 4971 4972 4975 4976 4977 4978 4963 5008 5009
+//! @SYMTestPriority Medium
+//! @SYMTestActions   Have a default plugin defined, which is active, and a second one of the same type, but not
+//!                     supporting default data
+//!			Use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			Successfully register a 2nd identity with the default plugin only
+//!
+//!			Successfully authenticate for the 2nd identity
+//!			then call the ReTrain() function specifying a unknown plugin
+//!
+//! @SYMTestExpectedResults The default plugin is fully trained, the 2nd plugin is untrained
+//!                     The authentication is successful, but the Retrain call fails
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0063
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0063a
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0063b
+RUN_TEST_STEP !Error=-10802 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0063c
+END_TESTCASE SEC-AUT-AUTHSVR-0063
+
+// ////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0065
+//! @SYMTestCaseDesc Attempt to add a new authentication method to the 2nd identity,
+//!		        but the training data used for the 2nd plugin is non-unique
+//! 		     (AddAuthMethod5_2ndIdentity_NonUniqueTransientKey)
+//! @SYMREQ 4969 4970 4971 4972 4975 4976 4977 4978 4963 5008 5009
+//! @SYMTestPriority Medium
+//! @SYMTestActions   Have a default plugin defined, which is active, and a second one of the same type, and both
+//!                     support default data
+//!			Use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			Successfully register a 2nd identity with both plugins
+//!
+//!			Successfully authenticate for the 2nd identity
+//!			then call the ReTrain() function specifying the 2nd plugin and the same training
+//!                  data used to train the first identity
+//!
+//! @SYMTestExpectedResults The default plugin is fully trained, the 2nd plugin is untrained
+//!                     The authentication is successful, but the Retrain call fails
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0065
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0065a
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0065b
+RUN_TEST_STEP !Error=-10804 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0065c
+END_TESTCASE SEC-AUT-AUTHSVR-0065
+
+// ////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0066
+//! @SYMTestCaseDesc Attempt to add a new authentication method to the 2nd identity,
+//!		        but the cancel code is sent by the user at the training stage
+//! 		     (AddAuthMethod6_2ndIdentity_Cancel)
+//! @SYMREQ 4969 4970 4971 4972 4975 4976 4977 4978 4963
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one of the same type, and only the
+//!                     default plugin supports default data
+//!			Use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			Successfully register a 2nd identity with the default plugin only
+//!
+//!			Successfully authenticate for the 2nd identity
+//!			then call the ReTrain() function specifying the 2nd plugin and the cancel code as training data 
+//!
+//! @SYMTestExpectedResults The default plugin is fully trained, the 2nd plugin is untrained
+//!                     The authentication is successful, but the Retrain call fails
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0066
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0066a
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0066b
+RUN_TEST_STEP !Error=-10804 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0066c
+END_TESTCASE SEC-AUT-AUTHSVR-0066
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0067
+//! @SYMTestCaseDesc Attempt to add a new authentication method to the 2nd identity,
+//!		        but the Quit code is sent by the user at the training stage
+//! 		     (AddAuthMethod7_2ndIdentity_Exit)
+//! @SYMREQ 4969 4970 4971 4972 4975 4976 4977 4978 4963
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one of the same type, and only the 
+//!                     default plugin supports default data
+//!			Use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			Successfully register a 2nd identity with the default plugin only
+//!
+//!			Successfully authenticate for the 2nd identity
+//!			then call the ReTrain() function specifying the 2nd plugin and the Quit code as training data 
+//!   
+//! @SYMTestExpectedResults The default plugin is fully trained, the 2nd plugin is untrained
+//!                     The authentication is successful, but the Retrain call fails
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0067
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0067a
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0067b
+RUN_TEST_STEP !Error=-10805 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0067c
+END_TESTCASE SEC-AUT-AUTHSVR-0067
+
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0081
+//! @SYMTestCaseDesc An AuthClient successfully authenticates a user
+//! 		     (Authenticate1_Normal)
+//! @SYMREQ REQ4966 4977 4978 4979 4980 4981 4963
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have the default identity and a 2nd identity registered, 
+//!			having both plug-ins trained with both identities.
+//!			Call the ‘Authenticate’ API  on the 2nd identity, with a freshness of 0 seconds
+//!			and an authentication expression.(Default AND 2nd plug-in)
+//! @SYMTestExpectedResults  The 2nd identity is successfully authenticated
+//!				A valid result is stored, i.e. a new identity number 
+//!				other than ‘unknown’ is now present. 
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0081
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthTestRegister
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0081b
+END_TESTCASE SEC-AUT-AUTHSVR-0081
+
+
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0082
+//! @SYMTestCaseDesc An AuthClient successfully authenticates a user using a subset of the auth. methods
+//! 		     (Authenticate2_SpecifiyMethodSubset)
+//! @SYMREQ REQ4966 4977 4978 4979 4980 4981 4963
+//! @SYMTestPriority Medium
+//! @SYMTestActions  
+//! @SYMTestExpectedResults 
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0082
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthTestRegister
+RUN_TEST_STEP !Result=Fail 100  tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0082b
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0082c
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0082d
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0082e
+END_TESTCASE SEC-AUT-AUTHSVR-0082 
+
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0083
+//! @SYMTestCaseDesc Authenticate3_NoActiveMethods
+//! @SYMREQ REQ4966 4977 4978 4979 4980 4981 4963
+//! @SYMTestPriority Medium
+//! @SYMTestActions  
+//! @SYMTestExpectedResults 
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0083
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthTestRegister
+RUN_TEST_STEP !Result=Fail 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0083b
+END_TESTCASE SEC-AUT-AUTHSVR-0083
+
+ 
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0084
+//! @SYMTestCaseDesc Authenticate4_RestrictedAuth_VariousConfigurations
+//! @SYMREQ REQ4966 4977 4978 4979 4980 4981 4963
+//! @SYMTestPriority Medium
+//! @SYMTestActions  
+//! @SYMTestExpectedResults 
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0084
+LOAD_SUITE tAuthSvrWDD
+LOAD_SUITE tAuthSvrNC
+RUN_TEST_STEP !Result=0 100	tAuthSvrWDD 	REMOVE_DBS
+RUN_TEST_STEP !Result=Fail 100	tAuthSvrWDD 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthTestRegister
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthTestRegister
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0084b
+RUN_TEST_STEP !Result=0 100	tAuthSvrWDD	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0084b
+RUN_TEST_STEP !Error=-46 100	tAuthSvrNC 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0084b
+RUN_TEST_STEP !Result=0 100	tAuthSvrNC 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0084c
+RUN_TEST_STEP !Result=0 100	tAuthSvrNC 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0084d
+END_TESTCASE SEC-AUT-AUTHSVR-0084
+
+
+// ////
+// //! @SYMTestCaseID SEC-AUT-AUTHSVR-0085
+// //! @SYMTestCaseDesc Authenticate5_SpecifyType
+// //! @SYMREQ REQ4966 4977 4978 4979 4980 4981 4963
+// //! @SYMTestPriority Medium
+// //! @SYMTestActions  
+// //! @SYMTestExpectedResults 
+// //! @SYMDevelopedForRelease Intulo
+// START_TESTCASE SEC-AUT-AUTHSVR-0085
+// RUN_TEST_STEP !Result=0 100	tAuthSvr 	REMOVE_DBS
+// RUN_TEST_STEP !Result=0 100	tAuthSvr 	SET_PREFS 		c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0085b
+// RUN_TEST_STEP !Result=0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthTestRegister
+// RUN_TEST_STEP !Result=0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0085b
+// RUN_TEST_STEP !Result=0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0085c
+// END_TESTCASE SEC-AUT-AUTHSVR-0085
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0086
+//! @SYMTestCaseDesc Authenticate6_SpecifyPreferredPluginOfType
+//! @SYMREQ REQ4966 4977 4978 4979 4980 4981 4963
+//! @SYMTestPriority Medium
+//! @SYMTestActions  
+//! @SYMTestExpectedResults 
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0086 
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	SET_PREFS 		c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0086b
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthTestRegister
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0086b
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0086c
+END_TESTCASE SEC-AUT-AUTHSVR-0086
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0087
+//! @SYMTestCaseDesc Authenticate7_NoActivePluginsOfSpecifiedType
+//! @SYMREQ REQ4966 4977 4978 4979 4980 4981 4963
+//! @SYMTestPriority Medium
+//! @SYMTestActions  
+//! @SYMTestExpectedResults 
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0087
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	SET_PREFS 		c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0087b
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthTestRegister
+RUN_TEST_STEP !Result=Fail 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0087b
+RUN_TEST_STEP !Result=Fail 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0087c
+RUN_TEST_STEP !Result=Fail 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0087d
+END_TESTCASE SEC-AUT-AUTHSVR-0087
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0088
+//! @SYMTestCaseDesc Authenticate8_PluginInactiveSoAlternativeSubExpressionIsUsed
+//! @SYMREQ REQ4966 4977 4978 4979 4980 4981 4963
+//! @SYMTestPriority Medium
+//! @SYMTestActions  
+//! @SYMTestExpectedResults 
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0088
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	SET_PREFS 		c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0087b
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthTestRegister
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0088b
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0088c
+END_TESTCASE SEC-AUT-AUTHSVR-0088
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0089
+//! @SYMTestCaseDesc Authenticate9_ServerStopped
+//! @SYMREQ REQ4966 4977 4978 4979 4980 4981 4963
+//! @SYMTestPriority Medium
+//! @SYMTestActions  
+//! @SYMTestExpectedResults 
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0089
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthTestRegister
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0089b
+DELAY 3500
+RUN_TEST_STEP !Result=Fail 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0089c
+END_TESTCASE SEC-AUT-AUTHSVR-0089
+
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0092
+//! @SYMTestCaseDesc Authenticate12_NoUserIdentified
+//! @SYMREQ REQ4966 4977 4978 4979 4980 4981 4963
+//! @SYMTestPriority Medium
+//! @SYMTestActions  
+//! @SYMTestExpectedResults 
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0092
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthTestRegister
+RUN_TEST_STEP !Result=Fail 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0092b
+END_TESTCASE SEC-AUT-AUTHSVR-0092
+
+//
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0093
+//! @SYMTestCaseDesc An authclient successfully authenticates where the user specifies the auth method
+//!                  given that no preferred method exists
+//! 		     (Authenticate13_UserSelectsMethod)
+//! @SYMREQ 4984 4977 4979 4980 4963
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have 3 plugins that support default data and are active, all trained with the default identity
+//!                  and a second identity
+//!                  Call authenticate, expecting the 2nd identity with a freshness of 0 seconds and an auth expression
+//!                  of (2nd OR 3rd plugin). Supply correct input for the 3rd plugin, but wrong info for the 2nd plugin
+//!                  Call authenticate, expecting the 2nd identity with a freshness of 300 seconds and an auth
+//!                  expression of (Default AND 2nd plugin). Supply wrong input for the 2nd plugin and the default plugin
+//! @SYMTestExpectedResults First, the 2nd identity is successfully authenticated.
+//!                  During the second auth call, the input data is not read since the auth step is waived, since the 
+//!                  freshness period has not elapsed.
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0093
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthTestRegister
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0093b
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0093c
+END_TESTCASE SEC-AUT-AUTHSVR-0093
+
+
+
+
+// ////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0036
+//! @SYMTestCaseDesc Successful attempt to remove a specified identity
+//! 		     (RemoveIdentity1_Normal)
+//! @SYMREQ 4964 4965 4966 4954 4963
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Successfully register a 2nd identity while using a specified PIN input
+//!			Authenticate then call the removeIdentity() function. Use the a valid input so that the
+//!			identity that was recently registered is returned following the Authentication, then removed
+//! @SYMTestExpectedResults The registration is successful, the authentication is successful, 
+//!			as well as the removeIdentity call.
+//!			The plugin status for both plugins is fully trained, then fully trained again
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0036
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0101a
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0101b
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0101b
+RUN_TEST_STEP !Result=Fail 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0101d
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0101b
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+END_TESTCASE SEC-AUT-AUTHSVR-0036
+
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0037
+//! @SYMTestCaseDesc Attempt to remove a specified identity when only one identity exists
+//! 		     (RemoveIdentity2_OneIdentity)
+//! @SYMREQ 4964 4965 4966 4954 4963
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Authenticate then call the removeIdentity() function. Use an input that corresponds to what
+//!			was used to register the default identity. Therefore the default identity is returned 
+//!			following the Authentication, then attempt to remove it
+//! @SYMTestExpectedResults The authentication is successful, but the removeIdentity call fails
+//!			The plugin status for the specified plugin is fully trained, then fully trained again
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0037
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0102a
+RUN_TEST_STEP !Error=-10811 100	tAuthSvr 	REMOVE_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0102b
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0102c
+END_TESTCASE SEC-AUT-AUTHSVR-0037
+
+
+// ////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0038
+//! @SYMTestCaseDesc Attempt to remove a non-existent identity
+//! 		     (RemoveIdentity3_NonExistentIdentity)
+//! @SYMREQ 4964 4965 4966 4954 4963
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Successfully register a 2nd identity while using a specified PIN input
+//!			Authenticate then call the removeIdentity() function.
+//!                     However, set the forgetUnknown flag to true, so that the test attempts to remove
+//!                     a non-existent identity
+//! @SYMTestExpectedResults The authentication is successful.
+//!			but the removeIdentity call fails because the identity is not found by the AuthServer
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0038
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0103a
+RUN_TEST_STEP !RESULT=Fail 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0103b
+RUN_TEST_STEP !Error=-10808 100	tAuthSvr 	REMOVE_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0103c
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0103c
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+END_TESTCASE SEC-AUT-AUTHSVR-0038
+
+// ////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0039
+//! @SYMTestCaseDesc Attempt to remove a specified identity but the authentication fails
+//! 		     (RemoveIdentity4_AuthFailed)
+//! @SYMREQ 4964 4965 4966 4954 4963
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Successfully register a 2nd identity while using a specified PIN input
+//!			Authenticate then call the removeIdentity() function. Use an input that doesn't correspond
+//!			to what was used to register the 2nd identity. Therefore no identity is returned 
+//!			following the Authentication. Attempt to remove this absent identity.
+//! @SYMTestExpectedResults The authentication fails,  and the removeIdentity call fails.
+//!			because there is no such identity in the authentication server.
+//!			The plugin status for the specified plugin is fully trained, then fully trained again
+//!			There's 1 identity present after the 2 removeIdentity calls
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0039
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0104a
+RUN_TEST_STEP !RESULT=Fail 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0104b
+RUN_TEST_STEP !Error=-10808 100	tAuthSvr 	REMOVE_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0104c
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0104c
+END_TESTCASE SEC-AUT-AUTHSVR-0039
+
+// ////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0040
+//! @SYMTestCaseDesc Attempt to remove a non-existent identity when two other identities exist
+//! 		     (RemoveIdentity5_NonExistentIdentity_TwoOthersExist)
+//! @SYMREQ 4964 4965 4966 4954 4963 5011
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Successfully register a 2nd identity while using a specified PIN input
+//!			Successfully register a 3rd identity while using a specified PIN input
+//!			Authenticate then call the removeIdentity() function. Use an input that corresponds to what
+//!			was used to register the 2nd identity. Therefore the 2nd identity is returned 
+//!			following the Authentication. Remove this second identity then attempt to remove it again
+//! @SYMTestExpectedResults The authentication is successful,  and the first removeIdentity call passes.
+//!			but the second removeIdentity call fails because an unknown identity was specified
+//!			The plugin status for the specified plugin is fully trained, then fully trained again
+//!			There are 2 identities present after the 2 removeIdentity calls
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0040
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0105a
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0105b
+RUN_TEST_STEP !RESULT=Fail 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0105c
+RUN_TEST_STEP !Error=-10808 100	tAuthSvr 	REMOVE_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0105d
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0105d
+END_TESTCASE SEC-AUT-AUTHSVR-0040
+
+// ////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0049
+//! @SYMTestCaseDesc A user successfully removes an authentication plug-in trained for their identity
+//! 		     (ForgetPlug-in1_Normal)
+//! @SYMREQ REQ4964 REQ4965 REQ4966 REQ4954 4963
+//! @SYMTestPriority Medium
+//! @SYMTestActions  
+//! @SYMTestExpectedResults 
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0049 
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0121b
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0121a
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	FORGET_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0121c
+RUN_TEST_STEP !RESULT=Fail 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0121d
+END_TESTCASE SEC-AUT-AUTHSVR-0049
+
+// ////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0050
+//! @SYMTestCaseDesc A user attempts to remove an auth plug-in trained for their identity, but there's only a single auth method for the identity.
+//! 		     (ForgetPlug-in1_LastPlugin)
+//! @SYMREQ REQ4964 REQ4965 REQ4966 REQ4954 4963
+//! @SYMTestPriority Medium
+//! @SYMTestActions  
+//! @SYMTestExpectedResults 
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0050
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0122b
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0122a
+RUN_TEST_STEP !Error=-10812 100 tAuthSvr FORGET_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0122c
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0122a
+END_TESTCASE SEC-AUT-AUTHSVR-0050
+
+// ///
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0051
+//! @SYMTestCaseDesc A user attempts to remove an auth plug-in, but the identity has no transient key associated with this plug-in
+//! 		     (ForgetUntrainedAuthMethod)
+//! @SYMREQ REQ4964 REQ4965 REQ4966 REQ4954 4963
+//! @SYMTestPriority Medium
+//! @SYMTestActions  
+//! @SYMTestExpectedResults 
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0051
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0123b
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0123a
+RUN_TEST_STEP !Error=-10809 100      tAuthSvr        FORGET_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0123c
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0123a
+END_TESTCASE SEC-AUT-AUTHSVR-0051 
+
+// ///
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0052
+//! @SYMTestCaseDesc A user attempts to remove an auth plug-in, but the plugin does not exist
+//! 		     (ForgetUnknownPlugin)
+//! @SYMREQ REQ4964 REQ4965 REQ4966 REQ4954 4963
+//! @SYMTestPriority Medium
+//! @SYMTestActions  
+//! @SYMTestExpectedResults 
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0052
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0124b
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0124a
+RUN_TEST_STEP !Error=-10809 100 tAuthSvr 	FORGET_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0124c
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0124a
+END_TESTCASE SEC-AUT-AUTHSVR-0052
+
+// //
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0053
+//! @SYMTestCaseDesc A user attempts to remove an auth plug-in, but the identity specified does not exist
+//! 		     (ForgetUnknownIdentity)
+//! @SYMREQ REQ4964 REQ4965 REQ4966 REQ4954
+//! @SYMTestPriority Medium
+//! @SYMTestActions  
+//! @SYMTestExpectedResults 
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0053
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !Error=-10803 100 tAuthSvr FORGET_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0125
+END_TESTCASE SEC-AUT-AUTHSVR-0053
+
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0054
+//! @SYMTestCaseDesc Auth preferences are set correctly.
+//! 		     (SetPreference_Success)
+//! @SYMREQ REQ4983 REQ4973 REQ4966 REQ4967 REQ4968
+//! @SYMTestPriority Medium
+//! @SYMTestActions  
+//! @SYMTestExpectedResults 
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0054
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0141
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	SET_PREFS 	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0141
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE    c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0141
+END_TESTCASE SEC-AUT-AUTHSVR-0054
+
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0055
+//! @SYMTestCaseDesc An Auth preference is set with an invalid plug-in
+//! 		     (SetPreference_UnknownPlugin)
+//! @SYMREQ REQ4964 REQ4965 REQ4966 REQ4954
+//! @SYMTestPriority Medium
+//! @SYMTestActions  
+//! @SYMTestExpectedResults 
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0055
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0142
+RUN_TEST_STEP !Error=-6 100	tAuthSvr 	SET_PREFS       c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0142
+RUN_TEST_STEP !Error=-10802 100	tAuthSvr AUTHENTICATE    c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0142
+END_TESTCASE SEC-AUT-AUTHSVR-0055
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0143
+//! @SYMTestCaseDesc An Auth preference is set with plugin types that don't match the specified categories for which
+//!                  they were set as preferred.
+//! 		     (SetPreference_WrongCategory)
+//! @SYMREQ REQ4964 REQ4965 REQ4966 REQ4954 REQ4974
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Register an identity, training with 4 plugins, A, B, C, D
+//!                  Set the preferences Knowledge = C,  Biometric = A, Token = B
+//!                  Where C, A and B are actually Biometric, Knowledge and Knowledge types
+//! @SYMTestExpectedResults The registration is successful, but the authentication fails, since the plugins
+//!                  selected in the preferences are of the wrong type or category
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0143
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0143
+RUN_TEST_STEP !Error=-6	tAuthSvr 	SET_PREFS       c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0143
+RUN_TEST_STEP !Result=Fail 100	tAuthSvr 	AUTHENTICATE    c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0143
+END_TESTCASE SEC-AUT-AUTHSVR-0143
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0145
+//! @SYMTestCaseDesc Remove_PinPlugin_Data
+START_TESTCASE SEC-AUT-AUTHSVR-0145
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_in.dat
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_out.dat
+END_TESTCASE SEC-AUT-AUTHSVR-0145
+
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0146
+//! @SYMTestCaseDesc Check the information published with no identities registered.
+//! @SYMREQ REQ11228
+//! @SYMTestPriority High
+//! @SYMTestActions  Start the AuthServer and check for information published by KUidAuthServerLastAuth property
+//! @SYMTestExpectedResults No value is published
+//! @SYMDevelopedForRelease Intulo
+
+START_TESTCASE SEC-AUT-AUTHSVR-0146
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RESULT_AVAILABILITY	c:\tauth\tAuthSvr\testdata\authsvrpolicy.ini SectionOne
+END_TESTCASE SEC-AUT-AUTHSVR-0146
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0147
+//! @SYMTestCaseDesc Check the published value on authentication failure for the first user
+//! @SYMREQ REQ11228 
+//! @SYMTestPriority High
+//! @SYMTestActions  Register an Identity but cause the authentication to fail.Check for the value published by KUidAuthServerLastAuth 
+//! @SYMTestExpectedResults No Value is published
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0147
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0156
+RUN_TEST_STEP !Result=Fail 100 tAuthSvr 	AUTHENTICATE    c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0157
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RESULT_AVAILABILITY	c:\tauth\tAuthSvr\testdata\authsvrpolicy.ini SectionOne
+END_TESTCASE SEC-AUT-AUTHSVR-0147
+
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0148
+//! @SYMTestCaseDesc Check the published value on successful authentication
+//! @SYMREQ REQ11228
+//! @SYMTestPriority High
+//! @SYMTestActions  Register and Authenticate a user successfully.Check for the published KUidAuthServerLastAuth property value
+//! @SYMTestExpectedResults The authenticated user information should be available.
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0148
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0158
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE    c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0159
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RESULT_AVAILABILITY	c:\tauth\tAuthSvr\testdata\authsvrpolicy.ini SectionOne
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE    c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0159
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RESULT_AVAILABILITY	c:\tauth\tAuthSvr\testdata\authsvrpolicy.ini SectionOne
+END_TESTCASE SEC-AUT-AUTHSVR-0148
+
+
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0149
+//! @SYMTestCaseDesc Check the published value on authentication failure
+//! @SYMREQ REQ11228 
+//! @SYMTestPriority High
+//! @SYMTestActions  Register an Identity but cause the authentication to fail.Check for the value published by KUidAuthServerLastAuth 
+//! @SYMTestExpectedResults The User Information of the previously successful Identity is available.
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0149
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0156
+RUN_TEST_STEP !Result=Fail 100 tAuthSvr 	AUTHENTICATE    c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0157
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RESULT_AVAILABILITY	c:\tauth\tAuthSvr\testdata\authsvrpolicy.ini SectionOne
+END_TESTCASE SEC-AUT-AUTHSVR-0149
+ 
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0150
+//! @SYMTestCaseDesc Notification of a change in authenticated identity on successful authentication.
+//! @SYMREQ REQ11228,REQ11229
+//! @SYMTestPriority High
+//! @SYMTestActions  Register and Authenticate an identity and check if the KUidAuthServerAuthChangeEvent Property 
+//!      	      gets published with  the new Identity .Reauthenticate the same identity again and check for the published value		      value
+//! @SYMTestExpectedResults Registration and Authentication is successful,KUidAuthServerAuthChangeEvent gets published with
+//!			    the new Identity. ReAuthentication is successful, but KUidAuthServerAuthChangeEvent is not published
+//! @SYMDevelopedForRelease Intulo
+
+START_TESTCASE SEC-AUT-AUTHSVR-0150
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr	RESULT_NOTIFICATION   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0160
+END_TESTCASE SEC-AUT-AUTHSVR-0150
+
+
+
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0151
+//! @SYMTestCaseDesc Notification of a change in authenticated identity on authentication failure.
+//! @SYMREQ REQ11228,REQ11229
+//! @SYMTestPriority High
+//! @SYMTestActions  Register an Identity but fail the Authentication.check if the KUidAuthServerAuthChangeEvent Property 
+//!      	      gets published with  the new Identity
+//! @SYMTestExpectedResults Registration is successful,Authentication fails,KUidAuthServerAuthChangeEvent is not published
+//! @SYMDevelopedForRelease Intulo
+
+START_TESTCASE SEC-AUT-AUTHSVR-0151
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr	RESULT_NOTIFICATION   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0161
+END_TESTCASE SEC-AUT-AUTHSVR-0151
+
+
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0152
+//! @SYMTestCaseDesc Notification of a change in authenticated identity upon DeAuthentication
+//! @SYMREQ REQ11228,REQ11229
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Register and Authenticate an identity and DeAuthenticate it.
+//! @SYMTestExpectedResults DeAuthentication is successful, KUidAuthServerAuthChangeEvent gets published with 0.
+//! @SYMDevelopedForRelease Intulo
+
+
+START_TESTCASE SEC-AUT-AUTHSVR-0152
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr	RESULT_NOTIFICATION   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0162
+END_TESTCASE SEC-AUT-AUTHSVR-0152
+
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0153
+//! @SYMTestCaseDesc Update the default plugin to 11113100
+
+START_TESTCASE SEC-AUT-AUTHSVR-0153
+RUN_UTILS DeleteFile C:\private\10202be9\persists\2001ea7f.cre
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr_new 	INIT_CENREP c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defaultplugin1
+END_TESTCASE SEC-AUT-AUTHSVR-0153
+
+
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0154
+//! @SYMTestCaseDesc API validation testing for Asynchronous Authenticate using the default plugin.
+//!                  
+//! @SYMREQ REQ11230
+//! @SYMTestPriority High
+//! @SYMTestActions  Remove the Authentication database and call Authenticate using the default plugin and default identity.
+//! @SYMTestExpectedResults Authentication is successful.
+//! @SYMDevelopedForRelease Intulo
+
+START_TESTCASE SEC-AUT-AUTHSVR-0154
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defidentity1
+END_TESTCASE SEC-AUT-AUTHSVR-0154
+
+
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0155
+//! @SYMTestCaseDesc API validation testing for Synchronous Authenticate using the default plugin.
+//!                  
+//! @SYMREQ REQ11230
+//! @SYMTestPriority High
+//! @SYMTestActions  Remove the Authentication database and call Authenticate using the default plugin and default identity.
+//! @SYMTestExpectedResults Authentication is successful.
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0155
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defidentity2
+END_TESTCASE SEC-AUT-AUTHSVR-0155
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0155
+//! @SYMTestCaseDesc API validation testing for Asynchronous Authenticate using the default plugin.
+//!                  
+//! @SYMREQ REQ11230
+//! @SYMTestPriority High
+//! @SYMTestActions  Remove the Authentication database and call Authenticate using the default plugin and an invalid pin.
+//! @SYMTestExpectedResults Authentication fails.
+//! @SYMDevelopedForRelease Intulo
+
+START_TESTCASE SEC-AUT-AUTHSVR-0155
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !RESULT=FAIL 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defidentity3
+END_TESTCASE SEC-AUT-AUTHSVR-0155
+
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0156
+//! @SYMTestCaseDesc API validation testing for Synchronous Authenticate using the default plugin.
+//!                  
+//! @SYMREQ REQ11230
+//! @SYMTestPriority High
+//! @SYMTestActions  Remove the Authentication database and call Authenticate using the default plugin and an invalid pin.
+//! @SYMTestExpectedResults Authentication fails
+//! @SYMDevelopedForRelease Intulo
+
+START_TESTCASE SEC-AUT-AUTHSVR-0156
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !RESULT=FAIL  100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defidentity4
+END_TESTCASE SEC-AUT-AUTHSVR-0156
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0157
+//! @SYMTestCaseDesc Set the default plugin value to a plugin with no default data                  
+//! @SYMREQ REQ11230
+//! @SYMTestPriority High
+//! @SYMTestActions  Remove the Authentication database and call Authenticate using the default plugin and default identity.
+//! @SYMTestExpectedResults AuthServer fails to startup as the default user is not created successfully.
+//! @SYMDevelopedForRelease Intulo
+
+START_TESTCASE SEC-AUT-AUTHSVR-0157
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+RUN_UTILS DeleteFile C:\private\10202be9\persists\2001ea7f.cre
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr_new 	INIT_CENREP c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defaultplugin2
+
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !RESULT=-2  100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defaultplugin3
+END_TESTCASE SEC-AUT-AUTHSVR-0157
+
+
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0158
+//! @SYMTestCaseDesc Try to retrain the default user              
+//! @SYMREQ REQ11230
+//! @SYMTestPriority High
+//! @SYMTestActions  Remove the Authentication database and call retrain on the default identity.
+//! @SYMTestExpectedResults Fails with KErrNotSupported.
+//! @SYMDevelopedForRelease Intulo
+
+
+START_TESTCASE SEC-AUT-AUTHSVR-0158
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defidentity2
+RUN_TEST_STEP !Error=-5  100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defaultplugin4
+END_TESTCASE SEC-AUT-AUTHSVR-0158
+
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0159
+//! @SYMTestCaseDesc Try to remove the default user                
+//! @SYMREQ REQ11230
+//! @SYMTestPriority High
+//! @SYMTestActions  Remove the Authentication database and authenticate successfully using the default Id.
+//! 			   Try to remove the default identity.
+//! @SYMTestExpectedResults Fails with -10811 (KErrAuthServCanNotRemoveDefaultIdentity)
+//! @SYMDevelopedForRelease Intulo
+
+START_TESTCASE SEC-AUT-AUTHSVR-0159
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defidentity2
+RUN_TEST_STEP !Error=-10811  100	tAuthSvr 	REMOVE_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defidentity6
+END_TESTCASE SEC-AUT-AUTHSVR-0159
+
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0160
+//! @SYMTestCaseDesc Call forget plugin on the default identity/default plugin pair 
+//!                  
+//! @SYMREQ REQ11230
+//! @SYMTestPriority High
+//! @SYMTestActions  Remove the Authentication database and authenticate successfully using the default Id.
+//! 			   Call forget plugin on the default Identity/ default plugin pair.
+//! @SYMTestExpectedResults Fails with -10812 (KErrAuthServCanNotRemoveLastPlugin)
+//! @SYMDevelopedForRelease Intulo
+
+START_TESTCASE SEC-AUT-AUTHSVR-0160
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 		REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 		AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defidentity2
+RUN_TEST_STEP !Error=-10812  100	tAuthSvr 	FORGET_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defidentity7
+END_TESTCASE SEC-AUT-AUTHSVR-0160
+
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0161
+//! @SYMTestCaseDesc API validation testing for Asynchronous Authenticate using the default plugin (null alias).
+//!                  
+//! @SYMREQ REQ11230
+//! @SYMTestPriority High
+//! @SYMTestActions  Remove the Authentication database and call Authenticate using the default plugin and default identity.
+//! @SYMTestExpectedResults Authentication is successful.
+//! @SYMDevelopedForRelease Intulo
+
+START_TESTCASE SEC-AUT-AUTHSVR-0161
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr_new 	INIT_CENREP c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defaultplugin1
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defidentity8
+END_TESTCASE SEC-AUT-AUTHSVR-0161
+
+
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0162
+//! @SYMTestCaseDesc API validation testing for Synchronous Authenticate using the default plugin (null alias).
+//!                  
+//! @SYMREQ REQ11230
+//! @SYMTestPriority High
+//! @SYMTestActions  Remove the Authentication database and call Authenticate using the default plugin and default identity.
+//! @SYMTestExpectedResults Authentication is successful.
+//! @SYMDevelopedForRelease Intulo
+
+START_TESTCASE SEC-AUT-AUTHSVR-0162
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defidentity9
+END_TESTCASE SEC-AUT-AUTHSVR-0162
+
+
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0163
+//! @SYMTestCaseDesc API validation testing for Asynchronous Authenticate using the default plugin (null alias)..
+//!                  
+//! @SYMREQ REQ11230
+//! @SYMTestPriority High
+//! @SYMTestActions  Remove the Authentication database and call Authenticate using the default plugin and default identity.
+/
+//! @SYMTestExpectedResults Authentication fails.
+//! @SYMDevelopedForRelease Intulo
+
+START_TESTCASE SEC-AUT-AUTHSVR-0163
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !RESULT=FAIL 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defidentity10
+END_TESTCASE SEC-AUT-AUTHSVR-0163
+
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0164
+//! @SYMTestCaseDesc API validation testing for Synchronous Authenticate using the default plugin (null alias).
+//!                  
+//! @SYMREQ REQ11230
+//! @SYMTestPriority High
+//! @SYMTestActions  Remove the Authentication database and call Authenticate using the default plugin and default identity.
+/
+//! @SYMTestExpectedResults Authentication fails
+//! @SYMDevelopedForRelease Intulo
+
+START_TESTCASE SEC-AUT-AUTHSVR-0164
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !RESULT=FAIL  100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defidentity11
+RUN_UTILS DeleteFile C:\private\10202be9\persists\2001ea7f.cre
+END_TESTCASE SEC-AUT-AUTHSVR-0164
+
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0166
+//! @SYMTestCaseDesc Test authentication using an alias which is defined in terms of other aliases wherein 
+//!		     some of those aliases are inturn defined as empty string in authserver's cenrep file.
+//! @SYMREQ REQ11232,REQ11234
+//! @SYMTestActions  Register an identity and authenticate it using an alias as described above.
+//! @SYMTestExpectedResults Authentication must fail with KErrAuthStrengthAliasNotDefined.
+//! @SYMDevelopedForRelease Diran
+
+START_TESTCASE SEC-AUT-AUTHSVR-0166
+
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !Result=0 100	tAuthSvr	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthTestRegister
+
+RUN_TEST_STEP !Result=0 100	tAuthSvr_new	INIT_CENREP	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0166
+RUN_TEST_STEP !Error=-10816 100 tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0166
+
+END_TESTCASE SEC-AUT-AUTHSVR-0166
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0170
+//! @SYMTestCaseDesc Test authentication using an alias which is defined in terms of other aliases wherein some 
+//!		     of those aliases are inturn defined as empty quotes in authserver's cenrep file.
+//! @SYMREQ REQ11232,REQ11234
+//! @SYMTestActions  Register an identity and authenticate it using an alias as described above.
+//! @SYMTestExpectedResults Authentication must fail with KErrAuthStrengthAliasNotDefined.
+//! @SYMDevelopedForRelease Diran
+
+START_TESTCASE SEC-AUT-AUTHSVR-0170
+
+RUN_TEST_STEP !Result=0 100	tAuthSvr_new	INIT_CENREP	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0170
+RUN_TEST_STEP !Error=-10816 100 tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0170
+
+END_TESTCASE SEC-AUT-AUTHSVR-0170
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0171
+//! @SYMTestCaseDesc Test authentication using an alias whose alias string is an invalid expression (invalid/unknown alias).
+//! @SYMREQ REQ11232,REQ11234
+//! @SYMTestActions  Register an identity and authenticate it using an alias as described above.
+//! @SYMTestExpectedResults Authentication must fail with KErrAuthServInvalidAliasStringExpression.
+//! @SYMDevelopedForRelease Diran
+
+START_TESTCASE SEC-AUT-AUTHSVR-0171
+
+RUN_TEST_STEP !Result=0 100	tAuthSvr_new	INIT_CENREP	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0171
+RUN_TEST_STEP !Error=-10817 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0171
+
+END_TESTCASE SEC-AUT-AUTHSVR-0171
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0172
+//! @SYMTestCaseDesc Test authentication using an alias whose alias string is an invalid expression (invalid operator).
+//! @SYMREQ REQ11232,REQ11234
+//! @SYMTestActions  Register an identity and authenticate it using an alias as described above.
+//! @SYMTestExpectedResults Authentication must fail with KErrAuthServInvalidAliasStringExpression.
+//! @SYMDevelopedForRelease Diran
+
+START_TESTCASE SEC-AUT-AUTHSVR-0172
+
+RUN_TEST_STEP !Result=0 100	tAuthSvr_new	INIT_CENREP	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0172
+RUN_TEST_STEP !Error=-10817 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0172
+
+END_TESTCASE SEC-AUT-AUTHSVR-0172
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0173
+//! @SYMTestCaseDesc Test synchronous mode of authentication using an alias which is defined in terms of multiple aliases.
+//! @SYMREQ REQ11232,REQ11234
+//! @SYMTestActions  Register an identity and authenticate using an alias.
+//! @SYMTestExpectedResults Authentication is successful
+//! @SYMDevelopedForRelease Diran
+
+START_TESTCASE SEC-AUT-AUTHSVR-0173
+
+// Tests synchronous mode of authentication.
+RUN_TEST_STEP !Result=0 100	tAuthSvr_new	INIT_CENREP	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0173
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0173
+
+END_TESTCASE SEC-AUT-AUTHSVR-0173
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0174
+//! @SYMTestCaseDesc Test asynchronous mode of authentication using an alias which is defined in terms of multiple aliases.
+//! @SYMREQ REQ11232,REQ11234
+//! @SYMTestActions  Register an identity and authenticate using an alias.
+//! @SYMTestExpectedResults Authentication is successful
+//! @SYMDevelopedForRelease Diran
+
+START_TESTCASE SEC-AUT-AUTHSVR-0174
+
+//Tests aynchronous mode of authentication.
+RUN_TEST_STEP !Result=0 100	tAuthSvr_new	INIT_CENREP	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0174
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0174
+
+END_TESTCASE SEC-AUT-AUTHSVR-0174
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0175
+//! @SYMTestCaseDesc Test synchronous mode of authentication using an alias which is defined as a subset of other aliases.
+//! @SYMREQ REQ11232,REQ11234
+//! @SYMTestActions  Register an identity and authenticate using an alias.
+//! @SYMTestExpectedResults Authentication is successful
+//! @SYMDevelopedForRelease Diran
+
+START_TESTCASE SEC-AUT-AUTHSVR-0175
+
+// Tests asynchronous mode of authentication wherein some aliases are a subset of the other.
+RUN_TEST_STEP !Result=0 100	tAuthSvr_new	INIT_CENREP	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0175
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0175
+
+END_TESTCASE SEC-AUT-AUTHSVR-0175
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0176
+//! @SYMTestCaseDesc Test the auth expression evaluation .An alias which is defined as a 
+//!		     combination of other aliases and pluginId, and one of the plugin 11113103 is supplied with wrong pin.
+//! @SYMREQ REQ11232,REQ11234
+//! @SYMTestActions  Register an identity and authenticate using an alias.
+//! @SYMTestExpectedResults Authentication is successful
+//! @SYMDevelopedForRelease Diran
+
+START_TESTCASE SEC-AUT-AUTHSVR-0176
+
+// Tests asynchronous mode of authentication with complex auth expressions.
+RUN_TEST_STEP !Result=0 100	tAuthSvr_new	INIT_CENREP	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0176
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0176
+
+END_TESTCASE SEC-AUT-AUTHSVR-0176
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0177
+//! @SYMTestCaseDesc Authentication via aliases recursive definition test. Tests short circuit condition.
+//! @SYMREQ REQ11232,REQ11234
+//! @SYMTestActions  Register an identity and authenticate using an alias which has been defined recursively.
+//! @SYMTestExpectedResults Authentication must fail with KErrAuthServInvalidAliasStringExpression.
+//! @SYMDevelopedForRelease Diran
+
+START_TESTCASE SEC-AUT-AUTHSVR-0177
+
+RUN_TEST_STEP !Result=0 100	tAuthSvr_new	INIT_CENREP	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0177
+RUN_TEST_STEP !Error=-10817 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0177
+
+END_TESTCASE SEC-AUT-AUTHSVR-0177
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0178
+//! @SYMTestCaseDesc Authentication via aliases recursive definition test. Tests short circuit condition.
+//! @SYMREQ REQ11232,REQ11234
+//! @SYMTestActions  Register an identity and authenticate using an alias which has been defined recursively.
+//! @SYMTestExpectedResults Authentication must fail with KErrAuthServInvalidAliasStringExpression.
+//! @SYMDevelopedForRelease Diran
+
+START_TESTCASE SEC-AUT-AUTHSVR-0178
+
+RUN_TEST_STEP !Result=0 100	tAuthSvr_new	INIT_CENREP	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0178
+RUN_TEST_STEP !Error=-10817 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0178
+
+END_TESTCASE SEC-AUT-AUTHSVR-0178
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0179
+//! @SYMTestCaseDesc Authenticate using an alias which is not specified in authserver's cenrep file.
+//! @SYMREQ REQ11232,REQ11234
+//! @SYMTestActions  Register an identity and authenticate using an unknown alias.
+//! @SYMTestExpectedResults Authentication must fail with KErrUnknownAuthStrengthAlias.
+//! @SYMDevelopedForRelease Diran
+
+START_TESTCASE SEC-AUT-AUTHSVR-0179
+
+RUN_TEST_STEP !Result=0 100	tAuthSvr_new	INIT_CENREP	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0179
+RUN_TEST_STEP !Error=-10815 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0179
+
+END_TESTCASE SEC-AUT-AUTHSVR-0179
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0180
+//! @SYMTestCaseDesc Negative tests for authentication via aliases.
+//! @SYMREQ REQ11232,REQ11234
+//! @SYMTestActions  Register an identity and authenticate using an alias.
+//! @SYMTestExpectedResults Authentication must fail.
+//! @SYMDevelopedForRelease Diran
+
+START_TESTCASE SEC-AUT-AUTHSVR-0180
+
+// Tests synchronous mode of authentication.
+RUN_TEST_STEP !Result=0 100	tAuthSvr_new	INIT_CENREP	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0180
+RUN_TEST_STEP !Result=Fail 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0180
+
+END_TESTCASE SEC-AUT-AUTHSVR-0180
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0193
+//! @SYMTestCaseDesc Test synchronous mode of authentication using combination of plugin id and alias.
+//! @SYMDEF DEF133935
+//! @SYMTestActions  Initialize the cenrep, authenticate the user.
+//! @SYMTestExpectedResults Authentication is successful
+//! @SYMDevelopedForRelease Diran
+
+START_TESTCASE SEC-AUT-AUTHSVR-0193
+
+// Tests synchronous mode of authentication.
+RUN_TEST_STEP !Result=0 100	tAuthSvr_new	INIT_CENREP	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0193
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0193
+
+END_TESTCASE SEC-AUT-AUTHSVR-0193
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0194
+//! @SYMTestCaseDesc Test synchronous mode of authentication using combination of alias and default type
+//! for knowledge.
+//! @SYMDEF DEF133935
+//! @SYMTestActions  Initialize the cenrep, set the default preference for knowledge, authenticate the user.
+//! @SYMTestExpectedResults Authentication is successful
+//! @SYMDevelopedForRelease Diran
+
+START_TESTCASE SEC-AUT-AUTHSVR-0194
+
+// Tests synchronous mode of authentication.
+RUN_TEST_STEP !Result=0 100	tAuthSvr_new	INIT_CENREP	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0194
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	SET_PREFS 		c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0194
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0194
+
+END_TESTCASE SEC-AUT-AUTHSVR-0194
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0195
+//! @SYMTestCaseDesc Test synchronous mode of authentication using combination of alias and default type
+//! for knowledge.
+//! @SYMDEF DEF133935
+//! @SYMTestActions  Initialize the cenrep, set the default preference for knowledge, authenticate the user.
+//! @SYMTestExpectedResults Authentication is successful
+//! @SYMDevelopedForRelease Diran
+
+START_TESTCASE SEC-AUT-AUTHSVR-0195
+
+// Tests synchronous mode of authentication.
+RUN_TEST_STEP !Result=0 100	tAuthSvr_new	INIT_CENREP	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0195
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0195
+
+END_TESTCASE SEC-AUT-AUTHSVR-0195
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0196
+//! @SYMTestCaseDesc Test synchronous mode of authentication using combination of an incorrect auth
+//! type and non existent plugin id
+//! @SYMDEF DEF133935
+//! @SYMTestActions  Initialize the cenrep, set the default preference for knowledge, authenticate the user.
+//! @SYMTestExpectedResults Authentication fails as the incorrect type is assumed to be an alias name which
+//! is not present.
+//! @SYMDevelopedForRelease Diran
+
+START_TESTCASE SEC-AUT-AUTHSVR-0196
+
+// Tests synchronous mode of authentication.
+RUN_TEST_STEP !Result=0 100	tAuthSvr_new	INIT_CENREP	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0196
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	SET_PREFS 		c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0196
+RUN_TEST_STEP !Error=-10815 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0196
+
+END_TESTCASE SEC-AUT-AUTHSVR-0196
+
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0181
+//! @SYMTestCaseDesc Authentication via aliases Unicode support check.
+//! @SYMREQ REQ11232,REQ11234
+//! @SYMTestActions  Register an identity and authenticate using an alias which has been defined recursively
+//! @SYMTestExpectedResults Authentication must succeed.
+//! @SYMDevelopedForRelease Diran
+
+START_TESTCASE SEC-AUT-AUTHSVR-0181
+
+//asynchronous mode of authentication
+RUN_TEST_STEP !Result=0 100	tAuthSvr_new	INIT_CENREP	c:\tauth\tAuthSvr\scripts\tauthsvr2_unicode.ini Test0181
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2_unicode.ini Test0181
+
+END_TESTCASE SEC-AUT-AUTHSVR-0181
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0182
+//! @SYMTestCaseDesc Negative test for authentication via alias using unicode alias strength definition
+//! @SYMREQ REQ11232,REQ11234
+//! @SYMTestActions  Register an identity and authenticate using an alias which has been defined recursively
+//! @SYMTestExpectedResults Authentication must fail with KErrAuthServInvalidAliasStringExpression.
+//! @SYMDevelopedForRelease Diran
+
+START_TESTCASE SEC-AUT-AUTHSVR-0182
+
+//synchronous mode of authentication
+RUN_TEST_STEP !Result=0 100	tAuthSvr_new	INIT_CENREP	c:\tauth\tAuthSvr\scripts\tauthsvr2_unicode.ini Test0182
+RUN_TEST_STEP !Result=Fail 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2_unicode.ini Test0182
+
+END_TESTCASE SEC-AUT-AUTHSVR-0182
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0183
+//! @SYMTestCaseDesc Authserver CenRep file validation.
+//! @SYMREQ REQ11232,REQ11234
+//! @SYMTestActions  Set the alias count in the cenrep file to a negative value and authenticate using an alias.
+//! @SYMTestExpectedResults Authentication must fail with KErrArgument.
+//! @SYMDevelopedForRelease Diran
+
+START_TESTCASE SEC-AUT-AUTHSVR-0183
+
+// the alias count in the cenrep file is set to a negative value.
+RUN_TEST_STEP !Result=0 100	tAuthSvr_new	INIT_CENREP	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0183
+RUN_TEST_STEP !Error=-6 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0183
+
+END_TESTCASE SEC-AUT-AUTHSVR-0183
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0184
+//! @SYMTestCaseDesc Authserver CenRep file validation.
+//! @SYMREQ REQ11232,REQ11234
+//! @SYMTestActions  Set the alias count in the cenrep file to zero and authenticate using an alias.
+//! @SYMTestExpectedResults Authentication must fail with KErrNotFound.
+//! @SYMDevelopedForRelease Diran
+
+START_TESTCASE SEC-AUT-AUTHSVR-0184
+
+// the alias count in the cenrep file is set to a zero.
+RUN_TEST_STEP !Result=0 100	tAuthSvr_new	INIT_CENREP	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0184
+RUN_TEST_STEP !Error=-1 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0184
+
+END_TESTCASE SEC-AUT-AUTHSVR-0184
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0185
+//! @SYMTestCaseDesc Authserver CenRep file validation.Verify that only authserver can access auth cenrep file.
+//! @SYMREQ REQ11232,REQ11234
+//! @SYMTestActions  Verify that only authserver can access auth cenrep file.
+//! @SYMTestExpectedResults Initializing cenrep must fail with KErrPermissionDenied.
+//! @SYMDevelopedForRelease Diran
+
+START_TESTCASE SEC-AUT-AUTHSVR-0185
+
+RUN_TEST_STEP !Result=-46	tAuthSvr	INIT_CENREP	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0184
+
+END_TESTCASE SEC-AUT-AUTHSVR-0185
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0186
+//! @SYMTestCaseDesc Test of Reset Identity functionality. 
+//! 				 Positive case with single knowledge-based plugin and Reset all plugins API.
+//! @SYMREQ REQ11397
+//! @SYMTestExpectedResults Authenticate with old pin fails after reset and autheticate with new pin value passes.
+START_TESTCASE SEC-AUT-AUTHSVR-0186
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr REG_IDENTITY   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini RegisterId
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr RESET_IDENTITY c:\tauth\tAuthSvr\scripts\tauthsvr2.ini ResetIdAll
+RUN_TEST_STEP !RESULT=Fail 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPinPluginOldPin
+RUN_TEST_STEP !RESULT=Fail 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPlugin11113100OldPin
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPinPlugin
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPinPlugin
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPlugin11113100
+END_TESTCASE SEC-AUT-AUTHSVR-0186
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0187
+//! @SYMTestCaseDesc Test of Reset Identity functionality. 
+//! 				 Positive case with single knowledge-based plugin and Reset of given plugin type API.
+//! @SYMREQ REQ11397
+//! @SYMTestExpectedResults Authenticate with old pin fails after reset and autheticate with new pin value passes.
+START_TESTCASE SEC-AUT-AUTHSVR-0187
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr REG_IDENTITY   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini RegisterId
+RUN_TEST_STEP !Error=-6 100 tAuthSvr RESET_IDENTITY c:\tauth\tAuthSvr\scripts\tauthsvr2.ini ResetIdAllInvalidUser
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr RESET_IDENTITY c:\tauth\tAuthSvr\scripts\tauthsvr2.ini ResetIdTypeKnowledge
+RUN_TEST_STEP !RESULT=Fail 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPinPluginOldPin
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPinPlugin
+END_TESTCASE SEC-AUT-AUTHSVR-0187
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0188
+//! @SYMTestCaseDesc Test of Reset Identity functionality. 
+//! 				 Negative case where a single biometric-type plugin is attempted for a Reset.
+//! @SYMREQ REQ11397
+//! @SYMTestExpectedResults Reset must fail.
+START_TESTCASE SEC-AUT-AUTHSVR-0188
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr REG_IDENTITY   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini RegisterId
+RUN_TEST_STEP !Error=-10818 100 tAuthSvr RESET_IDENTITY c:\tauth\tAuthSvr\scripts\tauthsvr2.ini ResetIdTypeBiometric
+END_TESTCASE SEC-AUT-AUTHSVR-0188
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0189
+//! @SYMTestCaseDesc Test of Reset Identity functionality. 
+//!                  Repeat of SEC-AUT-AUTHSVR-0186 exercising reset by plugin id list.
+//! @SYMREQ REQ11397
+//! @SYMTestExpectedResults Authenticate with old pin fails after reset and autheticate with new pin value passes.
+START_TESTCASE SEC-AUT-AUTHSVR-0189
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr REG_IDENTITY   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini RegisterId
+RUN_TEST_STEP !Error=-6 100 tAuthSvr RESET_IDENTITY c:\tauth\tAuthSvr\scripts\tauthsvr2.ini ResetIdListInvalidUser
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr RESET_IDENTITY c:\tauth\tAuthSvr\scripts\tauthsvr2.ini ResetIdListPinPlugin
+RUN_TEST_STEP !RESULT=Fail 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPinPluginOldPin
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPinPlugin
+RUN_TEST_STEP !RESULT=Fail 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPlugin11113100OldPin
+RUN_TEST_STEP !RESULT=Fail 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPlugin11113100
+END_TESTCASE SEC-AUT-AUTHSVR-0189
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0190
+//! @SYMTestCaseDesc Test of Reset Identity functionality. 
+//!                  Negative case with single knowledge-based plugin that does not support Reset. 
+//! @SYMREQ REQ11397
+//! @SYMTestExpectedResults Authenticate with new pin value fails with new pin for the plugins that don't support reset.
+START_TESTCASE SEC-AUT-AUTHSVR-0190
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr REG_IDENTITY   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini RegisterIdLotsOfPlugins
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr RESET_IDENTITY c:\tauth\tAuthSvr\scripts\tauthsvr2.ini ResetIdAll
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPinPlugin
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPlugin11113100
+RUN_TEST_STEP !RESULT=FAIL 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPluginResetNoReTrain
+RUN_TEST_STEP !RESULT=FAIL 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPluginResetUnsup
+RUN_TEST_STEP !RESULT=FAIL 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPluginBiometric
+RUN_TEST_STEP !RESULT=FAIL 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPluginToken
+END_TESTCASE SEC-AUT-AUTHSVR-0190
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0191
+//! @SYMTestCaseDesc Test of Reset Identity functionality. 
+//!                  Negative case where reg data is passed to a single plugin which does not support reset.
+//! @SYMREQ REQ11397
+//! @SYMTestExpectedResults Authenticate with new pin value fails with new pin for the plugins that don't support reset.
+START_TESTCASE SEC-AUT-AUTHSVR-0191
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr REG_IDENTITY   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini RegisterIdLotsOfPlugins
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr RESET_IDENTITY c:\tauth\tAuthSvr\scripts\tauthsvr2.ini ResetIdListUnsupPlugin
+RUN_TEST_STEP !RESULT=FAIL 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPinPluginOldPin
+RUN_TEST_STEP !RESULT=FAIL 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPinPlugin
+RUN_TEST_STEP !RESULT=FAIL 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPlugin11113100OldPin
+RUN_TEST_STEP !RESULT=FAIL 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPlugin11113100
+RUN_TEST_STEP !RESULT=FAIL 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPluginResetNoReTrainOldPin
+RUN_TEST_STEP !RESULT=FAIL 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPluginResetNoReTrain
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPluginResetUnsupOldPin
+RUN_TEST_STEP !RESULT=FAIL 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPluginResetUnsup
+RUN_TEST_STEP !RESULT=FAIL 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPluginBiometricOldPin
+RUN_TEST_STEP !RESULT=FAIL 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPluginBiometric
+RUN_TEST_STEP !RESULT=FAIL 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPluginTokenOldPin
+RUN_TEST_STEP !RESULT=FAIL 100 tAuthSvr AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini AuthPluginToken
+RUN_TEST_STEP !Error=-5 100 tAuthSvr RESET_IDENTITY c:\tauth\tAuthSvr\scripts\tauthsvr2.ini ResetIdListUnsupPlugin
+END_TESTCASE SEC-AUT-AUTHSVR-0191
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0192
+//! @SYMTestCaseDesc Test of Reset Identity functionality. 
+//!                  Negative cases where invalid inputs are supplied for the reset APIs.
+//! @SYMREQ REQ11397
+//! @SYMTestExpectedResults Failure with KErrArgument.
+START_TESTCASE SEC-AUT-AUTHSVR-0192
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr REG_IDENTITY   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini RegisterId
+RUN_TEST_STEP !Error=-6 100 tAuthSvr RESET_IDENTITY c:\tauth\tAuthSvr\scripts\tauthsvr2.ini ResetIdAllMissingUser
+RUN_TEST_STEP !Error=-6 100 tAuthSvr RESET_IDENTITY c:\tauth\tAuthSvr\scripts\tauthsvr2.ini ResetIdAllInvalidUser
+RUN_TEST_STEP !Error=-6 100 tAuthSvr RESET_IDENTITY c:\tauth\tAuthSvr\scripts\tauthsvr2.ini ResetIdTypeInvalidUser
+RUN_TEST_STEP !Error=-6 100 tAuthSvr RESET_IDENTITY c:\tauth\tAuthSvr\scripts\tauthsvr2.ini ResetIdListInvalidUser
+RUN_TEST_STEP !Error=-6 100 tAuthSvr RESET_IDENTITY c:\tauth\tAuthSvr\scripts\tauthsvr2.ini ResetIdListNoPlugins
+RUN_TEST_STEP !Error=-6 100 tAuthSvr RESET_IDENTITY c:\tauth\tAuthSvr\scripts\tauthsvr2.ini ResetIdListCountMismatch
+END_TESTCASE SEC-AUT-AUTHSVR-0192
+
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr_new 	INIT_CENREP c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defaultplugin1
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0193
+//! @SYMTestCaseDesc Test Multithreaded Register (2 concurrent register requests). 
+//! @SYMREQ REQ4962
+//! @SYMDEF	DEF141403
+//! @SYMTestExpectedResults The first register thread completes successfully, the second thread returns KErrServerBusy
+START_TESTCASE SEC-AUT-AUTHSVR-0193
+RUN_UTILS CopyFile C:\tauth\tauthsvr\testdata\pinplugin_inactive.txt C:\pinplugin_inactive.txt
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr MULTI_THREADED c:\tauth\tAuthSvr\scripts\tauthsvr2.ini multithreadedRegister
+RUN_UTILS DeleteFile C:\pinplugin_inactive.txt
+END_TESTCASE SEC-AUT-AUTHSVR-0193
+
+START_TESTCASE Remove_PinPlugin_Data
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_in.dat
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_out.dat
+END_TESTCASE Remove_PinPlugin_Data
+
+
+// This is to shut down the auth server
+DELAY 5000
Binary file authenticationservices/authenticationserver/test/tAuthSvr/scripts/tAuthSvr2_unicode.ini has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/tAuthSvr3.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,1007 @@
+# Index of key values
+#iSupportsDefaultData 	- bool that defines if the chosen plugin supports default data
+#NumIdentities		- int that defines the expected number of identities that are registered on the server
+#pluginType		- 
+#isDefaultPlugin	- No longer in use. defaultPlugin is used instead
+#defaultPlugin		- string that defines which plugin to use as the default. Used to update the AuthServer policy file
+#pluginId		- Hex string that is the uid of the Ecom implementation. In the Test0000 to Test0009, it's used as a cue, and is also the expected UserId
+#userResult		- Int that contains what the user has input on being prompted to 'identify', i.e. the PIN
+#			In cases where this is absent, then we're expecting the 'data' returned to be the same as the pluginId value (cueValue)
+#userId			- String that contains the expected Id
+
+#plugin1Id		- Hex string that is the uid of the Ecom implementation
+#			  	In the RetrainPlugin steps, this is the plugin that is to be trained.
+#plugin1Status		- Int that specifies the expected status of the above plugin 
+				(0, 64, 128 -EAuthUntrained, EAuthTrained, EAuthFullyTrained)
+#Pin11113100Default	- bool that defines whether the plugins support default data. Also Pin11113101Default and Pin11113102Default
+#Pin11113100Active	- bool that defines whether the plugin is active or not. Also Pin11113101Active, Pin11113102Active
+#Pin11113100InputId	- string that defines the input to the plugin. Else, the default is used. (in Identify function)
+#Pin11113100InputTrain	- string that defines the input to the plugin. Else, the default is used. (in Train function)
+#finalUserName 		- string that defines the new name (description or identitystring) of a given identity
+retryRemove		- bool that defines whether the attempt to remove an identity is tried again in the same test step
+freshness		- Int that defines the number of seconds(timeout) within which a cached identity is returned (
+				(Authentication is skipped)
+[Test0000]
+NumIdentities = 3
+pluginId = 11113000
+
+[Test0001]
+iSupportsDefaultData = true
+NumIdentities = 3
+pluginType = EAuthKnowledge
+#isDefaultPlugin = true
+defaultPlugin = PIN
+pluginId = 11113100
+#userResult = 0011
+#userId = 597430
+#userResult = 2533
+#userId = 0873948
+userResult = 5555
+userId = 82383
+
+[Test0002]
+iSupportsDefaultData = true
+NumIdentities = 0
+pluginType = EAuthKnowledge
+#isDefaultPlugin = false
+#defaultPlugin = PIN
+
+[Test0003]
+iSupportsDefaultData = true
+NumIdentities = 0
+pluginType = EAuthBiometric
+isDefaultPlugin = true
+defaultPlugin = FINGER
+
+
+[Test0004]
+iSupportsDefaultData = false
+NumIdentities = 0
+pluginType = EAuthKnowledge
+#isDefaultPlugin = true
+defaultPlugin = PIN
+
+
+[Test0021a]
+#iSupportsDefaultData = false
+pluginType = EAuthKnowledge
+defaultPlugin = PIN
+Pin11113100InputTrain = 2035
+Pin11113100Default = true
+Pin11113100Active = true
+#initUserName = SOMENAME
+finalUserName = NewNameOfId2
+
+[Test0021b]
+plugin1Id = 11113100
+Pin11113100InputId = 2035
+freshness = 0
+Pin11113100Default = true
+Pin11113100Active = true
+
+[Test0021c]
+NumIdentities = 2
+plugin1Id = 11113100
+plugin1Status = 128
+
+#==========================================================
+#Next section is what is according to the test spec
+[Test0022a]
+#iSupportsDefaultData = true
+#pluginType = EAuthKnowledge
+#defaultPlugin = PIN
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+Pin11113100InputId = 5110
+Pin11113101InputId = 5101
+Pin11113102InputId = 5102
+Pin11113100InputTrain = 5110
+Pin11113101InputTrain = 5101
+Pin11113102InputTrain = 5102
+Pin11113100Default = false
+Pin11113101Default = false
+Pin11113102Default = false
+Pin11113100Active = false
+Pin11113101Active = false
+Pin11113102Active = false
+finalUserName = NewNameOfId2
+
+
+[Test0022b]
+plugin1Id = 11113100
+Pin11113100InputId = 5110
+Pin11113100Default = false
+Pin11113101Default = false
+Pin11113102Default = false
+Pin11113100Active = false
+Pin11113101Active = false
+Pin11113102Active = false
+freshness = 0
+
+[Test0022c]
+NumIdentities = 2
+plugin1Id = 11113100
+#EAuthUnTrained
+plugin1Status = 1
+
+[Test0022-works]
+iSupportsDefaultData = true
+pluginType = EAuthKnowledge
+defaultPlugin = PIN
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthTrained
+plugin1Status = 64
+#Value below should be used.
+#plugin1Status = 128
+Pin11113100InputId = 5110
+Pin11113101InputId = 5101
+Pin11113102InputId = 5102
+Pin11113100InputTrain = 5110
+Pin11113101InputTrain = 5101
+Pin11113102InputTrain = 5102
+Pin11113100Default = true
+Pin11113101Default = true
+Pin11113102Default = true
+Pin11113100Active = true
+Pin11113101Active = true
+Pin11113102Active = true
+finalUserName = NewNameOfId2
+
+[Test0022-Unused]
+iSupportsDefaultData = true
+pluginType = EAuthKnowledge
+defaultPlugin = PIN
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthTrained
+plugin1Status = 64
+Pin11113100Default = false
+Pin11113101Default = false
+Pin11113102Default = false
+Pin11113100Active = false
+Pin11113101Active = false
+Pin11113102Active = false
+initUserName = SOMENAME
+finalUserName = NewNameOfId2
+
+#==========================================================
+[Test0023a]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthUnTrained
+plugin1Status = 1
+#Pin11113100InputId = 5110
+Pin11113100InputTrain = 5110
+Pin11113100Default = false
+Pin11113101Default = false
+Pin11113102Default = false
+Pin11113100Active = false
+Pin11113101Active = false
+Pin11113102Active = false
+
+[Test0023b]
+plugin1Id = 11113100
+Pin11113100InputId = 5110
+Pin11113100Default = false
+Pin11113101Default = false
+Pin11113102Default = false
+Pin11113100Active = false
+Pin11113101Active = false
+Pin11113102Active = false
+
+
+[Test0023c]
+NumIdentities = 1
+plugin1Id = 11113100
+#EAuthUnTrained
+plugin1Status = 1
+
+[Test0023d]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullTrained
+plugin1Status = 128
+#Pin11113100InputId = 5110
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113101Default = true
+Pin11113102Default = true
+Pin11113100Active = true
+Pin11113101Active = true
+Pin11113102Active = true
+
+[Test0023e]
+NumIdentities = 2
+plugin1Id = 11113100
+#EAuthUnTrained
+plugin1Status = 128
+
+[Test0023f]
+plugin1Id = 11113100
+Pin11113100InputId = 5110
+Pin11113100Default = true
+Pin11113101Default = true
+Pin11113102Default = true
+Pin11113100Active = true
+Pin11113101Active = true
+Pin11113102Active = true
+
+#==========================================================
+[Test0024a]
+#This test expects the presence of plugin 10274104, else i'll need to supply the 3 properties for 11113101, input being 5101
+
+Pin11113100InputTrain = 5110
+Pin11113101InputTrain = 0000
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = true
+Pin11113101Active = true
+finalUserName = NewNameOfId2
+
+[Test0024b]
+plugin1Id = 11113100
+Pin11113100InputId = 5110
+Pin11113100Default = true
+Pin11113101Default = true
+Pin11113102Default = true
+Pin11113100Active = true
+Pin11113101Active = true
+Pin11113102Active = true
+
+[Test0024c]
+NumIdentities = 2
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+
+[Test0024d]
+NumIdentities = 2
+plugin1Id = 11113101
+#EAuthTrained
+plugin1Status = 64
+
+#==========================================================
+[Test0025a]
+NumIdentities = 1
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = false
+Pin11113101Active = true
+
+[Test0025b]
+NumIdentities = 1
+plugin1Id = 11113101
+#EAuthUnTrained
+plugin1Status = 1
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = false
+Pin11113101Active = true
+
+[Test0025c]
+Pin11113100InputTrain = 5110
+Pin11113101InputTrain = Cancel
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = false
+Pin11113101Active = true
+
+[Test0025d]
+NumIdentities = 2
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+
+[Test0025e]
+NumIdentities = 2
+plugin1Id = 11113101
+#EAuthUnTrained
+plugin1Status = 1
+
+[Test0025f]
+plugin1Id = 11113100
+Pin11113100InputId = 5110
+Pin11113100Default = true
+Pin11113100Active = true
+freshness = 0
+Pin11113101Default = false
+Pin11113101Active = true
+
+[Test0025g]
+plugin1Id = 11113101
+Pin11113101InputTrain = 5112
+Pin11113101Default = false
+Pin11113101Active = true
+
+[Test0025h]
+NumIdentities = 2
+plugin1Id = 11113101
+#EAuthTrained
+plugin1Status = 64
+
+[Test0025i]
+plugin1Id = 11113101
+Pin11113101InputId = 5112
+Pin11113101Default = false
+Pin11113101Active = true
+freshness = 0
+
+#=========================================
+[Test0026a]
+NumIdentities = 1
+#plugin1Id = 11113100
+#EAuthTrained
+#plugin1Status = 64
+Pin11113100InputTrain = 5110
+Pin11113101InputTrain = Quit
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = false
+Pin11113101Active = true
+
+[Test0026b]
+plugin1Id = 11113101
+Pin11113101InputId = 5110
+Pin11113101Default = false
+Pin11113101Active = true
+freshness = 0
+
+#=========================================
+[Test0027a]
+#Requires the presence of only 3 plugins.
+NumIdentities = 1
+#The plugin below is for the pinAuthPlugin
+#Pin11113100InputId = 0000
+Pin11113100InputTrain = 0000
+Pin11113100Default = true
+Pin11113100Active = true 
+#Pin11113101InputId = 0000
+Pin11113101InputTrain = 0000
+Pin11113101Default = true
+Pin11113101Active = true 
+#Pin11113102InputId = 0000
+Pin11113102InputTrain = 0000
+Pin11113102Default = true
+Pin11113102Active = true 
+
+[Test0027b]
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+
+[Test0028a]
+#Requires the presence of only 3 plugins, or i can set the other plugins to use the 'cancel' code
+NumIdentities = 1
+#The plugin below is for the pinAuthPlugin
+#plugin1Id = 11113100
+#EAuthTrained
+#plugin1Status = 64
+Pin11113100InputTrain = Cancel
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101InputTrain = Cancel 
+Pin11113101Default = true
+Pin11113101Active = true 
+Pin11113102InputTrain = Cancel
+Pin11113102Default = true
+Pin11113102Active = true
+
+[Test0028b]
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+
+[Test0041a]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+#Pin11113100InputId = 5110
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+
+[Test0041b]
+Pin11113100InputId = 5110
+plugin1Id = 11113100
+
+[Test0041c]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+#Pin11113100InputId = 5110
+Pin11113100InputTrain = 5118
+Pin11113100Default = true
+Pin11113100Active = true 
+
+[Test0041d]
+Pin11113100InputId = 5118
+plugin1Id = 11113100
+
+[Test0042a]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+#Pin11113100InputId = 5110
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+
+[Test0042b]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputId = 51194
+Pin11113100InputTrain = 5118
+Pin11113100Default = true
+Pin11113100Active = true 
+
+
+[Test0043a]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+#Pin11113100InputId = 5110
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+
+[Test0043b]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113188
+#EAuthUnTrained
+plugin1Status = 1
+Pin11113100InputId = 5110
+Pin11113100InputTrain = 5118
+Pin11113100Default = true
+Pin11113100Active = true 
+
+[Test0044a]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+#Pin11113100InputId = 5110
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+
+[Test0044b]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputId = 5110
+Pin11113100InputTrain = 5118
+Pin11113100Default = true
+Pin11113100Active = true 
+
+[Test0044c]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputId = 5117
+Pin11113100InputTrain = 5116
+Pin11113100Default = true
+Pin11113100Active = true 
+freshness = 0
+
+[Test0045a]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+#Pin11113100InputId = 5110
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+
+[Test0045b]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputId = 5110
+Pin11113100InputTrain = 0000
+Pin11113100Default = true
+Pin11113100Active = true 
+
+[Test0046a]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+#Pin11113100InputId = 5110
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+
+[Test0046b]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputId = 5110
+Pin11113100InputTrain = Cancel
+Pin11113100Default = true
+Pin11113100Active = true 
+
+[Test0047a]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+#Pin11113100InputId = 5110
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+
+[Test0047b]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputId = 5110
+Pin11113100InputTrain = Quit
+Pin11113100Default = true
+Pin11113100Active = true
+
+[Test0048a]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+Pin11113101InputTrain = 5111
+Pin11113101Default = true
+Pin11113101Active = true 
+
+
+[Test0048b]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputId = 5110
+Pin11113100InputTrain = 51178
+Pin11113100Default = true
+Pin11113100Active = true
+freshness = 0
+
+[Test0048c]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113101
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113101InputId = 5111
+Pin11113101InputTrain = 51175
+Pin11113101Default = true
+Pin11113101Active = true 
+freshness = 0
+
+[Test0061Test]
+#NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputId = 0000
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = false
+Pin11113101Active = false
+freshness = 0
+
+
+[Test0061a]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = false
+Pin11113101Active = false
+freshness = 0
+
+[Test0061b]
+NumIdentities = 2
+plugin1Id = 11113101
+#EAuthUnTrained
+plugin1Status = 1
+
+[Test0061c]
+Pin11113100InputId = 5110
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101InputTrain = 5111
+Pin11113101Active = true
+freshness = 60
+plugin1Id = 11113101
+#EAuthTrained
+plugin1Status = 64
+
+[Test0061d]
+plugin1Id = 11113101
+#EAuthTrained
+plugin1Status = 64
+
+[Test0061e]
+Pin11113100InputId = 0000
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101InputTrain = 5112
+Pin11113101Active = true
+freshness = 60
+plugin1Id = 11113101
+#EAuthFullyTrained
+plugin1Status = 128
+
+[Test0061f]
+plugin1Id = 11113101
+#EAuthFullyTrained
+plugin1Status = 128
+
+[Test0062a]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Default = false
+Pin11113101Active = false
+freshness = 0
+
+[Test0062b]
+NumIdentities = 2
+plugin1Id = 11113101
+#EAuthUnTrained
+plugin1Status = 1
+
+[Test0062c]
+Pin11113100InputId = 511085474
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101InputTrain = 5111
+Pin11113101Active = true
+freshness = 60
+
+[Test0062d]
+plugin1Id = 11113101
+#EAuthUnTrained
+plugin1Status = 1
+
+[Test0062e]
+Pin11113100InputId = 000011883
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101InputTrain = 5112
+Pin11113101Active = true
+freshness = 60
+
+[Test0062f]
+plugin1Id = 11113101
+#EAuthUnTrained
+plugin1Status = 1
+
+[Test0101a]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+Pin11113101InputTrain = 5111
+Pin11113101Default = true
+Pin11113101Active = true 
+
+[Test0101b]
+Pin11113101InputId = 5111
+plugin1Id = 11113101
+freshness = 0
+
+[Test0101c]
+NumIdentities = 1
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputId = 5110
+Pin11113100InputTrain = 51178
+Pin11113100Default = true
+Pin11113100Active = true
+#freshness = 0
+
+[Test0101d]
+Pin11113101InputId = 5111
+plugin1Id = 11113101
+freshness = 0
+
+[Test0102b]
+NumIdentities = 1
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputId = 0000
+#Pin11113100InputTrain = 51178
+Pin11113100Default = true
+Pin11113100Active = true
+freshness = 0
+
+
+[Test0103a]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+Pin11113101InputTrain = 5111
+Pin11113101Default = true
+Pin11113101Active = true 
+
+[Test0103b]
+NumIdentities = 1
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputId = 5110
+#Pin11113100InputTrain = 51178
+Pin11113100Default = true
+Pin11113100Active = true
+freshness = 0
+retryRemove = true
+
+[Test0104a]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+Pin11113101InputTrain = 5111
+Pin11113101Default = true
+Pin11113101Active = true 
+
+[Test0104b]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputId = 51178
+#Pin11113100InputTrain = 51178
+Pin11113100Default = true
+Pin11113100Active = true
+freshness = 0
+
+[Test0105a]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+Pin11113101InputTrain = 5111
+Pin11113101Default = true
+Pin11113101Active = true 
+
+[Test0105b]
+NumIdentities = 3
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputTrain = 6110
+Pin11113100Default = true
+Pin11113100Active = true 
+Pin11113101InputTrain = 6111
+Pin11113101Default = true
+Pin11113101Active = true 
+
+[Test0105c]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin11113100InputId = 5110
+Pin11113100Default = true
+Pin11113100Active = true
+freshness = 0
+retryRemove = true
+
+
+[Test0121a]
+iSupportsDefaultData = true
+plugin1Id = 11113100 & 11113101
+Pin11113100InputId = 5110
+Pin11113101InputId = 6110
+freshness = 0
+Pin11113100Default = true
+Pin11113101Active = true
+Pin11113100Active = true
+
+[Test0121b]
+NumIdentities = 2
+Pin11113100Active = true
+Pin11113100InputTrain = 5110
+Pin11113101Active = true
+Pin11113101InputTrain = 6110
+
+[Test0121c]
+forgetPlugin = 11113100
+
+[Test0121d]
+
+NumIdentities = 2
+plugin1Id = 11113100
+Pin11113100Active = true
+Pin11113100InputId = 5110
+freshness = 0
+
+[Test0122a]
+iSupportsDefaultData = true
+plugin1Id = 11113100
+Pin11113100InputId = 5110
+freshness = 0
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Active = false
+Pin11113102Active = false
+
+[Test0122b]
+NumIdentities = 2
+Pin11113100Active = true
+Pin11113100InputTrain = 5110
+Pin11113101Active = false
+Pin11113102Active = false
+
+[Test0122c]
+forgetPlugin = 11113100
+Pin11113100Active = true
+Pin11113101Active = false
+Pin11113102Active = false
+
+[Test0123a]
+iSupportsDefaultData = true
+plugin1Id = 11113100 & 11113102
+Pin11113100InputId = 5110
+Pin11113102InputId = 6220
+freshness = 0
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Active = false
+Pin11113102Active = false
+
+[Test0123b]
+NumIdentities = 2
+Pin11113100Active = true
+Pin11113100InputTrain = 5110
+Pin11113102Active = true
+Pin11113102InputTrain = 6220
+Pin11113101Active = false
+
+[Test0123c]
+forgetPlugin = 11113101
+Pin11113100Active = true
+Pin11113101Active = true
+Pin11113102Active = true
+
+[Test0124a]
+iSupportsDefaultData = true
+plugin1Id = 11113100 & 11113102
+Pin11113100InputId = 5110
+Pin11113102InputId = 6220
+freshness = 0
+Pin11113100Default = true
+Pin11113100Active = true
+Pin11113101Active = false
+Pin11113102Active = false
+
+[Test0124b]
+NumIdentities = 2
+Pin11113100Active = true
+Pin11113100InputTrain = 5110
+Pin11113102Active = true
+Pin11113102InputTrain = 6220
+Pin11113101Active = false
+
+[Test0124c]
+forgetPlugin = ffffffff
+Pin11113100Active = true
+Pin11113101Active = true
+Pin11113102Active = true
+
+[Test0125]
+forgetPlugin = 11113100
+forgetUnknown = true
+Pin11113100Active = true
+Pin11113100Default = true
+Pin11113101Active = true
+Pin11113102Active = true
+iSupportsDefaultData = true
+
+[Test0141]
+Pin11113100InputId = 5000
+Pin11113100InputTrain = 5000
+Pin11113100Default = true
+Pin11113100Active = true 
+Pin11113101InputId = 5001
+Pin11113101InputTrain = 5001
+Pin11113101Default = true
+Pin11113101Active = true 
+Pin11113102InputId = 5002
+Pin11113102InputTrain = 5002
+Pin11113102Default = true
+Pin11113102Active = true 
+plugin1Id = B & K & T
+KnowledgePref = 11113100
+BiometricPref = 11113101
+TokenPref     = 11113102
+
+[Test0142]
+Pin11113100InputId = 5000
+Pin11113100InputTrain = 5000
+Pin11113100Default = true
+Pin11113100Active = true 
+Pin11113101InputId = 5001
+Pin11113101InputTrain = 5001
+Pin11113101Default = true
+Pin11113101Active = true 
+Pin11113102InputId = 5002
+Pin11113102InputTrain = 5002
+Pin11113102Default = true
+Pin11113102Active = true 
+plugin1Id = B & K & T
+KnowledgePref = 11113100
+BiometricPref = 11113101
+TokenPref     = 11119999
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/tAuthSvr3.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,800 @@
+//
+// Copyright (c) 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: 
+//
+//
+// Copyright (c) 2009 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:
+//
+
+PRINT Authentication Server tests...
+
+//LOAD_SUITE tAuthSvr -SharedData
+
+LOAD_SUITE tAuthSvr
+
+//Next line makes use of the new keyword that is more readable
+//LOAD_SERVER tAuthSvrServer -SharedData		
+
+
+//============================================================
+//
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0056
+//! @SYMTestCaseDesc Start the authServer with no identities, having a default plugin defined
+//! 		     (IdentifyMultiple_AllAtOnce)
+//! @SYMREQ REQ , REQ , REQ , REQ 
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Identity API
+//! @SYMTestExpectedResults Default identity is the only one listed
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0056
+
+//RUN_UTILS MakeReadWrite c:\tauth\tAuthSvr\testdata\AuthSvrPolicy.ini
+
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	CreateTestDb 
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	FIRST_START			c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0001
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	IDENTIFY_MULTIPLE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0001
+
+END_TESTCASE SEC-AUT-AUTHSVR-0056
+
+//============================================================
+// //
+// //! @SYMTestCaseID SEC-AUT-AUTHSVR-0021
+// //! @SYMTestCaseDesc Start the authServer with no identities, having a default plugin defined
+// //! 		        (RegisterIdentity1_Normal)
+// //! @SYMREQ REQ4969 4970 4971 4972 4975 4976 4977 4978
+// //! @SYMTestPriority Medium
+// //! @SYMTestActions  Have a default plugin defined, use a client that has ReadDeviceData capability to connect to the AuthServer, 
+// //!			call the Enumerate Identity API
+// //! @SYMTestExpectedResults Default identity is the only one listed
+// //! @SYMDevelopedForRelease Intulo
+// START_TESTCASE SEC-AUT-AUTHSVR-0021
+
+// RUN_UTILS MakeReadWrite c:\tauth\tAuthSvr\testdata\AuthSvrPolicy.ini
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+// RUN_TEST_STEP !Result=Fail  100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0021b
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0021a
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0021b
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0021c
+// END_TESTCASE SEC-AUT-AUTHSVR-0021
+
+
+//============================================================
+//
+// //! @SYMTestCaseID SEC-AUT-AUTHSVR-0022
+// //! @SYMTestCaseDesc , Attempt to register a new identity, while a specific plugin inactive, the plugin should be remain untrained
+// //! 		        (RegisterIdentity2_NoActivePlugin)
+// //! @SYMREQ REQ4941 REQ4943 REQ4953 REQ4954
+// //! @SYMTestPriority Medium
+// //! @SYMTestActions  Start the authServer with no identities. 
+// //!			Have a default plugin defined, which is inactive,
+// //!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+// //!			call the Enumerate Plugins API
+// //! @SYMTestExpectedResults Specific plugin is untrained
+// //! @SYMDevelopedForRelease Intulo
+// START_TESTCASE SEC-AUT-AUTHSVR-0022
+
+// RUN_UTILS MakeReadWrite c:\tauth\tAuthSvr\testdata\AuthSvrPolicy.ini
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+// RUN_TEST_STEP !RESULT=-2 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0022b
+// RUN_TEST_STEP !RESULT=-2  100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0022a
+// RUN_TEST_STEP !RESULT=-2  100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0022b
+// RUN_TEST_STEP !RESULT=-2  100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0022c
+
+// // END_TESTCASE SEC-AUT-AUTHSVR-0022
+ 
+
+//============================================================
+// ////
+// //! @SYMTestCaseID SEC-AUT-AUTHSVR-0023
+// //! @SYMTestCaseDesc Attempt to register a new identity, while no plugins are active, then one is activated.
+// //! 		        (RegisterIdentity3_PluginActivatedLater
+// //! @SYMREQ REQ4954 REQ4960 REQ4962 REQ4968 REQ4957
+// //! @SYMTestPriority Medium
+// //! @SYMTestActions  Have a default plugin defined, which is inactive, and a second one which is inactive
+// //!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+// //!			call the Enumerate Plugins API
+// //! @SYMTestExpectedResults Default plugin is untrained, then fully trained after the 2nd try
+// //! @SYMDevelopedForRelease Intulo
+// START_TESTCASE SEC-AUT-AUTHSVR-0023
+
+// //RUN_UTILS MakeReadWrite c:\tauth\tAuthSvr\testdata\AuthSvrPolicy.ini
+RUN_UTILS MKDIR C:\testplugin_active\
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+// RUN_TEST_STEP !RESULT=-2  100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0023b
+// RUN_TEST_STEP !RESULT=-2  100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0023a
+// RUN_TEST_STEP !RESULT=-2  100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0023b
+// RUN_TEST_STEP !RESULT=-2  100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0023c
+// RUN_TEST_STEP_RESULT 0  100	tAuthSvr 	REMOVE_DBS
+// RUN_TEST_STEP !RESULT=-2  100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0023b
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0023d
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0023f
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0023e
+
+// END_TESTCASE SEC-AUT-AUTHSVR-0023
+
+
+//============================================================
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0024
+//! @SYMTestCaseDesc Attempt to register a new identity, but the transient key obtained from one of auth Plugin is non-unique.
+//! 		     (RegisterIdentity4_NonUniqueTransientkey)
+//! @SYMREQ REQ4953 REQ4954 REQ4955 REQ4957 REQ4958
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is inactive, and a second one which is inactive
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Try to register a 2nd identity while using the same 'Entered-Pin' as for the default identity.
+//! @SYMTestExpectedResults KErrAuthServPluginCancelled is received, then the plugin is showed as 
+//!				partially trained, not fully trained
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0024
+
+RUN_UTILS MKDIR C:\testplugin_active\
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !RESULT=Fail 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0024b
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0024a
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0024b
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0024c
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0024d
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+END_TESTCASE SEC-AUT-AUTHSVR-0024 
+
+//============================================================
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0025
+//! @SYMTestCaseDesc Attempt to register a new identity, but a plugin returns the cancellation code
+//! 		     (RegisterIdentity5_PluginCancel)
+//! @SYMREQ REQ4954 REQ4955 REQ4958 REQ4968 REQ4970 4971 4972
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is inactive, and a second one which is inactive
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Try to register a 2nd identity while using the 'Cancel' code as the PIN input
+//! @SYMTestExpectedResults KErrAuthServPluginCancelled is received, then the plugin is showed as 
+//!				partially trained, not fully trained
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0025
+
+
+RUN_UTILS MKDIR C:\testplugin_active\
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0025a
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0025b
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0025c
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0025d
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0025e
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0025f
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0025g
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0025d
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0025h
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0025i
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+END_TESTCASE SEC-AUT-AUTHSVR-0025
+
+
+//============================================================
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0026
+//! @SYMTestCaseDesc Attempt to register a new identity, but a plugin returns the 'quit' code
+//! 		     (RegisterIdentity6_PluginExit)
+//! @SYMREQ REQ4954 REQ4955 REQ4958 REQ4968 REQ4970 4971 4972
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is inactive, and a second one which is inactive
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Try to register a 2nd identity while using the 'Quit' code as the PIN input
+//! @SYMTestExpectedResults KErrAuthServPluginQuit is received, then the plugin is showed as 
+//!				partially trained, not fully trained
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0026
+
+RUN_UTILS MKDIR C:\testplugin_active\
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0026a
+RUN_TEST_STEP !RESULT=Fail 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0026b
+END_TESTCASE SEC-AUT-AUTHSVR-0026
+
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0027
+//! @SYMTestCaseDesc Attempt to register a new identity, but the authserver cannot uniquely resolve the identity with any of the supplied plugins
+//! 		     (RegisterIdentity7_NonUniqueIdentity_Retrain)
+//! @SYMREQ REQ4953 REQ4954 4955 4956 
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and two others which are active
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Try to register a 2nd identity while using the '0000' code as the PIN input
+//! @SYMTestExpectedResults The second identity is not registered. All the plugins are still 
+//!				fully trained
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0027
+
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0027a
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0027b
+END_TESTCASE SEC-AUT-AUTHSVR-0027
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0028
+//! @SYMTestCaseDesc Attempt to register a new identity, but the training for the 2 active plugins is cancelled
+//! 		     (RegisterIdentity8_NonUniqueIdentity_AllPluginsCancelled)
+//! @SYMREQ REQ4953 REQ4954 4955 4956
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is inactive, and a second one which is inactive
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Try to register a 2nd identity while using the 'Cancel' code as the PIN input for all 3 plugins
+//! @SYMTestExpectedResults The 2nd identity is not registered then the 3 plugins are showed as fully trained
+//!			       
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0028
+
+RUN_UTILS MKDIR C:\testplugin_active\
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0028a
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0028b
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+END_TESTCASE SEC-AUT-AUTHSVR-0028
+
+
+////
+// //! @SYMTestCaseID SEC-AUT-AUTHSVR-0041
+// //! @SYMTestCaseDesc Successful attempt at retraining a specified plugin
+// //! 		        (RetrainPlug-in1_Normal)
+// //! @SYMREQ REQ4953 REQ4954 4955 4956
+// //! @SYMTestPriority Medium
+// //! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+// //!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+// //!			call the Enumerate Plugins API
+// //!			Successfully register a 2nd identity while using a specified PIN input
+// //!			Authenticate then call the Train() function. Use the same PIN input so that the identity trained is one
+// //!			that has been previously trained. The plugin status is then checked
+// //! @SYMTestExpectedResults The authentication, registration and retrain are successful. The plugin status is 
+// //!			fully trained, then fully trained again
+// //! @SYMDevelopedForRelease Intulo
+// START_TESTCASE SEC-AUT-AUTHSVR-0041
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0041a
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0041b
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0041c
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0041d
+// END_TESTCASE SEC-AUT-AUTHSVR-0041
+
+
+//============================================================
+//
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0042
+//! @SYMTestCaseDesc Attempt at retraining a specified plugin, but authentication fails
+//! 		     (RetrainPlug-in2_AuthFailed)
+//! @SYMREQ 4969 4970 4971 4972 4975 4976 4977 4952
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Successfully register a 2nd identity while using a specified PIN input
+//!			Authenticate then call the Train() function. Use the a PIN input that has not been used before 
+//!			so that no identity is returned as having that PIN. 
+//! @SYMTestExpectedResults The registration is successful, the authentication fails, and so the retrain is unsuccessful. 
+//!			The plugin status is fully trained, then fully trained again
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0042 
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0042a
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0042b
+END_TESTCASE SEC-AUT-AUTHSVR-0042
+
+
+//============================================================
+//
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0043
+//! @SYMTestCaseDesc Attempt to retrain a specified plugin, but the plugin is unknown
+//! 		     (RetrainPlug-in3_UnknownPlugin)
+//! @SYMREQ 4969 4970 4971 4972 4975 4976 4977 4952
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Successfully register a 2nd identity while using a specified PIN input
+//!			Authenticate then call the Train() function. Use the a PIN input that has not been used before 
+//!			so that no identity is returned as having that PIN. 
+//! @SYMTestExpectedResults The registration is successful, the authentication fails, and so the retrain are unsuccessful. 
+//!			The plugin status is fully trained, then trained
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0043
+
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0043a
+//RUN_TEST_STEP_RESULT 106 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0043b
+END_TESTCASE SEC-AUT-AUTHSVR-0043
+
+
+
+//============================================================
+//
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0044
+//! @SYMTestCaseDesc Attempt to retrain a specified plugin, but the 2nd authentication fails
+//! 		     (RetrainPlug-in4_2ndAuthFailed)
+//! @SYMREQ 4969 4970 4971 4972 4975 4976 4977 4978 4952
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Successfully register a 2nd identity while using a specified PIN input
+//!			Authenticate then call the Train() function. Use the a PIN input that was used before so that the 
+//!			2nd identity is returned. A new PIN is now associated with the identity and that plugin
+//!			Attempt the authentication again, but using a wrong PIN. 
+//! @SYMTestExpectedResults The registration is successful, The first 'authenticate' and 'train' calls succeed. 
+//!			The 2nd authentication fails, and so the 2nd call to train is unsuccessful. 
+//!			The plugin status is fully trained, all three times that it is checked
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0044
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0044a
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0044b
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0044c
+END_TESTCASE SEC-AUT-AUTHSVR-0044
+
+
+//============================================================
+//
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0045
+//! @SYMTestCaseDesc Attempt to retrain a specified plugin, but a non-unique transient key is generated, prompting 
+//!			the retrain to be cancelled
+//! 		     (RetrainPlug-in5_NonUniqueTransientKey)
+//! @SYMREQ 4969 4970 4971 4972 4975 4976 4977 4978
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Successfully register a 2nd identity while using a specified PIN input
+//!			Authenticate then call the Train() function. Use the a PIN input that has not been used before 
+//!			so that the retrain is cancelled.
+//! @SYMTestExpectedResults The registration is successful, the authentication fails, and so the retrain are unsuccessful. 
+//!			The plugin status is fully trained, then fully trained again
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0045
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0045a
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0045b
+END_TESTCASE SEC-AUT-AUTHSVR-0045
+
+
+//============================================================
+//
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0046
+//! @SYMTestCaseDesc Attempt to retrain a specified plugin, but a cancellation code is entered at the 'retrain' stage
+//! 		     (RetrainPlug-in6_Cancel)
+//! @SYMREQ 4969 4970 4971 4972 4975 4976 4977 4978
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Successfully register a 2nd identity while using a specified PIN input
+//!			Authenticate then call the Train() function. Use the a cancellation code as the input
+//!			so that the retrain is cancelled.
+//! @SYMTestExpectedResults The registration is successful, the authentication fails, and so the retrain are unsuccessful. 
+//!			The plugin status is fully trained, then fully trained again
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0046
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0046a
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0046b
+END_TESTCASE SEC-AUT-AUTHSVR-0046
+
+
+//============================================================
+//
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0047
+//! @SYMTestCaseDesc Attempt to retrain a specified plugin, but a Quit code is entered at the 'retrain' stage
+//! 		     (RetrainPlug-in7_Quit)
+//! @SYMREQ 4969 4970 4971 4972 4975 4976 4977 4978
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Successfully register a 2nd identity while using a specified PIN input
+//!			Authenticate then call the Train() function. Use the a Quit code as the input
+//!			so that the retrain is quit.
+//! @SYMTestExpectedResults The registration is successful, the authentication fails, and so the retrain are unsuccessful. 
+//!			The plugin status is fully trained, then fully trained again
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0047
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0047a
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0047b
+END_TESTCASE SEC-AUT-AUTHSVR-0047
+
+
+//============================================================
+//
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0057
+//! @SYMTestCaseDesc Successful attempt to retrain a specified plugin, then another. 2nd Authentication required in both cases
+//! 		     (RetrainPlug-in8_2ndAuthRequired)
+//! @SYMREQ 4969 4970 4971 4972 4975 4976 4977 4978
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Successfully register a 2nd identity while using a specified PIN input
+//!			Authenticate then call the Train() function on the first plugin. Use the a valid, unique input
+//!			Authtenticate then call the Train function on the second plugin. Use a valid, unique input
+//! @SYMTestExpectedResults The registration is successful, the 2nd authentication is successful in both cases, 
+//!			as well as the retrain calls.
+//!			The plugin status for both plugins is fully trained, then fully trained again
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0057
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0048a
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0048b
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0048c
+END_TESTCASE SEC-AUT-AUTHSVR-0057
+
+
+//============================================================
+//
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0058
+//! @SYMTestCaseDesc Successful attempt to retrain a specified plugin, then another. 2nd Authentication required in both cases
+//! 		     (RetrainPlug-in8_2ndAuthRequired)
+//! @SYMREQ 4969 4970 4971 4972 4975 4976 4977 4978
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Successfully register a 2nd identity while using a specified PIN input
+//!			Authenticate then call the Train() function on the first plugin. Use the a valid, unique input
+//!			Authtenticate then call the Train function on the second plugin. Use a valid, unique input
+//! @SYMTestExpectedResults The registration is successful, the 2nd authentication is successful in both cases, 
+//!			as well as the retrain calls.
+//!			The plugin status for both plugins is fully trained, then fully trained again
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0058
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0048a
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0048b
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0048c
+END_TESTCASE SEC-AUT-AUTHSVR-0058
+
+//============================================================
+//
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0061
+//! @SYMTestCaseDesc Attempt to add a new authentication method first to one then the second of the
+//!			two present identities
+//! 		     (AddAuthMethod1_BothIdentities_Normal)
+//! @SYMREQ 4969 4970 4971 4972 4975 4976 4977 4978
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is inactive
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Successfully register a 2nd identity while using a specified PIN input with the default plugin only
+//!			Authenticate then call the Train() function. Use an identifying input that corresponds to what
+//!			was used to register the default identity using the default plugin. Therefore the default identity
+//!			is returned following the Authentication. The training is then done for the 2nd plugin
+//!			Carry out the same process with the second identity
+//! @SYMTestExpectedResults The authentication is successful,  and the first train call passes.
+//!			but the second train call passes as well
+//!			The plugin status for the second plugin is untrained, trained, then fully trained
+//!			There are 2 identities present after the register identity step
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0061
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0061Test
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0061a
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0061b
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0061c
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0061d
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0061e
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0061f
+END_TESTCASE SEC-AUT-AUTHSVR-0061
+
+//============================================================
+//
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0062
+//! @SYMTestCaseDesc Attempt to add a new authentication method first to one then the second of the
+//!			two present identities. Authentication fails in both cases.
+//! 		     (AddAuthMethod2_BothIdentities_AuthFailed)
+//! @SYMREQ 4969 4970 4971 4972 4975 4976 4977 4978
+//! @SYMTestPriority Medium
+//! @SYMTestActions   Have a default plugin defined, which is active, and a second one which is inactive
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Successfully register a 2nd identity while using a specified PIN input with the default plugin only
+//!			Fail to authenticate then try to call the Train() function. Use an identifying input that does not 
+//!			corresponds to what was used to register the default identity using the default plugin. Therefore no identity
+//!			is returned following the Authentication. The training is then attempted for the 2nd plugin
+//!			Carry out the same process with the second identity
+//! @SYMTestExpectedResults The authentication is successful,  and the first train call passes.
+//!			but the second train call passes as well
+//!			The plugin status for the second plugin is untrained, trained, then fully trained
+//!			There are 2 identities present after the register identity step
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0062
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0062a
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0062b
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0062c
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0062d
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	RETRAIN_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0062e
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0062f
+END_TESTCASE SEC-AUT-AUTHSVR-0062
+
+// //============================================================
+// //
+// //! @SYMTestCaseID SEC-AUT-AUTHSVR-0101
+// //! @SYMTestCaseDesc Successful attempt to remove a specified identity
+// //! 		        (RemoveIdentity1_Normal)
+// //! @SYMREQ 4964 4965 4966 4954
+// //! @SYMTestPriority Medium
+// //! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+// //!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+// //!			call the Enumerate Plugins API
+// //!			Successfully register a 2nd identity while using a specified PIN input
+// //!			Authenticate then call the removeIdentity() function. Use the a valid input so that the
+// //!			identity that was recently registered is returned following the Authentication, then removed
+// //! @SYMTestExpectedResults The registration is successful, the authentication is successful, 
+// //!			as well as the removeIdentity call.
+// //!			The plugin status for both plugins is fully trained, then fully trained again
+// //! @SYMDevelopedForRelease Intulo
+// START_TESTCASE SEC-AUT-AUTHSVR-0101
+RUN_UTILS MKDIR C:\testplugin_active\
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0101a
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0101b
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0101c
+// RUN_TEST_STEP !Result=Fail 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0101d
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0101c
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+// END_TESTCASE SEC-AUT-AUTHSVR-0101
+
+
+
+//============================================================
+//
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0102
+//! @SYMTestCaseDesc Attempt to remove a specified identity when only one identity exists
+//! 		     (RemoveIdentity2_OneIdentity)
+//! @SYMREQ 4964 4965 4966 4954
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Authenticate then call the removeIdentity() function. Use an input that corresponds to what
+//!			was used to register the default identity. Therefore the default identity is returned 
+//!			following the Authentication, then attempt to remove it
+//! @SYMTestExpectedResults The authentication is successful, but the removeIdentity call fails
+//!			The plugin status for the specified plugin is fully trained, then fully trained again
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0102
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+//RUN_TEST_STEP !Error=-10811 100	tAuthSvr 	REMOVE_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0102b
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0102b
+END_TESTCASE SEC-AUT-AUTHSVR-0102
+
+
+//============================================================
+//
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0103
+//! @SYMTestCaseDesc Attempt to remove a specified identity when only one identity exists
+//! 		     (RemoveIdentity3_NonExistentIdentity)
+//! @SYMREQ 4964 4965 4966 4954
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Successfully register a 2nd identity while using a specified PIN input
+//!			Authenticate then call the removeIdentity() function. Use an input that corresponds to what
+//!			was used to register the 2nd identity. Therefore the 2nd identity is returned 
+//!			following the Authentication. Remove this second identity then attempt to remove it again
+//! @SYMTestExpectedResults The authentication is successful,  and the first removeIdentity call passes.
+//!			but the second removeIdentity call fails because there's only 1 identity left
+//!			The plugin status for the specified plugin is fully trained, then fully trained again
+//!			There's 1 identity present after the 2 removeIdentity calls
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0103
+RUN_UTILS MKDIR C:\testplugin_active\
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0103a
+//RUN_TEST_STEP !Error=-10811 100	tAuthSvr 	REMOVE_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0103b
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0103b
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+END_TESTCASE SEC-AUT-AUTHSVR-0103
+
+
+//============================================================
+//
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0104
+//! @SYMTestCaseDesc Attempt to remove a specified identity but the authentication fails
+//! 		     (RemoveIdentity4_AuthFailed)
+//! @SYMREQ 4964 4965 4966 4954
+//! @SYMTestPriority Medium
+//! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+//!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+//!			call the Enumerate Plugins API
+//!			Successfully register a 2nd identity while using a specified PIN input
+//!			Authenticate then call the removeIdentity() function. Use an input that doesn't correspond
+//!			to what was used to register the 2nd identity. Therefore no identity is returned 
+//!			following the Authentication. Attempt to remove this absent identity.
+//! @SYMTestExpectedResults The authentication fails,  and the removeIdentity call fails.
+//!			because there is no such identity in the authentication server.
+//!			The plugin status for the specified plugin is fully trained, then fully trained again
+//!			There's 1 identity present after the 2 removeIdentity calls
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0104
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0104a
+//RUN_TEST_STEP !Error=-10808 100	tAuthSvr 	REMOVE_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0104b
+//RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0104b
+END_TESTCASE SEC-AUT-AUTHSVR-0104
+
+
+// //============================================================
+// //
+// //! @SYMTestCaseID SEC-AUT-AUTHSVR-0105
+// //! @SYMTestCaseDesc Attempt to remove a specified identity when only one identity exists
+// //! 		        (RemoveIdentity5_NonExistentIdentity_TwoOthersExist)
+// //! @SYMREQ 4964 4965 4966 4954
+// //! @SYMTestPriority Medium
+// //! @SYMTestActions  Have a default plugin defined, which is active, and a second one which is active as well
+// //!			use a client that has ReadDeviceData capability to connect to the AuthServer, 
+// //!			call the Enumerate Plugins API
+// //!			Successfully register a 2nd identity while using a specified PIN input
+// //!			Successfully register a 3rd identity while using a specified PIN input
+// //!			Authenticate then call the removeIdentity() function. Use an input that corresponds to what
+// //!			was used to register the 2nd identity. Therefore the 2nd identity is returned 
+// //!			following the Authentication. Remove this second identity then attempt to remove it again
+// //! @SYMTestExpectedResults The authentication is successful,  and the first removeIdentity call passes.
+// //!			but the second removeIdentity call fails because an unknown identity was specified
+// //!			The plugin status for the specified plugin is fully trained, then fully trained again
+// //!			There are 2 identities present after the 2 removeIdentity calls
+// //! @SYMDevelopedForRelease Intulo
+// START_TESTCASE SEC-AUT-AUTHSVR-0105
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0105a
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0105b
+// RUN_TEST_STEP !Error=-10808 100	tAuthSvr 	REMOVE_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0105c
+// RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0105c
+// END_TESTCASE SEC-AUT-AUTHSVR-0105
+//============================================================
+//
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0121
+//! @SYMTestCaseDesc A user successfully removes an authentication plug-in trained for their identity
+//! 		     (ForgetPlug-in1_Normal)
+//! @SYMREQ REQ4964 REQ4965 REQ4966 REQ4954
+//! @SYMTestPriority Medium
+//! @SYMTestActions  
+//! @SYMTestExpectedResults 
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0121
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0121b
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0121a
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	FORGET_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0121c
+RUN_TEST_STEP !RESULT=Fail 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0121d
+END_TESTCASE SEC-AUT-AUTHSVR-0121
+
+/============================================================
+//
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0122
+//! @SYMTestCaseDesc A user attempts to remove an auth plug-in trained for their identity, but there's only a single auth method for the identity.
+//! 		     (ForgetPlug-in1_LastPlugin)
+//! @SYMREQ REQ4964 REQ4965 REQ4966 REQ4954
+//! @SYMTestPriority Medium
+//! @SYMTestActions  
+//! @SYMTestExpectedResults 
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0122
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0122b
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0122a
+RUN_TEST_STEP !RESULT=Fail 100 tAuthSvr FORGET_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0122c
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0122a
+END_TESTCASE  SEC-AUT-AUTHSVR-0122
+/============================================================
+//
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0123
+//! @SYMTestCaseDesc A user attempts to remove an auth plug-in, but the identity has no transient key associated with this plug-in
+//! 		     (ForgetUntrainedAuthMethod)
+//! @SYMREQ REQ4964 REQ4965 REQ4966 REQ4954
+//! @SYMTestPriority Medium
+//! @SYMTestActions  
+//! @SYMTestExpectedResults 
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0123
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0123b
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0123a
+RUN_TEST_STEP !RESULT=Fail 100 tAuthSvr FORGET_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0123c
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0123a
+END_TESTCASE SEC-AUT-AUTHSVR-0123
+
+/============================================================
+//
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0124
+//! @SYMTestCaseDesc A user attempts to remove an auth plug-in, but the plugin does not exist
+//! 		     (ForgetUnknownPlugin)
+//! @SYMREQ REQ4964 REQ4965 REQ4966 REQ4954
+//! @SYMTestPriority Medium
+//! @SYMTestActions  
+//! @SYMTestExpectedResults 
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0124
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0124b
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0124a
+RUN_TEST_STEP !RESULT=Fail 100 tAuthSvr FORGET_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0124c
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0124a
+END_TESTCASE SEC-AUT-AUTHSVR-0124
+
+/============================================================
+//
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0125
+//! @SYMTestCaseDesc A user attempts to remove an auth plug-in, but the identity specified does not exist
+//! 		     (ForgetUnknownIdentity)
+//! @SYMREQ REQ4964 REQ4965 REQ4966 REQ4954
+//! @SYMTestPriority Medium
+//! @SYMTestActions  
+//! @SYMTestExpectedResults 
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0125
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !RESULT=Fail 100 tAuthSvr FORGET_PLUGIN	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0125
+END_TESTCASE SEC-AUT-AUTHSVR-0125
+
+
+//============================================================
+//
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0141
+//! @SYMTestCaseDesc Auth preferences are set correctly.
+//! 		     (SetPreference_Success)
+//! @SYMREQ REQ4983 REQ4973 REQ4966 REQ4967 REQ4968
+//! @SYMTestPriority Medium
+//! @SYMTestActions  
+//! @SYMTestExpectedResults 
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0141
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0141
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	SET_PREFS 		c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0141
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE    c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0141
+END_TESTCASE SEC-AUT-AUTHSVR-0141
+
+//============================================================
+//
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0142
+//! @SYMTestCaseDesc An Auth preference is set with an invalid plug-in
+//! 		     (SetPreference_Success)
+//! @SYMREQ REQ4964 REQ4965 REQ4966 REQ4954
+//! @SYMTestPriority Medium
+//! @SYMTestActions  
+//! @SYMTestExpectedResults 
+//! @SYMDevelopedForRelease Intulo
+START_TESTCASE SEC-AUT-AUTHSVR-0142
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0142
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	SET_PREFS 		c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0142
+RUN_TEST_STEP !Error=-10802 100	tAuthSvr 	AUTHENTICATE    c:\tauth\tAuthSvr\scripts\tauthsvr3.ini Test0142
+END_TESTCASE SEC-AUT-AUTHSVR-0142
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/tAuthSvr4.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,49 @@
+//
+// Copyright (c) 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: 
+//
+//
+// Copyright (c) 2009 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:
+//
+
+PRINT Default Plugin negative test cases (Requires replacement of CenRep initialization files...)
+
+LOAD_SUITE tAuthSvr
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0165
+//! @SYMTestCaseDesc Start the Authserver with the Cenrep file containing a blank value for default plugin
+//!                  
+//! @SYMREQ REQ11230
+//! @SYMTestPriority High
+//! @SYMTestActions  Remove the Authentication database. Try to start the authserver.
+//! @SYMTestExpectedResults Authserver start fails with KErrCorrupt (-20)
+//! @SYMDevelopedForRelease Intulo
+
+START_TESTCASE SEC-AUT-AUTHSVR-0165
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !RESULT=-20 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0024d
+END_TESTCASE SEC-AUT-AUTHSVR-0165
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/tAuthSvr5.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,50 @@
+//
+// Copyright (c) 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: 
+//
+//
+// Copyright (c) 2009 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:
+//
+
+PRINT Default Plugin negative test cases (Requires replacement of CenRep initialization files...
+
+LOAD_SUITE tAuthSvr
+
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0166
+//! @SYMTestCaseDesc Start the Authserver with the Cenrep file containing an alias for default plugin           
+//! @SYMREQ REQ11230
+//! @SYMTestPriority High
+//! @SYMTestActions  Remove the Authentication database. Try to start the authserver.
+//! @SYMTestExpectedResults Authserver start fails with KErrCorrupt (-20)
+//! @SYMDevelopedForRelease Intulo
+
+
+START_TESTCASE SEC-AUT-AUTHSVR-0166
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !RESULT=-20 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0024d
+END_TESTCASE SEC-AUT-AUTHSVR-0166
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/tAuthSvr6.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,50 @@
+//
+// Copyright (c) 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: 
+//
+//
+// Copyright (c) 2009 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:
+//
+
+PRINT Default Plugin negative test cases (Requires replacement of CenRep initialization files...
+
+LOAD_SUITE tAuthSvr
+
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0165
+//! @SYMTestCaseDesc Start the Authserver with the Cenrep file containing a plugin type for default plugin           
+//! @SYMREQ REQ11230
+//! @SYMTestPriority High
+//! @SYMTestActions  Remove the Authentication database. Try to start the authserver.
+//! @SYMTestExpectedResults Authserver start fails with KErrCorrupt (-20)
+//! @SYMDevelopedForRelease Intulo
+
+
+START_TESTCASE SEC-AUT-AUTHSVR-0165
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !RESULT=-20 100	tAuthSvr 	AUTHSVR_CHECK	c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0024d
+END_TESTCASE SEC-AUT-AUTHSVR-0165
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/tauthsvr_performance.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,55 @@
+[Test0001]
+TestType = 3
+OOMTest = 2
+NumIdentities = 2
+plugin1Id = 11113100
+plugin1Status = 128
+
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true
+iterationCount = 10
+
+[Test0002]
+TestType = 3
+OOMTest = 4
+Pin11113100InputId = 5110
+plugin1Id = 11113100
+iterationCount = 10
+
+[Test0003]
+TestType = 3
+OOMTest = 8
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 11113100
+#EAuthFullyTrained
+plugin1Status = 64
+#Pin11113100InputId = 5110
+Pin11113100InputTrain = 5118
+Pin11113100Default = true
+Pin11113100Active = true
+iterationCount = 10
+
+[Test0004]
+TestType = 3
+OOMTest = 2
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true 
+Pin11113101InputTrain = 5111
+Pin11113101Default = true
+Pin11113101Active = true
+iterationCount = 10
+
+[Test0005]
+TestType = 3
+OOMTest = 4
+plugin1Id = 11113100 & 11113101
+Pin11113100Active = true 
+Pin11113100InputId = 5110
+Pin11113101Active = true
+iterationCount = 10
+Pin11113101InputId = 5111
+freshness = 0
+iterationCount = 10
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/tauthsvr_performance.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,72 @@
+//
+// Copyright (c) 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: 
+//
+//
+// Copyright (c) 2009 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:
+//
+
+PRINT Authentication Server Performance tests...
+
+// Prepare a clone of TAuthSvr to possess authserver's SID.
+// This is required for modifying the authserver's central repository file.
+// This clone must be deleted at the end of the test.
+
+RUN_PROGRAM 100 SETCAP tAuthSvr.exe 188b0 -SID 102740FC tAuthSvr_new.exe
+
+LOAD_SUITE tAuthSvr
+LOAD_SUITE tAuthSvr_new
+
+RUN_UTILS CopyFile C:\tauth\tauthsvr\testdata\pinplugin_inactive.txt C:\pinplugin_inactive.txt
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr_new 	INIT_CENREP c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defaultplugin1
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_in.dat
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_out.dat
+
+START_TESTCASE SEC-AUT-AUTHSVR-PERFORMANCE-TEST0001
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	OOM_TEST	c:\tauth\tAuthSvr\scripts\tauthsvr_performance.ini Test0001
+END_TESTCASE SEC-AUT-AUTHSVR-PERFORMANCE-TEST0001
+
+START_TESTCASE SEC-AUT-AUTHSVR-PERFORMANCE-TEST0002
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	OOM_TEST	c:\tauth\tAuthSvr\scripts\tauthsvr_performance.ini Test0002
+END_TESTCASE SEC-AUT-AUTHSVR-PERFORMANCE-TEST0002
+
+START_TESTCASE SEC-AUT-AUTHSVR-PERFORMANCE-TEST0003
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	OOM_TEST	c:\tauth\tAuthSvr\scripts\tauthsvr_performance.ini Test0003
+END_TESTCASE SEC-AUT-AUTHSVR-PERFORMANCE-TEST0003
+
+START_TESTCASE SEC-AUT-AUTHSVR-PERFORMANCE-TEST0004
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !Result=0 100	tAuthSvr 	OOM_TEST	c:\tauth\tAuthSvr\scripts\tauthsvr_performance.ini Test0004
+END_TESTCASE SEC-AUT-AUTHSVR-PERFORMANCE-TEST0004
+
+// authenticate with 2 plugins.
+START_TESTCASE SEC-AUT-AUTHSVR-PERFORMANCE-TEST0005
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	OOM_TEST	c:\tauth\tAuthSvr\scripts\tauthsvr_performance.ini Test0005
+END_TESTCASE SEC-AUT-AUTHSVR-PERFORMANCE-TEST0005
+
+RUN_UTILS DeleteFile  C:\pinplugin_inactive.txt
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/tauthsvrclock.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,88 @@
+//
+// Copyright (c) 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: 
+//
+//
+// Copyright (c) 2009 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:
+//
+//Script to test the secure clock implementation in Authserver.
+
+
+RUN_PROGRAM 100 SETCAP tAuthSvr.exe 188b0 -SID 102740FC tAuthSvr_new.exe
+
+LOAD_SUITE tAuthSvr_new
+LOAD_SUITE tAuthSvr
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0144
+//! @SYMTestCaseDesc Remove_PinPlugin_Data
+START_TESTCASE SEC-AUT-AUTHSVR-0144
+RUN_UTILS DeleteFile C:\pinplugin_inactive.txt
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr_new 	INIT_CENREP c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defaultplugin
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_in.dat
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_out.dat
+END_TESTCASE SEC-AUT-AUTHSVR-0144
+
+
+
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr	UPDATE_SYSTIME c:\tauth\tAuthSvr\scripts\tauthsvr2.ini time
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0193
+//! @SYMTestCaseDesc Test the secure clock implementation in AuthServer.A user is first authenticated successfully
+//!			  	 after which the system time is set ahead by 600 seconds. Authentication is called again using a
+//!			   	a wrong pin and a freshness period of 300. Since a cached identity is returned ,authentication is 
+//!			   	successful. 
+//! @SYMTestPriority Medium
+//! @SYMTestActions Check if a cached identity is being returned
+//! @SYMTestExpectedResults Authentication is successful
+//! @SYMDevelopedForRelease Intulo 
+ 
+START_TESTCASE SEC-AUT-AUTHSVR-0193
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr	REG_IDENTITY   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0197
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr	AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0198
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr	UPDATE_SYSTIME c:\tauth\tAuthSvr\scripts\tauthsvr2.ini time1
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr	AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0199
+END_TESTCASE SEC-AUT-AUTHSVR-0193
+
+
+//! @SYMTestCaseID SEC-AUT-AUTHSVR-0194
+//! @SYMTestCaseDesc Test the secure clock implementation in AuthServer.A user is first authenticated successfully
+//!			   	after which a 5 second delay is used to advance the secure clock.The system clock is 
+//!			   	now set back by 600 seconds and an authentication is called with a wrong pin and freshess 5. Since 
+//!			  	 reauthentication occurs ,authentication fails
+//! @SYMTestPriority Medium
+//! @SYMTestActions Check if a cached identity is not being returned
+//! @SYMTestExpectedResults Authentication fails 
+//! @SYMDevelopedForRelease Intulo 
+
+START_TESTCASE SEC-AUT-AUTHSVR-0194
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100		tAuthSvr	REG_IDENTITY   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0200
+RUN_TEST_STEP_RESULT 0 100		tAuthSvr	AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0201
+DELAY 5000
+RUN_TEST_STEP_RESULT 0 100		tAuthSvr	UPDATE_SYSTIME c:\tauth\tAuthSvr\scripts\tauthsvr2.ini time2
+RUN_TEST_STEP !Result=Fail  100	tAuthSvr	AUTHENTICATE   c:\tauth\tAuthSvr\scripts\tauthsvr2.ini Test0202
+END_TESTCASE SEC-AUT-AUTHSVR-0194
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/tauthsvroom.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,181 @@
+# Index of key values
+#TestType ---- OOM tests can be run on either the client side or the server side
+#	      For Client side      -- TestType = 1		
+#	      For Server side 	   -- TestType = 2
+#	      For Performane tests -- TestType = 3		
+#OOMTest ---- The OOM Test which has to be run. This is the index of the test in  CAuthSvrOom::doTestL()
+#
+
+
+[oom1]
+TestType = 2
+OOMTest = 3
+plugin1Id = 200032E5
+Pin200032E5InputId = 2035
+freshness = 0
+Pin11113100Default = false
+Pin11113100Active = false
+Pin11113104Active = false
+DisplayMessage = " Display String 1 "
+
+[oom2]
+TestType = 2
+OOMTest = 2
+#iSupportsDefaultData = false
+pluginType = EAuthKnowledge
+defaultPlugin = PIN
+Pin11113100Default = false
+Pin11113100Active = false
+Pin11113104Active = false
+Pin11113103Active = false
+Pin11113102Active = false
+Pin11113101Active = false
+#initUserName = SOMENAME
+finalUserName = NewNameOfId2
+
+[oom3]
+TestType = 1
+OOMTest = 3
+plugin1Id = 200032E5
+Pin200032E5InputId = 2035
+freshness = 0
+Pin11113100Default = false
+Pin11113100Active = false
+
+
+
+[oom4]
+TestType = 1
+OOMTest = 2
+#iSupportsDefaultData = false
+pluginType = EAuthKnowledge
+defaultPlugin = PIN
+Pin200032E5InputTrain = 2035
+Pin11113100Default = false
+Pin11113100Active = false
+Pin11113104Active = false
+Pin11113103Active = false
+Pin11113102Active = false
+Pin11113101Active = false
+#initUserName = SOMENAME
+finalUserName = NewNameOfId2
+
+[oom5]
+TestType = 2
+OOMTest = 4
+plugin1Id = 200032E5
+Pin200032E5InputId = 2035
+freshness = 0
+Pin11113100Default = false
+Pin11113100Active = false
+
+
+[oom6]
+TestType = 1
+OOMTest = 4
+plugin1Id = 200032E5
+Pin200032E5InputId = 2035
+freshness = 0
+Pin11113100Default = false
+Pin11113100Active = false
+
+[oom7]
+TestType = 2
+OOMTest = 5
+KnowledgePref = 200032E5
+
+[oom8]
+TestType = 2
+OOMTest = 6
+plugin1Id = 200032E5
+
+
+[oom9]
+TestType = 2
+OOMTest = 7
+plugin1Id = 200032E5
+
+[oom10]
+TestType = 2
+OOMTest = 8
+plugin1Id = 10274104
+
+
+[oom11]
+TestType = 2
+OOMTest = 9
+
+[oom12]
+TestType = 2
+OOMTest = 10
+
+[oom13]
+TestType = 2
+OOMTest = 11
+
+[oom14]
+TestType = 2
+OOMTest = 12
+
+[oom15]
+TestType = 2
+OOMTest = 13
+
+[oom16]
+TestType = 2
+OOMTest = 14
+
+[oom17]
+TestType = 2
+OOMTest = 15
+
+[oom18]
+TestType = 2
+OOMTest = 16
+plugin1Id = 200032E5
+
+[Test1]
+#iSupportsDefaultData = false
+pluginType = EAuthKnowledge
+defaultPlugin = PIN
+Pin11113100InputTrain = 2035
+Pin11113100Default = false
+Pin11113100Active = false
+Pin11113104Active = false
+Pin11113103Active = false
+Pin11113102Active = false
+Pin11113101Active = false
+#initUserName = SOMENAME
+finalUserName = NewNameOfId2
+
+[Test2]
+plugin1Id = 200032E5
+Pin200032E5InputId = 2035
+freshness = 0
+Pin11113100Default = false
+Pin11113100Active = false
+Pin11113104Active = false
+DisplayMessage = " Display String 1 "
+
+
+[Test3]
+plugin1Id = 200032E5
+Pin200032E5InputId = 2035
+freshness = 0
+Pin11113100Default = false
+Pin11113100Active = false
+DisplayMessage = " Display String 1 "
+
+[Test4]
+#iSupportsDefaultData = false
+pluginType = EAuthKnowledge
+defaultPlugin = PIN
+Pin200032E5InputTrain = 2035
+Pin11113100Default = false
+Pin11113100Active = false
+Pin11113104Active = false
+Pin11113103Active = false
+Pin11113102Active = false
+Pin11113101Active = false
+#initUserName = SOMENAME
+finalUserName = NewNameOfId2
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/tauthsvroom.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,181 @@
+//
+// Copyright (c) 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: 
+//
+//
+// Copyright (c) 2009 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:
+//
+//! @file
+//AuthServer OOM Tests
+
+RUN_PROGRAM 100 SETCAP tAuthSvr.exe 188b0 -SID 102740FC tAuthSvr_new.exe
+LOAD_SUITE tAuthSvr_new
+LOAD_SUITE tAuthSvr
+
+
+//Delete plugin dat files and initialize default plugin value
+RUN_UTILS DeleteFile C:\pinplugin_inactive.txt
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_in.dat
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_out.dat
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr_new 	INIT_CENREP c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defaultplugin
+
+
+
+//SEE tauthsvroom.ini for instructions on adding OOM tests.
+
+
+
+
+
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHSVROOM-0001
+//! @SYMTestCaseDesc Authserver OOM tests for all published api's
+//! @SYMREQ REQ4969 4970 4971 4972 4975 4976 4977 4978 4963 4985 5008 5009
+//! @SYMTestPriority Medium
+//! @SYMTestActions 
+//! @SYMTestExpectedResults All tests pass successfully
+//! @SYMDevelopedForRelease Intulo
+
+START_TESTCASE SEC-AUT-AUTHSVROOM-0001
+
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+//Synchronous Authenticate API check -- SERVER SIDE
+RUN_TEST_STEP_RESULT 0 1000	tAuthSvr 	OOM_TEST	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini oom1
+
+
+//Register API check -- SERVER SIDE
+RUN_UTILS CopyFile C:\tauth\tauthsvr\testdata\pinplugin_inactive.txt C:\pinplugin_inactive.txt
+RUN_TEST_STEP_RESULT 0 1000	tAuthSvr 	OOM_TEST	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini oom2
+RUN_UTILS DeleteFile C:\pinplugin_inactive.txt
+
+
+//Synchronous Authenticate API check -- CLIENT SIDE
+RUN_TEST_STEP_RESULT 0 1000	tAuthSvr 	OOM_TEST	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini oom3
+
+
+//Register API check -- CLIENT SIDE
+RUN_UTILS CopyFile C:\tauth\tauthsvr\testdata\pinplugin_inactive.txt C:\pinplugin_inactive.txt
+RUN_TEST_STEP_RESULT 0 1000	tAuthSvr 	OOM_TEST	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini oom4
+RUN_UTILS DeleteFile C:\pinplugin_inactive.txt
+
+
+//Asynchronous Authenticate API check -- SERVER SIDE
+RUN_TEST_STEP_RESULT 0 1000	tAuthSvr 	OOM_TEST	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini oom5
+
+
+//Asynchronous Authenticate API check -- CLIENT SIDE
+RUN_TEST_STEP_RESULT 0 1000	tAuthSvr 	OOM_TEST	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini oom6
+
+
+//Set preffered plugin type check -- SERVER SIDE
+RUN_TEST_STEP_RESULT 0 1000	tAuthSvr 	OOM_TEST	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini oom7
+
+
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !RESULT=FAIL 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini Test4
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini Test3
+
+//Check Remove Identity API -- SERVER SIDE
+RUN_TEST_STEP_RESULT 0 1000	tAuthSvr 	OOM_TEST	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini oom8
+
+
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP !RESULT=FAIL 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini Test4
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini Test3
+
+
+//Check Retrain Plugin API -- SERVER SIDE
+RUN_TEST_STEP_RESULT 0 1000	tAuthSvr 	OOM_TEST	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini oom10
+
+//Check List PluginsL API -- SERVER SIDE
+RUN_TEST_STEP_RESULT 0 1000	tAuthSvr 	OOM_TEST	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini oom11
+
+
+//Check List Active Plugins API -- SERVER SIDE
+RUN_TEST_STEP_RESULT 0 1000	tAuthSvr 	OOM_TEST	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini oom12
+
+
+//Check List Plugins of type API -- SERVER SIDE
+RUN_TEST_STEP_RESULT 0 1000	tAuthSvr 	OOM_TEST	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini oom13
+
+
+//Check List Plugins With Training status API -- SERVER SIDE
+RUN_TEST_STEP_RESULT 0 1000	tAuthSvr 	OOM_TEST	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini oom14
+
+
+//Check List Authentication aliases API
+RUN_TEST_STEP_RESULT 0 1000	tAuthSvr 	OOM_TEST	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini oom15
+
+
+//Delete plugin dat files and initialize default plugin value
+RUN_UTILS DeleteFile C:\pinplugin_inactive.txt
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_in.dat
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_out.dat
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr_new 	INIT_CENREP c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defaultplugin
+
+
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+
+//Expected result is fail because plugin count fails (tauthplugin.rsc is deleted). 
+//This identity is just used in the next few cases
+RUN_TEST_STEP !RESULT=FAIL	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini Test1
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini Test2
+
+
+
+//Check Reset Identity API (all plugins)
+
+RUN_TEST_STEP_RESULT 0 1000	tAuthSvr 	OOM_TEST	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini oom16
+
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+//Expected result is fail because plugin count fails (tauthplugin.rsc is deleted). 
+//This identity is just used in the next few cases
+RUN_TEST_STEP !RESULT=FAIL	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini Test1
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini Test2
+
+
+//Check Reset Identity API (plugins of specified type)
+
+RUN_TEST_STEP_RESULT 0 1000	tAuthSvr 	OOM_TEST	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini oom17
+
+
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+//Expected result is fail because plugin count fails (tauthplugin.rsc is deleted). 
+//This identity is just used in the next few cases
+RUN_TEST_STEP !RESULT=FAIL	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini Test1
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	AUTHENTICATE	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini Test2
+
+
+//Check Reset Identity API (specified plugins)
+RUN_TEST_STEP_RESULT 0 1000	tAuthSvr 	OOM_TEST	c:\tauth\tAuthSvr\scripts\tauthsvroom.ini oom18
+
+
+
+
+END_TESTCASE SEC-AUT-AUTHSVROOM-0001
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/tclientsidsupport.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,38 @@
+[Test0001]
+NumIdentities = 2
+plugin1Id = 11113100
+plugin1Status = 128
+Pin11113100InputTrain = 5110
+Pin11113100Default = true
+Pin11113100Active = true
+
+[Test0002]
+NumIdentities = 2
+clientSid = 2EDB49CA
+clientSpecificKey = true
+withString = false
+plugin1Id = 11113100
+Pin11113100InputId = 5110
+PinInputTrain = 5118
+PinInputIdAfterRetrain = 5118
+
+[Test0003]
+NumIdentities = 2
+clientSid = 0
+callingAppSid = 10204F0D
+clientSpecificKey = true
+withString = false
+plugin1Id = 11113100
+Pin11113100InputId = 5110
+PinInputTrain = 5118
+PinInputIdAfterRetrain = 5118
+
+[Test0004]
+NumIdentities = 2
+clientSid = 10204F0D
+clientSpecificKey = true
+withString = false
+plugin1Id = 11113100
+Pin11113100InputId = 5110
+PinInputTrain = 5118
+PinInputIdAfterRetrain = 5118
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/tclientsidsupport.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,209 @@
+//
+// Copyright (c) 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: 
+//
+//
+// Copyright (c) 2009 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:
+//
+
+RINT Client Sid support tests...
+
+// Prepare a clone of TAuthSvr to possess authserver's SID.
+// This is required for modifying the authserver's central repository file.
+// This clone must be deleted at the end of the test.
+
+RUN_PROGRAM 100 SETCAP tAuthSvr.exe 188b0 -SID 102740FC tAuthSvr_new.exe
+
+// Prepare a clone of TAuthSvr without ReadUserData capability.
+// This clone must be deleted at the end of the test.
+
+RUN_PROGRAM 100 SETCAP tAuthSvr.exe 108b0 tAuthSvr1.exe
+
+LOAD_SUITE tAuthSvr
+LOAD_SUITE tAuthSvr_new
+LOAD_SUITE tAuthSvr1
+
+// This test must be executed in order to set the default plugin, else authserver will never start.
+
+RUN_UTILS DeleteFile C:\pinplugin_inactive.txt
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr_new 	INIT_CENREP c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defaultplugin
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_in.dat
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_out.dat
+
+////
+//! @SYMTestCaseID SEC-AUT-CLIENTSIDSUPPORT-0001
+//! @SYMTestCaseDesc 		When a client Sid is non-zero, the same must be used to generate the protection key 
+//!				of an identity.
+//! @SYMREQ 			REQ11236
+//! @SYMTestPriority 		Medium
+//! @SYMTestActions  		Have a default plugin defined, which is active, and a second one which is active as well
+//!				use a client that has ReadUserData capability to connect to the AuthServer.
+//! 
+//!				Successfully register a 2nd identity while using a specified PIN input
+//!				Authenticate using the same PIN input so that the identity to be trained is one
+//!				that has been previously trained.Store the Identity obtained as a result of authentication.
+//! 
+//!				Then call the Train() function, giving a different input. Attempt to authenticate,
+//!				giving the new input.Store the identity obtained as a result of authentication.
+//!			
+//!				Generate a protection key using the key of the identity resulting from the first 
+//!				authentication with the client sid and compare with the identity key obtained from 
+//!				second authentication.
+//!				
+//! @SYMTestExpectedResults 	The authentication, registration and retrain are successful. Protection key generated 
+//!				by the identity resulting from first authentication must be the same as the protection key 
+//!				of the identity resulting from second authentication.
+//! @SYMDevelopedForRelease 	Diran
+//!
+START_TESTCASE SEC-AUT-CLIENTSIDSUPPORT-0001
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tclientsidsupport.ini Test0001
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	CLIENT_SID_CHECK	c:\tauth\tAuthSvr\scripts\tclientsidsupport.ini Test0002
+END_TESTCASE SEC-AUT-CLIENTSIDSUPPORT-0001
+
+
+////
+//! @SYMTestCaseID SEC-AUT-CLIENTSIDSUPPORT-0002
+//! @SYMTestCaseDesc 		When a client Sid is zero, the calling application's sid must be used to generate the 
+//!				protection key of an identity.
+//! @SYMREQ 			REQ11236
+//! @SYMTestPriority 		Medium
+//! @SYMTestActions  		Have a default plugin defined, which is active, and a second one which is active as well
+//!				use a client that has ReadUserData capability to connect to the AuthServer.
+//! 
+//!				Successfully register a 2nd identity while using a specified PIN input
+//!				Authenticate using the same PIN input so that the identity to be trained is one
+//!				that has been previously trained.Store the Identity obtained as a result of authentication.
+//! 
+//!				Then call the Train() function, giving a different input. Attempt to authenticate,
+//!				giving the new input.Store the identity obtained as a result of authentication.
+//!			
+//!				Generate a protection key using the key of the identity resulting from the first 
+//!				authentication with the client sid of the calling application and compare with the 
+//!				identity key obtained from second authentication.
+//!				
+//! @SYMTestExpectedResults 	The authentication, registration and retrain are successful. Protection key generated 
+//!				by the identity resulting from first authentication must be the same as the protection key 
+//!				of the identity resulting from second authentication.
+//! @SYMDevelopedForRelease 	Diran
+//!
+START_TESTCASE SEC-AUT-CLIENTSIDSUPPORT-0002
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tclientsidsupport.ini Test0001
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	CLIENT_SID_CHECK	c:\tauth\tAuthSvr\scripts\tclientsidsupport.ini Test0003
+END_TESTCASE SEC-AUT-CLIENTSIDSUPPORT-0002
+
+
+////
+//! @SYMTestCaseID SEC-AUT-CLIENTSIDSUPPORT-0003
+//! @SYMTestCaseDesc 		When a client sid is non-zero and is not the same as the calling application's SID, 
+//!				a call to authenticate method fails if the calling application doesn't 
+//!				possess ReadUserData capability. 
+//! @SYMREQ 			REQ11236
+//! @SYMTestPriority 		Medium
+//! @SYMTestActions  		Have a default plugin defined, which is active, and a second one which is active as well
+//!				use a client that does not have ReadUserData capability to connect to the AuthServer.
+//! 
+//!				Successfully register a 2nd identity while using a specified PIN input
+//!				Authenticate using the same PIN input so that the identity to be trained is one
+//!				that has been previously trained.Authentication fails with KErrPermissionDenied,
+//!				since the calling appliction doesn't possess ReadUserData capability.
+//!				Authentication must fail with KErrPermissionDenied.
+//! @SYMDevelopedForRelease 	Diran
+//!
+START_TESTCASE SEC-AUT-CLIENTSIDSUPPORT-0003
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tclientsidsupport.ini Test0001
+RUN_TEST_STEP !Error=-46 100	tAuthSvr1 	CLIENT_SID_CHECK	c:\tauth\tAuthSvr\scripts\tclientsidsupport.ini Test0002
+END_TESTCASE SEC-AUT-CLIENTSIDSUPPORT-0003
+
+////
+//! @SYMTestCaseID SEC-AUT-CLIENTSIDSUPPORT-0004
+//! @SYMTestCaseDesc 		When a client sid is zero, a call to authenticate method succeeds even if the calling 
+//!				application doesn't have ReadUserData capability.
+//! @SYMREQ 			REQ11236
+//! @SYMTestPriority 		Medium
+//! @SYMTestActions  		Have a default plugin defined, which is active, and a second one which is active as well
+//!				use a client that doesn't possess ReadUserData capability to connect to the AuthServer.
+//! 
+//!				Successfully register a 2nd identity while using a specified PIN input
+//!				Authenticate using the same PIN input so that the identity to be trained is one
+//!				that has been previously trained.Store the Identity obtained as a result of authentication.
+//! 
+//!				Then call the Train() function, giving a different input. Attempt to authenticate,
+//!				giving the new input.Store the identity obtained as a result of authentication.
+//!			
+//!				Generate a protection key using the key of the identity resulting from the first 
+//!				authentication with the client sid of the calling application and compare with the 
+//!				identity key obtained from second authentication.
+//!				
+//! @SYMTestExpectedResults 	The authentication, registration and retrain are successful. Protection key generated 
+//!				by the identity resulting from first authentication must be the same as the protection key 
+//!				of the identity resulting from second authentication.
+//! @SYMDevelopedForRelease 	Diran
+//!
+
+START_TESTCASE SEC-AUT-CLIENTSIDSUPPORT-0004
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tclientsidsupport.ini Test0001
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr1 	CLIENT_SID_CHECK	c:\tauth\tAuthSvr\scripts\tclientsidsupport.ini Test0003
+END_TESTCASE SEC-AUT-CLIENTSIDSUPPORT-0004
+
+////
+//! @SYMTestCaseID SEC-AUT-CLIENTSIDSUPPORT-0005
+//! @SYMTestCaseDesc 		When a client sid is non-zero and is the same as the calling application's sid,
+//!				, a call to authenticate method succeeds even if the calling application doesn't 
+//!				have ReadUserData capability.
+//! @SYMREQ 			REQ11236
+//! @SYMTestPriority 		Medium
+//! @SYMTestActions  		Have a default plugin defined, which is active, and a second one which is active as well
+//!				use a client that doesn't possess ReadUserData capability to connect to the AuthServer.
+//! 
+//!				Successfully register a 2nd identity while using a specified PIN input
+//!				Authenticate using the same PIN input so that the identity to be trained is one
+//!				that has been previously trained.Store the Identity obtained as a result of authentication.
+//! 
+//!				Then call the Train() function, giving a different input. Attempt to authenticate,
+//!				giving the new input.Store the identity obtained as a result of authentication.
+//!			
+//!				Generate a protection key using the key of the identity resulting from the first 
+//!				authentication with the client sid of the calling application and compare with the 
+//!				identity key obtained from second authentication.
+//!				
+//! @SYMTestExpectedResults 	The authentication, registration and retrain are successful. Protection key generated 
+//!				by the identity resulting from first authentication must be the same as the protection key 
+//!				of the identity resulting from second authentication.
+//! @SYMDevelopedForRelease 	Diran
+//!
+
+START_TESTCASE SEC-AUT-CLIENTSIDSUPPORT-0005
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr 	REG_IDENTITY	c:\tauth\tAuthSvr\scripts\tclientsidsupport.ini Test0001
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr1 	CLIENT_SID_CHECK	c:\tauth\tAuthSvr\scripts\tclientsidsupport.ini Test0004
+END_TESTCASE SEC-AUT-CLIENTSIDSUPPORT-0005
+
+// This is to shut down the auth server
+DELAY 5000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/tpostmarketplugin.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,66 @@
+[Test0001]
+srcPlugin=c:\tauth\tpostmarketplugins\testpluginsupgrade.dll
+destPlugin=c:\sys\bin\testplugins.dll
+srcRscFile=c:\tauth\tpostmarketplugins\testpluginsupgrade.rsc
+destRscFile=c:\resource\plugins\testplugins.rsc
+initialPluginCount=10
+expectedPluginCount=10
+pluginNamePostInstall=Test Plugin #1 - Upgrade
+pluginNamePostUninstall=Test Plugin #1
+
+
+[Test0002]
+srcPlugin=c:\tauth\tpostmarketplugins\tauthpluginupgrade.dll
+destPlugin=c:\sys\bin\tauthplugin.dll
+srcRscFile=c:\tauth\tpostmarketplugins\tauthpluginupgrade.rsc
+destRscFile=c:\resource\plugins\tauthplugin.rsc
+initialPluginCount=10
+expectedPluginCount=10
+pluginNamePostInstall=Pin1
+pluginNamePostUninstall=Pin1
+
+// when a new non-ROM plugin is installed with macro disabled, the plugin count remains the same,
+// before and post install.
+[Test0003]
+srcPlugin=c:\tauth\tpostmarketplugins\tpostmarketramplugin.dll
+destPlugin=c:\sys\bin\tpostmarketramplugin.dll
+srcRscFile=c:\tauth\tpostmarketplugins\tpostmarketramplugin.rsc
+destRscFile=c:\resource\plugins\tpostmarketramplugin.rsc
+initialPluginCount=10
+expectedPluginCount=10
+
+
+// The following are used when KEnablePostMarketAutheticationPlugins is set using the 
+// macro SYMBIAN_ENABLE_POST_MARKET_AUTHENTICATION_PLUGINS specified in ROM build for hardware tests and 
+// patch data KEnablePostMarketAutheticationPlugins set to one in epoc.ini for emulator tests.
+
+// when a new non-ROM plugin is installed with macro enabled, the plugin count increments by one post install operation,
+// and decrements by one post uninstall operation.
+[Test0004]
+srcPlugin=c:\tauth\tpostmarketplugins\tpostmarketramplugin.dll
+destPlugin=c:\sys\bin\tpostmarketramplugin.dll
+srcRscFile=c:\tauth\tpostmarketplugins\tpostmarketramplugin.rsc
+destRscFile=c:\resource\plugins\tpostmarketramplugin.rsc
+initialPluginCount=10
+expectedPluginCount=11
+pluginNamePostInstall=PostMarketRAMPlugin
+
+[Test0005]
+NumIdentities = 2
+#The plugin below is for the pinAuthPlugin
+plugin1Id = 10234100
+#EAuthFullyTrained
+plugin1Status = 128
+Pin10234100InputTrain = 4110
+Pin10234100Default = true
+Pin10234100Active = true
+
+[Test0006]
+plugin1Id = 10234100
+Pin10234100InputId = 4110
+
+[Test0007]
+srcPlugin=c:\sys\bin\tpostmarketramplugin.dll
+destPlugin=c:\tauth\tpostmarketplugins\tpostmarketramplugin.dll
+srcRscFile=c:\resource\plugins\tpostmarketramplugin.rsc
+destRscFile=c:\tauth\tpostmarketplugins\tpostmarketramplugin.rsc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/tpostmarketplugin.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,143 @@
+//
+// Copyright (c) 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: 
+//
+//
+// Copyright (c) 2009 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:
+//
+
+RINT Post Market Plugin tests...
+
+// Prepare a clone of TAuthSvr to possess authserver's SID.
+// This is required for modifying the authserver's central repository file.
+// This clone must be deleted at the end of the test.
+
+RUN_PROGRAM 100 SETCAP tAuthSvr.exe 188b0 -SID 102740FC tAuthSvr_new.exe
+
+LOAD_SUITE tAuthSvr
+LOAD_SUITE tAuthSvr_new
+
+// This test must be executed in order to set the default plugin, else authserver will never start.
+
+RUN_UTILS DeleteFile C:\pinplugin_inactive.txt
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr_new 	INIT_CENREP c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defaultplugin
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_in.dat
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_out.dat
+
+// The following tests are run when KEnablePostMarketAutheticationPlugins is set to zero,
+// i.e post market plugins are not supported.
+
+////
+//! @SYMTestCaseID 		SEC-AUT-AUTHPOSTMARKETPLUGIN-0001
+//! @SYMTestCaseDesc 		Install an upgrade of a ROM plugin whose ROM_Only field is set to zero.Verify that the upgrade version is loaded.
+//!				during install and ROM version is loaded during uninstall.
+//! @SYMREQ 			REQ 11235
+//! @SYMTestPriority 		Medium
+//! @SYMTestActions  		1)Retrieve the available plugin list before an upgrade is installed.
+//!		     		2)Install an upgrade of a ROM plugin specified in the ini file.
+//!		     		3)Repeat step 1.Verify that the plugin count matches the expected,and that 
+//!                    		the upgrade version of the plugin is loaded by comparing the plugin name with 
+//!                    		the expected name specified in the ini file.
+//!				4)Retrieve the plugin list before the upgrade (installed in step 2) is uninstalled.
+//!				5)Uninstall the ROM upgrade.
+//!		     		6)Repeat step 1.Verify that the plugin count matches the expected,and that 
+//!                    		the ROM version of the plugin is loaded by comparing the plugin name with 
+//!                    		the expected name specified in the ini file.		
+//! @SYMTestExpectedResults	Upgraded version of the specfied ROM plugin must be loaded during install and ROM version must be loaded after uninstall.
+//! @SYMDevelopedForRelease 	Diran
+
+START_TESTCASE SEC-AUT-AUTHPOSTMARKETPLUGIN-0001
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr	POST_MARKET_PLUGIN	c:\tauth\tAuthSvr\scripts\tpostmarketplugin.ini Test0001
+END_TESTCASE SEC-AUT-AUTHPOSTMARKETPLUGIN-0001
+
+////
+//! @SYMTestCaseID 		SEC-AUT-AUTHPOSTMARKETPLUGIN-0002
+//! @SYMTestCaseDesc 		Install an upgrade of a ROM plugin whose ROM_Only field is set to one.Verify that the ROM version is loaded during install and uninstall.
+//! @SYMREQ 			REQ 11235
+//! @SYMTestPriority 		Medium
+//! @SYMTestActions  		1)Retrieve the available plugin list before an upgrade is installed.
+//!		     		2)Install an upgrade of a ROM plugin specified in the ini file.
+//!		     		3)Repeat step 1.Verify that the plugin count matches the expected,and that 
+//!                    		the ROM version of the plugin is loaded by comparing the plugin name with 
+//!                    		the expected name specified in the ini file.
+//!				4)Retrieve the plugin list before the upgrade (installed in step 2) is uninstalled.
+//!				5)Uninstall the ROM upgrade.
+//!		     		6)Repeat step 1.Verify that the plugin count matches the expected,and that 
+//!                    		the ROM version of the plugin is loaded by comparing the plugin name with 
+//!                    		the expected name specified in the ini file.			
+//! @SYMTestExpectedResults	ROM version of the specfied ROM plugin must be loaded during install and uninstall.
+//! @SYMDevelopedForRelease 	Diran
+
+START_TESTCASE SEC-AUT-AUTHPOSTMARKETPLUGIN-0002
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr	POST_MARKET_PLUGIN	c:\tauth\tAuthSvr\scripts\tpostmarketplugin.ini Test0002
+END_TESTCASE SEC-AUT-AUTHPOSTMARKETPLUGIN-0002
+
+////
+//! @SYMTestCaseID 		SEC-AUT-AUTHPOSTMARKETPLUGIN-0003
+//! @SYMTestCaseDesc 		Install and uninstall a non-ROM plugin.Verify that the plugin count remains the same pre and post install and uninstall operation.
+//! @SYMREQ 			REQ 11235
+//! @SYMTestPriority 		Medium
+//! @SYMTestActions  		1)Retrieve the available plugin list before a non-ROM plugin is installed.
+//!		     		2)Install non-ROM plugin specified in the ini file.
+//!		     		3)Repeat step 1.Verify that the plugin count remains the same pre and post install operation.
+//!				4)Retrieve the available plugin list before non-ROM plugin is uninstalled.
+//!				5)Uninstall the non-ROM plugin(installed in step 2).
+//!		     		6)Repeat step 1.Verify that the plugin count remains the same pre and post uninstall operation.
+//!						
+//! @SYMTestExpectedResults	Plugin count remains the same pre and post install and uninstall operation.
+//! @SYMDevelopedForRelease 	Diran
+
+START_TESTCASE SEC-AUT-AUTHPOSTMARKETPLUGIN-0003
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr	POST_MARKET_PLUGIN	c:\tauth\tAuthSvr\scripts\tpostmarketplugin.ini Test0003
+END_TESTCASE SEC-AUT-AUTHPOSTMARKETPLUGIN-0003
+
+////
+//! @SYMTestCaseID 		SEC-AUT-AUTHPOSTMARKETPLUGIN-0004
+//! @SYMTestCaseDesc 		Verify authentication behaviour using a non ROM plugin post install and uninstall operation.
+//! @SYMREQ 			REQ 11235
+//! @SYMTestPriority 		Medium
+//! @SYMTestActions  		1)Install non-ROM plugin specified in the ini file.
+//!		     		2)Register an identity using a specified pin input.
+//!				3)Authenticate using the non ROM plugin installed in step 1.
+//!		     		4)Uninstall the plugin.
+//!				5)Authenticate again using the same plugin.
+//!				
+//!						
+//! @SYMTestExpectedResults	Authentication must fail with KErrAuthServNoSuchPlugin using the non ROM plugin 
+//!				post install and uninstall operation.
+//! @SYMDevelopedForRelease 	Diran
+START_TESTCASE SEC-AUT-AUTHPOSTMARKETPLUGIN-0004
+
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr INSTALL_PLUGIN c:\tauth\tAuthSvr\scripts\tpostmarketplugin.ini Test0003
+DELAY 3000
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr REG_IDENTITY c:\tauth\tAuthSvr\scripts\tpostmarketplugin.ini Test0005
+RUN_TEST_STEP !Error=-10802 100 tAuthSvr AUTHENTICATE c:\tauth\tAuthSvr\scripts\tpostmarketplugin.ini Test0006
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr UNINSTALL_PLUGIN c:\tauth\tAuthSvr\scripts\tpostmarketplugin.ini Test0007
+DELAY 3000
+RUN_TEST_STEP !Error=-10802 100 tAuthSvr AUTHENTICATE c:\tauth\tAuthSvr\scripts\tpostmarketplugin.ini Test0006
+END_TESTCASE SEC-AUT-AUTHPOSTMARKETPLUGIN-0004
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/tpostmarketplugin_macroenabled.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,145 @@
+//
+// Copyright (c) 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: 
+//
+//
+// Copyright (c) 2009 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:
+//
+
+RINT Post Market Plugin tests with KEnablePostMarketAuthenticationPlugins enabled...
+
+// Prepare a clone of TAuthSvr to possess authserver's SID.
+// This is required for modifying the authserver's central repository file.
+// This clone must be deleted at the end of the test.
+
+RUN_PROGRAM 100 SETCAP tAuthSvr.exe 188b0 -SID 102740FC tAuthSvr_new.exe
+
+LOAD_SUITE tAuthSvr
+LOAD_SUITE tAuthSvr_new
+
+// This test must be executed in order to set the default plugin, else authserver will never start.
+
+RUN_UTILS DeleteFile C:\pinplugin_inactive.txt
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr_new 	INIT_CENREP c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defaultplugin
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_in.dat
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_out.dat
+
+
+// The following tests are run for KEnablePostMarketAutheticationPlugins set using the 
+// macro SYMBIAN_ENABLE_POST_MARKET_AUTHENTICATION_PLUGINS specified in ROM build for hardware tests and 
+// patch data KEnablePostMarketAutheticationPlugins set to one in epoc.ini for emulator tests.
+
+////
+//! @SYMTestCaseID 		SEC-AUT-AUTHPOSTMARKETPLUGIN-0005
+//! @SYMTestCaseDesc 		Install an upgrade of a ROM plugin whose ROM_Only field is set to zero.Verify that the upgrade version is loaded.
+//!				during install and ROM version is loaded during uninstall.
+//! @SYMREQ 			REQ 11235
+//! @SYMTestPriority 		Medium
+//! @SYMTestActions  		1)Retrieve the available plugin list before an upgrade is installed.
+//!		     		2)Install an upgrade of a ROM plugin specified in the ini file.
+//!		     		3)Repeat step 1.Verify that the plugin count matches the expected,and that 
+//!                    		the upgrade version of the plugin is loaded by comparing the plugin name with 
+//!                    		the expected name specified in the ini file.
+//!				4)Retrieve the plugin list before the upgrade (installed in step 2) is uninstalled.
+//!				5)Uninstall the ROM upgrade.
+//!		     		6)Repeat step 1.Verify that the plugin count matches the expected,and that 
+//!                    		the ROM version of the plugin is loaded by comparing the plugin name with 
+//!                    		the expected name specified in the ini file.		
+//! @SYMTestExpectedResults	Upgraded version of the specfied ROM plugin must be loaded during install and ROM version must be loaded after uninstall.
+//! @SYMDevelopedForRelease 	Diran
+
+START_TESTCASE SEC-AUT-AUTHPOSTMARKETPLUGIN-0005
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr	POST_MARKET_PLUGIN	c:\tauth\tAuthSvr\scripts\tpostmarketplugin.ini Test0001
+END_TESTCASE SEC-AUT-AUTHPOSTMARKETPLUGIN-0005
+
+////
+//! @SYMTestCaseID 		SEC-AUT-AUTHPOSTMARKETPLUGIN-0006
+//! @SYMTestCaseDesc 		Install an upgrade of a ROM plugin whose ROM_Only field is set to one.Verify that the ROM version is loaded during install and uninstall.
+//! @SYMREQ 			REQ 11235
+//! @SYMTestPriority 		Medium
+//! @SYMTestActions  		1)Retrieve the available plugin list before an upgrade is installed.
+//!		     		2)Install an upgrade of a ROM plugin specified in the ini file.
+//!		     		3)Repeat step 1.Verify that the plugin count matches the expected,and that 
+//!                    		the ROM version of the plugin is loaded by comparing the plugin name with 
+//!                    		the expected name specified in the ini file.
+//!				4)Retrieve the plugin list before the upgrade (installed in step 2) is uninstalled.
+//!				5)Uninstall the ROM upgrade.
+//!		     		6)Repeat step 1.Verify that the plugin count matches the expected,and that 
+//!                    		the ROM version of the plugin is loaded by comparing the plugin name with 
+//!                    		the expected name specified in the ini file.			
+//! @SYMTestExpectedResults	ROM version of the specfied ROM plugin must be loaded during install and uninstall.
+//! @SYMDevelopedForRelease 	Diran
+
+START_TESTCASE SEC-AUT-AUTHPOSTMARKETPLUGIN-0006
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr	POST_MARKET_PLUGIN	c:\tauth\tAuthSvr\scripts\tpostmarketplugin.ini Test0002
+END_TESTCASE SEC-AUT-AUTHPOSTMARKETPLUGIN-0006
+
+////
+//! @SYMTestCaseID 		SEC-AUT-AUTHPOSTMARKETPLUGIN-0007
+//! @SYMTestCaseDesc 		Install and uninstall a non-ROM plugin.Verify that the plugin count increments by one post install operation 
+//!				and decrements by one post uninstall operation.
+//! @SYMREQ 			REQ 11235
+//! @SYMTestPriority 		Medium
+//! @SYMTestActions  		1)Retrieve the available plugin list before a non-ROM plugin is installed.
+//!		     		2)Install non-ROM plugin specified in the ini file.
+//!		     		3)Repeat step 1.Verify that the plugin count increments by one.
+//!				4)Retrieve the available plugin list before the non-ROM plugin is uninstalled.
+//!				5)Uninstall the non-ROM plugin(installed in step 2).
+//!		     		6)Repeat step 1.Verify that the plugin count decrements by one.
+//!						
+//! @SYMTestExpectedResults	Plugin count increments by one post install and decrements by one post uninstall operation.
+//! @SYMDevelopedForRelease 	Diran
+
+START_TESTCASE SEC-AUT-AUTHPOSTMARKETPLUGIN-0007
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr	POST_MARKET_PLUGIN	c:\tauth\tAuthSvr\scripts\tpostmarketplugin.ini Test0004
+END_TESTCASE SEC-AUT-AUTHPOSTMARKETPLUGIN-0007
+
+////
+//! @SYMTestCaseID 		SEC-AUT-AUTHPOSTMARKETPLUGIN-0008
+//! @SYMTestCaseDesc 		Verify authentication behaviour using a non ROM plugin post install and uninstall operation.
+//! @SYMREQ 			REQ 11235
+//! @SYMTestPriority 		Medium
+//! @SYMTestActions  		1)Install non-ROM plugin specified in the ini file.
+//!		     		2)Register an identity using a specified pin input.
+//!				3)Authenticate using the non ROM plugin installed in step 1.
+//!		     		4)Uninstall the plugin.
+//!				5)Authenticate again using the sme plugin.
+//!				
+//!						
+//! @SYMTestExpectedResults	Authentication must succeed using the non ROM plugin after install operation 
+//!				and must fail with KErrAuthServNoSuchPlugin post uninstall operation.
+//! @SYMDevelopedForRelease 	Diran
+START_TESTCASE SEC-AUT-AUTHPOSTMARKETPLUGIN-0008
+
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr INSTALL_PLUGIN c:\tauth\tAuthSvr\scripts\tpostmarketplugin.ini Test0003
+DELAY 3000
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr REMOVE_DBS
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr REG_IDENTITY c:\tauth\tAuthSvr\scripts\tpostmarketplugin.ini Test0005
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr AUTHENTICATE c:\tauth\tAuthSvr\scripts\tpostmarketplugin.ini Test0006
+RUN_TEST_STEP_RESULT 0 100 tAuthSvr UNINSTALL_PLUGIN c:\tauth\tAuthSvr\scripts\tpostmarketplugin.ini Test0007
+DELAY 3000
+RUN_TEST_STEP !Error=-10802 100 tAuthSvr AUTHENTICATE c:\tauth\tAuthSvr\scripts\tpostmarketplugin.ini Test0006
+END_TESTCASE SEC-AUT-AUTHPOSTMARKETPLUGIN-0008
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/tpostmarketpluginenabled1_winscw.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,71 @@
+//
+// Copyright (c) 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: 
+//
+//
+// Copyright (c) 2009 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:
+//
+
+RINT Post Market Plugin tests with KEnablePostMarketAuthenticationPlugins enabled...
+
+// Prepare a clone of TAuthSvr to possess authserver's SID.
+// This is required for modifying the authserver's central repository file.
+// This clone must be deleted at the end of the test.
+
+RUN_PROGRAM 100 SETCAP tAuthSvr.exe 188b0 -SID 102740FC tAuthSvr_new.exe
+
+LOAD_SUITE tAuthSvr
+LOAD_SUITE tAuthSvr_new
+
+// This test must be executed in order to set the default plugin, else authserver will never start.
+
+RUN_UTILS DeleteFile C:\pinplugin_inactive.txt
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr_new 	INIT_CENREP c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defaultplugin
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_in.dat
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_out.dat
+
+// The following test is run for KEnablePostMarketAutheticationPlugins set to a positive value greater than zero,
+// in epoc.ini.This test is executed only in winscw.
+
+////
+//! @SYMTestCaseID 		SEC-AUT-AUTHPOSTMARKETPLUGINENABLED1-0001
+//! @SYMTestCaseDesc 		Install and uninstall a non-ROM plugin.Verify that the plugin count increments by one post install operation 
+//!				and decrements by one post uninstall operation.
+//! @SYMREQ 			REQ 11235
+//! @SYMTestPriority 		Medium
+//! @SYMTestActions  		1)Retrieve the available plugin list before a non-ROM plugin is installed.
+//!		     		2)Install non-ROM plugin specified in the ini file.
+//!		     		3)Repeat step 1.Verify that the plugin count increments by one.
+//!				4)Retrieve the available plugin list before the non-ROM plugin is uninstalled.
+//!				5)Uninstall the non-ROM plugin(installed in step 2).
+//!		     		6)Repeat step 1.Verify that the plugin count decrements by one.
+//!						
+//! @SYMTestExpectedResults	Plugin count increments by one post install and decrements by one post uninstall operation.
+//! @SYMDevelopedForRelease 	Diran
+
+START_TESTCASE SEC-AUT-AUTHPOSTMARKETPLUGINENABLED1-0001
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr	POST_MARKET_PLUGIN	c:\tauth\tAuthSvr\scripts\tpostmarketplugin.ini Test0004
+END_TESTCASE SEC-AUT-AUTHPOSTMARKETPLUGINENABLED1-0001
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/scripts/tpostmarketpluginenabled_winscw.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,73 @@
+//
+// Copyright (c) 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: 
+//
+//
+// Copyright (c) 2009 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:
+//
+
+RINT Post Market Plugin tests with KEnablePostMarketAuthenticationPlugins enabled...
+
+// Prepare a clone of TAuthSvr to possess authserver's SID.
+// This is required for modifying the authserver's central repository file.
+// This clone must be deleted at the end of the test.
+
+RUN_PROGRAM 100 SETCAP tAuthSvr.exe 188b0 -SID 102740FC tAuthSvr_new.exe
+
+LOAD_SUITE tAuthSvr
+LOAD_SUITE tAuthSvr_new
+
+// This test must be executed in order to set the default plugin, else authserver will never start.
+
+RUN_UTILS DeleteFile C:\pinplugin_inactive.txt
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr_new 	INIT_CENREP c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defaultplugin
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_in.dat
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_out.dat
+
+// The following test is run for KEnablePostMarketAutheticationPlugins set to a negative value,
+// in epoc.ini.This test is executed only in winscw.
+
+LOAD_SUITE tAuthSvr
+
+////
+//! @SYMTestCaseID 		SEC-AUT-AUTHPOSTMARKETPLUGINENABLED-0001
+//! @SYMTestCaseDesc 		Install and uninstall a non-ROM plugin.Verify that the plugin count increments by one post install operation 
+//!				and decrements by one post uninstall operation.
+//! @SYMREQ 			REQ 11235
+//! @SYMTestPriority 		Medium
+//! @SYMTestActions  		1)Retrieve the available plugin list before a non-ROM plugin is installed.
+//!		     		2)Install non-ROM plugin specified in the ini file.
+//!		     		3)Repeat step 1.Verify that the plugin count increments by one.
+//!				4)Retrieve the available plugin list before the non-ROM plugin is uninstalled.
+//!				5)Uninstall the non-ROM plugin(installed in step 2).
+//!		     		6)Repeat step 1.Verify that the plugin count decrements by one.
+//!						
+//! @SYMTestExpectedResults	Plugin count increments by one post install and decrements by one post uninstall operation.
+//! @SYMDevelopedForRelease 	Diran
+
+START_TESTCASE SEC-AUT-AUTHPOSTMARKETPLUGINENABLED-0001
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr	POST_MARKET_PLUGIN	c:\tauth\tAuthSvr\scripts\tpostmarketplugin.ini Test0004
+END_TESTCASE SEC-AUT-AUTHPOSTMARKETPLUGINENABLED-0001
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/10204F10.rss	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,109 @@
+/*
+* Copyright (c) 2005-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: 
+* Registry file for the miscellaneous authServer Interface Implementation Collection
+* UIDs quick-ref
+* ECOM DLL UID:			0x10204F10 
+* ECOM interface UID:		0x102740FE
+* ECOM Implementation:		0x11113100	-PIN
+*
+*/
+
+
+/**
+ @file 10204F10.rss
+*/
+
+
+#include "registryinfov2.rh"
+
+// Declares info for one implementation
+RESOURCE REGISTRY_INFO theInfo
+	{
+	// UID for the plug-in DLL; matches name of this file
+	dll_uid = 0x10204F10;
+	resource_format_version = RESOURCE_FORMAT_VERSION_2;
+
+	// Declare array of interface info
+	interfaces = 
+		{
+		INTERFACE_INFO
+		 	{
+		 	// UID of interface that is implemented (i.e. CAuthPluginInterface)							
+		 	interface_uid = 0x102740FE;			
+			implementations = 
+				{
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x11113100;
+					version_no = 1;
+					display_name = "11113100 -Pin0 Implementation of AuthServer plugin";
+					default_data = "11113100";
+					opaque_data = "";
+					rom_only=1;
+					},
+				// Info for the first child PIN Plugin
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x11113101;
+					version_no = 1;
+					display_name = "11113101 -Pin1 Implementation||Copyright © 1997-2001 Symbian Ltd. All Rights Reserved.||";
+					default_data = "11113101";
+					opaque_data = "";
+					rom_only=1;
+					},
+				// Info for the first child PIN Plugin
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x11113102;
+					version_no = 1;
+					display_name = "11113102 -Pin2 Implementation||Copyright © 1997-2001 Symbian Ltd. All Rights Reserved.||";
+					default_data = "11113102";
+					opaque_data = "";
+					rom_only=1;
+					},
+				// Info for the first child PIN Plugin
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x11113103;
+					version_no = 1;
+					display_name = "11113103 -Bio3 Implementation||Copyright © 1997-2001 Symbian Ltd. All Rights Reserved.||";
+					default_data = "11113103";
+					opaque_data = "";
+					rom_only=1;
+					},
+				// Info for the first child PIN Plugin
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x11113104;
+					version_no = 1;
+					display_name = "11113104 - Tok1 Implementation||Copyright © 1997-2001 Symbian Ltd. All Rights Reserved.||";
+					default_data = "11113104";
+					opaque_data = "";
+					rom_only=1;
+					}
+				//,
+				// Info for CTFingerprintAuthPlugin
+				//IMPLEMENTATION_INFO
+				//	{
+				//	implementation_uid = 0x102740FE;
+				//	version_no = 1;
+				//	display_name = "Fingerprint Implementation||Copyright © 1997-2001 Symbian Ltd. All Rights Reserved.||";
+				//	default_data = "text/xml||Type of data handled";
+				//	opaque_data = "test_params";
+				//	}
+				};	
+			}
+		};			
+	}		
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/10204F10_upgrade.rss	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2008-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: 
+* Dummy Registry file for the tAuthPlugin upgrade Implementation Collection
+* UIDs quick-ref
+* ECOM DLL UID:			0x10204F10 
+* ECOM interface UID:		0x102740FE
+* ECOM Implementation:		0x11113100	-PIN
+*
+*/
+
+
+
+#include "registryinfov2.rh"
+
+// Declares info for one implementation
+RESOURCE REGISTRY_INFO theInfo
+	{
+	// UID for the plug-in DLL; matches name of this file
+	dll_uid = 0x10204F10;
+	resource_format_version = RESOURCE_FORMAT_VERSION_2;
+
+	// Declare array of interface info
+	interfaces = 
+		{
+		INTERFACE_INFO
+		 	{
+		 	// UID of interface that is implemented (i.e. CAuthPluginInterface)							
+		 	interface_uid = 0x102740FE;			
+			implementations = 
+				{
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x11113100;
+					version_no = 2;
+					display_name = "11113100 -Pin0 Implementation of AuthServer plugin";
+					default_data = "11113100";
+					opaque_data = "";
+					rom_only=1;
+					},
+				// Info for the first child PIN Plugin
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x11113101;
+					version_no = 2;
+					display_name = "11113101 -Pin1 Implementation||Copyright © 1997-2001 Symbian Ltd. All Rights Reserved.||";
+					default_data = "11113101";
+					opaque_data = "";
+					rom_only=1;
+					},
+				// Info for the first child PIN Plugin
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x11113102;
+					version_no = 2;
+					display_name = "11113102 -Pin2 Implementation||Copyright © 1997-2001 Symbian Ltd. All Rights Reserved.||";
+					default_data = "11113102";
+					opaque_data = "";
+					rom_only=1;
+					},
+				// Info for the first child PIN Plugin
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x11113103;
+					version_no = 2;
+					display_name = "11113103 -Bio3 Implementation||Copyright © 1997-2001 Symbian Ltd. All Rights Reserved.||";
+					default_data = "11113103";
+					opaque_data = "";
+					rom_only=1;
+					},
+				// Info for the first child PIN Plugin
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x11113104;
+					version_no = 2;
+					display_name = "11113104 - Tok1 Implementation||Copyright © 1997-2001 Symbian Ltd. All Rights Reserved.||";
+					default_data = "11113104";
+					opaque_data = "";
+					rom_only=1;
+					}
+				//,
+				// Info for CTFingerprintAuthPlugin
+				//IMPLEMENTATION_INFO
+				//	{
+				//	implementation_uid = 0x102740FE;
+				//	version_no = 2;
+				//	display_name = "Fingerprint Implementation||Copyright © 1997-2001 Symbian Ltd. All Rights Reserved.||";
+				//	default_data = "text/xml||Type of data handled";
+				//	opaque_data = "test_params";
+				//	}
+				};	
+			}
+		};			
+	}		
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/main.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2005-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 <e32base.h>
+
+/** DLL Entry point */
+
+//GLDEF_C TInt E32Dll(TDllReason /*aReason*/)
+//	{
+//	return(KErrNone);
+//	}
+
+TBool E32Dll()
+	{
+	return (ETrue);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/proxy.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2006-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 <e32std.h>
+#include <ecom/implementationproxy.h>	// ECOM header file
+
+#include "tPinAuthPlugin.h"			// Class definition for one of the available implementations
+
+
+// Map the interface UIDs to implementation factory functions
+const TImplementationProxy ImplementationTable[] = 
+	{
+		//Next line commented because of the use of parameterised classes
+		//IMPLEMENTATION_PROXY_ENTRY(0x11113100,	CTPinAuthPlugin::NewL),
+		IMPLEMENTATION_PROXY_ENTRY(0x11113100,	CTPinAuthPlugin11113100::NewL),
+		IMPLEMENTATION_PROXY_ENTRY(0x11113101,	CTPinAuthPlugin11113101::NewL),		
+		IMPLEMENTATION_PROXY_ENTRY(0x11113102,	CTPinAuthPlugin11113102::NewL),
+		IMPLEMENTATION_PROXY_ENTRY(0x11113103,	CTPinAuthPlugin11113103::NewL),
+		IMPLEMENTATION_PROXY_ENTRY(0x11113104,	CTPinAuthPlugin11113104::NewL)
+	};
+
+// Exported proxy function to resolve intstantiation methods for an ECOM plugin dll
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+	{
+	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+	return ImplementationTable;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/step_AuthSvrCheck.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2006-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: 
+* CTestStep derived implementation
+*
+*/
+
+
+ 
+#include "tAuthSvrStep.h"
+
+#include "authserver/authclient.h"
+#include "authserver/authmgrclient.h"
+
+CTAuthSvrCheck::CTAuthSvrCheck()
+/**
+  Constructor
+ */
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KTAuthSvrCheck);
+	}
+
+TVerdict CTAuthSvrCheck::doTestStepL()
+/**
+  @return - TVerdict code
+  Override of base class pure virtual
+  
+ */
+	{	
+	
+__UHEAP_MARK;		// Check for memory leaks
+
+	SetTestStepResult(EPass);
+	
+	InitAuthServerFromFileL();	// Set things like 'iSupportsDefaultData' and 'DefaultPlugin'
+
+	//-----------------------------------------------------------------------------------------------------
+	//Connect to the AuthServer
+	AuthServer::RAuthClient authClient1;
+	//User::LeaveIfError(authClient1.Connect());
+	
+	TInt connectVal = authClient1.Connect();
+	if (KErrNotFound == connectVal)
+		{
+		//Retry after a delay
+		TTimeIntervalMicroSeconds32 timeInterval = 2000;	//2 Milliseconds
+		User::After(timeInterval);
+		connectVal = authClient1.Connect();
+		}
+	if (KErrNone != connectVal)
+		{
+		ERR_PRINTF2(_L("Unable to start a session or other connection error. Err = %d"), connectVal);
+		User::LeaveIfError(connectVal);		
+		}
+	CleanupClosePushL(authClient1);
+	
+	//Check that the default identity has been created
+	//Call the Enumerate Identity API
+	AuthServer::RIdentityIdArray idList;
+	TRAPD(res1, authClient1.IdentitiesL(idList));
+	CleanupClosePushL(idList);
+	
+	if(KErrNone != res1)
+		{
+		ERR_PRINTF2(_L("authClient::IdentitiesL() performed a Leave with code %d"), res1 );
+		}
+	else
+		{
+		//Retrieve the expected information from the ini file
+		TInt expNumIdentities;
+	
+		if(GetIntFromConfig(ConfigSection(),_L("NumIdentities"), expNumIdentities) != EFalse) // the tag 'NumIdentities' was present
+			{
+			//Do the compare
+			if (idList.Count() != expNumIdentities)
+				{
+				ERR_PRINTF3(_L("expNumIdentities differs from expected, Expected = %d, Number of Identities = %d"), expNumIdentities, idList.Count());			
+				SetTestStepResult(EFail);
+				}
+			}
+		
+		// Check the status of a plugin compared to what was expected
+		CheckSpecifiedPluginStatusConnectedL(authClient1);
+		}
+	CleanupStack::PopAndDestroy(&idList);
+	CleanupStack::PopAndDestroy(&authClient1); 
+
+__UHEAP_MARKEND;
+	return TestStepResult();	
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/step_EnumIdenties.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,98 @@
+/*
+* Copyright (c) 2005-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: 
+* CTestStep derived implementation
+*
+*/
+
+ 
+#include "tAuthSvrStep.h"
+//#include <testexecutelog.h>
+
+#include "authserver/authclient.h"
+#include "authserver/authmgrclient.h"
+#include "authserver/identity.h"
+
+//using namespace AuthServer;
+
+CTEnumIdentities::CTEnumIdentities(CTAuthSvrServer& aParent): iParent(aParent)
+/**
+ * Constructor
+ */
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KTEnumIdentities);
+	}
+
+
+TVerdict CTRegIdentity::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ * 
+ */
+	{	
+	INFO_PRINTF1(_L("In EnumIdentities Step"));
+	SetTestStepResult(EPass);
+	
+	//If any test step leaves or panics, the test step thread exits and no further calls are made. 
+	if (TestStepResult() != EPass)
+		{
+		return TestStepResult();
+		}
+
+__UHEAP_MARK;		// Check for memory leaks
+
+	InitAuthServerFromFile();
+	AuthServer::RAuthMgrClient client4 = (iParent.Cl());	//This is an R class, so the copy constructor provides the actual handle
+		
+	//User::LeaveIfError(iParent.Cl().Connect());	
+	//CleanupClosePushL(iParent.Cl());
+	User::LeaveIfError(client4.Connect());	
+	CleanupClosePushL(client4);
+	
+	//Call the Enumerate Identities API
+	AuthServer::RIdentityIdArray idArray;	//Initialisation
+	iParent.Cl().IdentitiesL(idArray);
+	
+	
+	//AuthServer::CIdentity aIdentity1 = new (ELeave) AuthServer::CIdentity(AuthServer::KUnknown, 0);
+	
+	TUint32 id1 = 0;
+	AuthServer::CProtectionKey *key1 (AuthServer::CProtectionKey::NewL(8));
+		
+ 	AuthServer::CIdentity *aIdentity1 = new AuthServer::CIdentity(id1, key1);
+ 	TRequestStatus reqStatus = KRequestPending;	//for async calls
+	
+	TRAPD(err, iParent.Cl().RegisterIdentity(*aIdentity1, reqStatus));
+		
+	User::WaitForRequest(reqStatus); //delay
+	//Check reqStatus
+	if (reqStatus.Int() == KErrNone)	//The request completed ok
+		{					
+		INFO_PRINTF2(_L("Request completed ok. reqStatus = %d"), reqStatus.Int());
+		SetTestStepResult(EPass);
+		}
+	else 	// The request failed
+		{					
+		INFO_PRINTF2(_L("Request failed. reqStatus = %d"), reqStatus.Int());
+		SetTestStepResult(EFail);
+		}
+	
+	//CleanupStack::PopAndDestroy(&(iParent.Cl());
+	CleanupStack::PopAndDestroy(&client4);
+	
+__UHEAP_MARKEND;
+	return TestStepResult();	
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/step_FirstStart.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,223 @@
+/*
+* Copyright (c) 2005-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: 
+* CTestStep derived implementation
+*
+*/
+
+ 
+#include "tAuthSvrStep.h"
+
+#include "authserver/authclient.h"
+#include "authserver/authmgrclient.h"
+#include "authrepository.h"
+using namespace AuthServer;
+
+CTFirstStart::CTFirstStart()
+/**
+ * Constructor
+ */
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KTFirstStart);
+	}
+
+TVerdict CTFirstStart::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+	{
+	CTAuthSvrStepBase::doTestStepPreambleL();
+	
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTFirstStart::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ * 
+ */
+	{
+	// remove trained identity 22 for these tests
+	CAuthDb2* db = CAuthDb2::NewLC(iFs);
+	db->RemoveIdentityL(22);
+	CleanupStack::PopAndDestroy(db);
+	
+	//INFO_PRINTF1(_L("In FirstStart Step"));
+	
+	//User::SetJustInTime(ETrue);	//a panic will kill just the thread, not the whole emulator.
+	
+	//If any test step leaves or panics, the test step thread exits and no further calls are made. 
+	if (TestStepResult() != EPass)
+		{
+		return TestStepResult();
+		}
+
+__UHEAP_MARK;		// Check for memory leaks
+
+	SetTestStepResult(EPass);
+
+	TDriveUnit sysDrive (RFs::GetSystemDrive());
+	TDriveName sysDriveName (sysDrive.Name());
+	TBuf<128> fileName (sysDriveName);
+	fileName.Append(KAuthSvrPolicyFile);
+	CIniData* policyFile=NULL;
+	policyFile=CIniData::NewL(fileName);
+	CleanupStack::PushL(policyFile);
+	
+	fileName.Copy(sysDriveName);
+	fileName.Append(KPluginIniFile);
+	
+	CIniData* pluginFile=NULL;
+	pluginFile=CIniData::NewL(fileName);
+	CleanupStack::PushL(pluginFile);
+	//Set a default plugin using an ini file. Read this value from a file if it is specified	
+	//Set this to be the default plugin (update the policy file) if the test case specifies it (in the script's ini file).
+	TInt defaultPluginFromFile;
+	if (GetIntFromConfig(ConfigSection(),_L("defaultPlugin"), defaultPluginFromFile) != EFalse) // the tag 'defaultPlugin' was present
+		{
+				
+		//Write this value to the policy file, Which is picked up by the AuthServer (not implemented yet)
+		//writeToNamedConfig(policyFile, KDefaultPluginTag, defaultPluginFromFile);
+		SetDefaultPluginIdL(defaultPluginFromFile);
+		}
+	
+	//Set whether a plugin supports default data. Read this value from a file if it is specified
+	_LIT(KTrueText,"true");
+	_LIT(KFalseText,"false");
+	
+	TBool iSupportsDefaultDataFromFile(ETrue);	//Default case - the plugin supports default data
+	
+	TBufC<16> trueBuf1(KTrueText);
+	TBufC<16> falseBuf1(KFalseText);
+	TPtr valueToWrite = trueBuf1.Des();			//Default case - the plugin supports default data
+	
+	
+	if (GetBoolFromConfig(ConfigSection(),_L("iSupportsDefaultData"), iSupportsDefaultDataFromFile) != EFalse) // the tag 'isTrusted' was present
+		{
+		//Set the value that will be picked up by the constructor of the plugin
+		//writeToNamedConfig(pluginIniFile, KPluginIniSection, _L("iSupportsDefaultData"), iSupportsDefaultDataFromFile);		
+		if (iSupportsDefaultDataFromFile)
+			{ valueToWrite = trueBuf1.Des();	}
+		else
+			{ valueToWrite = falseBuf1.Des();	}
+			
+		writeToNamedConfig(pluginFile, KPluginIniSection, _L("iSupportsDefaultData"), valueToWrite);		
+		}
+	else
+		{
+		INFO_PRINTF1(_L("The iSupportsDefaultData tag was not specified in the testexecute ini file."));
+		//Use the default value of false		
+		writeToNamedConfig(pluginFile, KPluginIniSection, _L("iSupportsDefaultData"), valueToWrite);
+		}
+		
+	//Carry out the other initialisation that is required.	
+	// TODO.
+	
+
+	//-----------------------------------------------------------------------------------------------------
+	//Connect to the AuthServer
+	AuthServer::RAuthClient authClient1;
+	//TInt connectVal = User::LeaveIfError(authClient1.Connect());
+	TInt connectVal = authClient1.Connect();
+	if (KErrNotFound == connectVal)
+		{
+		//Retry after a delay
+		TTimeIntervalMicroSeconds32 timeInterval = 2000;	//2 Milliseconds
+		User::After(timeInterval);
+		connectVal = authClient1.Connect();
+		}
+	if (KErrNone != connectVal)
+		{
+		ERR_PRINTF2(_L("Unable to start a session or other connection error. Err = %d"), connectVal);
+		User::LeaveIfError(connectVal);		
+		}
+	CleanupClosePushL(authClient1);
+
+
+	//Check that the default identity has been created
+	//Call the Enumerate Identity API
+	//AuthServer::RIdentityIdList idList;
+	AuthServer::RIdentityIdArray idArray;
+	CleanupClosePushL(idArray);
+	//TInt ret =  User::LeaveIfError(authClient1.IdentitiesL(idArray));
+	TInt ret = KErrNone;
+	TRAP(ret, authClient1.IdentitiesL(idArray));
+	if (KErrNone != ret)
+		{
+		ERR_PRINTF2(_L("IdentitiesL left with errorcode: %d"), ret);
+		SetTestStepResult(EFail);
+		}
+	
+	else
+		{
+		
+		//List the present identities by their strings
+		for (TInt i = 0; i < idArray.Count(); i++)
+			{
+			HBufC* idName = 0;
+			//TRAP(ret, idName = authClient1.IdentityStringL(idArray[i]));
+			idName = authClient1.IdentityStringL(idArray[i]);
+			INFO_PRINTF3(_L("Id %d has the name %S"), i, idName);
+			delete idName; 
+			}
+		//Retrieve the expected information from the ini file
+		TInt expNumIdentities;
+		
+		if(GetIntFromConfig(ConfigSection(),_L("NumIdentities"), expNumIdentities) != EFalse) // the tag 'NumIdentities' was present
+			{
+			//Do the compare
+			if ((idArray.Count()) != expNumIdentities)
+				{
+				ERR_PRINTF2(_L("expNumIdentities differs from expected, Number of Identities = %d"), (idArray.Count()));			
+				SetTestStepResult(EFail);
+				}
+			}
+		
+		TBool expIsDefaultPlugin = EFalse;	
+		if(GetBoolFromConfig(ConfigSection(), _L("isDefaultPlugin"), expIsDefaultPlugin) != EFalse) // the tag 'isDefaultPlugin' was present
+			{
+			if(!expIsDefaultPlugin && (KErrServerTerminated != ret) )
+				{
+				//The plugin is not a default plugin as defined in the policy file, and thus the server should have been terminated
+				ERR_PRINTF2(_L("connectVal differs from expected, connectVal= %d"), connectVal);			
+				SetTestStepResult(EFail);
+				}	
+			}
+	
+		}
+			
+		
+		//Maybe check the individual identifier -not predictable though..
+	CleanupStack::PopAndDestroy(&idArray); 
+	CleanupStack::PopAndDestroy(&authClient1); 
+	
+	REComSession::FinalClose(); 	//garbage collect the last previously destroyed implementation and close the REComSession if no longer in use
+__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+
+//TVerdict CTFirstStart::doTestStepPostambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+/*	{
+	INFO_PRINTF1(_L("Test Step Postamble"));
+	return TestStepResult();
+	}
+*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/step_IdentifyMultiple.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,277 @@
+/*
+* Copyright (c) 2005-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: 
+* CTestStep derived implementation
+*
+*/
+
+ 
+#include "tAuthSvrStep.h"
+
+
+using namespace AuthServer;
+
+
+CTIdentifyMultiple::CTIdentifyMultiple()
+/**
+ * Constructor
+ */
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KTIdentifyMultiple);
+	}
+
+CTIdentifyMultiple::~CTIdentifyMultiple()
+/**
+ * Destructor
+ */
+	{
+	 TInt i = iPluginIds.Count();
+	  while (i)
+		{
+		 REComSession::DestroyedImplementation(iPluginIds[--i]);
+		}
+	}
+	
+TVerdict CTIdentifyMultiple::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+	{
+	SetTestStepResult(EPass);
+	
+	//Put in an initial value for the userResult (PIN) that will be used as input during the Identify() function
+	TPtrC userResultValue;
+	if(GetStringFromConfig(ConfigSection(),_L("userResult"), userResultValue) != EFalse) // the tag 'userResult ' was present
+		{
+		TDriveUnit sysDrive (RFs::GetSystemDrive());
+		TBuf<128> authSvrPolicyFile (sysDrive.Name());
+		authSvrPolicyFile.Append(KAuthSvrPolicyFile);
+		
+		CIniData* policyFile=NULL;
+		policyFile=CIniData::NewL(authSvrPolicyFile);
+		CleanupStack::PushL(policyFile);
+		//Update AuthSvrPolicy.ini, section: SectionOne, value:EnteredPinValue
+		writeToNamedConfig(policyFile, _L("SectionOne"), _L("EnteredPinValue"), userResultValue);
+		policyFile->WriteToFileL();
+
+		CleanupStack::PopAndDestroy(policyFile);
+
+		}
+	return TestStepResult();
+	}
+	
+ 
+TVerdict CTIdentifyMultiple::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ * 
+ */
+	{	
+	//INFO_PRINTF1(_L("In IdentifyMultiple Step"));
+	SetTestStepResult(EPass);
+	
+	//If any test step leaves or panics, the test step thread exits and no further calls are made. 
+	if (TestStepResult() != EPass)
+		{
+		return TestStepResult();
+		}
+
+__UHEAP_MARK;		// Check for memory leaks
+
+	//-----------------------------------------------------------------------------------------------------
+	//Connect to the AuthServer
+	
+	
+	AuthServer::RAuthClient authClient1;
+	TInt connectVal = authClient1.Connect();
+	if (KErrNotFound == connectVal)
+		{
+		//Retry after a delay
+		TTimeIntervalMicroSeconds32 timeInterval = 2000;	//2 Milliseconds
+		User::After(timeInterval);
+		connectVal = authClient1.Connect();
+		}
+	if (KErrNone != connectVal)
+		{
+		ERR_PRINTF2(_L("Unable to start a session or other connection error. Err = %d"), connectVal);
+		User::LeaveIfError(connectVal);		
+		}	
+	CleanupClosePushL(authClient1);
+
+
+/*
+	//Call the Enumerate Identities API
+	TInt ret = KErrNone;
+	AuthServer::RIdentityIdArray idArray;	//Initialisation
+	TRAP(ret, authClient1.IdentitiesL(idArray));		// This will need to be updated if the function returns errors like KErrServerTerminated, etc 
+			
+	//Retrieve the expected information from the ini file
+	TInt expNumIdentities = 0;	
+	if(GetIntFromConfig(ConfigSection(),_L("NumIdentities"), expNumIdentities) != EFalse) // the tag 'NumIdentities' was present
+		{//Do the compare
+		if (idArray.Count() != expNumIdentities)
+			{
+			ERR_PRINTF2(_L("expNumIdentities differs from expected, Number of Identities = %d"), idArray.Count());			
+			SetTestStepResult(EFail);
+			}
+		}
+*/
+///*
+	//Run through the list of plugins and call the Identify function on each
+	//Get all implementations using  CAuthPluginInterface::ListImplementationsL()	
+	RImplInfoPtrArray infoArray;
+	// Note that a special cleanup function is required to reset and destroy
+	// all items in the array, and then close it.
+	TCleanupItem cleanup(CleanupEComArray, &infoArray);
+	CleanupStack::PushL(cleanup);
+	REComSession::ListImplementationsL(KCAuthPluginInterfaceUid, infoArray);
+	
+	TInt numPlugins = infoArray.Count();
+	INFO_PRINTF2(_L("Number of plugins: %d"), numPlugins);	
+	for (TInt i = 0;  i < numPlugins; i++)
+		{
+		//Retrieves default data for each
+		//TPtrC8 dataType = infoArray[i] ->DataType();
+		//TDesC displayName = infoArray[i] ->DisplayName();
+		
+		TInt data = HexString2Num(infoArray[i]->DataType());
+		INFO_PRINTF2(_L("Implementation Id: 0x%x"),infoArray[i]->ImplementationUid().iUid);
+		INFO_PRINTF2(_L("Display Name: %S"),&infoArray[i]->DisplayName());
+		INFO_PRINTF2(_L("Default Data: %x"),data);
+	    //INFO_PRINTF2(_L("Rom Only: %d"),impl[i]->RomOnly());
+		//INFO_PRINTF2(_L("Rom Based: %d"),impl[i]->RomBased());
+		   
+		//....
+		}	
+	// Clean up
+	CleanupStack::PopAndDestroy(&infoArray); //infoArray, results in a call to CleanupEComArray
+//*/
+
+	
+	//Read a cue from the ini file. A specific one in each section; the expected data is the same as the cue, so this minimizes
+	// the number of times the file is read
+	TInt fileCuePluginIdValue = 0;
+	TPluginId cuePluginIdValue = 0;
+	
+	//User::SetJustInTime(ETrue);
+		
+	if(GetHexFromConfig(ConfigSection(),_L("pluginId"), fileCuePluginIdValue) != EFalse) // the tag 'pluginId' was present
+		{
+		cuePluginIdValue = fileCuePluginIdValue;
+			
+		CAuthPluginInterface* plugin = 0;
+		TEComResolverParams resolverParams;
+		TBufC8<16> pluginIdTxt;
+			  
+		pluginIdTxt.Des().Format(_L8("%x"), cuePluginIdValue);
+			  
+		resolverParams.SetDataType(pluginIdTxt);
+			  
+		TAny* tempPlugin = 0; 
+		TUid Dtor_ID_Key = TUid::Null();
+		tempPlugin = 
+		REComSession::CreateImplementationL(KCAuthPluginInterfaceUid,
+		    							  	Dtor_ID_Key,
+											resolverParams,
+											KRomOnlyResolverUid);	
+		
+		plugin = reinterpret_cast<CAuthPluginInterface*>(tempPlugin);
+		CleanupStack::PushL(plugin);
+		iPluginIds.Append(Dtor_ID_Key);
+		//Call the identify function for this plugin
+		HBufC8* result1 = 0;
+
+		TRequestStatus reqStatus1 = KErrNone;
+		TIdentityId userId = 0;
+		
+		plugin->Identify(userId, KNullDesC(), result1, reqStatus1);
+		CleanupStack::PushL(result1);
+		
+		//if (reqStatus1.Int() == CAuthPluginInterface::KIdSuccess)
+		if (reqStatus1.Int() == KErrNone)
+			{
+			//Check that this is what was expected		
+			TBuf8<32> cueValue;		
+			_LIT8(KFormatValue2, "%x");
+			cueValue.Format(KFormatValue2, cuePluginIdValue);		
+			
+			TInt userIdValue = 0;
+			//Check to see if there was a value in the testExecute 'ini' file to compare with						
+			if(GetHexFromConfig(ConfigSection(),_L("userId"), userIdValue) != EFalse) // the tag 'userId' was present
+				{	
+				if(userId != userIdValue)
+					{
+					ERR_PRINTF3(_L("Id value returned differs from expected, Returned userId value= %d, Expected Id value = %d"), userId, userIdValue);
+					SetTestStepResult(EFail);				
+					}
+				}
+
+			TInt userResultValue = 0;				
+			if(GetIntFromConfig(ConfigSection(),_L("userResult"), userResultValue) != EFalse) // the tag 'userId' was present
+			
+				{
+				//Convert result1 to an integer
+				TPtr8 ptr = result1->Des();		// Convert the HBufC8 to a TPtr8				
+				TUint32 result2;
+				TLex8 input (ptr);
+				TRadix aRadix = EDecimal;
+				input.Val(result2, aRadix);
+				RDebug::Print(_L("Integer representation of result1 = %d, result1 itself = %S"), result2, result1);
+								
+				if(result2 != userResultValue)
+					{
+					_LIT(KErrMsg1, "result value returned differs from expected, Returned userId value= %d, \n Returned data value = %d. Expected data value = %d");						
+					ERR_PRINTF4(KErrMsg1, userId, result2, userResultValue);					
+					SetTestStepResult(EFail);				
+					}
+				}	
+			//In this case, we're expecting the 'data' returned to be the same as the pluginId value (cueValue)
+			else if (result1->Compare(cueValue) != 0)
+				{
+				TPtr8 ptr = result1->Des();		// Convert the HBufC8 to a TPtr8				
+				TUint32 result2;
+				TLex8 input (ptr);
+				TRadix aRadix = EDecimal;
+				input.Val(result2, aRadix);
+				
+				ERR_PRINTF3(_L("result value returned differs from expected, Returned userId value= %d, Returned data value = %d"), userId, result2);
+				SetTestStepResult(EFail);		
+				}
+			else
+				{
+				//No errors returned. The process was successful
+				SetTestStepResult(EPass);
+				}				
+			}		
+		else
+			{
+			ERR_PRINTF2(_L("An error occurred in the Identity function. RequestStatus = %d"), reqStatus1.Int());
+			SetTestStepResult(EFail);		
+			}
+		
+		CleanupStack::PopAndDestroy(result1);
+		CleanupStack::PopAndDestroy(plugin);
+		}			
+	
+	CleanupStack::PopAndDestroy(&authClient1);	// authClient1	
+	
+	REComSession::FinalClose(); 	//garbage collect the last previously destroyed implementation and close the REComSession if no longer in use
+	
+ 	__UHEAP_MARKEND;
+	return TestStepResult();	
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/step_RegIdentity.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,407 @@
+/*
+* Copyright (c) 2006-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: 
+* CTestStep derived implementation
+*
+*/
+
+ 
+#include "tAuthSvrStep.h"
+#include <s32file.h>
+class CAuthActive2 : public CActive
+    {
+    public:
+    CAuthActive2(RAuthMgrClient& aClient, CAuthExpression* aExpr,
+				 TInt aFresh, TBool aClientSpecific, TBool aStop = ETrue) : 
+         CActive(EPriorityNormal),
+         iClient(aClient),
+		 iResult(EFail),
+         iRunCount(0),
+         iAe(aExpr),
+         iStop(aStop),
+         iFresh(aFresh),
+         iIdToStore(0), 
+         iClientSpecific(aClientSpecific)
+        {
+        CActiveScheduler::Add(this);
+        }
+    void doAuth() 
+        {
+        SetActive();		
+		TRequestStatus* status = &iStatus;		    
+		User::RequestComplete(status, KErrNone);
+		iRunCount = 0;
+        }
+    void doDeAuth()
+        {
+        iClient.DeauthenticateL();
+        }
+	void DoCancel() 
+        {
+        }
+     void RunL() 
+        {
+        iErr = iStatus.Int();
+		switch (iRunCount)
+		  {
+		  case 0:
+            iStatus = KRequestPending;
+			iId = 0;
+
+			iClient.AuthenticateL(*iAe, iFresh, iClientSpecific, EFalse, iId, iStatus);
+			SetActive();
+
+			break;
+		  case 1:
+			if (0 != iId)
+				{
+				iIdToStore = iId->Id();
+				delete iId;
+				}
+			iStatus = KRequestPending;
+			TRequestStatus* status;
+			status = &iStatus;				
+			User::RequestComplete(status, iErr);				
+			SetActive();
+			
+			break;
+   		  case 2:
+			iResult = iStatus == KErrNone ? EPass : EFail;
+            iErr = iStatus.Int();
+			if (iStop)
+                {
+                CActiveScheduler::Stop();
+                }
+
+			break;
+     	  default:
+			iResult = EFail;
+			
+			if (iStop)
+				{
+			    CActiveScheduler::Stop();
+			    }
+		    }
+		  ++iRunCount;
+          }
+	RAuthMgrClient& iClient;
+	TVerdict iResult;
+	TInt iRunCount;
+	CAuthExpression* iAe;
+	CIdentity* iId;
+    TBool iStop;
+    TInt iErr;
+    TInt iFresh;
+    TIdentityId iIdToStore;
+    TBool iClientSpecific;
+    };
+
+//====================================================================================================
+
+
+class CRegActive : public CActive
+    {
+    public:
+    CRegActive(RAuthMgrClient& aClient, HBufC* aIdentityString, CIdentity*& aResult) : 
+         CActive(EPriorityNormal),
+         iFirstTime(true),
+         iClient(aClient), 
+         iResult(aResult),
+         iIdentityString(aIdentityString),
+         iErr(KErrNone)
+        {
+        CActiveScheduler::Add(this);
+        }
+    ~CRegActive()
+    	{
+    	delete iIdentityString; 
+    	}
+    void doReg()
+        {
+        SetActive();		
+		TRequestStatus* status = &iStatus;
+		User::RequestComplete(status, KErrNone);
+		iFirstTime = ETrue;
+        }
+        void DoCancel() 
+        {
+        }
+     void RunL() 
+        {
+        iErr = iStatus.Int();
+        if (iFirstTime)
+            {
+			SetActive();
+            iStatus = KRequestPending;
+            iClient.RegisterIdentityL(iResult, *iIdentityString, iStatus);
+            iFirstTime = false;
+            }
+        else
+            {
+            iErr = iStatus.Int();
+            CActiveScheduler::Stop();
+			}
+        }
+        
+    TBool iFirstTime;
+    RAuthMgrClient& iClient;
+    CIdentity*& iResult;
+    HBufC* iIdentityString;
+    TInt iErr;
+    };
+
+//====================================================================================================
+
+CTRegIdentity::~CTRegIdentity()
+/**
+  Destructor
+ */
+	{}
+
+CTRegIdentity::CTRegIdentity(CTAuthSvrServer& aParent): iParent(aParent)
+/**
+  Constructor
+ */
+	{
+	
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KTAuthSvrCheck);
+	}
+
+TVerdict CTRegIdentity::doTestStepPreambleL()
+/**
+  @return - TVerdict code
+  Override of base class virtual
+ */
+	{
+	//Call the parent class preamble, setting up the file server, etc
+	CTStepActSch::doTestStepPreambleL();	
+	return TestStepResult();
+	}
+
+TVerdict CTRegIdentity::doTestStepL()
+/**
+  @return - TVerdict code
+  Override of base class pure virtual
+  
+ */
+	{	
+	SetTestStepResult(EPass);	
+__UHEAP_MARK;		// Check for memory leaks
+	SetPinPluginStateL();
+	
+	//-----------------------------------------------------------------------------------------------------	
+	InitAuthServerFromFileL();	// Set things like 'iSupportsDefaultData' and 'DefaultPlugin'
+	
+	// this method creates the dat file from where the test implementation
+	// of pin plugin notifier reads user input.
+	// as the pin plugin fails without this data it has been included 
+	// in the code as a default step for initializing the pin plugin
+	// data.
+	TPinValue aPinValue;
+	CreatePinPluginInputFileL(EPinPluginTraining,aPinValue);
+	
+	CActiveScheduler::Install(iActSchd);
+	//Connect to the AuthServer	
+	AuthServer::RAuthMgrClient authMgrClient1;	
+	TInt connectVal = authMgrClient1.Connect();
+	if (KErrNotFound == connectVal)
+		{
+		//Retry after a delay
+		TTimeIntervalMicroSeconds32 timeInterval = 2000;	//2 Milliseconds
+		User::After(timeInterval);
+		connectVal = authMgrClient1.Connect();
+		}
+	if (KErrNone != connectVal)
+		{
+		ERR_PRINTF2(_L("Unable to start a session or other connection error. Err = %d"), connectVal);
+		RemovePinPluginFileL();
+		User::LeaveIfError(connectVal);
+		}	
+	CleanupClosePushL(authMgrClient1);
+
+	//Examine the authserver and see what's there
+	ListPluginsL(authMgrClient1);
+	
+	TBool statusAll = EFalse;
+	statusAll = CheckPluginStatusAllL(authMgrClient1);
+	
+	//Check the username of the second identity and then attempt to set it.
+//	SetTestStepResult(checkAndSetUserNameL(authMgrClient1, 0));	
+	
+	// Get the identity string (if defined)
+	TPtrC identityString;
+	if (!GetStringFromConfig(ConfigSection(), _L("IdentityString"), identityString))
+		{
+		identityString.Set(_L("SOMENAME"));
+		}
+	
+	//Register an identity using an active object
+	CIdentity* identity1 = 0;
+    CRegActive* active = new (ELeave) CRegActive(authMgrClient1, identityString.AllocL(), identity1); // Ownership transferred
+    active->doReg();
+	CActiveScheduler::Start();
+	TInt err = active->iErr;
+	delete active;
+
+	SetTestStepError(err);
+
+	if(KErrAuthServPluginQuit == err)
+		{
+		INFO_PRINTF1(_L("Training was Quit."));
+		INFO_PRINTF1(_L("User entered the Quit code as trainingInput."));		
+		}
+	else if (KErrAuthServPluginCancelled == err)
+		{
+		INFO_PRINTF1(_L("Training was cancelled."));
+		INFO_PRINTF1(_L("User entered trainingInput same as identifyingInput or an existing PIN."));
+		INFO_PRINTF1(_L("Or the Cancel code."));		
+		}
+    else if ((identity1 == 0) && (KErrAuthServPluginQuit != err))
+        {
+        ERR_PRINTF1(_L("An unexpected error occurred during the registration process."));
+        SetTestStepResult(EFail);
+        }
+    else
+  		{
+  		if (0 != identity1)
+  			{
+  			INFO_PRINTF3(_L("Id = %x , KeyLength = %d\n"), identity1->Id(), identity1->Key().KeyData().Size());
+  			}	
+		//Get a list of all the present identities
+		RIdentityIdArray ids;
+		authMgrClient1.IdentitiesL(ids);
+		CleanupClosePushL(ids);
+		TInt actualNumIds = ids.Count();
+				
+		//If specified in the ini file, check the number of identities now present
+		TInt numIdsValue = 0;
+		if (GetIntFromConfig(ConfigSection(),_L("NumIdentities"), numIdsValue) != EFalse) // the tag 'numIds' was present
+			{
+			if (actualNumIds != numIdsValue)
+				{
+				ERR_PRINTF3(_L("Error. ActualNumIds = %d, numIdsExpected = %d"), actualNumIds, numIdsValue);
+				SetTestStepResult(EFail);
+				}				
+			}
+		//List the present identities by their strings
+		for (TInt i = 0; i < actualNumIds; i++)
+			{
+			HBufC* idName = 0;			
+			idName = authMgrClient1.IdentityStringL(ids[i]);
+			INFO_PRINTF3(_L("Id %d has the name %S"), i, idName);
+			delete idName; 
+			}		
+		CleanupStack::PopAndDestroy(&ids);
+		delete identity1;				
+	
+  		}//End check for when identity1 == 0, i.e 'RegisterIdentity() fails
+
+	//Examine the authserver and see what's there
+	ListPluginsL(authMgrClient1);
+	
+	statusAll = CheckPluginStatusAllL(authMgrClient1);
+	if (!statusAll)
+		{
+		SetTestStepResult(EFail);
+		}
+	CleanupStack::PopAndDestroy(&authMgrClient1);	// authClient1	
+	
+	RemovePinPluginFileL();
+	
+	//Garbage collect the last previously destroyed implementation 
+	// and close the REComSession if no longer in use
+	REComSession::FinalClose(); 	
+__UHEAP_MARKEND;
+	return TestStepResult();	
+	}
+
+void CTRegIdentity::ListPluginsL(AuthServer::RAuthMgrClient& aAuthMgrClient )
+	{
+	RPluginDescriptions pluginList1;
+	TCleanupItem cleanup(CleanupEComArray, &pluginList1);
+	CleanupStack::PushL(cleanup);					
+	aAuthMgrClient.PluginsL(pluginList1);	
+	TInt numTotalPlugins = pluginList1.Count();
+	TInt i;
+	for(i = 0; i < numTotalPlugins; i++)
+		{
+		TInt presentPluginIdVal = pluginList1[i]->Id();
+		TInt presentPluginStatus = pluginList1[i]->TrainingStatus();
+		INFO_PRINTF3(_L("PluginId=%x,status =%i"), presentPluginIdVal,presentPluginStatus);
+		}
+	CleanupStack::PopAndDestroy(&pluginList1); //infoArray, results in a call to CleanupEComArray	
+	
+	}
+
+void CTRegIdentity::SetPinPluginStateL()
+	{
+	TPtrC activeStateFromFile;
+	
+	_LIT(KPinPlugin,"pinplugin_inactive.txt");
+	
+	TFileName filename;
+	filename.Copy(KPinPlugin); // convert from 8 -> 16 bit descriptor
+		
+	TDriveUnit sysDrive = RFs::GetSystemDrive();
+	TDriveName sysDriveName (sysDrive.Name());
+	filename.Insert(0,sysDriveName);
+	filename.Insert(2,_L("\\"));		
+	
+	RFileWriteStream stream;
+	RFs fs;
+	CleanupClosePushL(fs);
+	User::LeaveIfError(fs.Connect());
+	fs.Delete(filename);
+		
+	if (GetStringFromConfig(ConfigSection(),_L("Pin200032E5Active"), activeStateFromFile)) 
+		{
+		if(activeStateFromFile == _L("false"))
+			{		
+			User::LeaveIfError(stream.Create(fs, filename, EFileWrite | EFileShareExclusive));
+			stream.Close();
+			}
+		}
+	CleanupStack::PopAndDestroy(); // fs
+	}
+
+void CTRegIdentity::RemovePinPluginFileL()
+	{
+	TPtrC activeStateFromFile;
+	_LIT(KPinPlugin,"pinplugin_inactive.txt");
+	TFileName filename;
+	filename.Copy(KPinPlugin); // convert from 8 -> 16 bit descriptor
+			
+	TDriveUnit sysDrive = RFs::GetSystemDrive();
+	TDriveName sysDriveName (sysDrive.Name());
+	filename.Insert(0,sysDriveName);
+	filename.Insert(2,_L("\\"));
+		
+	RFs fs;
+	CleanupClosePushL(fs);
+	User::LeaveIfError(fs.Connect());
+	fs.Delete(filename);
+	CleanupStack::PopAndDestroy(); // fs
+	}
+
+TVerdict CTRegIdentity::doTestStepPostambleL()
+/**
+  @return - TVerdict code
+  Override of base class virtual
+ */
+	{
+	//Call the parent postamble, releasing the file handle, etc
+	CTStepActSch::doTestStepPostambleL();
+	return TestStepResult();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/step_authenticate.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,681 @@
+/*
+* Copyright (c) 2006-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: 
+* CTestStep derived implementation
+*
+*/
+
+ 
+#include "tAuthSvrStep.h"
+
+#include "authserver/authclient.h"
+#include "authserver/authmgrclient.h"
+#include "authrepository.h"
+#include "testutilclient.h"
+
+using namespace AuthServer;
+
+
+class CAuthActive2 : public CActive
+    {
+    public:
+    CAuthActive2(RAuthMgrClient& aClient, CAuthExpression* aExpression,
+				 TInt aFresh, TBool aClientSpecific, TBool aAuthViaAlias, const TDesC& aClientMessage, TBool aStop = ETrue) : 
+         CActive(EPriorityNormal),
+         iClient(aClient),
+		 iResult(EFail),
+         iRunCount(0),
+         iAe(aExpression),
+         iStop(aStop),
+         iFresh(aFresh),
+         iIdToStore(0), 
+         iClientSpecific(aClientSpecific),
+         iAuthViaAlias(aAuthViaAlias),
+         iClientMessage(aClientMessage)
+        {
+        CActiveScheduler::Add(this);
+        }
+    
+   void doAuth() 
+        {
+        SetActive();		
+		TRequestStatus* status = &iStatus;
+		User::RequestComplete(status, KErrNone);
+		iRunCount = 0;
+        }
+	void DoCancel() 
+        {
+        }
+        
+    TInt RunError(TInt aError)
+    	{
+    	iErr = aError;
+	   	CActiveScheduler::Stop();
+    	return KErrNone;
+    	}
+    	
+    void RunL() 
+        {
+        iErr = iStatus.Int();
+       
+		switch (iRunCount)
+		  {
+		  case 0:
+		  	{
+		  	iId = 0;
+			TUid clientSid = {0};
+			iClient.AuthenticateL(*iAe, iFresh, iClientSpecific, clientSid, EFalse, iClientMessage, iId, iStatus);
+		
+			SetActive();
+
+			break;
+		  	}
+            
+		  case 1:
+			if (0 != iId)
+				{
+				iIdToStore = iId->Id();
+				delete iId;
+				iId = NULL;
+				}
+			
+			iResult = iStatus == KErrNone ? EPass : EFail;
+            iErr = iStatus.Int();
+			if (iStop)
+                {
+                CActiveScheduler::Stop();
+                }
+
+			break;
+			
+     	  default:
+			iResult = EFail;
+			
+			if (iStop)
+			    {
+			    CActiveScheduler::Stop();
+			    }
+		    }
+		  ++iRunCount;
+          }
+
+	~CAuthActive2()
+		{
+		if(iId != NULL)
+			delete iId;
+		}
+          
+   		
+	RAuthMgrClient& iClient;
+	TVerdict iResult;
+	TInt iRunCount;
+	CAuthExpression* iAe;
+	CIdentity* iId;
+    TBool iStop;
+    TInt iErr;
+    TInt iFresh;
+    TIdentityId iIdToStore;
+    TBool iClientSpecific;
+    TBool iAuthViaAlias;
+    const TDesC& iClientMessage;
+    };
+    
+//====================================================================================================    
+CTAuthenticate::CTAuthenticate(CTAuthSvrServer& aParent): iParent(aParent)
+/**
+  Constructor
+ */
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KTAuthenticate);
+	}
+
+CTAuthenticate::~CTAuthenticate()
+/**
+  Destructor
+ */
+	{}
+	
+TVerdict CTAuthenticate::doTestStepPreambleL()
+/**
+  @return - TVerdict code
+  Override of base class virtual
+ */
+	{
+	//Call the parent class preamble, setting up the file server, etc
+	CTStepActSch::doTestStepPreambleL();
+
+	return TestStepResult();
+	}
+
+TVerdict CTAuthenticate::doTestStepL()
+/**
+  @return - TVerdict code
+  Override of base class pure virtual
+  
+ */
+	{	
+	SetTestStepResult(EFail);
+
+__UHEAP_MARK;		// Check for memory leaks
+	 	
+	//-----------------------------------------------------------------------------------------------------
+	TPtrC displayMessage;
+	TBool messageSent = (GetStringFromConfig(ConfigSection(),_L("DisplayMessage"), displayMessage) != EFalse);
+	TBuf<100> message(displayMessage);
+	ClientMessage(messageSent, displayMessage);
+	if(!messageSent)
+		{
+		message = KNullDesC();
+		}
+	InitAuthServerFromFileL();	// Set things like 'iSupportsDefaultData' and 'DefaultPlugin'
+	
+	// this method creates the dat file from where the test implementation
+	// of pin plugin notifier reads user input.
+	// as the pin plugin fails without this data it has been included 
+	// in the code as a default step for initializing the pin plugin
+	// data.
+	// the pin value generate through the reference plugin is a random 
+	// value which should be retrieved from the output file and given 
+	// as an input back for creation of the input file again.
+	// If the ini file specified a pin use that instead
+	TPtrC pin;
+	if (GetStringFromConfig(ConfigSection(),_L("pinvalue"), pin))
+		{
+		TPinValue pinValue;
+		pinValue.Copy(pin);
+		//pinValue.
+		CreatePinPluginInputFileL(EPinPluginIdentify, pinValue);
+		}
+	else
+		{
+		TPinValue pinValue = GetPinFromOutputFileL();
+		CreatePinPluginInputFileL(EPinPluginIdentify, pinValue);
+		}
+
+	CActiveScheduler::Install(iActSchd);
+	//Connect to the AuthServer	
+	AuthServer::RAuthMgrClient authMgrClient1;	
+	TInt connectVal = authMgrClient1.Connect();
+	if (KErrNotFound == connectVal)
+		{
+		//Retry after a delay
+		TTimeIntervalMicroSeconds32 timeInterval = 2000;	//2 Milliseconds
+		User::After(timeInterval);
+		connectVal = authMgrClient1.Connect();
+		}
+	if (KErrNone != connectVal)
+		{
+		ERR_PRINTF2(_L("Unable to start a session or other connection error. Err = %d"), connectVal);
+		User::LeaveIfError(connectVal);		
+		}	
+	
+	CleanupClosePushL(authMgrClient1);
+
+	//-----------------------------------------------------------------------------------------------------
+	// Authenticate by reading the user input
+	
+	//Check that alias or pluginId is quoted in the ini file
+	TPtrC exprString;
+	TBool authViaAlias = GetStringFromConfig(ConfigSection(),_L("alias"), exprString);
+	TBool authViaExpr = EFalse;
+	if(!authViaAlias)
+		{
+		authViaExpr = GetStringFromConfig(ConfigSection(),_L("plugin1Id"), exprString);
+		}
+	
+	if(	! authViaAlias && ! authViaExpr)
+		{
+		INFO_PRINTF1(_L("Neither plugin1Id nor alias was specified in the ini file"));	
+		}
+	else
+		{
+	  	TInt freshnessVal = 0;	//Default value
+	 	//Retrieve the value of 'freshness' from the ini file, but if it's absent use the default value
+	 	if(GetIntFromConfig(ConfigSection(),_L("freshness"), freshnessVal) == EFalse)
+	 		{
+	 		freshnessVal = 10;
+	 		}
+	 		
+	 	TBool clientSpecificKeyVal = EFalse;	 	
+	 	//Retrieve the value of 'clientSpecificKey' from the ini file, but if it's absent use the default value
+	 	if(GetBoolFromConfig(ConfigSection(),_L("clientSpecificKey"), clientSpecificKeyVal) == EFalse)
+	 		{
+	 		clientSpecificKeyVal = EFalse;
+	 		}
+	 	
+	 	TBool defaultpluginusage = EFalse;
+	 	if(GetBoolFromConfig(ConfigSection(),_L("defaultpluginusage"), defaultpluginusage ) == EFalse)
+	 		 {
+	 		defaultpluginusage  = EFalse;
+	 		 }
+	 		
+	 	TBool isSynchronous = EFalse;
+	 	//Retrieve the value of 'synchronous' from the ini file, but if it's absent use the default value
+	 	if(GetBoolFromConfig(ConfigSection(),_L("synchronous"), isSynchronous) != EFalse)
+	 		{
+	 		CallSyncAuthenticateL(authMgrClient1, exprString, freshnessVal, clientSpecificKeyVal, authViaAlias, defaultpluginusage, message);
+	 		}
+	 	else
+	 		{
+	 		CallAsyncAuthenticateL(authMgrClient1, exprString, freshnessVal, clientSpecificKeyVal, authViaAlias, defaultpluginusage, message);
+	 		}
+
+	  	}
+
+	CleanupStack::PopAndDestroy(&authMgrClient1);	// authClient1	
+	//Garbage collect the last previously destroyed implementation 
+	// and close the REComSession if no longer in use
+	REComSession::FinalClose(); 
+__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+
+
+TVerdict CTAuthenticate::doTestStepPostambleL()
+/**
+  @return - TVerdict code
+  Override of base class virtual
+ */
+	{
+	//Call the parent postamble, releasing the file handle, etc
+	CTStepActSch::doTestStepPostambleL();
+	return TestStepResult();
+	}
+
+
+void CTAuthenticate::setLastAuthIdL(AuthServer::TIdentityId idToStore)
+/**
+  Utility function that stores the most recently authenticated identity in the GlobalDb file
+  This should only be called by the Authenticate test step  class
+ */
+	{	
+	TBuf<100> bufToWrite;
+	_LIT16(KFormatLastAuth,"%u");
+	
+	bufToWrite.Format(KFormatLastAuth, idToStore); //generates:
+	
+	TDriveUnit sysDrive (RFs::GetSystemDrive());
+	TBuf<128> authSvrPolicyFile (sysDrive.Name());
+	authSvrPolicyFile.Append(KAuthSvrPolicyFile);
+
+	CIniData* policyFile=NULL;
+	TRAP_IGNORE(policyFile=CIniData::NewL(authSvrPolicyFile));
+	CleanupStack::PushL(policyFile);
+
+	TInt ret = writeToNamedConfig(policyFile, KLastAuthIdTag, bufToWrite);
+
+	policyFile->WriteToFileL();
+	CleanupStack::PopAndDestroy(policyFile);
+
+	if (KErrNotFound == ret)
+		{
+		ERR_PRINTF3(_L("Error while setting last AuthId. Tag %S not found in %S file"), KLastAuthIdTag, &authSvrPolicyFile);
+		}
+	else
+		{
+		INFO_PRINTF2(_L("Setting last AuthId was successful. Id = %S"), &bufToWrite);
+		}
+	}
+	
+void CTAuthenticate::CallSyncAuthenticateL(RAuthMgrClient& aAuthMgrClient, const TDesC& aInputString, TInt aFreshness, TBool aClientSpecificKey, TBool aIsAlias, TBool aIsDefault, const TDesC& aClientMessage )
+	{
+	CIdentity* id = 0;
+	TInt error;
+	TUid val = TUid::Uid(0);
+	
+	CAuthExpression* expr = NULL;
+	
+	if(!aIsAlias)
+		{
+		if(!aIsDefault)
+			{
+			CAuthExpression* expr = CreateAuthExprLC(aInputString);			
+			TRAP(error, id = aAuthMgrClient.AuthenticateL(*expr, aFreshness, aClientSpecificKey, val, EFalse, aClientMessage));
+			CleanupStack::PopAndDestroy(expr);
+			}
+		else
+			{
+			CAuthExpression* expr = CreateAuthExprLC(KNullDesC());			
+			TRAP(error, id = aAuthMgrClient.AuthenticateL(*expr, aFreshness, aClientSpecificKey, val, EFalse, aClientMessage));
+			CleanupStack::PopAndDestroy(expr);
+			}
+		}
+	
+	else
+		{
+		TRAPD(err,expr = aAuthMgrClient.CreateAuthExpressionL(aInputString));
+			if(err != KErrNone)
+				{
+				SetTestStepError(err);
+				return;
+				}
+				
+		CleanupStack::PushL(expr);
+		TUid clientSid = {0};
+		TRAP(error, id = aAuthMgrClient.AuthenticateL(*expr, aFreshness, aClientSpecificKey, clientSid, EFalse, KNullDesC));
+		CleanupStack::PopAndDestroy(expr);
+		}
+		
+	if(error != KErrNone)
+	 	{
+	 	ERR_PRINTF2(_L("Authentication Result error = %d"), error);	
+	 	SetTestStepError(error);
+	 	return;	
+		}
+	 	
+	//Main check
+	if (0 == id->Id())
+		{
+		ERR_PRINTF1(_L("Authentication failed. No identity returned"));
+		delete id;
+		}
+	
+	else
+		{
+		INFO_PRINTF1(_L("Authentication successful."));
+		CleanupStack::PushL(id);
+		//Store the id in the Global Db file		
+		setLastAuthIdL(id->Id());
+		CleanupStack::PopAndDestroy(id);
+		SetTestStepResult(EPass);
+		}
+	}
+	
+void CTAuthenticate::CallAsyncAuthenticateL(RAuthMgrClient& aAuthMgrClient, TDesC& aInputString, TInt aFreshness, TBool aClientSpecificKey, TBool aIsAlias, TBool aIsDefault, const TDesC& aClientMessage)
+	{
+	CAuthExpression* expr = 0;
+	if(!aIsAlias)
+		{
+		if(!aIsDefault)
+			{	
+			expr = CreateAuthExprLC(aInputString);
+			}
+		else
+			{
+			expr = CreateAuthExprLC(KNullDesC());
+			}
+		}
+	else
+		{
+		TRAPD(err,expr = aAuthMgrClient.CreateAuthExpressionL(aInputString));
+		if(err != KErrNone)
+			{
+			SetTestStepError(err);
+			return;
+			}
+		CleanupStack::PushL(expr);
+		}
+	
+	CAuthActive2 active1(aAuthMgrClient, expr, aFreshness, aClientSpecificKey, aIsAlias, aClientMessage);
+	active1.doAuth();		
+	CActiveScheduler::Start();
+		
+	if(expr)
+		{
+		CleanupStack::PopAndDestroy(expr);
+		}
+	
+	 		
+	if(EPass != active1.iResult)
+		{
+		ERR_PRINTF3(_L("Authentication Result error = %d, iResult = %d\n"), active1.iErr, active1.iResult);			
+		SetTestStepError(active1.iErr);
+		}
+	
+	else if ((KErrNone == active1.iErr) && (EPass == active1.iResult))
+		{
+		INFO_PRINTF1(_L("No Authentication Errors."));
+		}
+		
+	else
+		{
+		ERR_PRINTF3(_L("Unexpected Authentication Result. error = %d, iResult = %d\n"), active1.iErr, active1.iResult);
+		}
+		
+	//Main check
+	if (0 == active1.iIdToStore)
+		{
+		ERR_PRINTF1(_L("Authentication failed. No identity returned"));
+		}
+	
+	else
+		{
+		INFO_PRINTF1(_L("Authentication successful."));
+		//Store the id in the Global Db file		
+		setLastAuthIdL(active1.iIdToStore);
+		SetTestStepResult(EPass);
+		}	
+	}
+	
+//---------------------------------------------------------------------------------------------------------------------------------
+
+CTInitCenRep::CTInitCenRep(CTAuthSvrServer& aParent): iParent(aParent)
+/**
+ Constructor
+*/
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KTInitCenRep);
+	}
+
+
+ CTInitCenRep::~CTInitCenRep()
+/**
+ Destructor
+*/
+	{}
+ 	
+TVerdict CTInitCenRep::doTestStepPreambleL()
+/**
+ @return - TVerdict code
+ Override of base class virtual
+*/
+	{
+	//Call the parent class preamble, setting up the file server, etc
+	CTStepActSch::doTestStepPreambleL();
+	return TestStepResult();
+	}
+
+TVerdict CTInitCenRep::doTestStepL()
+/**
+ @return - TVerdict code
+ Override of base class pure virtual
+  
+ */
+	{	
+
+ __UHEAP_MARK;		// Check for memory leaks
+
+	//Initialize the repository
+	CRepository* repository = CRepository::NewL(KUidAuthServerRepository);
+	CleanupStack::PushL(repository);
+	
+	//If default plugin is specified, set it
+	TPtrC defaultPluginFromFile;
+	if(GetStringFromConfig(ConfigSection(),_L("default"), defaultPluginFromFile) != EFalse)
+		{
+		TLex pluginIdString = TLex(defaultPluginFromFile);
+		TPluginId defaultPluginId(0);
+		
+		pluginIdString.Val(defaultPluginId, EHex );
+		SetDefaultPluginIdL(defaultPluginId);
+	 		
+		//Retrieve the value
+		TInt value(0);
+		User::LeaveIfError(repository->Get(KAuthDefaultPlugin, value));
+		CleanupStack::PopAndDestroy(repository);
+		SetTestStepResult(EPass);
+		return TestStepResult();
+		}
+	TInt aliasCount = 0;
+	
+	// Retrieve the value of 'aliasCount' from the ini file, but if it's absent use the default value.
+	// This value is used for validation of cenrep file.
+	if(GetIntFromConfig(ConfigSection(),_L("aliasCount"), aliasCount) != EFalse)
+		{
+		User::LeaveIfError(repository->Set(EAuthAliasesCount, aliasCount));
+		CleanupStack::PopAndDestroy(repository);
+		SetTestStepResult(EPass);
+		return TestStepResult();
+		}
+	
+	User::LeaveIfError(repository->Get(EAuthAliasesCount, aliasCount));
+	// since we will only have four aliases in the cenrep file.
+	__ASSERT_DEBUG(aliasCount == 4, User::Leave(KErrArgument));
+	
+	// Retrieve the value of 'unicode' from the ini file, but if it's absent use the default value.
+	// For unicode tests we need to set the aliases in addition to thier corresponding alias string.
+	TBool isUnicode = EFalse;
+	if(GetBoolFromConfig(ConfigSection(),_L("unicode"), isUnicode) != EFalse)
+		{
+		TBuf<24> alias;
+		TPtrC aliasValue;
+	
+		for(TInt i = 0; i < aliasCount; ++i)
+			{
+			alias.Format(_L("alias%d"), i);
+			if (GetStringFromConfig(ConfigSection(), alias, aliasValue) != EFalse)
+				{
+				User::LeaveIfError(repository->Set(EAuthAliases+i, aliasValue));
+				}
+			}
+		}
+	
+	// for each alias ,set the corresponding alias string expression.
+	TBuf<24> aliasString;
+	TPtrC aliasStringValue;
+	
+	for(TInt i = 0; i < aliasCount; ++i)
+		{
+		aliasString.Format(_L("aliasString%d"), i);
+		if (GetStringFromConfig(ConfigSection(), aliasString, aliasStringValue) != EFalse)
+			{
+			User::LeaveIfError(repository->Set(EAuthAliasesExpr+i, aliasStringValue));
+			}
+		}
+	
+	CleanupStack::PopAndDestroy(repository);
+	SetTestStepResult(EPass);
+	
+__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+	
+TVerdict CTInitCenRep::doTestStepPostambleL()
+/**
+  @return - TVerdict code
+  Override of base class virtual
+ */
+	{
+ 	//Call the parent postamble, releasing the file handle, etc
+ 	CTStepActSch::doTestStepPostambleL();
+	return TestStepResult();
+	}
+
+//====================================================================================================
+
+CTSysTimeUpdate::CTSysTimeUpdate(CTAuthSvrServer& aParent): iParent(aParent)
+/**
+  Constructor
+ */
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KTUpdateSysTime);
+	}
+
+
+CTSysTimeUpdate::~CTSysTimeUpdate()
+/**
+  Destructor
+ */
+	{}
+	
+TVerdict CTSysTimeUpdate::doTestStepPreambleL()
+/**
+  @return - TVerdict code
+  Override of base class virtual
+ */
+	{
+	//Call the parent class preamble, setting up the file server, etc
+	CTStepActSch::doTestStepPreambleL();
+
+	return TestStepResult();
+	}
+
+TVerdict CTSysTimeUpdate::doTestStepL()
+/**
+  @return - TVerdict code
+  Override of base class pure virtual
+  
+ */
+	{	
+	SetTestStepResult(EFail);
+
+__UHEAP_MARK;		// Check for memory leaks
+	
+	//Get the "time" which must be added to the system time.
+	TInt timeVal(0);
+	GetIntFromConfig(ConfigSection(), _L("time"), timeVal);
+
+	TTime currentTime;
+	currentTime.UniversalTime();
+	
+	if(timeVal == 0 )
+		{
+		//Set the secure clock time.
+		RTestUtilSession session;
+		session.Connect();
+		CleanupClosePushL(session);
+		TInt ret = session.SetSecureClock(0);
+		INFO_PRINTF2(_L("Set the secure clock --- %d"), ret);
+		CleanupStack::PopAndDestroy(&session);
+		}
+	else
+		{
+		//Increment the time only if secure clock is present
+		TInt err = currentTime.UniversalTimeSecure();
+		INFO_PRINTF2(_L("Getting the secure clock time returned %d"), err );
+		if(!err)
+			{
+			INFO_PRINTF1(_L("Secure clock found !"));
+			TTimeIntervalSeconds increment(timeVal);
+			currentTime += increment;
+			User::LeaveIfError(User::SetUTCTime(currentTime));
+			}
+		else
+			{
+			INFO_PRINTF1(_L("Secure clock not found !"));
+			}
+	
+		}
+
+
+	SetTestStepResult(EPass);
+
+__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+
+
+TVerdict CTSysTimeUpdate::doTestStepPostambleL()
+/**
+  @return - TVerdict code
+  Override of base class virtual
+ */
+	{
+	//Call the parent postamble, releasing the file handle, etc
+	CTStepActSch::doTestStepPostambleL();
+	return TestStepResult();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/step_base.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,1398 @@
+/*
+* Copyright (c) 2006-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: 
+* CTestStep derived implementation
+*
+*/
+
+
+#include "tAuthSvrStep.h"
+#include <test/testexecutelog.h>
+
+#ifndef __INIPARSER_H__
+	#include <cinidata.h>
+#endif // __INIPARSER_H__
+
+#include <s32file.h>
+#include <f32file.h>
+#include "authrepository.h"
+using namespace AuthServer;
+
+CTAuthSvrStepBase::CTAuthSvrStepBase()
+	{
+	}
+
+TInt CTAuthSvrStepBase::writeToNamedConfig(CIniData* aFile, const TDesC& aSectName,const TDesC& aKeyName,const TPtrC& aResult)
+	{
+	TInt retValue = KErrNone;
+	// Look for a key under a named section, retrieve text value	
+		
+	TInt ret = KErrNone;	//return value from FindVar functions
+	ret=aFile->SetValue(aSectName, aKeyName ,aResult);
+	if(ret != KErrNone)
+		{			
+		if(ret == KErrNotFound)
+			{
+			RDebug::Print(_L("Key not found. Unable to set value in ini file.  SectionName = %S, KeyName = %S, value = %S."),  &aSectName, &aKeyName, &aResult);
+			}
+		else
+			{
+			RDebug::Print(_L("Unable to set value in ini file. SectionName = %S, KeyName = %S, value = %S."), &aSectName, &aKeyName, &aResult);
+			}							
+		retValue = ret;
+		}
+	return retValue;	
+	}
+
+TInt CTAuthSvrStepBase::writeToNamedConfig(CIniData* aFile, const TDesC& aKeyName,const TPtrC& aResult)
+	{
+	
+	TInt retValue = KErrNone;
+	// Look for a key under no named section, retrieve text value	
+	
+	TInt ret = KErrNone;	//return value from FindVar functions
+	ret=aFile->SetValue(aKeyName ,aResult);
+	if(ret != KErrNone)
+		{
+		if(ret == KErrNotFound)
+			{
+			RDebug::Print(_L("Key not found. Unable to set value in ini file. KeyName = %S, value = %S."), &aKeyName, &aResult);
+			}			
+		else
+			{
+			RDebug::Print(_L("Unable to set value in ini file. KeyName = %S, value = %S."), &aKeyName, &aResult);
+			}
+		retValue = ret;
+		}
+	return retValue;	
+	}
+	
+TInt CTAuthSvrStepBase::readFromNamedConfigL(const TDesC& aFileName, const TDesC& aSectName,const TDesC& aKeyName, HBufC*& aResult)
+	{
+	TInt retValue = KErrNone;	
+	CIniData* file;
+	file = CIniData::NewL(aFileName);	
+	CleanupStack::PushL(file);
+	
+	// Look for a key under a named section, retrieve text value	
+	TBool ret=EFalse;	//return value from FindVar functions	
+	TPtrC resultPtr;
+	
+	ret=file->FindVar(aSectName, aKeyName ,resultPtr);	
+	if(ret == EFalse)
+		{		
+		RDebug::Print(_L("Unable to read value in ini file. Filename: %S, SectionName = %S, value = %S."), &aFileName, &aSectName, &aResult);
+		retValue = ret;
+		}
+	else
+		{
+		aResult = resultPtr.AllocL();
+		CleanupStack::PushL(aResult);
+		file->WriteToFileL(); //apply the implementation
+		CleanupStack::Pop(aResult);
+		}
+	CleanupStack::PopAndDestroy(file);
+
+	return retValue;
+	
+	}
+	
+TInt CTAuthSvrStepBase::readFromNamedConfigL(const TDesC& aFileName,const TDesC& aKeyName, HBufC*& aResult)
+	{
+	TInt retValue = KErrNone;	
+	CIniData* file=NULL;
+	file = CIniData::NewL(aFileName);	
+	CleanupStack::PushL(file);
+
+	TBool ret=EFalse;	//return value from FindVar functions
+	
+	TPtrC resultPtr;
+	ret=file->FindVar(aKeyName, resultPtr);
+	if(ret == EFalse)
+		{
+	    RDebug::Print(_L("Unable to read value in ini file. Filename: %S, SectionName = %S, value = %S."), &aFileName, &aKeyName, &aResult);
+		retValue = ret;
+		}
+	else
+		{			
+		aResult = resultPtr.AllocL();
+		CleanupStack::PushL(aResult);
+		file->WriteToFileL(); //apply the implementation
+		CleanupStack::Pop(aResult);
+		}	
+	CleanupStack::PopAndDestroy(file);
+
+	return retValue;
+	}
+
+
+
+void CTAuthSvrStepBase::SetDefaultPluginIdL(TInt aDefault)
+	{
+	//Read the default plugin value from the configuration file.
+	CRepository* repository = CRepository::NewL(KUidAuthServerRepository);
+	CleanupStack::PushL(repository);
+		
+	User::LeaveIfError(repository->Set(KAuthDefaultPlugin, aDefault));
+	
+	//Retrieve from file
+	TInt defaultPlugin(0);
+	User::LeaveIfError(repository->Get(KAuthDefaultPlugin, defaultPlugin));
+	INFO_PRINTF2(_L("Default plugin value set in cenrep to %d"),defaultPlugin);
+	
+	CleanupStack::PopAndDestroy(repository);
+		
+	}	
+/**
+ Read data from testexecute ini file that will be used to initialise the Authentication Server
+*/
+TInt CTAuthSvrStepBase::InitAuthServerFromFileL()
+	{
+
+	//Set a default plugin using an ini file. Read this value from a file if it is specified	
+	//Set this to be the default plugin (update the policy file) if the test case specifies it (in the script's ini file).
+	
+	TPtrC defaultPluginFromFile;
+	
+	TDriveUnit sysDrive (RFs::GetSystemDrive());
+	TDriveName sysDriveName (sysDrive.Name());
+	TBuf<128> fileName (sysDriveName);
+	fileName.Append(KAuthSvrPolicyFile);
+
+	CIniData* policyFile=NULL;
+	TRAPD(r,policyFile=CIniData::NewL(fileName));
+	CleanupStack::PushL(policyFile);
+
+	fileName.Copy(sysDriveName);
+	fileName.Append(KPluginIniFile);
+	
+	CIniData* pluginFile=NULL;
+	TRAP(r,pluginFile=CIniData::NewL(fileName));
+	CleanupStack::PushL(pluginFile);
+
+	fileName.Copy(sysDriveName);
+	fileName.Append(KPlugin3100File);
+	
+	CIniData* p3100File=NULL;
+	TRAP(r,p3100File=CIniData::NewL(fileName));
+	CleanupStack::PushL(p3100File);
+
+	fileName.Copy(sysDriveName);
+	fileName.Append(KPlugin3101File);
+	
+	CIniData* p3101File=NULL;
+	TRAP(r,p3101File=CIniData::NewL(fileName));
+	CleanupStack::PushL(p3101File);
+
+	fileName.Copy(sysDriveName);
+	fileName.Append(KPlugin3102File);
+	CIniData* p3102File=NULL;
+	TRAP(r,p3102File=CIniData::NewL(fileName));
+	CleanupStack::PushL(p3102File);
+
+	fileName.Copy(sysDriveName);
+	fileName.Append(KPlugin3103File);
+
+	CIniData* p3103File=NULL;
+	TRAP(r,p3103File=CIniData::NewL(fileName));
+	CleanupStack::PushL(p3103File);
+
+	fileName.Copy(sysDriveName);
+	fileName.Append(KPlugin3104File);
+	
+	CIniData* p3104File=NULL;
+	TRAP(r,p3104File=CIniData::NewL(fileName));
+	CleanupStack::PushL(p3104File);
+	
+	fileName.Copy(sysDriveName);
+	fileName.Append(KPlugin4100File);
+	
+	CIniData* p4100File=NULL;
+	TRAP(r,p4100File=CIniData::NewL(fileName));
+	CleanupStack::PushL(p4100File);
+	
+	if (GetStringFromConfig(ConfigSection(),_L("defaultPlugin"), defaultPluginFromFile) != EFalse) // the tag 'defaultPlugin' was present
+		{ 
+		//Write this value to the policy file
+		writeToNamedConfig(policyFile, KDefaultPluginTag, defaultPluginFromFile);
+	//	SetDefaultPluginIdL(defaultPluginFromFile);
+		}
+	TInt defaultPluginId(0);
+	if (GetIntFromConfig(ConfigSection(),_L("defaultPluginId"), defaultPluginId) != EFalse) // the tag 'defaultPlugin' was present
+		{ 
+		//Write this value to the policy file
+		//writeToNamedConfig(policyFile, KDefaultPluginTag, defaultPluginFromFile);
+		SetDefaultPluginIdL(defaultPluginId);
+		}
+	//Set whether a plugin supports default data. Read this value from a file if it is specified
+	_LIT(KTrueText,"true");
+	_LIT(KFalseText,"false");
+	
+	TBool iSupportsDefaultDataFromFile(ETrue);	//Default case - the plugin supports default data
+	
+	TBufC<16> trueBuf1(KTrueText);
+	TBufC<16> falseBuf1(KFalseText);
+	TPtr valueToWrite = trueBuf1.Des();			//Default case - the plugin supports default data
+	if (GetBoolFromConfig(ConfigSection(),_L("iSupportsDefaultData"), iSupportsDefaultDataFromFile) != EFalse) // the tag 'isTrusted' was present
+		{
+		//Set the value that will be picked up by the constructor of the plugin		
+		if (iSupportsDefaultDataFromFile)
+			{ valueToWrite = trueBuf1.Des();	}
+		else
+			{ valueToWrite = falseBuf1.Des();	}			
+		writeToNamedConfig(pluginFile, KPluginIniSection, _L("iSupportsDefaultData"), valueToWrite);	
+		writeToNamedConfig(p3100File, KPluginIniSection, _L("iSupportsDefaultData"), valueToWrite);
+		writeToNamedConfig(p3101File, KPluginIniSection, _L("iSupportsDefaultData"), valueToWrite);
+		writeToNamedConfig(p3102File, KPluginIniSection, _L("iSupportsDefaultData"), valueToWrite);
+		writeToNamedConfig(p3103File, KPluginIniSection, _L("iSupportsDefaultData"), valueToWrite);
+		writeToNamedConfig(p4100File, KPluginIniSection, _L("iSupportsDefaultData"), valueToWrite);
+		}
+	else
+		{
+		INFO_PRINTF1(_L("The iSupportsDefaultData tag was not specified in the testexecute ini file."));
+		//Use the default value of TRUE		
+		valueToWrite = trueBuf1.Des();
+		writeToNamedConfig(pluginFile, KPluginIniSection, _L("iSupportsDefaultData"), valueToWrite);
+		writeToNamedConfig(p3100File, KPluginIniSection, _L("iSupportsDefaultData"), valueToWrite);
+		writeToNamedConfig(p3101File, KPluginIniSection, _L("iSupportsDefaultData"), valueToWrite);
+		writeToNamedConfig(p3102File, KPluginIniSection, _L("iSupportsDefaultData"), valueToWrite);
+		writeToNamedConfig(p3103File, KPluginIniSection, _L("iSupportsDefaultData"), valueToWrite);
+		writeToNamedConfig(p4100File, KPluginIniSection, _L("iSupportsDefaultData"), valueToWrite);
+		}
+	
+	//Set a value for the training input that will be used by the CTPinAuthPlugin
+	//in the file AuthSvrPolicy.ini
+	TPtrC userPinInputFromFile;
+	TPtrC supportsDefaultFromFile;
+	TPtrC activeStateFromFile;
+
+	if (GetStringFromConfig(ConfigSection(),_L("Pin11113100InputId"), userPinInputFromFile) != EFalse) // the tag 'Pin11113100Input' was present
+		{ writeToNamedConfig(p3100File, KIdEnteredPinTag, userPinInputFromFile); }	
+	if (GetStringFromConfig(ConfigSection(),_L("Pin11113101InputId"), userPinInputFromFile) != EFalse) // the tag 'Pin11113101Input' was present
+		{ writeToNamedConfig(p3101File, KIdEnteredPinTag, userPinInputFromFile); }
+	if (GetStringFromConfig(ConfigSection(),_L("Pin11113102InputId"), userPinInputFromFile) != EFalse) // the tag 'Pin11113102Input' was present
+		{ writeToNamedConfig(p3102File, KIdEnteredPinTag, userPinInputFromFile); }
+	if (GetStringFromConfig(ConfigSection(),_L("Pin11113103InputId"), userPinInputFromFile) != EFalse) // the tag 'Pin11113103Input' was present
+		{ writeToNamedConfig(p3103File, KIdEnteredPinTag, userPinInputFromFile); }
+	if (GetStringFromConfig(ConfigSection(),_L("Pin11113104InputId"), userPinInputFromFile) != EFalse) // the tag 'Pin11113104Input' was present
+		{ writeToNamedConfig(p3104File, KIdEnteredPinTag, userPinInputFromFile); }
+	if (GetStringFromConfig(ConfigSection(),_L("Pin10234100InputId"), userPinInputFromFile) != EFalse) // the tag 'Pin10234100Input' was present
+		{ writeToNamedConfig(p4100File, KIdEnteredPinTag, userPinInputFromFile); }
+	
+	if (GetStringFromConfig(ConfigSection(),_L("Pin11113100InputTrain"), userPinInputFromFile) != EFalse) // the tag 'Pin11113100Input' was present
+		{ writeToNamedConfig(p3100File, KTrainEnteredPinTag, userPinInputFromFile); }	
+	if (GetStringFromConfig(ConfigSection(),_L("Pin11113101InputTrain"), userPinInputFromFile) != EFalse) // the tag 'Pin11113101Input' was present
+		{ writeToNamedConfig(p3101File, KTrainEnteredPinTag, userPinInputFromFile); }
+	if (GetStringFromConfig(ConfigSection(),_L("Pin11113102InputTrain"), userPinInputFromFile) != EFalse) // the tag 'Pin11113102Input' was present
+		{ writeToNamedConfig(p3102File, KTrainEnteredPinTag, userPinInputFromFile); }
+	if (GetStringFromConfig(ConfigSection(),_L("Pin11113103InputTrain"), userPinInputFromFile) != EFalse) // the tag 'Pin11113103Input' was present
+		{ writeToNamedConfig(p3103File, KTrainEnteredPinTag, userPinInputFromFile); }
+	if (GetStringFromConfig(ConfigSection(),_L("Pin11113104InputTrain"), userPinInputFromFile) != EFalse) // the tag 'Pin11113104Input' was present
+		{ writeToNamedConfig(p3104File, KTrainEnteredPinTag, userPinInputFromFile); }
+	if (GetStringFromConfig(ConfigSection(),_L("Pin10234100InputTrain"), userPinInputFromFile) != EFalse) // the tag 'Pin10234100Input' was present
+		{ writeToNamedConfig(p4100File, KTrainEnteredPinTag, userPinInputFromFile); }
+		
+	if (GetStringFromConfig(ConfigSection(),_L("Pin11113100Default"), supportsDefaultFromFile) != EFalse) // the tag 'Pin11113102Default' was present
+		{ writeToNamedConfig(p3100File, KSupportsDefaultTag, supportsDefaultFromFile); }	
+	if (GetStringFromConfig(ConfigSection(),_L("Pin11113101Default"), supportsDefaultFromFile) != EFalse) // the tag 'Pin11113101Default' was present
+		{ writeToNamedConfig(p3101File, KSupportsDefaultTag, supportsDefaultFromFile); }
+	if (GetStringFromConfig(ConfigSection(),_L("Pin11113102Default"), supportsDefaultFromFile) != EFalse) // the tag 'Pin11113102Default' was present
+		{ writeToNamedConfig(p3102File, KSupportsDefaultTag, supportsDefaultFromFile); }
+	if (GetStringFromConfig(ConfigSection(),_L("Pin11113104Default"), supportsDefaultFromFile) != EFalse) // the tag 'Pin11113104Default' was present
+		{ writeToNamedConfig(p3104File, KSupportsDefaultTag, supportsDefaultFromFile); }
+	if (GetStringFromConfig(ConfigSection(),_L("Pin10234100Default"), supportsDefaultFromFile) != EFalse) // the tag 'Pin10234100Default' was present
+		{ writeToNamedConfig(p4100File, KSupportsDefaultTag, supportsDefaultFromFile); }
+
+	if (GetStringFromConfig(ConfigSection(),_L("Pin11113103Default"), supportsDefaultFromFile) != EFalse) // the tag 'Pin11113103Default' was present
+		{ writeToNamedConfig(p3103File, KSupportsDefaultTag, supportsDefaultFromFile); }
+	else 
+		{ writeToNamedConfig(p3103File, KSupportsDefaultTag, falseBuf1.Des()); }	
+
+	
+	if (GetStringFromConfig(ConfigSection(),_L("Pin11113100Active"), activeStateFromFile) != EFalse) // the tag 'Pin11113100Active' was present
+		{ writeToNamedConfig(p3100File, KActiveStateTag, activeStateFromFile); }	
+	if (GetStringFromConfig(ConfigSection(),_L("Pin11113101Active"), activeStateFromFile) != EFalse) // the tag 'Pin11113101Active' was present
+		{ writeToNamedConfig(p3101File, KActiveStateTag, activeStateFromFile); }
+	if (GetStringFromConfig(ConfigSection(),_L("Pin11113102Active"), activeStateFromFile) != EFalse) // the tag 'Pin11113102Active' was present
+		{ writeToNamedConfig(p3102File, KActiveStateTag, activeStateFromFile); }	
+	if (GetStringFromConfig(ConfigSection(),_L("Pin11113104Active"), activeStateFromFile) != EFalse) // the tag 'Pin11113104Active' was present
+		{ writeToNamedConfig(p3104File, KActiveStateTag, activeStateFromFile); }	
+	if (GetStringFromConfig(ConfigSection(),_L("Pin10234100Active"), activeStateFromFile) != EFalse) // the tag 'Pin10234100Active' was present
+		{ writeToNamedConfig(p4100File, KActiveStateTag, activeStateFromFile); }	
+		
+	if (GetStringFromConfig(ConfigSection(),_L("Pin11113103Active"), activeStateFromFile) != EFalse) // the tag 'Pin11113103Active' was present
+		{ writeToNamedConfig(p3103File, KActiveStateTag, activeStateFromFile); }	
+	else 
+		{ writeToNamedConfig(p3103File, KActiveStateTag, falseBuf1.Des()); }	
+	
+	// ... Other PinPluginDb's can be added
+	//Else the data is set in the 'Defaultdata() function'
+
+	policyFile->WriteToFileL();
+	pluginFile->WriteToFileL();
+	p3100File->WriteToFileL();
+	p3101File->WriteToFileL();
+	p3102File->WriteToFileL();
+	p3103File->WriteToFileL();
+	p3104File->WriteToFileL();
+	p4100File->WriteToFileL();
+
+	CleanupStack::PopAndDestroy(8,policyFile);
+	return KErrNone;
+	}
+
+/**
+ Read plugin input train data from testexecute ini file , when aInitTrainInput
+ is set to true, or plugin input id when set to false.This data will be used to 
+ initialise the Authentication Server.
+  
+*/	
+TInt CTAuthSvrStepBase::InitPluginDataFromFileL(TBool aInitTrainInput)
+	{
+	TDriveUnit sysDrive (RFs::GetSystemDrive());
+	TDriveName sysDriveName (sysDrive.Name());
+	TBuf<128> fileName (sysDriveName);
+	fileName.Append(KPlugin3100File);
+	
+	CIniData* p3100File = NULL;
+	TRAPD(r,p3100File = CIniData::NewL(fileName));
+	if(r != KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &fileName);
+		return r;
+		}
+		
+	CleanupStack::PushL(p3100File);
+	
+	TPtrC userPinInputFromFile;
+	
+	if(aInitTrainInput)
+		{
+		if (GetStringFromConfig(ConfigSection(),_L("PinInputTrain"), userPinInputFromFile) != EFalse) // the tag 'Pin11113100Input' was present
+			{ writeToNamedConfig(p3100File, KTrainEnteredPinTag, userPinInputFromFile); }
+	
+		}
+		
+	else
+		{
+		if (GetStringFromConfig(ConfigSection(),_L("PinInputRetrain"), userPinInputFromFile) != EFalse) // the tag 'Pin11113100Input' was present
+			{ writeToNamedConfig(p3100File, KIdEnteredPinTag, userPinInputFromFile); }
+		
+		}
+		
+	p3100File->WriteToFileL();
+	CleanupStack::PopAndDestroy(p3100File);
+	return KErrNone;
+	}
+
+/**
+ Wait for the server to shut down and so release the authentication database.
+*/
+void CTAuthSvrStepBase::WaitForServerToReleaseDb()
+	{
+	TFullName name;
+	for (;;)
+		{
+		TFindServer find(::KAuthServerName);
+		if (find.Next(name) != KErrNone)
+			{
+			break;
+			}
+
+		// Wait for server to terminate
+		User::After(1 * 1000 * 1000);
+		}
+	}
+	
+/**
+ 	Remove any existing database file.
+*/
+void CTAuthSvrStepBase::RemoveExistingDbL()
+	{
+	WaitForServerToReleaseDb();
+
+	TInt r = KErrNone;
+	
+	TBuf<80> dbName(AuthServer::KDbName);
+	dbName[0] = 'A' + static_cast<TInt>(RFs::GetSystemDrive());				
+	while ((r = iFs.Delete(dbName)) == KErrInUse)
+		{
+		User::After(50000);
+		}
+	if ((KErrPathNotFound == r) || (KErrNotFound == r))  //-12 or -1
+		{
+		INFO_PRINTF1(_L("The database file was absent when I tried to delete it. \
+			Ignoring..."));
+		r = KErrNone;	//Not Important
+		}
+		User::LeaveIfError(r);
+
+	
+		
+	TBuf<80> pinDbName(_L("!:\\private\\102740FC\\plugin.store"));
+	pinDbName[0] = 'A' + static_cast<TInt>(RFs::GetSystemDrive());				
+	while ((r = iFs.Delete(pinDbName)) == KErrInUse)
+		{
+		User::After(50000);
+		}
+	
+	if ((KErrPathNotFound == r) || (KErrNotFound == r))  //-12 or -1
+		{
+		INFO_PRINTF1(_L("The pin plugin database file was absent when I tried to delete it. \
+					Ignoring..."));
+		r = KErrNone;	//Not Important
+		}
+	User::LeaveIfError(r);
+			
+	TBuf<80> pinDbName1(_L("!:\\t_pinplugindlg_in.dat"));
+	pinDbName1[0] = 'A' + static_cast<TInt>(RFs::GetSystemDrive());				
+	while ((r = iFs.Delete(pinDbName1)) == KErrInUse)
+		{
+	User::After(50000);
+		}
+			
+	if ((KErrPathNotFound == r) || (KErrNotFound == r))  //-12 or -1
+		{
+		INFO_PRINTF1(_L("The pin plugin database file (t_pinplugindlg_in.dat)was absent when I tried to delete it. \
+						Ignoring..."));
+		r = KErrNone;	//Not Important
+	}
+	User::LeaveIfError(r);
+		
+			
+	TBuf<80> pinDbName2(_L("!:\\t_pinplugindlg_out.dat"));
+	pinDbName2[0] = 'A' + static_cast<TInt>(RFs::GetSystemDrive());				
+	while ((r = iFs.Delete(pinDbName2)) == KErrInUse)
+		{
+		User::After(50000);
+		}
+				
+	if ((KErrPathNotFound == r) || (KErrNotFound == r))  //-12 or -1
+		{
+		INFO_PRINTF1(_L("The pin plugin database file (t_pinplugindlg_out.dat)was absent when I tried to delete it. \
+						Ignoring..."));
+		r = KErrNone;	//Not Important
+		}
+	User::LeaveIfError(r);
+		
+	
+	//Reset the data 'AllUserID&PinValues' in AuthSvrPolicy.ini & the 
+	// individual plugin Db files
+	TBufC<16> initPinDbBuffer(KInitPinDatabaseValue);
+	TPtr valueToWrite = initPinDbBuffer.Des();
+	
+	TBufC<16> initEnteredPinBuffer(KDefaultInput);
+	TPtr defaultInputValue = initEnteredPinBuffer.Des();
+	
+	TBuf<2> noIdentityVal;
+	_LIT16(KFormatLastAuth,"%u");
+	
+	noIdentityVal.Format(KFormatLastAuth, KErrNone); //generates:
+
+	TDriveUnit sysDrive (RFs::GetSystemDrive());
+	TDriveName sysDriveName (sysDrive.Name());
+	TBuf<128> fileName (sysDriveName);
+	fileName.Append(KAuthSvrPolicyFile);
+	
+	CIniData* policyFile=NULL;
+	TRAP(r,policyFile=CIniData::NewL(fileName));
+	CleanupStack::PushL(policyFile);
+	
+	fileName.Copy(sysDriveName);
+	fileName.Append(KPlugin3100File);
+	
+	CIniData* p3100File=NULL;
+	TRAP(r,p3100File=CIniData::NewL(fileName));
+	CleanupStack::PushL(p3100File);
+	
+	fileName.Copy(sysDriveName);
+	fileName.Append(KPlugin3101File);
+	
+	CIniData* p3101File=NULL;
+	TRAP(r,p3101File=CIniData::NewL(fileName));
+	CleanupStack::PushL(p3101File);
+	
+	fileName.Copy(sysDriveName);
+	fileName.Append(KPlugin3102File);
+	
+	CIniData* p3102File=NULL;
+	TRAP(r,p3102File=CIniData::NewL(fileName));
+	CleanupStack::PushL(p3102File);
+	
+	fileName.Copy(sysDriveName);
+	fileName.Append(KPlugin3103File);
+	
+	CIniData* p3103File=NULL;
+	TRAP(r,p3103File=CIniData::NewL(fileName));
+	CleanupStack::PushL(p3103File);
+	
+	fileName.Copy(sysDriveName);
+	fileName.Append(KPlugin3104File);
+
+	CIniData* p3104File=NULL;
+	TRAP(r,p3104File=CIniData::NewL(fileName));
+	CleanupStack::PushL(p3104File);
+
+	fileName.Copy(sysDriveName);
+	fileName.Append(KPlugin4100File);
+
+	CIniData* p4100File=NULL;
+	TRAP(r,p4100File=CIniData::NewL(fileName));
+	CleanupStack::PushL(p4100File);
+	
+	writeToNamedConfig(policyFile, KLastAuthIdTag, noIdentityVal);
+	writeToNamedConfig(policyFile, KTotalDbTag, valueToWrite);
+	writeToNamedConfig(p3100File, KPinDbTag, valueToWrite); 
+	writeToNamedConfig(p3101File, KPinDbTag, valueToWrite); 
+	writeToNamedConfig(p3102File, KPinDbTag, valueToWrite); 
+	writeToNamedConfig(p3103File, KPinDbTag, valueToWrite); 
+	writeToNamedConfig(p3104File, KPinDbTag, valueToWrite);
+	writeToNamedConfig(p4100File, KPinDbTag, valueToWrite);
+	writeToNamedConfig(p3100File, KIdEnteredPinTag, defaultInputValue);
+	writeToNamedConfig(p3101File, KIdEnteredPinTag, defaultInputValue);
+	writeToNamedConfig(p3102File, KIdEnteredPinTag, defaultInputValue);
+	writeToNamedConfig(p3103File, KIdEnteredPinTag, defaultInputValue);
+	writeToNamedConfig(p3104File, KIdEnteredPinTag, defaultInputValue);
+	writeToNamedConfig(p4100File, KIdEnteredPinTag, defaultInputValue);
+	writeToNamedConfig(p3100File, KTrainEnteredPinTag, defaultInputValue);
+	writeToNamedConfig(p3101File, KTrainEnteredPinTag, defaultInputValue);
+	writeToNamedConfig(p3102File, KTrainEnteredPinTag, defaultInputValue);
+	writeToNamedConfig(p3103File, KTrainEnteredPinTag, defaultInputValue);
+	writeToNamedConfig(p3104File, KTrainEnteredPinTag, defaultInputValue);
+	writeToNamedConfig(p4100File, KTrainEnteredPinTag, defaultInputValue);
+	
+	policyFile->WriteToFileL();
+	p3100File->WriteToFileL();
+	p3101File->WriteToFileL();
+	p3102File->WriteToFileL();
+	p3103File->WriteToFileL();
+	p3104File->WriteToFileL();
+	p4100File->WriteToFileL();
+
+	CleanupStack::PopAndDestroy(7,policyFile);
+	}
+	
+/**
+ 	Utility function coverting HexString to Integer
+*/
+TInt CTAuthSvrStepBase::HexString2Num(const TDesC8& aStr)
+  {
+  	TInt data = 0;
+	TInt char2hex = 0;
+	TInt c = 0;
+	for (TInt i = 0 ; i < aStr.Length() ; ++i)
+	  {
+	  c = aStr[i];
+	  
+	  if (c < 'A')
+	    {
+	    char2hex='0';
+	    }
+	  else if (c < 'a')
+	    {
+	    char2hex='A';
+	    }
+	  else
+	    {
+	    char2hex='a';
+	    }
+	  data = data << 4;      
+	  data += aStr[i]-char2hex; 
+	  }
+	return data;
+  }
+
+
+/**
+ Utility function to Update the Global Db by removing the training data 
+ that is associated with a given Id. The removal will not happen if 
+ the identity is not present in this list, however, this is not expected
+ Called at the same time as RAuthMgrClient::RemoveIdentityL(aId)
+ Returns KErrNone, or some error code
+*/
+TInt CTAuthSvrStepBase::RemoveIdFromGlobalDbL (TUint32 aId)
+	{
+	
+	TBuf8<500> totalDbFileContents, totalDbFileContents2;
+	TInt retValue = KErrNone;
+	CIniData* file=NULL;
+	
+	TDriveUnit sysDrive (RFs::GetSystemDrive());
+	TDriveName sysDriveName (sysDrive.Name());
+	TBuf<128> fileName (sysDriveName);
+	fileName.Append(KAuthSvrPolicyFile);
+	
+	TRAPD(r,file=CIniData::NewL(fileName));	
+	if(r!=KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &fileName);
+		retValue = r;
+		}	
+	else
+		{
+		// Look for a key under a named section, retrieve text value	
+		TPtrC result;		
+		TBool ret=EFalse;	//return value from FindVar functions		
+				
+		ret=file->FindVar(KPluginIniSection, KTotalDbTag,result);
+		if(!ret)
+			{
+			RDebug::Print(_L("Unable to find the %S key in the file %S."), &KTotalDbTag, &fileName);
+			retValue = KErrNotFound;		
+			}
+		else
+			{
+			//Copy the data from the named section in the file, and see if any previous user has used this input string
+			totalDbFileContents.Copy(result);
+			
+			//Format the searchstring as defined in the file so that it starts with a ',' and ends with a ':'.
+			_LIT8(KFormatValue3, ",%d:");
+			TBuf8<20> searchString;
+			searchString.Format(KFormatValue3, aId);
+			TInt searchResult;			
+			searchResult = totalDbFileContents.Find(searchString);
+			
+			if (searchResult)	// the tag was found
+			{				
+				//Extract the rest of the pinFileContents string before the start of the PIN (before the ':')
+				totalDbFileContents2 = totalDbFileContents.Left(searchResult);
+				
+				//The userId starts at the first ',' from the end of pinFileContents2, 
+				// where p2 is the portion of p1 to the left of searchResult
+				TInt userIdStartPos = totalDbFileContents2.LocateReverse(',');
+				
+				//Find where the PIN ends
+				TInt PinEndPos = searchResult + searchString.Length() - 1;
+								
+				//remove the found (total) string from the list
+				totalDbFileContents.Delete(userIdStartPos, (PinEndPos - userIdStartPos) );
+				
+				//Update the file
+				//For the purpose of writing the data to a file, i'll create a 16-bit version of pinFileContents
+					TInt ret2 = 0;
+					HBufC* buf;
+					buf = HBufC::NewL(500);	
+					buf->Des().Copy(totalDbFileContents);
+								
+				ret2 = file->SetValue(KPluginIniSection, KTotalDbTag, *buf);
+				
+				TRAPD(r,file->WriteToFileL());
+				if (KErrNone != r)
+					{
+					RDebug::Print(_L("Error occurred while writing to the file. Filename = %S, KeyName = AllUserID&PinValues, value = %S."), &fileName, buf);
+					}
+				delete buf;		//Memory cleanup. This string was only needed for the above Print function
+				
+				if (KErrNone !=ret2)
+					{
+					RDebug::Print(_L("Error occurred in WriteToFileL(). Error = %d. Filename= %S"), ret2, &fileName);						
+					retValue = ret2;
+					}
+				else
+					{
+					retValue = KErrNone;		
+					}				
+				}
+				else // The identity was not found in the Db. 											
+				{				
+				RDebug::Print(_L("RemoveIdFromGlobalDb: The specified ID was not found in the totalDbFile"));
+				retValue = KErrAuthServIdentityNotFound;									
+				}
+			}//End check for key&section search in file
+		delete file;
+		}//End check for safe file access
+	return retValue;
+	}
+
+/**
+Returns EPass or EFail
+*/
+TVerdict CTAuthSvrStepBase::checkAndSetUserNameL(AuthServer::RAuthClient& authClient1, TInt idPosition)
+	{	
+	TBool retValue = ETrue;
+	TPtrC initNameValue;
+	TPtrC finalNameValue;
+	//Check that the user has specified the initial and later userNames for the identity 
+	
+	if( (GetStringFromConfig(ConfigSection(),_L("finalUserName"), finalNameValue)) 
+			!= EFalse) // the tags 'initUserName' and finalUserName are present
+		{
+		//Get a list of all the present identities
+		RIdentityIdArray ids;
+		authClient1.IdentitiesL(ids);
+		CleanupClosePushL(ids);
+		
+		//Check the userName of particular identity that was mentioned in the function call
+		HBufC* idName = authClient1.IdentityStringL(ids[idPosition]);
+		CleanupStack::PushL(idName);
+		
+		//Change the userName to what is desired
+		authClient1.SetIdentityStringL(ids[idPosition], finalNameValue);
+		
+		//Compare to the expected final value of the userName
+		
+		HBufC* idNameFinal = authClient1.IdentityStringL(ids[idPosition]);
+		
+		if (idNameFinal->Compare(finalNameValue) != 0)
+			{
+			INFO_PRINTF4(_L("Id %d has the Final name %S instead of %S"), idPosition, idNameFinal, &finalNameValue);
+			retValue = EFalse;
+			}
+		else
+			{
+			INFO_PRINTF4(_L("Id %d had the initial name %S and the Final name %S"), idPosition, idName, idNameFinal);	
+			retValue = ETrue;
+			}		
+		delete idNameFinal;			
+		CleanupStack::PopAndDestroy(2, &ids);	//idName, ids
+		}
+	else
+		{
+		INFO_PRINTF1(_L("finalUserName tag is absent in the script file"));		
+		}
+		
+	if (retValue)
+		{SetTestStepResult(EPass);}
+	else
+		{SetTestStepResult(EFail);}	
+	
+	return TestStepResult();
+	}
+
+
+//
+void CTAuthSvrStepBase::CheckSpecifiedPluginStatusL ()
+	{
+	//If the pluginId is quoted in the ini file, check it's training status
+	TInt plugin1IdValue = 0;
+	if (GetHexFromConfig(ConfigSection(),_L("plugin1Id"), plugin1IdValue) != EFalse) // the tag 'pluginId1' was present
+		{
+		AuthServer::RAuthClient ac;
+		User::LeaveIfError(ac.Connect());
+		CleanupClosePushL(ac);
+		// Get the status of the specified plugin
+		TInt plugin1StatusValue;
+		if (GetIntFromConfig(ConfigSection(),_L("plugin1Status"), plugin1StatusValue) != EFalse) 
+			{
+			TAuthTrainingStatus plugin1Status;// = plugin1StatusValue;
+			switch (plugin1StatusValue)
+				{
+				case EAuthUntrained:
+					plugin1Status = EAuthUntrained;
+					break;
+				case EAuthTrained:
+					plugin1Status = EAuthTrained;
+					break;
+				case EAuthFullyTrained:
+					plugin1Status = EAuthFullyTrained;
+					break;
+				default:
+					ERR_PRINTF2(_L("Error receiving a value of the pluginIdStatus. Value in file : %d "), plugin1StatusValue);
+					plugin1Status = EAuthUntrained;
+					break;
+				}				
+			
+			
+			RPluginDescriptions pluginList1;
+			TCleanupItem cleanup(CleanupEComArray, &pluginList1);
+			CleanupStack::PushL(cleanup);				
+			ac.PluginsL(pluginList1);
+						
+			TInt numPlugins = pluginList1.Count();
+			for(TInt i = 0; i < numPlugins; i++)
+				{
+				TInt presentPluginIdVal = pluginList1[i]->Id();
+								
+				if (presentPluginIdVal == plugin1IdValue)
+					{
+					TInt presentPluginStatus = pluginList1[i]->TrainingStatus();
+					if (presentPluginStatus == plugin1Status)
+						{
+						INFO_PRINTF3(_L("PluginId=%x has the expected status =%i"), presentPluginIdVal, presentPluginStatus);
+						SetTestStepResult(EPass);
+						}
+					else
+						{
+						ERR_PRINTF4(_L("PluginId=%x has status =%i, instead of %i"), 
+							presentPluginIdVal, presentPluginStatus, plugin1Status);
+						SetTestStepResult(EFail);
+						}
+					break;	//Don't check any other plugins	
+					}
+				else
+					{
+					SetTestStepResult(EFail);	//After this, check others
+					}
+				}
+			if(numPlugins == 0) 				
+				{
+				ERR_PRINTF1(_L("No plugins in the system"));
+				SetTestStepResult(EFail);					
+				}
+				
+			if (TestStepResult() == EFail)
+				{
+				ERR_PRINTF3(_L("PluginId=%x does not have the expected status %i"), 
+					plugin1IdValue, plugin1StatusValue);
+				}
+				
+			CleanupStack::PopAndDestroy(&pluginList1); //infoArray, results in a call to CleanupEComArray
+			}
+		else
+			{
+			INFO_PRINTF1(_L("plugin1Status was not specified in the ini file"));
+			}
+		CleanupStack::PopAndDestroy(&ac);	// ac	
+		}
+	else
+		{
+		INFO_PRINTF1(_L("plugin1Id was not specified in the ini file"));	
+		}
+	}
+
+
+
+enum TOp
+    {
+    ENone =0,
+    EOr = 1,
+    EAnd = 2
+    };
+    
+enum TState
+    {
+    EFirstToken  = 0,
+    ESecondToken = 1,
+    EThirdToken  = 2,
+    ENumTokens = 3
+    };
+    
+AuthServer::CAuthExpression* CTAuthSvrStepBase::CreateAuthExprLC (const TDesC& aString)
+    {
+   
+    TLex  input(aString);
+    
+    _LIT(KKnowledge,"K");    
+    _LIT(KBiometric,"B");
+    _LIT(KToken,"T");  
+    _LIT(KDefault,"D");
+    _LIT(KAnd,"&");
+    _LIT(KOr,"|");
+    _LIT(KUnexpected, "Unexpected '%S' token while parsing authexpression");
+    
+    AuthServer::CAuthExpression* result = 0;
+    TState state = EFirstToken;
+    TOp op = ENone;
+    TBool err;
+    TPluginId plugin = 0;
+    
+    if (aString == KNullDesC)
+       	{
+       	result = AuthExpr();
+       	CleanupStack::PushL(result);
+       	return result;
+       	}
+    for (TPtrC token = input.NextToken(); token.Size() > 0 ; 
+         token.Set(input.NextToken()))
+        { 
+        AuthServer::CAuthExpression* newExpr = 0; 
+        INFO_PRINTF3(_L("Token %S Size = %d"), &token, token.Size()); 
+        if (token.Length() > 1)
+            {
+            TLex lexer(token);
+            if (lexer.Val(plugin,EHex) == KErrNone)
+                {
+                err = (state != EFirstToken && state != EThirdToken );
+                if (err) ERR_PRINTF2(KUnexpected, &token);
+                newExpr = AuthExpr(plugin);
+                }
+            else
+                {
+                err = true;
+                ERR_PRINTF2(KUnexpected, &token);
+                }
+            }
+        else if (token.CompareF(KKnowledge) == 0)
+            {
+            err = (state != EFirstToken && state != EThirdToken );
+            if (err) ERR_PRINTF2(KUnexpected, &token);
+            newExpr = AuthExpr(EAuthKnowledge);
+            }
+        else if (token.CompareF(KBiometric) == 0)
+            {   
+            err = (state != EFirstToken && state != EThirdToken );
+            if (err) ERR_PRINTF2(KUnexpected, &token);
+            newExpr = AuthExpr(EAuthBiometric);    
+            }
+        else if (token.CompareF(KToken) == 0)
+            {
+            err = (state != EFirstToken && state != EThirdToken );
+            if (err) ERR_PRINTF2(KUnexpected, &token);
+            newExpr = AuthExpr(EAuthToken);
+            }
+        else if (token.CompareF(KDefault) == 0)
+            {
+            err = (state != EFirstToken && state != EThirdToken );
+            if (err) ERR_PRINTF2(KUnexpected, &token);
+            newExpr = AuthExpr(EAuthDefault);
+            }
+        else if (token.CompareF(KAnd) == 0)
+            {
+            err = state != ESecondToken;
+            if (err) ERR_PRINTF2(KUnexpected, &token);
+            op = EAnd;
+            }
+        else if (token.CompareF(KOr) == 0)
+            {
+            err = state != ESecondToken;
+            if (err) ERR_PRINTF2(KUnexpected, &token);
+            op = EOr;
+            }
+        else 
+            {
+            err = true;
+            ERR_PRINTF2(_L("Unknown '%S' token while parsing authexpression"), &token);
+            }
+            
+        if (err) 
+            {
+            User::Leave(KErrGeneral);
+            }
+        switch (state)    
+            {
+            case EFirstToken:
+                if ( result == 0 && op == ENone)
+                    {
+                    result = newExpr;
+                    CleanupStack::PushL(result);
+                    }
+                else 
+                    {
+                    //err?
+                    }
+                state = ESecondToken;
+                break;
+            case ESecondToken:
+                state = EThirdToken;
+                break;
+            case EThirdToken:
+                if (op == EOr)
+                    {
+                    CleanupStack::Pop(result);
+                    result =  AuthOr(result, newExpr);
+                    CleanupStack::PushL(result);
+    
+                    }
+                else
+                    {
+                    CleanupStack::Pop(result);
+                    result =  AuthAnd(result, newExpr);
+                    CleanupStack::PushL(result);
+                    }
+                op = ENone;
+                state = ESecondToken;
+            }
+        }
+    if (state == EThirdToken)
+        {
+        ERR_PRINTF1(_L("Unexpected end of stream while parsing authexpression"));
+        User::Leave(KErrGeneral);
+        }
+    return result;
+    }
+    
+void CTAuthSvrStepBase::CheckSpecifiedPluginStatusConnectedL (AuthServer::RAuthClient& ac)
+	{
+	//If the pluginId is quoted in the ini file, check it's training status
+	TInt plugin1IdValue = 0;
+	if (GetHexFromConfig(ConfigSection(),_L("plugin1Id"), plugin1IdValue) != EFalse) // the tag 'pluginId1' was present
+		{
+		// Get the status of the specified plugin
+		TInt plugin1StatusValue = 0;
+		if (GetIntFromConfig(ConfigSection(),_L("plugin1Status"), plugin1StatusValue) != EFalse) 
+			{
+			TAuthTrainingStatus plugin1Status;// = plugin1StatusValue;
+			switch (plugin1StatusValue)
+				{
+				case EAuthUntrained:
+					plugin1Status = EAuthUntrained;
+					break;
+				case EAuthTrained:
+					plugin1Status = EAuthTrained;
+					break;
+				case EAuthFullyTrained:
+					plugin1Status = EAuthFullyTrained;
+					break;
+				default:
+					ERR_PRINTF2(_L("Error receiving a value of the pluginIdStatus. Value in file : %d "), plugin1StatusValue);
+					plugin1Status = EAuthUntrained;
+					break;
+				}				
+			
+			
+			RPluginDescriptions pluginList1;
+			TCleanupItem cleanup(CleanupEComArray, &pluginList1);
+			CleanupStack::PushL(cleanup);						
+			ac.PluginsL(pluginList1);
+						
+			TInt numPlugins = pluginList1.Count();
+			for(TInt i = 0; i < numPlugins; i++)
+				{
+				TInt presentPluginIdVal = pluginList1[i]->Id();
+								
+				if (presentPluginIdVal == plugin1IdValue)
+					{
+					TInt presentPluginStatus = pluginList1[i]->TrainingStatus();
+					if (presentPluginStatus == plugin1Status)
+						{
+						INFO_PRINTF3(_L("PluginId=%x has the expected status =%i"), presentPluginIdVal, presentPluginStatus);
+						SetTestStepResult(EPass);
+						}
+					else
+						{
+						ERR_PRINTF4(_L("PluginId=%x has status =%i, instead of %i"), 
+							presentPluginIdVal, presentPluginStatus, plugin1Status);
+						SetTestStepResult(EFail);
+						}
+					break;	//Don't check any other plugins	
+					}
+				else
+					{
+					SetTestStepResult(EFail);	//After this, check others
+					}
+				}
+			if(numPlugins == 0) 				
+				{
+				ERR_PRINTF1(_L("No plugins in the system"));
+				SetTestStepResult(EFail);					
+				}
+				
+			if (TestStepResult() == EFail)
+				{
+				ERR_PRINTF3(_L("PluginId=%x does not have the expected status %i"), 
+					plugin1IdValue, plugin1StatusValue);
+				}
+				
+			CleanupStack::PopAndDestroy(&pluginList1); //infoArray, results in a call to CleanupEComArray
+			}
+		else
+			{
+			INFO_PRINTF1(_L("plugin1Status was not specified in the ini file"));
+			}		
+		}
+	else
+		{
+		INFO_PRINTF1(_L("plugin1Id was not specified in the ini file"));	
+		}	
+	}
+
+TBool CTAuthSvrStepBase::CheckPluginStatusAllL (AuthServer::RAuthClient& ac)
+	{
+	TBool retValue = EFalse;
+	
+	//Get a list of all the present plugins
+	RPluginDescriptions pluginList1;
+	TCleanupItem cleanup(CleanupEComArray, &pluginList1);
+	CleanupStack::PushL(cleanup);	
+	ac.PluginsL(pluginList1);
+	
+	//Get a list of all the present identities
+	RIdentityIdArray ids;
+	ac.IdentitiesL(ids);
+	CleanupClosePushL(ids);
+	TInt actualNumIdsFromServer = ids.Count();
+	CleanupStack::PopAndDestroy(&ids);
+	
+	//Get the number of identities that has been trained for each of my 3 plugins
+	TInt numIdsTrained;
+
+	TInt numPlugins = pluginList1.Count();
+	for(TInt i = 0; i < numPlugins; i++)
+		{
+		TInt presentPluginStatus = pluginList1[i]->TrainingStatus();
+		TInt presentPluginId = pluginList1[i]->Id();
+		TInt expectedStatus = 0;
+		
+		TDriveUnit sysDrive (RFs::GetSystemDrive());
+		TDriveName sysDriveName (sysDrive.Name());
+		TBuf<128> fileName (sysDriveName);
+		
+		switch (presentPluginId)
+			{
+			case 0x11113100:
+				{
+				fileName.Append(KPlugin3100File);
+				numIdsTrained = GetNumIdsFromPluginDbL(fileName);
+				break;
+				}
+			
+			case 0x11113101:
+				{
+				fileName.Append(KPlugin3101File);
+				numIdsTrained = GetNumIdsFromPluginDbL(fileName);
+				break;
+				}
+				
+			case 0x11113102:
+				{
+				fileName.Append(KPlugin3102File);
+				numIdsTrained = GetNumIdsFromPluginDbL(fileName);
+				break;
+				}
+				
+			case 0x10234100:
+				{
+				fileName.Append(KPlugin4100File);
+				numIdsTrained = GetNumIdsFromPluginDbL(fileName);
+				break;
+				}
+				
+			case 0x200032E5:
+				{
+				numIdsTrained = actualNumIdsFromServer - 1;
+				}
+				
+			default:				
+				numIdsTrained = KErrNotFound;
+				break;
+			}
+		if (KErrNotFound != numIdsTrained)
+			{
+			//We are only considering the 3 specified Ids
+			if (0 == numIdsTrained)
+				{ expectedStatus = EAuthUntrained; }
+			else if(actualNumIdsFromServer == numIdsTrained)
+				{ expectedStatus = EAuthFullyTrained; }
+			else if (actualNumIdsFromServer > numIdsTrained)
+				{ expectedStatus = EAuthTrained; }
+			else 
+				{
+				ERR_PRINTF2(_L("Error!! PluginId=%x has an unexpected Number of Ids in the Database = %i"), 
+						numIdsTrained);
+				ERR_PRINTF2(_L("Actual number of Ids registered by the authServer = %i"), 
+						actualNumIdsFromServer);				
+				}
+			
+			//Final check
+			if (presentPluginStatus != expectedStatus)
+				{
+				ERR_PRINTF4(_L("Present PluginStatus of plugin %x is not as expected. It is %i instead of %i"), 
+							presentPluginId, presentPluginStatus, expectedStatus);
+				retValue = EFalse;
+				}
+			else
+				{
+				retValue = ETrue;	
+				}
+			}
+		}//End of for loop
+	CleanupStack::PopAndDestroy(&pluginList1); //infoArray, results in a call to CleanupEComArray
+	return retValue;	
+	}
+
+TInt CTAuthSvrStepBase::GetNumIdsFromPluginDbL(const TDesC& aFileName)
+	{
+	TBuf8<500> pluginDbFileContents;
+	TInt numIds = 0;	
+	CIniData* file=NULL;
+	file = CIniData::NewL(aFileName);	
+	CleanupStack::PushL(file);
+	
+	// Look for a key under a named section, retrieve text value	
+	TBool ret=EFalse;	//return value from FindVar functions	
+	TPtrC resultPtr;
+	
+	ret=file->FindVar(KPluginIniSection, KPinDbTag, resultPtr);	
+	if(ret == EFalse)
+		{		
+		RDebug::Print(_L("Unable to read value in ini file. Filename: %S, SectionName = %S, value = %S."), &aFileName, &KPluginIniSection, &KPinDbTag);
+		numIds = ret;
+		}
+	else
+		{
+		pluginDbFileContents.Copy(resultPtr);
+		_LIT8(KMarker, ":");
+		TBuf8<3> searchString;		
+		searchString = KMarker;
+		
+		TInt dBLen = pluginDbFileContents.Length();
+		for (TInt i = 0; i < dBLen; i++)
+			{
+			if (pluginDbFileContents[i] == ':')
+				{
+				numIds++;
+				}
+			}//End for
+		}//End check
+	CleanupStack::PopAndDestroy(file);
+	return numIds;
+	}
+
+void CTAuthSvrStepBase::CreatePinPluginInputFileL(TPinPluginDialogOperation aOperation, TPinValue aPinValue)
+	{
+	RFileWriteStream stream;
+	RFs fs;
+	User::LeaveIfError(fs.Connect());
+	TInt err = stream.Replace(fs, KInputFile, EFileWrite | EFileShareExclusive);
+	User::LeaveIfError(err);
+	stream.PushL();
+	
+	MStreamBuf* streamBuf = stream.Sink();
+	streamBuf->SeekL(MStreamBuf::EWrite, EStreamEnd);
+	stream.WriteInt32L(aOperation);
+	stream.WriteInt32L(aPinValue.Length());
+	stream.WriteL(aPinValue);
+	stream.WriteInt32L(0);
+	stream.WriteInt32L(4);
+	TPinPluginDialogResult cmdResult = EOk;
+	stream.WriteInt32L(cmdResult);
+	aOperation = EPinPluginInfo;
+	stream.WriteInt32L(aOperation);
+	TPinPluginDialogResult cmdFinalResult = EOk;
+	stream.WriteInt32L(cmdFinalResult);
+	stream.WriteInt32L(2);
+	stream.CommitL();
+	CleanupStack::PopAndDestroy(); // stream
+	
+	}
+
+TPinValue CTAuthSvrStepBase::GetPinFromOutputFileL()
+	{
+	RFileReadStream stream;
+	RFs fs;
+	TPinValue pinValue;
+	
+	User::LeaveIfError(fs.Connect());
+	TInt err = stream.Open(fs, KOutputFile, EFileRead | EFileShareExclusive);
+	if(err == KErrNotFound)
+		{
+		pinValue.Copy(_L("11111"));
+		return pinValue;
+		}
+	
+	User::LeaveIfError(err);
+	stream.PushL();
+
+	MStreamBuf* streamBuf = stream.Source();
+	
+	stream.ReadInt32L();
+	TInt pinValueLength = stream.ReadInt32L();
+	HBufC8* pinValueBuf = HBufC8::NewMaxLC(pinValueLength);
+	TPtr8 pinValuePtr(pinValueBuf->Des());
+	stream.ReadL(pinValuePtr, pinValueLength);
+	pinValue.Copy(pinValuePtr);
+	
+	CleanupStack::PopAndDestroy(2, &stream);	
+
+	return pinValue;
+	}
+
+AuthServer::TIdentityId CTAuthSvrStepBase::getLastAuthId()
+/**
+	Retrieve the last Identity that was authenticated from the Global Db file
+	@return		The last authenticated Identity
+ */
+	{
+	TIdentityId lastId;
+	lastId = 0;
+		
+	HBufC* valueFromFile;
+	TInt ret = 0;
+	TInt err = 0;
+	
+	TDriveUnit sysDrive (RFs::GetSystemDrive());
+	TBuf<128> authSvrPolicyFile (sysDrive.Name());
+	authSvrPolicyFile.Append(KAuthSvrPolicyFile);
+	
+	TRAP(err, ret = readFromNamedConfigL(authSvrPolicyFile, KLastAuthIdTag, valueFromFile));
+	
+	if (KErrNotFound == ret)
+		{		
+		ERR_PRINTF3(_L("Error while getting last AuthId. Tag %S not found in %S file"), KLastAuthIdTag, &authSvrPolicyFile);
+		}
+	else
+		{		
+		TLex input (*valueFromFile);
+		TRadix aRadix = EDecimal;
+		input.Val(lastId, aRadix);
+		RDebug::Print(_L("UserId that is retrieved from file = %u"), lastId);
+		}
+		
+	delete valueFromFile;		
+	
+	return lastId;
+	}
+	
+	
+void CTAuthSvrStepBase::ClientMessage(TBool aIsMessage, const TDesC& aDisplayString)
+	{
+	TDriveUnit sysDrive (RFs::GetSystemDrive());
+	TDriveName sysDriveName (sysDrive.Name());
+	TBuf<128> fileName (sysDriveName);
+	
+	fileName.Append(KAuthSvrPolicyFile);
+	CIniData* file=NULL;
+	TRAPD(r,file=CIniData::NewL(fileName));	
+	CleanupStack::PushL(file);
+	if(r!=KErrNone)
+	{
+	RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &fileName);
+	}	
+	
+	if(aIsMessage)
+		{
+		TBool ret=file->SetValue(KPluginIniSection, KDisplayMessage, aDisplayString);
+		file->WriteToFileL();
+		}
+	else
+		{
+		TBool ret=file->SetValue(KPluginIniSection, KDisplayMessage, KNullDesC());	
+		}
+	file->WriteToFileL();
+	CleanupStack::PopAndDestroy(file);
+	}
+
+//Implementation of member functions for CTStepActSch
+
+TVerdict CTStepActSch::doTestStepPreambleL()
+/**
+	Override CTestStep by allocating an active scheduler which is available to the subclass.	
+	@return					This test step's result, which isn't actually used by ThreadStepExecutionL.
+ */
+	{
+	CTAuthSvrStepBase::doTestStepPreambleL();
+	iActSchd = new(ELeave) CActiveScheduler;
+	return TestStepResult();
+	}
+
+
+TVerdict CTStepActSch::doTestStepPostambleL()
+/**
+	Override CTestStep by deleting the active scheduler which allocated in doTestStepPreambleL.
+	@return					This test step's result, which isn't actually used by ThreadStepExecutionL.
+ */
+	{
+	CTAuthSvrStepBase::doTestStepPostambleL();
+	delete iActSchd;
+	return TestStepResult();
+	}
+
+/**
+ Utility clean up function used when working with locally declared arrays
+ */
+void CleanupEComArray(TAny* aArrayOfPlugins)
+	{	
+	(static_cast<RImplInfoPtrArray*> (aArrayOfPlugins))->ResetAndDestroy();
+	(static_cast<RImplInfoPtrArray*> (aArrayOfPlugins))->Close();	
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/step_clientsidsupport.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,294 @@
+/*
+* Copyright (c) 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 <bautils.h>
+#include <s32file.h>
+#include <test/testexecutelog.h>
+
+#include "authserver/authmgrclient.h"
+#include "authserver/authclient.h"
+#include "authserver/identity.h"
+#include "tAuthSvrStep.h"
+
+using namespace AuthServer;
+
+class CActiveObj : public CActive
+    {
+    public:
+    CActiveObj(RAuthMgrClient& aClient, CAuthExpression* aExpression,
+				 TInt aFresh, TBool aClientSpecific, TUid aClientSid, TBool aIdentityString, TPluginId aPluginId, TIdentityId aId) : 
+         CActive(EPriorityNormal),
+         iClient(aClient),
+		 iResult(EFail),
+         iRunCount(0),
+         iAe(aExpression),
+         iFresh(aFresh),
+         iClientSpecific(aClientSpecific),
+         iWithString(aIdentityString),
+         iPluginId(aPluginId),
+         iId(aId),
+         iMode(-1)
+        {
+        CActiveScheduler::Add(this);
+        iClientSid = aClientSid;
+        }
+   
+    void Authenticate() 
+        {
+        SetActive();		
+		TRequestStatus* status = &iStatus;		    
+		User::RequestComplete(status, KErrNone);
+		iRunCount = 0;
+		iMode = 0;
+        }
+        
+   void Retrain() 
+        {
+        SetActive();		
+		TRequestStatus* status = &iStatus;		    
+		User::RequestComplete(status, KErrNone);
+		iRunCount = 0;
+		iMode = 1;
+        }
+        
+    void DoCancel() 
+        {
+        }
+        
+    TInt RunError(TInt aError)
+    	{
+    	iErr = aError;
+	   	CActiveScheduler::Stop();
+	   	return KErrNone;
+    	}
+        
+    void RunL() 
+        {
+        switch (iRunCount)
+		  {
+		  case 0:
+		  
+		  switch (iMode)
+			  {
+			  
+			  case 0:
+				iClient.AuthenticateL(*iAe, iFresh, iClientSpecific, iClientSid, EFalse, KNullDesC(), iIdentity, iStatus);
+			    break;
+			    
+			  case 1:
+				iClient.TrainPlugin(iId, iPluginId, iStatus);
+				break;
+			  }
+			  
+			SetActive();
+			break;
+			
+		  case 1:
+   		  
+   		  	iResult = iStatus.Int() == KErrNone ? EPass : EFail;
+            iErr = iStatus.Int();
+			CActiveScheduler::Stop();
+			break;
+			
+     	  default:
+			iResult = EFail;
+			CActiveScheduler::Stop();
+			 
+		    }
+		  ++iRunCount;
+          }
+          
+    ~CActiveObj()
+		{
+		
+		}
+		
+    RAuthMgrClient& iClient;
+	TVerdict iResult;
+	TInt iRunCount;
+	CAuthExpression* iAe;
+	CIdentity* iIdentity;
+    TInt iErr;
+    TInt iFresh;
+    TBool iClientSpecific;
+    TBool iWithString;
+    TPluginId iPluginId;
+    TIdentityId iId;
+    TInt iMode;
+    TUid iClientSid;
+    };
+    
+ 
+ CTStepClientSidSupport::CTStepClientSidSupport(CTAuthSvrServer& aParent): iParent(aParent)
+ 	{
+ 	SetTestStepName(KTStepClientSidSupportCheck);
+ 	}
+ 	
+ TVerdict CTStepClientSidSupport::doTestStepPreambleL()
+ 	{
+ 	SetTestStepResult(EFail);
+ 	
+ 	CTStepActSch::doTestStepPreambleL();
+ 	 	
+ 	if(GetHexFromConfig(ConfigSection(),_L("plugin1Id"), iPluginId) == EFalse)
+		{
+		INFO_PRINTF1(_L("Plugin Id not specified in the ini file"));
+		return TestStepResult();
+		}
+
+	if(GetBoolFromConfig(ConfigSection(),_L("clientSpecificKey"), iClientSpecificKey) == EFalse)
+	 	{
+	 	INFO_PRINTF1(_L("Client Specific Key not specified in the ini file"));
+		return TestStepResult();
+	 	} 
+		 	
+	if(GetBoolFromConfig(ConfigSection(),_L("withString"), iWithString) == EFalse)
+	 	{
+	 	INFO_PRINTF1(_L("Identity String not specified in the ini file"));
+		return TestStepResult();
+	 	}
+	 	
+	TInt clientSid = 0;
+   	if(GetHexFromConfig(ConfigSection(),_L("clientSid"), clientSid) == EFalse)
+		{
+		INFO_PRINTF1(_L("Client Sid not specified in the ini file"));
+		return TestStepResult();
+		}
+	
+	iClientSid.iUid = clientSid;
+ 	
+	 	
+	SetTestStepResult(EPass);
+	return TestStepResult();
+ 	}
+  
+ TVerdict CTStepClientSidSupport::doTestStepL()
+	{
+    SetTestStepResult(EFail);
+    
+    InitAuthServerFromFileL();	// Set things like 'iSupportsDefaultData' and 'DefaultPlugin'
+	
+	CActiveScheduler::Install(iActSchd);
+    
+	//Connect to the AuthServer	
+	AuthServer::RAuthMgrClient authMgrClient1;	
+	TInt connectVal = authMgrClient1.Connect();
+	CleanupClosePushL(authMgrClient1);
+	
+    TPtrC exprString;
+	if(GetStringFromConfig(ConfigSection(),_L("plugin1Id"), exprString) == EFalse)
+		{
+		INFO_PRINTF1(_L("Plugin Id not specified in the ini file"));
+		return TestStepResult();
+		}
+		
+	CAuthExpression* authExpr = CreateAuthExprLC(exprString);
+	CActiveObj active1(authMgrClient1, authExpr, 20, iClientSpecificKey, iClientSid, iWithString, iPluginId, 0);
+	active1.Authenticate();
+	CActiveScheduler::Start();
+	
+	if(EPass != active1.iResult)
+		{
+		ERR_PRINTF3(_L("Authentication Result error = %d, iResult = %d\n"), active1.iErr, active1.iResult);			
+		SetTestStepError(active1.iErr);
+		CleanupStack::PopAndDestroy(2, &authMgrClient1);
+		return TestStepResult();
+		}
+	
+	iIdentity = active1.iIdentity;
+	CleanupStack::PushL(iIdentity);
+	TIdentityId identityId = iIdentity->Id();
+	
+	// set plugin input train value.
+	InitPluginDataFromFileL(ETrue);
+	
+	CActiveObj active2(authMgrClient1, authExpr, 0, iClientSpecificKey, iClientSid, iWithString, iPluginId, identityId);
+	active2.Retrain();		
+	CActiveScheduler::Start();
+	
+	if(EPass != active1.iResult)
+		{
+		ERR_PRINTF3(_L("Error encountered while training plugin = %d, iResult = %d\n"), active2.iErr, active2.iResult);			
+		SetTestStepError(active2.iErr);
+		CleanupStack::PopAndDestroy(3, &authMgrClient1);
+		return TestStepResult();
+		}
+	
+	// set plugin inputId value.
+	InitPluginDataFromFileL(EFalse);
+	
+	CActiveObj active3(authMgrClient1, authExpr, 20, iClientSpecificKey, iClientSid, iWithString, iPluginId, 0);
+	active3.Authenticate();		
+	CActiveScheduler::Start();
+	
+	CleanupStack::Pop(iIdentity);	
+	CleanupStack::PopAndDestroy(2, &authMgrClient1);
+	
+	if(EPass != active1.iResult)
+		{
+		ERR_PRINTF3(_L("Authentication Result error = %d, iResult = %d\n"), active3.iErr, active3.iResult);			
+		SetTestStepError(active3.iErr);
+		delete iIdentity;
+		return TestStepResult();
+		}
+
+	iIdentityAfterRetrain = active3.iIdentity;
+	
+	TBool success = VerifyObtainedResultsWithExpectedL();
+	if(success)
+		{
+		SetTestStepResult(EPass);
+		}
+	
+	return TestStepResult();
+    };
+    
+ TBool CTStepClientSidSupport::VerifyObtainedResultsWithExpectedL()
+ 	{
+ 	// required for ReadUserData capability test(when client sid is not equal
+ 	// to the calling application's sid or zero, ReadUserData is required for
+ 	// authentication.)
+ 	if(iClientSid.iUid == 0)
+ 		{
+ 		TInt clientSid;
+ 		if(GetHexFromConfig(ConfigSection(),_L("callingAppSid"), clientSid) == EFalse)
+			{
+			INFO_PRINTF1(_L("Sid of calling application not specified in the ini file"));
+			return TestStepResult();
+			}
+			
+		iClientSid.iUid = clientSid;
+ 		}
+ 		
+ 	CProtectionKey* protection = iIdentity->Key().ClientKeyL(iClientSid.iUid);
+ 	 	
+ 	const CProtectionKey& obtainedKey = iIdentityAfterRetrain->Key();
+ 	TBool success = EFalse;
+ 	if(protection->KeyData() == obtainedKey.KeyData())
+ 		{
+ 		success = ETrue;
+ 		}
+ 	
+ 	return success;
+ 	}
+ 	
+ CTStepClientSidSupport::~CTStepClientSidSupport()
+ 	{
+ 	delete iIdentity;
+ 	delete iIdentityAfterRetrain;
+ 	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/step_createdb.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,115 @@
+/*
+* Copyright (c) 2005-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 "tAuthSvrStep.h"
+#include <testexecutelog.h>
+#include "authserver/protectionkey.h"
+#include "../source/server/encryptedprotectionkey.h"
+#include "../source/server/transientkey.h"  
+#include "../source/server/transientkey.h"  
+#include "../source/server/transientkeyinfo.h"
+#include "../source/server/authdb.h"
+
+#include <s32file.h>
+#include <f32file.h>
+
+using namespace AuthServer;
+
+CTStepCreateDb::CTStepCreateDb()
+	{
+	SetTestStepName(KTStepCreateDb);
+	}
+
+TVerdict CTStepCreateDb::doTestStepL()
+	{
+	if (TestStepResult() != EPass)
+		{
+		return TestStepResult();
+		}
+__UHEAP_MARK;		// Check for memory leaks
+
+	TBool res = ETrue;
+
+	/*
+	*/
+//	TBuf<50> path;
+	_LIT(kAuthDbFile, "authdb.db");
+	_LIT(kPath,"\\private\\102740FC\\");
+
+	TDriveUnit sysDrive (RFs::GetSystemDrive());
+	iFs.CreatePrivatePath(sysDrive);
+
+	TBuf<128> filePath (sysDrive.Name());
+	filePath.Append(kPath);
+	TInt err = iFs.MkDirAll(filePath);
+    if (err != KErrAlreadyExists)
+	  {
+	  User::LeaveIfError(err);
+	  }
+	
+	filePath.Insert(filePath.Length(), kAuthDbFile);
+
+	// Set up database
+	CAuthDb* authDb = CAuthDb::NewL();
+	CleanupStack::PushL(authDb);
+
+	for (TInt i = 0 ; i < KNumPlugins ; ++i)
+	  {
+		authDb->AddPluginL(iPlugins[i]);
+		iPlugins[i] = 0; // transfer ownership
+	  }
+
+	_LIT(kId1Name, "Identity1");
+	_LIT(kId2Name, "Identity2");
+	_LIT(kId3Name, "Identity3");
+	
+	authDb->AddIdentityL(1, kId1Name, iId1Keys[0]);
+	iId1Keys[0] = 0; // transfer ownership
+	authDb->AddIdentityL(2, kId2Name, iId2Keys[0]); 
+	iId2Keys[0] = 0; // transfer ownership
+	authDb->AddIdentityL(3, kId3Name, iId3Keys[0]); 
+    iId3Keys[0] = 0; // transfer ownership
+
+	for (TInt i = 1 ; i < KNumPlugins ; ++i)
+	  {
+		// add a new key info
+		authDb->UpdateL(1, iId1Keys[i]);
+		iId1Keys[i] = 0; // transfer ownership
+		authDb->UpdateL(2, iId2Keys[i]);
+		iId2Keys[i] = 0; // transfer ownership
+		authDb->UpdateL(3, iId3Keys[i]);
+		iId3Keys[i] = 0; // transfer ownership
+	  }
+
+	// Externalize
+	RFileWriteStream writeStore;
+	User::LeaveIfError(writeStore.Replace(iFs, filePath, 
+										  EFileShareExclusive | EFileStream));
+    CleanupClosePushL(writeStore);
+
+	authDb->ExternalizeL(writeStore);
+
+	CleanupStack::PopAndDestroy(&writeStore);
+
+	CleanupStack::PopAndDestroy(1,authDb);
+
+	SetTestStepResult(res ? EPass : EFail);
+	
+__UHEAP_MARKEND;	
+	return TestStepResult();
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/step_multithreaded.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,233 @@
+/*
+* Copyright (c) 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:  Multi threaded tests on AuthServer.
+*
+*/
+
+
+#include "tAuthSvrStep.h"
+#include "authserver/authclient.h"
+#include "authserver/authmgrclient.h"
+
+
+
+using namespace AuthServer;
+
+//Active object for registration
+class CMultiThreadedRegisterActive : public CActive
+    {
+    public:
+     CMultiThreadedRegisterActive(RAuthMgrClient& aClient, HBufC* aIdentityString, CIdentity*& aResult) : 
+         CActive(EPriorityNormal),
+         iFirstTime(true),
+         iClient(aClient), 
+         iResult(aResult),
+         iIdentityString(aIdentityString),
+         iErr(KErrNone)
+        {
+        CActiveScheduler::Add(this);
+        }
+    ~CMultiThreadedRegisterActive()
+        {
+        delete iIdentityString; 
+        }
+    void doReg()
+        {
+        SetActive();        
+        TRequestStatus* status = &iStatus;
+        User::RequestComplete(status, KErrNone);
+        iFirstTime = ETrue;
+        }
+        void DoCancel() 
+        {
+        }
+     void RunL() 
+        {
+        iErr = iStatus.Int();
+        if (iFirstTime)
+            {
+            SetActive();
+            iStatus = KRequestPending;
+            iClient.RegisterIdentityL(iResult, *iIdentityString, iStatus);
+            iFirstTime = false;
+            }
+        else
+            {
+            iErr = iStatus.Int();
+            RDebug::Printf("iErr = %d", iErr);
+            CActiveScheduler::Stop();
+            }
+        }
+        
+    TBool iFirstTime;
+    RAuthMgrClient& iClient;
+    CIdentity*& iResult;
+    HBufC* iIdentityString;
+    TInt iErr;
+    };
+
+CTMultiThreaded::~CTMultiThreaded()
+	{}
+
+CTMultiThreaded::CTMultiThreaded(CTAuthSvrServer& aParent): iParent(aParent)
+
+	{
+	
+	SetTestStepName(KTMultiThreadedTest);
+	}
+
+TVerdict CTMultiThreaded::doTestStepPreambleL()
+
+	{
+	CTStepActSch::doTestStepPreambleL();	
+	return TestStepResult();
+	}
+
+TVerdict CTMultiThreaded::doTestStepPostambleL()
+
+    {
+    
+    CTStepActSch::doTestStepPostambleL();
+    return TestStepResult();
+    }
+
+TVerdict CTMultiThreaded::doTestStepL()
+	{
+	SetTestStepResult(EPass);
+	Logger().ShareAuto();
+	//Initialize AuthServer.
+	InitAuthServerFromFileL();  
+	
+	
+	//Setup two threads which request for registration concurrently.    
+	//Create first thread.
+	RThread firstThread;
+	TInt err(0);
+	TThreadParams firstThreadParams;
+	err = firstThread.Create( _L("First Thread"), (TThreadFunction)runMultiThreadedTest, 
+                                    KDefaultStackSize, KMinHeapSize, 1024*1024 /*Max heap size*/, &firstThreadParams);
+	if(err != KErrNone)
+	    {
+	    ERR_PRINTF2(_L("Couldn't start first thread. Error = %d"), err);
+	    SetTestStepResult(EFail);
+	    return TestStepResult();
+	    }
+	    
+	// Setup the requeststatus for firstThread completion notification.
+	TRequestStatus firstThreadFinishStatus;
+	firstThread.Logon(firstThreadFinishStatus);
+	
+	
+	
+	//Setup the second thread similarly.
+	RThread secondThread;
+	TThreadParams secondThreadParams;
+    err = secondThread.Create( _L("Second Thread"), (TThreadFunction)runMultiThreadedTest, 
+									KDefaultStackSize, KMinHeapSize, 1024*1024 /*Max heap size*/, &secondThreadParams);
+    if(err != KErrNone)
+        {
+        ERR_PRINTF2(_L("Couldn't start second thread. Error = %d"), err);
+        SetTestStepResult(EFail);
+        return TestStepResult();
+        }
+        
+    // Setup the requeststatus for secondThread completion notification.
+    TRequestStatus secondThreadFinishStatus;
+    secondThread.Logon(secondThreadFinishStatus);
+    
+    //Resume both threads.
+	firstThread.Resume();   
+	secondThread.Resume();   
+	
+	//Wait for either request to complete.
+	User::WaitForRequest(firstThreadFinishStatus, secondThreadFinishStatus );     
+	
+	//Now, wait for the unfinished thread.
+	User::WaitForRequest(firstThreadFinishStatus == KRequestPending? firstThreadFinishStatus:secondThreadFinishStatus);
+	
+	INFO_PRINTF1(_L("Both Threads completed."));
+	INFO_PRINTF2(_L("First thread completed with %d."), firstThreadParams.result);
+	INFO_PRINTF2(_L("Second thread completed with %d."), secondThreadParams.result);
+	
+	if((firstThreadParams.result != KErrServerBusy && secondThreadParams.result != KErrNone) &&
+	        (firstThreadParams.result != KErrNone && secondThreadParams.result != KErrServerBusy))
+	    {
+	    SetTestStepResult(EFail);
+	    }
+	firstThread.Close();
+	secondThread.Close();
+	return TestStepResult();
+	}
+
+
+
+void CTMultiThreaded::runMultiThreadedTest(TThreadParams* aParams)
+    {
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+    CActiveScheduler* sched(0);
+    
+    TRAPD(err, sched = new (ELeave) CActiveScheduler);
+    if(err != KErrNone)
+        {
+        delete cleanup;
+        User::Exit(err);
+        }
+    CActiveScheduler::Install(sched); 
+   
+    
+    /* Switch case can be added here to generalize this function to run any method.
+     * For now, only registration is called.
+     */
+    
+    TRAPD(ret,doRegisterL(*aParams));
+	
+	RDebug::Printf("doRegisterL returned %d", ret);
+    
+    delete cleanup;
+    delete sched;
+    }
+
+
+void CTMultiThreaded::doRegisterL(TThreadParams& aParams)
+    {
+    _LIT(KIdString, "User1");
+    
+    RAuthMgrClient client;
+    User::LeaveIfError(client.Connect());
+    CleanupClosePushL(client);
+    
+    HBufC* identityString = KIdString().AllocLC();
+    CIdentity* identity1 = 0;
+    
+    CMultiThreadedRegisterActive* active = new (ELeave)CMultiThreadedRegisterActive(client, identityString, identity1);
+    CleanupStack::PushL(active);
+    active->doReg();
+    CActiveScheduler::Start();
+    
+    //Store the error code in aParams.
+    aParams.result = active->iErr;
+    if(aParams.result == KErrNone)
+        {
+        RDebug::Printf("Registered new Identity! Id = %x", identity1->Id());
+        }
+    else
+        {
+        RDebug::Printf("Registration Failed !");
+        }
+    
+    delete identity1;
+    
+    CleanupStack::Pop(3, &client);
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/step_oom.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,861 @@
+/*
+* Copyright (c) 2008-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 "tAuthSvrStep.h"
+
+#include "authserver/authclient.h"
+#include "authserver/authmgrclient.h"
+#include "authrepository.h"
+#include <scs/cleanuputils.h>
+
+using namespace AuthServer;
+class CAuthOomActive : public CActive
+    {
+    public:
+    CAuthOomActive(RAuthMgrClient& aClient, CAuthExpression* aExpression,
+				 TInt aFresh, TBool aClientSpecific, TBool aAuthViaAlias, const TDesC& aClientMessage, TBool aStop = ETrue) : 
+         CActive(EPriorityNormal),
+         iClient(aClient),
+		 iResult(EFail),
+         iRunCount(0),
+         iAe(aExpression),
+         iStop(aStop),
+         iFresh(aFresh),
+         iIdToStore(0), 
+         iClientSpecific(aClientSpecific),
+         iAuthViaAlias(aAuthViaAlias),
+         iClientMessage(aClientMessage)
+        {
+        CActiveScheduler::Add(this);
+        }
+    
+   void doAuth() 
+        {
+        SetActive();		
+		TRequestStatus* status = &iStatus;
+		User::RequestComplete(status, KErrNone);
+		iRunCount = 0;
+        }
+	void DoCancel() 
+        {
+        }
+        
+    TInt RunError(TInt aError)
+    	{
+    	 TRequestStatus* status = &iStatus;
+    	  if(iStatus.Int() == KErrNoMemory)
+    	 	 {
+    	 	 CActiveScheduler::Stop();
+    	 	 User::Leave(aError);
+    	 	   
+    	 	 }
+    	  else if (iStatus == KRequestPending)
+    	     {   		 
+    	      User::RequestComplete(status, aError);
+    	      CActiveScheduler::Stop();
+    	      User::Leave(aError);
+    	     }
+    	       	
+    	  CActiveScheduler::Stop();
+    	  if(aError == KErrNoMemory)
+    		  {
+    		  User::Leave(aError);
+    		  }
+    	  return KErrNone;
+    	}
+    	
+    void RunL() 
+        {
+        iErr = iStatus.Int();
+        TUid val = TUid::Uid(0);
+		switch (iRunCount)
+		  {
+		  case 0:
+		  	{
+		  	iId = 0;
+
+			TUid uid = TUid::Uid(0);
+				
+	
+			iClient.AuthenticateL(*iAe, iFresh, iClientSpecific, val, EFalse, iClientMessage, iId, iStatus);
+		
+			SetActive();
+
+			break;
+		  	}
+            
+		  case 1:
+			if (0 != iId)
+				{
+				iIdToStore = iId->Id();
+				delete iId;
+				iId = NULL;
+				}
+			
+			iResult = iStatus == KErrNone ? EPass : EFail;
+            iErr = iStatus.Int();
+            if(iErr == KErrNoMemory)
+            	{
+            	User::Leave(KErrNoMemory);
+            	}
+			if (iStop)
+                {
+                CActiveScheduler::Stop();
+                }
+
+			break;
+			
+     	  default:
+			iResult = EFail;
+			
+			if (iStop)
+			    {
+			    CActiveScheduler::Stop();
+			    }
+		    }
+		  ++iRunCount;
+          }
+
+	~CAuthOomActive()
+		{
+		if(iId != NULL)
+			delete iId;
+		}
+          
+   		
+	RAuthMgrClient& iClient;
+	TVerdict iResult;
+	TInt iRunCount;
+	CAuthExpression* iAe;
+	CIdentity* iId;
+    TBool iStop;
+    TInt iErr;
+    TInt iFresh;
+    TIdentityId iIdToStore;
+    TBool iClientSpecific;
+    TBool iAuthViaAlias;
+    const TDesC& iClientMessage;
+    };
+
+class CRegOomActive : public CActive
+    {
+    public:
+    CRegOomActive(RAuthMgrClient& aClient, CIdentity*& aResult) : 
+         CActive(EPriorityNormal),
+         iFirstTime(true),
+         iClient(aClient), 
+         iResult(aResult),
+         iErr(KErrNone)
+        {
+        CActiveScheduler::Add(this);
+        }
+    void doReg()
+        {
+        SetActive();		
+		TRequestStatus* status = &iStatus;
+		User::RequestComplete(status, KErrNone);
+		iFirstTime = ETrue;
+        }
+        void DoCancel() 
+        {
+        }
+     void RunL() 
+        {
+        iErr = iStatus.Int();
+        if (iFirstTime)
+            {
+			SetActive();
+            iStatus = KRequestPending;
+            iClient.RegisterIdentityL(iResult, _L("SOMENAME"), iStatus);
+            iFirstTime = false;
+            }
+        else
+            {
+            iErr = iStatus.Int();
+            
+            if (iErr == KErrNoMemory)
+            	{
+            	User::Leave(KErrNoMemory);
+            	}
+            CActiveScheduler::Stop();
+			}
+        }
+     TInt RunError(TInt error)
+    	 {
+    	 
+    	 TRequestStatus* status = &iStatus;
+    	 if(iStatus.Int() == KErrNoMemory)
+    		 {
+    		 CActiveScheduler::Stop();
+    		 User::Leave(error);
+    		   
+    		 }
+    	 else if (iStatus == KRequestPending)
+    		 {   		 
+    		 User::RequestComplete(status, error);
+    		 CActiveScheduler::Stop();
+    		 User::Leave(error);
+    		 }
+     	
+    	 CActiveScheduler::Stop();
+         User::Leave(error);
+         return KErrNone;
+    	 }
+     
+     ~CRegOomActive()
+    	 {
+    	 Cancel(); 	 
+    	 }
+        
+    TBool iFirstTime;
+    RAuthMgrClient& iClient;
+    CIdentity*& iResult;
+    TInt iErr;
+    };
+
+class CTrainOomActive : public CActive
+    {
+    public:    
+    CTrainOomActive(RAuthMgrClient& aClient, TPluginId plugin1IdValue, TIdentityId iIdFromFile, TBool aStop = ETrue) : 
+         CActive(EPriorityNormal),
+         iClient(aClient),
+		 iResult(EFail),
+         iRunCount(0),
+         iStop(aStop),
+         pluginIdVal(plugin1IdValue),         
+         idToTrain (iIdFromFile)
+        {
+        CActiveScheduler::Add(this);
+        }
+    void doTrain() 
+        {
+
+        SetActive();		
+		TRequestStatus* status = &iStatus;		    
+		User::RequestComplete(status, KErrNone);
+		iRunCount = 0;
+        }
+        void DoCancel() 
+        {
+        }
+     void RunL() 
+        {
+        iErr = iStatus.Int();
+        if (iStatus.Int() != KErrNone)
+            {
+            }
+		switch (iRunCount)
+		  {
+		  case 0:
+				iStatus = KRequestPending;
+	            iClient.TrainPlugin(idToTrain, pluginIdVal, iStatus);
+				SetActive();
+			break;
+
+   		  case 1:
+			iResult = iStatus.Int() == KErrNone ? EPass : EFail;
+            iErr = iStatus.Int();
+            if (iErr == KErrNoMemory)
+                {
+                 User::Leave(KErrNoMemory);
+                }
+			if (iStop)
+                {
+                CActiveScheduler::Stop();
+                }
+
+			break;
+
+     	  default:
+			iResult = EFail;
+			  if (iErr == KErrNoMemory)
+			    {
+			    User::Leave(KErrNoMemory);
+			    }
+			if (iStop)
+			    {
+			    CActiveScheduler::Stop();
+			    }
+		    }
+		  ++iRunCount;
+          }
+     TInt RunError(TInt error)
+    	 {
+
+    	 TRequestStatus* status = &iStatus;
+    	 if(iStatus.Int() == KErrNoMemory)
+    		 {
+    		 CActiveScheduler::Stop();
+    		 User::Leave(error);
+    		   
+    		 }
+    	 else if (iStatus == KRequestPending)
+    		 {   		 
+    		 User::RequestComplete(status, error);
+    		 CActiveScheduler::Stop();
+    		 User::Leave(error);
+    		 }
+     	
+    	 CActiveScheduler::Stop();
+         User::Leave(error);
+         return KErrNone;
+    	 
+    	 }
+	RAuthMgrClient& iClient;
+	TVerdict iResult;
+	TInt iRunCount;
+    TBool iStop;
+    TInt iErr;
+    TPluginId pluginIdVal;
+    TIdentityId idToTrain;
+    };
+
+CAuthSvrOom::~CAuthSvrOom()
+/**
+  Destructor
+ */
+	{}
+
+CAuthSvrOom::CAuthSvrOom(CTAuthSvrServer& aParent): iParent(aParent)
+/**
+  Constructor
+ */
+	{
+	
+	SetTestStepName(KTAuthServerOom);
+	}
+
+TVerdict CAuthSvrOom::doTestStepPreambleL()
+/**
+  @return - TVerdict code
+
+ */
+	{
+	CTStepActSch::doTestStepPreambleL();	
+	CActiveScheduler::Install(iActSchd);
+	return TestStepResult();
+	}
+
+
+TVerdict CAuthSvrOom::doTestStepL()
+	{
+	
+	//Client side/Server side OOM test or Performance test??
+	
+	TInt testType(0);
+	GetIntFromConfig(ConfigSection(), _L("TestType"), testType);
+	ReadTestConfigurationL();
+	switch(testType)
+		{
+		case 1: doClientOOMTestL();
+				break;
+		
+		case 2: doServerOOMTestL();
+				break;
+				
+		case 3: doPerformanceTestL();
+				break;
+				
+		default:
+			//Should not reach here !
+			   break;
+		}
+	
+	return TestStepResult();
+	}
+TVerdict CAuthSvrOom::doClientOOMTestL()
+/**
+ * 	Runs the test step under OOM Conditions checking that each heap allocation is fail safe
+ */
+	{	
+	// Pre and Post test heap cell allocation counts
+ 	TInt cellCountAfter = 0;
+	TInt cellCountBefore = 0;
+	
+	/**
+	 * The loop tests each heap allocation under out of memory conditions to determine whether
+	 * the framework cleans up correctly without leaking memory.
+	 * 
+	 * The 'for' loop does not have any completion criteria, so the loop breaks out as soon 
+	 * as any of the following events occur:
+	 * a) The pre and post heap cell counts mismatch signalling a memory leakage
+	 * b) An unexpected leave (any leave with an error code other than 'KErrNoMemory')
+	 * c) All heap allocations have been tested and the test returns 'KErrNone'
+	 */
+	for (TInt testCount = 0; ; ++testCount)
+ 		{
+ 		__UHEAP_RESET;
+ 		__UHEAP_MARK;
+ 		
+__UHEAP_SETFAIL(RHeap::EDeterministic, testCount+1);
+		cellCountBefore = User::CountAllocCells();
+ 		AuthServer::RAuthMgrClient authMgrClient;
+ 		CleanupClosePushL(authMgrClient);
+ 		authMgrClient.Connect();
+ 		
+ 		TRAPD(err, doTestL(authMgrClient));
+ 		authMgrClient.ShutdownServer();
+ 		CleanupStack::PopAndDestroy(&authMgrClient);
+ 		
+ 		cellCountAfter = User::CountAllocCells();
+ __UHEAP_MARKEND;
+ 		
+ 		
+ 		if (err == KErrNone)
+ 			{
+			INFO_PRINTF1(_L("Client OOM Test Finished"));
+ 			break;
+ 			}
+ 		else if(err == KErrNoMemory)
+ 			{
+ 			
+ 			if (cellCountBefore != cellCountAfter)
+ 				{
+ 				ERR_PRINTF2(_L("OOM Test Result: Failed - Memory leakage on iteration %d"), testCount);
+ 				SetTestStepResult(EFail);
+ 				break;
+ 				}
+ 			else
+ 				{
+ 				INFO_PRINTF2(_L("OOM Pass %d"), testCount);
+ 				}
+ 			}
+ 		else
+ 			{
+ 			User::Leave(err);
+ 			break;
+ 			}
+		}
+	
+	
+	return TestStepResult();
+	}
+
+TVerdict CAuthSvrOom::doServerOOMTestL()
+	{
+
+	TInt err(0),err2(0);	
+	AuthServer::RAuthMgrClient authMgrClient;
+	CleanupClosePushL(authMgrClient);
+	authMgrClient.Connect();	
+	// Pre and Post test heap cell allocation counts
+	for (TInt testCount=0; ; ++testCount)
+ 		{
+ 		
+ 		err = authMgrClient.SetServerHeapFail(testCount+1);
+ 		if(KErrNoMemory == err)
+ 			{
+ 			ERR_PRINTF1(_L("ReInitializing..."));
+ 			authMgrClient.ResetServerHeapFail();
+ 			continue;
+ 			}
+
+ 		TRAPD(retStepVal, doTestL(authMgrClient));
+ 		err2 = authMgrClient.ResetServerHeapFail();
+ 		if((err == KErrServerTerminated) || (err2 == KErrServerTerminated))
+ 			{
+ 			INFO_PRINTF1(_L("AuthServer Terminated"));	
+ 			SetTestStepResult(EFail);
+ 			break;
+ 			}
+ 			
+ 		if(KErrNone != err)
+ 			{
+ 			SetTestStepResult(EFail);
+ 			break;
+ 			}
+ 		 		
+ 	
+ 		if(KErrNoMemory == retStepVal)
+ 			{
+ 			INFO_PRINTF2(_L("OOM Pass %d"), testCount);
+ 			}
+ 		else if (KErrNone == retStepVal)
+ 			{
+ 			INFO_PRINTF1(_L("Server OOM Test Finished"));
+ 			break;
+ 			}
+ 		else 
+ 			{
+ 			// Propagate all errors apart from KErrNoMemory
+ 			User::Leave(retStepVal);
+ 			}
+ 		
+ 		
+ 		}// for
+		CleanupStack::PopAndDestroy(&authMgrClient);
+		WaitForServerToReleaseDb();
+	return TestStepResult();
+	}
+
+
+TVerdict CAuthSvrOom::doTestL(AuthServer::RAuthMgrClient& ac)
+	{
+	TInt oomValue;
+	GetIntFromConfig(ConfigSection(), _L("OOMTest"), oomValue);
+	
+	switch(oomValue)
+		{
+		case 1:
+			
+			break;
+		
+		case 2:
+			//Registration API check			
+			doRegOOMTestL(ac);		
+			break;
+		
+		case 3:
+			//Synchronous Authenticate API check	
+			doSyncAuthOOMTestL(ac);
+			break;
+		
+		case 4:
+			//Asynchronous Authenticate API check
+			doAsyncAuthOOMTestL(ac);
+			break;
+			
+		case 5:
+			//Set preffered plugin type check
+			doSetPreferredTypeL(ac);
+			break;
+			
+		case 6:
+			//Check Remove Identity API
+			doRemoveIdentityL(ac);
+			break;
+		case 7:
+			//Check forget plugin API
+			doForgetPluginL(ac);
+			break;
+		case 8:
+			//Check Retrain Plugin API
+			doRetrainPluginL(ac);
+			break;
+		case 9:
+			//Check List PluginsL API
+			doListPluginsL(ac);
+			break;
+		case 10:
+			//Check List Active Plugins API
+			doListActivePluginsL(ac);
+			break;
+		case 11:
+			//Check List Plugins of type API
+			doListPluginsOfTypeL(ac);
+			break;
+		case 12:
+			//Check List Plugins With Training status API
+			doListPluginsWithTrainingStatusL(ac);
+			break;
+		case 13:
+			//Check List Authentication aliases API
+			doListAuthStrengthAliasesL(ac);
+			break;
+		case 14:
+			// Check the reset API (all plugins)
+			doResetAll(ac);
+			break;
+		case 15:
+			// Check the reset API (plugins of specified type)
+			doResetType(ac);
+			break;
+		case 16:
+			// Check the reset API (specified plugins)
+			doResetList(ac);
+			break;
+		default:
+			//Should never reach here
+			break;
+		}
+	return TestStepResult();
+	}
+
+void CAuthSvrOom::doStartupTestL()
+	{
+	RAuthClient r1;
+	CleanupClosePushL(r1);
+	r1.Connect();
+	CleanupStack::PopAndDestroy(&r1);	
+	}
+
+void CAuthSvrOom::doRegOOMTestL(AuthServer::RAuthMgrClient &ac)
+	{
+	
+	CIdentity* identity1 = 0;
+    CRegOomActive active(ac, identity1);
+    active.doReg();
+	CActiveScheduler::Start();
+	delete identity1;
+	}
+
+void CAuthSvrOom::doSyncAuthOOMTestL(AuthServer::RAuthMgrClient &ac)
+	{
+	TUid val = TUid::Uid(0);
+	CIdentity* id = 0;
+	CAuthExpression* expr = CreateAuthExprLC(iExprString);			
+	id = ac.AuthenticateL(*expr, iFreshnessVal, iClientSpecificKeyVal, val, EFalse, iMessage);
+	
+	delete id;
+	id = 0;
+	CleanupStack::PopAndDestroy(expr);
+	}
+
+void CAuthSvrOom::doAsyncAuthOOMTestL(AuthServer::RAuthMgrClient &ac)
+	{
+	CAuthExpression* expr = ac.CreateAuthExpressionL(iExprString);
+	CleanupStack::PushL(expr);
+		
+	CAuthOomActive active(ac, expr, iFreshnessVal, iClientSpecificKeyVal, EFalse, iMessage);
+	active.doAuth();		
+	CActiveScheduler::Start();
+			
+	if(expr)
+		{
+		CleanupStack::PopAndDestroy(expr);
+		}
+	}
+
+void CAuthSvrOom::doSetPreferredTypeL(AuthServer::RAuthMgrClient &ac)
+	{
+	TInt plugin(0);
+	GetHexFromConfig(ConfigSection(),KKnowledgePrefsTag, plugin);
+	TPluginId id = plugin;
+	ac.SetPreferredTypePluginL(EAuthKnowledge, id);
+	}
+
+void CAuthSvrOom::doRemoveIdentityL(AuthServer::RAuthMgrClient &ac)
+	{
+	TInt plugin1IdValue = 0;	
+	GetHexFromConfig(ConfigSection(),_L("plugin1Id"), plugin1IdValue);
+	
+	//Read the identityId to be removed
+	TIdentityId idToRemove = getLastAuthId();
+	ac.RemoveIdentityL(idToRemove);
+	}
+
+void CAuthSvrOom::doForgetPluginL(AuthServer::RAuthMgrClient &ac)
+	{
+	TInt plugin1IdValue = 0;	
+	GetHexFromConfig(ConfigSection(),_L("plugin1Id"), plugin1IdValue);
+	
+	//Read the identityId to be forgotten
+	TIdentityId idToForget = getLastAuthId();
+	ac.ForgetPluginL( idToForget , plugin1IdValue);
+	}
+
+void CAuthSvrOom::doRetrainPluginL(AuthServer::RAuthMgrClient &ac)
+	{
+	TInt plugin1IdValue = 0;
+	GetHexFromConfig(ConfigSection(),_L("plugin1Id"), plugin1IdValue);
+	
+	TIdentityId idToTrain = getLastAuthId();
+	//Train the plugin again with this identity. 	    
+ 	CTrainOomActive active(ac, plugin1IdValue, idToTrain);
+	active.doTrain();		
+	CActiveScheduler::Start();			
+	}
+
+void CAuthSvrOom::doListPluginsL(AuthServer::RAuthMgrClient &ac)
+	{
+	RPluginDescriptions pluginList1;
+	TCleanupItem cleanup(CleanupEComArray, &pluginList1);
+	CleanupStack::PushL(cleanup);					
+	ac.PluginsL(pluginList1);	
+	CleanupStack::PopAndDestroy(&pluginList1);
+		
+	}
+
+void CAuthSvrOom::doListActivePluginsL(AuthServer::RAuthMgrClient &ac)
+	{
+	RPluginDescriptions pluginList1;
+	TCleanupItem cleanup(CleanupEComArray, &pluginList1);
+	CleanupStack::PushL(cleanup);					
+	ac.ActivePluginsL(pluginList1);	
+	CleanupStack::PopAndDestroy(&pluginList1);
+	}
+
+void CAuthSvrOom::doListPluginsOfTypeL(AuthServer::RAuthMgrClient &ac)
+	{
+	RCPointerArray<const CPluginDesc> pluginsList;
+	CleanupClosePushL(pluginsList);
+	TAuthPluginType t1 = EAuthKnowledge;				
+	ac.PluginsOfTypeL(t1, pluginsList);	
+	CleanupStack::PopAndDestroy(&pluginsList);
+	}
+
+void CAuthSvrOom::doListPluginsWithTrainingStatusL(AuthServer::RAuthMgrClient &ac)
+	{
+	RCPointerArray<const CPluginDesc> pluginsList;
+	CleanupClosePushL(pluginsList);		
+	TAuthTrainingStatus t1 = EAuthTrained;
+	ac.PluginsWithTrainingStatusL(t1, pluginsList);	
+	CleanupStack::PopAndDestroy(&pluginsList);
+	}
+
+void CAuthSvrOom::doListAuthStrengthAliasesL(AuthServer::RAuthMgrClient &ac)
+	{
+	RPointerArray<HBufC> aliasList;
+	CleanupResetAndDestroyPushL(aliasList);
+	ac.ListAuthAliasesL(aliasList);
+	CleanupStack::PopAndDestroy(&aliasList);
+	}
+
+// Check the reset API (all plugins)
+void CAuthSvrOom::doResetAll(AuthServer::RAuthMgrClient& ac)
+	{
+	TIdentityId identity = getLastAuthId(); // Anything but 0 since client does sanity check
+	ac.ResetIdentityL(identity, _L("1234"));
+	}
+
+// Check the reset API (plugins of specified type)
+void CAuthSvrOom::doResetType(AuthServer::RAuthMgrClient& ac)
+	{
+	TIdentityId identity = getLastAuthId(); // Anything but 0 since client does sanity check
+	ac.ResetIdentityL(identity, EAuthKnowledge, _L("2342"));
+	}
+
+// Check the reset API (specified plugins)
+void CAuthSvrOom::doResetList(AuthServer::RAuthMgrClient& ac)
+	{
+	TIdentityId identity = getLastAuthId(); // Anything but 0 since client does sanity check
+	TInt pluginId(0);
+	GetHexFromConfig(ConfigSection(),_L("plugin1Id"), pluginId);
+	RArray<TPluginId> pluginList;
+	CleanupClosePushL(pluginList);
+	RPointerArray<const HBufC> regDataList;
+	CleanupResetAndDestroyPushL(regDataList);
+	pluginList.AppendL(pluginId);
+	regDataList.AppendL(_L("1344").AllocL());
+	ac.ResetIdentityL(identity, pluginList, regDataList);
+	CleanupStack::PopAndDestroy(2, &pluginList);
+	}
+
+void CAuthSvrOom::ReadTestConfigurationL()
+	{
+	
+	TPtrC displayMessage;
+	TBool messageSent = (GetStringFromConfig(ConfigSection(),_L("DisplayMessage"), displayMessage) != EFalse);
+	iMessage = displayMessage;
+	ClientMessage(messageSent, displayMessage);
+	if(!messageSent)
+		{
+		iMessage = KNullDesC();
+		}
+	
+	TPinValue pinValue = GetPinFromOutputFileL();
+	CreatePinPluginInputFileL(EPinPluginIdentify, pinValue);
+		
+
+	GetStringFromConfig(ConfigSection(),_L("pluginId"), iExprString);
+  	
+	
+	//Retrieve the value of 'freshness' from the ini file, but if it's absent use the default value
+	if(GetIntFromConfig(ConfigSection(),_L("freshness"), iFreshnessVal) == EFalse)
+		{
+		iFreshnessVal = 10;
+		}
+	 		
+	iClientSpecificKeyVal = EFalse;	 	
+	//Retrieve the value of 'clientSpecificKey' from the ini file, but if it's absent use the default value
+	if(GetBoolFromConfig(ConfigSection(),_L("clientSpecificKey"), iClientSpecificKeyVal) == EFalse)
+		{
+		iClientSpecificKeyVal = EFalse;
+		}
+	 	
+	iDefaultpluginusage = EFalse;
+	if(GetBoolFromConfig(ConfigSection(),_L("defaultpluginusage"), iDefaultpluginusage ) == EFalse)
+		 {
+		 iDefaultpluginusage  = EFalse;
+		 }
+
+	}
+
+
+TVerdict CAuthSvrOom::doTestStepPostambleL()
+/**
+  @return - TVerdict code
+
+ */
+	{
+	
+	CTStepActSch::doTestStepPostambleL();
+	return TestStepResult();
+	}
+
+TVerdict CAuthSvrOom::doPerformanceTestL()
+/**
+ * 	Runs the test step under OOM Conditions checking that each heap allocation is fail safe
+ */
+	{
+	TInt oomValue;
+	GetIntFromConfig(ConfigSection(), _L("OOMTest"), oomValue);
+	GetIntFromConfig(ConfigSection(), _L("iterationCount"), iIterationCount);	
+	StartTimer();
+	
+	for (TInt i = 0; i < iIterationCount; ++i)
+ 		{
+ 		
+ 		AuthServer::RAuthMgrClient authMgrClient;
+ 		CleanupClosePushL(authMgrClient);
+ 		authMgrClient.Connect();
+ 	
+ 		TRAPD(err, doTestL(authMgrClient));
+ 		authMgrClient.ShutdownServer();
+ 		CleanupStack::PopAndDestroy(&authMgrClient);
+ 		if(err != KErrNone)
+ 			{
+ 			User::Leave(err);
+ 			break;
+ 			}
+ 
+ 		ReadTestConfigurationL();
+ 		if (oomValue == 2)
+ 			{
+ 			RemoveExistingDbL();
+ 			}
+ 		}
+	
+	StopTimerAndPrintResultL();
+	return TestStepResult();
+	}
+	
+void CAuthSvrOom::PrintPerformanceLog(TTime aTime)
+	{
+	TDateTime timer = aTime.DateTime();
+	INFO_PRINTF6(_L("%S,%d:%d:%d:%d"), &KPerformanceTestInfo(), timer.Hour(), timer.Minute(), timer.Second(), timer.MicroSecond());
+	}
+
+void CAuthSvrOom::StartTimer()
+	{
+	iStartTime.HomeTime();
+	PrintPerformanceLog(iStartTime);
+	}
+
+void CAuthSvrOom::StopTimerAndPrintResultL()
+	{
+	TTime endTime;
+	endTime.HomeTime();
+	PrintPerformanceLog(endTime);
+	
+	TTimeIntervalMicroSeconds duration = endTime.MicroSecondsFrom(iStartTime);
+	TInt actualDuration = (I64INT(duration.Int64())/1000)/iIterationCount; // in millisecond
+	
+	INFO_PRINTF3(_L("%S,%d"), &KActualTestCaseDuration(), actualDuration);
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/step_postmarketplugin.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,468 @@
+/*
+* Copyright (c) 2008-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: 
+* CTestStep derived implementation
+*
+*/
+
+ 
+#include "tAuthSvrStep.h"
+#include <f32file.h>
+#include <ecom/ecom.h>
+#include <e32test.h>
+
+#include "authserver/authclient.h"
+#include "authserver/authmgrclient.h"
+
+using namespace AuthServer;
+
+const TInt KWaitDuration = 30000000; 
+#define WAIT_FOR3s User::After(KWaitDuration)
+ 
+
+_LIT(KSysBinDir, "c:\\sys\\bin\\");
+_LIT(KRscDir, "c:\\resource\\plugins\\");
+
+CTPostMarketPlugin::CTPostMarketPlugin()
+	{
+	SetTestStepName(KTPostMarketPlugin);
+	}
+
+TVerdict CTPostMarketPlugin::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	CTAuthSvrStepBase::doTestStepPreambleL();
+	
+	if (!GetStringFromConfig(ConfigSection(), _L("srcPlugin"), iSrcPlugin))
+		{
+		INFO_PRINTF1(_L("Source plugin not specified in the ini file"));
+		return TestStepResult();
+		}
+		
+	if (!GetStringFromConfig(ConfigSection(), _L("destPlugin"), iTargetPlugin))
+		{
+		INFO_PRINTF1(_L("Target plugin not specified in the ini file"));
+		return TestStepResult();
+		}
+		
+	if (!GetStringFromConfig(ConfigSection(), _L("srcRscFile"), iSrcRscFile))
+		{
+		INFO_PRINTF1(_L("Source resource file not specified in the ini file"));
+		return TestStepResult();
+		}
+		
+	if (!GetStringFromConfig(ConfigSection(), _L("destRscFile"), iTargetRscFile))
+		{
+		INFO_PRINTF1(_L("Target resource file not specified in the ini file"));
+		return TestStepResult();
+		}
+		
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+	
+
+TBool CTPostMarketPlugin::VerifyObtainedResultsWithExpectedL(AuthServer::RAuthMgrClient& aAuthMgrClient, TInt aExpectedCount, const TDesC& aExpectedPluginName)
+	{
+	RPluginDescriptions pluginList;
+	TCleanupItem cleanup(CleanupEComArray, &pluginList);
+	CleanupStack::PushL(cleanup);
+	
+	//Get a list of all the available plugins.					
+	aAuthMgrClient.PluginsL(pluginList);	
+	TInt count = pluginList.Count();
+	TBool result = ETrue;
+	if(count != aExpectedCount)
+		{
+		INFO_PRINTF3(_L("Expected plugin count %d differs from actual %d..."), &count, &aExpectedCount);
+		result = EFalse;
+		}
+		
+	if(aExpectedPluginName.Length())
+		{
+		TBool found = EFalse;
+		const TDesC* pluginName = 0;
+		for(TInt i = 0; i < count; i++)
+			{
+			pluginName = pluginList[i]->Name();
+			if(pluginName->Compare(aExpectedPluginName) == 0)
+				{
+				found = ETrue;
+				break;
+				}
+			}
+		
+		if(!found)
+			{
+			result = EFalse;
+			}
+		}
+	
+	CleanupStack::PopAndDestroy(&pluginList);	
+	return result;	
+	}
+	
+
+TVerdict CTPostMarketPlugin::doTestStepL()
+	{
+	SetTestStepResult(EFail);
+	
+	//Connect to the AuthServer	
+	AuthServer::RAuthMgrClient authMgrClient;	
+	TInt connectVal = authMgrClient.Connect();
+	if (KErrNotFound == connectVal)
+		{
+		//Retry after a delay
+		TTimeIntervalMicroSeconds32 timeInterval = 2000;	//2 Milliseconds
+		User::After(timeInterval);
+		connectVal = authMgrClient.Connect();
+		}
+	if (KErrNone != connectVal)
+		{
+		ERR_PRINTF2(_L("Unable to start a session or other connection error. Err = %d"), connectVal);
+		User::LeaveIfError(connectVal);		
+		}	
+	
+	CleanupClosePushL(authMgrClient);
+	
+	RTestUtilSession testutil;
+	User::LeaveIfError(testutil.Connect());
+	CleanupClosePushL(testutil);
+	
+	// test plugin install operation.
+	INFO_PRINTF1(_L("Test Plugin Install"));
+	TBool success = TestPluginInstallL(authMgrClient, testutil);
+	if(!success)
+		{
+		INFO_PRINTF1(_L("Test Install failed!"));
+		CleanupStack::PopAndDestroy(2, &authMgrClient);
+		return TestStepResult();
+		}
+	
+	// test plugin uninstall operation.
+	INFO_PRINTF1(_L("Test Plugin Uninstall"));
+	success = TestPluginUninstallL(authMgrClient, testutil);
+	if(!success)
+		{
+		INFO_PRINTF1(_L("Test Uninstall failed!"));
+		CleanupStack::PopAndDestroy(2, &authMgrClient);
+		return TestStepResult();
+		}
+	
+	CleanupStack::PopAndDestroy(2, &authMgrClient);
+	
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+
+TBool CTPostMarketPlugin::TestPluginInstallL(AuthServer::RAuthMgrClient& aAuthMgrClient, RTestUtilSession& aUtilSession)
+	{
+	TBool success = EFalse;
+	
+	// get the list of available plugin implementations, before an plugin installation/upgrade.
+	TInt pluginCountPreInstall = 0;
+	if(GetIntFromConfig(ConfigSection(),_L("initialPluginCount"), pluginCountPreInstall) == EFalse)
+		{
+		INFO_PRINTF1(_L("Pre Install Plugin Count not specified in the ini file"));
+		return success;
+		}
+	
+	TBool result = VerifyObtainedResultsWithExpectedL(aAuthMgrClient, pluginCountPreInstall);
+	if(!result)
+		{
+		return success;
+		}
+		
+	// Install a plugin.
+	// Incase c:\sys\bin or c:\resource\plugins directory ,doesn't exist, 
+	// move operation fails with KErrPathNotFound.So create one.
+		
+	TInt err = aUtilSession.MkDirAll(KSysBinDir);
+	if(err != KErrAlreadyExists && err != KErrNone)
+		{
+		User::Leave(err);
+		}
+		
+	err = aUtilSession.MkDirAll(KRscDir);
+	if(err != KErrAlreadyExists && err != KErrNone)
+		{
+		User::Leave(err);
+		}
+	
+	INFO_PRINTF3(_L("Moving plugin from %S to %S..."), &iSrcPlugin, &iTargetPlugin);
+	User::LeaveIfError(aUtilSession.Move(iSrcPlugin, iTargetPlugin));
+	
+	INFO_PRINTF3(_L("Moving plugin from %S to %S..."), &iSrcRscFile, &iTargetRscFile);
+	User::LeaveIfError(aUtilSession.Move(iSrcRscFile, iTargetRscFile));
+		
+	WAIT_FOR3s;
+	
+	// get the list of available plugin implementations, post installation/upgrade.
+	TInt pluginCountPostInstall = 0;
+	if(GetIntFromConfig(ConfigSection(),_L("expectedPluginCount"), pluginCountPostInstall) == EFalse)
+		{
+		INFO_PRINTF1(_L("Post Install Plugin Count not specified in the ini file"));
+		return success;
+		}
+		
+	// get the plugin implementation list post installation.This should load the plugin version based on the ROM_only field.	
+	TPtrC pluginNamePostInstall;
+	if ((!GetStringFromConfig(ConfigSection(), _L("pluginNamePostInstall"), pluginNamePostInstall)))
+		{
+		INFO_PRINTF1(_L("Post Install Plugin Name not specified in the ini file"));
+		}
+	
+	result = VerifyObtainedResultsWithExpectedL(aAuthMgrClient, pluginCountPostInstall, pluginNamePostInstall);	
+	if(!result)
+		{
+		return success;
+		}
+	
+	success = ETrue;	
+	return success;
+	}
+
+
+TBool CTPostMarketPlugin::TestPluginUninstallL(AuthServer::RAuthMgrClient& aAuthMgrClient, RTestUtilSession& aUtilSession)
+	{
+	TBool success = EFalse;
+	
+	// get the list of available plugin implementations, before an plugin installation/upgrade.
+	TInt pluginCountPreUninstall = 0;
+	if(GetIntFromConfig(ConfigSection(),_L("expectedPluginCount"), pluginCountPreUninstall) == EFalse)
+		{
+		INFO_PRINTF1(_L("Pre Uninstall Plugin Count not specified in the ini file"));
+		return success;
+		}
+	
+	TBool result = VerifyObtainedResultsWithExpectedL(aAuthMgrClient, pluginCountPreUninstall);
+	if(!result)
+		{
+		return success;
+		}
+		
+	// Install a plugin.
+	INFO_PRINTF3(_L("Moving plugin from %S to %S..."), &iTargetPlugin, &iSrcPlugin);
+	User::LeaveIfError(aUtilSession.Move(iTargetPlugin, iSrcPlugin));
+	
+	INFO_PRINTF3(_L("Moving plugin from %S to %S..."), &iTargetRscFile, &iSrcRscFile);
+	User::LeaveIfError(aUtilSession.Move(iTargetRscFile, iSrcRscFile));
+		
+	WAIT_FOR3s;
+	
+	// get the list of available plugin implementations, post uninstallation.
+	TInt pluginCountPostUninstall = 0;
+	if(GetIntFromConfig(ConfigSection(),_L("initialPluginCount"), pluginCountPostUninstall) == EFalse)
+		{
+		INFO_PRINTF1(_L("Post Uninstall Plugin Count not specified in the ini file"));
+		return success;
+		}
+		
+	// get the plugin name post uninstall.	
+	TPtrC pluginNamePostUninstall;
+	if ((!GetStringFromConfig(ConfigSection(), _L("pluginNamePostUninstall"), pluginNamePostUninstall)))
+		{
+		INFO_PRINTF1(_L("Post Uninstall Plugin Name not specified in the ini file"));
+		}
+	
+	result = VerifyObtainedResultsWithExpectedL(aAuthMgrClient, pluginCountPostUninstall, pluginNamePostUninstall);	
+	if(!result)
+		{
+		return success;
+		}
+	
+	success = ETrue;	
+	return success;
+	}
+	
+	
+CTPostMarketPlugin::~CTPostMarketPlugin()
+/**
+ Destructor
+*/
+	{};
+	
+CTInstallPluginStep::CTInstallPluginStep()
+	{
+	SetTestStepName(KTInstallPluginStep);
+	}
+
+TVerdict CTInstallPluginStep::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	CTAuthSvrStepBase::doTestStepPreambleL();
+	
+	if (!GetStringFromConfig(ConfigSection(), _L("srcPlugin"), iSrcPlugin))
+		{
+		INFO_PRINTF1(_L("Source plugin not specified in the ini file"));
+		return TestStepResult();
+		}
+		
+	if (!GetStringFromConfig(ConfigSection(), _L("destPlugin"), iTargetPlugin))
+		{
+		INFO_PRINTF1(_L("Target plugin not specified in the ini file"));
+		return TestStepResult();
+		}
+		
+	if (!GetStringFromConfig(ConfigSection(), _L("srcRscFile"), iSrcRscFile))
+		{
+		INFO_PRINTF1(_L("Source resource file not specified in the ini file"));
+		return TestStepResult();
+		}
+		
+	if (!GetStringFromConfig(ConfigSection(), _L("destRscFile"), iTargetRscFile))
+		{
+		INFO_PRINTF1(_L("Target resource file not specified in the ini file"));
+		return TestStepResult();
+		}
+		
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+	
+
+TVerdict CTInstallPluginStep::doTestStepL()
+	{
+	SetTestStepResult(EFail);
+	
+	//Connect to the AuthServer	
+	RTestUtilSession testUtil;
+	User::LeaveIfError(testUtil.Connect());
+	CleanupClosePushL(testUtil);
+	
+	// simulate plugin install operation via move operation.
+	INFO_PRINTF1(_L("Install RAM Plugin "));
+	
+	// Install a plugin.
+	// Incase c:\sys\bin or c:\resource\plugins directory ,doesn't exist, 
+	// move operation fails with KErrPathNotFound.So create one.
+	
+	TInt err = testUtil.MkDirAll(KSysBinDir);
+	if(err != KErrAlreadyExists && err != KErrNone)
+		{
+		User::Leave(err);
+		}
+		
+	err = testUtil.MkDirAll(KRscDir);
+	if(err != KErrAlreadyExists && err != KErrNone)
+		{
+		User::Leave(err);
+		}
+	
+	INFO_PRINTF3(_L("Moving plugin from %S to %S..."), &iSrcPlugin, &iTargetPlugin);
+	User::LeaveIfError(testUtil.Move(iSrcPlugin, iTargetPlugin));
+	
+	INFO_PRINTF3(_L("Moving plugin from %S to %S..."), &iSrcRscFile, &iTargetRscFile);
+	User::LeaveIfError(testUtil.Move(iSrcRscFile, iTargetRscFile));
+			
+	CleanupStack::PopAndDestroy(&testUtil);
+	
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+
+CTInstallPluginStep::~CTInstallPluginStep()
+/**
+ Destructor
+*/
+	{};
+	
+
+CTUninstallPluginStep::CTUninstallPluginStep()
+	{
+	SetTestStepName(KTUninstallPluginStep);
+	}
+
+TVerdict CTUninstallPluginStep::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	CTAuthSvrStepBase::doTestStepPreambleL();
+	
+	if (!GetStringFromConfig(ConfigSection(), _L("srcPlugin"), iSrcPlugin))
+		{
+		INFO_PRINTF1(_L("Source plugin not specified in the ini file"));
+		return TestStepResult();
+		}
+		
+	if (!GetStringFromConfig(ConfigSection(), _L("destPlugin"), iTargetPlugin))
+		{
+		INFO_PRINTF1(_L("Target plugin not specified in the ini file"));
+		return TestStepResult();
+		}
+		
+	if (!GetStringFromConfig(ConfigSection(), _L("srcRscFile"), iSrcRscFile))
+		{
+		INFO_PRINTF1(_L("Source resource file not specified in the ini file"));
+		return TestStepResult();
+		}
+		
+	if (!GetStringFromConfig(ConfigSection(), _L("destRscFile"), iTargetRscFile))
+		{
+		INFO_PRINTF1(_L("Target resource file not specified in the ini file"));
+		return TestStepResult();
+		}
+		
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+	
+
+TVerdict CTUninstallPluginStep::doTestStepL()
+	{
+	SetTestStepResult(EFail);
+	
+	//Connect to the AuthServer	
+	RTestUtilSession testUtil;
+	User::LeaveIfError(testUtil.Connect());
+	CleanupClosePushL(testUtil);
+	
+	// simulate plugin uninstall operation via move operation.
+	INFO_PRINTF1(_L("Unnstall RAM Plugin "));
+	
+	INFO_PRINTF3(_L("Moving plugin from %S to %S..."), &iSrcPlugin, &iTargetPlugin);
+	User::LeaveIfError(testUtil.Move(iSrcPlugin, iTargetPlugin));
+	
+	INFO_PRINTF3(_L("Moving plugin from %S to %S..."), &iSrcRscFile, &iTargetRscFile);
+	User::LeaveIfError(testUtil.Move(iSrcRscFile, iTargetRscFile));
+	
+	CleanupStack::PopAndDestroy(&testUtil);
+	
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+
+CTUninstallPluginStep::~CTUninstallPluginStep()
+/**
+ Destructor
+*/
+	{};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/step_removeauthmethod.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,158 @@
+/*
+* Copyright (c) 2006-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: 
+* CTestStep derived implementation
+*
+*/
+
+ 
+#include "tAuthSvrStep.h"
+
+#include "authserver/authclient.h"
+#include "authserver/authmgrclient.h"
+
+using namespace AuthServer;
+
+//====================================================================================================    
+CTRemoveAuthMethod::CTRemoveAuthMethod(CTAuthSvrServer& aParent): iParent(aParent)
+/**
+  Constructor
+ */
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KTForgetPlugin);
+	}
+
+CTRemoveAuthMethod::~CTRemoveAuthMethod()
+/**
+  Destructor
+ */
+	{
+	}
+	
+TVerdict CTRemoveAuthMethod::doTestStepPreambleL()
+/**
+  @return - TVerdict code
+  Override of base class virtual
+ */
+	{
+	//Call the parent class preamble, setting up the file server, etc
+	CTStepActSch::doTestStepPreambleL();
+	return TestStepResult();
+	}
+
+TVerdict CTRemoveAuthMethod::doTestStepL()
+/**
+  @return - Test step result (EPass or EFail)    
+ */
+	{	
+	SetTestStepResult(EPass);
+__UHEAP_MARK;		// Check for memory leaks
+
+	//-----------------------------------------------------------------------------------------------------
+	InitAuthServerFromFileL();	// Set things like 'iSupportsDefaultData' and 'DefaultPlugin'
+	
+	CActiveScheduler::Install(iActSchd);
+	//Connect to the AuthServer	
+	AuthServer::RAuthMgrClient authMgrClient1;	
+	TInt connectVal = authMgrClient1.Connect();
+	if (KErrNotFound == connectVal)
+		{
+		//Retry after a delay
+		TTimeIntervalMicroSeconds32 timeInterval = 2000;	//2 Milliseconds
+		User::After(timeInterval);
+		connectVal = authMgrClient1.Connect();
+		}
+	if (KErrNone != connectVal)
+		{
+		ERR_PRINTF2(_L("Unable to start a session or other connection error. Err = %d"), connectVal);
+		User::LeaveIfError(connectVal);		
+		}	
+	
+	CleanupClosePushL(authMgrClient1);
+	//-----------------------------------------------------------------------------------------------------
+	TBool statusAll = EFalse;
+	statusAll = CheckPluginStatusAllL(authMgrClient1);
+
+	TRAPD(res2, RemoveAuthMethodL(authMgrClient1) );
+	if(KErrNone != res2)
+		{
+		ERR_PRINTF2(_L("RemoveAuthMethodL() performed a Leave with code %d"), res2 );
+		SetTestStepError(res2);
+		SetTestStepResult(EFail);
+		}	
+	statusAll = CheckPluginStatusAllL(authMgrClient1);
+	if (!statusAll)
+		{
+		SetTestStepResult(EFail);
+		}
+		
+	CleanupStack::PopAndDestroy(&authMgrClient1);	// authClient1	
+	//Garbage collect the last previously destroyed implementation 
+	// and close the REComSession if no longer in use
+	REComSession::FinalClose(); 
+__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+
+
+TVerdict CTRemoveAuthMethod::doTestStepPostambleL()
+/**
+  @return - Pass or fail value of test step result
+ */
+	{
+	//Call the parent postamble, releasing the file handle, etc
+	CTStepActSch::doTestStepPostambleL();	
+	return TestStepResult();
+	}
+
+
+void CTRemoveAuthMethod::RemoveAuthMethodL (RAuthMgrClient& mgc)
+	{	
+	//If the pluginId is quoted in the ini file, check it's training status
+	TInt forgetPluginValue = 0;
+	TBool forgetUnknownId  = EFalse;
+
+
+	TBool ok =
+		GetHexFromConfig(ConfigSection(),_L("forgetPlugin"), forgetPluginValue);
+
+	GetBoolFromConfig(ConfigSection(),_L("forgetUnknown"), forgetUnknownId);
+	
+	if (ok)
+		{
+		// Get the most recently authenticated identity, which we want this plugin to forget.
+		TIdentityId identity = 0;
+
+		if (forgetUnknownId)
+		  {
+		  INFO_PRINTF1(_L("Forgetting for unknown identity!"));
+		  identity = 0;
+		  }
+		else
+		  {
+		  identity = getLastAuthId();
+		  }
+		
+		// now forget the plugin
+		RDebug::Printf("Forget %d, %d", identity, forgetPluginValue);
+		mgc.ForgetPluginL(identity, forgetPluginValue);
+		RDebug::Printf("DONE: Forget %d, %d", identity, forgetPluginValue);
+		}
+	else
+		{
+		INFO_PRINTF1(_L("missing parameters in the ini file!"));
+		SetTestStepResult(EFail);
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/step_removedbs.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 2005-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: 
+* step_retrainplugin.cpp
+* CTestStep derived implementation
+*
+*/
+
+ 
+#include "tAuthSvrStep.h"
+
+#include "authserver/authclient.h"
+#include "authserver/authmgrclient.h"
+
+using namespace AuthServer;
+
+//====================================================================================================
+
+CTRemoveDbs::CTRemoveDbs()
+/**
+ * Constructor
+ */
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KTRemoveDbs);
+	}
+
+CTRemoveDbs::~CTRemoveDbs()
+/**
+ * Destructor
+ */
+	{}
+	
+TVerdict CTRemoveDbs::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+	{
+	CTAuthSvrStepBase::doTestStepPreambleL();
+	
+	//SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTRemoveDbs::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ * 
+ */
+	{	
+	//If any test step leaves or panics, the test step thread won't exit, further calls are made.
+	// but the html log is updatead, so that subsequent failures could be traced here if necessary. 
+	if (TestStepResult() != EPass)
+		{
+		INFO_PRINTF1(_L("There was an error in a previous test step"));
+		//return TestStepResult();
+		}
+
+__UHEAP_MARK;		// Check for memory leaks
+
+	SetTestStepResult(EPass);
+	RemoveExistingDbL();
+	
+__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+
+
+TVerdict CTRemoveDbs::doTestStepPostambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+	{
+	//Call the parent postamble, releasing the file handle, etc
+	CTStepActSch::doTestStepPostambleL();
+	//INFO_PRINTF1(_L("Test Step Postamble"));
+	return TestStepResult();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/step_removeidentity.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,291 @@
+/*
+* Copyright (c) 2005-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: 
+* CTestStep derived implementation
+*
+*/
+
+ 
+#include "tAuthSvrStep.h"
+
+#include "authserver/authclient.h"
+#include "authserver/authmgrclient.h"
+
+using namespace AuthServer;
+
+/*
+class CAuthActive : CActive
+    {
+    public:
+    CAuthActive(RAuthMgrClient& aClient, TPluginId plugin1IdValue, TInt aFresh, TBool aStop = ETrue) : 
+         CActive(EPriorityNormal),
+         iClient(aClient),
+		 iResult(EFail),
+         iRunCount(0),
+         iStop(aStop),
+         pluginIdVal(plugin1IdValue),
+         iFresh(aFresh)
+         
+        {
+        CActiveScheduler::Add(this);
+        }
+    void doAuth() 
+        {
+        SetActive();		
+		TRequestStatus* status = &iStatus;		    
+		User::RequestComplete(status, KErrNone);
+		iRunCount = 0;
+        }
+	void DoCancel() 
+        {
+        }
+     void RunL() 
+        {
+        iErr = iStatus.Int();
+        if (iStatus.Int() != KErrNone)
+            {
+            }
+		switch (iRunCount)
+		  {
+		  case 0:
+            iStatus = KRequestPending;
+			iAe = AuthExpr(pluginIdVal);
+			iId = 0;
+
+			iClient.AuthenticateL(*iAe, iFresh, EFalse, EFalse, iId, iStatus);
+			SetActive();
+
+			break;
+		  case 1:
+			delete iAe;
+			iStatus = KRequestPending;
+			TRequestStatus* status;
+			status = &iStatus;				
+			User::RequestComplete(status, iErr);				
+			SetActive();
+			
+			break;
+   		  case 2:
+			iResult = iStatus.Int() == KErrNone ? EPass : EFail;
+            iErr = iStatus.Int();
+			if (iStop)
+                {
+                CActiveScheduler::Stop();
+                }
+
+			break;
+     	  default:
+			iResult = EFail;
+			
+			if (iStop)
+			    {
+			    CActiveScheduler::Stop();
+			    }
+		    }
+		  ++iRunCount;
+          }
+	RAuthMgrClient& iClient;
+	TVerdict iResult;
+	TInt iRunCount;
+	CAuthExpression* iAe;
+	CIdentity* iId;
+    TBool iStop;
+    TInt iErr;
+    TPluginId pluginIdVal;
+    TInt iFresh;
+    };
+    */
+//====================================================================================================    
+CTRemoveIdentity::CTRemoveIdentity(CTAuthSvrServer& aParent): iParent(aParent)
+/**
+ * Constructor
+ */
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KTRemoveIdentity);
+	}
+
+CTRemoveIdentity::~CTRemoveIdentity()
+/**
+ * Destructor
+ */
+	{}
+	
+TVerdict CTRemoveIdentity::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+	{
+	//Call the parent class preamble, setting up the file server, etc
+	CTStepActSch::doTestStepPreambleL();
+		
+	//SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTRemoveIdentity::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ * 
+ */
+	{	
+	//INFO_PRINTF1(_L("In CTRemoveIdentity doTestStepL"));
+	
+	//User::SetJustInTime(ETrue);	//a panic will kill just the thread, not the whole emulator.
+	
+	//If any test step leaves or panics, the test step thread won't exit, further calls are made.
+	// but the html log is updated, so that subsequent failures could be traced here if necessary. 
+	if (TestStepResult() != EPass)
+		{
+		ERR_PRINTF1(_L("There was an error in a previous test step"));
+		//return TestStepResult();
+		}
+
+	SetTestStepResult(EPass);
+
+__UHEAP_MARK;		// Check for memory leaks
+
+	//-----------------------------------------------------------------------------------------------------
+	InitAuthServerFromFileL();	// Set things like 'iSupportsDefaultData' and 'DefaultPlugin'
+	
+	CActiveScheduler::Install(iActSchd);
+	//Connect to the AuthServer	
+	AuthServer::RAuthMgrClient authMgrClient1;	
+	TInt connectVal = authMgrClient1.Connect();
+	if (KErrNotFound == connectVal)
+		{
+		//Retry after a delay
+		TTimeIntervalMicroSeconds32 timeInterval = 2000;	//2 Milliseconds
+		User::After(timeInterval);
+		connectVal = authMgrClient1.Connect();
+		}
+	if (KErrNone != connectVal)
+		{
+		ERR_PRINTF2(_L("Unable to start a session or other connection error. Err = %d"), connectVal);
+		User::LeaveIfError(connectVal);		
+		}	
+	
+	CleanupClosePushL(authMgrClient1);
+	//-----------------------------------------------------------------------------------------------------
+	/*
+	//Examine the authserver and see what's there
+	RAuthClient ac;
+	User::LeaveIfError(ac.Connect());
+	CleanupClosePushL(ac);
+	RPluginDescriptions pluginList1;
+	TCleanupItem cleanup(CleanupEComArray, &pluginList1);
+	CleanupStack::PushL(cleanup);				
+	
+	ac.PluginsL(pluginList1);	
+	TInt numTotalPlugins = pluginList1.Count();
+	for(TInt i = 0; i < numTotalPlugins; i++)
+		{
+		TInt presentPluginIdVal = pluginList1[i]->Id();
+		TInt presentPluginStatus = pluginList1[i]->TrainingStatus();
+		INFO_PRINTF3(_L("PluginId=%x,status =%i"), presentPluginIdVal,presentPluginStatus);
+		}
+	CleanupStack::PopAndDestroy(&pluginList1); //infoArray, results in a call to CleanupEComArray	
+	
+	//Check the username of the second identity and then attempt to set it.
+	//SetTestStepResult(checkAndSetUserNameL(ac, 0));
+	
+	CleanupStack::PopAndDestroy(&ac);	// authClient
+	//-----------------------------------------------------------------------------------------------------
+	*/
+
+	TBool statusAll = EFalse;
+	statusAll = CheckPluginStatusAllL(authMgrClient1);
+
+	// Authenticate by reading the user input
+	// Then call the removeIdentityL function
+	
+	TRAPD(res2, doRemoveIdentityL(authMgrClient1) );
+	if(KErrNone != res2)
+		{
+		ERR_PRINTF2(_L("doRemoveIdentityL() performed a Leave with code %d"), res2 );
+		//SetTestStepResult(EPass);
+		SetTestStepError(res2);
+		}
+	
+	/*	
+	TRAPD(res1, CheckSpecifiedPluginStatusL());
+	if(KErrNone != res1)
+		{
+		ERR_PRINTF2(_L("checkSpecifiedPluginStatusL() performed a Leave with code %d"), res1 );
+		}
+	*/
+	
+	statusAll = CheckPluginStatusAllL(authMgrClient1);
+	if (!statusAll)
+		{
+		SetTestStepResult(EFail);
+		}
+	else
+		{
+		INFO_PRINTF1(_L("Plugin Status OK !!"));
+		}
+
+	CleanupStack::PopAndDestroy(&authMgrClient1);	// authClient1	
+	//Garbage collect the last previously destroyed implementation 
+	// and close the REComSession if no longer in use
+	REComSession::FinalClose(); 
+__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+
+
+TVerdict CTRemoveIdentity::doTestStepPostambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+	{
+	//Call the parent postamble, releasing the file handle, etc
+	CTStepActSch::doTestStepPostambleL();
+	//INFO_PRINTF1(_L("Test Step Postamble"));
+	return TestStepResult();
+	}
+
+
+//
+//
+void CTRemoveIdentity::doRemoveIdentityL (RAuthMgrClient& mgc)
+	{	
+	
+	//If the pluginId is quoted in the ini file, check it's training status
+	TInt plugin1IdValue = 0;	
+	if (GetHexFromConfig(ConfigSection(),_L("plugin1Id"), plugin1IdValue) != EFalse) // the tag 'pluginId1' was present
+		{
+	 	//Read the identityId to be trained
+	 	TIdentityId idToRemove = getLastAuthId();
+
+		mgc.RemoveIdentityL(idToRemove);
+		
+		//Check to see if a retry is recommended
+		TBool retryRemoveValue = EFalse;
+		if (GetBoolFromConfig(ConfigSection(),_L("retryRemove"), retryRemoveValue) != EFalse) 
+			{
+			if (retryRemoveValue)
+				{ mgc.RemoveIdentityL(idToRemove); }
+			}
+		}
+		
+	else
+		{
+		INFO_PRINTF1(_L("plugin1Id was not specified in the ini file"));
+		}
+		
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/step_resetidentity.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,279 @@
+/*
+* Copyright (c) 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: 
+* CTestStep derived implementation
+*
+*/
+
+ 
+#include "tAuthSvrStep.h"
+#include <scs/cleanuputils.h>
+#include "authserver/authclient.h"
+#include "authserver/authmgrclient.h"
+
+using namespace AuthServer;
+
+_LIT(KResetType, "ResetType");
+_LIT(KResetTypeResetAll, "ResetAll");
+_LIT(KResetTypeResetByType, "ResetByType");
+_LIT(KResetTypeResetByList, "ResetByList");
+_LIT(KResetIdentityString, "IdentityString");
+_LIT(KResetRegDataSingle, "RegistrationData");
+_LIT(KResetPluginCount, "PluginCount");
+_LIT(KResetPluginId, "PluginId%d");
+_LIT(KResetRegData, "RegistrationData%d");
+_LIT(KResetPluginType, "PluginType");
+_LIT(KResetPluginTypeKnowledge, "EAuthKnowledge");
+_LIT(KResetPluginTypeToken, "EAuthToken");
+_LIT(KResetPluginTypeBiometric, "EAuthBiometric");
+
+
+CTResetIdentity::CTResetIdentity(CTAuthSvrServer& aParent): iParent(aParent)
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KTResetIdentity);
+	}
+
+CTResetIdentity::~CTResetIdentity()
+	{}
+
+TVerdict CTResetIdentity::doTestStepPreambleL()
+	{
+	// Call the parent class preamble, setting up the file server, etc
+	CTStepActSch::doTestStepPreambleL();
+	
+	return TestStepResult();
+	}
+
+TVerdict CTResetIdentity::doTestStepL()
+	{	
+	INFO_PRINTF1(_L("In CTResetIdentity doTestStepL"));
+
+	// If any test step leaves or panics, the test step thread won't exit, further calls are made.
+	// but the html log is updated, so that subsequent failures could be traced here if necessary. 
+	if (TestStepResult() != EPass)
+		{
+		ERR_PRINTF1(_L("There was an error in a previous test step"));
+		//return TestStepResult();
+		}
+
+	SetTestStepResult(EPass);
+
+__UHEAP_MARK;		// Check for memory leaks
+
+	//-----------------------------------------------------------------------------------------------------
+	InitAuthServerFromFileL();	// Set things like 'iSupportsDefaultData' and 'DefaultPlugin'
+	CActiveScheduler::Install(iActSchd);
+
+	TRAPD(res2, doResetIdentityL());
+	if(KErrNone != res2)
+		{
+		ERR_PRINTF2(_L("doResetIdentityL() performed a Leave with code %d"), res2 );
+		//SetTestStepResult(EPass);
+		SetTestStepError(res2);
+		}
+	
+	//Garbage collect the last previously destroyed implementation 
+	// and close the REComSession if no longer in use
+	REComSession::FinalClose(); 
+__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+
+TVerdict CTResetIdentity::doTestStepPostambleL()
+	{
+	// Call the parent postamble, releasing the file handle, etc
+	CTStepActSch::doTestStepPostambleL();
+	return TestStepResult();
+	}
+
+void CTResetIdentity::doResetIdentityL ()
+	{
+	INFO_PRINTF1(_L("In CTResetIdentity doResetIdentityL"));
+	// Read the identity string whose id which needs to be reset
+	TPtrC identityString;
+	if (!GetStringFromConfig(ConfigSection(), KResetIdentityString, identityString))
+		{
+		INFO_PRINTF1(_L("Identity string not found in the ini file"));
+		User::Leave(KErrNotFound);
+		}
+
+	TIdentityId identityId = KUnknownIdentity;
+	if (identityString != KNullDesC)
+		{
+		INFO_PRINTF1(_L("In doResetIdentityL Here1"));
+		// From the AuthDb get the id corresponding to the string
+		// Wait for authserver to release the db
+		WaitForServerToReleaseDb();
+		WaitForServerToReleaseDb();	// In debug mode AuthServer takes some time to terminate
+		INFO_PRINTF1(_L("In doResetIdentityL Here2"));
+		CAuthDb2* db = CAuthDb2::NewLC(iFs);
+		INFO_PRINTF1(_L("In doResetIdentityL Here3"));
+		RIdAndStringArray idList;
+		CleanupResetAndDestroyPushL(idList);
+		TRAPD(err, db->IdentitiesWithDescriptionL(idList));
+		INFO_PRINTF1(_L("In doResetIdentityL Here4"));
+		if (err != KErrNone)
+			{
+			INFO_PRINTF2(_L("CAuthDb::IdentitiesWithDescriptionL() failed with %d"), err);
+			User::Leave(err);
+			}
+		INFO_PRINTF2(_L("CAuthDb::IdentitiesWithDescriptionL() found %d identities"), idList.Count());
+		for (TInt index = 0; index < idList.Count(); ++index)
+			{
+			INFO_PRINTF2(_L("CAuthDb::IdentitiesWithDescriptionL() found identities %S"), idList[index]->String());
+			if (identityString.Compare(*idList[index]->String()) == 0)
+				{
+				identityId = idList[index]->Id();
+				break;
+				}
+			}
+		CleanupStack::PopAndDestroy(2, db); // idList
+		}
+	
+	// Get the reset type form the ini file and relevant details to do the reset
+	TPtrC resetType;
+	if (!GetStringFromConfig(ConfigSection(), KResetType, resetType))
+		{
+		INFO_PRINTF2(_L("%s was not specified in the ini file"), KResetType);
+		return;
+		}
+
+	AuthServer::RAuthMgrClient authMgrClient;
+	CleanupClosePushL(authMgrClient);
+	TInt err = authMgrClient.Connect();
+	if (err == KErrNotFound)
+		{
+		// Retry after a delay
+		TTimeIntervalMicroSeconds32 timeInterval = 2000;	// 2 Milliseconds
+		User::After(timeInterval);
+		err = authMgrClient.Connect();
+		}
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Unable to start a session or other connection error. Err = %d"), err);
+		User::Leave(err);
+		}
+
+	if (resetType == KResetTypeResetAll)
+		{
+		INFO_PRINTF1(_L("In CTResetIdentity doResetIdentityL KResetTypeResetAll"));
+		// Read the registration data
+		TPtrC regData;
+		if (!GetStringFromConfig(ConfigSection(), KResetRegDataSingle, regData))
+			{
+			INFO_PRINTF1(_L("Registration data was not specified in the ini file"));
+			User::Leave(KErrNotFound);
+			}
+		authMgrClient.ResetIdentityL(identityId, regData);
+		}
+	else if (resetType == KResetTypeResetByType)
+		{
+		INFO_PRINTF1(_L("In CTResetIdentity doResetIdentityL KResetTypeResetByType"));
+		// Get the plugin type
+		TPtrC pluginType;
+		if (!GetStringFromConfig(ConfigSection(), KResetPluginType, pluginType))
+			{
+			INFO_PRINTF1(_L("Plugin type was not specified in the ini file"));
+			User::Leave(KErrNotFound);
+			}
+		TAuthPluginType type;
+		if (pluginType == KResetPluginTypeKnowledge)
+			{
+			type = EAuthKnowledge;
+			}
+		else if (pluginType == KResetPluginTypeToken)
+			{
+			type = EAuthToken;
+			}
+		else if (pluginType == KResetPluginTypeBiometric)
+			{
+			type = EAuthBiometric;
+			}
+		else
+			{
+			INFO_PRINTF1(_L("Invalid plugin type was specified in the ini file"));
+			CleanupStack::PopAndDestroy(&authMgrClient);
+			return;
+			}
+		// Read the registration data
+		TPtrC regData;
+		if (!GetStringFromConfig(ConfigSection(), KResetRegDataSingle, regData))
+			{
+			INFO_PRINTF1(_L("Registration data was not specified in the ini file"));
+			User::Leave(KErrNotFound);
+			}
+		authMgrClient.ResetIdentityL(identityId, type, regData);
+		}
+	else if (resetType == KResetTypeResetByList)
+		{
+		// Read the reset information
+		INFO_PRINTF1(_L("In CTResetIdentity doResetIdentityL KResetTypeResetByList"));
+		// Get the plugin details
+		TInt pluginCount;
+		if (!GetIntFromConfig(ConfigSection(), KResetPluginCount, pluginCount))
+			{
+			INFO_PRINTF1(_L("PluginCount missing/invalid in the ini file"));
+			User::Leave(KErrNotFound);
+			}
+		RArray<TPluginId> pluginList;
+		CleanupClosePushL(pluginList);
+		RPointerArray<const HBufC> regDataList;
+		CleanupResetAndDestroyPushL(regDataList);
+		if (pluginCount > 0)
+			{
+			for (TInt index = 0; index < pluginCount; ++index)
+				{
+				HBufC* fmt = HBufC::NewLC(KResetPluginId().Length() + 10);
+				TPtr fmtPtr(fmt->Des());
+				fmtPtr.Format(KResetPluginId, index);
+				TInt pluginId;
+				if (!GetHexFromConfig(ConfigSection(), *fmt, pluginId))
+					{
+					INFO_PRINTF2(_L("%S missing in the ini file"), fmt);
+					User::Leave(KErrNotFound);
+					}
+				pluginList.AppendL(static_cast<TPluginId>(pluginId));
+				CleanupStack::PopAndDestroy(fmt);
+				fmt = HBufC::NewLC(KResetRegData().Length() + 10);
+				fmtPtr.Set(fmt->Des());
+				fmtPtr.Format(KResetRegData, index);
+				TPtrC regData;
+				if (!GetStringFromConfig(ConfigSection(), *fmt, regData))
+					{
+					INFO_PRINTF2(_L("%S missing in the ini file"), fmt);
+					User::Leave(KErrNotFound);
+					}
+				HBufC* reg = regData.AllocLC();
+				regDataList.AppendL(reg);	// Takes ownership
+				CleanupStack::Pop(reg);
+				CleanupStack::PopAndDestroy(fmt);
+				}
+			}
+		else
+			{
+			// If plugin count is negative, simulate a condition where the pluginList count != regDataList count
+			pluginList.AppendL(0);
+			}
+		authMgrClient.ResetIdentityL(identityId, pluginList, regDataList);
+		CleanupStack::PopAndDestroy(2, &pluginList); // regDataList
+		}
+	else
+		{
+		INFO_PRINTF1(_L("Invalid reset type was specified in the ini file."));
+		User::Leave(KErrNotFound);
+		}
+	
+	CleanupStack::PopAndDestroy(&authMgrClient);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/step_resultavailability.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,586 @@
+/*
+* Copyright (c) 2008-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 "tAuthSvrStep.h"
+#include <s32file.h>
+using namespace AuthServer;
+class CAuthActive3 : public CActive
+    {
+    public:
+    CAuthActive3(RAuthMgrClient& aClient, CAuthExpression* aExpr,
+				 TInt aFresh, TBool aClientSpecific, TBool aStop = ETrue) : 
+         CActive(EPriorityNormal),
+         iClient(aClient),
+		 iResult(EFail),
+         iRunCount(0),
+         iAe(aExpr),
+         iStop(aStop),
+         iFresh(aFresh),
+         iIdToStore(0), 
+         iClientSpecific(aClientSpecific)
+        {
+        CActiveScheduler::Add(this);
+        }
+    void doAuth() 
+        {
+        SetActive();		
+		TRequestStatus* status = &iStatus;		    
+		User::RequestComplete(status, KErrNone);
+		iRunCount = 0;
+        }
+    void doDeAuth()
+        {
+        iClient.DeauthenticateL();
+        }
+	void DoCancel() 
+        {
+        }
+     void RunL() 
+        {
+        iErr = iStatus.Int();
+		switch (iRunCount)
+		  {
+		  case 0:
+            iStatus = KRequestPending;
+			iId = 0;
+
+			iClient.AuthenticateL(*iAe, iFresh, iClientSpecific, EFalse, iId, iStatus);
+			SetActive();
+
+			break;
+		  case 1:
+			if (0 != iId)
+				{
+				iIdToStore = iId->Id();
+				delete iId;
+				}
+			iStatus = KRequestPending;
+			TRequestStatus* status;
+			status = &iStatus;				
+			User::RequestComplete(status, iErr);				
+			SetActive();
+			
+			break;
+   		  case 2:
+			iResult = iStatus == KErrNone ? EPass : EFail;
+            iErr = iStatus.Int();
+			if (iStop)
+                {
+                CActiveScheduler::Stop();
+                }
+
+			break;
+     	  default:
+			iResult = EFail;
+			
+			if (iStop)
+				{
+			    CActiveScheduler::Stop();
+			    }
+		    }
+		  ++iRunCount;
+          }
+	RAuthMgrClient& iClient;
+	TVerdict iResult;
+	TInt iRunCount;
+	CAuthExpression* iAe;
+	CIdentity* iId;
+    TBool iStop;
+    TInt iErr;
+    TInt iFresh;
+    TIdentityId iIdToStore;
+    TBool iClientSpecific;
+    };
+
+//====================================================================================================
+
+
+class CRegActive2 : public CActive
+    {
+    public:
+    CRegActive2(RAuthMgrClient& aClient, CIdentity*& aResult) : 
+         CActive(EPriorityNormal),
+         iFirstTime(true),
+         iClient(aClient), 
+         iResult(aResult),
+         iErr(KErrNone)
+        {
+        CActiveScheduler::Add(this);
+        }
+    void doReg()
+        {
+        SetActive();		
+		TRequestStatus* status = &iStatus;
+		User::RequestComplete(status, KErrNone);
+		iFirstTime = ETrue;
+        }
+        void DoCancel() 
+        {
+        }
+     void RunL() 
+        {
+        iErr = iStatus.Int();
+        if (iFirstTime)
+            {
+			SetActive();
+            iStatus = KRequestPending;
+            iClient.RegisterIdentityL(iResult, _L("SOMENAME"), iStatus);
+            iFirstTime = false;
+            }
+        else
+            {
+            iErr = iStatus.Int();
+            CActiveScheduler::Stop();
+			}
+        }
+        
+    TBool iFirstTime;
+    RAuthMgrClient& iClient;
+    CIdentity*& iResult;
+    TInt iErr;
+    };
+//====================================================================================================     
+CResultAvailability::~CResultAvailability()
+/**
+  Destructor
+ */
+	{}
+
+CResultAvailability::CResultAvailability(CTAuthSvrServer& aParent): iParent(aParent)
+/**
+  Constructor
+ */
+	{
+	
+	SetTestStepName(KTResultAvailability);
+	}
+
+TVerdict CResultAvailability::doTestStepPreambleL()
+/**
+  @return - TVerdict code
+
+ */
+	{
+
+	CTStepActSch::doTestStepPreambleL();	
+	return TestStepResult();
+	}
+
+
+TVerdict CResultAvailability::doTestStepL()
+	{
+		SetTestStepResult(EFail);	
+		__UHEAP_MARK;		// Check for memory leaks
+
+		//-----------------------------------------------------------------------------------------------------	
+		//Get the Identity published by KUidAuthServerLastAuth property .
+		
+		TLastAuth lastAuth;
+		TPckg<TLastAuth> authPkg(lastAuth);
+		RProperty::Get(KAuthServerSecureId, KUidAuthServerLastAuth, authPkg);
+		
+		//Get the Last Authenticated Id from the authsvrpolicy.ini file
+		
+		TPtrC userIdString;
+		GetStringFromConfig(ConfigSection(),_L("LastAuthId"), userIdString);
+		
+		TLex lex = TLex(userIdString);
+		TUint userId(0);
+		
+		lex.Val(userId);
+		INFO_PRINTF3(_L("The UserId published by KUidAuthServerLastAuth property is %x and the UserId from AuthSvrPolicy.ini is %x"), lastAuth.iId, userId );
+		if(lastAuth.iId == userId )
+			{
+			SetTestStepResult(EPass);	
+
+			}
+
+		 __UHEAP_MARKEND;
+		 return TestStepResult();
+	}
+TVerdict CResultAvailability::doTestStepPostambleL()
+/**
+  @return - TVerdict code
+
+ */
+	{
+	
+	CTStepActSch::doTestStepPostambleL();
+	return TestStepResult();
+	}
+//====================================================================================================
+CResultChangeNotify::~CResultChangeNotify()
+/**
+  Destructor
+ */
+	{}
+
+CResultChangeNotify::CResultChangeNotify(CTAuthSvrServer& aParent): iParent(aParent)
+/**
+  Constructor
+ */
+	{
+	
+	SetTestStepName(KTResultChangeNotify);
+	}
+
+TVerdict CResultChangeNotify::doTestStepPreambleL()
+/**
+  @return - TVerdict code
+
+ */
+	{
+
+	CTStepActSch::doTestStepPreambleL();	
+	return TestStepResult();
+	}
+
+TVerdict CResultChangeNotify::doTestStepL()
+	{
+	SetTestStepResult(EPass);	
+	__UHEAP_MARK;		// Check for memory leaks
+	SetPinPluginStateL();
+
+	//-----------------------------------------------------------------------------------------------------	
+	InitAuthServerFromFileL();	// Set things like 'iSupportsDefaultData' and 'DefaultPlugin'
+	
+	// this method creates the dat file from where the test implementation
+	// of pin plugin notifier reads user input.
+	// as the pin plugin fails without this data it has been included 
+	// in the code as a default step for initializing the pin plugin
+	// data.
+	TPinValue aPinValue;
+	CreatePinPluginInputFileL(EPinPluginTraining,aPinValue);
+	CActiveScheduler::Install(iActSchd);
+	
+	// KUidAuthServerAuthChangeEvent Property retrieves the last authenticated identity
+	TInt AuthIdChange = 0;
+	RProperty::Get(KAuthServerSecureId, KUidAuthServerAuthChangeEvent, AuthIdChange);
+	INFO_PRINTF2(_L("Last Authenticated Identity is %x" ), AuthIdChange );
+	
+	//Connect to the AuthServer	
+	AuthServer::RAuthMgrClient authMgrClient;	
+	TInt connectVal = authMgrClient.Connect();
+	if (KErrNotFound == connectVal)
+		{
+			//Retry after a delay
+			TTimeIntervalMicroSeconds32 timeInterval = 2000;	//2 Milliseconds
+			User::After(timeInterval);
+			connectVal = authMgrClient.Connect();
+		}
+	if (KErrNone != connectVal)
+		{
+		ERR_PRINTF2(_L("Unable to start a session or other connection error. Err = %d"), connectVal);
+		User::LeaveIfError(connectVal);		
+		}	
+		
+	CleanupClosePushL(authMgrClient);
+
+	
+	//Register a new Identity
+	INFO_PRINTF1(_L("Registering a new Identity"));
+	CIdentity* identity = 0;
+	CRegActive2 regactive(authMgrClient, identity);
+	regactive.doReg();
+	CActiveScheduler::Start();
+	
+	if (0 != identity)
+	  	{
+	  		INFO_PRINTF1(_L("Registration Successful"));
+	  		INFO_PRINTF3(_L("Id = %x , KeyLength = %d\n"), identity->Id(), identity->Key().KeyData().Size());
+	  	}
+			
+	
+
+	//Authenticate the new Id.
+	
+	TPtrC exprString;	
+	TInt deAuth;
+	if (GetStringFromConfig(ConfigSection(), _L("plugin1Id"), exprString) != EFalse) // the tag 'pluginId1' was present
+		{
+				 	
+			TInt freshnessVal = 0;	//Default value
+			//Retrieve the value of 'freshness' from the ini file, but if it's absent use the default value
+			 if(GetIntFromConfig(ConfigSection(), _L("freshness"), freshnessVal) == EFalse)
+				 {
+				 	freshnessVal = 10;
+				 }
+				 		
+			TBool clientSpecificKeyVal = EFalse;	 	
+			//Retrieve the value of 'clientSpecificKey' from the ini file, but if it's absent use the default value
+			if(GetBoolFromConfig(ConfigSection(), _L("clientSpecificKey"), clientSpecificKeyVal) == EFalse)
+				 {
+				 	clientSpecificKeyVal = EFalse;
+				 }	 	
+				
+			if(GetIntFromConfig(ConfigSection(), _L("deauth"), deAuth) == EFalse)
+				{
+					deAuth = 0;
+				}
+			
+			TBool stop;
+			if(GetBoolFromConfig(ConfigSection(), _L("stop"), stop ) == EFalse)
+							{
+								stop = ETrue;
+							}
+			
+			//Create a CResultPropertyWatch object which subscribes to the KUidAuthServerAuthChangeEvent Property
+					
+			CResultPropertyWatch* watch = CResultPropertyWatch::NewLC();
+					
+				
+			//Train the plugin again with this identity.
+			CAuthExpression* expr = CreateAuthExprLC(exprString);
+		
+			CAuthActive3 authactive(authMgrClient, expr, freshnessVal, clientSpecificKeyVal,stop);
+	
+			INFO_PRINTF1(_L("Authenticating the new Identity"));
+			authactive.doAuth();		
+			CActiveScheduler::Start();
+		
+			//Check if Authentication successful.
+			if(authactive.iIdToStore)
+				{
+					INFO_PRINTF2(_L(" Successful Authentication Id = %x"), authactive.iIdToStore);
+				}
+			else
+				{
+					INFO_PRINTF1(_L(" Authentication Failed ."));
+				}
+			
+			if(watch->iNotified)
+				{
+				TInt AuthIdChange;
+					
+				//Get the published value
+				RProperty::Get(KAuthServerSecureId, KUidAuthServerAuthChangeEvent, AuthIdChange);	
+				INFO_PRINTF2(_L("Successfully received Notification. New User Identity is %x " ), AuthIdChange );
+				}
+			else
+				{
+				INFO_PRINTF1(_L("No Notification received "));
+				}
+			CleanupStack::PopAndDestroy(2,watch);
+			//Authenticate the same User again to verify that KUidAuthServerAuthChangeEvent 
+			//does not get published again
+			
+			//Create a CResultPropertyWatch object which subscribes to the KUidAuthServerAuthChangeEvent Property
+			
+			CResultPropertyWatch* watch2 = CResultPropertyWatch::NewLC();	
+			
+			CAuthExpression* expr2 = CreateAuthExprLC(exprString);
+			CAuthActive3 authactive2(authMgrClient, expr, freshnessVal, clientSpecificKeyVal);
+			authactive2.doAuth();		
+			CActiveScheduler::Start();
+		
+			//Check if Authentication successful.
+			if(authactive.iIdToStore)
+				{
+					INFO_PRINTF2(_L(" Successful Authentication Id = %x"), authactive.iIdToStore);
+				}
+			else
+				{
+					INFO_PRINTF1(_L(" Authentication Failed ."));
+					
+				}
+						
+			if(watch2->iNotified)
+				{
+					TInt AuthIdChange;	
+					//Get the published value
+					RProperty::Get(KAuthServerSecureId, KUidAuthServerAuthChangeEvent, AuthIdChange);	
+					INFO_PRINTF2(_L("Successfully received Notification. New User Identity is %x " ), AuthIdChange );
+					SetTestStepResult(EFail);
+				}
+			else
+				{
+					INFO_PRINTF1(_L("No Notification received "));
+				}
+			CleanupStack::PopAndDestroy(2,watch2);
+			// If deAuth flag is set ,subscribe to the KUidAuthServerAuthChangeEvent property
+			// and deauthenticate 
+			if(deAuth)
+			{
+								
+				INFO_PRINTF1(_L(" Trying to DeAuthenticate "));
+				//Creating a subscriber active object
+				CResultPropertyWatch* watch3 = CResultPropertyWatch::NewLC();
+		
+				TInt err;
+				TRAP(err,authactive.doDeAuth());
+				CActiveScheduler::Start();
+		
+				if(err != KErrNone)
+					{
+					INFO_PRINTF1(_L(" DeAuthentication Failed "));
+					SetTestStepResult(EFail);
+
+					}
+				else
+					{
+					INFO_PRINTF1(_L(" DeAuthentication Succeeded "));
+					}
+				
+				if(watch3->iNotified)
+					{
+					TInt AuthIdChange;	
+					//Get the published value
+					RProperty::Get(KAuthServerSecureId, KUidAuthServerAuthChangeEvent, AuthIdChange);	
+					INFO_PRINTF2(_L("Successfully received Notification. New User Identity is %x " ), AuthIdChange );
+					}
+				else
+					{
+					INFO_PRINTF1(_L(" No Notification of the change in the Authenticated Identity "));
+					SetTestStepResult(EFail);
+					}
+				CleanupStack::PopAndDestroy(watch3);
+				INFO_PRINTF1(_L(" Checking the Id published by KUidAuthServerLastAuth upon DeAuthentication"));
+				TLastAuth lastAuth;
+				TPckg<TLastAuth> authPkg(lastAuth);
+				RProperty::Get(KAuthServerSecureId, KUidAuthServerLastAuth, authPkg);
+		
+				INFO_PRINTF2(_L("Id published by KUidAuthServerLastAuth = %x"), lastAuth.iId);
+		
+				if(lastAuth.iId != 0)
+					{
+					SetTestStepResult(EFail);
+					}
+			
+				}
+			}
+			
+		RemovePinPluginFileL();	
+		delete identity;
+		CleanupStack::PopAndDestroy(&authMgrClient);
+		 __UHEAP_MARKEND;
+		 return TestStepResult();
+	}
+
+	
+void CResultChangeNotify::SetPinPluginStateL()
+	{
+	TPtrC activeStateFromFile;
+	
+	_LIT(KPinPlugin,"pinplugin_inactive.txt");
+	
+	TFileName filename;
+	filename.Copy(KPinPlugin); // convert from 8 -> 16 bit descriptor
+		
+	TDriveUnit sysDrive = RFs::GetSystemDrive();
+	TDriveName sysDriveName (sysDrive.Name());
+	filename.Insert(0,sysDriveName);
+	filename.Insert(2,_L("\\"));		
+	
+	RFileWriteStream stream;
+	RFs fs;
+	CleanupClosePushL(fs);
+	User::LeaveIfError(fs.Connect());
+	fs.Delete(filename);
+		
+	if (GetStringFromConfig(ConfigSection(),_L("Pin200032E5Active"), activeStateFromFile)) 
+		{
+		if(activeStateFromFile == _L("false"))
+			{		
+			User::LeaveIfError(stream.Create(fs, filename, EFileWrite | EFileShareExclusive));
+			stream.Close();
+			}
+		}
+	CleanupStack::PopAndDestroy(); // fs
+	}
+
+void CResultChangeNotify::RemovePinPluginFileL()
+	{
+	TPtrC activeStateFromFile;
+	_LIT(KPinPlugin,"pinplugin_inactive.txt");
+	TFileName filename;
+	filename.Copy(KPinPlugin); // convert from 8 -> 16 bit descriptor
+			
+	TDriveUnit sysDrive = RFs::GetSystemDrive();
+	TDriveName sysDriveName (sysDrive.Name());
+	filename.Insert(0,sysDriveName);
+	filename.Insert(2,_L("\\"));
+		
+	RFs fs;
+	CleanupClosePushL(fs);
+	User::LeaveIfError(fs.Connect());
+	fs.Delete(filename);
+	CleanupStack::PopAndDestroy(); // fs
+	}
+
+
+TVerdict CResultChangeNotify::doTestStepPostambleL()
+/**
+  @return - TVerdict code
+
+ */
+	{
+	
+	CTStepActSch::doTestStepPostambleL();
+	return TestStepResult();
+	}
+
+//====================================================================================================     
+
+
+CResultPropertyWatch* CResultPropertyWatch::NewLC()
+{
+	CResultPropertyWatch* me=new(ELeave) CResultPropertyWatch;
+	CleanupStack::PushL(me);
+	me->ConstructL();
+	return me;
+}
+
+CResultPropertyWatch::CResultPropertyWatch() :CActive(EPriority)
+	{
+		iNotified = EFalse;
+	}
+
+
+void CResultPropertyWatch::ConstructL()
+{
+	User::LeaveIfError(iProperty.Attach(KAuthServerSecureId,
+			 KUidAuthServerAuthChangeEvent));
+	CActiveScheduler::Add(this);
+	// Subscribe to the KUidAuthServerAuthChangeEvent property
+	iProperty.Subscribe(iStatus);
+	SetActive();
+	
+	}
+CResultPropertyWatch::~CResultPropertyWatch()
+{
+	Cancel();
+	iProperty.Close();
+
+}
+void CResultPropertyWatch::DoCancel()
+{
+	iProperty.Cancel();
+}
+void CResultPropertyWatch::RunL()
+{	
+	TInt AuthIdChange;
+	
+	//Get the published value
+	iProperty.Get(KAuthServerSecureId, KUidAuthServerAuthChangeEvent, AuthIdChange);
+	iNotified = ETrue;
+	RDebug::Print(_L("Received Notification. New User Identity is %x " ), AuthIdChange );
+	CActiveScheduler::Stop();
+		
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/step_retrainplugin.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,257 @@
+/*
+* Copyright (c) 2006-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: 
+* CTestStep derived implementation
+*
+*/
+
+ 
+#include "tAuthSvrStep.h"
+
+#include "authserver/authclient.h"
+#include "authserver/authmgrclient.h"
+
+using namespace AuthServer;
+
+
+//====================================================================================================
+
+class CTrainActive : public CActive
+    {
+    public:    
+    CTrainActive(RAuthMgrClient& aClient, TPluginId plugin1IdValue, TIdentityId iIdFromFile, TBool aStop = ETrue) : 
+         CActive(EPriorityNormal),
+         iClient(aClient),
+		 iResult(EFail),
+         iRunCount(0),
+         iStop(aStop),
+         pluginIdVal(plugin1IdValue),         
+         idToTrain (iIdFromFile)
+        {
+        CActiveScheduler::Add(this);
+        }
+    void doTrain() 
+        {
+
+        SetActive();		
+		TRequestStatus* status = &iStatus;		    
+		User::RequestComplete(status, KErrNone);
+		iRunCount = 0;
+        }
+        void DoCancel() 
+        {
+        }
+     void RunL() 
+        {
+        iErr = iStatus.Int();
+        if (iStatus.Int() != KErrNone)
+            {
+            }
+		switch (iRunCount)
+		  {
+		  case 0:
+				iStatus = KRequestPending;
+	            iClient.TrainPlugin(idToTrain, pluginIdVal, iStatus);
+				SetActive();
+			break;
+
+   		  case 1:
+			iResult = iStatus.Int() == KErrNone ? EPass : EFail;
+            iErr = iStatus.Int();
+			if (iStop)
+                {
+                CActiveScheduler::Stop();
+                }
+
+			break;
+
+     	  default:
+			iResult = EFail;
+			
+			if (iStop)
+			    {
+			    CActiveScheduler::Stop();
+			    }
+		    }
+		  ++iRunCount;
+          }
+	RAuthMgrClient& iClient;
+	TVerdict iResult;
+	TInt iRunCount;
+    TBool iStop;
+    TInt iErr;
+    TPluginId pluginIdVal;
+    TIdentityId idToTrain;
+    };
+    
+//====================================================================================================    
+CTRetrainPlugin::CTRetrainPlugin(CTAuthSvrServer& aParent): iParent(aParent)
+/**
+  Constructor
+ */
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KTRetrainPlugin);
+	}
+
+CTRetrainPlugin::~CTRetrainPlugin()
+/**
+  Destructor
+ */
+	{}
+	
+TVerdict CTRetrainPlugin::doTestStepPreambleL()
+/**
+  @return - TVerdict code
+  Override of base class virtual
+ */
+	{
+	//Call the parent class preamble, setting up the file server, etc
+	CTStepActSch::doTestStepPreambleL();
+	return TestStepResult();
+	}
+
+TVerdict CTRetrainPlugin::doTestStepL()
+/**
+  @return - TVerdict code indicating the test step result    
+ */
+	{
+	SetTestStepResult(EPass);
+
+__UHEAP_MARK;		// Check for memory leaks
+
+	//-----------------------------------------------------------------------------------------------------
+	InitAuthServerFromFileL();	// Set things like 'iSupportsDefaultData' and 'DefaultPlugin'
+	
+	CActiveScheduler::Install(iActSchd);
+	//Connect to the AuthServer	
+	AuthServer::RAuthMgrClient authMgrClient1;	
+	TInt connectVal = authMgrClient1.Connect();
+	if (KErrNotFound == connectVal)
+		{
+		//Retry after a delay
+		TTimeIntervalMicroSeconds32 timeInterval = 2000;	//2 Milliseconds
+		User::After(timeInterval);
+		connectVal = authMgrClient1.Connect();
+		}
+	if (KErrNone != connectVal)
+		{
+		ERR_PRINTF2(_L("Unable to start a session or other connection error. Err = %d"), connectVal);
+		User::LeaveIfError(connectVal);		
+		}	
+	
+	CleanupClosePushL(authMgrClient1);
+
+	//-----------------------------------------------------------------------------------------------------
+	//Check the username of the second identity and then attempt to set it.
+	//SetTestStepResult(checkAndSetUserNameL(ac, 0));
+
+	TBool statusAll = EFalse;
+	statusAll = CheckPluginStatusAllL(authMgrClient1);
+	
+	TRAPD(res2, RetrainPlugin(authMgrClient1) );
+	if(KErrNone != res2)
+		{
+		ERR_PRINTF2(_L("RetrainPluginL() performed a Leave with code %d"), res2 );
+		}
+		
+	TRAPD(res1, CheckSpecifiedPluginStatusL());
+	if(KErrNone != res1)
+		{
+		ERR_PRINTF2(_L("checkSpecifiedPluginStatusL() performed a Leave with code %d"), res1 );
+		}
+	
+	statusAll = CheckPluginStatusAllL(authMgrClient1);
+	if (!statusAll)
+		{
+		SetTestStepResult(EFail);
+		}
+	
+	CleanupStack::PopAndDestroy(&authMgrClient1);	// authClient1	
+	//Garbage collect the last previously destroyed implementation 
+	// and close the REComSession if no longer in use
+	REComSession::FinalClose(); 
+__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+
+
+TVerdict CTRetrainPlugin::doTestStepPostambleL()
+/**
+  @return - TVerdict code  
+ */
+	{
+	//Call the parent postamble, releasing the file handle, etc
+	CTStepActSch::doTestStepPostambleL();	
+	return TestStepResult();
+	}
+
+/**
+  Retrain the plugin and set the test step error value as required.
+ */
+void CTRetrainPlugin::RetrainPlugin (RAuthMgrClient& mgc)
+	{	
+	
+	//If the pluginId is quoted in the ini file, check it's training status
+	TInt plugin1IdValue = 0;	
+	if (GetHexFromConfig(ConfigSection(),_L("plugin1Id"), plugin1IdValue) != EFalse) // the tag 'pluginId1' was present
+		{ 	
+	 	//Read the identityId to be trained
+	 	TIdentityId idToTrain = getLastAuthId();
+	 	INFO_PRINTF2(_L("Id to be (re)trained: %u"), idToTrain);
+	 	
+	 	//Train the plugin again with this identity. 	    
+ 	    CTrainActive active(mgc, plugin1IdValue, idToTrain);
+	    active.doTrain();		
+		CActiveScheduler::Start();		
+		
+		SetTestStepError(active.iErr);
+		
+		if (KErrAuthServPluginCancelled == active.iErr)
+			{
+			INFO_PRINTF1(_L("Training was cancelled."));
+			INFO_PRINTF1(_L("User entered trainingInput same as identifyingInput or an existing PIN."));
+			INFO_PRINTF1(_L("Or the Cancel code."));			
+			SetTestStepError(KErrAuthServPluginCancelled);
+			}
+		if (KErrAuthServPluginQuit == active.iErr)
+			{
+			INFO_PRINTF1(_L("Training was quit."));
+			INFO_PRINTF1(_L("User entered the Quit code as trainingInput."));						
+			SetTestStepError(KErrAuthServPluginQuit);
+			}
+		else if(EPass != active.iResult)
+			{
+			ERR_PRINTF3(_L("Training Result error = %d, iResult = %d\n"), active.iErr, active.iResult);			
+			SetTestStepError(active.iErr);
+			SetTestStepResult (EFail);
+			}
+		else if ((KErrNone == active.iErr) && (EPass == active.iResult))
+			{
+			INFO_PRINTF1(_L("(Re)train successful."));
+			SetTestStepResult (EPass);
+			}
+		else
+			{
+			ERR_PRINTF3(_L("Unexpected Training Result. error = %d, iResult = %d\n"), active.iErr, active.iResult);
+			SetTestStepError(active.iErr);
+			SetTestStepResult (EFail);
+			}		
+		}
+		
+	else
+		{
+		INFO_PRINTF1(_L("plugin1Id was not specified in the ini file"));
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/step_setauthprefs.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,187 @@
+/*
+* Copyright (c) 2006-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: 
+* CTestStep derived implementation
+*
+*/
+
+ 
+#include "tAuthSvrStep.h"
+
+#include "authserver/authclient.h"
+#include "authserver/authmgrclient.h"
+
+using namespace AuthServer;
+
+//====================================================================================================    
+CTSetAuthPrefs::CTSetAuthPrefs(CTAuthSvrServer& aParent): iParent(aParent)
+/**
+  Constructor
+ */
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KTSetPrefs);
+	}
+
+CTSetAuthPrefs::~CTSetAuthPrefs()
+/**
+  Destructor
+ */
+	{}
+	
+TVerdict CTSetAuthPrefs::doTestStepPreambleL()
+/**
+  @return - TVerdict code
+  Override of base class virtual
+ */
+	{
+	//Call the parent class preamble, setting up the file server, etc
+	CTStepActSch::doTestStepPreambleL();		
+	
+	return TestStepResult();
+	}
+
+TVerdict CTSetAuthPrefs::doTestStepL()
+/**
+  @return - TVerdict code
+  Override of base class pure virtual
+  
+ */
+	{	
+	//If any test step leaves or panics, the test step thread won't exit, further calls are made.
+	// but the html log is updatead, so that subsequent failures could be traced here if necessary. 
+	if (TestStepResult() != EPass)
+		{
+		ERR_PRINTF1(_L("There was an error in a previous test step"));
+		return TestStepResult();
+		}
+
+	SetTestStepResult(EPass);
+
+__UHEAP_MARK;		// Check for memory leaks
+
+	//-----------------------------------------------------------------------------------------------------
+	InitAuthServerFromFileL();	// Set things like 'iSupportsDefaultData' and 'DefaultPlugin'
+	
+	//Connect to the AuthServer	
+	AuthServer::RAuthMgrClient authMgrClient;	
+	TInt connectVal = authMgrClient.Connect();
+	if (KErrNotFound == connectVal)
+		{
+		//Retry after a delay
+		TTimeIntervalMicroSeconds32 timeInterval = 2000;	//2 Milliseconds
+		User::After(timeInterval);
+		connectVal = authMgrClient.Connect();
+		}
+	if (KErrNone != connectVal)
+		{
+		ERR_PRINTF2(_L("Unable to start a session or other connection error. Err = %d"), connectVal);
+		User::LeaveIfError(connectVal);		
+		}	
+	
+	CleanupClosePushL(authMgrClient);
+	
+	AuthServer::RAuthClient authClient;
+			
+	connectVal = authClient.Connect();
+	if (KErrNotFound == connectVal)
+		{
+		//Retry after a delay
+		TTimeIntervalMicroSeconds32 timeInterval = 2000;	//2 Milliseconds
+		User::After(timeInterval);
+		connectVal = authClient.Connect();
+		}
+	if (KErrNone != connectVal)
+		{
+		ERR_PRINTF2(_L("Unable to start a session or other connection error. Err = %d"), connectVal);
+		User::LeaveIfError(connectVal);		
+		}	
+	
+	CleanupClosePushL(authClient);
+	//-----------------------------------------------------------------------------------------------------
+	TRAPD(res2, SetAuthPrefsL(authMgrClient, authClient) );
+	if(KErrNone != res2)
+		{
+		ERR_PRINTF2(_L("SetAuthPrefsL() performed a Leave with code %d"), res2 );
+		SetTestStepError(res2);
+		SetTestStepResult(EFail);
+		}
+		
+	CleanupStack::PopAndDestroy(2,&authMgrClient);	// authClient, authMgrClient 	
+	//Garbage collect the last previously destroyed implementation 
+	// and close the REComSession if no longer in use
+	REComSession::FinalClose(); 
+__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+
+
+TVerdict CTSetAuthPrefs::doTestStepPostambleL()
+/**
+  @return - TVerdict code
+  Override of base class virtual
+ */
+	{
+	//Call the parent postamble, releasing the file handle, etc
+	CTStepActSch::doTestStepPostambleL();
+	return TestStepResult();
+	}
+
+
+void CTSetAuthPrefs::SetAuthPrefsL (AuthServer::RAuthMgrClient& aAuthMgrClient, 
+									AuthServer::RAuthClient& aAuthClient)
+	{	
+	TInt plugin = KUnknownPluginId;
+
+	TBool done = EFalse;
+
+	if (GetHexFromConfig(ConfigSection(),KDefauthPrefsTag, plugin))
+	  {
+	  aAuthMgrClient.SetPreferredTypePluginL(EAuthDefault, plugin);
+	  if(aAuthClient.PreferredTypePluginL(EAuthDefault) == plugin)
+		  {
+		  done = ETrue;
+		  }
+	  }
+	if (GetHexFromConfig(ConfigSection(),KKnowledgePrefsTag, plugin))
+	  {
+	  aAuthMgrClient.SetPreferredTypePluginL(EAuthKnowledge, plugin);
+	  if(aAuthClient.PreferredTypePluginL(EAuthKnowledge) == plugin)
+  		  {
+  		  done = ETrue;
+  		  }
+	  }
+	if (GetHexFromConfig(ConfigSection(),KBiometricPrefsTag, plugin))
+	  {
+	  aAuthMgrClient.SetPreferredTypePluginL(EAuthBiometric, plugin);
+	  if(aAuthClient.PreferredTypePluginL(EAuthBiometric) == plugin)
+  		  {
+  		  done = ETrue;
+  		  }
+	  }
+	if (GetHexFromConfig(ConfigSection(),KTokenPrefsTag, plugin))
+	  {
+	  aAuthMgrClient.SetPreferredTypePluginL(EAuthToken, plugin);
+	  if(aAuthClient.PreferredTypePluginL(EAuthToken) == plugin)
+  		  {
+  		  done = ETrue;
+  		  }
+	  }
+
+	if (!done)
+	  {
+		INFO_PRINTF1(_L("missing parameters in the ini file!"));
+		SetTestStepResult(EFail);
+	  }
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/tAuthSvrServer.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,198 @@
+/*
+* Copyright (c) 2005-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: 
+* Test code for the TestExecute Server
+*
+*/
+
+
+
+#include "tAuthSvrServer.h"
+#include "tAuthSvrStep.h"
+
+
+CTAuthSvrServer* CTAuthSvrServer::NewL()
+/**
+ * @return - Instance of the test server
+ * Called inside the MainL() function to create and start the
+ * CTestServer derived server.
+ */
+	{
+	CTAuthSvrServer* server = new (ELeave) CTAuthSvrServer();
+	CleanupStack::PushL(server);
+	
+	RProcess handle = RProcess();
+	TParsePtrC serverName(handle.FileName());
+	// Either use a StartL or ConstructL, the latter will permit
+	// server Logging.
+
+	//server->StartL(KServerName); 
+	server-> ConstructL(serverName.Name());
+	CleanupStack::Pop(server);
+	return server;
+	}
+
+
+// EKA2 much simpler
+// Just an E32Main and a MainL()
+
+LOCAL_C void MainL()
+/**
+ * Much simpler, uses the new Rendezvous() call to sync with the client
+ */
+	{
+	// Leave the hooks in for platform security
+#if (defined __DATA_CAGING__)
+	RProcess().DataCaging(RProcess::EDataCagingOn);
+	RProcess().SecureApi(RProcess::ESecureApiOn);
+#endif
+	CActiveScheduler* sched=NULL;
+	sched=new(ELeave) CActiveScheduler;
+	CleanupStack::PushL(sched);
+	CActiveScheduler::Install(sched);
+	CTAuthSvrServer* server = NULL;
+	// Create the CTestServer derived server	
+	TRAPD(err,server = CTAuthSvrServer::NewL());
+	if(!err)
+		{
+		// Sync with the client and enter the active scheduler
+		RProcess::Rendezvous(KErrNone);
+		sched->Start();
+		}
+	CleanupStack::Pop(sched);
+	delete server;
+	delete sched;
+	}
+
+
+GLDEF_C TInt E32Main()
+/**
+ * @return - Standard Epoc error code on exit
+ */
+	{
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	if(cleanup == NULL)
+		{
+		return KErrNoMemory;
+		}
+	TRAP_IGNORE(MainL());
+	delete cleanup;
+	return KErrNone;
+    }
+
+
+CTestStep* CTAuthSvrServer::CreateTestStep(const TDesC& aStepName)
+/**
+ * @return - A CTestStep derived instance
+ * Implementation of CTestServer pure virtual
+ */
+	{
+	// Test step name constant in the test step header file
+	// Created "just in time"
+	if(aStepName == KTFirstStart)
+		{
+		return new CTFirstStart();
+		}
+	else if (aStepName == KTAuthSvrCheck)
+		{
+		return new CTAuthSvrCheck();
+		}
+	else if (aStepName == KTRegIdentity)
+		{
+		return new CTRegIdentity(*this);
+		}
+	else if (aStepName == KTIdentifyMultiple)
+		{
+		return new CTIdentifyMultiple();
+		}
+	else if (aStepName == KTStepCreateTestDb)
+		{
+		return new CTStepCreateTestDb();
+		}
+	else if (aStepName == KTRetrainPlugin)
+		{
+		return new CTRetrainPlugin(*this);
+		}
+	else if (aStepName == KTRemoveDbs)
+		{
+		return new CTRemoveDbs();
+		}
+	else if (aStepName == KTRemoveIdentity)
+		{
+		return new CTRemoveIdentity(*this);
+		}
+	else if (aStepName == KTForgetPlugin)
+		{
+		return new CTRemoveAuthMethod(*this);	
+		}
+	else if (aStepName == KTAuthenticate)
+		{
+		return new CTAuthenticate(*this);
+		}
+	else if (aStepName == KTSetPrefs)
+		{
+		return new CTSetAuthPrefs(*this);
+		}
+	else if (aStepName == KTInitCenRep)
+		{
+		return new CTInitCenRep(*this);
+		}
+	else if (aStepName == KTResultAvailability)
+		{
+		return new CResultAvailability(*this);
+		}
+	else if (aStepName == KTResultChangeNotify)
+		{
+		return new CResultChangeNotify(*this);
+		}
+	else if (aStepName == KTResetIdentity)
+		{
+		return new CTResetIdentity(*this);
+		}
+	else if (aStepName == KTPostMarketPlugin)
+		{
+		return new CTPostMarketPlugin();
+		}
+	else if (aStepName == KTStepClientSidSupportCheck)
+		{
+		return new CTStepClientSidSupport(*this);
+		}
+	else if (aStepName == KTInstallPluginStep)
+		{
+		return new CTInstallPluginStep();
+		}
+	else if (aStepName == KTUninstallPluginStep)
+		{
+		return new CTUninstallPluginStep();
+		}
+	else if (aStepName == KTAuthServerOom)
+		{
+		return new CAuthSvrOom(*this);
+		}
+	else if (aStepName == KTUpdateSysTime)
+		{
+		return new CTSysTimeUpdate(*this);
+		}
+	else if (aStepName == KTMultiThreadedTest)
+	    {
+	    return new CTMultiThreaded(*this);
+	    }
+	else
+		{
+		ERR_PRINTF1(_L("The test step name specified does not exist."));
+		}
+	
+	return NULL;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/tAuthSvrServer.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2005-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: 
+* tAuthSvrServer is the base class for all authSvr tests
+*
+*/
+
+
+
+#ifndef T_AUTHSVR_SERVER_H
+#define T_AUTHSVR_SERVER_H
+
+#include <test/testexecuteserverbase.h>
+#include "authserver/authclient.h"
+#include "authserver/authmgrclient.h"
+
+
+
+class CTAuthSvrServer : public CTestServer
+	{
+public:
+	static CTAuthSvrServer*		NewL();	// First phase constructor
+	// Base class pure virtual
+	virtual CTestStep*			CreateTestStep(const TDesC& aStepName);
+	//RFs& Fs()	{return iFs;};
+	//AuthServer::RAuthClient Cl() {return client3;};
+	AuthServer::RAuthMgrClient Cl() {return client2;};	
+	//RAuthClient will be tested by way of inheritance
+	
+private:
+	//AuthServer::RAuthClient client3;	//variable that will be shared by the steps
+	AuthServer::RAuthMgrClient client2;	//variable that will be shared by the steps
+	//RFs		iFs;
+	
+	};
+
+#endif	/* T_AUTHSVR_SERVER_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/tAuthSvrStep.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,786 @@
+/*
+* Copyright (c) 2005-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: 
+*
+*/
+
+
+
+#ifndef T_AUTHSVR_STEP_H
+#define T_AUTHSVR_STEP_H
+
+#include <test/testexecutestepbase.h>
+#include <ecom/ecom.h>
+
+#include "authserver_client.h"
+#include <authserver/authplugininterface.h>
+#include <pinplugindialogdefs.h>
+
+#include "authserver_impl.h"
+#include "authserver/authclient.h"
+#include "authserver/authmgrclient.h"
+
+#include "tAuthSvrServer.h"
+#include "tauthdbstep.h"
+
+// these tests use some information which is normally
+// only visible to the server, or to the client DLL.
+
+#include "authdb.h"
+#include "authserveripc.h"
+#include "transientkey.h"
+#include "transientkeyinfo.h"
+#include "testutilclient.h"
+using namespace AuthServer;
+
+
+_LIT(KInputFile, 	"C:\\t_pinplugindlg_in.dat");
+_LIT(KOutputFile, "C:\\t_pinplugindlg_out.dat");
+_LIT(KEmptyString, "");
+
+// Used when creating the initial db
+//#define KNumPlugins 8	//Defined in tauthdbstep.h
+
+class CTAuthSvrStepBase : public CTestStep
+	{
+protected:
+	CTAuthSvrStepBase();
+	~CTAuthSvrStepBase();
+	virtual TVerdict doTestStepPreambleL()	
+		{
+
+		iFs.Connect();	
+	   	return TestStepResult();
+		}
+	virtual TVerdict doTestStepPostambleL()
+	    {
+		iFs.Close();
+		return TestStepResult();
+		
+		}
+	void SetDefaultPluginIdL(TInt aDefault);
+
+	HBufC* GetNameLC(TInt i);
+
+	void PluginData(AuthServer::TIdentityId aId, AuthServer::TPluginId aPlugin,	TPtr8 aDes) 
+		{
+		aDes.Fill(aId*aPlugin);
+		}
+
+//Needed because of the use of Step_CreateDb
+	inline void CreatePlugins();
+	inline void CreateKeyInfo();
+		
+	//Utility functions allowing text INI file parsing abilities
+	TInt writeToNamedConfig(CIniData* aFile, const TDesC &aSectName,const TDesC &aKeyName, const TPtrC &aResult);
+	//Section name unspecified
+	TInt writeToNamedConfig(CIniData* aFile, const TDesC &aKeyName,const TPtrC &aResult);
+	TInt readFromNamedConfigL(const TDesC &aFileName, const TDesC &aSectName,const TDesC &aKeyName, HBufC*& aResult);
+	//Section name unspecified
+	TInt readFromNamedConfigL(const TDesC &aFileName, const TDesC &aKeyName, HBufC*& aResult);
+	//Read data from testexecute ini file that will be used to initialise the Authentication Server
+	TInt InitAuthServerFromFileL();
+	
+	//Read plugin input train or plugin input id data from testexecute ini file 
+	//that will be used to initialise the Authentication Server, based on  
+	//aInitTrainInput.If set, this method reads plugin input train, else
+	//reads plugin input id.
+	TInt InitPluginDataFromFileL(TBool aInitTrainInput);
+	
+	// Wait for the server to shut down and so release the authentication database.
+	void WaitForServerToReleaseDb();
+	// 	Remove any existing database file.
+	void RemoveExistingDbL();
+	// 	Utility function coverting HexString to Integer
+	TInt HexString2Num(const TDesC8& aStr);
+	// Utility function for removing a specified Identity from the global Identity array
+	TInt RemoveIdFromGlobalDbL(TUint32 aId);
+	// Utility clean up function used when working with locally declared arrays
+	//void CleanupEComArray(TAny* aArrayOfPlugins);	
+	
+	//Utility function to read and set the username of a given identity
+	TVerdict checkAndSetUserNameL(AuthServer::RAuthClient& ac, TInt idPosition);	
+	// Utility function for checking the status of a pluginId that is specified
+	// in the ini file.
+	void CheckSpecifiedPluginStatusL();
+	// Version of above function that avoids a call to the 'Connect()' function
+	void CheckSpecifiedPluginStatusConnectedL(AuthServer::RAuthClient& ac);
+	
+	// Checks that the status of each plugin is as expected.
+	// based on the number of identities trained for that plugin, and the number of identities 
+	// present in the Authentication server.
+	TBool CheckPluginStatusAllL (AuthServer::RAuthClient& ac);
+	
+	// Reads the number of identities that have been trained with the plugin that 
+	// has its database in the named file
+	TInt GetNumIdsFromPluginDbL(const TDesC &aFileName);
+	
+	// Utility function for retrieving the last authenticated id from a file
+	AuthServer::TIdentityId getLastAuthId();
+	
+    AuthServer::CAuthExpression* CreateAuthExprLC(const TDesC& aString);
+    
+    void CreatePinPluginInputFileL(TPinPluginDialogOperation aOperation, TPinValue aPinValue);
+    
+    TPinValue GetPinFromOutputFileL();
+    
+    void ClientMessage(TBool aIsMessage, const TDesC& aDisplayString);
+    
+protected:
+	RFs iFs;	
+	
+	// Used when creating the initial db
+	AuthServer::CPluginDesc*       iPlugins[KNumPlugins];
+	AuthServer::CTransientKeyInfo* iId1Keys[KNumPlugins];
+	AuthServer::CTransientKeyInfo* iId2Keys[KNumPlugins];
+	AuthServer::CTransientKeyInfo* iId3Keys[KNumPlugins];
+
+	};
+	
+// Utility clean up function used when working with locally declared arrays
+	void CleanupEComArray(TAny* aArrayOfPlugins);	
+
+inline CTAuthSvrStepBase::~CTAuthSvrStepBase() 
+    {
+    for (TInt i = 0 ; i < KNumPlugins ; ++i)
+        {
+        delete iPlugins[i];
+        delete iId1Keys[i];
+        delete iId2Keys[i];
+        delete iId3Keys[i];
+        }
+    }
+
+inline HBufC* CTAuthSvrStepBase::GetNameLC(TInt id)
+    {
+    _LIT(nameTmpl, "Plugin_%d");
+	HBufC* name = HBufC::NewLC(15);
+	name->Des().Format(nameTmpl, id);
+	return name;
+    }
+    
+inline void CTAuthSvrStepBase::CreatePlugins()
+	{
+	using namespace AuthServer;
+	
+	const TAuthPluginType   types[KNumPlugins]
+		= { EAuthBiometric, EAuthToken, EAuthKnowledge,
+			EAuthBiometric, EAuthToken, EAuthKnowledge,
+			EAuthToken, EAuthKnowledge
+		};
+	const TAuthTrainingStatus   training[KNumPlugins]
+		= { EAuthUntrained, EAuthTrained, EAuthFullyTrained,
+			EAuthUntrained, EAuthTrained, EAuthFullyTrained,
+			EAuthTrained, EAuthFullyTrained
+		  };
+
+
+	for (TInt i = 0 ; i < KNumPlugins ; ++i)
+		{
+			HBufC* name = GetNameLC(i);
+			
+			iPlugins[i] = CPluginDesc::NewL(i, *name, types[i],
+											training[i], i*10000, i, i*4);
+		    CleanupStack::PopAndDestroy(name);									
+		}
+	}
+
+inline void CTAuthSvrStepBase::CreateKeyInfo()
+	{
+	using namespace AuthServer;
+
+	CProtectionKey* protKey1 = CProtectionKey::NewLC(8);
+	CProtectionKey* protKey2 = CProtectionKey::NewLC(8);
+	CProtectionKey* protKey3 = CProtectionKey::NewLC(8);
+
+	HBufC8* data = HBufC8::NewLC(4);
+	
+	for (TInt plugin = 0 ; plugin < KNumPlugins ; ++plugin)
+		{
+			CTransientKey* transient = 0;
+			// id 1
+			iId1Keys[plugin] = CTransientKeyInfo::NewL(plugin);
+			PluginData(1, plugin, data->Des());
+			transient = iId1Keys[plugin]->CreateTransientKeyL(data->Des());
+			CEncryptedProtectionKey* epKey1 =
+				transient->EncryptL(*protKey1);
+			delete transient;
+			iId1Keys[plugin]->SetEncryptedProtectionKeyL(epKey1);
+			// id 2
+			PluginData(2, plugin, data->Des());
+			iId2Keys[plugin] = CTransientKeyInfo::NewL(plugin);
+			transient = iId2Keys[plugin]->CreateTransientKeyL(data->Des());
+			CEncryptedProtectionKey* epKey2 =
+				transient->EncryptL(*protKey2);
+			delete transient;
+			iId2Keys[plugin]->SetEncryptedProtectionKeyL(epKey2);
+			// id 3
+			PluginData(3, plugin, data->Des());
+			iId3Keys[plugin] = CTransientKeyInfo::NewL(plugin);
+			transient = iId3Keys[plugin]->CreateTransientKeyL(data->Des());
+			CEncryptedProtectionKey* epKey3 =
+				transient->EncryptL(*protKey3);
+			delete transient;
+			iId3Keys[plugin]->SetEncryptedProtectionKeyL(epKey3);
+		}
+	CleanupStack::Pop(4, protKey1);
+	}
+
+
+/**
+	This abstract subclass of CTAuthcliservStepBase
+	overrides the doTestStep(Pre|Post)ambleL functions
+	from CTestBase to allocate and free an active
+	scheduler.
+	
+	The scheduler is stored in the protected iActSchd
+	variable.  This class does not start or stop the
+	scheduler.
+ */
+
+class CTStepActSch : public CTAuthSvrStepBase
+	{
+protected:
+	// override CTestStep
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepPostambleL();
+		
+protected:
+	/** The active scheduler which subclasses can use. */
+	CActiveScheduler* iActSchd;
+	};
+    
+
+class CTFirstStart : public CTAuthSvrStepBase
+	{
+public:
+	CTFirstStart();	
+	//~CTFirstStart();
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	//virtual TVerdict doTestStepPostambleL();
+	};
+	
+class CTAuthSvrCheck: public CTAuthSvrStepBase
+	{
+public:
+	CTAuthSvrCheck();
+	//~CTAuthSvrCheck();
+	//virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	//virtual TVerdict doTestStepPostambleL();
+	};
+	
+class CTRegIdentity: public CTStepActSch
+	{
+public:
+	CTRegIdentity(CTAuthSvrServer& aParent);
+	~CTRegIdentity();
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepPostambleL();
+	virtual TVerdict doTestStepL();
+	
+private:
+	void ListPluginsL(AuthServer::RAuthMgrClient& aAuthMgrClient );
+	void SetPinPluginStateL();
+	void RemovePinPluginFileL();
+	
+private:
+	CTAuthSvrServer& iParent;
+	};
+	
+class CTEnumIdentities: public CTAuthSvrStepBase
+	{
+public:
+	CTEnumIdentities(CTAuthSvrServer& aParent);
+	virtual TVerdict doTestStepL();	
+private:
+	CTAuthSvrServer& iParent;
+	};
+	
+class CTIdentifyMultiple: public CTAuthSvrStepBase
+	{
+public:
+	//CTIdentifyMultiple(CTAuthSvrServer& aParent);
+	CTIdentifyMultiple();
+	~CTIdentifyMultiple();
+	virtual TVerdict doTestStepPreambleL();	
+	virtual TVerdict doTestStepL();	
+private:
+	//CTAuthSvrServer& iParent;
+	RArray<TUid> iPluginIds;
+	};
+	
+class CTRetrainPlugin: public CTStepActSch
+	{
+public:	
+	//CTRetrainPlugin();
+	CTRetrainPlugin(CTAuthSvrServer& aParent);
+	~CTRetrainPlugin();
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepPostambleL();	
+	virtual TVerdict doTestStepL();	
+	// Utility function that calls 'Train' for a specified plugin	
+	void RetrainPlugin (AuthServer::RAuthMgrClient& mgc);
+private:
+	CTAuthSvrServer& iParent;
+	};
+
+class CTRemoveAuthMethod: public CTStepActSch
+	{
+public:	
+	//CTRetrainPlugin();
+	CTRemoveAuthMethod(CTAuthSvrServer& aParent);
+	~CTRemoveAuthMethod();
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepPostambleL();	
+	virtual TVerdict doTestStepL();	
+	void RemoveAuthMethodL (AuthServer::RAuthMgrClient& mgc);
+private:
+	CTAuthSvrServer& iParent;
+	};
+
+class CTRemoveDbs: public CTStepActSch
+	{
+public:	
+	CTRemoveDbs();
+	~CTRemoveDbs();
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepPostambleL();	
+	virtual TVerdict doTestStepL();	
+private:
+	
+	};
+	
+class CTRemoveIdentity: public CTStepActSch
+	{
+public:	
+	CTRemoveIdentity(CTAuthSvrServer& aParent);
+	~CTRemoveIdentity();
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepPostambleL();	
+	virtual TVerdict doTestStepL();		
+	// Utility function that calls 'authenticate, then removeIdentity', with a specified plugin	
+	void doRemoveIdentityL (AuthServer::RAuthMgrClient& mgc);	
+private:
+	CTAuthSvrServer& iParent;
+	};
+
+class CTAuthenticate: public CTStepActSch
+	{
+public:
+	CTAuthenticate(CTAuthSvrServer& aParent);
+	~CTAuthenticate();
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepPostambleL();	
+	virtual TVerdict doTestStepL();
+	//Utility function that stores the most recently authenticated identity in the GlobalDb file
+	//This should only be called by the Authenticate test step
+	void setLastAuthIdL(AuthServer::TIdentityId idToStore);
+	
+	/**
+  	This method calls the synchronous version of AuthenticateL method.
+  
+   	@param aAuthMgrClient		authMgrClient object.
+   	@param aInputString			descriptor containing either the alias string or auth expression
+   								string as read from the ini file.
+   	@param aFreshness			time period which serves as a check to determine if an authentication 
+   								has previously been performed within this period.This value is read from 
+   								the ini file.If not present,the default value is used.
+ 
+  	@param aClientSpecificKey 	this value when true represents the key returned by 
+  								auth server will be unique to the calling client.This value is read from the 
+  								ini file.By default this is set to false.
+ 
+  	@param isAlias 				this value when true specifies that the authentication is performed via alias.
+  								This value is read from the ini file.By default it is set to false.
+ 
+ 	
+  	*/
+ 
+  	void CallSyncAuthenticateL(AuthServer::RAuthMgrClient& aAuthMgrClient, const TDesC& aInputString, TInt aFreshness, TBool aClientSpecificKey, TBool isAlias, TBool isDefault, const TDesC& aClientMessage);
+	
+	/**
+  	This method calls the asynchronous version of AuthenticateL method.
+  
+   	@param aAuthMgrClient		authMgrClient object.
+   	@param aInputString			descriptor containing either the alias string or auth expression
+   								string as read from the ini file.
+   	@param aFreshness			time period which serves as a check to determine if an authentication 
+   								has previously been performed within this period.This value is read from 
+   								the ini file.If not present,the default value is used.
+ 
+  	@param aClientSpecificKey 	this value when true represents the key returned by 
+  								auth server will be unique to the calling client.This value is read from the 
+  								ini file.By default this is set to false.
+ 
+  	@param isAlias 				this value when true specifies that the authentication is performed via alias.
+  								This value is read from the ini file.By default it is set to false.
+ 
+ 	
+  	*/
+	void CallAsyncAuthenticateL(AuthServer::RAuthMgrClient& aAuthMgrClient, TDesC& aInputString, TInt aFreshness, TBool aClientSpecificKey, TBool isAlias, TBool isDefault, const TDesC& aClientMessage);
+	
+private:
+	CTAuthSvrServer& iParent;
+	};
+		
+class CTSetAuthPrefs: public CTStepActSch
+	{
+public:
+	CTSetAuthPrefs(CTAuthSvrServer& aParent);
+	~CTSetAuthPrefs();
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepPostambleL();	
+	virtual TVerdict doTestStepL();
+	void SetAuthPrefsL(AuthServer::RAuthMgrClient& aAuthMgrClient, AuthServer::RAuthClient& aAuthClient);
+
+private:
+	CTAuthSvrServer& iParent;
+	};
+
+class CTResetIdentity: public CTStepActSch
+	{
+public:	
+	CTResetIdentity(CTAuthSvrServer& aParent);
+	~CTResetIdentity();
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepPostambleL();	
+	virtual TVerdict doTestStepL();		
+	// Utility function that calls 'resetIdentity', with a specified plugin
+	void doResetIdentityL();
+private:
+	CTAuthSvrServer& iParent;
+	};
+
+/**
+	This class initializes the aliases in the authserver's central repository file 
+	with different values as specified in the ini file.
+  */
+
+class CTInitCenRep: public CTStepActSch
+	{
+public:
+	CTInitCenRep(CTAuthSvrServer& aParent);
+	~CTInitCenRep();
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepPostambleL();	
+	virtual TVerdict doTestStepL();
+private:
+	CTAuthSvrServer& iParent;
+	};
+
+class CResultAvailability: public CTStepActSch
+	{
+public:
+	CResultAvailability(CTAuthSvrServer& aParent);
+	~CResultAvailability();
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepPostambleL();
+	virtual TVerdict doTestStepL();
+	
+private:
+	CTAuthSvrServer& iParent;
+	};
+
+class CAuthSvrOom: public CTStepActSch
+	{
+public:
+	CAuthSvrOom(CTAuthSvrServer& aParent);
+	~CAuthSvrOom();
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepPostambleL();
+	virtual TVerdict doTestStepL();
+	TVerdict doClientOOMTestL();
+	TVerdict doServerOOMTestL();
+	TVerdict doPerformanceTestL();
+	void ReadTestConfigurationL();
+	TVerdict doTestL(AuthServer::RAuthMgrClient& ac);
+	void doStartupTestL();
+	void doRegOOMTestL(AuthServer::RAuthMgrClient &ac);
+	void doSyncAuthOOMTestL(AuthServer::RAuthMgrClient& ac);
+	void doAsyncAuthOOMTestL(AuthServer::RAuthMgrClient& ac);
+	void doSetPreferredTypeL(AuthServer::RAuthMgrClient& ac);
+	void doRemoveIdentityL(AuthServer::RAuthMgrClient& ac);
+	void doForgetPluginL(AuthServer::RAuthMgrClient& ac);
+	void doRetrainPluginL(AuthServer::RAuthMgrClient& ac);
+	void doListPluginsL(AuthServer::RAuthMgrClient& ac);
+	void doListActivePluginsL(AuthServer::RAuthMgrClient& ac);
+	void doListPluginsOfTypeL(AuthServer::RAuthMgrClient& ac);
+	void doListPluginsWithTrainingStatusL(AuthServer::RAuthMgrClient& ac);
+	void doListAuthStrengthAliasesL(AuthServer::RAuthMgrClient& ac);
+	void doResetAll(AuthServer::RAuthMgrClient& ac);
+	void doResetType(AuthServer::RAuthMgrClient& ac);
+	void doResetList(AuthServer::RAuthMgrClient& ac);
+// performance tests.
+	void StartTimer();
+	void StopTimerAndPrintResultL();
+	void PrintPerformanceLog(TTime aTime);
+	
+
+private:
+	CTAuthSvrServer& iParent;
+	TInt iFreshnessVal;
+	TPtrC iExprString;
+	TBool iClientSpecificKeyVal;
+	TBool iDefaultpluginusage;
+	TBuf<100> iMessage;
+	TTime iStartTime;
+	TInt iIterationCount;
+
+	};
+
+class CResultPropertyWatch:CActive
+	{
+	enum {EPriority=0};
+	public:
+	static CResultPropertyWatch* NewLC();
+	~CResultPropertyWatch();
+	void DoCancel();
+	private:
+	CResultPropertyWatch();
+	void ConstructL();
+	
+	void RunL();
+	
+	private:
+	RProperty iProperty;
+	public:	
+	TBool iNotified;
+	};
+
+class CResultChangeNotify: public CTStepActSch
+	{
+public:
+	CResultChangeNotify(CTAuthSvrServer& aParent);
+	~CResultChangeNotify();
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepPostambleL();
+	virtual TVerdict doTestStepL();
+	
+private:
+	void SetPinPluginStateL();
+	void RemovePinPluginFileL();
+private:
+	CTAuthSvrServer& iParent;
+	CResultPropertyWatch* watch;
+
+	};
+
+
+class CTPostMarketPlugin: public CTAuthSvrStepBase
+	{
+public:
+
+	CTPostMarketPlugin();
+	~CTPostMarketPlugin();
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	
+private:
+
+	/**
+  	This method simulates plugin installation.In case of upgrades to ROM, it verifies 
+  	that the right plugin is loaded (depending on the ROM_Only field in the plugin registration file),
+  	and that the plugin count increments when the macro to enable post market plugins is set to one,
+  	and remains the same when the macro is disabled.
+  
+   	*/
+	
+	TBool TestPluginInstallL(AuthServer::RAuthMgrClient& aAuthMgrClient, RTestUtilSession& aUtilSession);
+
+ 	/**
+  	This method simulates plugin uninstallation.In case of upgrades to ROM, it verifies 
+  	that the ROM plugin is loaded, and that the plugin count decrements when the macro to enable 
+	post market plugins is set to one, 	and remains the same when the macro is disabled.
+  
+   	*/
+	
+	TBool TestPluginUninstallL(AuthServer::RAuthMgrClient& aAuthMgrClient, RTestUtilSession& aUtilSession);
+	
+	/**
+  	This method lists the available plugin implementations and tests whether
+  	it matches with the expected plugin count.This method also takes plugin name 
+  	as a default argument,which assists in testing whether the right plugin has 
+  	been loaded during ROM upgrade operat
+  
+  	@param aAuthMgrClient	authMgrClient object.
+   	@param aExpectedCount	expected plugin count.
+   	@param aPluginName		expected plugin name.Default argument.
+   	@return 				true, when the actual plugin count equals the expected one.
+   							When the plugin name is specified, returns true, if
+   							the plugin name matches the expected one.
+   
+   	*/
+	TBool VerifyObtainedResultsWithExpectedL(AuthServer::RAuthMgrClient& aAuthMgrClient, TInt aExpectedCount, const TDesC& aPluginName = KEmptyString);
+	
+private:
+	
+	TPtrC iSrcPlugin;
+	TPtrC iTargetPlugin;
+	TPtrC iSrcRscFile;
+	TPtrC iTargetRscFile;
+  	};
+  	
+ class CTStepClientSidSupport : public CTStepActSch
+	{
+public:
+	CTStepClientSidSupport(CTAuthSvrServer& aParent);
+	
+	~CTStepClientSidSupport();
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	
+private:
+	TBool VerifyObtainedResultsWithExpectedL();
+	
+private:
+	CTAuthSvrServer& iParent;
+	TUid iClientSid;
+	TBool iClientSpecificKey;
+	TBool iWithString;
+	TInt iPluginId;
+	AuthServer::CIdentity* iIdentity;
+	AuthServer::CIdentity* iIdentityAfterRetrain;
+	};
+	
+class CTInstallPluginStep: public CTAuthSvrStepBase
+	{
+public:
+
+	CTInstallPluginStep();
+	~CTInstallPluginStep();
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	
+private:
+	
+	TPtrC iSrcPlugin;
+	TPtrC iTargetPlugin;
+	TPtrC iSrcRscFile;
+	TPtrC iTargetRscFile;
+  	};
+  	
+class CTUninstallPluginStep: public CTAuthSvrStepBase
+	{
+public:
+
+	CTUninstallPluginStep();
+	~CTUninstallPluginStep();
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepL();
+	
+private:
+	
+	TPtrC iSrcPlugin;
+	TPtrC iTargetPlugin;
+	TPtrC iSrcRscFile;
+	TPtrC iTargetRscFile;
+  	};  	
+  	
+
+class CTSysTimeUpdate: public CTStepActSch
+	{
+public:
+ 	CTSysTimeUpdate(CTAuthSvrServer& aParent);
+ 	~CTSysTimeUpdate();
+ 	virtual TVerdict doTestStepPreambleL();
+ 	virtual TVerdict doTestStepPostambleL();	
+ 	virtual TVerdict doTestStepL();
+private:
+ 	CTAuthSvrServer& iParent;
+ 	};
+   		
+//Parameters class.For now, used only to get the result.
+class TThreadParams
+    {
+public:
+    TInt result;
+    };
+
+
+class CTMultiThreaded: public CTStepActSch
+    {
+public:
+    CTMultiThreaded(CTAuthSvrServer& aParent);
+    ~CTMultiThreaded();
+    virtual TVerdict doTestStepPreambleL();
+    virtual TVerdict doTestStepPostambleL();    
+    virtual TVerdict doTestStepL();
+    static void runMultiThreadedTest(TThreadParams* aParams);
+    static void doRegisterL(TThreadParams& aParams);
+private:
+    CTAuthSvrServer& iParent;
+    };
+
+// Strings for the server create test step code
+_LIT(KTFirstStart,					"FIRST_START");
+_LIT(KTAuthSvrCheck,				"AUTHSVR_CHECK");
+_LIT(KTRegIdentity,					"REG_IDENTITY");
+_LIT(KTEnumIdentities, 				"ENUM_IDENTITIES");
+_LIT(KTIdentifyMultiple, 			"IDENTIFY_MULTIPLE");
+_LIT(KTRetrainPlugin,				"RETRAIN_PLUGIN");
+_LIT(KTForgetPlugin,				"FORGET_PLUGIN");
+_LIT(KTRemoveDbs,					"REMOVE_DBS");
+_LIT(KTRemoveIdentity,				"REMOVE_IDENTITY");
+_LIT(KTAuthenticate,				"AUTHENTICATE");
+_LIT(KTSetPrefs, 			    	"SET_PREFS");
+_LIT(KTInitCenRep,					"INIT_CENREP");
+_LIT(KTResultAvailability, 			"RESULT_AVAILABILITY");
+_LIT(KTResultChangeNotify, 			"RESULT_NOTIFICATION");
+_LIT(KTPostMarketPlugin,			"POST_MARKET_PLUGIN");
+_LIT(KTStepClientSidSupportCheck, 	"CLIENT_SID_CHECK");
+_LIT(KTInstallPluginStep, 			"INSTALL_PLUGIN");
+_LIT(KTUninstallPluginStep, 		"UNINSTALL_PLUGIN");
+_LIT(KTAuthServerOom,	 			"OOM_TEST");
+_LIT(KTResetIdentity,				"RESET_IDENTITY");
+_LIT(KTUpdateSysTime,				"UPDATE_SYSTIME");
+_LIT(KTMultiThreadedTest,           "MULTI_THREADED");
+
+// Performance related names
+_LIT(KMaxDurationName, 				"MaxDuration");
+_LIT(KMaxTestCaseDuration, 			"TEST_CASE_MAXIMUM_ALLOWED_DURATION");
+_LIT(KActualTestCaseDuration, 		"TEST_CASE_ACTUAL_DURATION");
+_LIT(KPerformanceTestInfo, 			"PERFORMANCE_LOG_INFORMATION");
+// String used to store the filename that contains the initialisation data used by the PinAuthPlugin, etc
+
+_LIT(KPluginIniFile, 			"\\tAuth\\tAuthSvr\\testdata\\initialisation_Info.ini");
+_LIT(KPluginIniSection,			"SectionOne");
+_LIT(KAuthSvrPolicyFile, 		"\\tAuth\\tAuthSvr\\testdata\\AuthSvrPolicy.ini");
+_LIT(KDefaultPluginTag, 		"DefaultPlugin");
+_LIT(KIdEnteredPinTag, 			"IdEnteredPinValue");
+_LIT(KTrainEnteredPinTag, 		"TrainEnteredPinValue");
+_LIT(KSupportsDefaultTag,		"iSupportsDefaultData");	//used to specify whether the individual plugins support default data 
+_LIT(KActiveStateTag,			"activeState");	//used to specify whether the individual plugins are active
+_LIT(KPinDbTag,					"Identity&PinValues");
+_LIT(KTotalDbTag,				"AllUserID&PinValues");
+_LIT(KDisplayMessage,			"DisplayMessage");
+_LIT(KLastAuthIdTag,			"LastAuthId");
+_LIT(KDefauthPrefsTag,			"DefaultPref");
+_LIT(KKnowledgePrefsTag,		"KnowledgePref");
+_LIT(KBiometricPrefsTag,		"BiometricPref");
+_LIT(KTokenPrefsTag,			"TokenPref");
+
+_LIT(KInitPinDatabaseValue,		",");
+_LIT(KDefaultInput,				"0000");
+
+// Strings used to store the filenames for the pluginDb files
+_LIT(KPlugin3100File,		"\\tAuth\\tAuthSvr\\testdata\\Pin11113100Db.ini");
+_LIT(KPlugin3101File,		"\\tAuth\\tAuthSvr\\testdata\\Pin11113101Db.ini");
+_LIT(KPlugin3102File,		"\\tAuth\\tAuthSvr\\testdata\\Pin11113102Db.ini");
+_LIT(KPlugin3103File,		"\\tAuth\\tAuthSvr\\testdata\\Pin11113103Db.ini");
+_LIT(KPlugin3104File,		"\\tAuth\\tAuthSvr\\testdata\\Pin11113104Db.ini");
+_LIT(KPlugin4100File,		"\\tAuth\\tAuthSvr\\testdata\\Pin10234100Db.ini");
+
+#endif	/* T_AUTHSVR_STEP_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/tPinAuthPlugin.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,1182 @@
+/*
+* Copyright (c) 2006-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 <f32file.h>
+
+#include "tPinAuthPlugin.h"
+#include <e32svr.h>
+
+#ifndef __INIPARSER_H__
+	#include <cinidata.h>
+#endif // __INIPARSER_H__
+
+
+CTPinAuthPlugin::~CTPinAuthPlugin()
+	{
+	delete iClientMessage;
+	}
+
+CTPinAuthPlugin::CTPinAuthPlugin()
+	{	
+	// See ConstructL() for initialisation completion.
+	}
+		
+/**
+ Safely complete the initialization of the constructed object	
+*/
+void CTPinAuthPlugin::ConstructL()
+	{
+	iName.Set(KPluginNamePin);
+	iDescription.Set(KPluginDescriptionPin);
+	iMinEntropy = KEntropyPin;
+	iFalsePositiveRate = KFalsePosPin;
+  	iFalseNegativeRate = KFalseNegPin;
+  	iClientMessage = HBufC::NewL(2048);
+	ReloadAllFromIniFile();
+	}
+	
+/**
+  Sets information like iActiveState and iSupportsDefaultData from 
+  the TEF ini file to the individual plugin database files
+*/	
+void CTPinAuthPlugin::ReloadAllFromIniFile()
+	{
+	// Set the file to be read, based on the Id of the plugin
+	
+	_LIT(KFileText, "\\tAuth\\tAuthSvr\\testdata\\Pin");
+	_LIT(KFileSuffix, "Db.ini");					
+	_LIT(KFormatFileName,"%S%x%S");
+	
+	TDriveUnit sysDrive (RFs::GetSystemDrive());
+	TBuf<64> fileText(sysDrive.Name());
+	fileText.Append(KFileText);
+	iFileToRead.Format(KFormatFileName,&fileText, Id(), &KFileSuffix);
+
+	//Read data from file to get initialisation information
+	
+	// Open and read in INI file
+	// Default path to look for INI file is in 'c:\system\data' 
+	// on target filesystem
+	
+	CIniData* file=NULL;
+	TRAPD(r,file=CIniData::NewL(iFileToRead));
+	
+	//Put file on the cleanupstack if anything else in this function is going to leave, but nothing does.	
+	
+	if(r!=KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &iFileToRead);
+		}
+	
+	else
+		{
+		// Look for a key under a named section, retrieve text value	
+		TPtrC result;		
+		TBool ret;	//return value from FindVar functions
+		ret=file->FindVar(_L("SectionOne"),_L("iSupportsDefaultData"),result);
+		if(!ret)
+			{
+			RDebug::Print(_L("Key or section not found. iSupportsDefaultData default value used."));
+			iSupportsDefaultData = ETrue;	// Default value
+			}
+		else
+			{
+			_LIT(KFalse,"false");
+			// Create a lower case copy of the data that is read from the file
+			TBuf<10> resultLowerCase;			
+			resultLowerCase.Copy(result);
+			resultLowerCase.LowerCase();
+			iSupportsDefaultData = (resultLowerCase.FindF(KFalse) == KErrNotFound);
+			}		
+				
+		// Set the active state of the plugin depending on the contents of the 
+		// corresponding file, which has been set as a member variable
+		ret =file->FindVar(_L("SectionOne"),_L("activeState"),result);
+		if(!ret)
+			{
+			RDebug::Print(_L("Key or section not found. iActiveState default value of ETRUE used."));			
+			iActiveState = ETrue;	// Default value
+			}
+		else
+			{
+			_LIT(KFalse,"false");
+			// Create a lower case copy of the data that is read from the file
+			TBuf<10> resultLowerCase;			
+			resultLowerCase.Copy(result);
+			resultLowerCase.LowerCase();
+			
+			// If the string 'false' was not found, we set the value to 'true' -the default value
+			iActiveState = (resultLowerCase.FindF(KFalse) == KErrNotFound);
+			}
+		TRAPD(r,file->WriteToFileL());
+		
+		if (KErrNone != r)
+			{
+			RDebug::Print(_L("Error occurred while writing to the file."));
+			TBuf<84> initInfoFile(sysDrive.Name());
+			initInfoFile.Append(KInitInfoFile);
+			RDebug::Print(_L("Filename = %S, KeyName = iSupportsDefaultData,"), &initInfoFile);
+			RDebug::Print(_L("value = %S."), &result);
+			}
+		
+		delete file;
+		TRAP(r,file=CIniData::NewL(KAuthSvrPolicyFile));
+		TPtrC displayMessage;
+		ret=file->FindVar(_L("SectionOne"),_L("DisplayMessage"),displayMessage);
+		if(displayMessage.Length() == 0)   //Value = 0
+			{
+			RDebug::Print(_L("DisplayMessage not passed."));
+			iClientMessage = iClientMessage->ReAllocL(0);	// Default value
+			TPtr ptr(iClientMessage->Des());
+			ptr = KNullDesC();
+			ret=file->SetValue(_L("SectionOne"),_L("DisplayMessage"),displayMessage);
+			TRAP(r,file->WriteToFileL());
+			}
+		else
+			{
+			iClientMessage = iClientMessage->ReAllocL(displayMessage.Length());
+			TPtr ptr(iClientMessage->Des());
+			ptr = displayMessage;
+			ret=file->SetValue(_L("SectionOne"),_L("DisplayMessage"),displayMessage);
+			TRAP(r,file->WriteToFileL());
+			}
+		delete file;
+		}
+			
+	}
+
+void CTPinAuthPlugin::ReloadActiveStateFromIniFile() const
+	{
+	// Set the file to be read, based on the Id of the plugin
+	
+	_LIT(KFileText, "\\tAuth\\tAuthSvr\\testdata\\Pin");
+	_LIT(KFileSuffix, "Db.ini");
+	
+	_LIT(KFormatFileName,"%S%x%S");
+	
+	TDriveUnit sysDrive (RFs::GetSystemDrive());
+	TBuf<64> fileText(sysDrive.Name());
+	fileText.Append(KFileText);
+	iFileToRead.Format(KFormatFileName,&fileText, Id(), &KFileSuffix);
+
+	//Read data from file to get initialisation information
+	
+	// Open and read in INI file
+	// Default path to look for INI file is in 'c:\system\data' 
+	// on target filesystem
+	
+	CIniData* file=NULL;
+	TRAPD(r,file=CIniData::NewL(iFileToRead));
+	
+	//Put file on the cleanupstack if anything else in this function is going to leave, but nothing does.	
+	
+	if(r!=KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &iFileToRead);
+		}
+	
+	else
+		{
+		// Look for a key under a named section, retrieve text value	
+		TPtrC result;		
+		TBool ret=EFalse;	//return value from FindVar functions
+
+		// Set the active state of the plugin depending on the contents of the 
+		// corresponding file, which has been set as a member variable
+		ret =file->FindVar(_L("SectionOne"),_L("activeState"),result);
+		if(!ret)
+			{
+			RDebug::Print(_L("Key or section not found. iActiveState default value of ETRUE used."));			
+			iActiveState = ETrue;	// Default value
+			}
+		else
+			{
+			_LIT(KFalse,"false");
+			// Create a lower case copy of the data that is read from the file
+			TBuf<10> resultLowerCase;
+			resultLowerCase.Copy(result);
+			resultLowerCase.LowerCase();
+			if (resultLowerCase.FindF(KFalse) == KErrNotFound) 
+				iActiveState = ETrue;	// The string 'false' was not found, so we set the value to 'true' -the default value
+			else
+				iActiveState = EFalse;
+			}
+		TRAPD(r,file->WriteToFileL());
+		
+		if (KErrNone != r)
+			{
+			RDebug::Print(_L("Error occurred while writing to the file."));
+			TBuf<84> initInfoFile(sysDrive.Name());
+			initInfoFile.Append(KInitInfoFile);
+			RDebug::Print(_L("Filename = %S, KeyName = activeState,"), &initInfoFile);
+			RDebug::Print(_L("value = %S."), &result);
+			}
+		delete file;
+		}
+	}
+
+
+	
+//Implement CAuthPluginInterface definitions
+
+/**
+ Normally, this would ask the user to input a 4-digit pin and then compare it to 
+ the values that this plugin has been trained with. The result should be the 
+ user that this PIN corresponds to.
+ 'aResult' should be the 'hash' of the stored PIN (which corresponds to the freshly entered PIN)
+ but in this case, it's returned as it was 'unhashed'.
+*/
+
+void CTPinAuthPlugin::Identify(TIdentityId& aId, const TDesC& aClientMessage,
+							   HBufC8*& aResult, TRequestStatus& aRequest)
+	{
+	ASSERT(IsActive());
+	
+	// We are simulating user input by reading from a file
+	// (The data contained in this file has been freshly written by the 'client part in TestExecute')
+	
+	if(aClientMessage != *ClientMessage())
+		{
+		RDebug::Print(_L("Display String Mismatch !!!"));	
+		}
+	else
+		{
+		RDebug::Print(_L("Display String at the plugin matches the string sent !! "));
+		}
+	aRequest = KRequestPending;
+		
+	TBuf8<32> userInput;
+	TRAPD(result1, IdReadUserInput(userInput));	//Get the data from the AuthSvrPolicy.ini file
+	if (KErrNone != result1)
+		{
+		aRequest = result1;
+		}
+	else
+		{
+		// No errors, carry on					
+		//Convert the 8-bit string to a 16-bit string for printing in RDebug
+		HBufC* buf = 0;
+		buf = HBufC::NewLC(32);
+		buf->Des().Copy(userInput);
+		_LIT(KMsgDebug1,"Identifying Userinput read from file = %S");    		
+		RDebug::Print(KMsgDebug1, buf);
+		CleanupStack::PopAndDestroy(buf);	//Memory cleanup. This string was only needed for the above Print function
+			
+		// Possibly, to allow for the cancellation or quitting, allow that to be the input string
+		_LIT8(KCancelText, "Cancel");	
+		_LIT8(KQuitText, "Quit");	
+		if (userInput == KCancelText)
+			{
+			TRequestStatus* status  = &aRequest;
+			User::RequestComplete(status, KErrAuthServPluginCancelled);
+			//aResult will not be updated, as specified
+			}
+		else if (userInput == KQuitText)
+			{
+			TRequestStatus* status  = &aRequest;
+			User::RequestComplete(status, KErrAuthServPluginQuit);
+			//aResult will not be updated, as specified
+			}
+		else
+			{
+			//compare with the known set of inputs and see if this is one of them.	
+			TInt result2 = CheckForStringPresence(aId, userInput, aRequest);
+			if (KErrNone == result2)	//The above function did not leave
+				{
+				//See if the string was found.
+				TInt length = userInput.Length();
+				
+				aResult = HBufC8::New(length);	
+				aResult->Des().Format(_L8("%S"), &userInput);
+				
+				RDebug::Printf("aResult has been updated. aResult = %S, userInput = %S", 
+									aResult, &userInput);
+				TRequestStatus* status  = &aRequest;
+				User::RequestComplete(status, result2);
+			
+				//Note: aRequest has been updated by the CheckForStringPresence function				
+				}
+			else if (KErrNotFound == result2)
+				{
+				RDebug::Printf("The data that the user input was not found (recognized)"
+								"Error = %d", result2);
+				
+				TRequestStatus* status  = &aRequest;
+				aId = KUnknownIdentity;
+				User::RequestComplete(status, KErrNone);
+				}			
+			else
+				{
+				//Caters for file access errors etc
+				RDebug::Printf("Error occurred while checking for the presence of the string"
+								"in the list. Error = %d", result2);
+				
+				TRequestStatus* status  = &aRequest;
+				aId = KUnknownIdentity;
+				User::RequestComplete(status, KErrNone);
+				}
+			}
+			//End of 'else' where the user did not cancel or quit the 'identify' process
+		}		
+	}
+	
+void CTPinAuthPlugin::Cancel()
+	{		
+	}
+
+void CTPinAuthPlugin::Train(TIdentityId aId, HBufC8*& aResult, TRequestStatus& aRequest)
+	{
+	
+	//Accept user input and update the list of inputs along with IDs.
+	
+ASSERT(IsActive());
+	
+	aRequest = KRequestPending;
+	//TInt result = KErrNone;
+	
+	TBuf8<32> userInput;
+	TRAPD(result1, TrainReadUserInput(userInput));
+	if (KErrNone != result1)
+		{
+		_LIT(KMsgDebug2,"Training Userinput read Error: result = %d");    
+		RDebug::Print(KMsgDebug2, result1);
+		}
+	else
+		{
+		// No errors, carry on		
+		//Convert the 8-bit string to a 16-bit string for printing in RDebug
+		HBufC* buf = 0;
+		TRAPD(err, buf = HBufC::NewL(32));
+		
+		if(err == KErrNoMemory)
+			{
+			TRequestStatus* status  = &aRequest;
+			User::RequestComplete(status, KErrNoMemory);
+			return;
+			}
+		buf->Des().Copy(userInput);
+		_LIT(KMsgDebug3, "--Training Userinput read from file = %S");
+		RDebug::Print(KMsgDebug3, buf);
+		delete buf;	//Memory cleanup. This string was only needed for the above Print function			
+		
+		// To allow for the cancellation or quitting, allow that to be the input string
+		TRequestStatus aRequest2 = KRequestPending;
+		_LIT8(KCancelText, "Cancel");
+		_LIT8(KQuitText, "Quit");
+		userInput.Trim();		
+		if (userInput.CompareF(KCancelText) == 0)
+			{ aRequest2 = KErrAuthServPluginCancelled; }		
+		else if (userInput.CompareF(KQuitText) == 0)
+			{ aRequest2 = KErrAuthServPluginQuit; }
+		else
+			{
+			//compare with the present set of inputs and see if this is one of them.
+			// update this list with this new user input, tagged to the aId
+			TRAPD(result2, CheckForNewStringPresenceL(aId, userInput, aRequest2));			
+			if (KErrNone != result2)
+				{
+				_LIT(KMsgDebug4, "Training Userinput read Error: results = %d");    
+				RDebug::Print(KMsgDebug4, result2);
+				}
+			else if(KErrNone == aRequest2.Int())
+				{
+				// No errors, update aResult.
+				// First allocate space for it since this variable will always be a 
+				// null pointer coming into this function
+				
+				TRAPD(err1,aResult = HBufC8::NewL(userInput.Size()));	
+				if(err1 == KErrNoMemory)
+					{
+					TRequestStatus* status  = &aRequest;
+					RDebug::Printf("User::request complete with kerr no memory");
+					User::RequestComplete(status, KErrNoMemory);	
+					return;
+					}
+				*aResult = userInput;
+				aRequest2 = KErrNone;
+				}			
+			else
+				{
+				_LIT(KMsgDebug5, "Error occurred during training. aRequest.Int() = %d");
+				RDebug::Print(KMsgDebug5, aRequest2.Int());
+				//aResult is not updated, nor is aId				
+				}
+			}
+		// Complete the asynchronous function
+		TRequestStatus* status  = &aRequest;
+		User::RequestComplete(status, aRequest2.Int());
+		}
+	}
+
+TBool CTPinAuthPlugin::IsActive () const
+	{
+	// There is never any user intervention required
+	//return true;
+	// As a future development note, this value may be read from a file (or a section in a file)
+	
+	ReloadActiveStateFromIniFile();
+	return iActiveState;
+	}
+	
+TInt CTPinAuthPlugin::Forget(TIdentityId aId)
+	{
+	// Open the list of userInputs that have been stored by this plugin
+	// Then find the one that corresponds to this id
+	// Then remove this string from the list and return the correct status value
+	
+	//Open the file
+	TRAPD(result3, FindStringAndRemoveL(aId));
+	return result3;
+			
+	}
+	
+TInt CTPinAuthPlugin::DefaultData(TIdentityId aId, HBufC8*& aOutputBuf)
+	{
+	
+	// This implementation of the PIN plugin does support default data.
+	// There will be cases where i don't want this available. Hence the addition of a 
+	// new class member iSupportsDefaultData
+	ReloadAllFromIniFile();
+	
+	TInt result = KErrNotSupported;
+	TRequestStatus aRequest2 = KRequestPending;
+	
+	if (iSupportsDefaultData)	//Class member initialised in the constructor
+		{
+		TBufC8<16> defaultBuf(KDefaultData);
+		//compare with the present set of inputs and see if this is one of them.
+		// update this list with this new user input, tagged to the aId
+		TRAPD(result2, CheckForNewStringPresenceL(aId, defaultBuf, aRequest2));			
+		if (KErrNone != result2)
+			{
+			_LIT(KMsgDebug4, "Training Userinput read Error: results = %d");    
+			RDebug::Print(KMsgDebug4, result2);
+			}
+		else if(KErrNone == aRequest2.Int())
+			{
+			// No errors, update aOutputBuf.
+			// First allocate space for it since this variable will always be a 
+			// null pointer coming into this function				
+			
+			TRAPD(resAlloc, (aOutputBuf = HBufC8::NewL(KDefaultData().Size())) );
+			if (KErrNone != resAlloc)
+				{
+				_LIT(KMsgAllocFailed2,"Failed to allocate memory for updating aOutputBuf");
+				RDebug::Print(KMsgAllocFailed2);
+				result = resAlloc;
+				}
+			else
+				{
+				*aOutputBuf = KDefaultData;
+				result = KErrNone;				
+				}
+			}			
+		else
+			{
+			_LIT(KMsgDebug5, "Error occurred during training. aRequest2.Int() = %d");
+			RDebug::Print(KMsgDebug5, aRequest2.Int());
+			//aOutputBuf is not updated, nor is aId				
+			}
+		}
+		
+	return result;	
+	}
+
+TInt CTPinAuthPlugin::Reset(TIdentityId aId, const TDesC& aRegistrationData, HBufC8*& aResult)
+	{
+	// To enable testing return KErrNotSupported for one of the knowledge-based incarnations of this class
+	if (Id() == 0x11113102)
+		{
+		return KErrNotSupported;
+		}
+
+	// If no registration data is supplied or if this plugin is configured as non-knowledge 
+	// type plugin then reset is simply a forget operation else the registration data is 
+	// used to retrain the plugin
+	if ((aRegistrationData == KNullDesC) || (Id() == 0x11113101) || (Type() == EAuthBiometric) || (Type() == EAuthToken))
+		{
+		aResult = NULL;
+		TRAPD(err, FindStringAndRemoveL(aId));
+		return err;
+		}
+
+	// For EAuthKnowledge type
+	// Convert the 16-bit string to a 8-bit string (pin)
+	// Note that no unicode conversion is being done here since a pin cannot be in unicode
+	RBuf8 pinBuf;
+	TBuf8<32> newPin;
+	TRAPD(err, pinBuf.CreateL(32);\
+				CleanupClosePushL(pinBuf);\
+				pinBuf.Copy(aRegistrationData.Left(32));\
+				newPin = pinBuf;\
+				CleanupStack::PopAndDestroy(&pinBuf));
+	if (err != KErrNone)
+		{
+		return err;
+		}
+
+	// Log a message
+	TBuf8<32> userInput;
+	_LIT(KMsgDebug3, "Reset with registration data = %S");
+	RDebug::Print(KMsgDebug3, &aRegistrationData);
+
+	// Compare with the present set of inputs and see if this is one of them.
+	// update this list with this new user input, tagged to the aId
+	TRequestStatus request = KRequestPending;
+	TRAP(err, CheckForNewStringPresenceL(aId, newPin, request));	
+	
+	if( KErrNoMemory == err)
+		{
+		User::LeaveNoMemory();
+		}
+	if (err != KErrNone)
+		{
+		RDebug::Print(_L("Reset error = %d"), err);
+		return err;
+		}
+	else if (request.Int() == KErrNone)
+		{
+		// No errors, update aResult.
+		TRAP(err, aResult = HBufC8::NewL(newPin.Size()));
+		if (err != KErrNone)
+			{
+			return err;
+			}
+		*aResult = newPin;
+		}
+	else
+		{
+		_LIT(KMsgDebug5, "Error occurred during reset. request.Int() = %d");
+		RDebug::Print(KMsgDebug5, request.Int());
+		return request.Int();
+		}
+
+	return KErrNone;
+	}
+
+//--------------------------------------------------------------------------------
+
+/**
+ Utility method to capture the data that the user has input 
+ (in the form of data stored in a file)
+*/
+TInt CTPinAuthPlugin::IdReadUserInput(TBuf8<32>& aInputValue)
+	{
+
+	TInt retValue;
+	CIniData* file=NULL;
+	TRAPD(r,file=CIniData::NewL(iFileToRead));
+	if(r!=KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &iFileToRead);
+		retValue = r;
+		}
+	
+	else
+		{
+		// Look for a key under a named section, retrieve text value	
+		TPtrC result;		
+		TBool ret=EFalse;	//return value from FindVar functions
+		
+		ret=file->FindVar(_L("SectionOne"),_L("IdEnteredPinValue"),result);
+		if(!ret)
+			{
+			RDebug::Print(_L("Unable to find the key in the file %S. IdEnteredPinValue is not known, 9999 used. Error = %d"), &iFileToRead, ret);
+			_LIT8(KEnteredPinValueErr, "9999");
+			aInputValue = KEnteredPinValueErr;	// Default value
+			retValue = KErrNotFound;						
+			}
+		else
+			{
+			//Later,include a check to ensure that only digits were entered
+			aInputValue.Copy(result);
+			aInputValue.Trim();			
+			retValue = KErrNone;	//Not necessary
+			}
+		delete file;	//memory cleanup
+		}
+	
+	return retValue;
+	}
+
+TInt CTPinAuthPlugin::TrainReadUserInput(TBuf8<32>& aInputValue)
+	{
+
+	TInt retValue;
+	CIniData* file=NULL;
+	TRAPD(r,file=CIniData::NewL(iFileToRead));
+	if(r!=KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &iFileToRead);
+		retValue = r;
+		}
+	
+	else
+		{
+		// Look for a key under a named section, retrieve text value	
+		TPtrC result;		
+		TBool ret=EFalse;	//return value from FindVar functions
+		
+		ret=file->FindVar(_L("SectionOne"),_L("TrainEnteredPinValue"),result);
+		if(!ret)
+			{
+			RDebug::Print(_L("Unable to find the key in the file %S. TrainEnteredPinValue is not known, 9999 used. Error = %d"), &iFileToRead, ret);
+			_LIT8(KEnteredPinValueErr, "9999");
+			aInputValue = KEnteredPinValueErr;	// Default value
+			retValue = KErrNotFound;						
+			}
+		else
+			{
+   			aInputValue.Copy(result);
+			aInputValue.Trim();
+			retValue = KErrNone;	//Not necessary
+			}
+		delete file;	//memory cleanup
+		}
+	
+	return retValue;
+	}
+
+/**
+ Utility method to compare the data that the user has input 
+ with all the data that has been stored for users 
+ Called by Identify()
+ @return - success or failure value
+*/
+TInt CTPinAuthPlugin::CheckForStringPresence(TIdentityId& aId, TBuf8<32> aInputValue, TRequestStatus& aRequestValue)
+	{
+
+	TInt retValue = KErrNone;	
+	// First format the aInputValue string so that it starts with a ':' and ends with a ','.
+	_LIT8(KFormatValue2, ":%S,");
+	TBuf8<32> aInputValue2;
+	aInputValue2.Format(KFormatValue2, &aInputValue);
+
+	//Convert the 8-bit string to a 16-bit string for printing in RDebug
+	HBufC* buf = 0;
+	buf = HBufC::New(32);
+	buf->Des().Copy(aInputValue);		
+	RDebug::Print(_L("Formatted string: %S"), buf);
+	delete buf;	//Memory cleanup. This string was only needed for the above Print function
+
+	TBuf8<500> pinFileContents1, pinFileContents2;
+	// Read the contents of the file that contains all the ID/PIN combinations
+
+	CIniData* file=NULL;
+	TRAPD(r,file=CIniData::NewL(iFileToRead));
+	if(KErrNoMemory == r)
+		{
+		delete file;
+		RDebug::Print(_L("Unable to create CIniData object - No memory !! "));
+		User::LeaveNoMemory();
+		
+		}
+	if(r!=KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &iFileToRead);
+		retValue = r;
+		}	
+	else
+		{
+		// Look for a key under a named section, retrieve text value	
+		TPtrC result;		
+		TBool ret=EFalse;	//return value from FindVar functions
+		
+		ret=file->FindVar(_L("SectionOne"),_L("Identity&PinValues"),result);
+		if(!ret)
+			{
+			RDebug::Print(_L("Unable to find the Identity&PinValues key in the file %S."), &iFileToRead);
+			retValue = KErrNotFound;
+			aRequestValue =KErrNotFound;
+			}
+		else
+			{
+			pinFileContents1.Copy(result);	
+			
+			TInt searchResult;
+			searchResult = pinFileContents1.Find(aInputValue2);
+			
+			if (KErrNotFound == searchResult)
+				{
+				RDebug::Print(_L("Userinput not found in the pinFile %S. Identification error"), &iFileToRead);
+				aRequestValue= KErrAuthServIdentityNotFound;
+				retValue  = searchResult;
+				}
+			else if (searchResult)	// a positive value
+				{				
+				// Now find the userID by searching back through the string for the "," marker				
+				pinFileContents2 = pinFileContents1.Left(searchResult);
+				TInt userIdStartPos = pinFileContents2.LocateReverse(',');
+								 
+				//Extract this userId for use by the calling function
+				TBuf8<50> p1 = pinFileContents2.Right(searchResult - userIdStartPos - 1);
+				TLex8 input (p1);
+				TRadix aRadix = EDecimal;
+				input.Val(aId, aRadix);
+				RDebug::Print(_L("UserId that is stored = %u"), aId);
+				aRequestValue = KErrNone;
+				retValue = KErrNone;
+				}				
+			else
+				{
+				RDebug::Print(_L("Unexpected error in the 'Find' function. Searchresult = %d"), searchResult);
+				aRequestValue = searchResult;
+				retValue = searchResult;				
+				}//End check for key&section search in file				
+			}//End check for safe file access
+		delete file;
+		}
+	
+	return retValue;
+	}
+
+/**
+ Utility method to compare the data that the user has input 
+ with all the data that has been stored for users 
+ Used to find out if the input is unique. 
+ -since KIdAmbiguous is no longer used, KIdCancel will be returned if the input is non-unique
+ Called by Train() and DefaultData()
+*/
+TInt CTPinAuthPlugin::CheckForNewStringPresenceL(TIdentityId aId, TBuf8<32> aInputValue, TRequestStatus& aRequestValue)
+	{	
+	TBuf8<500> pinFileContents, pinFileContents2;
+	TInt retValue = KErrNone;
+
+	CIniData* file=NULL;
+	TRAPD(r,file=CIniData::NewL(iFileToRead));
+	if(KErrNoMemory == r)
+		{
+		User::LeaveNoMemory();
+		}
+	if(r!=KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &iFileToRead);
+		return r;
+		}	
+	
+	
+	// Look for a key under a named section, retrieve text value	
+	TPtrC result;		
+	TBool ret=EFalse;	//return value from FindVar functions
+	aRequestValue = KErrAuthServIdentityNotFound;	//Initialisation		
+			
+	ret=file->FindVar(KPluginIniSection, KPinDbTag,result);
+	if(!ret)
+		{
+		RDebug::Print(_L("Unable to find the %S key in the file %S."), &KPinDbTag, &iFileToRead);
+		delete file;
+		return KErrNotFound;			
+		}
+	
+	//Copy the data from the named section in the file, and see if any previous user has used this input string
+	pinFileContents.Copy(result);			
+	
+	TInt searchResultPin;
+	TBuf8<50> searchStringPin;
+	_LIT8(KFormat3, ":%S,");
+	searchStringPin.Format(KFormat3, &aInputValue);
+	searchResultPin = pinFileContents.Find(searchStringPin);
+				
+	if (KErrNotFound == searchResultPin)
+		{				
+		//check that the identity is unique, if so, update the Db 
+		// with the new Id-PIN pair, as is done already
+		// else update the PIN only, ie training data for that identity
+		TInt searchResultId;
+		TBuf8<50> searchStringId;
+		_LIT8(KFormat4, ",%u:");
+		searchStringId.Format(KFormat4, aId);
+		
+		searchResultId = pinFileContents.Find(searchStringId);
+		
+		TDriveUnit sysDrive (RFs::GetSystemDrive());
+		TBuf<80> policyFile;
+		if (KErrNotFound == searchResultId)
+			{									
+			// Add this entry to the file
+			// This is a simple system, expecting a format as below:
+			// ",aId:inputPin,aId:inputPin,aId:inputPin,"				
+			
+			_LIT8(KFormat2, "%S%u:%S,");
+			if (pinFileContents.Size() == 0)
+				{
+				pinFileContents.Append(',');	//Initialisation
+				}
+			pinFileContents2.Format(KFormat2, &pinFileContents, aId, &aInputValue);				
+										
+			//For the purpose of writing the data to a file, i'll create a 16-bit version of pinFileContents
+			TInt ret2 = 0;
+			HBufC* buf = 0;
+			TRAPD(err,buf = HBufC::NewL(pinFileContents2.Length()));
+				
+			if(err == KErrNoMemory)
+				{
+				delete file;
+				User::LeaveNoMemory();
+				}
+			buf->Des().Copy(pinFileContents2);												
+			ret2 = file->SetValue(_L("SectionOne"),_L("Identity&PinValues"), *buf);
+			
+			TRAPD(r,file->WriteToFileL());
+			
+						
+			if (KErrNone != r)
+				{
+				policyFile.Copy(sysDrive.Name());
+				policyFile.Append(KPolicyFile);
+				RDebug::Print(_L("Error occurred while writing to the file. Filename = %S, KeyName = AllUserID&PinValues, value = %S."), &policyFile, buf);
+				}
+			delete buf;		//Memory cleanup. This string was only needed for the above Print function
+			
+			if(KErrNone == ret2)
+				{				
+				aRequestValue = KErrNone;
+				
+				//Update the global database
+				AddToGlobalDb(aId, aInputValue);
+				}
+			else
+				{
+				RDebug::Print(_L("Error occurred while writing data to file. Error = %d"), ret2);					
+				aRequestValue = ret2;
+				}
+			
+			}
+
+		else
+			{
+			//The Identity has already been trained with this plugin, 
+			// update the PIN (training data)
+			
+			//extract the string to the right of the end of the aId
+			pinFileContents2 = pinFileContents.Mid(searchResultId + searchStringId.Size());
+			
+			//Find the end of the PIN (Training data)
+			_LIT8(KPinEndMarker, ",");
+			TBufC8<5> bufPinEndMarker(KPinEndMarker);					
+			TInt pinEndPos = pinFileContents2.Find(bufPinEndMarker);
+			
+			//Replace this with the new PIN
+			pinFileContents.Replace((searchResultId + searchStringId.Size()),
+									 pinEndPos, aInputValue);	
+			
+			//For the purpose of writing the data to a file, i'll create a 16-bit version of pinFileContents
+			TInt ret2 = 0;
+			HBufC* buf = 0;
+			TRAPD(err1,buf = HBufC::NewL(pinFileContents.Length()));
+			if(err1 == KErrNoMemory)
+				{
+				delete file;
+				User::LeaveNoMemory();
+				}
+			buf->Des().Copy(pinFileContents);
+								
+			ret2 = file->SetValue(_L("SectionOne"),_L("Identity&PinValues"), *buf);
+			
+			TRAPD(r,file->WriteToFileL());
+			
+			if (KErrNone != r)
+				{
+				policyFile.Copy(sysDrive.Name());
+				policyFile.Append(KPolicyFile);
+				RDebug::Print(_L("Error occurred while writing to the file. Filename = %S, KeyName = AllUserID&PinValues, value = %S."), &policyFile, buf);
+				}
+			delete buf;		//Memory cleanup. This string was only needed for the above Print function
+			
+			if(KErrNone ==ret2)
+				{				
+				aRequestValue = KErrNone;
+				
+				//Update the global database
+				AddToGlobalDb(aId, aInputValue);
+				}
+			else
+				{
+				RDebug::Print(_L("Error occurred while writing data to file. Error = %d"), ret2);					
+				aRequestValue = ret2;
+				}
+			}
+		delete file;
+		return ret;
+		}
+	if (searchResultPin)	// a positive value
+		{
+		// A user has already tried to train this plugin using the given data.
+		// The pinFileContents are not updated, to avoid duplication
+		
+		aRequestValue = KErrAuthServPluginCancelled;
+		delete file;
+		return searchResultPin;
+		}	
+	
+	RDebug::Print(_L("Unexpected error in the 'Find' function. SearchresultPin = %d"), searchResultPin);
+	retValue = searchResultPin;
+
+	delete file;
+		
+	return retValue;
+	}
+
+	
+/**
+ Utility function to remove the training data that is associated with a given Id
+ Called by the Forget function
+ @return - KIdSuccess, KIdUnknown or some error code  
+ */ 
+TInt CTPinAuthPlugin::FindStringAndRemoveL (TIdentityId aId)
+	{
+	TBuf8<500> pinFileContents, pinFileContents2;
+	TInt retValue = KErrAuthServNoSuchIdentity;		//init
+	CIniData* file=NULL;
+	//First read the list of userId and PIN combinations from a file
+	TRAPD(r,file=CIniData::NewL(iFileToRead));
+	if(r!=KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &iFileToRead);
+		retValue = r;
+		}	
+	else
+		{
+		// Look for a key under a named section, retrieve text value	
+		TPtrC result;		
+		TBool ret=EFalse;	//return value from FindVar functions
+				
+		ret=file->FindVar(KPluginIniSection, KPinDbTag,result);
+		if(!ret)
+			{
+			RDebug::Print(_L("Config error: Unable to find the %S key in the file %S."), &KPinDbTag, &iFileToRead);
+			retValue = KErrNotFound;						
+			}
+		else
+			{
+			//Copy the data from the named section in the file, and see if any previous user has used this input string
+			pinFileContents.Copy(result);				
+			
+			//Format the searchstring as defined in the file so that it starts with a ',' and ends with a ':'.
+			_LIT8(KFormatValue3, ",%u:");			
+			
+			TBuf8<32> searchString;
+			searchString.Format(KFormatValue3, aId);
+
+			//For the purpose of printing the data to a file, i'll create a 16-bit version of pinFileContents
+			HBufC* buf = 0;
+			buf = HBufC::NewL(searchString.Length());
+			buf->Des().Copy(searchString);
+			RDebug::Print(_L("Formatted searchString used in 'FindStringAndRemove(): %S"), buf);
+			delete buf;
+
+			TInt userIdStartPos;	//The offset of the searchString within pinFileContents
+									//i.e the position of the '.' just before the identityId
+			userIdStartPos = pinFileContents.Find(searchString);
+			if (KErrNotFound == userIdStartPos)
+				{
+				RDebug::Print(_L("FindStringAndRemoveL: The specified ID was not found in the pinFile"));
+				retValue = KErrAuthServNoSuchIdentity;	//KIdUnknown;
+				}
+			else
+				{
+				
+				//Find where the string (including PIN) ends
+				TLex8 aLex = TLex8(pinFileContents);
+				TInt length(0);
+				aLex.Inc(userIdStartPos+1);
+				while(aLex.Peek() != ',') 
+					{
+					aLex.Inc();
+					length++;
+					}
+	
+				//remove the found (total) string from the list (including the starting ',')
+				pinFileContents.Delete(userIdStartPos,length+1);
+				
+				//Update the file
+				//For the purpose of writing the data to a file, i'll create a 16-bit version of pinFileContents
+				TInt ret2 = 0;
+				HBufC* buf;
+				buf = HBufC::NewL(pinFileContents.Length());	
+				buf->Des().Copy(pinFileContents);
+								
+				ret2 = file->SetValue(KPluginIniSection, KPinDbTag, *buf);
+				
+				TRAPD(r,file->WriteToFileL());
+				TDriveUnit sysDrive (RFs::GetSystemDrive());
+				TBuf<2> sysDriveName (sysDrive.Name());
+				TBuf<84> policyFile;
+								
+				if (KErrNone != r)
+					{
+					policyFile.Copy(sysDriveName);
+					policyFile.Append(KPolicyFile);
+					RDebug::Print(_L("Error occurred while writing to the file. Filename = %S, KeyName = AllUserID&PinValues, value = %S."), &policyFile, buf);
+					}
+				delete buf;		//Memory cleanup. This string was only needed for the above Print function
+				
+				if (KErrNone !=ret2)
+					{
+					policyFile .Copy(sysDriveName);
+					policyFile.Append(KAuthSvrPolicyFile);
+					RDebug::Print(_L("Error occurred in WriteToFileL(). Error = %d. Filename= %S"), ret2, &policyFile);
+					retValue = ret2;
+					}
+				else
+					{
+					retValue = KErrNone;		
+					}				
+				}			
+			}//End check for key&section search in file
+		delete file;
+		}//End check for safe file access
+	
+	return retValue;
+	}
+
+
+/**
+ Utility function to Update the Global Db with the training data 
+ that is associated with a given Id. The update will not happen if 
+ the identity is already present in this list, i.e. it's been pu in 
+ by another plugin
+ Called by the CheckForNewStringPresence function
+ @return - KErrNone, or some error code
+*/
+TInt CTPinAuthPlugin::AddToGlobalDb (TIdentityId aId, TBuf8<32> aInputValue)
+	{
+	
+	TBuf8<500> totalDbFileContents, totalDbFileContents2;
+	TInt retValue = KErrNone;
+	CIniData* file=NULL;
+	
+	TDriveUnit sysDrive (RFs::GetSystemDrive());
+	TDriveName sysDriveName (sysDrive.Name());
+	TBuf<128> authSvrPolicyFile(sysDriveName);
+	authSvrPolicyFile.Append(KAuthSvrPolicyFile);
+	
+	TRAPD(r,file=CIniData::NewL(authSvrPolicyFile));	
+	if(r!=KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &authSvrPolicyFile);
+		retValue = r;
+		}	
+	else
+		{
+		// Look for a key under a named section, retrieve text value	
+		TPtrC result;		
+		TBool ret=EFalse;	//return value from FindVar functions		
+				
+		ret=file->FindVar(KPluginIniSection, KTotalDbTag,result);
+		if(!ret)
+			{
+			RDebug::Print(_L("Unable to find the %S key in the file %S."), &KTotalDbTag, &authSvrPolicyFile);
+			retValue = KErrNotFound;		
+			}
+		else
+			{
+			//Copy the data from the named section in the file, and see if any previous user has used this input string
+			totalDbFileContents.Copy(result);
+			TBuf8<20> aidString;
+			aidString.Num(aId, EDecimal);			
+			TInt searchResult;			
+			searchResult = totalDbFileContents.Find(aidString);
+			
+			if (KErrNotFound == searchResult)
+				{
+				// Add this entry to the file
+				// This is a simple system, expecting a format as below:
+				// ",aId:inputPin,aId:inputPin,aId:inputPin,"				
+				_LIT8(KFormat2, "%S%u:%S,");
+				if (totalDbFileContents.Size() == 0)
+					{					
+					totalDbFileContents.Append(',');	//Initialisation
+					}
+				totalDbFileContents2.Format(KFormat2, &totalDbFileContents, aId, &aInputValue);				
+					
+				//For the purpose of writing the data to a file, i'll create a 16-bit version of pinFileContents
+				TInt ret2 = 0;
+				HBufC* buf = 0;
+				TRAPD(err,buf = HBufC::NewL(totalDbFileContents2.Length()));
+				if(err == KErrNoMemory)
+					{
+					delete file;
+					return KErrNoMemory;
+					}
+				buf->Des().Copy(totalDbFileContents2);								
+				ret2 = file->SetValue(KPluginIniSection, KTotalDbTag, *buf);
+				
+				TRAPD(r,file->WriteToFileL());
+									
+				if (KErrNone != r)
+					{
+					TBuf<80> policyFile(sysDriveName);
+					policyFile.Append(KPolicyFile);
+					RDebug::Print(_L("Error occurred while writing to the file. Filename = %S, KeyName = AllUserID&PinValues, value = %S."), &policyFile, buf);
+					}
+				delete buf;	//Memory cleanup. This string was only needed for the above Print function
+				
+				if (KErrNone !=ret2)
+					{
+					RDebug::Print(_L("Error occurred in SetValue(). Error = %d. Filename= %S"), ret2, &authSvrPolicyFile);
+					retValue = ret2;
+					}
+				}
+			else
+				{
+				// A user has already tried to train this plugin using the given data.
+				// The pinFileContents are not updated, to avoid duplication				
+				retValue = KErrNone;													
+				}//End aidString search in the totalDbFileContents string (Find())
+			}//End check for key&section search in file (FindVar())
+			delete file;
+		}//End check for safe file access
+	return retValue;
+	}
+
+const HBufC* CTPinAuthPlugin::ClientMessage()
+	{
+	return iClientMessage;
+	}
+
+const TPtrC& CTPinAuthPlugin::Name() const
+  {
+  return iName;
+  }
+const TPtrC& CTPinAuthPlugin::Description() const
+  {
+  return iDescription;
+  }
+AuthServer::TAuthPluginType CTPinAuthPlugin::Type() const 
+  {
+  return iType;
+  }
+
+AuthServer::TEntropy CTPinAuthPlugin::MinEntropy() const
+  {
+  return iMinEntropy;
+  }
+
+AuthServer::TPercentage CTPinAuthPlugin::FalsePositiveRate() const
+  {
+  return iFalsePositiveRate;
+  }
+
+AuthServer::TPercentage CTPinAuthPlugin::FalseNegativeRate() const
+  {
+  return iFalseNegativeRate;
+  }
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/tPinAuthPlugin.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,178 @@
+/*
+* Copyright (c) 2006-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: 
+* CTPinAuthPlugin is an interface implementation for CAuthPluginInterface
+*
+*/
+
+
+
+#ifndef TPINAUTHPLUGIN_H
+#define TPINAUTHPLUGIN_H
+
+#include "authserver_client.h"
+#include <authserver/authplugininterface.h>
+
+
+
+//An implementation of the CAuthPluginInterface definition
+
+using namespace AuthServer;
+	
+//implementation_uid = 0x10204F10
+class CTPinAuthPlugin : public CAuthPluginInterface
+	{
+public:
+	// Two phase constructor
+	static CTPinAuthPlugin* NewL();
+	// Destructor
+	virtual ~CTPinAuthPlugin();
+	//Implementation of CAuthPluginInterface definitions using a PIN system
+	virtual void Identify(TIdentityId& aId, const TDesC& aClientMessage, HBufC8*& aResult, TRequestStatus& aRequest);	
+	virtual void Cancel();	
+	virtual void Train(TIdentityId aId, HBufC8*& aResult, TRequestStatus& aRequest);		
+	virtual TBool IsActive() const;
+	virtual TInt Forget(TIdentityId aId);
+	virtual TInt DefaultData(TIdentityId aId, HBufC8*& aOutputBuf);
+	virtual TInt Reset(TIdentityId aId, const TDesC& aRegistrationData, HBufC8*& aResult);
+	//virtual TPluginId Id() const;
+	virtual const TPtrC& Name() const;
+	virtual const TPtrC& Description() const;
+	virtual AuthServer::TEntropy MinEntropy() const;
+	virtual AuthServer::TPercentage FalsePositiveRate() const;
+	virtual AuthServer::TPercentage FalseNegativeRate() const;
+	virtual AuthServer::TAuthPluginType Type() const;
+		
+	// Utility functions
+	TInt IdReadUserInput(TBuf8<32>& inputValue);
+	TInt TrainReadUserInput(TBuf8<32>& inputValue);
+	TInt CheckForStringPresence(TIdentityId& aId, TBuf8<32> aInputValue, TRequestStatus& aRequestValue);
+	TInt CheckForNewStringPresenceL(TIdentityId aId, TBuf8<32> aInputValue, TRequestStatus& aRequestValue);
+	TInt FindStringAndRemoveL(TIdentityId aId);
+	TInt AddToGlobalDb (TIdentityId aId, TBuf8<32> aInputValue);
+	TInt RemoveFromGlobalDb (TIdentityId aId);
+	const HBufC* ClientMessage ();
+	
+
+public:
+	mutable TBuf<70> iFileToRead;
+	void ConstructL();
+	CTPinAuthPlugin();
+	void ReloadAllFromIniFile();
+	void ReloadActiveStateFromIniFile() const;
+protected:
+ 	/// The name of the plugin. Derived classes should set this member.
+ 	TPtrC iName;
+ 	/// The plugin's description. Derived classes should set this member.
+ 	TPtrC iDescription;
+ 	/// The minumum entropy provided by the plugin. Derived classes should set
+ 	/// this member.
+ 	AuthServer::TEntropy iMinEntropy;
+ 	/// The false positive rate of the plugin. Derived classes should set this
+ 	/// member.
+ 	AuthServer::TPercentage iFalsePositiveRate;
+ 	/// The false negative rate of the plugin. Derived classes should set this
+ 	/// member.
+ 	AuthServer::TPercentage iFalseNegativeRate;
+  	/// The type of the plugin. Derived classes should set this member.
+ 	AuthServer::TAuthPluginType iType;
+
+private:
+	// Data read from file determining if this plugin supports default data
+	TBool iSupportsDefaultData;
+	mutable TBool iActiveState;
+	HBufC* iClientMessage;
+	};
+
+
+//=========================================================================	
+// The various classes that are spawned from this base class by inheriting the implementations besides
+// the Id() function (Uses the #define macro)
+
+// number is hex, type is one of the TAuthPluginType enums
+// Id() returns the Id of the plugin
+
+
+#define NClass(id,type) class CTPinAuthPlugin##id : public CTPinAuthPlugin\
+	{                                        		\
+public:                                      		\
+	typedef CTPinAuthPlugin##id TMyPinType;	    	\
+	TPluginId Id() const 		               		\
+		{ return 0x##id; }  	               		\
+		const TPtrC& Name() const					\
+		  {											\
+		  return iName;								\
+		  }											\
+		const TPtrC& Description() const			\
+		  {											\
+		  return iDescription;						\
+		  }											\
+		AuthServer::TAuthPluginType Type() const 	\
+		  {											\
+		  return iType;								\
+		  }											\
+		AuthServer::TEntropy MinEntropy() const		\
+		  {											\
+		  return iMinEntropy;						\
+		  }											\
+		AuthServer::TPercentage FalsePositiveRate() const \
+		  {												  \
+		  return iFalsePositiveRate;					  \
+		  }												  \
+		AuthServer::TPercentage FalseNegativeRate() const \
+		  {												  \
+		  return iFalseNegativeRate;					  \
+		  }												  \
+	static TMyPinType* NewL()                   	\
+    	{										 	\
+        TMyPinType* r = new (ELeave) TMyPinType();	\
+        CleanupStack::PushL(r);						\
+	  	r->ConstructL();						 	\
+	  	CleanupStack::Pop(r);						\
+        r->iType = type;                            \
+	  	return r;                              		\
+		}											\
+	}
+
+NClass(11113100, EAuthKnowledge);
+NClass(11113101, EAuthKnowledge);
+NClass(11113102, EAuthKnowledge);
+NClass(11113103, EAuthBiometric);
+NClass(11113104, EAuthToken);
+
+//=========================================================================		
+// Constants used in the utility functions -File locations, etc
+_LIT8(KDefaultData, "0000");
+_LIT(KInitInfoFile, "\\tAuth\\tAuthSvr\\testdata\\initialisation_Info.ini");
+_LIT(KPolicyFile, 	"\\tAuth\\tAuthSvr\\testdata\\AuthSvrPolicy.ini");
+
+_LIT(KPluginNamePin, "Pin1");
+_LIT(KPluginDescriptionPin, "Pin Plugin, can store and return known id and training data for each identity.");
+
+static const TInt KEntropyPin = 999;
+static const TInt KFalsePosPin = 100;
+static const TInt KFalseNegPin = 10;
+
+//From Step_Base.cpp
+_LIT(KPluginIniSection,			"SectionOne");
+_LIT(KAuthSvrPolicyFile, 		"\\tAuth\\tAuthSvr\\testdata\\AuthSvrPolicy.ini");
+_LIT(KDefaultPluginTag, 		"DefaultPlugin");
+_LIT(KEnteredPinTag, 			"EnteredPinValue");
+_LIT(KPinDbTag,					"Identity&PinValues");
+_LIT(KTotalDbTag,				"AllUserID&PinValues");
+_LIT(KInitPinDatabaseValue,		",");
+
+
+
+#endif	/* TPINAUTHPLUGIN_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/tauthsvrservernc.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,136 @@
+/*
+* Copyright (c) 2005-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: 
+* tAuthSvrServer.cpp
+* Test code for the TestExecute Server
+*
+*/
+
+
+
+#include "tAuthSvrServer.h"
+#include "tAuthSvrStep.h"
+
+
+_LIT(KServerName,"tAuthSvrNC");	
+
+CTAuthSvrServer* CTAuthSvrServer::NewL()
+/**
+ * @return - Instance of the test server
+ * Called inside the MainL() function to create and start the
+ * CTestServer derived server.
+ */
+	{
+	CTAuthSvrServer* server = new (ELeave) CTAuthSvrServer();
+	CleanupStack::PushL(server);
+	
+	// Either use a StartL or ConstructL, the latter will permit
+	// server Logging.
+
+	//server->StartL(KServerName); 
+	server-> ConstructL(KServerName);
+	CleanupStack::Pop(server);
+	return server;
+	}
+
+
+// EKA2 much simpler
+// Just an E32Main and a MainL()
+
+LOCAL_C void MainL()
+/**
+ * Much simpler, uses the new Rendezvous() call to sync with the client
+ */
+	{
+	// Leave the hooks in for platform security
+#if (defined __DATA_CAGING__)
+	RProcess().DataCaging(RProcess::EDataCagingOn);
+	RProcess().SecureApi(RProcess::ESecureApiOn);
+#endif
+	CActiveScheduler* sched=NULL;
+	sched=new(ELeave) CActiveScheduler;
+	CleanupStack::PushL(sched);
+	CActiveScheduler::Install(sched);
+	
+	CTAuthSvrServer* server = NULL;
+	// Create the CTestServer derived server	
+	TRAPD(err,server = CTAuthSvrServer::NewL());
+	if(!err)
+		{
+		// Sync with the client and enter the active scheduler
+		RProcess::Rendezvous(KErrNone);
+		sched->Start();
+		}
+	CleanupStack::Pop(sched);
+	delete server;
+	delete sched;
+	}
+
+
+GLDEF_C TInt E32Main()
+/**
+ * @return - Standard Epoc error code on exit
+ */
+	{
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	if(cleanup == NULL)
+		{
+		return KErrNoMemory;
+		}
+	TRAP_IGNORE(MainL());
+	delete cleanup;
+	return KErrNone;
+    }
+
+
+CTestStep* CTAuthSvrServer::CreateTestStep(const TDesC& aStepName)
+/**
+ * @return - A CTestStep derived instance
+ * Implementation of CTestServer pure virtual
+ */
+	{
+	CTestStep* testStep = NULL;
+	
+	// Test step name constant in the test step header file
+	// Created "just in time"
+	if(aStepName == KTFirstStart)
+		testStep = new CTFirstStart();
+	else if (aStepName == KTAuthSvrCheck)
+		testStep = new CTAuthSvrCheck();
+	else if (aStepName == KTRegIdentity)
+		testStep = new CTRegIdentity(*this);
+	else if (aStepName == KTIdentifyMultiple)
+		testStep = new CTIdentifyMultiple();
+	else if (aStepName == KTStepCreateTestDb)
+		testStep = new CTStepCreateTestDb();
+	else if (aStepName == KTRetrainPlugin)
+		testStep = new CTRetrainPlugin(*this);
+	else if (aStepName == KTRemoveDbs)
+		testStep = new CTRemoveDbs();
+	else if (aStepName == KTRemoveIdentity)
+		testStep = new CTRemoveIdentity(*this);
+	else if (aStepName == KTForgetPlugin)
+		testStep = new CTRemoveAuthMethod(*this);	
+	else if (aStepName == KTAuthenticate)
+		testStep = new CTAuthenticate(*this);
+	else if (aStepName == KTSetPrefs)
+		testStep = new CTSetAuthPrefs(*this);
+	else
+		{
+		ERR_PRINTF1(_L("The test step name specified does not exist."));
+		}
+	
+	return testStep;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/tauthsvrserverwdd.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,136 @@
+/*
+* Copyright (c) 2005-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: 
+* tAuthSvrServer.cpp
+* Test code for the TestExecute Server
+*
+*/
+
+
+
+#include "tAuthSvrServer.h"
+#include "tAuthSvrStep.h"
+
+
+_LIT(KServerName,"tAuthSvrWDD");	
+
+CTAuthSvrServer* CTAuthSvrServer::NewL()
+/**
+ * @return - Instance of the test server
+ * Called inside the MainL() function to create and start the
+ * CTestServer derived server.
+ */
+	{
+	CTAuthSvrServer* server = new (ELeave) CTAuthSvrServer();
+	CleanupStack::PushL(server);
+	
+	// Either use a StartL or ConstructL, the latter will permit
+	// server Logging.
+
+	//server->StartL(KServerName); 
+	server-> ConstructL(KServerName);
+	CleanupStack::Pop(server);
+	return server;
+	}
+
+
+// EKA2 much simpler
+// Just an E32Main and a MainL()
+
+LOCAL_C void MainL()
+/**
+ * Much simpler, uses the new Rendezvous() call to sync with the client
+ */
+	{
+	// Leave the hooks in for platform security
+#if (defined __DATA_CAGING__)
+	RProcess().DataCaging(RProcess::EDataCagingOn);
+	RProcess().SecureApi(RProcess::ESecureApiOn);
+#endif
+	CActiveScheduler* sched=NULL;
+	sched=new(ELeave) CActiveScheduler;
+	CleanupStack::PushL(sched);
+	CActiveScheduler::Install(sched);
+	
+	CTAuthSvrServer* server = NULL;
+	// Create the CTestServer derived server	
+	TRAPD(err,server = CTAuthSvrServer::NewL());
+	if(!err)
+		{
+		// Sync with the client and enter the active scheduler
+		RProcess::Rendezvous(KErrNone);
+		sched->Start();
+		}
+	CleanupStack::Pop(sched);
+	delete server;
+	delete sched;
+	}
+
+
+GLDEF_C TInt E32Main()
+/**
+ * @return - Standard Epoc error code on exit
+ */
+	{
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	if(cleanup == NULL)
+		{
+		return KErrNoMemory;
+		}
+	TRAP_IGNORE(MainL());
+	delete cleanup;
+	return KErrNone;
+    }
+
+
+CTestStep* CTAuthSvrServer::CreateTestStep(const TDesC& aStepName)
+/**
+ * @return - A CTestStep derived instance
+ * Implementation of CTestServer pure virtual
+ */
+	{
+	CTestStep* testStep = NULL;
+	
+	// Test step name constant in the test step header file
+	// Created "just in time"
+	if(aStepName == KTFirstStart)
+		testStep = new CTFirstStart();
+	else if (aStepName == KTAuthSvrCheck)
+		testStep = new CTAuthSvrCheck();
+	else if (aStepName == KTRegIdentity)
+		testStep = new CTRegIdentity(*this);
+	else if (aStepName == KTIdentifyMultiple)
+		testStep = new CTIdentifyMultiple();
+	else if (aStepName == KTStepCreateTestDb)
+		testStep = new CTStepCreateTestDb();
+	else if (aStepName == KTRetrainPlugin)
+		testStep = new CTRetrainPlugin(*this);
+	else if (aStepName == KTRemoveDbs)
+		testStep = new CTRemoveDbs();
+	else if (aStepName == KTRemoveIdentity)
+		testStep = new CTRemoveIdentity(*this);
+	else if (aStepName == KTForgetPlugin)
+		testStep = new CTRemoveAuthMethod(*this);	
+	else if (aStepName == KTAuthenticate)
+		testStep = new CTAuthenticate(*this);
+	else if (aStepName == KTSetPrefs)
+		testStep = new CTSetAuthPrefs(*this);
+	else
+		{
+		ERR_PRINTF1(_L("The test step name specified does not exist."));
+		}
+	
+	return testStep;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/tpinauthpluginupgrade.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,1068 @@
+/*
+* Copyright (c) 2008-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: 
+* dummy dll upgrade implementation.
+*
+*/
+
+
+#include <f32file.h>
+
+#include "tPinAuthPlugin.h"
+#include <e32svr.h>
+
+#ifndef __INIPARSER_H__
+	#include <cinidata.h>
+#endif // __INIPARSER_H__
+
+_LIT(KPluginUpgradeNamePin, "Pin1-Upgrade");
+
+CTPinAuthPlugin::~CTPinAuthPlugin()
+	{
+	delete iClientMessage;
+	}
+
+CTPinAuthPlugin::CTPinAuthPlugin()
+	{}
+		
+void CTPinAuthPlugin::ConstructL()
+	{
+	iName.Set(KPluginUpgradeNamePin);
+	iDescription.Set(KPluginDescriptionPin);
+	iMinEntropy = KEntropyPin;
+	iFalsePositiveRate = KFalsePosPin;
+  	iFalseNegativeRate = KFalseNegPin;
+  	iClientMessage = HBufC::NewL(2048);
+	ReloadAllFromIniFile();
+	}
+	
+/**
+  Sets information like iActiveState and iSupportsDefaultData from 
+  the TEF ini file to the individual plugin database files
+*/	
+void CTPinAuthPlugin::ReloadAllFromIniFile()
+	{
+	// Set the file to be read, based on the Id of the plugin
+	
+	_LIT(KFileText, "\\tAuth\\tAuthSvr\\testdata\\Pin");
+	_LIT(KFileSuffix, "Db.ini");					
+	_LIT(KFormatFileName,"%S%x%S");
+	
+	TDriveUnit sysDrive (RFs::GetSystemDrive());
+	TBuf<64> fileText(sysDrive.Name());
+	fileText.Append(KFileText);
+	iFileToRead.Format(KFormatFileName,&fileText, Id(), &KFileSuffix);
+
+	//Read data from file to get initialisation information
+	
+	// Open and read in INI file
+	// Default path to look for INI file is in 'c:\system\data' 
+	// on target filesystem
+	
+	CIniData* file=NULL;
+	TRAPD(r,file=CIniData::NewL(iFileToRead));
+	
+	//Put file on the cleanupstack if anything else in this function is going to leave, but nothing does.	
+	
+	if(r!=KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &iFileToRead);
+		}
+	
+	else
+		{
+		// Look for a key under a named section, retrieve text value	
+		TPtrC result;		
+		TBool ret;	//return value from FindVar functions
+		ret=file->FindVar(_L("SectionOne"),_L("iSupportsDefaultData"),result);
+		if(!ret)
+			{
+			RDebug::Print(_L("Key or section not found. iSupportsDefaultData default value used."));
+			iSupportsDefaultData = ETrue;	// Default value
+			}
+		else
+			{
+			_LIT(KFalse,"false");
+			// Create a lower case copy of the data that is read from the file
+			TBuf<10> resultLowerCase;			
+			resultLowerCase.Copy(result);
+			resultLowerCase.LowerCase();
+			iSupportsDefaultData = (resultLowerCase.FindF(KFalse) == KErrNotFound);
+			}
+		// Set the active state of the plugin depending on the contents of the 
+		// corresponding file, which has been set as a member variable
+		ret =file->FindVar(_L("SectionOne"),_L("activeState"),result);
+		if(!ret)
+			{
+			RDebug::Print(_L("Key or section not found. iActiveState default value of ETRUE used."));			
+			iActiveState = ETrue;	// Default value
+			}
+		else
+			{
+			_LIT(KFalse,"false");
+			// Create a lower case copy of the data that is read from the file
+			TBuf<10> resultLowerCase;			
+			resultLowerCase.Copy(result);
+			resultLowerCase.LowerCase();
+			
+			// If the string 'false' was not found, we set the value to 'true' -the default value
+			iActiveState = (resultLowerCase.FindF(KFalse) == KErrNotFound);
+			}
+		TRAPD(r,file->WriteToFileL());
+		
+		if (KErrNone != r)
+			{
+			RDebug::Print(_L("Error occurred while writing to the file."));
+			TBuf<84> initInfoFile(sysDrive.Name());
+			initInfoFile.Append(KInitInfoFile);
+			RDebug::Print(_L("Filename = %S, KeyName = iSupportsDefaultData,"), &initInfoFile);
+			RDebug::Print(_L("value = %S."), &result);
+			}
+		delete file;
+		TRAP(r,file=CIniData::NewL(KAuthSvrPolicyFile));
+		TPtrC displayMessage;
+		ret=file->FindVar(_L("SectionOne"),_L("DisplayMessage"),displayMessage);
+		if(displayMessage.Length() == 0)   //Value = 0
+			{
+			RDebug::Print(_L("DisplayMessage not passed."));
+			iClientMessage = iClientMessage->ReAllocL(0);	// Default value
+			TPtr ptr(iClientMessage->Des());
+			ptr = KNullDesC();
+			ret=file->SetValue(_L("SectionOne"),_L("DisplayMessage"),displayMessage);
+			TRAP(r,file->WriteToFileL());
+			}
+		else
+			{
+			iClientMessage = iClientMessage->ReAllocL(displayMessage.Length());
+			TPtr ptr(iClientMessage->Des());
+			ptr = displayMessage;
+			ret=file->SetValue(_L("SectionOne"),_L("DisplayMessage"),displayMessage);
+			TRAP(r,file->WriteToFileL());
+			}
+		delete file;
+		}
+			
+	}
+
+void CTPinAuthPlugin::ReloadActiveStateFromIniFile() const
+	{
+	// Set the file to be read, based on the Id of the plugin
+	
+	_LIT(KFileText, "\\tAuth\\tAuthSvr\\testdata\\Pin");
+	_LIT(KFileSuffix, "Db.ini");
+	
+	_LIT(KFormatFileName,"%S%x%S");
+	
+	TDriveUnit sysDrive (RFs::GetSystemDrive());
+	TBuf<64> fileText(sysDrive.Name());
+	fileText.Append(KFileText);
+	iFileToRead.Format(KFormatFileName,&fileText, Id(), &KFileSuffix);
+
+	//Read data from file to get initialisation information
+	
+	// Open and read in INI file
+	// Default path to look for INI file is in 'c:\system\data' 
+	// on target filesystem
+	
+	CIniData* file=NULL;
+	TRAPD(r,file=CIniData::NewL(iFileToRead));
+	
+	//Put file on the cleanupstack if anything else in this function is going to leave, but nothing does.	
+	
+	if(r!=KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &iFileToRead);
+		}
+	
+	else
+		{
+		// Look for a key under a named section, retrieve text value	
+		TPtrC result;		
+		TBool ret=EFalse;	//return value from FindVar functions
+
+		// Set the active state of the plugin depending on the contents of the 
+		// corresponding file, which has been set as a member variable
+		ret =file->FindVar(_L("SectionOne"),_L("activeState"),result);
+		if(!ret)
+			{
+			RDebug::Print(_L("Key or section not found. iActiveState default value of ETRUE used."));			
+			iActiveState = ETrue;	// Default value
+			}
+		else
+			{
+			_LIT(KFalse,"false");
+			// Create a lower case copy of the data that is read from the file
+			TBuf<10> resultLowerCase;
+			resultLowerCase.Copy(result);
+			resultLowerCase.LowerCase();
+			if (resultLowerCase.FindF(KFalse) == KErrNotFound) 
+				iActiveState = ETrue;	// The string 'false' was not found, so we set the value to 'true' -the default value
+			else
+				iActiveState = EFalse;
+			}
+		TRAPD(r,file->WriteToFileL());
+		
+		if (KErrNone != r)
+			{
+			RDebug::Print(_L("Error occurred while writing to the file."));
+			TBuf<84> initInfoFile(sysDrive.Name());
+			initInfoFile.Append(KInitInfoFile);
+			RDebug::Print(_L("Filename = %S, KeyName = activeState,"), &initInfoFile);
+			RDebug::Print(_L("value = %S."), &result);
+			}
+		delete file;
+		}
+	}
+
+
+	
+//Implement CAuthPluginInterface definitions
+
+/**
+ Normally, this would ask the user to input a 4-digit pin and then compare it to 
+ the values that this plugin has been trained with. The result should be the 
+ user that this PIN corresponds to.
+ 'aResult' should be the 'hash' of the stored PIN (which corresponds to the freshly entered PIN)
+ but in this case, it's returned as it was 'unhashed'.
+*/
+
+void CTPinAuthPlugin::Identify(TIdentityId& aId, const TDesC& aClientMessage,
+							   HBufC8*& aResult, TRequestStatus& aRequest)
+	{
+	ASSERT(IsActive());
+	
+	// We are simulating user input by reading from a file
+	// (The data contained in this file has been freshly written by the 'client part in TestExecute')
+	
+	if(aClientMessage != *ClientMessage())
+		{
+		TRequestStatus* status  = &aRequest;
+		User::RequestComplete(status, KErrGeneral);
+		RDebug::Print(_L("Display String Mismatch !!! ABORTING WITH KERRGENERAL"));
+		return;	
+		}
+	else
+		{
+		RDebug::Print(_L("Display String at the plugin matches the string sent !! "));
+		}
+	aRequest = KRequestPending;
+		
+	TBuf8<32> userInput;
+	TRAPD(result1, IdReadUserInput(userInput));	//Get the data from the AuthSvrPolicy.ini file
+	if (KErrNone != result1)
+		{
+		aRequest = result1;
+		}
+	else
+		{
+		// No errors, carry on					
+		//Convert the 8-bit string to a 16-bit string for printing in RDebug
+		HBufC* buf = 0;
+		buf = HBufC::New(32);
+		buf->Des().Copy(userInput);
+		_LIT(KMsgDebug1,"Identifying Userinput read from file = %S");    		
+		RDebug::Print(KMsgDebug1, buf);
+		delete buf;	//Memory cleanup. This string was only needed for the above Print function
+			
+		// Possibly, to allow for the cancellation or quitting, allow that to be the input string
+		_LIT8(KCancelText, "Cancel");	
+		_LIT8(KQuitText, "Quit");	
+		if (userInput == KCancelText)
+			{
+			TRequestStatus* status  = &aRequest;
+			User::RequestComplete(status, KErrAuthServPluginCancelled);
+			//aResult will not be updated, as specified
+			}
+		else if (userInput == KQuitText)
+			{
+			TRequestStatus* status  = &aRequest;
+			User::RequestComplete(status, KErrAuthServPluginQuit);
+			//aResult will not be updated, as specified
+			}
+		else
+			{
+			//compare with the known set of inputs and see if this is one of them.	
+			TInt result2 = CheckForStringPresence(aId, userInput, aRequest);
+			if (KErrNone == result2)	//The above function did not leave
+				{
+				//See if the string was found.
+				TInt length = userInput.Length();
+				
+				aResult = HBufC8::New(length);	
+				aResult->Des().Format(_L8("%S"), &userInput);
+				
+				RDebug::Printf("aResult has been updated. aResult = %S, userInput = %S", 
+									aResult, &userInput);
+				TRequestStatus* status  = &aRequest;
+				User::RequestComplete(status, result2);
+			
+				//Note: aRequest has been updated by the CheckForStringPresence function				
+				}
+			else if (KErrNotFound == result2)
+				{
+				RDebug::Printf("The data that the user input was not found (recognized)"
+								"Error = %d", result2);
+				
+				TRequestStatus* status  = &aRequest;
+				aId = KUnknownIdentity;
+				User::RequestComplete(status, KErrNone);
+				}			
+			else
+				{
+				//Caters for file access errors etc
+				RDebug::Printf("Error occurred while checking for the presence of the string"
+								"in the list. Error = %d", result2);
+				
+				TRequestStatus* status  = &aRequest;
+				aId = KUnknownIdentity;
+				User::RequestComplete(status, KErrNone);
+				}
+			}
+			//End of 'else' where the user did not cancel or quit the 'identify' process
+		}		
+	}
+	
+void CTPinAuthPlugin::Cancel()
+	{		
+	}
+
+void CTPinAuthPlugin::Train(TIdentityId aId, HBufC8*& aResult, TRequestStatus& aRequest)
+	{
+	
+	//Accept user input and update the list of inputs along with IDs.
+	
+ASSERT(IsActive());
+	
+	aRequest = KRequestPending;
+	//TInt result = KErrNone;
+	
+	TBuf8<32> userInput;
+	TRAPD(result1, TrainReadUserInput(userInput));
+	if (KErrNone != result1)
+		{
+		_LIT(KMsgDebug2,"Training Userinput read Error: result = %d");    
+		RDebug::Print(KMsgDebug2, result1);
+		}
+	else
+		{
+		// No errors, carry on		
+		//Convert the 8-bit string to a 16-bit string for printing in RDebug
+		HBufC* buf = 0;
+		buf = HBufC::New(32);
+		buf->Des().Copy(userInput);
+		_LIT(KMsgDebug3, "Training Userinput read from file = %S");
+		RDebug::Print(KMsgDebug3, buf);
+		delete buf;	//Memory cleanup. This string was only needed for the above Print function			
+		
+		// To allow for the cancellation or quitting, allow that to be the input string
+		TRequestStatus aRequest2 = KRequestPending;
+		_LIT8(KCancelText, "Cancel");
+		_LIT8(KQuitText, "Quit");
+		userInput.Trim();		
+		if (userInput.CompareF(KCancelText) == 0)
+			{ aRequest2 = KErrAuthServPluginCancelled; }		
+		else if (userInput.CompareF(KQuitText) == 0)
+			{ aRequest2 = KErrAuthServPluginQuit; }
+		else
+			{
+			//compare with the present set of inputs and see if this is one of them.
+			// update this list with this new user input, tagged to the aId
+			TRAPD(result2, CheckForNewStringPresenceL(aId, userInput, aRequest2));			
+			if (KErrNone != result2)
+				{
+				_LIT(KMsgDebug4, "Training Userinput read Error: results = %d");    
+				RDebug::Print(KMsgDebug4, result2);
+				}
+			else if(KErrNone == aRequest2.Int())
+				{
+				// No errors, update aResult.
+				// First allocate space for it since this variable will always be a 
+				// null pointer coming into this function
+				
+				aResult = HBufC8::New(userInput.Size());									
+				*aResult = userInput;
+				aRequest2 = KErrNone;
+				}			
+			else
+				{
+				_LIT(KMsgDebug5, "Error occurred during training. aRequest.Int() = %d");
+				RDebug::Print(KMsgDebug5, aRequest2.Int());
+				//aResult is not updated, nor is aId				
+				}
+			}
+		// Complete the asynchronous function
+		TRequestStatus* status  = &aRequest;
+		User::RequestComplete(status, aRequest2.Int());
+		}
+	}
+
+TBool CTPinAuthPlugin::IsActive () const
+	{
+	// There is never any user intervention required
+	//return true;
+	// As a future development note, this value may be read from a file (or a section in a file)
+	
+	ReloadActiveStateFromIniFile();
+	return iActiveState;
+	}
+	
+TInt CTPinAuthPlugin::Forget(TIdentityId aId)
+	{
+	// Open the list of userInputs that have been stored by this plugin
+	// Then find the one that corresponds to this id
+	// Then remove this string from the list and return the correct status value
+	
+	//Open the file
+	TRAPD(result3, FindStringAndRemoveL(aId));
+	return result3;
+			
+	}
+	
+TInt CTPinAuthPlugin::DefaultData(TIdentityId aId, HBufC8*& aOutputBuf)
+	{
+	
+	// This implementation of the PIN plugin does support default data.
+	// There will be cases where i don't want this available. Hence the addition of a 
+	// new class member iSupportsDefaultData
+	ReloadAllFromIniFile();
+	
+	TInt result = KErrNotSupported;
+	TRequestStatus aRequest2 = KRequestPending;
+	
+	if (iSupportsDefaultData)	//Class member initialised in the constructor
+		{
+		TBufC8<16> defaultBuf(KDefaultData);
+		//compare with the present set of inputs and see if this is one of them.
+		// update this list with this new user input, tagged to the aId
+		TRAPD(result2, CheckForNewStringPresenceL(aId, defaultBuf, aRequest2));			
+		if (KErrNone != result2)
+			{
+			_LIT(KMsgDebug4, "Training Userinput read Error: results = %d");    
+			RDebug::Print(KMsgDebug4, result2);
+			}
+		else if(KErrNone == aRequest2.Int())
+			{
+			// No errors, update aOutputBuf.
+			// First allocate space for it since this variable will always be a 
+			// null pointer coming into this function				
+			
+			TRAPD(resAlloc, (aOutputBuf = HBufC8::NewL(KDefaultData().Size())) );
+			if (KErrNone != resAlloc)
+				{
+				_LIT(KMsgAllocFailed2,"Failed to allocate memory for updating aOutputBuf");
+				RDebug::Print(KMsgAllocFailed2);
+				result = resAlloc;
+				}
+			else
+				{
+				*aOutputBuf = KDefaultData;
+				result = KErrNone;				
+				}
+			}			
+		else
+			{
+			_LIT(KMsgDebug5, "Error occurred during training. aRequest2.Int() = %d");
+			RDebug::Print(KMsgDebug5, aRequest2.Int());
+			//aOutputBuf is not updated, nor is aId				
+			}
+		}
+		
+	return result;	
+	}
+
+TInt CTPinAuthPlugin::Reset(TIdentityId/* aId*/, const TDesC&/* aRegistrationData*/, HBufC8*&/* aResult*/)
+	{
+	return KErrNotSupported;
+	}
+
+//--------------------------------------------------------------------------------
+
+/**
+ Utility method to capture the data that the user has input 
+ (in the form of data stored in a file)
+*/
+TInt CTPinAuthPlugin::IdReadUserInput(TBuf8<32>& aInputValue)
+	{
+
+	TInt retValue;
+	CIniData* file=NULL;
+	TRAPD(r,file=CIniData::NewL(iFileToRead));
+	if(r!=KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &iFileToRead);
+		retValue = r;
+		}
+	
+	else
+		{
+		// Look for a key under a named section, retrieve text value	
+		TPtrC result;		
+		TBool ret=EFalse;	//return value from FindVar functions
+		
+		ret=file->FindVar(_L("SectionOne"),_L("IdEnteredPinValue"),result);
+		if(!ret)
+			{
+			RDebug::Print(_L("Unable to find the key in the file %S. IdEnteredPinValue is not known, 9999 used. Error = %d"), &iFileToRead, ret);
+			_LIT8(KEnteredPinValueErr, "9999");
+			aInputValue = KEnteredPinValueErr;	// Default value
+			retValue = KErrNotFound;						
+			}
+		else
+			{
+			//Later,include a check to ensure that only digits were entered
+			aInputValue.Copy(result);
+			aInputValue.Trim();			
+			retValue = KErrNone;	//Not necessary
+			}
+		delete file;	//memory cleanup
+		}
+	
+	return retValue;
+	}
+
+TInt CTPinAuthPlugin::TrainReadUserInput(TBuf8<32>& aInputValue)
+	{
+
+	TInt retValue;
+	CIniData* file=NULL;
+	TRAPD(r,file=CIniData::NewL(iFileToRead));
+	if(r!=KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &iFileToRead);
+		retValue = r;
+		}
+	
+	else
+		{
+		// Look for a key under a named section, retrieve text value	
+		TPtrC result;		
+		TBool ret=EFalse;	//return value from FindVar functions
+		
+		ret=file->FindVar(_L("SectionOne"),_L("TrainEnteredPinValue"),result);
+		if(!ret)
+			{
+			RDebug::Print(_L("Unable to find the key in the file %S. TrainEnteredPinValue is not known, 9999 used. Error = %d"), &iFileToRead, ret);
+			_LIT8(KEnteredPinValueErr, "9999");
+			aInputValue = KEnteredPinValueErr;	// Default value
+			retValue = KErrNotFound;						
+			}
+		else
+			{
+   			aInputValue.Copy(result);
+			aInputValue.Trim();
+			retValue = KErrNone;	//Not necessary
+			}
+		delete file;	//memory cleanup
+		}
+	
+	return retValue;
+	}
+
+/**
+ Utility method to compare the data that the user has input 
+ with all the data that has been stored for users 
+ Called by Identify()
+ @return - success or failure value
+*/
+TInt CTPinAuthPlugin::CheckForStringPresence(TIdentityId& aId, TBuf8<32> aInputValue, TRequestStatus& aRequestValue)
+	{
+
+	TInt retValue = KErrNone;	
+	// First format the aInputValue string so that it starts with a ':' and ends with a ','.
+	_LIT8(KFormatValue2, ":%S,");
+	TBuf8<32> aInputValue2;
+	aInputValue2.Format(KFormatValue2, &aInputValue);
+
+	//Convert the 8-bit string to a 16-bit string for printing in RDebug
+	HBufC* buf = 0;
+	buf = HBufC::New(32);
+	buf->Des().Copy(aInputValue);		
+	RDebug::Print(_L("Formatted string: %S"), buf);
+	delete buf;	//Memory cleanup. This string was only needed for the above Print function
+
+	TBuf8<500> pinFileContents1, pinFileContents2;
+	// Read the contents of the file that contains all the ID/PIN combinations
+
+	CIniData* file=NULL;
+	TRAPD(r,file=CIniData::NewL(iFileToRead));
+	if(r!=KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &iFileToRead);
+		retValue = r;
+		}	
+	else
+		{
+		// Look for a key under a named section, retrieve text value	
+		TPtrC result;		
+		TBool ret=EFalse;	//return value from FindVar functions
+		
+		ret=file->FindVar(_L("SectionOne"),_L("Identity&PinValues"),result);
+		if(!ret)
+			{
+			RDebug::Print(_L("Unable to find the Identity&PinValues key in the file %S."), &iFileToRead);
+			retValue = KErrNotFound;
+			aRequestValue =KErrNotFound;
+			}
+		else
+			{
+			pinFileContents1.Copy(result);	
+			
+			TInt searchResult;
+			searchResult = pinFileContents1.Find(aInputValue2);
+			
+			if (KErrNotFound == searchResult)
+				{
+				RDebug::Print(_L("Userinput not found in the pinFile %S. Identification error"), &iFileToRead);
+				aRequestValue= KErrAuthServIdentityNotFound;
+				retValue  = searchResult;
+				}
+			else if (searchResult)	// a positive value
+				{				
+				// Now find the userID by searching back through the string for the "," marker				
+				pinFileContents2 = pinFileContents1.Left(searchResult);
+				TInt userIdStartPos = pinFileContents2.LocateReverse(',');
+								 
+				//Extract this userId for use by the calling function
+				TBuf8<50> p1 = pinFileContents2.Right(searchResult - userIdStartPos - 1);
+				TLex8 input (p1);
+				TRadix aRadix = EDecimal;
+				input.Val(aId, aRadix);
+				RDebug::Print(_L("UserId that is stored = %u"), aId);
+				aRequestValue = KErrNone;
+				retValue = KErrNone;
+				}				
+			else
+				{
+				RDebug::Print(_L("Unexpected error in the 'Find' function. Searchresult = %d"), searchResult);
+				aRequestValue = searchResult;
+				retValue = searchResult;				
+				}//End check for key&section search in file				
+			}//End check for safe file access
+		delete file;
+		}
+	
+	return retValue;
+	}
+
+/**
+ Utility method to compare the data that the user has input 
+ with all the data that has been stored for users 
+ Used to find out if the input is unique. 
+ -since KIdAmbiguous is no longer used, KIdCancel will be returned if the input is non-unique
+ Called by Train() and DefaultData()
+*/
+TInt CTPinAuthPlugin::CheckForNewStringPresenceL(TIdentityId aId, TBuf8<32> aInputValue, TRequestStatus& aRequestValue)
+	{	
+	TBuf8<500> pinFileContents, pinFileContents2;
+	TInt retValue = KErrNone;
+
+	CIniData* file=NULL;
+	TRAPD(r,file=CIniData::NewL(iFileToRead));
+		
+	if(r!=KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &iFileToRead);
+		return r;
+		}	
+	
+	// Look for a key under a named section, retrieve text value	
+	TPtrC result;		
+	TBool ret=EFalse;	//return value from FindVar functions
+	aRequestValue = KErrAuthServIdentityNotFound;	//Initialisation		
+			
+	ret=file->FindVar(KPluginIniSection, KPinDbTag,result);
+	if(!ret)
+		{
+		RDebug::Print(_L("Unable to find the %S key in the file %S."), &KPinDbTag, &iFileToRead);
+		delete file;
+		return KErrNotFound;			
+		}
+	
+	//Copy the data from the named section in the file, and see if any previous user has used this input string
+	pinFileContents.Copy(result);			
+	
+	TInt searchResultPin;
+	TBuf8<50> searchStringPin;
+	_LIT8(KFormat3, ":%S,");
+	searchStringPin.Format(KFormat3, &aInputValue);
+	searchResultPin = pinFileContents.Find(searchStringPin);
+				
+	if (KErrNotFound == searchResultPin)
+		{				
+		//check that the identity is unique, if so, update the Db 
+		// with the new Id-PIN pair, as is done already
+		// else update the PIN only, ie training data for that identity
+		TInt searchResultId;
+		TBuf8<50> searchStringId;
+		_LIT8(KFormat4, ",%u:");
+		searchStringId.Format(KFormat4, aId);
+		
+		searchResultId = pinFileContents.Find(searchStringId);
+		
+		TDriveUnit sysDrive (RFs::GetSystemDrive());
+		TBuf<80> policyFile;
+		if (KErrNotFound == searchResultId)
+			{									
+			// Add this entry to the file
+			// This is a simple system, expecting a format as below:
+			// ",aId:inputPin,aId:inputPin,aId:inputPin,"				
+			
+			_LIT8(KFormat2, "%S%u:%S,");
+			if (pinFileContents.Size() == 0)
+				{
+				pinFileContents.Append(',');	//Initialisation
+				}
+			pinFileContents2.Format(KFormat2, &pinFileContents, aId, &aInputValue);				
+										
+			//For the purpose of writing the data to a file, i'll create a 16-bit version of pinFileContents
+			TInt ret2 = 0;
+			HBufC* buf = 0;
+			buf = HBufC::NewL(pinFileContents2.Length());
+			buf->Des().Copy(pinFileContents2);												
+			ret2 = file->SetValue(_L("SectionOne"),_L("Identity&PinValues"), *buf);
+			
+			TRAPD(r,file->WriteToFileL());
+			
+						
+			if (KErrNone != r)
+				{
+				policyFile.Copy(sysDrive.Name());
+				policyFile.Append(KPolicyFile);
+				RDebug::Print(_L("Error occurred while writing to the file. Filename = %S, KeyName = AllUserID&PinValues, value = %S."), &policyFile, buf);
+				}
+			delete buf;		//Memory cleanup. This string was only needed for the above Print function
+			
+			if(KErrNone == ret2)
+				{				
+				aRequestValue = KErrNone;
+				
+				//Update the global database
+				AddToGlobalDb(aId, aInputValue);
+				}
+			else
+				{
+				RDebug::Print(_L("Error occurred while writing data to file. Error = %d"), ret2);					
+				aRequestValue = ret2;
+				}
+			
+			}
+
+		else
+			{
+			//The Identity has already been trained with this plugin, 
+			// update the PIN (training data)
+			
+			//extract the string to the right of the end of the aId
+			pinFileContents2 = pinFileContents.Mid(searchResultId + searchStringId.Size());
+			
+			//Find the end of the PIN (Training data)
+			_LIT8(KPinEndMarker, ",");
+			TBufC8<5> bufPinEndMarker(KPinEndMarker);					
+			TInt pinEndPos = pinFileContents2.Find(bufPinEndMarker);
+			
+			//Replace this with the new PIN
+			pinFileContents.Replace((searchResultId + searchStringId.Size()),
+									 pinEndPos, aInputValue);	
+			
+			//For the purpose of writing the data to a file, i'll create a 16-bit version of pinFileContents
+			TInt ret2 = 0;
+			HBufC* buf = 0;
+			buf = HBufC::NewL(pinFileContents.Length());
+			buf->Des().Copy(pinFileContents);
+								
+			ret2 = file->SetValue(_L("SectionOne"),_L("Identity&PinValues"), *buf);
+			
+			TRAPD(r,file->WriteToFileL());
+			
+			if (KErrNone != r)
+				{
+				policyFile.Copy(sysDrive.Name());
+				policyFile.Append(KPolicyFile);
+				RDebug::Print(_L("Error occurred while writing to the file. Filename = %S, KeyName = AllUserID&PinValues, value = %S."), &policyFile, buf);
+				}
+			delete buf;		//Memory cleanup. This string was only needed for the above Print function
+			
+			if(KErrNone ==ret2)
+				{				
+				aRequestValue = KErrNone;
+				
+				//Update the global database
+				AddToGlobalDb(aId, aInputValue);
+				}
+			else
+				{
+				RDebug::Print(_L("Error occurred while writing data to file. Error = %d"), ret2);					
+				aRequestValue = ret2;
+				}
+			}
+		delete file;
+		return ret;
+		}
+	if (searchResultPin)	// a positive value
+		{
+		// A user has already tried to train this plugin using the given data.
+		// The pinFileContents are not updated, to avoid duplication
+		
+		aRequestValue = KErrAuthServPluginCancelled;
+		delete file;
+		return searchResultPin;
+		}	
+	
+	RDebug::Print(_L("Unexpected error in the 'Find' function. SearchresultPin = %d"), searchResultPin);
+	retValue = searchResultPin;
+
+	delete file;
+		
+	return retValue;
+	}
+
+	
+/**
+ Utility function to remove the training data that is associated with a given Id
+ Called by the Forget function
+ @return - KIdSuccess, KIdUnknown or some error code  
+ */ 
+TInt CTPinAuthPlugin::FindStringAndRemoveL (TIdentityId aId)
+	{
+	TBuf8<500> pinFileContents, pinFileContents2;
+	TInt retValue = KErrAuthServNoSuchIdentity;		//init
+	CIniData* file=NULL;
+	//First read the list of userId and PIN combinations from a file
+	TRAPD(r,file=CIniData::NewL(iFileToRead));
+	if(r!=KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &iFileToRead);
+		retValue = r;
+		}	
+	else
+		{
+		// Look for a key under a named section, retrieve text value	
+		TPtrC result;		
+		TBool ret=EFalse;	//return value from FindVar functions
+				
+		ret=file->FindVar(KPluginIniSection, KPinDbTag,result);
+		if(!ret)
+			{
+			RDebug::Print(_L("Config error: Unable to find the %S key in the file %S."), &KPinDbTag, &iFileToRead);
+			retValue = KErrNotFound;						
+			}
+		else
+			{
+			//Copy the data from the named section in the file, and see if any previous user has used this input string
+			pinFileContents.Copy(result);				
+			
+			//Format the searchstring as defined in the file so that it starts with a ',' and ends with a ':'.
+			_LIT8(KFormatValue3, ",%u:");			
+			
+			TBuf8<32> searchString;
+			searchString.Format(KFormatValue3, aId);
+
+			//For the purpose of printing the data to a file, i'll create a 16-bit version of pinFileContents
+			HBufC* buf = 0;
+			buf = HBufC::NewL(searchString.Length());
+			buf->Des().Copy(searchString);
+			RDebug::Print(_L("Formatted searchString used in 'FindStringAndRemove(): %S"), buf);
+			delete buf;
+
+			TInt userIdStartPos;	//The offset of the searchString within pinFileContents
+									//i.e the position of the '.' just before the identityId
+			userIdStartPos = pinFileContents.Find(searchString);
+			if (KErrNotFound == userIdStartPos)
+				{
+				RDebug::Print(_L("FindStringAndRemoveL: The specified ID was not found in the pinFile"));
+				retValue = KErrAuthServNoSuchIdentity;	//KIdUnknown;
+				}
+			else
+				{
+				
+				//Find where the string (including PIN) ends
+				TLex8 aLex = TLex8(pinFileContents);
+				TInt length(0);
+				aLex.Inc(userIdStartPos+1);
+				while(aLex.Peek() != ',') 
+					{
+					aLex.Inc();
+					length++;
+					}
+								
+				//remove the found (total) string from the list (including the starting ',')
+				pinFileContents.Delete(userIdStartPos,length+1);
+				
+				//Update the file
+				//For the purpose of writing the data to a file, i'll create a 16-bit version of pinFileContents
+				TInt ret2 = 0;
+				HBufC* buf;
+				buf = HBufC::NewL(pinFileContents.Length());	
+				buf->Des().Copy(pinFileContents);
+								
+				ret2 = file->SetValue(KPluginIniSection, KPinDbTag, *buf);
+				
+				TRAPD(r,file->WriteToFileL());
+				TDriveUnit sysDrive (RFs::GetSystemDrive());
+				TBuf<2> sysDriveName (sysDrive.Name());
+				TBuf<84> policyFile;
+								
+				if (KErrNone != r)
+					{
+					policyFile.Copy(sysDriveName);
+					policyFile.Append(KPolicyFile);
+					RDebug::Print(_L("Error occurred while writing to the file. Filename = %S, KeyName = AllUserID&PinValues, value = %S."), &policyFile, buf);
+					}
+				delete buf;		//Memory cleanup. This string was only needed for the above Print function
+				
+				if (KErrNone !=ret2)
+					{
+					policyFile .Copy(sysDriveName);
+					policyFile.Append(KAuthSvrPolicyFile);
+					RDebug::Print(_L("Error occurred in WriteToFileL(). Error = %d. Filename= %S"), ret2, &policyFile);
+					retValue = ret2;
+					}
+				else
+					{
+					retValue = KErrNone;		
+					}				
+				}			
+			}//End check for key&section search in file
+		delete file;
+		}//End check for safe file access
+	
+	return retValue;
+	}
+
+
+/**
+ Utility function to Update the Global Db with the training data 
+ that is associated with a given Id. The update will not happen if 
+ the identity is already present in this list, i.e. it's been pu in 
+ by another plugin
+ Called by the CheckForNewStringPresence function
+ @return - KErrNone, or some error code
+*/
+TInt CTPinAuthPlugin::AddToGlobalDb (TIdentityId aId, TBuf8<32> aInputValue)
+	{
+	
+	TBuf8<500> totalDbFileContents, totalDbFileContents2;
+	TInt retValue = KErrNone;
+	CIniData* file=NULL;
+	
+	TDriveUnit sysDrive (RFs::GetSystemDrive());
+	TDriveName sysDriveName (sysDrive.Name());
+	TBuf<128> authSvrPolicyFile(sysDriveName);
+	authSvrPolicyFile.Append(KAuthSvrPolicyFile);
+	
+	TRAPD(r,file=CIniData::NewL(authSvrPolicyFile));	
+	if(r!=KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &authSvrPolicyFile);
+		retValue = r;
+		}	
+	else
+		{
+		// Look for a key under a named section, retrieve text value	
+		TPtrC result;		
+		TBool ret=EFalse;	//return value from FindVar functions		
+				
+		ret=file->FindVar(KPluginIniSection, KTotalDbTag,result);
+		if(!ret)
+			{
+			RDebug::Print(_L("Unable to find the %S key in the file %S."), &KTotalDbTag, &authSvrPolicyFile);
+			retValue = KErrNotFound;		
+			}
+		else
+			{
+			//Copy the data from the named section in the file, and see if any previous user has used this input string
+			totalDbFileContents.Copy(result);
+			TBuf8<20> aidString;
+			aidString.Num(aId, EDecimal);			
+			TInt searchResult;			
+			searchResult = totalDbFileContents.Find(aidString);
+			
+			if (KErrNotFound == searchResult)
+				{
+				// Add this entry to the file
+				// This is a simple system, expecting a format as below:
+				// ",aId:inputPin,aId:inputPin,aId:inputPin,"				
+				_LIT8(KFormat2, "%S%u:%S,");
+				if (totalDbFileContents.Size() == 0)
+					{					
+					totalDbFileContents.Append(',');	//Initialisation
+					}
+				totalDbFileContents2.Format(KFormat2, &totalDbFileContents, aId, &aInputValue);				
+					
+				//For the purpose of writing the data to a file, i'll create a 16-bit version of pinFileContents
+				TInt ret2 = 0;
+				HBufC* buf = 0;
+				buf = HBufC::New(totalDbFileContents2.Length());
+				buf->Des().Copy(totalDbFileContents2);								
+				ret2 = file->SetValue(KPluginIniSection, KTotalDbTag, *buf);
+				
+				TRAPD(r,file->WriteToFileL());
+									
+				if (KErrNone != r)
+					{
+					TBuf<80> policyFile(sysDriveName);
+					policyFile.Append(KPolicyFile);
+					RDebug::Print(_L("Error occurred while writing to the file. Filename = %S, KeyName = AllUserID&PinValues, value = %S."), &policyFile, buf);
+					}
+				delete buf;		//Memory cleanup. This string was only needed for the above Print function
+				
+				if (KErrNone !=ret2)
+					{
+					RDebug::Print(_L("Error occurred in SetValue(). Error = %d. Filename= %S"), ret2, &authSvrPolicyFile);
+					retValue = ret2;
+					}
+				}
+			else
+				{
+				// A user has already tried to train this plugin using the given data.
+				// The pinFileContents are not updated, to avoid duplication				
+				retValue = KErrNone;													
+				}//End aidString search in the totalDbFileContents string (Find())
+			}//End check for key&section search in file (FindVar())
+			delete file;
+		}//End check for safe file access
+	return retValue;
+	}
+const HBufC* CTPinAuthPlugin::ClientMessage()
+	{
+	return iClientMessage;
+	}
+
+const TPtrC& CTPinAuthPlugin::Name() const
+  {
+  return iName;
+  }
+const TPtrC& CTPinAuthPlugin::Description() const
+  {
+  return iDescription;
+  }
+AuthServer::TAuthPluginType CTPinAuthPlugin::Type() const 
+  {
+  return iType;
+  }
+
+AuthServer::TEntropy CTPinAuthPlugin::MinEntropy() const
+  {
+  return iMinEntropy;
+  }
+
+AuthServer::TPercentage CTPinAuthPlugin::FalsePositiveRate() const
+  {
+  return iFalsePositiveRate;
+  }
+
+AuthServer::TPercentage CTPinAuthPlugin::FalseNegativeRate() const
+  {
+  return iFalseNegativeRate;
+  }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/testdata/AuthSvrPolicy.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,70 @@
+#EnteredPinValue 	- String that contains the PIN that the user has entered after being prompted
+#DefaultPlugin		- String used to define which plugin is the default plugin
+#AllUserID&PinValues	- string that contains the list of the userId and Pin 'pairs'. 
+#			  The format is ,UserId:Pin,
+#			  An empty one has just a comma
+
+
+[SectionOne]
+#EnteredPinValue = 5312
+EnteredPinValue = 0011
+DefaultPlugin = PIN
+LastAuthId = 0
+AllUserID&PinValues = ,597430:0011,82383:5555,0873948:2533,
+DisplayMessage = 
+
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/testdata/Pin10234100Db.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,71 @@
+#EnteredPinValue 	- String that contains the PIN that the user has entered after being prompted
+#DefaultPlugin		- String used to define which plugin is the default plugin
+#AllUserID&PinValues	- string that contains the list of the userId and Pin 'pairs'. 
+#			  The format is ,UserId:Pin,
+#			  An empty one has just a comma
+
+
+[SectionOne]
+#EnteredPinValue = 5312
+TrainEnteredPinValue = 5000
+IdEnteredPinValue = 5000
+iSupportsDefaultData = true
+activeState = true
+DefaultPlugin = PIN
+Identity&PinValues = ,
+
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/testdata/Pin11113100Db.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,71 @@
+#EnteredPinValue 	- String that contains the PIN that the user has entered after being prompted
+#DefaultPlugin		- String used to define which plugin is the default plugin
+#AllUserID&PinValues	- string that contains the list of the userId and Pin 'pairs'. 
+#			  The format is ,UserId:Pin,
+#			  An empty one has just a comma
+
+
+[SectionOne]
+#EnteredPinValue = 5312
+TrainEnteredPinValue = 5000
+IdEnteredPinValue = 5000
+iSupportsDefaultData = true
+activeState = true
+DefaultPlugin = PIN
+Identity&PinValues = ,
+
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/testdata/Pin11113101Db.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,71 @@
+#EnteredPinValue 	- String that contains the PIN that the user has entered after being prompted
+#DefaultPlugin		- String used to define which plugin is the default plugin
+#AllUserID&PinValues	- string that contains the list of the userId and Pin 'pairs'. 
+#			  The format is ,UserId:Pin,
+#			  An empty one has just a comma
+
+
+[SectionOne]
+#EnteredPinValue = 5312
+TrainEnteredPinValue = 5000
+IdEnteredPinValue = 5000
+iSupportsDefaultData = true
+activeState = true
+DefaultPlugin = PIN
+Identity&PinValues = ,
+
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/testdata/Pin11113102Db.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,71 @@
+#EnteredPinValue 	- String that contains the PIN that the user has entered after being prompted
+#DefaultPlugin		- String used to define which plugin is the default plugin
+#AllUserID&PinValues	- string that contains the list of the userId and Pin 'pairs'. 
+#			  The format is ,UserId:Pin,
+#			  An empty one has just a comma
+
+
+[SectionOne]
+#EnteredPinValue = 5312
+TrainEnteredPinValue = 5000
+IdEnteredPinValue = 5000
+iSupportsDefaultData = true
+activeState = true
+DefaultPlugin = PIN
+Identity&PinValues = ,
+
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/testdata/Pin11113103Db.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,71 @@
+#EnteredPinValue 	- String that contains the PIN that the user has entered after being prompted
+#DefaultPlugin		- String used to define which plugin is the default plugin
+#AllUserID&PinValues	- string that contains the list of the userId and Pin 'pairs'. 
+#			  The format is ,UserId:Pin,
+#			  An empty one has just a comma
+
+
+[SectionOne]
+#EnteredPinValue = 5312
+TrainEnteredPinValue = 5000
+IdEnteredPinValue = 5000
+iSupportsDefaultData = true
+activeState = true
+DefaultPlugin = PIN
+Identity&PinValues = ,
+
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/testdata/Pin11113104Db.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,71 @@
+#EnteredPinValue 	- String that contains the PIN that the user has entered after being prompted
+#DefaultPlugin		- String used to define which plugin is the default plugin
+#AllUserID&PinValues	- string that contains the list of the userId and Pin 'pairs'. 
+#			  The format is ,UserId:Pin,
+#			  An empty one has just a comma
+
+
+[SectionOne]
+#EnteredPinValue = 5312
+TrainEnteredPinValue = 5000
+IdEnteredPinValue = 5000
+iSupportsDefaultData = true
+activeState = true
+DefaultPlugin = PIN
+Identity&PinValues = ,
+
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
+# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file# end of file
Binary file authenticationservices/authenticationserver/test/tAuthSvr/testdata/cenrep1.txt has changed
Binary file authenticationservices/authenticationserver/test/tAuthSvr/testdata/cenrep2.txt has changed
Binary file authenticationservices/authenticationserver/test/tAuthSvr/testdata/cenrep3.txt has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/testdata/initialisation_Info.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,2 @@
+[SectionOne]
+iSupportsDefaultData = true
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/testdata/pin_Contents.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,2 @@
+[SectionOne]
+AllUserID&PinValues = ,597430:0011,82383:5555,0873948:2533,
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/testdata/pin_Input.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,2 @@
+[SectionOne]
+EnteredPinValue = 5312
\ No newline at end of file
Binary file authenticationservices/authenticationserver/test/tAuthSvr/testdata/unicode.txt has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/tpostmarketplugins/main.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2008-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 <e32base.h>
+
+/** DLL Entry point */
+
+TBool E32Dll()
+	{
+	return (ETrue);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/tpostmarketplugins/proxy.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2008-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 <e32std.h>
+#include <ecom/implementationproxy.h>	// ECOM header file
+
+#include "tpostmarketramplugin.h"			// Class definition for one of the dummy implementations
+
+
+// Map the interface UIDs to implementation factory functions
+const TImplementationProxy ImplementationTable[] = 
+	{
+	IMPLEMENTATION_PROXY_ENTRY(0x10234100,	CTPostMarketRAMPlugin10234100::NewL),
+	};
+
+// Exported proxy function to resolve intstantiation methods for an ECOM plugin dll
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+	{
+	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+	return ImplementationTable;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/tpostmarketplugins/testdata/1023F3F4.rss	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2008-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: 
+* Dummy registry file for tpostmarketramplugin implementation.
+* UIDs quick-ref
+* ECOM DLL UID:			0x1023F3F4 
+* ECOM interface UID:		0x102740FE 
+* ECOM Implementation:		0x10234100
+*
+*/
+
+
+#include <ecom/registryinfov2.rh>
+
+RESOURCE REGISTRY_INFO r_registry
+{
+	dll_uid = 0x1023F3F4;
+	resource_format_version = RESOURCE_FORMAT_VERSION_2;
+	interfaces =
+	{
+		INTERFACE_INFO
+		{ 
+		interface_uid = 0x102740FE;	// Const for all data recognisers
+		implementations = 
+			{
+			IMPLEMENTATION_INFO
+				{
+				implementation_uid = 0x10234100;
+				version_no = 1;
+				display_name = "PostMarketTestRAMPlugin";
+				default_data = "10234100";
+				opaque_data = "";
+				rom_only=0;
+				}
+			};
+		}
+	};
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/tpostmarketplugins/testdata/buildpostmarketplugintestdata.fil	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,59 @@
+MAKEDATA :
+!IF "$(PLATFORM)" == "GCCXML" || "$(PLATFORM)" == "TOOLS" || "$(PLATFORM)" == "TOOLS2"
+	cd
+	echo ----------------
+	echo  Do nothing ...
+	echo ----------------
+!ELSE
+	cd
+	echo ---------------------------------------------------------------------
+	echo Copy test upgrade dlls and rsc files to c:\tauth\tpostmarketplugins\
+	echo ---------------------------------------------------------------------
+	
+	if not exist %EPOCROOT%epoc32\winscw\c\tauth\tpostmarketplugins mkdir %EPOCROOT%epoc32\winscw\c\tauth\tpostmarketplugins
+	copy %EPOCROOT%epoc32\release\"$(PLATFORM)"\"$(CFG)"\tauthpluginupgrade.dll %EPOCROOT%epoc32\winscw\c\tauth\tpostmarketplugins\tauthpluginupgrade.dll
+	copy %EPOCROOT%epoc32\release\"$(PLATFORM)"\"$(CFG)"\testpluginsupgrade.dll %EPOCROOT%epoc32\winscw\c\tauth\tpostmarketplugins\testpluginsupgrade.dll
+	copy %EPOCROOT%epoc32\release\"$(PLATFORM)"\"$(CFG)"\tpostmarketramplugin.dll %EPOCROOT%epoc32\winscw\c\tauth\tpostmarketplugins\tpostmarketramplugin.dll
+
+	del %EPOCROOT%epoc32\release\"$(PLATFORM)"\"$(CFG)"\tauthpluginupgrade.dll
+	del %EPOCROOT%epoc32\release\"$(PLATFORM)"\"$(CFG)"\testpluginsupgrade.dll
+	del %EPOCROOT%epoc32\release\"$(PLATFORM)"\"$(CFG)"\tpostmarketramplugin.dll
+
+	if exist %EPOCROOT%epoc32\release\"$(PLATFORM)"\"$(CFG)"\z\resource\plugins\tauthpluginupgrade.rsc copy %EPOCROOT%epoc32\release\"$(PLATFORM)"\"$(CFG)"\z\resource\plugins\tauthpluginupgrade.rsc %EPOCROOT%epoc32\winscw\c\tauth\tpostmarketplugins\tauthpluginupgrade.rsc
+	if exist %EPOCROOT%epoc32\release\"$(PLATFORM)"\"$(CFG)"\z\resource\plugins\testpluginsupgrade.rsc copy %EPOCROOT%epoc32\release\"$(PLATFORM)"\"$(CFG)"\z\resource\plugins\testpluginsupgrade.rsc %EPOCROOT%epoc32\winscw\c\tauth\tpostmarketplugins\testpluginsupgrade.rsc
+	if exist %EPOCROOT%epoc32\release\"$(PLATFORM)"\"$(CFG)"\z\resource\plugins\tpostmarketramplugin.rsc copy %EPOCROOT%epoc32\release\"$(PLATFORM)"\"$(CFG)"\z\resource\plugins\tpostmarketramplugin.rsc %EPOCROOT%epoc32\winscw\c\tauth\tpostmarketplugins\tpostmarketramplugin.rsc
+
+	if exist %EPOCROOT%epoc32\data\z\resource\plugins\testpluginsupgrade.rsc copy /y %EPOCROOT%epoc32\data\z\resource\plugins\testpluginsupgrade.rsc %EPOCROOT%epoc32\winscw\c\tauth\tpostmarketplugins\testpluginsupgrade.rsc
+	if exist %EPOCROOT%epoc32\data\z\resource\plugins\tauthpluginupgrade.rsc copy /y %EPOCROOT%epoc32\data\z\resource\plugins\tauthpluginupgrade.rsc %EPOCROOT%epoc32\winscw\c\tauth\tpostmarketplugins\tauthpluginupgrade.rsc
+	if exist %EPOCROOT%epoc32\data\z\resource\plugins\tpostmarketramplugin.rsc copy /y %EPOCROOT%epoc32\data\z\resource\plugins\tpostmarketramplugin.rsc %EPOCROOT%epoc32\winscw\c\tauth\tpostmarketplugins\tpostmarketramplugin.rsc
+
+	if exist %EPOCROOT%epoc32\data\z\resource\plugins\testpluginsupgrade.rsc del %EPOCROOT%epoc32\data\z\resource\plugins\testpluginsupgrade.rsc
+	if exist %EPOCROOT%epoc32\data\z\resource\plugins\tauthpluginupgrade.rsc  del %EPOCROOT%epoc32\data\z\resource\plugins\tauthpluginupgrade.rsc 
+	if exist %EPOCROOT%epoc32\data\z\resource\plugins\tpostmarketramplugin.rsc del %EPOCROOT%epoc32\data\z\resource\plugins\tpostmarketramplugin.rsc
+
+	if exist %EPOCROOT%epoc32\release\"$(PLATFORM)"\"$(CFG)"\z\resource\plugins\tauthpluginupgrade.rsc del %EPOCROOT%epoc32\release\"$(PLATFORM)"\"$(CFG)"\z\resource\plugins\tauthpluginupgrade.rsc
+	if exist %EPOCROOT%epoc32\release\"$(PLATFORM)"\"$(CFG)"\z\resource\plugins\testpluginsupgrade.rsc del %EPOCROOT%epoc32\release\"$(PLATFORM)"\"$(CFG)"\z\resource\plugins\testpluginsupgrade.rsc
+	if exist %EPOCROOT%epoc32\release\"$(PLATFORM)"\"$(CFG)"\z\resource\plugins\tpostmarketramplugin.rsc del %EPOCROOT%epoc32\release\"$(PLATFORM)"\"$(CFG)"\z\resource\plugins\tpostmarketramplugin.rsc
+
+!ENDIF
+
+DO_NOTHING:
+	rem do nothing
+
+#
+# The targets invoked by abld...
+#
+
+MAKMAKE : DO_NOTHING
+FREEZE : DO_NOTHING
+LIB : DO_NOTHING
+RESOURCE : DO_NOTHING
+CLEANLIB : DO_NOTHING
+BLD : DO_NOTHING
+RELEASABLES : DO_NOTHING
+
+SAVESPACE : BLD
+
+FINAL : MAKEDATA
+
+CLEAN : 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/tpostmarketplugins/testdata/epoc_enablepostmarketplugin.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,8 @@
+PlatSecDiagnostics ON
+PlatSecEnforcement ON 
+PlatSecProcessIsolation ON 
+PlatSecEnforceSysBin ON
+
+_epoc_drive_d \epoc32\drive_d
+
+KEnablePostMarketAuthenticationPlugins 0x01
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/tpostmarketplugins/testdata/epoc_patchdatanegative.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,8 @@
+PlatSecDiagnostics ON
+PlatSecEnforcement ON 
+PlatSecProcessIsolation ON 
+PlatSecEnforceSysBin ON
+
+_epoc_drive_d \epoc32\drive_d
+
+KEnablePostMarketAuthenticationPlugins -1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/tpostmarketplugins/testdata/epoc_patchdatapositive.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,8 @@
+PlatSecDiagnostics ON
+PlatSecEnforcement ON 
+PlatSecProcessIsolation ON 
+PlatSecEnforceSysBin ON
+
+_epoc_drive_d \epoc32\drive_d
+
+KEnablePostMarketAuthenticationPlugins 0x0A
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/tpostmarketplugins/tpostmarketramplugin.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,1076 @@
+/*
+* Copyright (c) 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: 
+* dummy plugin to test post market plugin support.
+*
+*/
+
+
+#include <f32file.h>
+
+#include "tpostmarketramplugin.h"
+#include <e32svr.h>
+
+#ifndef __INIPARSER_H__
+	#include <cinidata.h>
+#endif // __INIPARSER_H__
+
+	
+//Implement CAuthPluginInterface definitions
+CTPostMarketRAMPlugin::~CTPostMarketRAMPlugin()
+	{
+	delete iClientMessage;
+	}
+
+CTPostMarketRAMPlugin::CTPostMarketRAMPlugin()
+	{	
+	// See ConstructL() for initialisation completion.
+	}
+		
+/**
+ Safely complete the initialization of the constructed object	
+*/
+void CTPostMarketRAMPlugin::ConstructL()
+	{
+	iName.Set(KPluginNamePin);
+	iDescription.Set(KPluginDescriptionPin);
+	iMinEntropy = KEntropyPin;
+	iFalsePositiveRate = KFalsePosPin;
+  	iFalseNegativeRate = KFalseNegPin;
+  	iClientMessage = HBufC::NewL(2048);
+	ReloadAllFromIniFile();
+	}
+	
+/**
+  Sets information like iActiveState and iSupportsDefaultData from 
+  the TEF ini file to the individual plugin database files
+*/	
+void CTPostMarketRAMPlugin::ReloadAllFromIniFile()
+	{
+	// Set the file to be read, based on the Id of the plugin
+	
+	_LIT(KFileText, "\\tAuth\\tAuthSvr\\testdata\\Pin");
+	_LIT(KFileSuffix, "Db.ini");					
+	_LIT(KFormatFileName,"%S%x%S");
+	
+	TDriveUnit sysDrive (RFs::GetSystemDrive());
+	TBuf<64> fileText(sysDrive.Name());
+	fileText.Append(KFileText);
+	iFileToRead.Format(KFormatFileName,&fileText, Id(), &KFileSuffix);
+
+	//Read data from file to get initialisation information
+	
+	// Open and read in INI file
+	// Default path to look for INI file is in 'c:\system\data' 
+	// on target filesystem
+	
+	CIniData* file=NULL;
+	TRAPD(r,file=CIniData::NewL(iFileToRead));
+	
+	//Put file on the cleanupstack if anything else in this function is going to leave, but nothing does.	
+	
+	if(r!=KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &iFileToRead);
+		}
+	
+	else
+		{
+		// Look for a key under a named section, retrieve text value	
+		TPtrC result;		
+		TBool ret;	//return value from FindVar functions
+		ret=file->FindVar(_L("SectionOne"),_L("iSupportsDefaultData"),result);
+		if(!ret)
+			{
+			RDebug::Print(_L("Key or section not found. iSupportsDefaultData default value used."));
+			iSupportsDefaultData = ETrue;	// Default value
+			}
+		else
+			{
+			_LIT(KFalse,"false");
+			// Create a lower case copy of the data that is read from the file
+			TBuf<10> resultLowerCase;			
+			resultLowerCase.Copy(result);
+			resultLowerCase.LowerCase();
+			iSupportsDefaultData = (resultLowerCase.FindF(KFalse) == KErrNotFound);
+			}		
+				
+		// Set the active state of the plugin depending on the contents of the 
+		// corresponding file, which has been set as a member variable
+		ret =file->FindVar(_L("SectionOne"),_L("activeState"),result);
+		if(!ret)
+			{
+			RDebug::Print(_L("Key or section not found. iActiveState default value of ETRUE used."));			
+			iActiveState = ETrue;	// Default value
+			}
+		else
+			{
+			_LIT(KFalse,"false");
+			// Create a lower case copy of the data that is read from the file
+			TBuf<10> resultLowerCase;			
+			resultLowerCase.Copy(result);
+			resultLowerCase.LowerCase();
+			
+			// If the string 'false' was not found, we set the value to 'true' -the default value
+			iActiveState = (resultLowerCase.FindF(KFalse) == KErrNotFound);
+			}
+		TRAPD(r,file->WriteToFileL());
+		
+		if (KErrNone != r)
+			{
+			RDebug::Print(_L("Error occurred while writing to the file."));
+			TBuf<84> initInfoFile(sysDrive.Name());
+			initInfoFile.Append(KInitInfoFile);
+			RDebug::Print(_L("Filename = %S, KeyName = iSupportsDefaultData,"), &initInfoFile);
+			RDebug::Print(_L("value = %S."), &result);
+			}
+		
+		delete file;
+		TRAP(r,file=CIniData::NewL(KAuthSvrPolicyFile));
+		TPtrC displayMessage;
+		ret=file->FindVar(_L("SectionOne"),_L("DisplayMessage"),displayMessage);
+		if(displayMessage.Length() == 0)   //Value = 0
+			{
+			RDebug::Print(_L("DisplayMessage not passed."));
+			iClientMessage = iClientMessage->ReAllocL(0);	// Default value
+			TPtr ptr(iClientMessage->Des());
+			ptr = KNullDesC();
+			ret=file->SetValue(_L("SectionOne"),_L("DisplayMessage"),displayMessage);
+			TRAP(r,file->WriteToFileL());
+			}
+		else
+			{
+			iClientMessage = iClientMessage->ReAllocL(displayMessage.Length());
+			TPtr ptr(iClientMessage->Des());
+			ptr = displayMessage;
+			ret=file->SetValue(_L("SectionOne"),_L("DisplayMessage"),displayMessage);
+			TRAP(r,file->WriteToFileL());
+			}
+		delete file;
+		}
+			
+	}
+
+void CTPostMarketRAMPlugin::ReloadActiveStateFromIniFile() const
+	{
+	// Set the file to be read, based on the Id of the plugin
+	
+	_LIT(KFileText, "\\tAuth\\tAuthSvr\\testdata\\Pin");
+	_LIT(KFileSuffix, "Db.ini");
+	
+	_LIT(KFormatFileName,"%S%x%S");
+	
+	TDriveUnit sysDrive (RFs::GetSystemDrive());
+	TBuf<64> fileText(sysDrive.Name());
+	fileText.Append(KFileText);
+	iFileToRead.Format(KFormatFileName,&fileText, Id(), &KFileSuffix);
+
+	//Read data from file to get initialisation information
+	
+	// Open and read in INI file
+	// Default path to look for INI file is in 'c:\system\data' 
+	// on target filesystem
+	
+	CIniData* file=NULL;
+	TRAPD(r,file=CIniData::NewL(iFileToRead));
+	
+	//Put file on the cleanupstack if anything else in this function is going to leave, but nothing does.	
+	
+	if(r!=KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &iFileToRead);
+		}
+	
+	else
+		{
+		// Look for a key under a named section, retrieve text value	
+		TPtrC result;		
+		TBool ret=EFalse;	//return value from FindVar functions
+
+		// Set the active state of the plugin depending on the contents of the 
+		// corresponding file, which has been set as a member variable
+		ret =file->FindVar(_L("SectionOne"),_L("activeState"),result);
+		if(!ret)
+			{
+			RDebug::Print(_L("Key or section not found. iActiveState default value of ETRUE used."));			
+			iActiveState = ETrue;	// Default value
+			}
+		else
+			{
+			_LIT(KFalse,"false");
+			// Create a lower case copy of the data that is read from the file
+			TBuf<10> resultLowerCase;
+			resultLowerCase.Copy(result);
+			resultLowerCase.LowerCase();
+			if (resultLowerCase.FindF(KFalse) == KErrNotFound) 
+				iActiveState = ETrue;	// The string 'false' was not found, so we set the value to 'true' -the default value
+			else
+				iActiveState = EFalse;
+			}
+		TRAPD(r,file->WriteToFileL());
+		
+		if (KErrNone != r)
+			{
+			RDebug::Print(_L("Error occurred while writing to the file."));
+			TBuf<84> initInfoFile(sysDrive.Name());
+			initInfoFile.Append(KInitInfoFile);
+			RDebug::Print(_L("Filename = %S, KeyName = activeState,"), &initInfoFile);
+			RDebug::Print(_L("value = %S."), &result);
+			}
+		delete file;
+		}
+	}
+
+
+	
+//Implement CAuthPluginInterface definitions
+
+/**
+ Normally, this would ask the user to input a 4-digit pin and then compare it to 
+ the values that this plugin has been trained with. The result should be the 
+ user that this PIN corresponds to.
+ 'aResult' should be the 'hash' of the stored PIN (which corresponds to the freshly entered PIN)
+ but in this case, it's returned as it was 'unhashed'.
+*/
+
+void CTPostMarketRAMPlugin::Identify(TIdentityId& aId, const TDesC& aClientMessage,
+							   HBufC8*& aResult, TRequestStatus& aRequest)
+	{
+	ASSERT(IsActive());
+	
+	// We are simulating user input by reading from a file
+	// (The data contained in this file has been freshly written by the 'client part in TestExecute')
+	
+	if(aClientMessage != *ClientMessage())
+		{
+		TRequestStatus* status  = &aRequest;
+		User::RequestComplete(status, KErrGeneral);
+		RDebug::Print(_L("Display String Mismatch !!! ABORTING WITH KERRGENERAL"));
+		return;	
+		}
+	else
+		{
+		RDebug::Print(_L("Display String at the plugin matches the string sent !! "));
+		}
+	aRequest = KRequestPending;
+		
+	TBuf8<32> userInput;
+	TRAPD(result1, IdReadUserInput(userInput));	//Get the data from the AuthSvrPolicy.ini file
+	if (KErrNone != result1)
+		{
+		aRequest = result1;
+		}
+	else
+		{
+		// No errors, carry on					
+		//Convert the 8-bit string to a 16-bit string for printing in RDebug
+		HBufC* buf = 0;
+		buf = HBufC::New(32);
+		buf->Des().Copy(userInput);
+		_LIT(KMsgDebug1,"Identifying Userinput read from file = %S");    		
+		RDebug::Print(KMsgDebug1, buf);
+		delete buf;	//Memory cleanup. This string was only needed for the above Print function
+			
+		// Possibly, to allow for the cancellation or quitting, allow that to be the input string
+		_LIT8(KCancelText, "Cancel");	
+		_LIT8(KQuitText, "Quit");	
+		if (userInput == KCancelText)
+			{
+			TRequestStatus* status  = &aRequest;
+			User::RequestComplete(status, KErrAuthServPluginCancelled);
+			//aResult will not be updated, as specified
+			}
+		else if (userInput == KQuitText)
+			{
+			TRequestStatus* status  = &aRequest;
+			User::RequestComplete(status, KErrAuthServPluginQuit);
+			//aResult will not be updated, as specified
+			}
+		else
+			{
+			//compare with the known set of inputs and see if this is one of them.	
+			TInt result2 = CheckForStringPresence(aId, userInput, aRequest);
+			if (KErrNone == result2)	//The above function did not leave
+				{
+				//See if the string was found.
+				TInt length = userInput.Length();
+				
+				aResult = HBufC8::New(length);	
+				aResult->Des().Format(_L8("%S"), &userInput);
+				
+				RDebug::Printf("aResult has been updated. aResult = %S, userInput = %S", 
+									aResult, &userInput);
+				TRequestStatus* status  = &aRequest;
+				User::RequestComplete(status, result2);
+			
+				//Note: aRequest has been updated by the CheckForStringPresence function				
+				}
+			else if (KErrNotFound == result2)
+				{
+				RDebug::Printf("The data that the user input was not found (recognized)"
+								"Error = %d", result2);
+				
+				TRequestStatus* status  = &aRequest;
+				aId = KUnknownIdentity;
+				User::RequestComplete(status, KErrNone);
+				}			
+			else
+				{
+				//Caters for file access errors etc
+				RDebug::Printf("Error occurred while checking for the presence of the string"
+								"in the list. Error = %d", result2);
+				
+				TRequestStatus* status  = &aRequest;
+				aId = KUnknownIdentity;
+				User::RequestComplete(status, KErrNone);
+				}
+			}
+			//End of 'else' where the user did not cancel or quit the 'identify' process
+		}		
+	}
+	
+void CTPostMarketRAMPlugin::Cancel()
+	{		
+	}
+
+void CTPostMarketRAMPlugin::Train(TIdentityId aId, HBufC8*& aResult, TRequestStatus& aRequest)
+	{
+	
+	//Accept user input and update the list of inputs along with IDs.
+	
+ASSERT(IsActive());
+	
+	aRequest = KRequestPending;
+	//TInt result = KErrNone;
+	
+	TBuf8<32> userInput;
+	TRAPD(result1, TrainReadUserInput(userInput));
+	if (KErrNone != result1)
+		{
+		_LIT(KMsgDebug2,"Training Userinput read Error: result = %d");    
+		RDebug::Print(KMsgDebug2, result1);
+		}
+	else
+		{
+		// No errors, carry on		
+		//Convert the 8-bit string to a 16-bit string for printing in RDebug
+		HBufC* buf = 0;
+		buf = HBufC::New(32);
+		buf->Des().Copy(userInput);
+		_LIT(KMsgDebug3, "Training Userinput read from file = %S");
+		RDebug::Print(KMsgDebug3, buf);
+		delete buf;	//Memory cleanup. This string was only needed for the above Print function			
+		
+		// To allow for the cancellation or quitting, allow that to be the input string
+		TRequestStatus aRequest2 = KRequestPending;
+		_LIT8(KCancelText, "Cancel");
+		_LIT8(KQuitText, "Quit");
+		userInput.Trim();		
+		if (userInput.CompareF(KCancelText) == 0)
+			{ aRequest2 = KErrAuthServPluginCancelled; }		
+		else if (userInput.CompareF(KQuitText) == 0)
+			{ aRequest2 = KErrAuthServPluginQuit; }
+		else
+			{
+			//compare with the present set of inputs and see if this is one of them.
+			// update this list with this new user input, tagged to the aId
+			TRAPD(result2, CheckForNewStringPresenceL(aId, userInput, aRequest2));			
+			if (KErrNone != result2)
+				{
+				_LIT(KMsgDebug4, "Training Userinput read Error: results = %d");    
+				RDebug::Print(KMsgDebug4, result2);
+				}
+			else if(KErrNone == aRequest2.Int())
+				{
+				// No errors, update aResult.
+				// First allocate space for it since this variable will always be a 
+				// null pointer coming into this function
+				
+				aResult = HBufC8::New(userInput.Size());									
+				*aResult = userInput;
+				aRequest2 = KErrNone;
+				}			
+			else
+				{
+				_LIT(KMsgDebug5, "Error occurred during training. aRequest.Int() = %d");
+				RDebug::Print(KMsgDebug5, aRequest2.Int());
+				//aResult is not updated, nor is aId				
+				}
+			}
+		// Complete the asynchronous function
+		TRequestStatus* status  = &aRequest;
+		User::RequestComplete(status, aRequest2.Int());
+		}
+	}
+
+TBool CTPostMarketRAMPlugin::IsActive () const
+	{
+	// There is never any user intervention required
+	//return true;
+	// As a future development note, this value may be read from a file (or a section in a file)
+	
+	ReloadActiveStateFromIniFile();
+	return iActiveState;
+	}
+	
+TInt CTPostMarketRAMPlugin::Forget(TIdentityId aId)
+	{
+	// Open the list of userInputs that have been stored by this plugin
+	// Then find the one that corresponds to this id
+	// Then remove this string from the list and return the correct status value
+	
+	//Open the file
+	TRAPD(result3, FindStringAndRemoveL(aId));
+	return result3;
+			
+	}
+	
+TInt CTPostMarketRAMPlugin::DefaultData(TIdentityId aId, HBufC8*& aOutputBuf)
+	{
+	
+	// This implementation of the PIN plugin does support default data.
+	// There will be cases where i don't want this available. Hence the addition of a 
+	// new class member iSupportsDefaultData
+	ReloadAllFromIniFile();
+	
+	TInt result = KErrNotSupported;
+	TRequestStatus aRequest2 = KRequestPending;
+	
+	if (iSupportsDefaultData)	//Class member initialised in the constructor
+		{
+		TBufC8<16> defaultBuf(KDefaultData);
+		//compare with the present set of inputs and see if this is one of them.
+		// update this list with this new user input, tagged to the aId
+		TRAPD(result2, CheckForNewStringPresenceL(aId, defaultBuf, aRequest2));			
+		if (KErrNone != result2)
+			{
+			_LIT(KMsgDebug4, "Training Userinput read Error: results = %d");    
+			RDebug::Print(KMsgDebug4, result2);
+			}
+		else if(KErrNone == aRequest2.Int())
+			{
+			// No errors, update aOutputBuf.
+			// First allocate space for it since this variable will always be a 
+			// null pointer coming into this function				
+			
+			TRAPD(resAlloc, (aOutputBuf = HBufC8::NewL(KDefaultData().Size())) );
+			if (KErrNone != resAlloc)
+				{
+				_LIT(KMsgAllocFailed2,"Failed to allocate memory for updating aOutputBuf");
+				RDebug::Print(KMsgAllocFailed2);
+				result = resAlloc;
+				}
+			else
+				{
+				*aOutputBuf = KDefaultData;
+				result = KErrNone;				
+				}
+			}			
+		else
+			{
+			_LIT(KMsgDebug5, "Error occurred during training. aRequest2.Int() = %d");
+			RDebug::Print(KMsgDebug5, aRequest2.Int());
+			//aOutputBuf is not updated, nor is aId				
+			}
+		}
+		
+	return result;	
+	}
+//--------------------------------------------------------------------------------
+
+/**
+ Utility method to capture the data that the user has input 
+ (in the form of data stored in a file)
+*/
+TInt CTPostMarketRAMPlugin::IdReadUserInput(TBuf8<32>& aInputValue)
+	{
+
+	TInt retValue;
+	CIniData* file=NULL;
+	TRAPD(r,file=CIniData::NewL(iFileToRead));
+	if(r!=KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &iFileToRead);
+		retValue = r;
+		}
+	
+	else
+		{
+		// Look for a key under a named section, retrieve text value	
+		TPtrC result;		
+		TBool ret=EFalse;	//return value from FindVar functions
+		
+		ret=file->FindVar(_L("SectionOne"),_L("IdEnteredPinValue"),result);
+		if(!ret)
+			{
+			RDebug::Print(_L("Unable to find the key in the file %S. IdEnteredPinValue is not known, 9999 used. Error = %d"), &iFileToRead, ret);
+			_LIT8(KEnteredPinValueErr, "9999");
+			aInputValue = KEnteredPinValueErr;	// Default value
+			retValue = KErrNotFound;						
+			}
+		else
+			{
+			//Later,include a check to ensure that only digits were entered
+			aInputValue.Copy(result);
+			aInputValue.Trim();			
+			retValue = KErrNone;	//Not necessary
+			}
+		delete file;	//memory cleanup
+		}
+	
+	return retValue;
+	}
+
+TInt CTPostMarketRAMPlugin::TrainReadUserInput(TBuf8<32>& aInputValue)
+	{
+
+	TInt retValue;
+	CIniData* file=NULL;
+	TRAPD(r,file=CIniData::NewL(iFileToRead));
+	if(r!=KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &iFileToRead);
+		retValue = r;
+		}
+	
+	else
+		{
+		// Look for a key under a named section, retrieve text value	
+		TPtrC result;		
+		TBool ret=EFalse;	//return value from FindVar functions
+		
+		ret=file->FindVar(_L("SectionOne"),_L("TrainEnteredPinValue"),result);
+		if(!ret)
+			{
+			RDebug::Print(_L("Unable to find the key in the file %S. TrainEnteredPinValue is not known, 9999 used. Error = %d"), &iFileToRead, ret);
+			_LIT8(KEnteredPinValueErr, "9999");
+			aInputValue = KEnteredPinValueErr;	// Default value
+			retValue = KErrNotFound;						
+			}
+		else
+			{
+   			aInputValue.Copy(result);
+			aInputValue.Trim();
+			retValue = KErrNone;	//Not necessary
+			}
+		delete file;	//memory cleanup
+		}
+	
+	return retValue;
+	}
+
+TInt CTPostMarketRAMPlugin::Reset(TIdentityId/* aId*/, const TDesC&/* aRegistrationData*/, HBufC8*&/* aResult*/)
+	{
+	return KErrNotSupported;
+	}
+
+/**
+ Utility method to compare the data that the user has input 
+ with all the data that has been stored for users 
+ Called by Identify()
+ @return - success or failure value
+*/
+TInt CTPostMarketRAMPlugin::CheckForStringPresence(TIdentityId& aId, TBuf8<32> aInputValue, TRequestStatus& aRequestValue)
+	{
+
+	TInt retValue = KErrNone;	
+	// First format the aInputValue string so that it starts with a ':' and ends with a ','.
+	_LIT8(KFormatValue2, ":%S,");
+	TBuf8<32> aInputValue2;
+	aInputValue2.Format(KFormatValue2, &aInputValue);
+
+	//Convert the 8-bit string to a 16-bit string for printing in RDebug
+	HBufC* buf = 0;
+	buf = HBufC::New(32);
+	buf->Des().Copy(aInputValue);		
+	RDebug::Print(_L("Formatted string: %S"), buf);
+	delete buf;	//Memory cleanup. This string was only needed for the above Print function
+
+	TBuf8<500> pinFileContents1, pinFileContents2;
+	// Read the contents of the file that contains all the ID/PIN combinations
+
+	CIniData* file=NULL;
+	TRAPD(r,file=CIniData::NewL(iFileToRead));
+	if(r!=KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &iFileToRead);
+		retValue = r;
+		}	
+	else
+		{
+		// Look for a key under a named section, retrieve text value	
+		TPtrC result;		
+		TBool ret=EFalse;	//return value from FindVar functions
+		
+		ret=file->FindVar(_L("SectionOne"),_L("Identity&PinValues"),result);
+		if(!ret)
+			{
+			RDebug::Print(_L("Unable to find the Identity&PinValues key in the file %S."), &iFileToRead);
+			retValue = KErrNotFound;
+			aRequestValue =KErrNotFound;
+			}
+		else
+			{
+			pinFileContents1.Copy(result);	
+			
+			TInt searchResult;
+			searchResult = pinFileContents1.Find(aInputValue2);
+			
+			if (KErrNotFound == searchResult)
+				{
+				RDebug::Print(_L("Userinput not found in the pinFile %S. Identification error"), &iFileToRead);
+				aRequestValue= KErrAuthServIdentityNotFound;
+				retValue  = searchResult;
+				}
+			else if (searchResult)	// a positive value
+				{				
+				// Now find the userID by searching back through the string for the "," marker				
+				pinFileContents2 = pinFileContents1.Left(searchResult);
+				TInt userIdStartPos = pinFileContents2.LocateReverse(',');
+								 
+				//Extract this userId for use by the calling function
+				TBuf8<50> p1 = pinFileContents2.Right(searchResult - userIdStartPos - 1);
+				TLex8 input (p1);
+				TRadix aRadix = EDecimal;
+				input.Val(aId, aRadix);
+				RDebug::Print(_L("UserId that is stored = %u"), aId);
+				aRequestValue = KErrNone;
+				retValue = KErrNone;
+				}				
+			else
+				{
+				RDebug::Print(_L("Unexpected error in the 'Find' function. Searchresult = %d"), searchResult);
+				aRequestValue = searchResult;
+				retValue = searchResult;				
+				}//End check for key&section search in file				
+			}//End check for safe file access
+		delete file;
+		}
+	
+	return retValue;
+	}
+
+/**
+ Utility method to compare the data that the user has input 
+ with all the data that has been stored for users 
+ Used to find out if the input is unique. 
+ -since KIdAmbiguous is no longer used, KIdCancel will be returned if the input is non-unique
+ Called by Train() and DefaultData()
+*/
+TInt CTPostMarketRAMPlugin::CheckForNewStringPresenceL(TIdentityId aId, TBuf8<32> aInputValue, TRequestStatus& aRequestValue)
+	{	
+	TBuf8<500> pinFileContents, pinFileContents2;
+	TInt retValue = KErrNone;
+
+	CIniData* file=NULL;
+	TRAPD(r,file=CIniData::NewL(iFileToRead));
+		
+	if(r!=KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &iFileToRead);
+		return r;
+		}	
+	
+	// Look for a key under a named section, retrieve text value	
+	TPtrC result;		
+	TBool ret=EFalse;	//return value from FindVar functions
+	aRequestValue = KErrAuthServIdentityNotFound;	//Initialisation		
+			
+	ret=file->FindVar(KPluginIniSection, KPinDbTag,result);
+	if(!ret)
+		{
+		RDebug::Print(_L("Unable to find the %S key in the file %S."), &KPinDbTag, &iFileToRead);
+		delete file;
+		return KErrNotFound;			
+		}
+	
+	//Copy the data from the named section in the file, and see if any previous user has used this input string
+	pinFileContents.Copy(result);			
+	
+	TInt searchResultPin;
+	TBuf8<50> searchStringPin;
+	_LIT8(KFormat3, ":%S,");
+	searchStringPin.Format(KFormat3, &aInputValue);
+	searchResultPin = pinFileContents.Find(searchStringPin);
+				
+	if (KErrNotFound == searchResultPin)
+		{				
+		//check that the identity is unique, if so, update the Db 
+		// with the new Id-PIN pair, as is done already
+		// else update the PIN only, ie training data for that identity
+		TInt searchResultId;
+		TBuf8<50> searchStringId;
+		_LIT8(KFormat4, ",%u:");
+		searchStringId.Format(KFormat4, aId);
+		
+		searchResultId = pinFileContents.Find(searchStringId);
+		
+		TDriveUnit sysDrive (RFs::GetSystemDrive());
+		TBuf<80> policyFile;
+		if (KErrNotFound == searchResultId)
+			{									
+			// Add this entry to the file
+			// This is a simple system, expecting a format as below:
+			// ",aId:inputPin,aId:inputPin,aId:inputPin,"				
+			
+			_LIT8(KFormat2, "%S%u:%S,");
+			if (pinFileContents.Size() == 0)
+				{
+				pinFileContents.Append(',');	//Initialisation
+				}
+			pinFileContents2.Format(KFormat2, &pinFileContents, aId, &aInputValue);				
+										
+			//For the purpose of writing the data to a file, i'll create a 16-bit version of pinFileContents
+			TInt ret2 = 0;
+			HBufC* buf = 0;
+			buf = HBufC::NewL(pinFileContents2.Length());
+			buf->Des().Copy(pinFileContents2);												
+			ret2 = file->SetValue(_L("SectionOne"),_L("Identity&PinValues"), *buf);
+			
+			TRAPD(r,file->WriteToFileL());
+			
+						
+			if (KErrNone != r)
+				{
+				policyFile.Copy(sysDrive.Name());
+				policyFile.Append(KPolicyFile);
+				RDebug::Print(_L("Error occurred while writing to the file. Filename = %S, KeyName = AllUserID&PinValues, value = %S."), &policyFile, buf);
+				}
+			delete buf;		//Memory cleanup. This string was only needed for the above Print function
+			
+			if(KErrNone == ret2)
+				{				
+				aRequestValue = KErrNone;
+				
+				//Update the global database
+				AddToGlobalDb(aId, aInputValue);
+				}
+			else
+				{
+				RDebug::Print(_L("Error occurred while writing data to file. Error = %d"), ret2);					
+				aRequestValue = ret2;
+				}
+			
+			}
+
+		else
+			{
+			//The Identity has already been trained with this plugin, 
+			// update the PIN (training data)
+			
+			//extract the string to the right of the end of the aId
+			pinFileContents2 = pinFileContents.Mid(searchResultId + searchStringId.Size());
+			
+			//Find the end of the PIN (Training data)
+			_LIT8(KPinEndMarker, ",");
+			TBufC8<5> bufPinEndMarker(KPinEndMarker);					
+			TInt pinEndPos = pinFileContents2.Find(bufPinEndMarker);
+			
+			//Replace this with the new PIN
+			pinFileContents.Replace((searchResultId + searchStringId.Size()),
+									 pinEndPos, aInputValue);	
+			
+			//For the purpose of writing the data to a file, i'll create a 16-bit version of pinFileContents
+			TInt ret2 = 0;
+			HBufC* buf = 0;
+			buf = HBufC::NewL(pinFileContents.Length());
+			buf->Des().Copy(pinFileContents);
+								
+			ret2 = file->SetValue(_L("SectionOne"),_L("Identity&PinValues"), *buf);
+			
+			TRAPD(r,file->WriteToFileL());
+			
+			if (KErrNone != r)
+				{
+				policyFile.Copy(sysDrive.Name());
+				policyFile.Append(KPolicyFile);
+				RDebug::Print(_L("Error occurred while writing to the file. Filename = %S, KeyName = AllUserID&PinValues, value = %S."), &policyFile, buf);
+				}
+			delete buf;		//Memory cleanup. This string was only needed for the above Print function
+			
+			if(KErrNone ==ret2)
+				{				
+				aRequestValue = KErrNone;
+				
+				//Update the global database
+				AddToGlobalDb(aId, aInputValue);
+				}
+			else
+				{
+				RDebug::Print(_L("Error occurred while writing data to file. Error = %d"), ret2);					
+				aRequestValue = ret2;
+				}
+			}
+		delete file;
+		return ret;
+		}
+	if (searchResultPin)	// a positive value
+		{
+		// A user has already tried to train this plugin using the given data.
+		// The pinFileContents are not updated, to avoid duplication
+		
+		aRequestValue = KErrAuthServPluginCancelled;
+		delete file;
+		return searchResultPin;
+		}	
+	
+	RDebug::Print(_L("Unexpected error in the 'Find' function. SearchresultPin = %d"), searchResultPin);
+	retValue = searchResultPin;
+
+	delete file;
+		
+	return retValue;
+	}
+
+	
+/**
+ Utility function to remove the training data that is associated with a given Id
+ Called by the Forget function
+ @return - KIdSuccess, KIdUnknown or some error code  
+ */ 
+TInt CTPostMarketRAMPlugin::FindStringAndRemoveL (TIdentityId aId)
+	{
+	TBuf8<500> pinFileContents, pinFileContents2;
+	TInt retValue = KErrAuthServNoSuchIdentity;		//init
+	CIniData* file=NULL;
+	//First read the list of userId and PIN combinations from a file
+	TRAPD(r,file=CIniData::NewL(iFileToRead));
+	if(r!=KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &iFileToRead);
+		retValue = r;
+		}	
+	else
+		{
+		// Look for a key under a named section, retrieve text value	
+		TPtrC result;		
+		TBool ret=EFalse;	//return value from FindVar functions
+				
+		ret=file->FindVar(KPluginIniSection, KPinDbTag,result);
+		if(!ret)
+			{
+			RDebug::Print(_L("Config error: Unable to find the %S key in the file %S."), &KPinDbTag, &iFileToRead);
+			retValue = KErrNotFound;						
+			}
+		else
+			{
+			//Copy the data from the named section in the file, and see if any previous user has used this input string
+			pinFileContents.Copy(result);				
+			
+			//Format the searchstring as defined in the file so that it starts with a ',' and ends with a ':'.
+			_LIT8(KFormatValue3, ",%u:");			
+			
+			TBuf8<32> searchString;
+			searchString.Format(KFormatValue3, aId);
+
+			//For the purpose of printing the data to a file, i'll create a 16-bit version of pinFileContents
+			HBufC* buf = 0;
+			buf = HBufC::NewL(searchString.Length());
+			buf->Des().Copy(searchString);
+			RDebug::Print(_L("Formatted searchString used in 'FindStringAndRemove(): %S"), buf);
+			delete buf;
+
+			TInt userIdStartPos;	//The offset of the searchString within pinFileContents
+									//i.e the position of the '.' just before the identityId
+			userIdStartPos = pinFileContents.Find(searchString);
+			if (KErrNotFound == userIdStartPos)
+				{
+				RDebug::Print(_L("FindStringAndRemoveL: The specified ID was not found in the pinFile"));
+				retValue = KErrAuthServNoSuchIdentity;	//KIdUnknown;
+				}
+			else
+				{
+				
+				//Find where the string (including PIN) ends
+				TLex8 aLex = TLex8(pinFileContents);
+				TInt length(0);
+				aLex.Inc(userIdStartPos+1);
+				while(aLex.Peek() != ',') 
+					{
+					aLex.Inc();
+					length++;
+					}
+	
+				//remove the found (total) string from the list (including the starting ',')
+				pinFileContents.Delete(userIdStartPos,length+1);
+				
+				//Update the file
+				//For the purpose of writing the data to a file, i'll create a 16-bit version of pinFileContents
+				TInt ret2 = 0;
+				HBufC* buf;
+				buf = HBufC::NewL(pinFileContents.Length());	
+				buf->Des().Copy(pinFileContents);
+								
+				ret2 = file->SetValue(KPluginIniSection, KPinDbTag, *buf);
+				
+				TRAPD(r,file->WriteToFileL());
+				TDriveUnit sysDrive (RFs::GetSystemDrive());
+				TBuf<2> sysDriveName (sysDrive.Name());
+				TBuf<84> policyFile;
+								
+				if (KErrNone != r)
+					{
+					policyFile.Copy(sysDriveName);
+					policyFile.Append(KPolicyFile);
+					RDebug::Print(_L("Error occurred while writing to the file. Filename = %S, KeyName = AllUserID&PinValues, value = %S."), &policyFile, buf);
+					}
+				delete buf;		//Memory cleanup. This string was only needed for the above Print function
+				
+				if (KErrNone !=ret2)
+					{
+					policyFile .Copy(sysDriveName);
+					policyFile.Append(KAuthSvrPolicyFile);
+					RDebug::Print(_L("Error occurred in WriteToFileL(). Error = %d. Filename= %S"), ret2, &policyFile);
+					retValue = ret2;
+					}
+				else
+					{
+					retValue = KErrNone;		
+					}				
+				}			
+			}//End check for key&section search in file
+		delete file;
+		}//End check for safe file access
+	
+	return retValue;
+	}
+
+
+/**
+ Utility function to Update the Global Db with the training data 
+ that is associated with a given Id. The update will not happen if 
+ the identity is already present in this list, i.e. it's been pu in 
+ by another plugin
+ Called by the CheckForNewStringPresence function
+ @return - KErrNone, or some error code
+*/
+TInt CTPostMarketRAMPlugin::AddToGlobalDb (TIdentityId aId, TBuf8<32> aInputValue)
+	{
+	
+	TBuf8<500> totalDbFileContents, totalDbFileContents2;
+	TInt retValue = KErrNone;
+	CIniData* file=NULL;
+	
+	TDriveUnit sysDrive (RFs::GetSystemDrive());
+	TDriveName sysDriveName (sysDrive.Name());
+	TBuf<128> authSvrPolicyFile(sysDriveName);
+	authSvrPolicyFile.Append(KAuthSvrPolicyFile);
+	
+	TRAPD(r,file=CIniData::NewL(authSvrPolicyFile));	
+	if(r!=KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &authSvrPolicyFile);
+		retValue = r;
+		}	
+	else
+		{
+		// Look for a key under a named section, retrieve text value	
+		TPtrC result;		
+		TBool ret=EFalse;	//return value from FindVar functions		
+				
+		ret=file->FindVar(KPluginIniSection, KTotalDbTag,result);
+		if(!ret)
+			{
+			RDebug::Print(_L("Unable to find the %S key in the file %S."), &KTotalDbTag, &authSvrPolicyFile);
+			retValue = KErrNotFound;		
+			}
+		else
+			{
+			//Copy the data from the named section in the file, and see if any previous user has used this input string
+			totalDbFileContents.Copy(result);
+			TBuf8<20> aidString;
+			aidString.Num(aId, EDecimal);			
+			TInt searchResult;			
+			searchResult = totalDbFileContents.Find(aidString);
+			
+			if (KErrNotFound == searchResult)
+				{
+				// Add this entry to the file
+				// This is a simple system, expecting a format as below:
+				// ",aId:inputPin,aId:inputPin,aId:inputPin,"				
+				_LIT8(KFormat2, "%S%u:%S,");
+				if (totalDbFileContents.Size() == 0)
+					{					
+					totalDbFileContents.Append(',');	//Initialisation
+					}
+				totalDbFileContents2.Format(KFormat2, &totalDbFileContents, aId, &aInputValue);				
+					
+				//For the purpose of writing the data to a file, i'll create a 16-bit version of pinFileContents
+				TInt ret2 = 0;
+				HBufC* buf = 0;
+				buf = HBufC::New(totalDbFileContents2.Length());
+				buf->Des().Copy(totalDbFileContents2);								
+				ret2 = file->SetValue(KPluginIniSection, KTotalDbTag, *buf);
+				
+				TRAPD(r,file->WriteToFileL());
+									
+				if (KErrNone != r)
+					{
+					TBuf<80> policyFile(sysDriveName);
+					policyFile.Append(KPolicyFile);
+					RDebug::Print(_L("Error occurred while writing to the file. Filename = %S, KeyName = AllUserID&PinValues, value = %S."), &policyFile, buf);
+					}
+				delete buf;		//Memory cleanup. This string was only needed for the above Print function
+				
+				if (KErrNone !=ret2)
+					{
+					RDebug::Print(_L("Error occurred in SetValue(). Error = %d. Filename= %S"), ret2, &authSvrPolicyFile);
+					retValue = ret2;
+					}
+				}
+			else
+				{
+				// A user has already tried to train this plugin using the given data.
+				// The pinFileContents are not updated, to avoid duplication				
+				retValue = KErrNone;													
+				}//End aidString search in the totalDbFileContents string (Find())
+			}//End check for key&section search in file (FindVar())
+			delete file;
+		}//End check for safe file access
+	return retValue;
+	}
+
+const HBufC* CTPostMarketRAMPlugin::ClientMessage()
+	{
+	return iClientMessage;
+	}
+
+const TPtrC& CTPostMarketRAMPlugin::Name() const
+  {
+  return iName;
+  }
+const TPtrC& CTPostMarketRAMPlugin::Description() const
+  {
+  return iDescription;
+  }
+AuthServer::TAuthPluginType CTPostMarketRAMPlugin::Type() const 
+  {
+  return iType;
+  }
+
+AuthServer::TEntropy CTPostMarketRAMPlugin::MinEntropy() const
+  {
+  return iMinEntropy;
+  }
+
+AuthServer::TPercentage CTPostMarketRAMPlugin::FalsePositiveRate() const
+  {
+  return iFalsePositiveRate;
+  }
+
+AuthServer::TPercentage CTPostMarketRAMPlugin::FalseNegativeRate() const
+  {
+  return iFalseNegativeRate;
+  }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/tpostmarketplugins/tpostmarketramplugin.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,149 @@
+/*
+* Copyright (c) 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: 
+* CTPostRAMMarketPlugin is a dummy interface implementation for CAuthPluginInterface
+*
+*/
+
+
+
+#ifndef TPOSTMARKETRAMPLUGIN_H
+#define TPOSTMARKETRAMPLUGIN_H
+
+#include "authserver_client.h"
+#include <authserver/authplugininterface.h>
+
+//An implementation of the CAuthPluginInterface definition
+
+using namespace AuthServer;
+	
+//implementation_uid = 0x1023F3F3
+class CTPostMarketRAMPlugin : public CAuthPluginInterface
+	{
+public:
+	// Two phase constructor
+	static CTPostMarketRAMPlugin* NewL();
+	// Destructor
+	virtual ~CTPostMarketRAMPlugin();
+	//Implementation of CAuthPluginInterface definitions using a PIN system
+	virtual void Identify(TIdentityId& aId, const TDesC& aClientMessage, HBufC8*& aResult, TRequestStatus& aRequest);	
+	virtual void Cancel();	
+	virtual void Train(TIdentityId aId, HBufC8*& aResult, TRequestStatus& aRequest);		
+	virtual TBool IsActive() const;
+	virtual TInt Forget(TIdentityId aId);
+	virtual TInt DefaultData(TIdentityId aId, HBufC8*& aOutputBuf);
+	virtual TInt Reset(TIdentityId aId, const TDesC& aRegistrationData, HBufC8*& aResult);
+	virtual TPluginId Id() const = 0;
+	virtual const TPtrC& Name() const;
+	virtual const TPtrC& Description() const;
+	virtual AuthServer::TEntropy MinEntropy() const;
+	virtual AuthServer::TPercentage FalsePositiveRate() const;
+	virtual AuthServer::TPercentage FalseNegativeRate() const;
+	virtual AuthServer::TAuthPluginType Type() const;
+		
+	// Utility functions
+	TInt IdReadUserInput(TBuf8<32>& inputValue);
+	TInt TrainReadUserInput(TBuf8<32>& inputValue);
+	TInt CheckForStringPresence(TIdentityId& aId, TBuf8<32> aInputValue, TRequestStatus& aRequestValue);
+	TInt CheckForNewStringPresenceL(TIdentityId aId, TBuf8<32> aInputValue, TRequestStatus& aRequestValue);
+	TInt FindStringAndRemoveL(TIdentityId aId);
+	TInt AddToGlobalDb (TIdentityId aId, TBuf8<32> aInputValue);
+	TInt RemoveFromGlobalDb (TIdentityId aId);
+	const HBufC* ClientMessage ();
+	
+
+public:
+	mutable TBuf<70> iFileToRead;
+	void ConstructL();
+	CTPostMarketRAMPlugin();
+	void ReloadAllFromIniFile();
+	void ReloadActiveStateFromIniFile() const;
+
+protected:
+ 	/// The name of the plugin. Derived classes should set this member.
+ 	TPtrC iName;
+ 	/// The plugin's description. Derived classes should set this member.
+ 	TPtrC iDescription;
+ 	/// The minumum entropy provided by the plugin. Derived classes should set
+ 	/// this member.
+ 	AuthServer::TEntropy iMinEntropy;
+ 	/// The false positive rate of the plugin. Derived classes should set this
+ 	/// member.
+ 	AuthServer::TPercentage iFalsePositiveRate;
+ 	/// The false negative rate of the plugin. Derived classes should set this
+ 	/// member.
+ 	AuthServer::TPercentage iFalseNegativeRate;
+  	/// The type of the plugin. Derived classes should set this member.
+ 	AuthServer::TAuthPluginType iType;
+
+private:
+	// Data read from file determining if this plugin supports default data
+	TBool iSupportsDefaultData;
+	mutable TBool iActiveState;
+	HBufC* iClientMessage;
+	};
+
+
+//=========================================================================	
+// The various classes that are spawned from this base class by inheriting the implementations besides
+// the Id() function (Uses the #define macro)
+
+// number is hex, type is one of the TAuthPluginType enums
+// Id() returns the Id of the plugin
+
+
+#define NClass(id,type) class CTPostMarketRAMPlugin##id : public CTPostMarketRAMPlugin\
+	{                                        		\
+public:                                      		\
+	typedef CTPostMarketRAMPlugin##id TMyPinType;	    	\
+	TPluginId Id() const 		               		\
+		{ return 0x##id; }  	               		\
+	static TMyPinType* NewL()                   	\
+    	{										 	\
+        TMyPinType* r = new (ELeave) TMyPinType();	\
+        CleanupStack::PushL(r);						\
+	  	r->ConstructL();						 	\
+	  	CleanupStack::Pop(r);						\
+        r->iType = type;                            \
+	  	return r;                              		\
+		}											\
+	}
+
+NClass(10234100, EAuthKnowledge);
+	
+//=========================================================================		
+
+// Constants used in the utility functions -File locations, etc
+_LIT8(KDefaultData, "0000");
+_LIT(KInitInfoFile, "\\tAuth\\tAuthSvr\\testdata\\initialisation_Info.ini");
+_LIT(KPolicyFile, 	"\\tAuth\\tAuthSvr\\testdata\\AuthSvrPolicy.ini");
+
+_LIT(KPluginNamePin, "PostMarketRAMPlugin");
+_LIT(KPluginDescriptionPin, "Post Market RAM Plugin, a test plugin does nothing.");
+
+static const TInt KEntropyPin = 999;
+static const TInt KFalsePosPin = 100;
+static const TInt KFalseNegPin = 10;
+
+//From Step_Base.cpp
+_LIT(KPluginIniSection,			"SectionOne");
+_LIT(KAuthSvrPolicyFile, 		"\\tAuth\\tAuthSvr\\testdata\\AuthSvrPolicy.ini");
+_LIT(KDefaultPluginTag, 		"DefaultPlugin");
+_LIT(KEnteredPinTag, 			"EnteredPinValue");
+_LIT(KPinDbTag,					"Identity&PinValues");
+_LIT(KTotalDbTag,				"AllUserID&PinValues");
+_LIT(KInitPinDatabaseValue,		",");
+	
+
+#endif	/* TPOSTMARKETRAMPLUGIN_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthcliserv/scripts/tauthcliserv.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,121 @@
+//
+// Copyright (c) 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: 
+//
+//
+// Copyright (c) 2009 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:
+//
+//! @file
+// authentication client server classes tests
+
+
+// Prepare a clone of TAuthSvr to possess authserver's SID.
+// This is required for modifying the authserver's central repository file.
+// This clone must be deleted at the end of the test.
+
+RUN_PROGRAM 100 SETCAP tAuthSvr.exe 188b0 -SID 102740FC tAuthSvr_new.exe
+
+
+LOAD_SUITE tauthcliserv
+LOAD_SUITE tpinplugin
+LOAD_SUITE tAuthSvr_new
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHCLISVR-0004
+//! @SYMTestCaseDesc	Remove_PinPlugin_Data
+START_TESTCASE SEC-AUT-AUTHCLISVR-0004
+RUN_UTILS DeleteFile C:\pinplugin_inactive.txt
+RUN_TEST_STEP_RESULT 0 100	tAuthSvr_new 	INIT_CENREP c:\tauth\tAuthSvr\scripts\tauthsvr2.ini defaultplugin1
+
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_in.dat
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_out.dat
+END_TESTCASE SEC-AUT-AUTHCLISVR-0004
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHCLISVR-0005
+//! @SYMTestCaseDesc	Initialize_PinPlugin_Data
+START_TESTCASE SEC-AUT-AUTHCLISVR-0005
+RUN_TEST_STEP 100 tpinplugin CreateInputFile c:\tauth\tpinplugin\scripts\tpinplugin.ini datfile
+END_TESTCASE SEC-AUT-AUTHCLISVR-0005
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHCLISVR-0001
+//! @SYMTestCaseDesc	Tests that on first start only the default user in present in the database.
+//! @SYMREQ REQ 4953 
+//! @SYMTestPriority Medium
+//! @SYMTestActions  
+//! @SYMTestExpectedResults All tests pass.
+//! @SYMDevelopedForRelease 
+
+START_TESTCASE SEC-AUT-AUTHCLISVR-0001
+RUN_UTILS MKDIR C:\testplugin_active\
+RUN_TEST_STEP 40 tauthcliserv FIRSTSTART 
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+
+END_TESTCASE SEC-AUT-AUTHCLISVR-0001
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHCLISVR-0002
+//! @SYMTestCaseDesc	Tests that correct list of identities are retrieved from auth server 
+//!						database.
+//!						Expected plugins are listed correctly.
+//!						Authentication of a single and multiple user(s).
+//! @SYMREQ REQ 4948 
+//! @SYMTestPriority Medium
+//! @SYMTestActions  
+//! @SYMTestExpectedResults All tests pass.
+//! @SYMDevelopedForRelease 
+
+START_TESTCASE SEC-AUT-AUTHCLISVR-0002
+RUN_UTILS MKDIR C:\testplugin_active\
+RUN_TEST_STEP 120 tauthcliserv CLIENT 
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+
+END_TESTCASE SEC-AUT-AUTHCLISVR-0002
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHCLISVR-0003
+//! @SYMTestCaseDesc	Tests removal of identity, registration, training and retaining of plugin.
+//! @SYMREQ REQ 4948 
+//! @SYMTestPriority Medium
+//! @SYMTestActions  
+//! @SYMTestExpectedResults All tests pass.
+//! @SYMDevelopedForRelease 
+
+START_TESTCASE SEC-AUT-AUTHCLISVR-0003
+RUN_UTILS MKDIR C:\testplugin_active\
+RUN_TEST_STEP 120 tauthcliserv MGRCLIENT 
+RUN_UTILS DELETEDIRECTORY C:\testplugin_active\
+
+END_TESTCASE SEC-AUT-AUTHCLISVR-0003
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHCLISVR-0006
+//! @SYMTestCaseDesc	Remove_PinPlugin_Data
+START_TESTCASE SEC-AUT-AUTHCLISVR-0006
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_in.dat
+RUN_UTILS DeleteFile  C:\t_pinplugindlg_out.dat
+END_TESTCASE SEC-AUT-AUTHCLISVR-0006
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthcliserv/scripts/tauthcliserv_debug.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,44 @@
+//
+// Copyright (c) 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: 
+//
+//
+// Copyright (c) 2009 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:
+//
+//! @file
+// authentication db classes tests
+
+LOAD_SUITE tauthcliserv
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHCLISVR-0007
+//! @SYMTestCaseDesc	Authentication db classes test
+START_TESTCASE SEC-AUT-AUTHCLISVR-0007
+RUN_PANIC_STEP_RESULT 64 AUTHEXPR 10 tauthcliserv AuthExprTypePanic
+RUN_PANIC_STEP_RESULT 64 AUTHEXPR 10 tauthcliserv AuthExprTypePanicBadLeft
+RUN_PANIC_STEP_RESULT 64 AUTHEXPR 10 tauthcliserv AuthExprTypePanicBadRight
+END_TESTCASE SEC-AUT-AUTHCLISVR-0007
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthcliserv/scripts/tauthexpr.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,45 @@
+//
+// Copyright (c) 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: 
+//
+//
+// Copyright (c) 2009 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:
+//
+//! @file
+// authentication client server classes tests
+
+LOAD_SUITE tauthcliserv
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHCLISVR-0008
+//! @SYMTestCaseDesc	Authentication client server classes test
+START_TESTCASE SEC-AUT-AUTHCLISVR-0008
+RUN_TEST_STEP 10 tauthcliserv AuthExprBuild
+RUN_PANIC_STEP_RESULT 3 AuthServer 10 tauthcliserv AuthExprBadAuthExt
+RUN_TEST_STEP 10 tauthcliserv AuthExprHighVer
+RUN_TEST_STEP 300 tauthcliserv AuthExprEval
+END_TESTCASE SEC-AUT-AUTHCLISVR-0008
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthcliserv/step_authexpr_build.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,759 @@
+/*
+* Copyright (c) 2005-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 <s32mem.h>
+#include "tauthcliservstep.h"
+#include <scs/scsclient.h>
+using namespace AuthServer;
+
+inline void CorruptTypeField(const CAuthExpressionImpl* aExpr)
+/**
+	Corrupt the type field of the supplied
+	expression so the invariant-checking code fails.
+	
+	@param	aExpr			Expression to corrupt.  This
+							is const, even though it is
+							modified, because Left and
+							Right return pointers to const
+							expressions.
+ */
+	{
+	// 4 == _FOFF(CAuthExpression, iType), but iType is private
+	// sizeof(CAuthExpression::iType) == 8
+	*(((TUint32*)aExpr) + 2) = ~0;
+	}
+
+
+CTStepAuthExprBuild::CTStepAuthExprBuild()
+/**
+	Record this test step's name.
+ */
+	{
+	SetTestStepName(KTStepAuthExprBuild);
+	}
+
+
+TVerdict CTStepAuthExprBuild::doTestStepL()
+/**
+	Implement CTestStep by creating simple and
+	complex expression types.  In debug mode this
+	function also ensures the operations fail
+	cleanly in OOM.
+ */
+	{
+	RunTestsL();		// create all expression types
+	TestFailedCombsL();
+	TestCorruptPersistL();
+	
+	// create all expression types in OOM
+#ifdef _DEBUG
+	TInt i = 1;
+	TBool failed = EFalse;
+	
+	do
+		{
+		__UHEAP_SETFAIL(RAllocator::EDeterministic, i);
+		TRAPD(r, RunTestsL());
+		TESTL(r == KErrNone || r == KErrNoMemory);
+		__UHEAP_RESET;
+		
+		failed = (r == KErrNoMemory);
+		++i;
+		} while (failed);
+	
+	// i is now one greater than the last alloc count.
+	// run the tests again, to ensure there really was
+	// enough memory, and this wasn't just an error case
+	// that wasn't handled properly.
+	
+	TInt lim = i * 2;
+	while (i++ < lim)
+		{
+		__UHEAP_SETFAIL(RAllocator::EDeterministic, i);
+		RunTestsL();
+		__UHEAP_RESET;
+		}
+#endif	
+	
+	return EPass;
+	}
+
+
+void CTStepAuthExprBuild::RunTestsL()
+/**
+	Helper function for doTestStepL.  This generates
+	authentication expressions.
+	
+	1. creating simple type and plugin id nodes.
+	2. creating simple AND and OR combinations
+	3. creating complex (multi-level) AND and OR combinations.
+ */
+	{
+	TestSimpleExprL();
+	TestSimpleExprCombsConsL();
+	TestComplexExprCombsConsL();
+	}
+
+
+void CTStepAuthExprBuild::TestExprLD(
+	void (CTStepAuthExprBuild::*aTestFuncL)(CAuthExpression*),
+	CAuthExpression* aExpr)
+/**
+	Run the supplied test function on the supplied expression.
+	This function only exists to place the expression on the
+	cleanup stand and delete it afterwards.
+	
+	This function leaves with KErrNoMemory if the supplied
+	expression is NULL.
+ */
+	{
+	User::LeaveIfNull(aExpr);
+	
+	CleanupStack::PushL(aExpr);
+	(this->*aTestFuncL)(aExpr);
+	
+	// test externalization and internalization
+	// (this can fail because of OOM.)
+	TSizeStream ss;
+	RWriteStream ws(&ss);
+	aExpr->ExternalizeL(ws);
+	
+	HBufC8* buf = HBufC8::NewLC(ss.Size());
+	TPtr8 bufPtr(buf->Des());	
+	RDesWriteStream dws(bufPtr);
+	aExpr->ExternalizeL(dws);
+	dws.CommitL();
+	
+	RDesReadStream drs(*buf);
+	CAuthExpression* aeRestore = CAuthExpressionImpl::NewL(drs);
+	CleanupStack::PushL(aeRestore);
+	
+	(this->*aTestFuncL)(aExpr);
+	
+	CleanupStack::PopAndDestroy(3, aExpr);
+	}
+
+
+void CTStepAuthExprBuild::TestSimpleExprL()
+/**
+	Test constructing leaf node expressions from
+	a plugin ID and a plugin type.
+ */
+	{
+	__UHEAP_MARK;
+	
+	TestExprLD(&CTStepAuthExprBuild::TestPluginIdL, AuthExpr(KTestPluginId0));
+	TestExprLD(&CTStepAuthExprBuild::TestPluginTypeL, AuthExpr(EAuthKnowledge));
+
+	__UHEAP_MARKEND;
+	}
+
+
+void CTStepAuthExprBuild::TestPluginIdL(CAuthExpression* aExpr)
+/**
+	Tests the supplied expression is a simple expression
+	for plugin ID KTestPluginId0.
+ */
+	{
+	CAuthExpressionImpl* impl = static_cast<CAuthExpressionImpl*>(aExpr);
+	TESTL(impl->Type() == KPluginId);
+	TESTL(impl->PluginId() == KTestPluginId0);
+	}
+
+
+void CTStepAuthExprBuild::TestPluginTypeL(CAuthExpression* aExpr)
+/**
+	Tests the supplied expression is a simple expression
+	for plugin type EAuthKnowledge.
+ */
+	{
+	CAuthExpressionImpl* impl = static_cast<CAuthExpressionImpl*>(aExpr);
+	TESTL(impl->Type() == KPluginType);
+	TESTL(impl->PluginType() == EAuthKnowledge);
+	}
+
+
+void CTStepAuthExprBuild::TestSimpleExprCombsConsL()
+/**
+	Tests combining two simple types (plugin type or plugin id)
+	with the AuthAnd and AuthOr functions, and with the overloaded
+	binary AND (&) and OR (|) operators.
+ */
+	{
+	__UHEAP_MARK;
+	
+	// type AND type
+	OpTestExprLD(&CTStepAuthExprBuild::TestTypeAndTypeL, AuthExpr(EAuthKnowledge) & AuthExpr(EAuthBiometric));
+	TestExprLD(&CTStepAuthExprBuild::TestTypeAndTypeL, AuthAnd(AuthExpr(EAuthKnowledge), AuthExpr(EAuthBiometric)));
+	
+	// id OR id
+	OpTestExprLD(&CTStepAuthExprBuild::TestTypeOrTypeL, AuthExpr(EAuthKnowledge) | AuthExpr(EAuthBiometric));
+	TestExprLD(&CTStepAuthExprBuild::TestTypeOrTypeL, AuthOr(AuthExpr(EAuthKnowledge), AuthExpr(EAuthBiometric)));
+	
+	// ID AND type
+	OpTestExprLD(&CTStepAuthExprBuild::TestIdAndTypeL, AuthExpr(KTestPluginId0) & AuthExpr(EAuthBiometric));
+	TestExprLD(&CTStepAuthExprBuild::TestIdAndTypeL, AuthAnd(AuthExpr(KTestPluginId0), AuthExpr(EAuthBiometric)));
+	
+	// type AND ID
+	OpTestExprLD(&CTStepAuthExprBuild::TestTypeAndIdL, AuthExpr(EAuthBiometric) & AuthExpr(KTestPluginId0));
+	TestExprLD(&CTStepAuthExprBuild::TestTypeAndIdL, AuthAnd(AuthExpr(EAuthBiometric), AuthExpr(KTestPluginId0)));
+	
+	// id AND id
+	OpTestExprLD(&CTStepAuthExprBuild::TestIdAndIdL, AuthExpr(KTestPluginId0) & AuthExpr(KTestPluginId1));
+	TestExprLD(&CTStepAuthExprBuild::TestIdAndIdL, AuthAnd(AuthExpr(KTestPluginId0), AuthExpr(KTestPluginId1)));
+	
+	__UHEAP_MARKEND;
+	}
+
+
+void CTStepAuthExprBuild::TestTypeAndTypeL(CAuthExpression* aExpr)
+/**
+	Test the supplied expression says know & bio.
+ */
+	{
+	CAuthExpressionImpl* impl = static_cast<CAuthExpressionImpl*>(aExpr);
+	TESTL(impl->Type() == KAnd);
+	TESTL(impl->Left()->Type() == KPluginType);
+	TESTL(impl->Left()->PluginType() == EAuthKnowledge);
+	TESTL(impl->Right()->Type() == KPluginType);
+	TESTL(impl->Right()->PluginType() == EAuthBiometric);
+	}
+
+
+void CTStepAuthExprBuild::TestTypeOrTypeL(CAuthExpression* aExpr)
+/**
+	Test the supplied expression says know | bio.
+ */
+	{
+	CAuthExpressionImpl* impl = static_cast<CAuthExpressionImpl*>(aExpr);
+	TESTL(impl->Type() == KOr);
+	TESTL(impl->Left()->Type() == KPluginType);
+	TESTL(impl->Left()->PluginType() == EAuthKnowledge);
+	TESTL(impl->Right()->Type() == KPluginType);
+	TESTL(impl->Right()->PluginType() == EAuthBiometric);
+	}
+
+
+void CTStepAuthExprBuild::TestIdAndTypeL(CAuthExpression* aExpr)
+/**
+	Test the supplied expression says id0 & bio.
+ */
+	{
+	CAuthExpressionImpl* impl = static_cast<CAuthExpressionImpl*>(aExpr);
+	TESTL(impl->Type() == KAnd);
+	TESTL(impl->Left()->Type() == KPluginId);
+	TESTL(impl->Left()->PluginId() == KTestPluginId0);
+	TESTL(impl->Right()->Type() == KPluginType);
+	TESTL(impl->Right()->PluginType() == EAuthBiometric);
+	}
+
+
+void CTStepAuthExprBuild::TestTypeAndIdL(CAuthExpression* aExpr)
+/**
+	Test the supplied expression says bio & id0.
+ */
+	{
+	CAuthExpressionImpl* impl = static_cast<CAuthExpressionImpl*>(aExpr);
+	TESTL(impl->Type() == KAnd);
+	TESTL(impl->Left()->Type() == KPluginType);
+	TESTL(impl->Left()->PluginType() == EAuthBiometric);
+	TESTL(impl->Right()->Type() == KPluginId);
+	TESTL(impl->Right()->PluginId() == KTestPluginId0);
+	}
+
+
+void CTStepAuthExprBuild::TestIdAndIdL(CAuthExpression* aExpr)
+/**
+	Test the supplied expression says id0 & id1.
+ */
+	{
+	CAuthExpressionImpl* impl = static_cast<CAuthExpressionImpl*>(aExpr);
+	TESTL(impl->Type() == KAnd);
+	TESTL(impl->Left()->Type() == KPluginId);
+	TESTL(impl->Left()->PluginId() == KTestPluginId0);
+	TESTL(impl->Right()->Type() == KPluginId);
+	TESTL(impl->Right()->PluginId() == KTestPluginId1);
+	}
+
+
+void CTStepAuthExprBuild::TestComplexExprCombsConsL()
+/**
+	Test complex AND and OR combinations.
+	For the overloaded operators, this additionally checks
+	that precedence works as expected.
+ */
+	{
+	__UHEAP_MARK;
+	
+	// complex combinations - ensure precedence works
+	
+	// id AND id AND id == (id AND id) AND id
+	OpTestExprLD(&CTStepAuthExprBuild::TestAndAndL, AuthExpr(KTestPluginId0) & AuthExpr(KTestPluginId1) & AuthExpr(KTestPluginId2));
+	TestExprLD(&CTStepAuthExprBuild::TestAndAndL, AuthAnd(AuthAnd(AuthExpr(KTestPluginId0), AuthExpr(KTestPluginId1)), AuthExpr(KTestPluginId2)));
+	
+	// id AND id AND id == (id AND id) OR id
+	OpTestExprLD(&CTStepAuthExprBuild::TestAndOrL, AuthExpr(KTestPluginId0) & AuthExpr(KTestPluginId1) | AuthExpr(KTestPluginId2));
+	TestExprLD(&CTStepAuthExprBuild::TestAndOrL, AuthOr(AuthAnd(AuthExpr(KTestPluginId0), AuthExpr(KTestPluginId1)), AuthExpr(KTestPluginId2)));
+	
+	// id OR id AND id == id OR (id AND id)
+	OpTestExprLD(&CTStepAuthExprBuild::TestOrAndL, AuthExpr(KTestPluginId0) | AuthExpr(KTestPluginId1) & AuthExpr(KTestPluginId2));
+	TestExprLD(&CTStepAuthExprBuild::TestOrAndL, AuthOr(AuthExpr(KTestPluginId0), AuthAnd(AuthExpr(KTestPluginId1), AuthExpr(KTestPluginId2))));
+	
+	// id OR id OR id == (id OR id) OR id
+	OpTestExprLD(&CTStepAuthExprBuild::TestOrOrL, AuthExpr(KTestPluginId0) | AuthExpr(KTestPluginId1) | AuthExpr(KTestPluginId2));
+	OpTestExprLD(&CTStepAuthExprBuild::TestOrOrL, AuthOr(AuthOr(AuthExpr(KTestPluginId0), AuthExpr(KTestPluginId1)), AuthExpr(KTestPluginId2)));
+	
+	__UHEAP_MARKEND;
+	}
+
+
+void CTStepAuthExprBuild::TestAndAndL(CAuthExpression* aExpr)
+/**
+	Test the supplied expression says (id0 & id1) & id2.
+ */
+	{
+	CAuthExpressionImpl* impl = static_cast<CAuthExpressionImpl*>(aExpr);
+	TESTL(impl->Type() == KAnd);
+	TESTL(impl->Left()->Type() == KAnd);
+	TESTL(impl->Left()->Left()->Type() == KPluginId);
+	TESTL(impl->Left()->Left()->PluginId() == KTestPluginId0);
+	TESTL(impl->Left()->Right()->Type() == KPluginId);
+	TESTL(impl->Left()->Right()->PluginId() == KTestPluginId1);
+	TESTL(impl->Right()->Type() == KPluginId);
+	TESTL(impl->Right()->PluginId() == KTestPluginId2);
+	}
+
+
+void CTStepAuthExprBuild::TestAndOrL(CAuthExpression* aExpr)
+/**
+	Test the supplied expression says (id0 & id 1) | id2.
+ */
+	{
+	CAuthExpressionImpl* impl = static_cast<CAuthExpressionImpl*>(aExpr);
+	TESTL(impl->Type() == KOr);
+	TESTL(impl->Left()->Type() == KAnd);
+	TESTL(impl->Left()->Left()->Type() == KPluginId);
+	TESTL(impl->Left()->Left()->PluginId() == KTestPluginId0);
+	TESTL(impl->Left()->Right()->Type() == KPluginId);
+	TESTL(impl->Left()->Right()->PluginId() == KTestPluginId1);
+	TESTL(impl->Right()->Type() == KPluginId);
+	TESTL(impl->Right()->PluginId() == KTestPluginId2);
+	}
+
+
+void CTStepAuthExprBuild::TestOrAndL(CAuthExpression* aExpr)
+/**
+	Test the supplied expression says id0 | (id1 & id2).
+ */
+	{
+	CAuthExpressionImpl* impl = static_cast<CAuthExpressionImpl*>(aExpr);
+	TESTL(impl->Type() == KOr);
+	TESTL(impl->Left()->Type() == KPluginId);
+	TESTL(impl->Left()->PluginId() == KTestPluginId0);
+	TESTL(impl->Right()->Type() == KAnd);
+	TESTL(impl->Right()->Left()->Type() == KPluginId);
+	TESTL(impl->Right()->Left()->PluginId() == KTestPluginId1);
+	TESTL(impl->Right()->Right()->Type() == KPluginId);
+	TESTL(impl->Right()->Right()->PluginId() == KTestPluginId2);
+	}
+
+
+void CTStepAuthExprBuild::TestOrOrL(CAuthExpression* aExpr)
+/**
+	Test the supplied expression says (id0 | id1) | id2.
+ */
+	{
+	CAuthExpressionImpl* impl = static_cast<CAuthExpressionImpl*>(aExpr);
+	TESTL(impl->Type() == KOr);
+	TESTL(impl->Left()->Type() == KOr);
+	TESTL(impl->Left()->Left()->Type() == KPluginId);
+	TESTL(impl->Left()->Left()->PluginId() == KTestPluginId0);
+	TESTL(impl->Left()->Right()->Type() == KPluginId);
+	TESTL(impl->Left()->Right()->PluginId() == KTestPluginId1);
+	TESTL(impl->Right()->Type() == KPluginId);
+	TESTL(impl->Right()->PluginId() == KTestPluginId2);
+	}
+
+
+void CTStepAuthExprBuild::TestFailedCombsL()
+/**
+	Test that complex expression builder fails cleanly
+	for all permutations of unallocated input.
+ */
+	{
+	__UHEAP_MARK;
+	
+	// left null only
+	CAuthExpression* aeRight = AuthExpr(KTestPluginId0);
+	User::LeaveIfNull(aeRight);
+	CAuthExpression* aeLeftNull = AuthAnd(0, aeRight);
+	TESTL(aeLeftNull == 0);
+	
+	// right null only
+	CAuthExpression* aeLeft = AuthExpr(KTestPluginId1);
+	User::LeaveIfNull(aeRight);
+	CAuthExpression* aeRightNull = AuthAnd(aeLeft, 0);
+	TESTL(aeRightNull == 0);
+	
+	// both null
+	CAuthExpression* aeBothNull = AuthAnd(0, 0);
+	TESTL(aeBothNull == 0);
+	
+	__UHEAP_MARKEND;
+	}
+
+
+void CTStepAuthExprBuild::TestCorruptPersistL()
+/**
+	Test get expected errors when externalize or
+	internalize invalid expressions.
+ */
+	{
+	TInt r;
+	
+	__UHEAP_MARK;
+	CAuthExpression* aeTest = AuthExpr(KTestPluginId0);
+	TESTL(aeTest != 0);
+	CleanupStack::PushL(aeTest);
+	
+	TSizeStream ss;
+	RWriteStream ws(&ss);
+	aeTest->ExternalizeL(ws);
+	
+	TInt len = ss.Size();
+	TAny* buf= User::AllocLC(ss.Size());
+	
+	// externalize valid expression
+	RMemWriteStream mwsValid(buf, len);
+	aeTest->ExternalizeL(mwsValid);
+	
+	// internalize unsupported expression stream
+	TInt8& verByteP = ((TInt8*)buf)[0];
+	TInt8 origVer = verByteP;
+	verByteP = KMaxTInt8;
+	RMemReadStream mrsHighVer(buf, len);
+	TRAP(r, /* ignore */ CAuthExpressionImpl::NewL(mrsHighVer));
+	TESTL(r == KErrAuthServUnsupportedExprVersion);
+	verByteP = origVer;
+	
+	// internalize corrupt expression stream
+	TInt8& typeByteP = ((TInt8*)buf)[1];
+	TInt8 origType = typeByteP;
+	typeByteP = ~0;
+	RMemReadStream mrsCorrupt(buf, len);
+	TRAP(r, /* ignore */ CAuthExpressionImpl::NewL(mrsCorrupt));
+	TESTL(r == KErrAuthServInvalidInternalizeExpr);
+	typeByteP = origType;
+	
+	// internalize valid expression stream
+	RMemReadStream mrsValid(buf, len);
+	CAuthExpression* aeRestore = CAuthExpressionImpl::NewL(mrsValid);
+	TESTL(aeRestore != 0);
+	delete aeRestore;
+	
+	CleanupStack::PopAndDestroy(2, aeTest);
+	__UHEAP_MARKEND;
+	}
+
+
+// -------- Server fails expressions from client --------
+
+
+namespace {
+
+class RTestAuthClient : public RAuthClient
+/**
+	This subclass of RAuthClient is used to
+	send a corrupt externalized expression
+	to the authentication server.
+	
+	The test code can't call SendReceive() on
+	an instance of RAuthClient because it is
+	protected.
+ */
+	{
+public:
+	void SendCorruptAuthExprL();
+	void SendHighVerAuthExprL();
+
+	static HBufC8* GetAuthExprExternalizationLC();
+	};
+
+HBufC8* RTestAuthClient::GetAuthExprExternalizationLC()
+/**
+	Helper function for SendCorruptAuthExprL and
+	SendHighVerAuthExprL.  This allocates a buffer
+	containing an externalized auth expr, so the
+	calling function can corrupt it.
+	
+	@return					Buffer containing externalized
+							authentication expression.  This
+							is also placed on the cleanup stack.
+	@see SendCorruptAuthExprL
+	@see SendHighVerAuthExprL
+ */
+	{
+	CAuthExpression* ae = AuthAnd(AuthExpr(KTestPluginId0), AuthExpr(KTestPluginId1));
+	User::LeaveIfNull(ae);
+	CleanupStack::PushL(ae);
+	
+	TSizeStream ss;
+	RWriteStream ws(&ss);
+	ae->ExternalizeL(ws);
+	
+	HBufC8* buf = HBufC8::NewLC(ss.Size());
+	TPtr8 bufPtr = buf->Des();
+	
+	RDesWriteStream dws(bufPtr);
+	ae->ExternalizeL(dws);
+	dws.CommitL();
+
+	CleanupStack::Pop(2, ae);
+	CleanupStack::PushL(buf);
+	
+	return buf;
+	}
+
+
+void RTestAuthClient::SendCorruptAuthExprL()
+/**
+	Send an authenticate request to the server,
+	with a corrupt authentication expression.
+ */
+	{
+	HBufC8* buf = GetAuthExprExternalizationLC();
+	
+	// corrupt the type field, one byte after the version field
+	buf->Des()[1] = ~0;
+	
+	// the server should panick this thread with
+	// category "AuthServer" and reason EPanicBadExternalizedAuthExpr (3)
+	TRequestStatus rs;
+	CallSessionFunction(EAuthenticate, TIpcArgs(buf), rs);
+	
+	// this code will not be reached
+	User::WaitForRequest(rs);
+	CleanupStack::PopAndDestroy(buf);
+	}
+
+
+void RTestAuthClient::SendHighVerAuthExprL()
+/**
+	Send an authenticate request to the server,
+	with an unsupported version number.
+	
+	The server should fail the request with
+	KErrAuthServUnsupportedExprVersion.
+ */
+	{
+	HBufC8* buf = GetAuthExprExternalizationLC();
+	
+	// change the version field, which is the first byte
+	buf->Des()[0] = KMaxTInt8;
+	
+	TRequestStatus rs;
+	CallSessionFunction(EAuthenticate, TIpcArgs(buf), rs);
+	User::WaitForRequest(rs);
+	
+	// this isn't semantically the right code to
+	// fail the test with, because it is expected.
+	// However, it is easy to find in the test code
+	// if it occurs.
+	if (rs != KErrAuthServUnsupportedExprVersion)
+		User::Leave(KErrAuthServUnsupportedExprVersion);
+	
+	CleanupStack::PopAndDestroy(buf);
+	}
+
+
+void RunTestAuthClientFunctionL(void (RTestAuthClient::* aTacFuncL)())
+/**
+	Connect to the authentication server using
+	RTestAuthClient, and call the supplied function.
+	
+	This is a helper function for CTStepBadExtAuthExpr
+	and CTStepAuthExprHighVer which both use
+	RTestAuthClient, and only call different functions.
+	
+	@param	aTacFuncL		Function to call on RTestAuthClient
+							once the connection has been made.
+							If this function leaves then the
+							leave code is propagated through this
+							(RunTestAuthClientFunctionL) function.
+ */
+	{
+	RTestAuthClient tac;
+	User::LeaveIfError(tac.Connect());
+	CleanupClosePushL(tac);
+	
+	// this function should not return
+	(tac.*aTacFuncL)();
+	
+	CleanupStack::PopAndDestroy(&tac);
+	}
+
+
+}	// namespace
+
+
+CTStepBadExtAuthExpr::CTStepBadExtAuthExpr()
+/**
+	Record this test step's name.
+ */
+	{
+	SetTestStepName(KTStepBadExtAuthExpr);
+	}
+
+
+TVerdict CTStepBadExtAuthExpr::doTestStepL()
+/**
+	Implement CTestStep by calling RAuthClient::Authenticate
+	with a corrupt externalized authentication expression.
+	
+	The current thread should be panicked with
+	category AuthServer and reason EPanicBadExternalizedAuthExpr.
+ */
+	{
+	// this function should not return
+	RunTestAuthClientFunctionL(&RTestAuthClient::SendCorruptAuthExprL);
+	return EPass;
+	}
+
+
+CTStepAuthExprHighVer::CTStepAuthExprHighVer()
+/**
+	Record this test step's name.
+ */
+	{
+	SetTestStepName(KTStepAuthExprHighVer);
+	}
+
+
+TVerdict CTStepAuthExprHighVer::doTestStepL()
+/**
+	Implement CTestStep by calling RAuthClient::SendHighVerAuthExprL()
+	and ensuring the server fails the request if
+	the externalized auth expr uses an unsupported
+	version number.
+ */
+	{
+	RunTestAuthClientFunctionL(&RTestAuthClient::SendHighVerAuthExprL);
+	return EPass;
+	}
+
+
+// -------- Debug-mode client-side panicks --------
+
+
+#ifdef _DEBUG
+
+
+// -------- CTStepAuthExprTypePnc --------
+
+
+CTStepAuthExprTypePnc::CTStepAuthExprTypePnc()
+/**
+	Record this test step's name.
+ */
+	{
+	SetTestStepName(KTStepAuthExprTypePnc);
+	}
+
+
+TVerdict CTStepAuthExprTypePnc::doTestStepL()
+/**
+	Implement CTestStep by creating a plugin id
+	node, corrupting the type field, and testing
+	that it is panicked when the type is
+	retrieved.  Debug only.
+ */
+	{
+	CAuthExpression* ae = AuthExpr(KTestPluginId0);
+	User::LeaveIfNull(ae);
+	CAuthExpressionImpl* aeImpl = static_cast<CAuthExpressionImpl*>(ae);
+	CorruptTypeField(aeImpl);
+	/* ignore */ aeImpl->Type();
+	
+	// this code should never be reached
+	return EPass;
+	}
+
+
+// -------- CTStepAuthExprTypePncBadLeft --------
+
+
+CTStepAuthExprTypePncBadLeft::CTStepAuthExprTypePncBadLeft()
+/**
+	Record this test step's name.
+ */
+	{
+	SetTestStepName(KTStepAuthExprTypePncBadLeft);
+	}
+
+
+TVerdict CTStepAuthExprTypePncBadLeft::doTestStepL()
+/**
+	Implement CTestStep by creating a complex
+	expression where the left subexpression is
+	corrupt.  This tests that the invariant
+	correctly validates the left subtree.
+ */
+	{
+	CAuthExpression* ae = AuthAnd(AuthExpr(KTestPluginId0), AuthExpr(KTestPluginId1));
+	User::LeaveIfNull(ae);
+	CAuthExpressionImpl* aeImpl = static_cast<CAuthExpressionImpl*>(ae);
+	CorruptTypeField(aeImpl->Left());	
+	/* ignore */ aeImpl->Type();
+	
+	// this code should never be reached
+	return EPass;
+	}
+
+
+// -------- CTStepAuthExprTypePncBadRight --------
+
+
+CTStepAuthExprTypePncBadRight::CTStepAuthExprTypePncBadRight()
+/**
+	Record this test step's name.
+ */
+	{
+	SetTestStepName(KTStepAuthExprTypePncBadRight);
+	}
+
+
+TVerdict CTStepAuthExprTypePncBadRight::doTestStepL()
+/**
+	Implement CTestStep by creating a complex
+	expression where the Right subexpression is
+	corrupt.  This tests that the invariant
+	correctly validates the Right subtree.
+ */
+	{
+	CAuthExpression* ae = AuthAnd(AuthExpr(KTestPluginId0), AuthExpr(KTestPluginId1));
+	User::LeaveIfNull(ae);
+	CAuthExpressionImpl* aeImpl = static_cast<CAuthExpressionImpl*>(ae);
+	CorruptTypeField(aeImpl->Right());	
+	/* ignore */ aeImpl->Type();
+	
+	// this code should never be reached
+	return EPass;
+	}
+
+
+#endif	// #ifdef _DEBUG
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthcliserv/step_authexpr_eval.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,697 @@
+/*
+* Copyright (c) 2005-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: 
+* This file contains functions which are used to
+* test evaluating authentication expressions.
+*
+*/
+
+
+#include "tauthcliservstep.h"
+
+using namespace AuthServer;
+
+typedef TTestPluginInterface::TCallEntry TCE;
+
+#define elemCount(___x)		(sizeof(___x) / sizeof(___x[0]))
+
+static TAuthExpressionWrapper BuildLeftAnd(TInt aRemainingLevels);
+static TAuthExpressionWrapper BuildRightAnd(TInt aRemainingLevels);
+static TAuthExpressionWrapper BuildBalancedAnd(TInt aRemainingLevels);
+static TAuthExpressionWrapper BuildFailedAnd(TInt aRemainingLevels);
+static TAuthExpressionWrapper BuildSuccessfulOr(TInt aRemainingLevels);
+
+
+// -------- CTStepActSch --------
+
+
+// -------- CTStepAuthExprEval --------
+
+
+void TTestPluginInterface::Evaluate(TPluginId aPluginId, TIdentityId& aIdentity,
+		   CAuthExpressionImpl::TType /*aType*/, TRequestStatus& aStatus)
+/**
+	Implement MEvaluatorPluginInterface by completing
+	the request with an identity equal to the plugin id.
+ */
+	{
+	const TCallEntry ce(aPluginId);
+	TInt r = iCallLog.Append(ce);
+	
+	// this can be KErrNoMemory in OOM tests
+	if (r == KErrNone)
+		{
+		if (aPluginId == KTestPluginUnknown)
+			aIdentity = KUnknownIdentity;
+		else
+			aIdentity = static_cast<TIdentityId>(aPluginId);
+		}
+		
+	aStatus = KRequestPending;
+	TRequestStatus* rs = &aStatus;
+	User::RequestComplete(rs, r);
+	}
+
+
+void TTestPluginInterface::Evaluate(TAuthPluginType aPluginType, TIdentityId& aIdentity, 
+									CAuthExpressionImpl::TType /*aType*/, TRequestStatus& aStatus)
+/**
+	Implement MEvaluatorPluginInterface by completing
+	the request with an identity equal to the plugin type.
+ */
+	{
+	const TCallEntry ce(aPluginType);
+	TInt r = iCallLog.Append(ce);
+	
+	// this can be KerrNoMemory in OOM tests
+	if (r == KErrNone)
+		aIdentity = static_cast<TIdentityId>(aPluginType);
+	
+	aStatus = KRequestPending;
+	TRequestStatus* rs = &aStatus;
+	User::RequestComplete(rs, KErrNone);
+	}
+
+
+bool TTestPluginInterface::TCallEntry::operator==(const TTestPluginInterface::TCallEntry& aRhs) const
+	{
+	if (iCallType != aRhs.iCallType)
+		return false;
+	
+	if (iCallType == CAuthExpressionImpl::EPluginId)
+		return iPluginId == aRhs.iPluginId;
+	else
+		return iPluginType == aRhs.iPluginType;
+	}
+
+
+void TTestClientInterface::EvaluationSucceeded(TIdentityId aIdentityId)
+/**
+	Implement MEvaluatorClientInterface by recording
+	that the evaluation succeeded, and the resulting identity.
+ */
+	{
+	iMode = ESucceeded;
+	iIdentityId = aIdentityId;
+
+	CActiveScheduler::Stop();
+	}
+
+
+void TTestClientInterface::EvaluationFailed(TInt aReason)
+/**
+	Implement MEvaluatorClientInterface by recording
+	that the evaluation failed, and the failure reason.
+ */
+	{
+	iMode = EFailed;
+	iReason = aReason;
+	
+	CActiveScheduler::Stop();
+	}
+
+
+CLaunchEval* CLaunchEval::NewL()
+/**
+	Factory function allocates new instance of CLaunchEval.
+	
+	@return					New instance of CLaunchEval.
+ */
+	{
+	CLaunchEval* self = new(ELeave) CLaunchEval();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+CLaunchEval::CLaunchEval()
+/**
+	Set timer priority and add self to active scheduler.
+ */
+:	CActive(CActive::EPriorityStandard)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+
+void CLaunchEval::ConstructL()
+/**
+	Allocate evaluator and initialize superclass timer.
+ */
+	{
+//	CTimer::ConstructL();
+	iEval = CEvaluator::NewL(&iPluginInterface, &iClientInterface);
+	}
+
+
+CLaunchEval::~CLaunchEval()
+/**
+	Deletes evaluator which was allocated for this object.
+ */
+	{
+	ResetInterfaces();
+	delete iEval;
+	}
+
+
+void CLaunchEval::ResetInterfaces()
+/**
+	Free resources used by plugin and client interfaces.
+ */
+	{
+	iPluginInterface.iCallLog.Reset();
+	iClientInterface.iMode = TTestClientInterface::ENone;
+	}
+
+
+void CLaunchEval::Evaluate(const CAuthExpression* aExpr)
+/**
+	Queue this timer object and start the active
+	scheduler.  This function returns when the evaluation
+	has completed.
+	
+	This object's client and plugin interfaces are reset
+	before the expression is evaluated, so they can be
+	tested by the function which calls this.
+	
+	@param	aExpr			Expression to evaluate.
+ */
+	{
+	ResetInterfaces();
+	iExpr = aExpr;			// store so can see in RunL
+	
+	// signal this object.  This ensures there
+	// is a pending active object before the scheduler
+	// is started.
+	iStatus = KRequestPending;
+	TRequestStatus* rs = &iStatus;
+	User::RequestComplete(rs, KErrNone);
+	SetActive();
+	
+	// block until the evaluation has completed.
+	CActiveScheduler::Start();
+	}
+
+
+void CLaunchEval::RunL()
+/**
+	Implement CActive by launching the evaluation.
+	At this point the active scheduler should have
+	been started.
+ */
+	{
+	iEval->Evaluate(static_cast<const CAuthExpressionImpl*>(iExpr));
+	}
+
+
+void CLaunchEval::DoCancel()
+/**
+	Implement CActive by cancelling the evaluation
+	which is currently in progress.
+	
+	Not yet implemented.
+ */
+	{
+	// empty.
+	}
+
+
+CTStepAuthExprEval::CTStepAuthExprEval()
+/**
+	Record this test step's name.
+ */
+	{
+	SetTestStepName(KTStepAuthExprTypePncBadRight);
+	}
+
+
+TVerdict CTStepAuthExprEval::doTestStepL()
+	{
+ 	CActiveScheduler::Install(iActSchd);
+ 	User::SetJustInTime(ETrue);
+ 	
+ 	__UHEAP_MARK;
+	TestEvalCreateL();
+	TestEvalSimpleL();
+	TestEvalAndL();
+	TestEvalOrL();
+	TestRPNReallocL();
+	__UHEAP_MARKEND;
+	
+	return EPass;
+	}
+
+
+void CTStepAuthExprEval::TestEvalCreateL()
+/**
+	Test allocating and deleting an evaluator,
+	without using it for anything.
+ */
+	{
+	__UHEAP_MARK;
+	
+	TTestClientInterface tci;
+	TTestPluginInterface tpi;
+	
+	CEvaluator* ev = CEvaluator::NewL(&tpi, &tci);
+	delete ev;
+	
+	__UHEAP_MARKEND;
+	}
+
+
+void CTStepAuthExprEval::TestEvalSimpleL()
+/**
+	Test evaluating a simple plugin id, and
+	evaluating a simple plugin type.
+ */
+	{
+	__UHEAP_MARK;
+	
+	CLaunchEval* le = CLaunchEval::NewL();
+	CleanupStack::PushL(le);
+
+	// simple plugin id	
+	CAuthExpression* aeId = AuthExpr(KTestPluginId0);
+	User::LeaveIfNull(aeId);
+	le->Evaluate(aeId);
+	delete aeId;
+	
+	const TCE aceI0[] = {TCE(KTestPluginId0)};
+	TestEvalResultL(le, KTestPluginId0, aceI0, elemCount(aceI0));
+	
+	// simple plugin type
+	CAuthExpression* aeType = AuthExpr(EAuthBiometric);
+	User::LeaveIfNull(aeType);
+	le->Evaluate(aeType);
+	delete aeType;
+	
+	const TCE aceTB[] = {TCE(EAuthBiometric)};
+	TestEvalResultL(le, EAuthBiometric, aceTB, elemCount(aceTB));
+	
+	CleanupStack::PopAndDestroy(le);
+	
+	__UHEAP_MARKEND;
+	}
+
+
+void CTStepAuthExprEval::TestEvalAndL()
+/**
+	Test evaluating simple AND expressions.
+ */
+	{
+	__UHEAP_MARK;
+	
+	CLaunchEval* le = CLaunchEval::NewL();
+	CleanupStack::PushL(le);
+
+	// U & U = U (sc)
+	CAuthExpression* aeUU = AuthAnd(AuthExpr(KTestPluginUnknown), AuthExpr(KTestPluginUnknown));
+	User::LeaveIfNull(aeUU);
+	le->Evaluate(aeUU);
+	delete aeUU;
+
+	const TCE aceUU[] = {TCE(KTestPluginUnknown)};
+	TestEvalResultL(le, KUnknownIdentity, aceUU, elemCount(aceUU));
+
+	// U & I1 = U (sc)
+	CAuthExpression* aeUI1 = AuthAnd(AuthExpr(KTestPluginUnknown), AuthExpr(KTestPluginId1));
+	User::LeaveIfNull(aeUI1);
+	le->Evaluate(aeUI1);
+	delete aeUI1;
+	
+	const TCE aceUI1[] = {TCE(KTestPluginUnknown)};
+	TestEvalResultL(le, KUnknownIdentity, aceUI1, elemCount(aceUI1));
+	
+	// I1 & U = U
+	CAuthExpression* aeI1U = AuthAnd(AuthExpr(KTestPluginId1), AuthExpr(KTestPluginUnknown));
+	User::LeaveIfNull(aeI1U);
+	le->Evaluate(aeI1U);
+	delete aeI1U;
+
+	const TCE aceI1U[] = {TCE(KTestPluginId1), TCE(KTestPluginUnknown)};
+	TestEvalResultL(le, KUnknownIdentity, aceI1U, elemCount(aceI1U));
+	
+	// I1 & I1 = I1
+	CAuthExpression* aeI1I1 = AuthAnd(AuthExpr(KTestPluginId1), AuthExpr(KTestPluginId1));
+	User::LeaveIfNull(aeI1I1);
+	le->Evaluate(aeI1I1);
+	delete aeI1I1;
+
+	const TCE aceI1I1[] = {TCE(KTestPluginId1), TCE(KTestPluginId1)};
+	TestEvalResultL(le, KTestPluginId1, aceI1I1, elemCount(aceI1I1));
+	
+	// I1 & I2 = U
+	CAuthExpression* aeI1I2 = AuthAnd(AuthExpr(KTestPluginId1), AuthExpr(KTestPluginId2));
+	User::LeaveIfNull(aeI1I2);
+	le->Evaluate(aeI1I2);
+	delete aeI1I2;
+	
+	const TCE aceI1I2[] = {TCE(KTestPluginId1), TCE(KTestPluginId2)};
+	TestEvalResultL(le, KUnknownIdentity, aceI1I2, elemCount(aceI1I2));
+	
+	CleanupStack::PopAndDestroy(le);
+	
+	__UHEAP_MARKEND;
+	}
+
+
+void CTStepAuthExprEval::TestEvalOrL()
+/**
+	Test evaluating simple OR expressions.
+ */
+	{
+	__UHEAP_MARK;
+	
+	CLaunchEval* le = CLaunchEval::NewL();
+	CleanupStack::PushL(le);
+
+	// U | U = U
+	CAuthExpression* aeUU = AuthOr(AuthExpr(KTestPluginUnknown), AuthExpr(KTestPluginUnknown));
+	User::LeaveIfNull(aeUU);
+	le->Evaluate(aeUU);
+	delete aeUU;
+	
+	const TCE aceUU[] = {TCE(KTestPluginUnknown), TCE(KTestPluginUnknown)};
+	TestEvalResultL(le, KUnknownIdentity, aceUU, elemCount(aceUU));
+	
+	// U | I1 = I1
+	CAuthExpression* aeUI1 = AuthOr(AuthExpr(KTestPluginUnknown), AuthExpr(KTestPluginId1));
+	User::LeaveIfNull(aeUI1);
+	le->Evaluate(aeUI1);
+	delete aeUI1;
+	
+	const TCE aceUI1[] = {TCE(KTestPluginUnknown), TCE(KTestPluginId1)};
+	TestEvalResultL(le, KTestPluginId1, aceUI1, elemCount(aceUI1));
+	
+	// I1 | U = I1 (sc)
+	CAuthExpression* aeI1U = AuthOr(AuthExpr(KTestPluginId1), AuthExpr(KTestPluginUnknown));
+	User::LeaveIfNull(aeI1U);
+	le->Evaluate(aeI1U);
+	delete aeI1U;
+	
+	const TCE aceI1U[] = {TCE(KTestPluginId1)};
+	TestEvalResultL(le, KTestPluginId1, aceI1U, elemCount(aceI1U));
+	
+	// I1 | I1 = I1 (sc)
+	CAuthExpression* aeI1I1 = AuthOr(AuthExpr(KTestPluginId1), AuthExpr(KTestPluginId1));
+	User::LeaveIfNull(aeI1I1);
+	le->Evaluate(aeI1I1);
+	delete aeI1I1;
+	
+	const TCE aceI1I1[] = {TCE(KTestPluginId1)};
+	TestEvalResultL(le, KTestPluginId1, aceI1I1, elemCount(aceI1I1));
+	
+	// I1 | I2 = I1 (sc)
+	CAuthExpression* aeI1I2 = AuthOr(AuthExpr(KTestPluginId1), AuthExpr(KTestPluginId2));
+	User::LeaveIfNull(aeI1I2);
+	le->Evaluate(aeI1I2);
+	delete aeI1I2;
+	
+	const TCE aceI1I2[] = {TCE(KTestPluginId1)};
+	TestEvalResultL(le, KTestPluginId1, aceI1I2, elemCount(aceI1I2));
+	
+	CleanupStack::PopAndDestroy(le);
+	
+	__UHEAP_MARKEND;
+	}
+
+
+void CTStepAuthExprEval::TestEvalResultL(
+	CLaunchEval* aLaunchEval, TIdentityId aIdentityId,
+	const TTestPluginInterface::TCallEntry* aExpEntries, TInt aEntryCount)
+/**
+	Test the evaluation produced the expected result, and
+	that the expected plugins were called in the right order.
+ */
+	{
+	const TTestClientInterface& cli = aLaunchEval->iClientInterface;
+	TESTL(cli.iMode == TTestClientInterface::ESucceeded);
+	TESTL(cli.iIdentityId == aIdentityId);
+	
+	const RArray<TCE>& log = aLaunchEval->iPluginInterface.iCallLog;
+	
+	TESTL(log.Count() == aEntryCount);
+	for (TInt i = 0; i < aEntryCount; ++i)
+		{
+		TESTL(log[i] == aExpEntries[i]);
+		}
+	}
+
+
+static TAuthExpressionWrapper BuildLeftAnd(TInt aRemainingLevels)
+/**
+	Build an expression where the left side is an
+	AND expression and the right side is a plugin ID.
+	
+	@param	aRemainingLevels The number of layers to build
+							below this layer.  If
+							aRemainingLevels == 0 this function
+							returns a simple plugin ID expression.
+ */
+	{
+	return (aRemainingLevels == 0)
+		?	AuthExpr(KTestPluginId1)
+		:	AuthAnd(BuildLeftAnd(aRemainingLevels - 1), AuthExpr(KTestPluginId1));
+	}
+
+
+static TAuthExpressionWrapper BuildRightAnd(TInt aRemainingLevels)
+/**
+	Build an expression where the left side is a
+	plugin ID and the right side is an AND expression.
+
+	@param	aRemainingLevels The number of layers to build
+							below this layer.  If
+							aRemainingLevels == 0 this function
+							returns a simple plugin ID expression.
+ */
+	{
+	return (aRemainingLevels == 0)
+		?	AuthExpr(KTestPluginId1)
+		:	AuthAnd(AuthExpr(KTestPluginId1), BuildRightAnd(aRemainingLevels - 1));
+	}
+
+
+static TAuthExpressionWrapper BuildBalancedAnd(TInt aRemainingLevels)
+/**
+	Build an expression where both the left and right side
+	have the same depth, aRemainingLevels - 1.
+	
+	@param	aRemainingLevels The number of layers to build
+							below this layer.  If
+							aRemainingLevels == 0 this function
+							returns a simple plugin ID expression.
+ */
+	{
+	return (aRemainingLevels == 0)
+		?	AuthExpr(KTestPluginId1)
+		:	AuthAnd(
+				BuildBalancedAnd(aRemainingLevels - 1),
+				BuildBalancedAnd(aRemainingLevels - 1));
+	}
+
+
+static TAuthExpressionWrapper BuildFailedAnd(TInt aRemainingLevels)
+/**
+	This function creates an expression where the left node
+	is a simple plugin ID expression and the right node is
+	built recursively with this function.  The final AND node
+	has a left unknown plugin ID.
+	
+	This causes an unknown plugin ID to be automatically pushed
+	onto the RPN stack as a right value before the compounder is used.
+	
+	@param	aRemainingLevels Number of levels to generate after this.
+							If aRemainingLevels == 1 this function
+							creates an AND node where the left node
+							is unknown.  Otherwise it generates an
+							AND node where the left node is a known
+							plugin ID and the right node is generated
+							recursively.
+ */
+	{
+	return (aRemainingLevels == 1)
+		?	AuthAnd(AuthExpr(KTestPluginUnknown), AuthExpr(KTestPluginId1))
+		:	AuthAnd(AuthExpr(KTestPluginId1), BuildFailedAnd(aRemainingLevels - 1));
+	}
+
+
+static TAuthExpressionWrapper BuildSuccessfulOr(TInt aRemainingLevels)
+/**
+	This function creates an AND node where the left node
+	is a known plugin ID, and the right right node is generated
+	recursively.  This creates a right-descent list, but the
+	penultimate node is an OR expression whose left node is a
+	known plugin ID.
+	
+	This puts a series of known plugin IDs on the RPN stack from
+	the left nodes of the AND nodes.  When the OR node is evaluated
+	the left node is known, and so automatically put on the
+	RPN stack.
+	
+	This means that an OR right node is automatically put on the
+	RPN stack at a known point, which is used to stress test failing
+	to append an OR right expression in OOM.
+
+	@param	aRemainingLevels Number of levels to generate after this.
+							If aRemainingLevels == 1 this function
+							generates an OR node.  Otherwise it creates
+							and AND node as described above.
+ */
+	{
+	return (aRemainingLevels == 1)
+		?	AuthOr(AuthExpr(KTestPluginId1), AuthExpr(KTestPluginId1))
+		:	AuthAnd(AuthExpr(KTestPluginId1), BuildSuccessfulOr(aRemainingLevels - 1));
+	}
+
+
+void CTStepAuthExprEval::TestRPNReallocL()
+/**
+	Create a deeply nested expression which is
+	deep enough that the evaluator has to reallocate
+	its RPN stack, and checks the evaluation fails
+	gracefully in OOM.
+ */
+	{
+	__UHEAP_MARK;
+	
+	RunOomTestsL(BuildLeftAnd, KTestPluginId1, 0);
+	RunOomTestsL(BuildRightAnd, KTestPluginId1, 0);
+	RunOomTestsL(BuildBalancedAnd, KTestPluginId1, 0);
+	RunOomTestsL(BuildFailedAnd, KUnknownIdentity, 1);
+	RunOomTestsL(BuildSuccessfulOr, KTestPluginId1, 1);
+	
+	__UHEAP_MARKEND;
+	}
+
+	
+void CTStepAuthExprEval::RunOomTestsL(
+	TAuthExpressionWrapper (*aAllocator)(TInt),
+	TIdentityId aExpectedIdentity, TInt aInitDepth)
+/**
+	Attempt to evaluate the supplied expresision in OOM.
+	
+	Running in OOM will both fail the evaluation, when the
+	plugin interface attempts to append to the call log, and
+	when the evaluator attempts to extend the RPN stack.
+	
+	OOM can only be tested in debug builds.  In release builds,
+	this function evaluates the expression at each depth and
+	tests the evaluator produces the correct result.
+	
+	@param	aAllocator		Function which allocates the expression.
+	@param	aExpectedIdentity Identity which should be returned on
+							successful evaluation.
+	@param	aInitDepth		Initial depth.
+ */
+	{
+	CLaunchEval* le = CLaunchEval::NewL();
+	User::LeaveIfNull(le);
+	CleanupStack::PushL(le);
+	
+	const volatile TTestClientInterface& cli = le->iClientInterface;
+	
+	// depth starts at zero because, even though RPN stack
+	// is not used, the evaluator will attempt to grow its
+	// call log, and so fail the evaluation.  (This test is
+	// therefore also used to test failed plugin evaluations.)
+	
+	// max depth is 13 because CStepControl::StartL creates
+	// a worker thread with a 1MB maximum heap.  The
+	// number of allocated node cells for a balanced tree
+	// is 2^(depth+1) - 1.  When depth==13, there are
+	// 16383 cells using 327,672 bytes excluding cell headers.
+	// Allocation fails for depth == 14.
+	
+	const TInt KMaxDepth = 13;
+	for (TInt depth = aInitDepth; depth <= KMaxDepth; ++depth)
+		{
+		CAuthExpression* ae = aAllocator(depth);
+		User::LeaveIfNull(ae);
+		CleanupStack::PushL(ae);
+		
+		// OOM testing only available in debug builds
+#ifndef _DEBUG
+		le->Evaluate(ae);
+		TESTL(cli.iMode == TTestClientInterface::ESucceeded);
+		TESTL(cli.iIdentityId == aExpectedIdentity);
+#else
+		TInt i = 0;
+		do
+			{
+			// Ideally, the heap would be marked before and
+			// after the evaluation.  However, CEvaluator uses
+			// an CArrayFixFlat<TIdentityId> to store the RPN stack.
+			// When the first item is inserted, it allocates a
+			// CBufBase object to hold the data.  This object
+			// is reset but not deleted when the RPN stack is
+			// reset, so there will be a heap imbalance of one
+			// if anything was added to the RPN stack, even though
+			// the stack is reset.
+			
+			TInt preSize;
+			TInt preCount = User::AllocSize(preSize);
+//			__UHEAP_MARK;
+			
+			__UHEAP_SETFAIL(RAllocator::EDeterministic, i);
+			le->Evaluate(ae);
+			__UHEAP_RESET;
+			
+			TESTL(	cli.iMode == TTestClientInterface::EFailed
+				||	cli.iMode == TTestClientInterface::ESucceeded);
+			
+			if (cli.iMode == TTestClientInterface::EFailed)
+				{
+				TESTL(cli.iReason == KErrNoMemory);
+				}
+			else
+				{
+				TESTL(cli.iIdentityId == aExpectedIdentity);
+				}
+			
+			// clear call log so heap checking will work
+			le->iPluginInterface.iCallLog.Reset();
+			++i;
+
+			TInt postSize;
+			TInt postCount = User::AllocSize(postSize);			
+			TESTL(postCount == preCount || postCount == preCount + 1);
+//			__UHEAP_MARKEND;
+			} while (cli.iMode != TTestClientInterface::ESucceeded);
+		
+		// test evaluation still succeeds and failed allocation
+		// was not ignored
+		TInt limit = 2 * i;
+		while (i++ < limit)
+			{
+			__UHEAP_SETFAIL(RAllocator::EDeterministic, i++);
+			le->Evaluate(ae);
+			__UHEAP_RESET;
+			
+			TESTL(cli.iMode == TTestClientInterface::ESucceeded);
+			TESTL(cli.iIdentityId == aExpectedIdentity);
+			}
+
+		// clear plugin call log to reset mem usage for next iteration.
+		le->iPluginInterface.iCallLog.Reset();
+#endif	// #else #ifndef _DEBUG
+		CleanupStack::PopAndDestroy(ae);
+		}
+	
+	CleanupStack::PopAndDestroy(le);
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthcliserv/step_base.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2006-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 "tauthcliservstep.h"
+
+using namespace AuthServer;
+
+
+void CTAuthcliservStepBase::WaitForServerToReleaseDb()
+/**
+	Wait for the server to shut down and so
+	release the authentication database.
+ */
+	{
+	TFullName name;
+	for (;;)
+		{
+		TFindServer find(::KAuthServerName);
+		if (find.Next(name) != KErrNone)
+			{
+			break;
+			}
+
+		// Wait for server to terminate
+		User::After(1 * 1000 * 1000);
+		}
+	}
+
+
+void CTAuthcliservStepBase::RemoveExistingDbL()
+/**
+	Remove any existing database file.
+ */
+	{
+	WaitForServerToReleaseDb();
+	
+	TDriveUnit sysDrive (RFs::GetSystemDrive());
+	TDriveName sysDriveName (sysDrive.Name());
+	
+	TFileName dbName(KDbName);
+	dbName[0] = 'A' + sysDrive;	
+	TInt r = iFs.Delete(dbName);
+	User::LeaveIfError(r);
+	
+	//Reset the data 'AllUserID&PinValues' in AuthSvrPolicy.ini & the 
+	// individual plugin Db files
+	//_LIT(KInitPinDatabaseValue, ",");
+	TBufC<16> initPinDbBuffer(KInitPinDatabaseValue);
+	TPtr valueToWrite = initPinDbBuffer.Des();
+	
+	TBuf<64> fileName (sysDriveName);
+	fileName.Append(KAuthSvrPolicyFile);
+	writeToNamedConfig(fileName, KTotalDbTag, valueToWrite);
+	
+	fileName.Copy(sysDriveName);
+	fileName.Append(KPlugin3100File);
+	writeToNamedConfig(fileName, KPinDbTag, valueToWrite);
+
+	fileName.Copy(sysDriveName);
+	fileName.Append(KPlugin3101File);
+	writeToNamedConfig(fileName, KPinDbTag, valueToWrite);
+
+	fileName.Copy(sysDriveName);
+	fileName.Append(KPlugin3102File);
+	writeToNamedConfig(fileName, KPinDbTag, valueToWrite); 
+	}
+
+TInt CTAuthcliservStepBase::writeToNamedConfig(const TDesC &aFileName, const TDesC &aKeyName,const TPtrC &aResult)
+	{
+	
+	TInt retValue = KErrNone;
+	CIniData* file=NULL;
+	TRAPD(r,file=CIniData::NewL(aFileName));
+	
+	if(r!=KErrNone)
+		{
+		RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &aFileName);
+		retValue = r;
+		}
+	
+	else
+		{
+		// Look for a key under no named section, retrieve text value	
+		
+		TInt ret = KErrNone;	//return value from FindVar functions
+		ret=file->SetValue(aKeyName ,aResult);
+		if(ret != KErrNone)
+			{
+			if(ret == KErrNotFound)
+				{
+				RDebug::Print(_L("Key not found. Unable to set value in ini file. Filename: %S, KeyName = %S, value = %S."), &aFileName, &aKeyName, &aResult);
+				}			
+			else
+				{
+				RDebug::Print(_L("Unable to set value in ini file. Filename: %S, KeyName = %S, value = %S."), &aFileName, &aKeyName, &aResult);
+				}
+			retValue = ret;
+			}
+		TRAPD(r,file->WriteToFileL());
+		if (KErrNone != r)
+			{
+			RDebug::Print(_L("Error occurred while writing to the file. Filename = %S, KeyName = %S, value = %S."), &aFileName, &aKeyName, &aResult);
+			}
+		delete file;
+		}
+	return retValue;	
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthcliserv/step_client.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,817 @@
+/*
+* Copyright (c) 2005-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 <test/testexecutelog.h>
+#include "tauthcliservstep.h"
+#include "authserver/aspubsubdefs.h"
+#include <e32property.h>
+#include <authserver/authpatchdata.h>
+#include <u32hal.h> 
+using namespace AuthServer;
+
+class CAuthActive : CActive
+    {
+public:
+    CAuthActive(RAuthClient& aClient, CIdentity*& aResult, CTStepClient* aStep,
+				TBool aStop = ETrue) : 
+         CActive(EPriorityNormal),
+         iFirstTime(true),
+         iClient(aClient), 
+         iResult(aResult), 
+         iStep(aStep),
+		 iStop(aStop)
+	    {
+        CActiveScheduler::Add(this);
+        }
+	
+    void doAuthenticate(TPluginId aPlugin, TTimeIntervalSeconds aTime )
+        {
+		iPlugin = aPlugin;
+        SetActive();		
+		TRequestStatus* status = &iStatus;		    
+		User::RequestComplete(status, KErrNone);
+		iFirstTime = ETrue;
+		iTime = aTime;
+        }
+	
+        void DoCancel() 
+        {
+        }
+        void RunL() 
+        {
+		static TBool client = ETrue;
+		static TBool withString = ETrue;
+		client = !client;
+        if (iFirstTime)
+            {
+			// inactive | plugin id
+            iAe = AuthExpr(0x10274106) | AuthExpr(iPlugin);
+			User::LeaveIfNull(iAe);
+			SetActive();
+            iStatus = KRequestPending;
+            iClient.AuthenticateL(*iAe, iTime, client, withString,
+								  iResult, iStatus);
+            iFirstTime = false;
+            }
+        else
+            {
+			if (iStop)
+				{
+				CActiveScheduler::Stop();
+				}
+            delete iAe;
+			}
+		iErr =  iStatus.Int();
+		}
+    TBool iFirstTime;
+    RAuthClient& iClient;
+    CIdentity*& iResult;
+    CTStepClient* iStep;
+    CAuthExpression* iAe;
+    TPluginId        iPlugin;
+	TTimeIntervalSeconds iTime;
+	TInt iErr;
+	TBool iStop;
+    };
+
+
+
+const TPluginId KIdentity1Id = 'I1ID';
+_LIT(KIdentity1Desc, "identity-1-desc");
+const TPluginId KIdentity2Id = 'I2ID';
+_LIT(KIdentity2Desc, "identity-2-desc");
+const TPluginId KIdentity3Id = 'I3ID';
+
+
+CTStepClient::CTStepClient()
+/**
+	Record this test step's name.
+ */
+	{
+ 	SetTestStepName(KTStepClient);
+	}
+
+
+void CTStepClient::TestIdentitiesL()
+/**
+	Test can retrieve correct identity arrays and
+	descritptinos from auth db.
+ */
+	{
+	__UHEAP_MARK;
+	RemoveExistingDbL();
+	
+	RArray<TIdentityId> ids;
+	
+
+	// one identities (first start adds one)
+	GetIdentitiesLC(ids);
+	TESTL(ids.Count() == 1);
+	CleanupStack::PopAndDestroy(&ids);
+
+	
+	// two identity
+	AddIdentityL(KIdentity1Id, KIdentity1Desc);
+	GetIdentitiesLC(ids);
+	TESTL(ids.Count() == 2);
+	TESTL(ids[0] == KIdentity1Id || ids[1] == KIdentity1Id);
+	CleanupStack::PopAndDestroy(&ids);
+	TestIdentityL(KIdentity1Id, KIdentity1Desc);
+	
+	
+	// three identities
+	AddIdentityL(KIdentity2Id, KIdentity2Desc);
+	GetIdentitiesLC(ids);
+	TESTL(ids.Count() == 3);
+	TESTL(	ids.Find(KIdentity1Id) >= 0 && 
+	        ids.Find(KIdentity2Id) >= 0);
+	CleanupStack::PopAndDestroy(&ids);
+	TestIdentityL(KIdentity1Id, KIdentity1Desc);
+	TestIdentityL(KIdentity2Id, KIdentity2Desc);
+
+	// test fail to get description for non-existent identity
+	RAuthClient ac;
+	User::LeaveIfError(ac.Connect());
+	CleanupClosePushL(ac);
+	
+	
+	TRAPD(r, ac.IdentityStringL(KIdentity3Id));
+	TESTL(r == KErrAuthServIdentityNotFound);
+
+	// check id and string retrieval
+	RIdAndStringArray idWithString;
+	ac.IdentitiesWithStringL(idWithString);
+	CleanupClosePushL(idWithString);
+	
+    for (TInt i = 0 ; i < idWithString.Count() ; ++i)
+	    {
+	    TestIdentityL(idWithString[i]->Id(), *idWithString[i]->String());
+		INFO_PRINTF3(_L("0x%x - %S"), idWithString[i]->Id(), idWithString[i]->String()); 
+	    }
+
+	CleanupStack::PopAndDestroy(2,&ac);
+	
+	__UHEAP_MARKEND;
+	}
+
+
+void CTStepClient::GetIdentitiesLC(RArray<TIdentityId>& aIds)
+/**
+	Populate the supplied array with the currently available
+	identities, as returned by the server.
+	
+	@param	aIds			Array to populate.  Any existing entries
+							are removed when this function is called.
+							On success, the array is placed on the
+							cleanup stack.
+ */
+	{
+	aIds.Reset();
+	CleanupClosePushL(aIds);
+	
+	RAuthClient ac;
+	User::LeaveIfError(ac.Connect());
+	CleanupClosePushL(ac);
+	ac.IdentitiesL(aIds);	// clears array on failure?
+	CleanupStack::PopAndDestroy(&ac);
+	}
+
+
+void CTStepClient::AddIdentityL(TIdentityId aIdentityId, const TDesC& aDesc)
+/**
+	Add the described identity directly to the database.
+	
+	This function does not use the authentication manager APIs.
+ */
+	{
+	WaitForServerToReleaseDb();
+	CAuthDb2* db = CAuthDb2::NewL(iFs);
+	CleanupStack::PushL(db);
+	db->AddIdentityL(aIdentityId, aDesc);
+	CleanupStack::PopAndDestroy(db);
+	}
+
+
+void CTStepClient::TestIdentityL(TIdentityId aIdentityId, const TDesC& aExpDesc)
+/**
+	Test the supplied identity has the supplied description,
+	as read via the RAuthClient API.
+	
+	@param	aIdentityId		Identity to retrieve description for.
+	@param	aExpDesc		The expected description.
+ */
+	{
+	RAuthClient ac;
+	CleanupClosePushL(ac);
+	User::LeaveIfError(ac.Connect());
+	HBufC* desc = ac.IdentityStringL(aIdentityId);
+	CleanupStack::PushL(desc);
+	TESTL(*desc == aExpDesc);
+	CleanupStack::PopAndDestroy(2, &ac);
+	}
+
+
+/**
+	TestClientPluginListsL poulates this with a description for
+	every plugin that can be seen with ECOM.
+ */
+static RCPointerArray<CPluginDesc> allPlugins;
+
+/**
+	Total number of plugins on the device.  Should be equal to
+	allPlugins.Count().
+ */
+static TInt totalCount;
+
+/**
+	Maximum number of plugins which can are expected.  This is
+	an arbitrary value which is used to size an array.  It can be
+	changed if required.
+ */
+const TInt KMaxSeenCount = 17;
+
+/**
+	This array stores how many times each plugin from allPlugins
+	has been seen.  It is set by SetSeenCountsL.
+ */
+static TFixedArray<TInt, KMaxSeenCount> seenCounts;
+
+
+void CTStepClient::GetDescriptionsFromEComL(RPointerArray<CPluginDesc>& aDescs)
+/**
+	Populate the supplied array with plugin descriptions generated
+	from the available ECOM plugins.  The array can then be used to
+	check the results from the server.
+ */
+	{
+	WaitForServerToReleaseDb();
+	
+	CAuthDb2* db = CAuthDb2::NewL(iFs);
+	CleanupStack::PushL(db);
+	
+	// typedef RPointerArray<CImplementationInformation> RImplInfoPtrArray;
+	RCPointerArray<CImplementationInformation> implInfo;
+	REComSession::ListImplementationsL(KCAuthPluginInterfaceUid, implInfo);
+	CleanupClosePushL(implInfo);
+	
+	TInt implCount = implInfo.Count();
+	TInt err = 0;
+	for (TInt i = 0; i < implCount; ++i)
+		{
+		// avoid RVCT warning C2874W: pi may be used before being set
+		CAuthPluginInterface* pi = 0;
+
+		TEComResolverParams resolverParams;
+		TBufC8<16> pluginIdTxt;
+		  
+		pluginIdTxt.Des().Format(_L8("%x"), implInfo[i]->ImplementationUid().iUid);
+		pluginIdTxt.Des().UpperCase();	  
+		resolverParams.SetDataType(pluginIdTxt);
+		 
+		//To load plugins from sources other than ROM the patch 
+		// data KEnablePostMarketAuthenticationPlugins must be set to True.
+		TUint32 enablePostMarketPlugin = KEnablePostMarketAuthenticationPlugins;
+
+#ifdef __WINS__
+
+    	// Default SymbianOS behavior is to only load auth plugins from ROM.
+		enablePostMarketPlugin = 0;
+
+		// For the emulator allow the constant to be patched via epoc.ini
+		UserSvr::HalFunction(EHalGroupEmulator, EEmulatorHalIntProperty,
+		(TAny*)"KEnablePostMarketAuthenticationPlugins", &enablePostMarketPlugin); // read emulator property (if present)
+
+#endif			  
+		TAny* plugin = 0; 
+		TUid Dtor_ID_Key = TUid::Null();
+		if(enablePostMarketPlugin == 0) 
+			{
+			TRAP(err, plugin = 
+			REComSession::CreateImplementationL(KCAuthPluginInterfaceUid,
+												Dtor_ID_Key,
+												resolverParams,
+												KRomOnlyResolverUid));
+			}
+			  
+		else
+		  	{
+		  	TRAP(err, plugin = 
+			REComSession::CreateImplementationL(KCAuthPluginInterfaceUid,
+												Dtor_ID_Key,
+												resolverParams));
+		  	}
+					  
+		if (err == KErrAuthServNoSuchPlugin)
+			continue;
+		User::LeaveIfError(err);
+		pi = reinterpret_cast<CAuthPluginInterface*>(plugin);	
+	
+		// get training status from db
+		TAuthTrainingStatus ts = db->PluginStatusL(pi->Id());
+		
+		CleanupStack::PushL(pi);
+		CPluginDesc* pd = CPluginDesc::NewL(
+			pi->Id(), pi->Name(), pi->Type(),
+			ts, pi->MinEntropy(),
+			pi->FalsePositiveRate(), pi->FalseNegativeRate() );
+		CleanupStack::PopAndDestroy(pi);
+		REComSession::DestroyedImplementation(Dtor_ID_Key);
+		
+		CleanupStack::PushL(pd);
+		aDescs.AppendL(pd);
+		CleanupStack::Pop(pd);
+		}
+	
+	CleanupStack::PopAndDestroy(2, db);
+	REComSession::FinalClose();
+	}
+
+
+static TBool AreDescsEqual(const CPluginDesc& aLeft, const CPluginDesc& aRight)
+/**
+	Predicate function determines whether the two supplied
+	plugin descriptions contain the same information.
+
+	@param	aLeft			Plugin description to compare to aRight.
+	@param	aRight			Plugin description to compare to aLeft.
+	@return					Zero if the two descriptions contains different
+							information, non-zero otherwise.
+ */
+	{
+	return	aLeft.Id() == aRight.Id()
+		&&	*aLeft.Name() == *aRight.Name()
+		&&	aLeft.Type() == aRight.Type()
+		&&	aLeft.TrainingStatus() == aRight.TrainingStatus()
+		&&	aLeft.MinEntropy() == aRight.MinEntropy()
+		&&	aLeft.FalsePositiveRate() == aRight.FalsePositiveRate()
+		&&	aLeft.FalseNegativeRate() == aRight.FalseNegativeRate();
+	}
+
+
+inline TBool AreDescsEqual(const CPluginDesc* aLeftP, const CPluginDesc* aRightP)
+	{
+	return AreDescsEqual(*aLeftP, *aRightP);
+	}
+	
+
+void CTStepClient::SetSeenCountsL(const RCPointerArray<const CPluginDesc>& aPlugins)
+/**
+	Update seenCounts array so each entry contains the
+	number of times that plugin was seen in aPlugins.
+ */
+	{
+	const TInt suppliedCount = aPlugins.Count();
+	const TInt totalCount = allPlugins.Count();
+	
+	// i = index into seenCounts
+	for (TInt i = 0; i < totalCount; ++i)
+		{
+		seenCounts[i] = 0;
+		
+		// j = index into aPlugins
+		TInt j = 0;
+		for (; j < suppliedCount; ++j)
+			{
+			if (AreDescsEqual(*allPlugins[i], *aPlugins[j]))
+				{
+				++seenCounts[i];
+				break;		// assume plugins in allPlugins are unique
+				}
+			}
+		
+		// if plugin not found in reference set then abort
+		TESTL(j < totalCount);
+		}
+	}
+
+
+void CTStepClient::TestClientPluginListsL()
+/**
+	Test the expected plugins are returned when the
+	client asks the server to list them.
+ */
+	{	
+	__UHEAP_MARK;
+	
+	CleanupClosePushL(allPlugins);
+	GetDescriptionsFromEComL(allPlugins);
+	PrepareTrainedPluginsL();
+	
+	// re-read plugins now training statuses have been set
+	allPlugins.ResetAndDestroy();	
+	GetDescriptionsFromEComL(allPlugins);
+	CleanupClosePushL(allPlugins);
+	
+	totalCount = allPlugins.Count();
+	TESTL(totalCount <= KMaxSeenCount);
+	
+	RAuthClient ac;
+	User::LeaveIfError(ac.Connect());
+	CleanupClosePushL(ac);
+	
+	// ensure all plugins are returned by PluginsL
+	RCPointerArray<const CPluginDesc> fullPlugins;
+	ac.PluginsL(fullPlugins);
+	CleanupClosePushL(fullPlugins);
+	TESTL(fullPlugins.Count() == totalCount);
+	SetSeenCountsL(fullPlugins);
+	for (TInt k = 0; k < totalCount; ++k)
+		{
+		TESTL(seenCounts[k] == 1);
+		}
+	CleanupStack::PopAndDestroy(&fullPlugins);
+	
+	// ensure expected plugins are returned for each type
+	TestTypedPluginsL(ac, EAuthKnowledge);
+	TestTypedPluginsL(ac, EAuthBiometric);
+	TestTypedPluginsL(ac, EAuthToken);
+
+	TestActivePluginsL(ac);
+	
+	CleanupStack::PopAndDestroy(&ac);
+	
+	TestTrainedPluginsL();
+	
+	CleanupStack::PopAndDestroy(2, &allPlugins);
+	
+	__UHEAP_MARKEND;
+	}
+
+
+void CTStepClient::TestTypedPluginsL(RAuthClient& aClient,
+									 TAuthPluginType aPluginType)
+/**
+	Ensure the plugin descriptions returned by the server
+	match those directly seen by ECOM.
+	
+	@param	aPluginType		Type of plugin to retrieve.
+ */
+	{
+	__UHEAP_MARK;
+	RCPointerArray<const CPluginDesc> typedPlugins;
+	aClient.PluginsOfTypeL(aPluginType, typedPlugins);
+	CleanupClosePushL(typedPlugins);
+	SetSeenCountsL(typedPlugins);
+	
+	for (TInt k = 0; k < totalCount; ++k)
+		{
+		TInt& recCount = seenCounts[k];
+		TESTL(recCount == (allPlugins[k]->Type() == aPluginType) ? 1 : 0);
+		}
+	
+	CleanupStack::PopAndDestroy(&typedPlugins);
+	__UHEAP_MARKEND;
+	}
+
+
+void CTStepClient::TestActivePluginsL(RAuthClient& aClient)
+/**
+	Ensure the plugin descriptions returned by the server
+	match those directly seen by ECOM.
+ */
+	{
+	__UHEAP_MARK;
+	RCPointerArray<const CPluginDesc> activePlugins;
+	aClient.ActivePluginsL(activePlugins);
+	CleanupClosePushL(activePlugins);
+		
+	CleanupStack::PopAndDestroy(&activePlugins);
+	__UHEAP_MARKEND;
+	}
+
+void CTStepClient::TestTrainedPluginsL()
+/**
+	Test the expected plugins are returned when filtering
+	for training types.
+	
+	@param	aClient			Client with open connection to auth server.
+ */
+	{
+	RCPointerArray<const CPluginDesc> pids;
+	CleanupClosePushL(pids);
+	
+	RAuthClient ac;
+	User::LeaveIfError(ac.Connect());
+	CleanupClosePushL(ac);
+	
+	const CPluginDesc* pdsc0 = allPlugins[0];
+	const CPluginDesc* pdsc1 = allPlugins[1];
+	const CPluginDesc* pdsc2 = allPlugins[2];
+	const CPluginDesc* pdsc3 = allPlugins[3];
+
+	ac.PluginsWithTrainingStatusL(EAuthUntrained, pids);
+	TInt filterCount = pids.Count();
+	TESTL(filterCount == totalCount - 4);
+	for (TInt i = 0; i < filterCount; ++i)
+	{
+		const CPluginDesc* pidF = pids[i];
+		TBool eq0 = AreDescsEqual(pidF, pdsc0);
+		TBool eq1 = AreDescsEqual(pidF, pdsc1);
+		TBool eq2 = AreDescsEqual(pidF, pdsc2);
+		TBool eq3 = AreDescsEqual(pidF, pdsc3);
+		TESTL(!eq0 && !eq1 && !eq2 && !eq3);
+		}
+
+	pids.ResetAndDestroy();
+	ac.PluginsWithTrainingStatusL(EAuthTrained, pids);
+	TESTL(pids.Count() == 2);
+	TESTL(	(AreDescsEqual(pids[0], pdsc0) && AreDescsEqual(pids[1], pdsc1))
+		||	(AreDescsEqual(pids[0], pdsc1) && AreDescsEqual(pids[1], pdsc0)) );
+	
+	pids.ResetAndDestroy();
+	ac.PluginsWithTrainingStatusL(EAuthFullyTrained, pids);
+	TESTL(pids.Count() == 2);
+	TESTL(	(AreDescsEqual(pids[0], pdsc2) && AreDescsEqual(pids[1], pdsc3))
+		||	(AreDescsEqual(pids[0], pdsc3) && AreDescsEqual(pids[1], pdsc2)) );
+	
+	CleanupStack::PopAndDestroy(2, &pids);
+	}
+
+
+void CTStepClient::PrepareTrainedPluginsL()
+/**
+	Helper function for TestTrainedPluginsL.
+	
+	Train some plugins so they can be filtered out later.
+	This function replaces the database.
+ */
+	{
+	// There have to be at least four available plugins
+	// to run the training status test.
+	TESTL(allPlugins.Count() >= 4);
+	
+	RemoveExistingDbL();
+	CAuthDb2* db = CAuthDb2::NewLC(iFs);
+
+	db->AddIdentityL(KIdentity1Id, KIdentity1Desc);
+	db->AddIdentityL(KIdentity2Id, KIdentity2Desc);
+
+	const CTransientKeyInfo& tki = *iId1Keys[0];
+	
+	// partially train plugins zero and one
+	TPluginId pid0 = allPlugins[0]->Id();
+	TPluginId pid1 = allPlugins[1]->Id();
+	db->SetTrainedPluginL(KIdentity1Id, pid0, tki);
+	db->SetTrainedPluginL(KIdentity2Id, pid1, tki);
+
+	// fully train plugins two and three
+	TPluginId pid2 = allPlugins[2]->Id();
+	TPluginId pid3 = allPlugins[3]->Id();
+	db->SetTrainedPluginL(KIdentity1Id, pid2, tki);
+	db->SetTrainedPluginL(KIdentity2Id, pid2, tki);
+	db->SetTrainedPluginL(KIdentity1Id, pid3, tki);
+	db->SetTrainedPluginL(KIdentity2Id, pid3, tki);
+
+	CleanupStack::PopAndDestroy(db);
+	}
+
+TBool CTStepClient::TestMultiAuthL()
+	{
+	INFO_PRINTF1(_L("Testing only a single client can make an auth "));
+	INFO_PRINTF1(_L("request at any one time"));	
+	
+	RAuthClient ac1;
+	User::LeaveIfError(ac1.Connect());
+	CleanupClosePushL(ac1);
+
+	RAuthClient ac2;
+	User::LeaveIfError(ac2.Connect());
+	CleanupClosePushL(ac2);
+
+    CIdentity* result1 = 0;
+    CAuthActive active1(ac1, result1, this);
+    active1.doAuthenticate(KTestPluginBlocking,0);
+
+    CIdentity* result2 = 0;
+    CAuthActive active2(ac2, result2, this, EFalse);
+    active2.doAuthenticate(KTestPluginBlocking,0);
+	
+	CActiveScheduler::Start();
+
+    TEST(active1.iErr == KErrNone);
+	TEST(active2.iErr == KErrServerBusy);
+	
+    delete result1;
+	delete result2;
+	
+	CleanupStack::PopAndDestroy(2,&ac1);
+	return ETrue;
+	}
+
+
+TBool CTStepClient::TestAuthenticateL()
+/**
+	Send simple authentication request.
+ */
+	{
+	// create a transient key
+	CProtectionKey* key = CProtectionKey::NewLC(8);
+	CTransientKeyInfo* tki = CTransientKeyInfo::NewLC(KTestPluginId22);
+	
+	CTransientKey* tk = tki->CreateTransientKeyL(KIdentifyData);
+	CleanupStack::PushL(tk);
+	
+	CEncryptedProtectionKey* epKey = tk->EncryptL(*key);
+	CleanupStack::PushL(epKey);
+	
+	tki->SetEncryptedProtectionKeyL(epKey);
+	CleanupStack::Pop(epKey);	// now owned by tki
+	
+	// create identity 22, which identified by test plugin
+	WaitForServerToReleaseDb();
+	CAuthDb2* db = CAuthDb2::NewL(iFs);
+	CleanupStack::PushL(db);	
+	db->AddIdentityL(22, _L("22-desc"));
+	db->SetTrainedPluginL(22, KTestPluginId22, *tki);
+
+	CleanupStack::PopAndDestroy(4, key);	// tki, tk, db
+	
+	RAuthClient ac;
+	User::LeaveIfError(ac.Connect());
+	CleanupClosePushL(ac);
+
+	RAuthMgrClient amc;
+	User::LeaveIfError(amc.Connect());
+	CleanupClosePushL(amc);
+
+	TInt eventId = KUnknownIdentity;
+	TLastAuth lastAuth;
+	TPckg<TLastAuth> lastAuthPckg(lastAuth);
+
+	TInt err = RProperty::Get(KAuthServerSecureId, KUidAuthServerLastAuth,
+							  lastAuthPckg);
+	RProperty::Get(KAuthServerSecureId, KUidAuthServerAuthChangeEvent, eventId);
+	TESTL(eventId == KUnknownIdentity);
+	TESTL(lastAuth.iId == KUnknownIdentity);
+	TESTL(lastAuth.iAuthTime == 0);
+	TESTL(lastAuth.iMaxCombinations == 0);
+	TESTL(lastAuth.iFalsePositiveRate == 0);
+	TESTL(lastAuth.iFalseNegativeRate == 0);
+	TESTL(lastAuth.iNumFactors == 0);
+	
+	// authenticate the client with the test plugin but using type
+	
+	amc.SetPreferredTypePluginL(EAuthKnowledge,
+								KTestPluginId22);
+    CleanupStack::PopAndDestroy(&amc);
+	TESTL(KTestPluginId22 == ac.PreferredTypePluginL(EAuthKnowledge));
+
+	CAuthExpression* ae = AuthExpr(EAuthKnowledge);		// plugin type
+	User::LeaveIfNull(ae);
+	CleanupStack::PushL(ae);
+
+    CIdentity* result = 0;
+    result = ac.AuthenticateL(
+    	*ae,		// aExpression
+    	0,			// aTimeout
+    	ETrue,     // aClientSpecificKey       
+		EFalse);	// aWithString
+	INFO_PRINTF3(_L("1. Id = 0x%x , KeyLength = %d\n"), result->Id(),
+				 result->Key().KeyData().Size());
+	TESTL(result->Id() == 22);
+	delete result;
+
+	RProperty::Get(KAuthServerSecureId, KUidAuthServerLastAuth, lastAuthPckg);
+	RProperty::Get(KAuthServerSecureId, KUidAuthServerAuthChangeEvent, eventId);
+	TESTL(eventId == eventId);
+	TESTL(lastAuth.iId == 22);
+	TTime now;
+	TTimeIntervalSeconds since;
+	now.UniversalTime();
+	now.SecondsFrom(lastAuth.iAuthTime, since);
+	TESTL(since < TTimeIntervalSeconds(5));
+	TESTL(lastAuth.iMaxCombinations == KEntropy);
+	TESTL(lastAuth.iFalsePositiveRate == KFalsePos);
+	TESTL(lastAuth.iFalseNegativeRate == KFalseNeg);
+	TESTL(lastAuth.iNumFactors == 1);
+	
+	
+	// authenticate again, to get cached value
+    result = ac.AuthenticateL(
+    	*ae,		// aExpression
+    	55,			// aTimeout
+    	ETrue,      // aClientSpecificKey
+		ETrue);	    // aWithString
+	TDesC p = result->String();
+	INFO_PRINTF4(_L("2. Id = 0x%x , KeyLength = %d, String = %S\n"), result->Id(),
+				 result->Key().KeyData().Size(), &p);
+	TESTL(result->Id() == 22);
+	delete result;
+
+	
+	// deauthenticate
+	TRAP(err, ac.DeauthenticateL());
+	TESTL(err == KErrNone);
+
+	RProperty::Get(KAuthServerSecureId, KUidAuthServerLastAuth, lastAuthPckg);
+	RProperty::Get(KAuthServerSecureId, KUidAuthServerAuthChangeEvent, eventId);
+	TESTL(eventId == KUnknownIdentity);
+	TESTL(lastAuth.iId == KUnknownIdentity);	
+	TESTL(lastAuth.iAuthTime == 0);
+	TESTL(lastAuth.iMaxCombinations == 0);
+	TESTL(lastAuth.iFalsePositiveRate == 0);
+	TESTL(lastAuth.iFalseNegativeRate == 0);
+	TESTL(lastAuth.iNumFactors == 0);
+		
+    result = 0;
+    CAuthActive active(ac, result, this);
+    active.doAuthenticate(KTestPluginId22,0);		
+	CActiveScheduler::Start();
+	INFO_PRINTF3(_L("3. Id = 0x%x , KeyLength = %d"), result->Id(),
+				 result->Key().KeyData().Size());
+    TESTL(result->Id() == 22);
+	delete result;
+
+	
+	// unknown
+    result = 0;
+    active.doAuthenticate(KTestPluginIdUnknown,0);		
+	CActiveScheduler::Start();
+	INFO_PRINTF2(_L("4. Id = 0x%x"),result->Id());
+	TESTL(result->Id() == KUnknownIdentity);
+	delete result;
+
+	
+	// failure (bad plugin)
+    result = 0;
+    active.doAuthenticate(0xD0DAD0DA,0);		
+	CActiveScheduler::Start();
+	INFO_PRINTF3(_L("5. CAuthActive:RunL err %d : res = 0x%x"),
+				 active.iErr, result);
+	TESTL(active.iErr == KErrAuthServNoSuchPlugin && result == 0);
+	
+	CleanupStack::PopAndDestroy(2, &ac);	// ae, ac
+	return ETrue;
+	}
+
+void CTStepClient::TestSetIdentityStrL()
+    {
+	// assumes TestAuthenticateL has been called and id 22 is created
+	RAuthClient ac;
+	User::LeaveIfError(ac.Connect());
+	CleanupClosePushL(ac);
+
+	_LIT(KId22DescNew, "ID22NewDesc");
+
+	HBufC* desc = ac.IdentityStringL(22);
+	CleanupStack::PushL(desc);
+	TESTL(*desc == _L("22-desc")); 
+	CleanupStack::PopAndDestroy(desc); 
+	
+	ac.SetIdentityStringL(22, KId22DescNew);
+	
+	desc = ac.IdentityStringL(22);
+	CleanupStack::PushL(desc); 
+	TESTL(*desc == KId22DescNew); 
+	CleanupStack::PopAndDestroy(desc); 
+	
+	CleanupStack::PopAndDestroy(&ac);
+	}    
+
+						 
+
+TVerdict CTStepClient::doTestStepL()
+	{
+	if (TestStepResult() != EPass)
+		return TestStepResult();
+	SetTestStepResult(EPass);
+	__UHEAP_MARK;
+	
+	CActiveScheduler::Install(iActSchd);
+	
+	INFO_PRINTF1(_L("Test identities"));
+	TestIdentitiesL();
+	
+	INFO_PRINTF1(_L("Test ClientPluginLists"));
+ 	TestClientPluginListsL();
+ 	
+ 	INFO_PRINTF1(_L("Test Authenticate"));
+	TestAuthenticateL();
+	
+	INFO_PRINTF1(_L("Test MultiAuth"));
+	TestMultiAuthL();
+	
+	INFO_PRINTF1(_L("Test SetIdentityStr"));
+	TestSetIdentityStrL();
+	
+	__UHEAP_MARKEND;	
+	
+	return EPass;
+	}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthcliserv/step_firststart.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,78 @@
+/*
+* Copyright (c) 2005-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 "tauthcliservstep.h"
+#include <test/testexecutelog.h>
+
+#include "authserver/authmgrclient.h"
+#include "authserver/identity.h"
+
+#include <s32file.h>
+
+using namespace AuthServer;
+
+CTStepFirstStart::CTStepFirstStart()
+	{
+	SetTestStepName(KTStepFirstStart);
+	}
+
+TVerdict CTStepFirstStart::doTestStepL()
+	{
+	if (TestStepResult() != EPass)
+		{
+		INFO_PRINTF1(_L("Previous step failed"));
+
+		return TestStepResult();
+		}
+__UHEAP_MARK;		// Check for memory leaks
+    SetTestStepResult(EFail);
+    
+	TBool res = ETrue;
+	TBool tmp = ETrue;
+	TInt  err = KErrNone;
+
+ 	User::SetJustInTime(ETrue);
+
+    TRAP(err, RemoveExistingDbL());
+    
+	RAuthClient client;
+	err = client.Connect();
+	CleanupClosePushL(client);
+
+    TEST(tmp = (err == KErrNone));
+    res = tmp && res;
+    INFO_PRINTF2(_L("Connect result = %d"), err);
+    
+	RIdentityIdArray ids;
+	client.IdentitiesL(ids); 
+	
+	TEST(tmp = ids.Count() == 1);
+    res = tmp && res;
+
+	HBufC* str = client.IdentityStringL(ids[0]);
+	CleanupStack::PushL(str);
+	
+	ids.Close();
+	
+	SetTestStepResult(res ? EPass : EFail);
+
+	CleanupStack::PopAndDestroy(2, &client);
+__UHEAP_MARKEND;	
+	return TestStepResult();
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthcliserv/step_mgrclient.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,501 @@
+/*
+* Copyright (c) 2005-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 <bautils.h>
+#include <s32file.h>
+#include <test/testexecutelog.h>
+
+#include "authserver/authmgrclient.h"
+#include "authserver/identity.h"
+#include "tauthcliservstep.h"
+
+using namespace AuthServer;
+
+class CRegActive : public CActive
+    {
+    public:
+    CRegActive(RAuthMgrClient& aClient, CIdentity*& aResult, TBool aStop = ETrue) : 
+         CActive(EPriorityNormal),
+         iFirstTime(true),
+         iClient(aClient), 
+         iResult(aResult),
+         iStop(aStop)
+        {
+        CActiveScheduler::Add(this);
+        }
+    void doReg()
+        {
+        SetActive();		
+		TRequestStatus* status = &iStatus;		    
+		User::RequestComplete(status, KErrNone);
+		iFirstTime = ETrue;				
+        }
+        void DoCancel() 
+        {
+        }
+     void RunL() 
+        {
+        if (iFirstTime)
+            {
+			SetActive();
+            iStatus = KRequestPending;
+            iClient.RegisterIdentityL(iResult, _L("SOMENAME"), iStatus);
+            iFirstTime = false;
+            }
+        else
+            {
+            if (iStop)
+                {
+                CActiveScheduler::Stop();
+                }
+            iErr = iStatus.Int();
+			}
+        }
+        TBool iFirstTime;
+        RAuthMgrClient& iClient;
+        CIdentity*& iResult;
+        TBool iStop;
+        TInt iErr;
+    };
+
+class CTrainActive : public CActive
+    {
+    public:
+    CTrainActive(RAuthMgrClient& aClient, TBool aStop = ETrue) : 
+         CActive(EPriorityNormal),
+         iClient(aClient),
+		 iResult(EFail),
+         iRunCount(0),
+         iStop(aStop)
+        {
+        CActiveScheduler::Add(this);
+        }
+    void doTrain() 
+        {
+
+        SetActive();		
+		TRequestStatus* status = &iStatus;		    
+		User::RequestComplete(status, KErrNone);
+		iRunCount = 0;
+        }
+        void DoCancel() 
+        {
+        }
+     void RunL() 
+        {
+        iErr = iStatus.Int();
+        if (iStatus.Int() != KErrNone)
+            {
+            }
+		switch (iRunCount)
+		  {
+		  case 0:
+            iStatus = KRequestPending;
+			iAe = AuthExpr(0x10274104);
+			iId = 0;
+
+			iClient.AuthenticateL(*iAe, 10, EFalse, EFalse, iId, iStatus);
+			SetActive();
+
+			break;
+		  case 1:
+			delete iAe;
+			delete iId;
+            iStatus = KRequestPending;
+            iClient.TrainPlugin(22, 0x10274104, iStatus);
+			SetActive();
+
+			break;
+   		  case 2:
+			iResult = iStatus.Int() == KErrNone ? EPass : EFail;
+            iErr = iStatus.Int();
+			if (iStop)
+                {
+                CActiveScheduler::Stop();
+                }
+
+			break;
+     	  default:
+			iResult = EFail;
+			
+			if (iStop)
+			    {
+			    CActiveScheduler::Stop();
+			    }
+		    }
+		  ++iRunCount;
+          }
+	RAuthMgrClient& iClient;
+	TVerdict iResult;
+	TInt iRunCount;
+	CAuthExpression* iAe;
+	CIdentity* iId;
+    TBool iStop;
+    TInt iErr;
+    };
+
+class CTrainActive2 : public CActive
+    {
+    public:
+    CTrainActive2(RAuthMgrClient& aClient, TBool aStop = ETrue) : 
+         CActive(EPriorityNormal),
+         iClient(aClient),
+         iRunCount(0),
+         iStop(aStop)
+        {
+        CActiveScheduler::Add(this);
+        }
+    void doTrain() 
+        {
+        SetActive();		
+		iClient.TrainPlugin(22, 0x10274105, iStatus);
+		}
+	void DoCancel() 
+        {
+        }
+	void RunL()
+	    {
+		iErr = iStatus.Int();
+		if (iStop)
+		    {
+			CActiveScheduler::Stop();
+		    }
+	    }
+	
+	RAuthMgrClient& iClient;
+	TInt iRunCount;
+	CAuthExpression* iAe;
+	CIdentity* iId;
+    TBool iStop;
+    TInt iErr;
+    };
+
+class CCancelActive : public CActive
+    {
+    public:
+    CCancelActive(RAuthMgrClient& aClient) : 
+         CActive(EPriorityNormal),
+         iClient(aClient),
+		 iResult(EFail),
+         iRunCount(0)
+        {
+        CActiveScheduler::Add(this);
+        }
+    void doIdCancel() 
+        {
+        SetActive();		
+		TRequestStatus* status = &iStatus;		    
+		User::RequestComplete(status, KErrNone);
+		iMode = 1;
+		iRunCount = 0;
+        }
+    void doRegCancel() 
+        {
+        SetActive();		
+		TRequestStatus* status = &iStatus;		    
+		User::RequestComplete(status, KErrNone);
+		iMode = 2;
+		iRunCount = 0;
+        }
+    void doTrainCancel() 
+        {
+        SetActive();		
+		TRequestStatus* status = &iStatus;		    
+		User::RequestComplete(status, KErrNone);
+		iMode = 0;
+		iRunCount = 0;
+        }
+	void DoCancel() 
+        {
+        }
+     void RunL() 
+        {
+        if (iStatus.Int() != KErrNone)
+            {
+			  //RDebug::Printf("CCancelActive error: %d", iStatus.Int());
+            }
+		switch (iRunCount)
+		  {
+		  case 0:
+            iStatus = KRequestPending;
+			iAe = AuthExpr(0x10274105);
+			iId = 0;
+			switch (iMode)
+			  {
+			  case 2:
+				iClient.RegisterIdentityL(iId, _L("RegCancelID"), iStatus);
+				break;
+			  case 1:
+				iClient.AuthenticateL(*iAe, 0, EFalse, ETrue, iId, iStatus);
+			    break;
+			  case 0:
+				iClient.TrainPlugin(22, 0x10274105, iStatus);
+				break;
+			  }
+			SetActive();
+            User::After(1000000);
+            iClient.Cancel();
+
+			break;
+		  case 1:
+			//iStatus = KRequestPending;
+
+			delete iAe;
+			delete iId;
+            //SetActive();
+
+		    //break;
+   		  case 2:
+			iResult = iStatus.Int() == KErrCancel ? EPass : EFail;
+            CActiveScheduler::Stop();
+
+			break;
+     	  default:
+			iResult = EFail;
+            CActiveScheduler::Stop();
+		  }
+		++iRunCount;
+        }
+	RAuthMgrClient& iClient;
+	TVerdict iResult;
+	TInt iRunCount;
+	CAuthExpression* iAe;
+	CIdentity* iId;
+	TInt iMode;
+    };
+
+
+CTStepMgrClient::CTStepMgrClient()
+	{
+	SetTestStepName(KTStepMgrClient);
+	}
+
+
+TBool CTStepMgrClient::TestMultiRegisterL(RAuthMgrClient& client)
+    {
+    CIdentity* result = 0;
+    CRegActive active(client, result);
+    
+    CIdentity* result2 = 0;
+    RAuthMgrClient client2;
+    User::LeaveIfError(client2.Connect());
+    CleanupClosePushL(client2);
+    
+    CRegActive active2(client2, result2, EFalse);
+
+    active.doReg();		
+    active2.doReg();		
+    
+	CActiveScheduler::Start();
+
+    TEST(active.iErr == KErrNone);
+    TEST(active2.iErr == KErrServerBusy);
+    
+    delete result;
+    delete result2;
+    CleanupStack::PopAndDestroy(&client2);
+	return ETrue;
+    
+    }
+
+TBool CTStepMgrClient::TestRegister(RAuthMgrClient& client)
+  {
+    CIdentity* result = 0;
+    CRegActive active(client, result);
+
+    active.doReg();		
+
+	CActiveScheduler::Start();
+    if (result == 0)
+        {
+        return EFalse;
+        }
+        
+	INFO_PRINTF3(_L("Id = %d , KeyLength = %d\n"), result->Id(), result->Key().KeyData().Size());
+	delete result;
+	result = 0;
+    return ETrue;
+  }
+
+TBool CTStepMgrClient::TestMultiTrainL(RAuthMgrClient& client)
+  {
+    CTrainActive2 active(client);
+    active.doTrain();		
+
+    RAuthMgrClient client2;
+    User::LeaveIfError(client2.Connect());
+    CleanupClosePushL(client2);
+    
+    CTrainActive2 active2(client2, EFalse);
+    active2.doTrain();		
+
+	CActiveScheduler::Start();
+	
+	TEST(active.iErr == KErrAuthServPluginCancelled); // blocking plugin returns
+	                                                  // cancelled if left to
+	                                                  // complete
+    TEST(active2.iErr == KErrServerBusy);
+    
+	CleanupStack::PopAndDestroy(&client2);	
+	INFO_PRINTF3(_L("Training Result (%d,%d)\n"),
+	     active.iErr,
+	     active2.iErr);
+	     
+	return true;
+  }
+
+
+TBool CTStepMgrClient::TestTrain(RAuthMgrClient& client)
+  {
+    CTrainActive active(client);
+    active.doTrain();		
+	CActiveScheduler::Start();
+	INFO_PRINTF2(_L("Training Result = %d\n"), active.iResult == EPass);
+	return active.iResult == EPass;
+  }
+
+TBool CTStepMgrClient::TestCancellation(RAuthMgrClient& client)
+  {
+    CCancelActive active(client);
+    
+    active.doTrainCancel();		
+	CActiveScheduler::Start();
+	TEST(active.iResult == EPass);
+	INFO_PRINTF2(_L("Training Cancel Result = %d\n"), active.iResult == EPass);
+
+    active.doTrainCancel();		
+	CActiveScheduler::Start();
+	TEST(active.iResult == EPass);
+	INFO_PRINTF2(_L("Training Cancel Result = %d\n"), active.iResult == EPass);
+
+    active.doTrainCancel();		
+	CActiveScheduler::Start();
+	TEST(active.iResult == EPass);
+	INFO_PRINTF2(_L("Training Cancel Result = %d\n"), active.iResult == EPass);
+
+    //User::After(5000000);
+    active.doIdCancel();		
+	CActiveScheduler::Start();
+	TEST(active.iResult == EPass);
+	INFO_PRINTF2(_L("Id Cancel Result = %d\n"), active.iResult == EPass);
+
+    active.doIdCancel();		
+	CActiveScheduler::Start();
+	TEST(active.iResult == EPass);
+	INFO_PRINTF2(_L("Id Cancel Result = %d\n"), active.iResult == EPass);
+
+	active.doRegCancel();		
+	CActiveScheduler::Start();
+	TEST(active.iResult == EPass);
+	INFO_PRINTF2(_L("Registration Cancel Result = %d\n"), active.iResult == EPass);
+		
+	return active.iResult == EPass;
+  }
+
+TVerdict CTStepMgrClient::doTestStepL()
+	{
+	TInt r = 0;
+	
+	if (TestStepResult() != EPass)
+		{
+		INFO_PRINTF1(_L("Previous step failed"));
+
+		return TestStepResult();
+		}
+
+		
+	WaitForServerToReleaseDb();
+	
+
+	TDriveUnit sysDrive (RFs::GetSystemDrive());
+	TDriveName sysDriveName (sysDrive.Name());
+	
+	_LIT(KDbSrcFile ,"\\authdb0.db");
+	TBuf<64> dbSrcFileName (sysDriveName);
+	dbSrcFileName.Append(KDbSrcFile);
+
+	TBuf<128> dbName(KDbName);
+	dbName[0] = 'A' + sysDrive;	
+
+	r = BaflUtils::CopyFile(iFs, dbSrcFileName, dbName);
+	
+	INFO_PRINTF2(_L("File copy returned %d"), r);
+
+	User::LeaveIfError(r);
+	
+
+	
+	__UHEAP_MARK;
+    SetTestStepResult(EPass);
+    
+	CActiveScheduler::Install(iActSchd);
+
+    
+	RAuthMgrClient mgrclient;
+	User::LeaveIfError(mgrclient.Connect());
+	CleanupClosePushL(mgrclient);
+	
+   	mgrclient.RemoveIdentityL(2);
+
+
+	RIdentityIdArray ids;
+	mgrclient.IdentitiesL(ids);
+	CleanupClosePushL(ids);
+
+	TESTL(ids.Count() == 3);
+
+	// ensure each expected identity occurs once.
+	// (This technique is simple but doesn't generalise.)
+	TInt sum = 0;
+	for (TInt i = 0; i < 3; ++i)
+		{
+		TIdentityId id = ids[i];
+		TESTL(id == 1 || id == 3 || id == 22);
+		sum += id;
+		}
+	TESTL(sum == 1 + 3 + 22);
+
+	CleanupStack::PopAndDestroy(&ids);
+
+	TEST(TestRegister(mgrclient));
+
+	mgrclient.IdentitiesL(ids);
+	CleanupClosePushL(ids);
+	TEST(ids.Count() == 4);
+	CleanupStack::PopAndDestroy(&ids);
+
+	TEST(TestTrain(mgrclient));
+
+	INFO_PRINTF1(_L("Testing cancellation"));
+    TEST(TestCancellation(mgrclient));
+    
+    INFO_PRINTF1(_L("Testing simultaneous registrations are blocked"));
+    TEST(TestMultiRegisterL(mgrclient));
+    
+    INFO_PRINTF1(_L("Testing simultaneous trainings are blocked"));
+    TestMultiTrainL(mgrclient);
+    
+	// Last plugin can't be removed 
+	TRAPD(err, mgrclient.ForgetPluginL(22,0x10274104));
+	TEST(err == KErrAuthServCanNotRemoveLastPlugin);
+	
+	CleanupStack::PopAndDestroy(1, &mgrclient);
+
+	__UHEAP_MARKEND;	
+	return EPass;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthcliserv/tauthcliserv.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,132 @@
+/*
+* Copyright (c) 2005-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: 
+* tauthdbserver.cpp
+* server implementation
+*
+*/
+
+
+/**
+ @file 
+*/
+
+#include "tauthcliservstep.h"
+
+_LIT(KServerName,"tauthcliserv");
+
+/**
+ * Called inside the MainL() function to create and start the CTestServer 
+ * derived server.
+ * @return Instance of the test server
+ */
+CTAuthDbServer* CTAuthDbServer::NewL()
+	{
+	CTAuthDbServer * server = new (ELeave) CTAuthDbServer();
+	CleanupStack::PushL(server);
+	
+	// Either use a StartL or ConstructL, the latter will permit Server Logging.
+
+	server->ConstructL(KServerName);
+	CleanupStack::Pop(server);
+	return server;
+	}
+
+LOCAL_C void MainL()
+	{
+	// Leave the hooks in for platform security
+#if (defined __DATA_CAGING__)
+	RProcess().DataCaging(RProcess::EDataCagingOn);
+	RProcess().SecureApi(RProcess::ESecureApiOn);
+#endif
+	CActiveScheduler* sched=NULL;
+	sched=new(ELeave) CActiveScheduler;
+	CleanupStack::PushL(sched);
+	CActiveScheduler::Install(sched);
+	CTAuthDbServer* server = NULL;
+	// Create the CTestServer derived server
+	TRAPD(err,server = CTAuthDbServer::NewL());
+	if(!err)
+		{
+		RProcess::Rendezvous(KErrNone);
+		sched->Start();
+		}
+	CleanupStack::Pop(sched);
+	delete server;
+	delete sched;
+	}
+
+GLDEF_C TInt E32Main()
+	{
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	if(cleanup == NULL)
+		{
+		return KErrNoMemory;
+		}
+	TRAP_IGNORE(MainL());	
+	delete cleanup;
+	return KErrNone;
+    }
+
+CTestStep* CTAuthDbServer::CreateTestStep(const TDesC& aStepName)
+	{
+	CTestStep* testStep = NULL;
+
+	if(aStepName == KTStepClient)
+		{
+		testStep = new CTStepClient();
+		}
+	else if(aStepName == KTStepMgrClient)
+		{
+		testStep = new CTStepMgrClient();
+		}
+	else if(aStepName == KTStepFirstStart)
+		{
+		testStep = new CTStepFirstStart();
+		}
+
+	// authentication expression tests
+	else if (aStepName == KTStepAuthExprBuild)
+		{
+		testStep = new CTStepAuthExprBuild();
+		}
+	else if (aStepName == KTStepBadExtAuthExpr)
+		{
+		testStep = new CTStepBadExtAuthExpr();
+		}
+	else if (aStepName == KTStepAuthExprHighVer)
+		{
+		testStep = new CTStepAuthExprHighVer();
+		}
+	else if (aStepName == KTStepAuthExprEval)
+		{
+		testStep = new CTStepAuthExprEval();
+		}
+#ifdef _DEBUG
+	else if (aStepName == KTStepAuthExprTypePnc)
+		{
+		testStep = new CTStepAuthExprTypePnc();
+		}
+	else if (aStepName == KTStepAuthExprTypePncBadLeft)
+		{
+		testStep = new CTStepAuthExprTypePncBadLeft();
+		}
+	else if (aStepName == KTStepAuthExprTypePncBadRight)
+		{
+		testStep = new CTStepAuthExprTypePncBadRight();
+		}
+#endif
+
+	return testStep;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthcliserv/tauthcliserv.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2005-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: 
+* tauthdbserver.h
+* TAuthDbServer is the server for all authentication keys tests
+*
+*/
+
+
+#ifndef TAUTHDBSERVER_H
+#define TAUTHDBSERVER_H
+#include <test/testexecuteserverbase.h>
+
+class CTAuthDbServer : public CTestServer
+	{
+public:
+	static CTAuthDbServer*	NewL();
+	virtual CTestStep*      CreateTestStep(const TDesC& aStepName);
+	RFs& Fs()	{return iFs;};
+
+private:
+	RFs	iFs;
+	};
+
+#endif	/* TAUTHDBSERVER_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthcliserv/tauthcliserv.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,67 @@
+/*
+* Copyright (c) 2005-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: 
+*
+*/
+
+
+OPTION GCCE -Wno-multichar
+
+TARGET			tauthcliserv.exe
+TARGETTYPE		exe
+UID				0x1000007A 0x10204F0D
+VENDORID		0x70000001
+
+CAPABILITY TrustedUI ProtServ ReadDeviceData WriteDeviceData Location SurroundingsDD UserEnvironment ReadUserData WriteUserData AllFiles 
+
+USERINCLUDE		../../source/common
+USERINCLUDE		../../source/server
+USERINCLUDE		../../source/client
+USERINCLUDE		../../inc_private
+USERINCLUDE		../../inc/authserver
+
+SYSTEMINCLUDE	/epoc32/include
+SYSTEMINCLUDE	/epoc32/include/test
+
+SOURCEPATH		.
+USERINCLUDE		.
+SOURCE			tauthcliserv.cpp
+SOURCE			step_base.cpp
+SOURCE			step_client.cpp
+SOURCE			step_mgrclient.cpp
+SOURCE			step_authexpr_build.cpp
+SOURCE			step_authexpr_eval.cpp
+SOURCE			step_firststart.cpp
+
+SOURCE			../../source/server/authserver.cpp
+SOURCE			../../source/server/authserversession.cpp
+SOURCE			../../source/server/authdb.cpp
+SOURCE			../../source/server/transientkeyinfo.cpp
+SOURCE			../../source/server/encryptedprotectionkey.cpp
+SOURCE			../../source/server/transientkey.cpp
+SOURCE			../../source/server/evaluator.cpp
+SOURCE			../../source/server/pluginmgr.cpp
+SOURCE			../../source/server/trainingmgr.cpp
+SOURCE			../../source/server/authtransaction.cpp
+SOURCE			../../source/server/pluginobserver.cpp
+SOURCE			../../source/server/authrepository.cpp
+
+LIBRARY			bafl.lib edbms.lib ecom.lib estor.lib efsrv.lib euser.lib 
+LIBRARY         testexecuteutils.lib testexecutelogclient.lib
+LIBRARY         authclient.lib authcommon.lib  scsclient.lib
+LIBRARY         cryptography.lib pbe.lib random.lib
+LIBRARY 		cinidata.lib	// add text INI file parsing ability
+LIBRARY			sectcbutil.lib
+LIBRARY			centralrepository.lib scsserver.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthcliserv/tauthcliservstep.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,629 @@
+/*
+* Copyright (c) 2005-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: 
+*
+*/
+
+
+#ifndef TAUTHCLISERVSTEP_H
+#define TAUTHCLISERVSTEP_H
+
+#include <e32cmn.h>
+#include <ct/rcpointerarray.h>
+#include <ecom/ecom.h>
+
+#include <test/testexecutestepbase.h>
+#include <test/testexecutelog.h>
+
+#include "tauthcliserv.h"
+
+#ifndef __INIPARSER_H__
+#include <cinidata.h>
+#endif // __INIPARSER_H__
+
+// publicly available include file
+#include "authserver_client.h"
+#include <authserver/authplugininterface.h>
+
+// these tests use some information which is normally
+// only visible to the server, or to the client DLL.
+
+#include "authserveripc.h"
+#include "authdb.h"
+#include "transientkey.h"
+#include "transientkeyinfo.h"
+#include "evaluator.h"
+
+// load test plugin data
+#include "../tauthplugins/consts.h"
+
+using AuthServer::TIdentityId;
+using AuthServer::TPluginId;
+using AuthServer::TAuthPluginType;
+using AuthServer::TAuthTrainingStatus;
+using AuthServer::CAuthExpression;
+using AuthServer::CAuthExpressionImpl;
+using AuthServer::TAuthExpressionWrapper;
+using AuthServer::CEvaluator;
+using AuthServer::CPluginDesc;
+using AuthServer::RAuthClient;
+
+// Authserver name
+_LIT(KAuthServerName, "!AuthServer");
+
+_LIT(KTStepCreateDb,"CREATEDB");
+_LIT(KTStepClient,	"CLIENT");
+_LIT(KTStepMgrClient,	"MGRCLIENT");
+_LIT(KTStepFirstStart,	"FIRSTSTART");
+
+_LIT(KTStepAuthExprBuild, "AuthExprBuild");
+_LIT(KTStepBadExtAuthExpr, "AuthExprBadAuthExt");
+_LIT(KTStepAuthExprHighVer, "AuthExprHighVer");
+_LIT(KTStepAuthExprEval, "AuthExprEval");
+
+// debug-mode tests for client-side panicks
+_LIT(KTStepAuthExprTypePnc, "AuthExprTypePanic");
+_LIT(KTStepAuthExprTypePncBadLeft, "AuthExprTypePanicBadLeft");
+_LIT(KTStepAuthExprTypePncBadRight, "AuthExprTypePanicBadRight");
+
+// These are used in the RemoveExistingDbL() function
+// applying to DBs used by tPinAuthPlugin
+_LIT(KPlugin3100File,		"\\tAuth\\tAuthSvr\\testdata\\Pin11113100Db.ini");
+_LIT(KPlugin3101File,		"\\tAuth\\tAuthSvr\\testdata\\Pin11113101Db.ini");
+_LIT(KPlugin3102File,		"\\tAuth\\tAuthSvr\\testdata\\Pin11113102Db.ini");
+_LIT(KAuthSvrPolicyFile, 	"\\tAuth\\tAuthSvr\\testdata\\AuthSvrPolicy.ini");
+_LIT(KPinDbTag,				"Identity&PinValues");
+_LIT(KTotalDbTag,			"AllUserID&PinValues");
+_LIT(KInitPinDatabaseValue,	",");
+_LIT(KDisplayMessage,		"DisplayMessage");
+
+#define KNumPlugins 8
+
+const TInt KTestPluginId22       = 0x10274104;
+const TInt KTestPluginBlocking   = 0x10274105;
+const TInt KTestPluginIdInactive = 0x10274106;
+const TInt KTestPluginIdUnknown  = 0x10274107;
+
+
+class CTAuthcliservStepBase : public CTestStep
+	{
+protected:
+	CTAuthcliservStepBase() {}
+	virtual ~CTAuthcliservStepBase();
+	virtual TVerdict doTestStepPreambleL()
+	   {
+	   iFs.Connect();
+	
+	   CreatePlugins();
+	   CreateKeyInfo();
+	   
+	   return TestStepResult();
+	   }
+	virtual TVerdict doTestStepPostambleL()
+    	{
+		iFs.Close();
+		return TestStepResult();
+		}
+	
+	inline void CreatePlugins();
+	inline void CreateKeyInfo();
+	HBufC* GetNameLC(TInt i);
+
+	void PluginData(AuthServer::TIdentityId aId,
+					AuthServer::TPluginId aPlugin,
+					TPtr8 aDes) 
+	{
+	aDes.Fill(aId*aPlugin);
+	}
+
+	void WaitForServerToReleaseDb();
+	void RemoveExistingDbL();
+	//Utility function allowing text INI file parsing abilities	
+	//Section name unspecified
+	TInt writeToNamedConfig(const TDesC &aFileName, const TDesC &aKeyName,const TPtrC &aResult);
+	
+	
+protected:
+	RFs		iFs;
+
+
+	AuthServer::CPluginDesc*       iPlugins[KNumPlugins];
+	AuthServer::CTransientKeyInfo* iId1Keys[KNumPlugins];
+	AuthServer::CTransientKeyInfo* iId2Keys[KNumPlugins];
+	AuthServer::CTransientKeyInfo* iId3Keys[KNumPlugins];
+  };
+
+inline CTAuthcliservStepBase::~CTAuthcliservStepBase() 
+    {
+    for (TInt i = 0 ; i < KNumPlugins ; ++i)
+        {
+        delete iPlugins[i];
+        delete iId1Keys[i];
+        delete iId2Keys[i];
+        delete iId3Keys[i];
+        }
+    }
+
+class CTStepActSch : public CTAuthcliservStepBase
+/**
+	This abstract subclass of CTAuthcliservStepBase
+	overrides the doTestStep(Pre|Post)ambleL functions
+	from CTestBase to allocate and free an active
+	scheduler.
+	
+	The scheduler is stored in the protected iActSchd
+	variable.  This class does not start or stop the
+	scheduler.
+ */
+	{
+private:
+	// override CTestStep
+	inline virtual TVerdict doTestStepPreambleL();
+	inline virtual TVerdict doTestStepPostambleL();
+	
+protected:
+	/** The active scheduler which subclasses can use. */
+	CActiveScheduler* iActSchd;
+	};
+
+
+
+inline TVerdict CTStepActSch::doTestStepPreambleL()
+/**
+	Override CTestStep by allocating an active
+	scheduler which is available to the subclass.
+	
+	@return					This test step's result,
+							which isn't actually used
+							by ThreadStepExecutionL.
+ */
+	{
+	CTAuthcliservStepBase::doTestStepPreambleL();
+	iActSchd = new(ELeave) CActiveScheduler;
+	return TestStepResult();
+	}
+
+
+inline TVerdict CTStepActSch::doTestStepPostambleL()
+/**
+	Override CTestStep by deleting the active
+	scheduler which allocated in doTestStepPreambleL.
+	
+	@return					This test step's result,
+							which isn't actually used
+							by ThreadStepExecutionL.
+ */
+	{
+	CTAuthcliservStepBase::doTestStepPostambleL();
+	delete iActSchd;
+	return TestStepResult();
+	}
+
+
+class CTStepClient : public CTStepActSch
+	{
+public:
+	CTStepClient();
+	virtual TVerdict doTestStepL();
+	TBool TestAuthenticate(AuthServer::RAuthClient& client);
+	TBool TestAuthenticate2(AuthServer::RAuthClient& client);
+	TBool TestAuthenticate3(AuthServer::RAuthClient& client);
+	TBool TestAuthenticateFail(AuthServer::RAuthClient& client);
+
+
+
+private:
+	void GetDescriptionsFromEComL(RPointerArray<CPluginDesc>& aDescs);
+	
+	void TestIdentitiesL();
+	void GetIdentitiesLC(RArray<TIdentityId>& aIds);
+	void AddIdentityL(TIdentityId aIdentityId, const TDesC& aDesc);
+	void TestIdentityL(TIdentityId aIdentityId, const TDesC& aExpDesc);
+	void TestSetIdentityStrL();
+
+	void TestClientPluginListsL();
+	void SetSeenCountsL(const RCPointerArray<const CPluginDesc>& aPlugins);
+	void TestTypedPluginsL(RAuthClient& aClient, TAuthPluginType aPluginType);
+	void TestTrainedPluginsL();
+	void PrepareTrainedPluginsL();
+	void TestActivePluginsL(RAuthClient& aClient);
+	TBool TestAuthenticateL();
+	TBool TestMultiAuthL();
+	
+private:
+	RArray<TUid> iPluginIds;
+	};
+	
+class CTStepMgrClient : public CTStepActSch
+	{
+public:
+	CTStepMgrClient();
+	virtual TVerdict doTestStepL();
+	TBool TestRegister(AuthServer::RAuthMgrClient& client);
+	TBool TestMultiRegisterL(AuthServer::RAuthMgrClient& client);
+	
+	TBool TestMultiTrainL(AuthServer::RAuthMgrClient& client);
+	TBool TestTrain(AuthServer::RAuthMgrClient& client);
+	TBool TestCancellation(AuthServer::RAuthMgrClient& client);
+	};
+
+class CTStepFirstStart : public CTAuthcliservStepBase
+	{
+public:
+	CTStepFirstStart();
+	virtual TVerdict doTestStepL();
+	};
+
+
+inline HBufC* CTAuthcliservStepBase::GetNameLC(TInt id)
+    {
+    _LIT(nameTmpl, "Plugin_%d");
+	HBufC* name = HBufC::NewLC(15);
+	name->Des().Format(nameTmpl, id);
+	return name;
+    }
+    
+inline void CTAuthcliservStepBase::CreatePlugins()
+	{
+	using namespace AuthServer;
+	
+	const TAuthPluginType   types[KNumPlugins]
+		= { EAuthBiometric, EAuthToken, EAuthKnowledge,
+			EAuthBiometric, EAuthToken, EAuthKnowledge,
+			EAuthToken, EAuthKnowledge
+		};
+	const TAuthTrainingStatus   training[KNumPlugins]
+		= { EAuthUntrained, EAuthTrained, EAuthFullyTrained,
+			EAuthUntrained, EAuthTrained, EAuthFullyTrained,
+			EAuthTrained, EAuthFullyTrained
+		  };
+
+
+	for (TInt i = 0 ; i < KNumPlugins ; ++i)
+		{
+			HBufC* name = GetNameLC(i);
+			
+			iPlugins[i] = CPluginDesc::NewL(i,
+											*name,
+											types[i],
+											training[i],
+											i*10000,
+											i,
+											i*4);
+		    CleanupStack::PopAndDestroy(name);									
+		}
+	}
+inline void CTAuthcliservStepBase::CreateKeyInfo()
+	{
+	using namespace AuthServer;
+
+	CProtectionKey* protKey1 = CProtectionKey::NewLC(8);
+	CProtectionKey* protKey2 = CProtectionKey::NewLC(8);
+	CProtectionKey* protKey3 = CProtectionKey::NewLC(8);
+
+	HBufC8* data = HBufC8::NewLC(4);
+	
+	for (TInt plugin = 0 ; plugin < KNumPlugins ; ++plugin)
+		{
+			CTransientKey* transient = 0;
+			// id 1
+			iId1Keys[plugin] = CTransientKeyInfo::NewL(plugin);
+			PluginData(1, plugin, data->Des());
+			transient = iId1Keys[plugin]->CreateTransientKeyL(data->Des());
+			CEncryptedProtectionKey* epKey1 =
+				transient->EncryptL(*protKey1);
+			delete transient;
+			iId1Keys[plugin]->SetEncryptedProtectionKeyL(epKey1);
+			// id 2
+			PluginData(2, plugin, data->Des());
+			iId2Keys[plugin] = CTransientKeyInfo::NewL(plugin);
+			transient = iId2Keys[plugin]->CreateTransientKeyL(data->Des());
+			CEncryptedProtectionKey* epKey2 =
+				transient->EncryptL(*protKey2);
+			delete transient;
+			iId2Keys[plugin]->SetEncryptedProtectionKeyL(epKey2);
+			// id 3
+			PluginData(3, plugin, data->Des());
+			iId3Keys[plugin] = CTransientKeyInfo::NewL(plugin);
+			transient = iId3Keys[plugin]->CreateTransientKeyL(data->Des());
+			CEncryptedProtectionKey* epKey3 =
+				transient->EncryptL(*protKey3);
+			delete transient;
+			iId3Keys[plugin]->SetEncryptedProtectionKeyL(epKey3);
+		}
+	CleanupStack::Pop(4, protKey1);
+	}
+
+// -------- Authentication expression tests --------
+
+class CTStepAuthExprBuild : public CTAuthcliservStepBase
+/**
+	This test step ensures that complex authentication
+	expressions can be constructed, or fail cleanly in OOM.
+ */
+	{
+public:
+	CTStepAuthExprBuild();
+	
+	// implement CTestStep
+	virtual TVerdict doTestStepL();
+	
+private:
+	void RunTestsL();
+	void TestExprLD(
+		void (CTStepAuthExprBuild::*aTestFuncL)(AuthServer::CAuthExpression*),
+		AuthServer::CAuthExpression* aExpr);
+
+#ifdef AUTH_EXPR_BINARY_OPS
+	inline void OpTestExprLD(
+		void (CTStepAuthExprBuild::*aTestFuncL)(AuthServer::CAuthExpression*),
+		AuthServer::CAuthExpression* aExpr)
+		{
+		TestExprLD(aTestFuncL, aExpr);
+		}
+#else
+	// this isn't an empty inline because don't want compiler
+	// to build expression with binary operators.
+	#define OpTestExprLD(___f, ___expr)
+#endif
+
+	void TestSimpleExprL();
+	void TestPluginIdL(AuthServer::CAuthExpression* aExpr);
+	void TestPluginTypeL(AuthServer::CAuthExpression* aExpr);
+
+	void TestSimpleExprCombsConsL();
+	void TestTypeAndTypeL(AuthServer::CAuthExpression* aExpr);
+	void TestTypeOrTypeL(AuthServer::CAuthExpression* aExpr);
+	void TestIdAndTypeL(AuthServer::CAuthExpression* aExpr);
+	void TestTypeAndIdL(AuthServer::CAuthExpression* aExpr);
+	void TestIdAndIdL(AuthServer::CAuthExpression* aExpr);
+
+	void TestComplexExprCombsConsL();
+	void TestAndAndL(AuthServer::CAuthExpression* aExpr);
+	void TestAndOrL(AuthServer::CAuthExpression* aExpr);
+	void TestOrAndL(AuthServer::CAuthExpression* aExpr);
+	void TestOrOrL(AuthServer::CAuthExpression* aExpr);
+
+	void TestFailedCombsL();
+	void TestCorruptPersistL();
+	};
+
+class CTStepAuthExprTypePnc : public CTAuthcliservStepBase
+/**
+	This test step ensures the client is panicked when
+	they attempt to retrieve the type of a corrupt expression.
+ */
+	{
+public:
+	CTStepAuthExprTypePnc();
+	
+	// implement CTestStep
+	virtual TVerdict doTestStepL();
+	};
+
+class CTStepAuthExprTypePncBadLeft : public CTAuthcliservStepBase
+/**
+	This test step ensures the client is panicked when
+	they attempt to retrieve the type of a expression,
+	where the left subtree is corrupt.
+ */
+	{
+public:
+	CTStepAuthExprTypePncBadLeft();
+	
+	// implement CTestStep
+	virtual TVerdict doTestStepL();
+	};
+
+class CTStepAuthExprTypePncBadRight : public CTAuthcliservStepBase
+/**
+	This test step ensures the client is panicked when
+	they attempt to retrieve the type of a expression,
+	where the right subtree is corrupt.
+ */
+	{
+public:
+	CTStepAuthExprTypePncBadRight();
+	
+	// implement CTestStep
+	virtual TVerdict doTestStepL();
+	};
+
+class CTStepAuthExprHighVer : public CTAuthcliservStepBase
+/**
+	This step tests sending an unsupported authentication
+	expression to the server.
+	
+	The server should fail the request.
+ */
+	{
+public:
+	CTStepAuthExprHighVer();
+	
+	// implement CTestStep
+	virtual TVerdict doTestStepL();
+	};
+	
+class CTStepBadExtAuthExpr : public CTAuthcliservStepBase
+/**
+	This step tests trying to authenticate a server with
+	an invalid authentication expression.
+	
+	The client code should be panicked.
+ */
+	{
+public:
+	CTStepBadExtAuthExpr();
+	
+	// implement CTestStep
+	virtual TVerdict doTestStepL();
+	};
+	
+
+class TTestPluginInterface : public AuthServer::MEvaluatorPluginInterface
+/**
+	This implementation records which calls were made
+	to the interface, so the test code can test the
+	evaluator made the right calls in the right order.
+ */
+	{
+public:
+	virtual void Evaluate(TPluginId aPluginId, TIdentityId& aIdentity,
+			   CAuthExpressionImpl::TType aType, TRequestStatus& aStatus);
+	virtual void Evaluate(TAuthPluginType aPluginType, TIdentityId& aIdentity,
+			   CAuthExpressionImpl::TType aType, TRequestStatus& aStatus);
+	virtual void CancelEvaluate() {} ;
+public:
+	class TCallEntry
+		{
+	public:
+		inline TCallEntry(TPluginId aPluginId)
+		:	iCallType(CAuthExpressionImpl::EPluginId),
+			iPluginId(aPluginId)
+			{
+			// empty.
+			}
+		
+		inline TCallEntry(TAuthPluginType aPluginType)
+		:	iCallType(CAuthExpressionImpl::EPluginType),
+			iPluginType(aPluginType)
+			{
+			// empty.
+			}
+		
+		bool operator==(const TCallEntry& aRhs) const;
+		
+	public:
+		/** Type of call - ID or plugin type. */
+		CAuthExpressionImpl::TType iCallType;
+		
+		union
+			{
+			TPluginId iPluginId;
+			TAuthPluginType iPluginType;
+			};
+		};
+
+	/**
+		The sequence of Evaluate requests which have been received
+		by this object.  This is a non-standard case of a T class
+		owning resources.  These resources are freed by CLaunchEval
+		because it is not worth making this an R-class or C-class
+		for test code.
+	 */
+	RArray<TCallEntry> iCallLog;
+	};
+
+class TTestClientInterface : public AuthServer::MEvaluatorClientInterface
+/**
+	This implementation records whether the evaluation
+	succeeded or failed, so the test code can check the
+	result.
+ */
+	{
+public:
+	virtual void EvaluationSucceeded(TIdentityId aIdentityId);
+	virtual void EvaluationFailed(TInt aReason);
+	
+public:
+	enum TCompletionMode {ENone = 0x10, ESucceeded, EFailed};
+	TCompletionMode iMode;
+	/** This is valid iff iMode == ESucceeded. */
+	TIdentityId iIdentityId;
+	/** This is valid iff iMode == EFailed. */
+	TInt iReason;
+	};
+
+
+class CLaunchEval : public CActive
+/**
+	Active object which launches an evaluation.
+	
+	This object is defined so there is one pending
+	object when the active scheduler is started.
+ */
+	{
+public:
+	static CLaunchEval* NewL();
+	virtual ~CLaunchEval();
+	
+	void Evaluate(const CAuthExpression* aExpr);
+	
+private:
+	CLaunchEval();
+	void ConstructL();
+	void ResetInterfaces();
+
+	// implement CActive
+	virtual void RunL();
+	virtual void DoCancel();
+
+public:	
+	TTestClientInterface iClientInterface;
+	TTestPluginInterface iPluginInterface;
+	
+private:
+	/**
+		Expression to evaluate.  This is set for each
+		call to Evaluate.
+	 */
+	const CAuthExpression* iExpr;
+	
+	/** Evaluator, which is allocated at construction. */
+	CEvaluator* iEval;
+	};
+
+
+class CTStepAuthExprEval : public CTStepActSch
+/**
+	This step tests trying to authenticate a server with
+	an invalid authentication expression.
+	
+	The client code should be panicked.
+ */
+	{
+public:
+	CTStepAuthExprEval();
+	
+	// implement CTestStep
+	virtual TVerdict doTestStepL();
+	
+private:
+	void TestEvalCreateL();
+	void TestEvalSimpleL();
+	void TestEvalAndL();
+	void TestEvalOrL();
+	void TestEvalResultL(
+		CLaunchEval* aLaunchEval, TIdentityId aIdentityId,
+		const TTestPluginInterface::TCallEntry* aExpEntries, TInt aEntryCount);
+	
+	void TestRPNReallocL();
+	void RunOomTestsL(
+		TAuthExpressionWrapper (*aAllocator)(TInt),
+		TIdentityId aExpectedIdentity, TInt aInitDepth);
+	};
+	
+const TPluginId KTestPluginId0 = 'PID0';
+const TPluginId KTestPluginId1 = 'PID1';
+const TPluginId KTestPluginId2 = 'PID2';
+const TPluginId KTestPluginUnknown = 'UNKW';
+
+// These constants are defined to provide short
+// names for readability only.
+
+const CAuthExpressionImpl::TType KAnd = CAuthExpressionImpl::EAnd;
+const CAuthExpressionImpl::TType KOr = CAuthExpressionImpl::EOr;
+const CAuthExpressionImpl::TType KPluginId = CAuthExpressionImpl::EPluginId;
+const CAuthExpressionImpl::TType KPluginType = CAuthExpressionImpl::EPluginType;
+#endif	/* TAUTHCLISERVSTEP_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthdb/scripts/tauthdb.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,43 @@
+//
+// Copyright (c) 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: 
+//
+//
+// Copyright (c) 2009 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:
+//
+//! @file
+// authentication db classes tests
+
+LOAD_SUITE tauthdb
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHDB-0001
+//! @SYMTestCaseDesc	Authentication db classes test
+START_TESTCASE SEC-AUT-AUTHDB-0001
+RUN_TEST_STEP 15 tauthdb CreateTestDb
+RUN_TEST_STEP 15 tauthdb PERSIST2
+END_TESTCASE SEC-AUT-AUTHDB-0001
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthdb/step_createtestdb.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,113 @@
+/*
+* Copyright (c) 2005-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 <bautils.h>
+#include "tauthdbstep.h"
+
+using namespace AuthServer;
+
+
+CTStepCreateTestDb::CTStepCreateTestDb()
+	{
+	SetTestStepName(KTStepCreateTestDb);
+	}
+
+
+TVerdict CTStepCreateTestDb::doTestStepL()
+/**
+	Create a test database and copy the file to
+	authdb0.db to system drive.  This database is used by both
+	tauthdb and tauthsvr.
+ */
+	{
+	TInt r;
+	
+	// create the server's private directory.  This happens
+	// when the server starts up, but some of the tests use
+	// the server's classes directly.
+	TDriveUnit sysDrive (RFs::GetSystemDrive());
+	TDriveName sysDriveName (sysDrive.Name());
+
+	TBuf<128> dbName(KDbName);
+	dbName[0] = 'A' + sysDrive;	
+	
+	r = iFs.MkDirAll(dbName);			// db name not used
+	if (r != KErrAlreadyExists)
+		User::LeaveIfError(r);
+	
+	RemoveExistingDbL();
+	
+	CAuthDb2* db = CAuthDb2::NewLC(iFs);
+	
+	_LIT(kId1Name, "Identity1");
+	_LIT(kId2Name, "Identity2");
+	_LIT(kId3Name, "Identity3");
+	_LIT(kId22Name, "Identity22");
+	
+	db->AddIdentityL(1, kId1Name);
+	const CTransientKeyInfo* tki1 = iId1Keys[0];
+	db->SetTrainedPluginL(1, tki1->PluginId(), *tki1);
+	
+	db->AddIdentityL(2, kId2Name);
+	const CTransientKeyInfo* tki2 = iId2Keys[0];
+	db->SetTrainedPluginL(2, tki2->PluginId(), *tki2);
+	
+	db->AddIdentityL(3, kId3Name);
+	const CTransientKeyInfo* tki3 = iId3Keys[0];
+	db->SetTrainedPluginL(3, tki3->PluginId(), *tki3); 
+	
+	// create additional trained plugins
+	for (TInt i = 1 ; i < KNumPlugins ; ++i)
+		{
+		db->SetTrainedPluginL(1, iId1Keys[i]->PluginId(), *iId1Keys[i]);
+		db->SetTrainedPluginL(2, iId1Keys[i]->PluginId(), *iId2Keys[i]);
+		db->SetTrainedPluginL(3, iId1Keys[i]->PluginId(), *iId3Keys[i]);
+		}
+    
+    // Add 1 more id for use with test plugin
+    CProtectionKey* key = CProtectionKey::NewLC(8);
+    
+    CTransientKeyInfo* tki = CTransientKeyInfo::NewLC(0x10274104);
+    
+	_LIT8(KIdentifyData, "ABABABABABABABABABAB");
+    CTransientKey* tk = tki->CreateTransientKeyL(KIdentifyData);
+    CleanupStack::PushL(tk);
+    
+    CEncryptedProtectionKey* epKey = tk->EncryptL(*key);
+    CleanupStack::PushL(epKey);	// epKey takes ownership
+        
+    tki->SetEncryptedProtectionKeyL(epKey);
+    CleanupStack::Pop(epKey);	// eki takes ownership
+    
+	db->AddIdentityL(22, kId22Name);
+	db->SetTrainedPluginL(22, tki->PluginId(), *tki); 
+
+	CleanupStack::PopAndDestroy(3, key);
+	
+	CleanupStack::PopAndDestroy(db);
+	
+	_LIT(KDbTrgFileName ,"\\authdb0.db");
+	TBuf<128> dbTrgFileName (sysDriveName);
+	dbTrgFileName.Append(KDbTrgFileName);
+	
+	// copy the file to the system drive 
+	r = BaflUtils::CopyFile(iFs, dbName, dbTrgFileName);
+	TESTL(r == KErrNone);
+	
+	return EPass;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthdb/step_persist2.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,595 @@
+/*
+* Copyright (c) 2005-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 <s32mem.h>
+#include "tauthdbstep.h"
+#include <f32file.h>
+
+using namespace AuthServer;
+
+const TIdentityId KIdentity1Id = 'I1ID';
+const TIdentityId KIdentity2Id = 'I2ID';
+const TIdentityId KIdentity3Id = 'I3ID';
+_LIT(KIdentity1Desc, "identity-1-desc");
+_LIT(KIdentity1DescB, "identity-1-descB");
+_LIT(KIdentity2Desc, "identity-2-desc");
+_LIT(KIdentity3Desc, "identity-3-desc");
+
+const TPluginId KPlugin1Id = 'PID1';
+const TPluginId KPlugin2Id = 'PID2';
+const TPluginId KPlugin3Id = 'PID3';
+const TPluginId KPlugin4Id = 'PID4';
+const TPluginId KPluginAId = 'PIDA';
+const TPluginId KPluginBId = 'PIDB';
+
+
+CTStepPersist2::CTStepPersist2()
+	{
+	SetTestStepName(KTStepCreateTestDb);
+	}
+
+
+TVerdict CTStepPersist2::doTestStepL()
+	{
+	__UHEAP_MARK;
+	
+	RemoveExistingDbL();
+		
+	TestOpenCloseL();
+	TestIdentitiesL();
+	TestPrefsL();
+	TestTrainedPluginsL();
+	TestTrainingStatusL();
+	TestRepairL();
+	TestCompressL();
+	
+	__UHEAP_MARKEND;
+	return EPass;
+	}
+
+
+void CTStepPersist2::TestOpenCloseL()
+/**
+	Test simply opening and closing a database,
+	without using any other operations.
+ */
+	{
+	CAuthDb2* db = CAuthDb2::NewL(iFs);
+	delete db;
+	}
+
+
+void CTStepPersist2::TestIdentitiesL()
+	{
+	TInt r;
+	
+	__UHEAP_MARK;
+	RemoveExistingDbL();
+	CAuthDb2* db = CAuthDb2::NewLC(iFs);
+	
+	RArray<TIdentityId> ids;
+	
+	// get id list before any ids defined
+	ids.AppendL('SYMB');	// garbage; ensure removed
+	db->IdentitiesL(ids);
+	TESTL(ids.Count() == 0);
+	
+	// add an identity
+	db->AddIdentityL(KIdentity1Id, KIdentity1Desc);
+	db->IdentitiesL(ids);
+	TESTL(ids.Count() == 1);
+	TESTL(ids[0] == KIdentity1Id);
+	
+	// retrieve the identity's description
+	TestDescriptionL(db, KIdentity1Id, KIdentity1Desc);
+	
+	// change the identity's description
+	db->SetDescriptionL(KIdentity1Id, KIdentity1DescB);
+	TestDescriptionL(db, KIdentity1Id, KIdentity1DescB);
+
+	// change the identity's description to a string which is
+	// too long; ensure fails.
+	TBuf<KMaxDescLen + 1> dbuf;
+	dbuf.Fill('a', KMaxDescLen - 1);		// limit - 1
+	db->SetDescriptionL(KIdentity1Id, dbuf);
+	TestDescriptionL(db, KIdentity1Id, dbuf);
+	
+	dbuf.Fill('a', KMaxDescLen);			// limit
+	db->SetDescriptionL(KIdentity1Id, dbuf);
+	TestDescriptionL(db, KIdentity1Id, dbuf);
+	
+	db->SetDescriptionL(KIdentity1Id, KIdentity1DescB);
+	TestDescriptionL(db, KIdentity1Id, KIdentity1DescB);
+	dbuf.Fill('a', KMaxDescLen + 1);		// limit + 1
+	TRAP(r, db->SetDescriptionL(KIdentity1Id, dbuf));
+	TESTL(r == KErrAuthServDescTooLong);
+	TestDescriptionL(db, KIdentity1Id, KIdentity1DescB);	// keep old desc
+	
+	// add a second identity
+	db->AddIdentityL(KIdentity2Id, KIdentity2Desc);
+	db->IdentitiesL(ids);
+	TESTL(ids.Count() == 2);
+	TESTL(	(ids[0] == KIdentity1Id && ids[1] == KIdentity2Id)
+		||	(ids[0] == KIdentity2Id && ids[1] == KIdentity1Id) );
+	TestDescriptionL(db, KIdentity1Id, KIdentity1DescB);
+	TestDescriptionL(db, KIdentity2Id, KIdentity2Desc);
+	
+	// add an identity which already exists
+	TRAP(r, db->AddIdentityL(KIdentity2Id, KIdentity2Desc));
+	TESTL(r == KErrAuthServIdentityAlreadyExists);
+	
+	// retrieve description for an unregistered identity
+	TRAP(r, db->DescriptionL(KIdentity3Id));
+	TESTL(r == KErrAuthServIdentityNotFound);
+	
+	// set description for an unregistered identity
+	TRAP(r, db->SetDescriptionL(KIdentity3Id, KIdentity3Desc));
+	TESTL(r == KErrAuthServIdentityNotFound);
+	
+	// remove an unregistered identity
+	TRAP(r, db->RemoveIdentityL(KIdentity3Id));
+	TESTL(r == KErrAuthServIdentityNotFound);
+	
+	// remove an identity
+	db->RemoveIdentityL(KIdentity1Id);
+	db->IdentitiesL(ids);
+	TESTL(ids.Count() == 1);
+	TESTL(ids[0] == KIdentity2Id);
+	TestDescriptionL(db, KIdentity2Id, KIdentity2Desc);
+	
+	// remove the last identity
+	db->RemoveIdentityL(KIdentity2Id);
+	db->IdentitiesL(ids);
+	TESTL(ids.Count() == 0);
+	
+	// create an identity with a description to a string which is
+	// too long; ensure fails.
+	dbuf.Fill('a', KMaxDescLen - 1);		// limit - 1
+	db->AddIdentityL(KIdentity3Id, dbuf);
+	TestDescriptionL(db, KIdentity3Id, dbuf);
+	db->RemoveIdentityL(KIdentity3Id);
+	
+	dbuf.Fill('a', KMaxDescLen);			// limit
+	db->AddIdentityL(KIdentity3Id, dbuf);
+	TestDescriptionL(db, KIdentity3Id, dbuf);
+	db->RemoveIdentityL(KIdentity3Id);
+	
+	dbuf.Fill('a', KMaxDescLen + 1);		// limit + 1
+	TRAP(r, db->AddIdentityL(KIdentity3Id, dbuf));
+	TESTL(r == KErrAuthServDescTooLong);
+	db->IdentitiesL(ids);							// no identity created
+	TESTL(ids.Count() == 0);
+	
+	CleanupStack::PopAndDestroy(db);
+	__UHEAP_MARKEND;
+	}
+
+void CTStepPersist2::TestDescriptionL(
+	CAuthDb2* aDb, TIdentityId aIdentityId, const TDesC& aExpDesc)
+/**
+	Helper function for TestIdentitiesL.  Ensures the
+	supplied identity has the supplied description.
+	
+	@param	aDb				Database which contains the identity.
+	@param	aIdentity		Identity whose description should be
+							retrieved.
+	@param	aDesc			Expected description.
+ */
+	{
+	HBufC* desc = aDb->DescriptionL(aIdentityId);
+	CleanupStack::PushL(desc);
+	TESTL(*desc == aExpDesc);
+	CleanupStack::PopAndDestroy(desc);
+	}
+
+
+void CTStepPersist2::TestPrefsL()
+/**
+	Tests adding, modifying, and removing
+	preferences from the database.
+ */
+	{
+	TPluginId prefId;	
+	__UHEAP_MARK;
+	
+	RemoveExistingDbL();
+	CAuthDb2* db = CAuthDb2::NewLC(iFs);
+
+	// get a preferred plugin for a type with no preferred plugin
+	prefId = db->PreferredPluginL(EAuthBiometric);
+	TESTL(prefId == KUnknownPluginId);
+
+	// set a type's preferred plugin
+	db->SetPreferredPluginL(EAuthBiometric, KPlugin1Id);
+	prefId = db->PreferredPluginL(EAuthBiometric);
+	TESTL(prefId == KPlugin1Id);
+	
+	// change a type's preferred plugin
+	db->SetPreferredPluginL(EAuthBiometric, KPlugin2Id);
+	prefId = db->PreferredPluginL(EAuthBiometric);
+	TESTL(prefId == KPlugin2Id);
+	
+	// clear a type's preferred plugin
+	db->ClearPreferredPluginL(EAuthBiometric);
+	prefId = db->PreferredPluginL(EAuthBiometric);
+	TESTL(prefId == KUnknownPluginId);
+	
+	// set preferred plugin for more than one type
+	db->SetPreferredPluginL(EAuthBiometric, KPlugin3Id);
+	db->SetPreferredPluginL(EAuthKnowledge, KPlugin4Id);
+	prefId = db->PreferredPluginL(EAuthBiometric);
+	TESTL(prefId == KPlugin3Id);
+	prefId = db->PreferredPluginL(EAuthKnowledge);
+	TESTL(prefId == KPlugin4Id);
+	
+	CleanupStack::PopAndDestroy(db);
+	
+	__UHEAP_MARKEND;
+	}
+
+
+void CTStepPersist2::TestTrainedPluginsL()
+/**
+	Test adding and removing trained plugins.
+ */
+	{
+	__UHEAP_MARK;
+	
+	TInt r;
+	RemoveExistingDbL();
+	CAuthDb2* db = CAuthDb2::NewLC(iFs);
+
+	const CTransientKeyInfo& tkiA = *iId1Keys[0];
+	const CTransientKeyInfo& tkiB = *iId1Keys[1];
+	const CTransientKeyInfo& tkiC = *iId1Keys[2];
+
+	// set key info for an unregistered identity
+	TRAP(r, db->SetTrainedPluginL(KIdentity1Id, KPluginAId, tkiA));
+	TESTL(r == KErrAuthServIdentityNotFound);
+
+	// set key info for a registered identity
+	db->AddIdentityL(KIdentity1Id, KIdentity1Desc);
+	db->SetTrainedPluginL(KIdentity1Id, KPluginAId, tkiA);
+	
+	// get key info for a trained identity
+	TestKeyPresentL(db, KIdentity1Id, KPluginAId, tkiA);
+
+	// change key info for a trained identity
+	db->SetTrainedPluginL(KIdentity1Id, KPluginAId, tkiB);
+	TestKeyPresentL(db, KIdentity1Id, KPluginAId, tkiB);
+
+	// ---- bad KeyInfoL args ----
+	
+	// get key info for registered identity but untrained plugin
+	TRAP(r, db->KeyInfoL(KIdentity1Id, KPluginBId))
+	TESTL(r == KErrAuthServTrainingNotFound);
+
+	// get key info for unregistered identity but trained plugin	
+	TRAP(r, db->KeyInfoL(KIdentity3Id, KPluginAId))
+	TESTL(r == KErrAuthServTrainingNotFound);
+	
+	// get key info for unregistered identity and untrained plugin
+	TRAP(r, db->KeyInfoL(KIdentity3Id, KPluginBId));
+	TESTL(r == KErrAuthServTrainingNotFound);
+	
+	// ---- bad RemoveTrainedPluginL args ----
+	
+	// clear key info for registered identity but untrained plugin
+	TRAP(r, db->KeyInfoL(KIdentity1Id, KPluginBId))
+	TESTL(r == KErrAuthServTrainingNotFound);
+
+	// clear key info for unregistered identity but trained plugin	
+	TRAP(r, db->RemoveTrainedPluginL(KIdentity3Id, KPluginAId))
+	TESTL(r == KErrAuthServTrainingNotFound);
+	
+	// clear key info for unregistered identity and untrained plugin
+	TRAP(r, db->RemoveTrainedPluginL(KIdentity3Id, KPluginBId));
+	TESTL(r == KErrAuthServTrainingNotFound);
+	
+	// -----
+
+	// clear a present trained plugin
+	db->RemoveTrainedPluginL(KIdentity1Id, KPluginAId);
+	TRAP(r, db->KeyInfoL(KIdentity3Id, KPluginAId))
+	TESTL(r == KErrAuthServTrainingNotFound);
+	
+	// register multiple trained plugins for a single identity	
+	db->SetTrainedPluginL(KIdentity1Id, KPluginAId, tkiA);
+	db->SetTrainedPluginL(KIdentity1Id, KPluginBId, tkiB);
+	TestKeyPresentL(db, KIdentity1Id, KPluginAId, tkiA);
+	TestKeyPresentL(db, KIdentity1Id, KPluginAId, tkiB);
+
+	// train a single plugin for multiple identities
+	db->AddIdentityL(KIdentity2Id, KIdentity2Desc);
+	db->SetTrainedPluginL(KIdentity2Id, KPluginAId, tkiC);
+	TestKeyPresentL(db, KIdentity1Id, KPluginAId, tkiA);
+	TestKeyPresentL(db, KIdentity1Id, KPluginBId, tkiB);
+	TestKeyPresentL(db, KIdentity2Id, KPluginAId, tkiC);
+	
+	// ---- atomic identity and key addition ----
+	
+	// add identity with trained plugin
+	db->AddIdentityWithTrainedPluginL(KIdentity3Id, KIdentity3Desc, tkiA);
+	TestKeyPresentL(db, KIdentity3Id, tkiA.PluginId(), tkiA);
+	
+	// fail to add identity with trained plugin - id already exists
+	TRAP(r, db->AddIdentityWithTrainedPluginL(KIdentity3Id, KIdentity3Desc, tkiA));
+	TESTL(r == KErrAuthServIdentityAlreadyExists);
+	
+	CleanupStack::PopAndDestroy(db);
+	
+	__UHEAP_MARKEND;
+	}
+
+
+void CTStepPersist2::TestKeyPresentL(
+	CAuthDb2* aAuthDb, TIdentityId aIdentityId, TPluginId aPluginId,
+	const CTransientKeyInfo& aTarget)
+/**
+	Helper function for TestTrainedPluginsL.
+	
+	Test the described transient key exists in the database,
+	and that is is equal to the supplied key.  Leaves if not
+	the case.
+
+	@param	aAuthDb			Authorisation database to retrieve
+							transient key info from.
+	@param	aIdentityId		Identity which should be trained for
+							the supplied plugin.
+	@param	aPluginId		Plugin for which the supplied identity
+							should be trained.
+	@param	aTarget			The retrieved transient key info should
+							be equal to this.
+ */
+	{
+	CTransientKeyInfo* tkiActual = aAuthDb->KeyInfoL(aIdentityId, aPluginId);
+	CleanupStack::PushL(tkiActual);
+
+	// ensure key infos have same externalized size
+	TSizeStream ssTarget;
+	RWriteStream wsTarget(&ssTarget);
+	aTarget.ExternalizeL(wsTarget);
+	TInt targetSize = ssTarget.Size();
+
+	TSizeStream ssActual;
+	RWriteStream wsActual(&ssActual);
+	tkiActual->ExternalizeL(wsActual);
+	TESTL(targetSize == ssActual.Size());
+
+	HBufC8* targetBuf = HBufC8::NewLC(targetSize);
+	TPtr8 targetBufDes = targetBuf->Des();
+	RDesWriteStream dwsTarget(targetBufDes);
+	aTarget.ExternalizeL(dwsTarget);
+
+	HBufC8* actualBuf = HBufC8::NewLC(targetSize);
+	TPtr8 actualBufDes = actualBuf->Des();
+	RDesWriteStream dwsActual(actualBufDes);
+	tkiActual->ExternalizeL(dwsActual);
+
+	TESTL(targetBufDes == actualBufDes);
+
+	CleanupStack::PopAndDestroy(3, tkiActual);
+	}
+
+
+void CTStepPersist2::TestTrainingStatusL()
+/**
+	Test the plugins' training statuses accurately
+	reflect the identities which are registered
+	with them.
+ */
+	{
+	__UHEAP_MARK;
+
+	RemoveExistingDbL();
+	
+	CAuthDb2* db = CAuthDb2::NewLC(iFs);
+
+	// if there are no users then a plugin should be marked
+	// as untrained, even though its training count is equal
+	// to the number of registered identities.
+	TESTL(db->PluginStatusL(KPluginAId) == EAuthUntrained);
+
+	// untrained when no users trained
+	db->AddIdentityL(KIdentity1Id, KIdentity1Desc);
+	TESTL(db->PluginStatusL(KPluginAId) == EAuthUntrained);
+	db->AddIdentityL(KIdentity2Id, KIdentity2Desc);
+	TESTL(db->PluginStatusL(KPluginAId) == EAuthUntrained);
+
+	// trained when some, but not all, users trained
+	const CTransientKeyInfo& tkiA = *iId1Keys[0];
+	db->SetTrainedPluginL(KIdentity1Id, KPluginAId, tkiA);
+	TESTL(db->PluginStatusL(KPluginAId) == EAuthTrained);
+	
+	// fully trained when all users trained
+	db->SetTrainedPluginL(KIdentity2Id, KPluginAId, tkiA);
+	TESTL(db->PluginStatusL(KPluginAId) == EAuthFullyTrained);
+	
+	// back to trained when identity untrained
+	db->RemoveTrainedPluginL(KIdentity1Id, KPluginAId);
+	TESTL(db->PluginStatusL(KPluginAId) == EAuthTrained);
+	
+	// back to untrained when last training removed
+	db->RemoveTrainedPluginL(KIdentity2Id, KPluginAId);
+	TESTL(db->PluginStatusL(KPluginAId) == EAuthUntrained);
+	
+	// restored to trained when identity trained
+	db->SetTrainedPluginL(KIdentity1Id, KPluginAId, tkiA);
+	TESTL(db->PluginStatusL(KPluginAId) == EAuthTrained);
+
+	// restored to fully trained when last identity trained
+	db->SetTrainedPluginL(KIdentity2Id, KPluginAId, tkiA);
+	TESTL(db->PluginStatusL(KPluginAId) == EAuthFullyTrained);
+	
+	// back to trained when new identity added
+	db->AddIdentityL(KIdentity3Id, KIdentity3Desc);
+	TESTL(db->PluginStatusL(KPluginAId) == EAuthTrained);
+
+	// upgraded to fully trained when untrained identity removed
+	db->RemoveIdentityL(KIdentity3Id);
+	TESTL(db->PluginStatusL(KPluginAId) == EAuthFullyTrained);
+	
+	// kept at fully trained when trained identity removed
+	db->RemoveIdentityL(KIdentity2Id);
+	TESTL(db->PluginStatusL(KPluginAId) == EAuthFullyTrained);
+	
+	// drop to untrained when last identity removed
+	db->RemoveIdentityL(KIdentity1Id);
+	TESTL(db->PluginStatusL(KPluginAId) == EAuthUntrained);
+	
+	CleanupStack::PopAndDestroy(db);
+	
+	__UHEAP_MARKEND;
+	}
+
+
+static void IdToTestDesc(TIdentityId aId, TDes& aDesc)
+/**
+	Helper function for TestRepairL generates a description
+	from the supplied identity.
+	
+	@param	aId				Identity Id.
+	@param	aDesc			Out paramater is populated with
+							description text.
+ */
+	{
+	_LIT(KDescFmt, "desc_%08x");
+	aDesc.Format(KDescFmt, aId);
+	}
+
+
+void CTStepPersist2::TestRepairL()
+/**
+	Test CAuthDb repairs the database if possible.
+ */
+	{
+	RemoveExistingDbL();
+	
+	CAuthDb2* db = CAuthDb2::NewLC(iFs);
+	
+	// create a set of identities
+	const TInt KTestIdCount = 8;
+	for (TInt i = 1; i <= KTestIdCount; ++i)
+		{
+		TBuf<13> buf;
+		IdToTestDesc(i, buf);
+		db->AddIdentityL(i, buf);
+		}
+	CleanupStack::PopAndDestroy(db);
+	
+	// damage the database by inserting a new entry but then
+	// rolling it back.
+	RDbNamedDatabase ndb;
+	TFileName dbName(KDbName);
+	dbName[0] = RFs::GetSystemDriveChar();
+	
+	User::LeaveIfError(ndb.Open(iFs, dbName));
+	CleanupClosePushL(ndb);
+	
+	User::LeaveIfError(ndb.Begin());
+	
+	RDbTable table;
+	CleanupClosePushL(table);
+	User::LeaveIfError(table.Open(ndb, KIdentitiesTableName));
+	
+	table.InsertL();
+	table.SetColL(KIdentitiesIdentityIdCol, KTestIdCount+1);
+	table.SetColL(KIdentitiesDescCol, _L("descb"));
+	table.PutL();
+	table.Close();
+	ndb.Rollback();
+	TESTL(ndb.IsDamaged());
+	
+	CleanupStack::PopAndDestroy(2, &ndb);	// table ndb
+	
+	// ensure db contains the same identities when it
+	// is reopened.
+	db = CAuthDb2::NewLC(iFs);
+	
+	RArray<TIdentityId> ids;
+	db->IdentitiesL(ids);
+	TInt idCount = ids.Count();
+	ids.Reset();
+	TESTL(idCount == KTestIdCount);
+	
+	for (TInt index = 1; index <= KTestIdCount; ++index)
+		{
+		TBuf<13> bufExp;
+		IdToTestDesc(index, bufExp);
+		TBuf<KMaxDescLen> actDesc;
+		HBufC* descAct = db->DescriptionL(index);
+		CleanupStack::PushL(descAct);
+		TESTL(bufExp == *descAct);
+		CleanupStack::PopAndDestroy(descAct);
+		}
+	CleanupStack::PopAndDestroy(db);
+	}
+
+
+void CTStepPersist2::TestCompressL()
+/**
+	Creates and deletes identities to create unused
+	space in database file, and tests compressed.
+ */
+	{
+	RemoveExistingDbL();
+	CAuthDb2* db = CAuthDb2::NewLC(iFs);
+	
+	const TInt KIdentityCount = 32;
+	for (TInt i = 0; i < KIdentityCount; ++i)
+		{
+		_LIT(KCompDesc, "tc-test");
+		db->AddIdentityL(i, KCompDesc);
+		db->RemoveIdentityL(i);
+		}
+	CleanupStack::PopAndDestroy(db);
+	
+	TInt szPreComp = DbFileSizeL();
+	
+	db = CAuthDb2::NewLC(iFs);
+	db->CompactIfRequired();
+	CleanupStack::PopAndDestroy(db);
+	
+	TInt szPostComp = DbFileSizeL();
+	
+	TESTL(szPreComp > szPostComp);
+	}
+
+
+TInt CTStepPersist2::DbFileSizeL()
+/**
+	Helper function for TestCompressL returns
+	the size of the database file in bytes.
+ */
+	{
+	RFile f;
+	TFileName dbName(KDbName);
+	dbName[0] = RFs::GetSystemDriveChar();
+
+	User::LeaveIfError(f.Open(iFs, dbName, EFileRead | EFileStream));
+	CleanupClosePushL(f);
+	
+	TInt sz;
+	User::LeaveIfError(f.Size(sz));
+	CleanupStack::PopAndDestroy(&f);
+	
+	return sz;
+	}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthdb/tauthdb.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2005-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: 
+*
+*/
+
+
+OPTION GCCE -Wno-multichar
+
+TARGET			tauthdb.exe
+TARGETTYPE		exe
+UID				0x1000007A 0x10204F0D
+VENDORID		0x70000001
+
+CAPABILITY		AllFiles
+
+SOURCEPATH		.
+SOURCE			tauthdbserver.cpp
+SOURCE			step_persist2.cpp
+SOURCE			step_createtestdb.cpp
+SOURCE          ../../source/server/authdb.cpp
+SOURCE          ../../source/server/encryptedprotectionkey.cpp
+SOURCE          ../../source/server/transientkey.cpp
+SOURCE          ../../source/server/transientkeyinfo.cpp
+
+USERINCLUDE		.
+USERINCLUDE		../../source/common
+USERINCLUDE		../../source/server
+USERINCLUDE		../../source/client
+USERINCLUDE		../../inc_private
+USERINCLUDE             ../../inc/authserver
+
+SYSTEMINCLUDE	/epoc32/include
+SYSTEMINCLUDE	/epoc32/include/test
+
+LIBRARY			bafl.lib edbms.lib estor.lib efsrv.lib euser.lib
+LIBRARY         testexecuteutils.lib testexecutelogclient.lib
+LIBRARY         random.lib pbe.lib cryptography.lib
+LIBRARY         authclient.lib authcommon.lib
+LIBRARY			sectcbutil.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthdb/tauthdbserver.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,96 @@
+/*
+* Copyright (c) 2005-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: 
+* server implementation
+*
+*/
+
+
+/**
+ @file 
+*/
+
+#include "tauthdbserver.h"
+#include "tauthdbstep.h"
+
+_LIT(KServerName,"tauthdb");
+
+/**
+ * Called inside the MainL() function to create and start the CTestServer 
+ * derived server.
+ * @return Instance of the test server
+ */
+CTAuthDbServer* CTAuthDbServer::NewL()
+	{
+	CTAuthDbServer * server = new (ELeave) CTAuthDbServer();
+	CleanupStack::PushL(server);
+	
+	// Either use a StartL or ConstructL, the latter will permit Server Logging.
+
+	server->ConstructL(KServerName);
+	CleanupStack::Pop(server);
+	return server;
+	}
+
+LOCAL_C void MainL()
+	{
+	// Leave the hooks in for platform security
+#if (defined __DATA_CAGING__)
+	RProcess().DataCaging(RProcess::EDataCagingOn);
+	RProcess().SecureApi(RProcess::ESecureApiOn);
+#endif
+	CActiveScheduler* sched=NULL;
+	sched=new(ELeave) CActiveScheduler;
+	CleanupStack::PushL(sched);
+	CActiveScheduler::Install(sched);
+	CTAuthDbServer* server = NULL;
+	// Create the CTestServer derived server
+	TRAPD(err,server = CTAuthDbServer::NewL());
+	if(!err)
+		{
+		RProcess::Rendezvous(KErrNone);
+		sched->Start();
+		}
+	CleanupStack::Pop(sched);
+	delete server;
+	delete sched;
+	}
+
+GLDEF_C TInt E32Main()
+	{
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	if(cleanup == NULL)
+		{
+		return KErrNoMemory;
+		}
+	TRAP_IGNORE(MainL());	
+	delete cleanup;
+	return KErrNone;
+    }
+
+CTestStep* CTAuthDbServer::CreateTestStep(const TDesC& aStepName)
+	{
+	CTestStep* testStep = NULL;
+
+	if(aStepName == KTStepPersist2)
+		{
+		testStep = new CTStepPersist2();
+		}
+	else if (aStepName == KTStepCreateTestDb)
+		{
+		testStep = new CTStepCreateTestDb;
+		}
+	
+	return testStep;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthdb/tauthdbserver.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2005-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: 
+* TAuthDbServer is the server for all authentication keys tests
+*
+*/
+
+
+#ifndef TAUTHDBSERVER_H
+#define TAUTHDBSERVER_H
+#include <test/testexecuteserverbase.h>
+
+class CTAuthDbServer : public CTestServer
+	{
+public:
+	static CTAuthDbServer*	NewL();
+	virtual CTestStep*      CreateTestStep(const TDesC& aStepName);
+	RFs& Fs()	{return iFs;};
+
+private:
+	RFs	iFs;
+	};
+
+#endif	/* TAUTHDBSERVER_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthdb/tauthdbstep.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,233 @@
+/*
+* Copyright (c) 2005-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: 
+*
+*/
+
+
+#ifndef TAUTHDBSTEP_H
+#define TAUTHDBSTEP_H
+
+#include <test/testexecutestepbase.h>
+#include <test/testexecutelog.h>
+#include "tauthdbserver.h"
+#include <f32file.h>
+
+#include "authdb.h"
+#include "encryptedprotectionkey.h"
+#include "transientkey.h"  
+#include "transientkey.h"  
+#include "transientkeyinfo.h"
+
+_LIT(KTStepCreateTestDb, "CreateTestDb");
+_LIT(KTStepPersist2, "PERSIST2");
+
+#define KNumPlugins 10
+
+
+class CTAuthDbStepBase : public CTestStep
+	{
+protected:
+	CTAuthDbStepBase() {}
+	virtual ~CTAuthDbStepBase();
+	
+	void CreatePlugins();
+	void CreateKeyInfo();
+		
+	virtual TVerdict doTestStepPreambleL()
+	   {
+	   iFs.Connect();
+	
+	   CreatePlugins();
+	   CreateKeyInfo();
+	   
+	   return TestStepResult();
+	   }
+	virtual TVerdict doTestStepPostambleL()
+    	{
+		iFs.Close();
+		return TestStepResult();
+		}
+	
+	void RemoveExistingDbL()
+	/**
+		Remove any existing database file.
+	 */
+		{
+		CFileMan* fm = CFileMan::NewL(iFs);
+		CleanupStack::PushL(fm);
+
+		TFileName dbName(AuthServer::KDbName);
+		dbName[0] = RFs::GetSystemDriveChar();
+
+		TInt r = fm->Delete(dbName);
+		if (r != KErrNotFound)
+			User::LeaveIfError(r);
+
+		CleanupStack::PopAndDestroy(fm);	
+		}
+
+	HBufC* GetNameLC(TInt i);
+
+	void PluginData(AuthServer::TIdentityId aId,
+					AuthServer::TPluginId aPlugin,
+					TPtr8 aDes) 
+	{
+	aDes.Fill(aId*aPlugin);
+	}
+protected:
+	RFs		iFs;
+
+
+	AuthServer::CPluginDesc*       iPlugins[KNumPlugins];
+	AuthServer::CTransientKeyInfo* iId1Keys[KNumPlugins];
+	AuthServer::CTransientKeyInfo* iId2Keys[KNumPlugins];
+	AuthServer::CTransientKeyInfo* iId3Keys[KNumPlugins];
+  };
+
+inline CTAuthDbStepBase::~CTAuthDbStepBase() 
+    {
+    for (TInt i = 0 ; i < KNumPlugins ; ++i)
+        {
+        delete iPlugins[i];
+        delete iId1Keys[i];
+        delete iId2Keys[i];
+        delete iId3Keys[i];
+        }
+    }
+
+
+class CTStepCreateTestDb : public CTAuthDbStepBase
+/**
+	Creates a test database which tauthcliserv can
+	use to test the manager later.
+ */
+	{
+public:
+	CTStepCreateTestDb();
+	
+	// implement CTestStep
+	virtual TVerdict doTestStepL();
+	};
+
+
+class CTStepPersist2 : public CTAuthDbStepBase
+	{
+public:
+	CTStepPersist2();
+	
+private:
+	virtual TVerdict doTestStepL();
+	
+	void TestOpenCloseL();
+	
+	void TestIdentitiesL();
+	void TestDescriptionL(AuthServer::CAuthDb2* aDb, AuthServer::TIdentityId aIdentityId, const TDesC& aExpDesc);
+	
+	void TestPrefsL();
+	
+	void TestTrainedPluginsL();
+	void TestKeyPresentL(
+		AuthServer::CAuthDb2* aAuthDb, AuthServer::TIdentityId aIdentityId, AuthServer::TPluginId aPluginId,
+		const AuthServer::CTransientKeyInfo& aTarget);
+	
+	void TestTrainingStatusL();
+	
+	void TestRepairL();
+
+	void TestCompressL();
+	TInt DbFileSizeL();
+	};
+
+
+inline HBufC* CTAuthDbStepBase::GetNameLC(TInt id)
+    {
+    _LIT(nameTmpl, "Plugin_%d");
+	HBufC* name = HBufC::NewLC(15);
+	name->Des().Format(nameTmpl, id);
+	return name;
+    }
+    
+inline void CTAuthDbStepBase::CreatePlugins()
+	{
+	using namespace AuthServer;
+	
+	const TAuthPluginType   types[KNumPlugins]
+		= { EAuthBiometric, EAuthToken, EAuthKnowledge,
+			EAuthBiometric, EAuthToken, EAuthKnowledge,
+			EAuthToken, EAuthKnowledge
+		};
+	const TAuthTrainingStatus   training[KNumPlugins]
+		= { EAuthUntrained, EAuthTrained, EAuthFullyTrained,
+			EAuthUntrained, EAuthTrained, EAuthFullyTrained,
+			EAuthTrained, EAuthFullyTrained
+		  };
+
+
+	for (TInt i = 0 ; i < KNumPlugins ; ++i)
+		{
+			HBufC* name = GetNameLC(i);
+			
+			iPlugins[i] = CPluginDesc::NewL(i,
+											*name,
+											types[i],
+											training[i],
+											i*10000,
+											i,
+											i*4);
+		    CleanupStack::PopAndDestroy(name);									
+		}
+	}
+inline void CTAuthDbStepBase::CreateKeyInfo()
+	{
+	using namespace AuthServer;
+
+	CProtectionKey* protKey1 = CProtectionKey::NewLC(8);
+	CProtectionKey* protKey2 = CProtectionKey::NewLC(8);
+	CProtectionKey* protKey3 = CProtectionKey::NewLC(8);
+
+	HBufC8* data = HBufC8::NewLC(4);
+	
+	for (TInt plugin = 0 ; plugin < KNumPlugins ; ++plugin)
+		{
+			CTransientKey* transient = 0;
+			// id 1
+			iId1Keys[plugin] = CTransientKeyInfo::NewL(plugin);
+			PluginData(1, plugin, data->Des());
+			transient = iId1Keys[plugin]->CreateTransientKeyL(data->Des());
+			CEncryptedProtectionKey* epKey1 =
+				transient->EncryptL(*protKey1);
+			delete transient;
+			iId1Keys[plugin]->SetEncryptedProtectionKeyL(epKey1);
+			// id 2
+			PluginData(2, plugin, data->Des());
+			iId2Keys[plugin] = CTransientKeyInfo::NewL(plugin);
+			transient = iId2Keys[plugin]->CreateTransientKeyL(data->Des());
+			CEncryptedProtectionKey* epKey2 =
+				transient->EncryptL(*protKey2);
+			delete transient;
+			iId2Keys[plugin]->SetEncryptedProtectionKeyL(epKey2);
+			// id 3
+			PluginData(3, plugin, data->Des());
+			iId3Keys[plugin] = CTransientKeyInfo::NewL(plugin);
+			transient = iId3Keys[plugin]->CreateTransientKeyL(data->Des());
+			CEncryptedProtectionKey* epKey3 =
+				transient->EncryptL(*protKey3);
+			delete transient;
+			iId3Keys[plugin]->SetEncryptedProtectionKeyL(epKey3);
+		}
+	CleanupStack::Pop(4, protKey1);
+	}
+
+#endif	/* TAUTHDBSTEP_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthkeys/scripts/tauthkeys.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,43 @@
+//
+// Copyright (c) 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: 
+//
+//
+// Copyright (c) 2009 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:
+//
+//! @file
+// authentication key classes tests
+
+LOAD_SUITE tauthkeys
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHKEYS-0001
+//! @SYMTestCaseDesc	Authentication key classes test
+START_TESTCASE SEC-AUT-AUTHKEYS-0001
+RUN_TEST_STEP 100 tauthkeys PERSIST 
+RUN_TEST_STEP 100 tauthkeys ENCRYPT_KEY
+END_TESTCASE SEC-AUT-AUTHKEYS-0001
+ 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthkeys/step_encryptkey.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,134 @@
+/*
+* Copyright (c) 2005-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 <s32file.h>
+#include "tauthkeysstep.h"
+
+using namespace AuthServer;
+
+CTStepEncryptKey::CTStepEncryptKey()
+	{
+	SetTestStepName(KTStepEncryptKey);
+	}
+
+TVerdict CTStepEncryptKey::doTestStepL()
+	{
+	if (TestStepResult() != EPass)
+		{
+		return TestStepResult();
+		}
+__UHEAP_MARK;		// Check for memory leaks
+
+    TBool res = ETrue; 
+    TBool tmp = ETrue; 
+	TInt  err = KErrNone;
+ 
+
+	_LIT8(KPluginData, "ABCDEFGHIJ");
+	_LIT8(KBadPluginData, "KLMNOPQRST");
+	_LIT(KPluginName, "PasswordPlugin");
+
+    HBufC* pluginName = HBufC::NewLC(14);
+	
+	*pluginName = KPluginName;
+
+	CTransientKeyInfo* transInfo =
+	  CTransientKeyInfo::NewLC(9999);
+	  
+	CTransientKey* transient =
+		transInfo->CreateTransientKeyL(KPluginData);
+	CleanupStack::PushL(transient);
+
+	CProtectionKey* protection =
+		CProtectionKey::NewL(8);
+	CleanupStack::PushL(protection);
+		
+	CEncryptedProtectionKey* encrypted =
+		transient->EncryptL(*protection);
+	
+	transInfo->SetEncryptedProtectionKeyL(encrypted);
+	
+	// try to set another key 
+	TRAP(err, transInfo->SetEncryptedProtectionKeyL(encrypted));
+	TEST(tmp = (err == KErrAlreadyExists));
+	res = tmp && res;
+	
+	// check the encrypted key is different from the protection key
+	TEST(tmp = (encrypted->KeyData() != protection->KeyData()));
+	res = tmp && res;
+	
+	CProtectionKey* decrypted =
+		transient->DecryptL(*encrypted);
+	CleanupStack::PushL(decrypted);
+
+	// check that the decrypted key is the same as the protection key
+	TEST(tmp = (protection->KeyData() == decrypted->KeyData()));
+	res = tmp && res;
+	
+	// check we can't use the wrong plugin data
+	CTransientKey* transient2 = 0;
+	TRAP(err, transient2 = transInfo->CreateTransientKeyL(KBadPluginData)); 
+	TEST(tmp = (err != KErrNone));
+	res = tmp && res;
+
+	// avoid set but unused warning...
+	if (transient2 == 0) transient2 = 0;
+	
+	CProtectionKey* client = protection->ClientKeyL(0xabababab);
+	CleanupStack::PushL(client);
+
+	CProtectionKey* client2 = protection->ClientKeyL(0xcdcdcdcd);
+	CleanupStack::PushL(client2);
+
+	// check protection key is different from the client key 
+	TEST(tmp = (protection->KeyData() != client->KeyData()));
+	res = tmp && res;
+	TEST(tmp = (protection->KeyData().Length() == client->KeyData().Length()));
+	res = tmp && res;
+
+	// check two client keys are different 
+	TEST(tmp = (client->KeyData() != client2->KeyData()));
+	res = tmp && res;
+	TEST(tmp = (client->KeyData().Length() == client2->KeyData().Length()));
+	res = tmp && res;
+
+	// check key lengths larger than SHA1 output is handled correctly 
+	CProtectionKey* protection2 =
+		CProtectionKey::NewL(512);
+	CleanupStack::PushL(protection2);
+
+	CProtectionKey* client3 = protection2->ClientKeyL(0xcdcdcdcd);
+	CleanupStack::PushL(client3);
+	
+	// check protection key is different from the client key 
+	TEST(tmp = (protection2->KeyData() != client3->KeyData()));
+	res = tmp && res;
+	TEST(tmp = (protection2->KeyData().Length() ==
+				client3->KeyData().Length()));
+	res = tmp && res;
+
+	// cleanup
+	CleanupStack::PopAndDestroy(8, transInfo);
+	CleanupStack::PopAndDestroy(pluginName);
+
+	SetTestStepResult(res ? EPass : EFail);
+	
+__UHEAP_MARKEND;	
+	return TestStepResult();
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthkeys/step_persist.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,146 @@
+/*
+* Copyright (c) 2005-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 <s32file.h>
+#include "tauthkeysstep.h"
+#include <f32file.h>
+
+using namespace AuthServer;
+
+CTStepPersist::CTStepPersist()
+	{
+	SetTestStepName(KTStepPersist);
+	}
+
+TVerdict CTStepPersist::doTestStepL()
+	{
+	if (TestStepResult() != EPass)
+		{
+		return TestStepResult();
+		}
+__UHEAP_MARK;		// Check for memory leaks
+    
+    TBool res = ETrue;
+	TBool tmp = ETrue;
+
+	iFs.CreatePrivatePath(RFs::GetSystemDrive());
+    TBuf<50> path;
+    iFs.PrivatePath(path);
+    
+    _LIT(kProtFile, "prot.xxx");
+    _LIT(kTransFile, "trans.xxx");
+	_LIT8(KPluginData, "ABCDEFGHIJ");
+	_LIT(KPluginName, "PasswordPlugin");
+
+    HBufC* pluginName = HBufC::NewLC(14);
+	*pluginName = KPluginName;
+
+	// create elements
+	CTransientKeyInfo* transInfo =
+	  CTransientKeyInfo::NewLC(9999);
+	  
+    CTransientKey* transient =
+		transInfo->CreateTransientKeyL(KPluginData);
+	CleanupStack::PushL(transient);
+	
+	CProtectionKey* protection =
+		CProtectionKey::NewLC(8);
+	
+    CEncryptedProtectionKey* encrypted =
+		transient->EncryptL(*protection);
+	CleanupStack::PushL(encrypted);
+
+	transInfo->SetEncryptedProtectionKeyL(encrypted);
+	CleanupStack::Pop(encrypted);
+	
+	// write the encrypted key
+	RFileWriteStream writeProt;
+	
+    path.Insert(path.Length(), kProtFile);
+	User::LeaveIfError(writeProt.Replace(iFs, path,
+										 EFileShareExclusive | EFileStream));
+    CleanupClosePushL(writeProt);
+	
+	encrypted->ExternalizeL(writeProt);
+		
+	CleanupStack::PopAndDestroy(&writeProt);
+	
+	// read the encrypted key	
+	RFileReadStream readStream;
+
+	User::LeaveIfError(readStream.Open(iFs, path,
+									   EFileShareExclusive | EFileStream));
+	CleanupClosePushL(readStream);
+	
+	CEncryptedProtectionKey* encrypted2 =
+		CEncryptedProtectionKey::NewL(readStream);
+	CleanupStack::PushL(encrypted2);
+ 
+	// test the restored key matches the saved
+	TEST(tmp = (encrypted->KeyData() == encrypted2->KeyData()));
+	res = tmp && res;
+
+	// write the transient key info
+	RFileWriteStream writeTrans;
+
+	iFs.PrivatePath(path);
+    path.Insert(path.Length(), kTransFile);
+	User::LeaveIfError(writeTrans.Replace(iFs, path,
+										 EFileShareExclusive | EFileStream));
+    CleanupClosePushL(writeTrans);
+	
+	transInfo->ExternalizeL(writeTrans);
+		
+	CleanupStack::PopAndDestroy(&writeTrans);
+
+	// read the transient key info 
+	RFileReadStream readStream2;
+
+	User::LeaveIfError(readStream2.Open(iFs, path,
+									   EFileShareExclusive | EFileStream));
+	CleanupClosePushL(readStream2);
+	
+	CTransientKeyInfo* transInfo2 =
+		CTransientKeyInfo::NewL(readStream2);
+	CleanupStack::PushL(transInfo2);
+
+	// recreate the transient key
+	CTransientKey* transient2 = 
+		transInfo2->CreateTransientKeyL(KPluginData);
+	CleanupStack::PushL(transient2);
+
+	// recreate the protection key.
+	CProtectionKey* decrypted =
+		transient2->DecryptL(transInfo2->EncryptedKey());
+	CleanupStack::PushL(decrypted);
+    
+    // test that the protection key and decrypted key are the same
+	TEST(tmp = (protection->KeyData() == decrypted->KeyData()));
+	res = tmp && res;
+		
+	SetTestStepResult(res ? EPass : EFail);
+
+	CleanupStack::PopAndDestroy(9, transInfo);
+    CleanupStack::PopAndDestroy(pluginName);
+
+    iFs.Delete(path);
+	
+__UHEAP_MARKEND;	
+	return TestStepResult();
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthkeys/tauthkeys.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2004-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: 
+*
+*/
+
+
+TARGET			tauthkeys.exe
+TARGETTYPE		exe
+UID				0x1000007A 0x10204F0D
+VENDORID		0x70000001
+
+SOURCEPATH		.
+SOURCE			tauthkeysserver.cpp
+SOURCE			step_persist.cpp
+SOURCE			step_encryptkey.cpp
+SOURCE          ../../source/server/encryptedprotectionkey.cpp
+SOURCE          ../../source/server/transientkey.cpp
+SOURCE          ../../source/server/transientkeyinfo.cpp
+
+USERINCLUDE		.
+USERINCLUDE		../../source/common
+USERINCLUDE		../../source/server
+USERINCLUDE		../../source/client
+USERINCLUDE		../../inc_private
+USERINCLUDE ../../inc/authserver
+
+SYSTEMINCLUDE	/epoc32/include
+SYSTEMINCLUDE	/epoc32/include/test
+
+LIBRARY			euser.lib
+LIBRARY			efsrv.lib
+LIBRARY			estor.lib
+LIBRARY         testexecuteutils.lib
+LIBRARY         testexecutelogclient.lib
+LIBRARY         random.lib
+LIBRARY         pbe.lib
+LIBRARY         cryptography.lib
+LIBRARY         authclient.lib
+LIBRARY         authcommon.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthkeys/tauthkeysserver.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,95 @@
+/*
+* Copyright (c) 2005-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: 
+* server implementation
+*
+*/
+
+
+/**
+ @file 
+*/
+
+#include "tauthkeysserver.h"
+#include "tauthkeysstep.h"
+
+_LIT(KServerName,"tauthkeys");
+
+/**
+ * Called inside the MainL() function to create and start the CTestServer 
+ * derived server.
+ * @return Instance of the test server
+ */
+CTAuthKeysServer* CTAuthKeysServer::NewL()
+	{
+	CTAuthKeysServer * server = new (ELeave) CTAuthKeysServer();
+	CleanupStack::PushL(server);
+	
+	// Either use a StartL or ConstructL, the latter will permit Server Logging.
+
+	server->ConstructL(KServerName);
+	CleanupStack::Pop(server);
+	return server;
+	}
+
+LOCAL_C void MainL()
+	{
+	// Leave the hooks in for platform security
+#if (defined __DATA_CAGING__)
+	RProcess().DataCaging(RProcess::EDataCagingOn);
+	RProcess().SecureApi(RProcess::ESecureApiOn);
+#endif
+	CActiveScheduler* sched=NULL;
+	sched=new(ELeave) CActiveScheduler;
+	CleanupStack::PushL(sched);
+	CActiveScheduler::Install(sched);
+	CTAuthKeysServer* server = NULL;
+	// Create the CTestServer derived server
+	TRAPD(err,server = CTAuthKeysServer::NewL());
+	if(!err)
+		{
+		RProcess::Rendezvous(KErrNone);
+		sched->Start();
+		}
+	CleanupStack::Pop(sched);
+	delete server;
+	delete sched;
+	}
+
+GLDEF_C TInt E32Main()
+	{
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	if(cleanup == NULL)
+		{
+		return KErrNoMemory;
+		}
+	TRAP_IGNORE(MainL());	
+	delete cleanup;
+	return KErrNone;
+    }
+
+CTestStep* CTAuthKeysServer::CreateTestStep(const TDesC& aStepName)
+	{
+	CTestStep* testStep = NULL;
+
+	if(aStepName == KTStepPersist)
+		{
+		testStep = new CTStepPersist();
+		}
+	else if(aStepName == KTStepEncryptKey)
+		{
+		testStep = new CTStepEncryptKey();
+		}
+	return testStep;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthkeys/tauthkeysserver.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2005-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: 
+* TAuthKeysServer is the server for all authentication keys tests
+*
+*/
+
+
+#ifndef TAUTHKEYSSERVER_H
+#define TAUTHKEYSSERVER_H
+#include <test/testexecuteserverbase.h>
+
+
+class CTAuthKeysServer : public CTestServer
+	{
+public:
+	static CTAuthKeysServer*	NewL();
+	virtual CTestStep*			CreateTestStep(const TDesC& aStepName);
+	RFs& Fs()	{return iFs;};
+
+private:
+	RFs								iFs;
+	};
+
+#endif	/* TAUTHKEYSSERVER_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthkeys/tauthkeysstep.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2005-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: 
+*
+*/
+
+
+#ifndef TAUTHKEYSSTEP_H
+#define TAUTHKEYSSTEP_H
+
+#include <test/testexecutestepbase.h>
+#include <test/testexecutelog.h>
+#include "tauthkeysserver.h"
+
+#include "encryptedprotectionkey.h"
+#include "transientkey.h"  
+#include "transientkey.h"  
+#include "transientkeyinfo.h"
+
+_LIT(KTStepPersist,	"PERSIST");
+_LIT(KTStepEncryptKey,	"ENCRYPT_KEY");
+
+class CTAuthKeysStepBase : public CTestStep
+	{
+protected:
+	CTAuthKeysStepBase() {}
+	~CTAuthKeysStepBase() {}
+	virtual TVerdict doTestStepPreambleL()
+	{
+	iFs.Connect();
+ 	return TestStepResult();
+	}
+	virtual TVerdict doTestStepPostambleL()
+	{
+	iFs.Close();
+	return TestStepResult();
+	}
+	
+protected:
+	RFs		iFs;
+	};
+
+class CTStepPersist : public CTAuthKeysStepBase
+	{
+public:
+	CTStepPersist();
+	virtual TVerdict doTestStepL();
+	};
+
+
+class CTStepEncryptKey : public CTAuthKeysStepBase
+	{
+public:
+	CTStepEncryptKey();
+	virtual TVerdict doTestStepL();
+	};
+
+#endif	/* TAUTHKEYSSTEP_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthplugins/10204f0e.rss	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2005-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: 
+* 10274104.rss
+* UIDs quick-ref
+* ECOM DLL UID:			0x10204F0E 
+* ECOM interface UID:		0x12345678
+* ECOM Implementation:		0x102741040, 0x10274105
+*
+*/
+
+
+#include <ecom/registryinfov2.rh>
+
+RESOURCE REGISTRY_INFO r_registry
+{
+	dll_uid = 0x10204F0E;
+	resource_format_version = RESOURCE_FORMAT_VERSION_2;
+	interfaces =
+	{
+		INTERFACE_INFO
+		{ 
+		interface_uid = 0x102740FE;	// Const for all data recognisers
+		implementations = 
+			{
+			IMPLEMENTATION_INFO
+				{
+				implementation_uid = 0x10274104;
+				version_no = 1;
+				display_name = "testplugin1";
+				default_data = "10274104";
+				opaque_data = "";
+				rom_only=0;
+				},
+			IMPLEMENTATION_INFO
+				{
+				implementation_uid = 0x10274105;
+				version_no = 1;
+				display_name = "BlockingPlugin";
+				default_data = "10274105";
+				opaque_data = "";
+				rom_only=1;
+				},
+			IMPLEMENTATION_INFO
+				{
+				implementation_uid = 0x10274106;
+				version_no = 1;
+				display_name = "InactivePlugin";
+				default_data = "10274106";
+				opaque_data = "";
+				rom_only=1;
+				},
+			IMPLEMENTATION_INFO
+				{
+				implementation_uid = 0x10274107;
+				version_no = 1;
+				display_name = "UnknownIdPlugin";
+				default_data = "10274107";
+				opaque_data = "";
+				rom_only=1;
+				}
+			};
+		}
+	};
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthplugins/10204f0e_upgrade.rss	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2008-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: 
+* 1027410e_upgrade.rss
+* UIDs quick-ref
+* ECOM DLL UID:			0x10204F0E 
+* ECOM interface UID:		0x12345678
+* ECOM Implementation:		0x10274104, 0x10274105
+*
+*/
+
+
+#include <ecom/registryinfov2.rh>
+
+RESOURCE REGISTRY_INFO r_registry
+{
+	dll_uid = 0x10204F0E;
+	resource_format_version = RESOURCE_FORMAT_VERSION_2;
+	interfaces =
+	{
+		INTERFACE_INFO
+		{ 
+		interface_uid = 0x102740FE;	// Const for all data recognisers
+		implementations = 
+			{
+			IMPLEMENTATION_INFO
+				{
+				implementation_uid = 0x10274104;
+				version_no = 2;
+				display_name = "testplugin1";
+				default_data = "10274104";
+				opaque_data = "";
+				rom_only=0;
+				},
+			IMPLEMENTATION_INFO
+				{
+				implementation_uid = 0x10274105;
+				version_no = 1;
+				display_name = "BlockingPlugin";
+				default_data = "10274105";
+				opaque_data = "";
+				rom_only=1;
+				},
+			IMPLEMENTATION_INFO
+				{
+				implementation_uid = 0x10274106;
+				version_no = 1;
+				display_name = "InactivePlugin";
+				default_data = "10274106";
+				opaque_data = "";
+				rom_only=1;
+				},
+			IMPLEMENTATION_INFO
+				{
+				implementation_uid = 0x10274107;
+				version_no = 1;
+				display_name = "UnknownIdPlugin";
+				default_data = "10274107";
+				opaque_data = "";
+				rom_only=1;
+				}
+			};
+		}
+	};
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthplugins/consts.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2005-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 "authserver/authtypes.h"
+
+_LIT(KPluginName, "Test Plugin #1");
+_LIT(KPluginDescription, "Returns known id and data for each method.");
+
+_LIT8(KIdentifyData, "ABABABABABABABABABAB");
+_LIT8(KTrainData, "BABABABABABABABABABA");
+_LIT8(KRetrainData, "CCCCCCCCCCCCCCCCCCCC");
+
+static const TInt KEntropy = 999;
+static const TInt KFalsePos = 100;
+static const TInt KFalseNeg = 10;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthplugins/scripts/tauthplugins.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,42 @@
+//
+// Copyright (c) 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: 
+//
+//
+// Copyright (c) 2009 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:
+//
+//! @file
+// authentication plugins tests
+
+LOAD_SUITE tauthplugins
+
+////
+//! @SYMTestCaseID SEC-AUT-AUTHPLUGINS-0001
+//! @SYMTestCaseDesc	Authentication plugins test
+START_TESTCASE SEC-AUT-AUTHPLUGINS-0001
+RUN_TEST_STEP 100 tauthplugins INTERFACE 
+END_TESTCASE SEC-AUT-AUTHPLUGINS-0001
+ 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthplugins/step_interface.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,268 @@
+/*
+* Copyright (c) 2005-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 "tauthpluginsstep.h"
+#include "consts.h"
+
+#include <test/testexecutelog.h>
+#include "authserver/authplugininterface.h"
+#include <e32std.h>
+#include <s32file.h>
+#include <ecom/implementationinformation.h>
+#include <ecom/ecom.h>
+#include <authserver/authpatchdata.h>
+#include <authserver/auth_srv_errs.h>
+#include <u32hal.h> 
+
+using namespace AuthServer;
+
+CTStepInterface::CTStepInterface()
+	{
+	SetTestStepName(KTStepInterface);
+	}
+
+CTStepInterface::~CTStepInterface()
+	{}
+
+TInt HexString2Num(const TDesC8& aStr)
+  {
+  	TInt data = 0;
+	TInt char2hex = 0;
+	TInt c = 0;
+	for (TInt i = 0 ; i < aStr.Length() ; ++i)
+	  {
+	  c = aStr[i];
+	  
+	  if (c < 'A')
+	    {
+	    char2hex='0';
+	    }
+	  else if (c < 'a')
+	    {
+	    char2hex=('A'-10);
+	    }
+	  else
+	    {
+	    char2hex=('a'-10);
+	    }
+	  data = data << 4;      
+	  data += aStr[i]-char2hex; 
+	  }
+	return data;
+  }
+
+TVerdict CTStepInterface::doTestStepPreambleL()
+	{
+	TVerdict verdict = CTAuthPluginsStepBase::doTestStepPreambleL();
+	iActiveScheduler = new(ELeave) CActiveScheduler();
+	CActiveScheduler::Install(iActiveScheduler);
+	return verdict;
+	}
+
+TVerdict CTStepInterface::doTestStepPostambleL()
+	{
+	TVerdict verdict = CTAuthPluginsStepBase::doTestStepPostambleL();
+	delete iActiveScheduler;
+	return verdict;
+	}
+	
+TVerdict CTStepInterface::doTestStepL()
+	{
+	if (TestStepResult() != EPass)
+		{
+		return TestStepResult();
+		}
+__UHEAP_MARK;		// Check for memory leaks
+	
+    TBool res = ETrue; 
+    TBool tmp = ETrue; 
+	TInt  err = KErrNone;
+
+	RImplInfoPtrArray impl;
+	CleanupClosePushL(impl);
+	REComSession::ListImplementationsL(KCAuthPluginInterfaceUid, impl);
+	
+	TEST(tmp = impl.Count() > 0);
+	res = tmp && res;
+
+	
+	TInt data = HexString2Num(impl[0]->DataType());
+
+    INFO_PRINTF2(_L("Implementation Id: 0x%x"),impl[0]->ImplementationUid().iUid);
+    INFO_PRINTF2(_L("Display Name: %S"),&impl[0]->DisplayName());
+    INFO_PRINTF2(_L("Default Data: %x"),data);
+    INFO_PRINTF2(_L("Rom Only: %d"),impl[0]->RomOnly());
+    INFO_PRINTF2(_L("Rom Based: %d"),impl[0]->RomBased());
+
+	CAuthPluginInterface* plugin = 0;
+
+	TEComResolverParams resolverParams;
+	TBufC8<16> pluginIdTxt;
+			  
+	pluginIdTxt.Des().Format(_L8("%x"), impl[0]->ImplementationUid().iUid);
+				  
+	resolverParams.SetDataType(pluginIdTxt);
+				  
+	TAny* tempPlugin = 0; 
+	TUid Dtor_ID_Key = TUid::Null();
+  	TRAP(err, tempPlugin = 
+	REComSession::CreateImplementationL(KCAuthPluginInterfaceUid,
+										Dtor_ID_Key,
+										resolverParams));
+  	
+  	plugin = reinterpret_cast<CAuthPluginInterface*>(tempPlugin);	
+	if (plugin != 0)
+	    {
+	    
+	    	
+
+	    TRequestStatus t;
+	    TIdentityId id;
+
+	    HBufC8* data = 0; 
+	    plugin->Identify(id, KNullDesC(), data,t);
+        CleanupStack::PushL(data);
+        
+	    TEST(tmp = id == 22);
+    	res = tmp && res;
+	    
+	    TEST(tmp = *data == KIdentifyData);
+    	res = tmp && res;
+
+	    HBufC8* data2 = 0; 
+        plugin->Train(id,data2,t);
+        CleanupStack::PushL(data2);
+        
+        TEST(tmp = *data2 == KTrainData);
+    	res = tmp && res;
+    	
+	    HBufC8* data4 = 0; 
+        TEST(tmp = plugin->DefaultData(0, data4) == KErrNotSupported);
+    	res = tmp && res;
+
+        TEST(tmp = plugin->Name() == KPluginName);
+    	res = tmp && res;		
+
+        TEST(tmp = plugin->Description() == KPluginDescription);
+    	res = tmp && res;
+
+        TEST(tmp = plugin->MinEntropy() == KEntropy);
+    	res = tmp && res;
+
+        TEST(tmp = plugin->FalsePositiveRate() == KFalsePos);
+    	res = tmp && res;
+
+        TEST(tmp = plugin->FalseNegativeRate() == KFalseNeg);
+    	res = tmp && res;
+		
+	    CleanupStack::PopAndDestroy(2);
+	    delete plugin;
+	    REComSession::DestroyedImplementation(Dtor_ID_Key);
+	    }
+	else
+	    {
+	    ERR_PRINTF1(_L("Failed to load plugin"));
+	        
+	    res = false;
+	    }
+	    
+	 
+	TInt count = impl.Count();		
+	for (TInt i = 0; i < count; i++)
+		{
+
+		TEComResolverParams resolverParams;
+		TBufC8<16> pluginIdTxt;
+			  
+		pluginIdTxt.Des().Format(_L8("%x"), impl[i]->ImplementationUid().iUid);
+		//paste begin
+
+    	pluginIdTxt.Des().UpperCase();
+		resolverParams.SetDataType(pluginIdTxt);
+			  
+		//To load plugins from sources other than ROM the patch 
+		// data KEnablePostMarketAuthenticationPlugins must be set to True.
+		TUint32 enablePostMarketPlugin = KEnablePostMarketAuthenticationPlugins;
+
+#ifdef __WINS__
+    
+		// Default SymbianOS behavior is to only load auth plugins from ROM.
+		enablePostMarketPlugin = 0;
+
+		// For the emulator allow the constant to be patched via epoc.ini
+		UserSvr::HalFunction(EHalGroupEmulator, EEmulatorHalIntProperty,
+       (TAny*)"KEnablePostMarketAuthenticationPlugins", &enablePostMarketPlugin); // read emulator property (if present)
+
+#endif
+
+    	  TAny* tempPlugin = 0;
+		  TInt err = 0;
+		  TUid Dtor_ID_Key = TUid::Null();
+			  
+		 if(enablePostMarketPlugin == 0) 
+		  	{
+		  	TRAP(err, tempPlugin = 
+			REComSession::CreateImplementationL(KCAuthPluginInterfaceUid,
+												Dtor_ID_Key,
+												resolverParams,
+												KRomOnlyResolverUid));
+		  	}
+		  
+		  else
+		  	{
+		  	TRAP(err, tempPlugin = 
+			REComSession::CreateImplementationL(KCAuthPluginInterfaceUid,
+												Dtor_ID_Key,
+												resolverParams));
+		  	}
+		  
+		 if (err == KErrNotFound)
+		    {
+		    err = KErrAuthServNoSuchPlugin;  
+		    }
+		  User::LeaveIfError(err);
+		    						  	  	
+		plugin = reinterpret_cast<CAuthPluginInterface*>(tempPlugin);	
+
+	    INFO_PRINTF2(_L("ID:           0x%x"),plugin->Id());
+	    INFO_PRINTF2(_L("Name:         %S"),&plugin->Name());
+	    INFO_PRINTF2(_L("Description:  %S"),&plugin->Description());
+	    INFO_PRINTF2(_L("Type          %x"),plugin->Type());
+	    INFO_PRINTF2(_L("MinEntropy:   %d"),plugin->MinEntropy());
+	    INFO_PRINTF2(_L("FPR           %d"),plugin->FalsePositiveRate());
+	    INFO_PRINTF2(_L("FNR           %d"),plugin->FalseNegativeRate());
+	    INFO_PRINTF2(_L("IsActive      %d"),plugin->IsActive());
+		HBufC8* buf = 0;
+		INFO_PRINTF2(_L("DefaultData   %d"),plugin->DefaultData(0,buf));
+		if (buf) { delete buf; }
+		
+	    delete plugin;
+		delete impl[i];
+		REComSession::DestroyedImplementation(Dtor_ID_Key);
+		}
+	
+	CleanupStack::PopAndDestroy(&impl);
+	
+	REComSession::FinalClose();
+
+	SetTestStepResult(res ? EPass : EFail);
+	
+__UHEAP_MARKEND;	
+	return TestStepResult();
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthplugins/tauthplugins.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2005-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: 
+*
+*/
+
+
+TARGET			tauthplugins.exe
+TARGETTYPE		exe
+UID				0x1000007A 0x10204F0D
+VENDORID		0x70000001
+
+SYSTEMINCLUDE		/epoc32/include
+SYSTEMINCLUDE		/epoc32/include/test
+
+USERINCLUDE			.
+USERINCLUDE			../../source/common
+USERINCLUDE			../../source/server
+USERINCLUDE			../../source/client
+USERINCLUDE			../../inc_private
+
+SOURCEPATH		.
+SOURCE			tauthpluginsserver.cpp
+SOURCE			step_interface.cpp
+
+SOURCE          ../../source/common/plugindesc.cpp
+
+LIBRARY			euser.lib
+LIBRARY			efsrv.lib
+LIBRARY			estor.lib
+LIBRARY         testexecuteutils.lib
+LIBRARY         testexecutelogclient.lib
+LIBRARY         ecom.lib
+LIBRARY			authcommon.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthplugins/tauthpluginsserver.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 2005-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: 
+* server implementation
+*
+*/
+
+
+/**
+ @file 
+*/
+
+#include "tauthpluginsserver.h"
+#include "tauthpluginsstep.h"
+
+_LIT(KServerName,"tauthplugins");
+
+/**
+ * Called inside the MainL() function to create and start the CTestServer 
+ * derived server.
+ * @return Instance of the test server
+ */
+CTAuthPluginsServer* CTAuthPluginsServer::NewL()
+	{
+	CTAuthPluginsServer * server = new (ELeave) CTAuthPluginsServer();
+	CleanupStack::PushL(server);
+	
+	// Either use a StartL or ConstructL, the latter will permit Server Logging.
+
+	server->ConstructL(KServerName);
+	CleanupStack::Pop(server);
+	return server;
+	}
+
+LOCAL_C void MainL()
+	{
+	// Leave the hooks in for platform security
+#if (defined __DATA_CAGING__)
+	RProcess().DataCaging(RProcess::EDataCagingOn);
+	RProcess().SecureApi(RProcess::ESecureApiOn);
+#endif
+	CActiveScheduler* sched=NULL;
+	sched=new(ELeave) CActiveScheduler;
+	CleanupStack::PushL(sched);
+	CActiveScheduler::Install(sched);
+	CTAuthPluginsServer* server = NULL;
+	// Create the CTestServer derived server
+	TRAPD(err,server = CTAuthPluginsServer::NewL());
+	if(!err)
+		{
+		RProcess::Rendezvous(KErrNone);
+		sched->Start();
+		}
+	CleanupStack::Pop(sched);
+	delete server;
+	delete sched;
+	}
+
+GLDEF_C TInt E32Main()
+	{
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	if(cleanup == NULL)
+		{
+		return KErrNoMemory;
+		}
+	TRAP_IGNORE(MainL());	
+	delete cleanup;
+	return KErrNone;
+    }
+
+CTestStep* CTAuthPluginsServer::CreateTestStep(const TDesC& aStepName)
+	{
+	CTestStep* testStep = NULL;
+
+	if(aStepName == KTStepInterface)
+		{
+		testStep = new CTStepInterface();
+		}
+
+	return testStep;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthplugins/tauthpluginsserver.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2005-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: 
+* TAuthPluginsServer is the server for all authentication plugins tests
+*
+*/
+
+
+#ifndef TAUTHPLUGINSSERVER_H
+#define TAUTHPLUGINSSERVER_H
+#include <test/testexecuteserverbase.h>
+
+class CTAuthPluginsServer : public CTestServer
+	{
+public:
+	static CTAuthPluginsServer*	NewL();
+	virtual CTestStep*			CreateTestStep(const TDesC& aStepName);
+	RFs& Fs()	{return iFs;};
+
+private:
+	RFs								iFs;
+	};
+
+#endif	/* TAUTHPLUGINSSERVER_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthplugins/tauthpluginsstep.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2005-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: 
+*
+*/
+
+
+#ifndef TAUTHPLUGINSSTEP_H
+#define TAUTHPLUGINSSTEP_H
+
+#include <test/testexecutestepbase.h>
+#include "tauthpluginsserver.h"
+
+_LIT(KTStepInterface, "INTERFACE");
+
+class CTAuthPluginsStepBase : public CTestStep
+	{
+protected:
+	CTAuthPluginsStepBase() {}
+	~CTAuthPluginsStepBase() {}
+	virtual TVerdict doTestStepPreambleL()
+	{
+	iFs.Connect();
+ 	return TestStepResult();
+	}
+	virtual TVerdict doTestStepPostambleL()
+	{
+	iFs.Close();
+	return TestStepResult();
+	}
+	
+protected:
+	RFs		iFs;
+	};
+
+
+class CTStepInterface : public CTAuthPluginsStepBase
+	{
+public:
+	CTStepInterface();
+	~CTStepInterface();
+	virtual TVerdict doTestStepL();
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepPostambleL();
+	
+private:
+	CActiveScheduler* iActiveScheduler;
+	};
+
+#endif	/* TAUTHPLUGINSSTEP_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthplugins/testplugins.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,249 @@
+/*
+* Copyright (c) 2005-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 "testplugins.h"
+#include <ecom/ecom.h>
+#include <f32file.h>
+#include "consts.h"
+
+using namespace AuthServer;
+
+TBool E32Dll()
+  {
+  return (ETrue);
+  }
+
+CTestPlugin1::CTestPlugin1()  : iActive(false)
+  {
+  iName.Set(KPluginName);
+  iDescription.Set(KPluginDescription);
+  iType = EAuthKnowledge;
+  iMinEntropy = KEntropy;
+  iFalsePositiveRate = KFalsePos;
+  iFalseNegativeRate = KFalseNeg;
+
+  RFs fs;
+  fs.Connect();
+  TEntry file;
+  
+  _LIT(KActiveFile, "\\testplugin_active\\");
+  TDriveUnit sysDrive (fs.GetSystemDrive());
+  TBuf<128> activeFile (sysDrive.Name());
+  activeFile.Append(KActiveFile);
+  iActive = fs.Entry(activeFile, file);;
+  fs.Close();
+  //RDebug::Printf("Plugin started, active = %d", iActive);
+  iActive = iActive != KErrNotFound;
+  //RDebug::Printf("Plugin started, active = %d", iActive);
+  }
+
+void CTestPlugin1::Identify(TIdentityId& aId, const TDesC& /*aClientMessage*/,
+							HBufC8*& aResult, TRequestStatus& aRequest)
+    {
+	aId = 22;
+	aResult = HBufC8::New(20);
+	
+	TRequestStatus *stat = &aRequest;
+	
+	if(aResult == NULL)
+			{
+			User::RequestComplete(stat, KErrNoMemory);
+			return;
+			}
+	
+	*aResult = KIdentifyData;
+	User::RequestComplete(stat, KErrNone);
+    }
+  
+void CTestPlugin1::Train(TIdentityId /*aId*/, HBufC8*& aResult,
+						 TRequestStatus& aRequest)
+    {
+	aResult = HBufC8::New(20);
+	
+	TRequestStatus* status = &aRequest;
+	
+	if(aResult == NULL)
+		{
+		User::RequestComplete(status, KErrNoMemory);
+		return;
+		}
+
+	*aResult = KTrainData;
+	User::RequestComplete(status, KErrNone);
+			
+	}
+
+
+void CUnknownPlugin::Identify(TIdentityId& aId, const TDesC& /*aClientMessage*/,
+							  HBufC8*& aResult, TRequestStatus& aRequest)
+    {
+	aId = KUnknownIdentity;
+	aResult = HBufC8::New(0);
+	
+	TRequestStatus *stat = &aRequest;
+	
+	if(aResult == NULL)
+		{
+		User::RequestComplete(stat, KErrNoMemory);
+		return;
+		}
+	
+	User::RequestComplete(stat, KErrNone);
+    }
+  
+void CUnknownPlugin::Train(TIdentityId /*aId*/, HBufC8*& aResult,
+						 TRequestStatus& aRequest)
+    {
+	aResult = HBufC8::New(0);
+	TRequestStatus* status = &aRequest;
+	
+	if(aResult == NULL)
+		{
+		User::RequestComplete(status, KErrNoMemory);
+		return;
+		}
+	
+	User::RequestComplete(status, KErrAuthServPluginCancelled);
+	}
+
+TBool CTestPlugin1::IsActive() const 
+    {
+	return iActive;
+	}
+
+
+TInt CTestPlugin1::Forget(TIdentityId /*aId*/)
+    {
+	return KErrNone;
+    }
+TInt CTestPlugin1::DefaultData(TIdentityId /*aId*/, HBufC8*& /*aOutputBuf*/)
+    {
+	return KErrNotSupported;
+    }
+
+TInt CTestPlugin1::Reset(TIdentityId /*aId*/, const TDesC& /*aRegistrationData*/, HBufC8*& /*aResult*/)
+	{
+	return KErrNotSupported;
+	}
+
+const TImplementationProxy ImplementationTable[] =
+  {
+	IMPLEMENTATION_PROXY_ENTRY(0x10274104, CTestPlugin1::NewL),
+	IMPLEMENTATION_PROXY_ENTRY(0x10274105, CBlockPlugin::NewL),
+	IMPLEMENTATION_PROXY_ENTRY(0x10274106, CInactivePlugin::NewL),
+	IMPLEMENTATION_PROXY_ENTRY(0x10274107, CUnknownPlugin::NewL)
+  };
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+  {
+  aTableCount = sizeof(ImplementationTable) /
+	sizeof(TImplementationProxy);
+  return ImplementationTable;
+  }
+
+const TPtrC& CTestPlugin1::Name() const
+  {
+  return iName;
+  }
+const TPtrC& CTestPlugin1::Description() const
+  {
+  return iDescription;
+  }
+TAuthPluginType CTestPlugin1::Type() const 
+  {
+  return iType;
+  }
+
+TEntropy CTestPlugin1::MinEntropy() const
+  {
+  return iMinEntropy;
+  }
+
+TPercentage CTestPlugin1::FalsePositiveRate() const
+  {
+  return iFalsePositiveRate;
+  }
+
+TPercentage CTestPlugin1::FalseNegativeRate() const
+  {
+  return iFalseNegativeRate;
+  }
+
+
+//Unknown Plugin
+
+const TPtrC& CUnknownPlugin::Name() const
+  {
+  return iName;
+  }
+const TPtrC& CUnknownPlugin::Description() const
+  {
+  return iDescription;
+  }
+AuthServer::TAuthPluginType CUnknownPlugin::Type() const 
+  {
+  return iType;
+  }
+
+AuthServer::TEntropy CUnknownPlugin::MinEntropy() const
+  {
+  return iMinEntropy;
+  }
+
+AuthServer::TPercentage CUnknownPlugin::FalsePositiveRate() const
+  {
+  return iFalsePositiveRate;
+  }
+
+AuthServer::TPercentage CUnknownPlugin::FalseNegativeRate() const
+  {
+  return iFalseNegativeRate;
+  }
+
+
+
+//Inactive Plugin
+
+const TPtrC& CInactivePlugin::Name() const
+  {
+  return iName;
+  }
+const TPtrC& CInactivePlugin::Description() const
+  {
+  return iDescription;
+  }
+AuthServer::TAuthPluginType CInactivePlugin::Type() const 
+  {
+  return iType;
+  }
+
+AuthServer::TEntropy CInactivePlugin::MinEntropy() const
+  {
+  return iMinEntropy;
+  }
+
+AuthServer::TPercentage CInactivePlugin::FalsePositiveRate() const
+  {
+  return iFalsePositiveRate;
+  }
+
+AuthServer::TPercentage CInactivePlugin::FalseNegativeRate() const
+  {
+  return iFalseNegativeRate;
+  }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthplugins/testplugins.h	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,231 @@
+/*
+* Copyright (c) 2005-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 <ecom/implementationproxy.h>
+#include <e32base.h>
+
+#include "authserver/authplugininterface.h"
+#include "authserver/authtypes.h"
+#include "authserver/auth_srv_errs.h"
+
+
+
+namespace AuthServer
+{
+class CTestPlugin1 : public CAuthPluginInterface
+	{
+public:
+	static CTestPlugin1* NewL()
+	{ return new (ELeave) CTestPlugin1(); }
+
+	CTestPlugin1();
+	virtual ~CTestPlugin1() {}
+	virtual TPluginId Id() const { return 0x10274104; }
+	virtual void Train(TIdentityId aId, HBufC8*& aResult,
+  					   TRequestStatus& aRequest);
+	virtual void Cancel() {};
+ 
+	virtual  void Identify(TIdentityId& aId, const TDesC& aClientMessage,
+						   HBufC8*& aResult, TRequestStatus& aRequest);
+
+	virtual TBool IsActive() const;
+	virtual TInt Forget(TIdentityId aId);
+	virtual TInt DefaultData(TIdentityId aId, HBufC8*& aOutputBuf);
+	virtual TInt Reset(TIdentityId aId, const TDesC& aRegistrationData, HBufC8*& aResult);
+	virtual const TPtrC& Name() const;
+	virtual const TPtrC& Description() const;
+	virtual AuthServer::TEntropy MinEntropy() const;
+	virtual AuthServer::TPercentage FalsePositiveRate() const;
+	virtual AuthServer::TPercentage FalseNegativeRate() const;
+	virtual AuthServer::TAuthPluginType Type() const;
+
+protected:
+ 	/// The name of the plugin. Derived classes should set this member.
+ 	TPtrC iName;
+ 	/// The plugin's description. Derived classes should set this member.
+ 	TPtrC iDescription;
+ 	/// The minumum entropy provided by the plugin. Derived classes should set
+ 	/// this member.
+ 	AuthServer::TEntropy iMinEntropy;
+ 	/// The false positive rate of the plugin. Derived classes should set this
+ 	/// member.
+ 	AuthServer::TPercentage iFalsePositiveRate;
+ 	/// The false negative rate of the plugin. Derived classes should set this
+ 	/// member.
+ 	AuthServer::TPercentage iFalseNegativeRate;
+  	/// The type of the plugin. Derived classes should set this member.
+ 	AuthServer::TAuthPluginType iType;
+ 	/// the state of the plugin.
+ 	TBool iActive;
+
+    };
+
+class CInactivePlugin : public CTestPlugin1
+	{
+public:
+	static CInactivePlugin* NewL()
+	{ return new (ELeave) CInactivePlugin(); }
+
+	CInactivePlugin() {}
+	virtual ~CInactivePlugin() {}
+	virtual TPluginId Id() const { return 0x10274106; }
+
+	virtual TBool IsActive() const { return EFalse; }
+	virtual const TPtrC& Name() const;
+	virtual const TPtrC& Description() const;
+	virtual AuthServer::TEntropy MinEntropy() const;
+	virtual AuthServer::TPercentage FalsePositiveRate() const;
+	virtual AuthServer::TPercentage FalseNegativeRate() const;
+	virtual AuthServer::TAuthPluginType Type() const;
+    };
+
+
+class CUnknownPlugin : public CTestPlugin1
+	{
+public:
+	static CUnknownPlugin* NewL()
+	{ return new (ELeave) CUnknownPlugin(); }
+
+	CUnknownPlugin() {}
+	virtual ~CUnknownPlugin() {}
+	virtual TPluginId Id() const { return 0x10274107; }
+	virtual  void Identify(TIdentityId& aId,  const TDesC& aClientMessage,
+							HBufC8*& aResult, TRequestStatus& aRequest);
+
+	virtual void Train(TIdentityId aId, HBufC8*& aResult,
+  					   TRequestStatus& aRequest);
+	virtual TBool IsActive() const { return ETrue; }
+	const TPtrC& Name() const;
+	const TPtrC& Description() const;
+	virtual AuthServer::TEntropy MinEntropy() const;
+	virtual AuthServer::TPercentage FalsePositiveRate() const;
+	virtual AuthServer::TPercentage FalseNegativeRate() const;
+	virtual AuthServer::TAuthPluginType Type() const;
+    };
+    
+class CWaitToComplete : public CTimer
+    {
+    public: 
+    CWaitToComplete() : CTimer(EPriorityNormal)
+        { CTimer::ConstructL(); }
+        
+    void RunL()
+        {
+        RDebug::Printf("TestPlugin waittocomplete RUNL() : %d", iStatus.Int());
+        if (iStatus != KErrNone)
+            {
+            iReturn = iStatus.Int();
+            }
+        User::RequestComplete(iCliReq, iReturn); 
+        }
+        
+     
+    void SetCliStatus(TRequestStatus& aResult, TInt aReturn)    
+        { iCliReq = &aResult; iReturn = aReturn; }
+        
+    TRequestStatus* iCliReq;    
+    TInt iReturn; 
+    };
+    
+class CBlockPlugin : public CTestPlugin1
+	{
+public:
+	static CBlockPlugin* NewL()
+	{ return new (ELeave) CBlockPlugin(); }
+
+	CBlockPlugin() 
+	    {
+	    }
+	virtual ~CBlockPlugin() {}
+  
+	virtual TPluginId Id() const { return 0x10274105; }
+
+	virtual void Train(TIdentityId /*aId*/, HBufC8*& aResult,
+  					   TRequestStatus& aRequest)
+    	{
+		if (!iTimer.IsAdded())
+            {
+            CActiveScheduler::Add(&iTimer);
+            }
+        iClientStatus = &aRequest;
+        aRequest =  KRequestPending;
+        iTimer.SetCliStatus(aRequest, KErrAuthServPluginCancelled);
+        iTimer.After(5000000);        
+        aResult = 0;
+        }
+
+	virtual void Cancel()
+	    {
+        iTimer.Cancel();
+        User::RequestComplete(iClientStatus, KErrCancel);
+        }
+ 
+	virtual  void Identify(TIdentityId& aId, const TDesC& /*aClientMessage*/,
+							HBufC8*& aResult, TRequestStatus& aRequest)
+	    {
+		if (!iTimer.IsAdded())
+            {
+            CActiveScheduler::Add(&iTimer);
+            }
+        iClientStatus = &aRequest;
+        aRequest =  KRequestPending;
+        iTimer.SetCliStatus(aRequest, KErrNone);
+        iTimer.After(5000000);  
+		aId = KUnknownIdentity;
+		aResult = 0;
+		}
+	virtual const TPtrC& Name() const
+	  {
+	  return iName;
+	  }
+	virtual const TPtrC& Description() const
+	  {
+	  return iDescription;
+	  }
+	virtual TAuthPluginType Type() const 
+	  {
+	  return iType;
+	  }
+
+	virtual TEntropy MinEntropy() const
+	  {
+	  return iMinEntropy;
+	  }
+
+	virtual TPercentage FalsePositiveRate() const
+	  {
+	  return iFalsePositiveRate;
+	  }
+
+	virtual TPercentage FalseNegativeRate() const
+	  {
+	  return iFalseNegativeRate;
+	  }
+
+	private:
+	
+	TRequestStatus  iStatus;
+	TRequestStatus* iClientStatus;
+	CWaitToComplete iTimer;
+	
+    };
+
+} 
+
+IMPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount);
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthplugins/testplugins.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2005-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: 
+*
+*/
+
+
+TARGET				testplugins.dll
+TARGETTYPE			PLUGIN
+UID					0x10009d8d 0x10204F0E
+VENDORID			0x70000001
+
+CAPABILITY			ALL -TCB
+
+SYSTEMINCLUDE		/epoc32/include
+
+USERINCLUDE			.
+USERINCLUDE			../../source/common
+USERINCLUDE			../../source/server
+USERINCLUDE			../../source/client
+USERINCLUDE			../../inc_private
+
+SOURCEPATH			.
+SOURCE				testplugins.cpp
+
+START RESOURCE        10204f0e.rss
+#ifdef SYMBIAN_SECURE_ECOM
+TARGET testplugins.rsc
+#endif
+END
+
+
+
+
+LIBRARY			euser.lib ecom.lib efsrv.lib authcommon.lib
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthplugins/testpluginsupgrade.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,251 @@
+/*
+* Copyright (c) 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 "testplugins.h"
+#include <ecom/ecom.h>
+#include <f32file.h>
+#include "consts.h"
+
+using namespace AuthServer;
+
+_LIT(KTestPluginsUpgradeNamePin, "Test Plugin #1 - Upgrade");
+
+TBool E32Dll()
+  {
+  return (ETrue);
+  }
+
+CTestPlugin1::CTestPlugin1()  : iActive(false)
+  {
+  iName.Set(KTestPluginsUpgradeNamePin);
+  iDescription.Set(KPluginDescription);
+  iType = EAuthKnowledge;
+  iMinEntropy = KEntropy;
+  iFalsePositiveRate = KFalsePos;
+  iFalseNegativeRate = KFalseNeg;
+
+  RFs fs;
+  fs.Connect();
+  TEntry file;
+  
+  _LIT(KActiveFile, "\\testplugin_active\\");
+  TDriveUnit sysDrive (fs.GetSystemDrive());
+  TBuf<128> activeFile (sysDrive.Name());
+  activeFile.Append(KActiveFile);
+  iActive = fs.Entry(activeFile, file);;
+  fs.Close();
+  //RDebug::Printf("Plugin started, active = %d", iActive);
+  iActive = iActive != KErrNotFound;
+  //RDebug::Printf("Plugin started, active = %d", iActive);
+  }
+
+void CTestPlugin1::Identify(TIdentityId& aId, const TDesC& /*aClientMessage*/,
+							HBufC8*& aResult, TRequestStatus& aRequest)
+    {
+	aId = 22;
+	aResult = HBufC8::New(20);
+	
+	TRequestStatus *stat = &aRequest;
+	
+	if(aResult == NULL)
+			{
+			User::RequestComplete(stat, KErrNoMemory);
+			return;
+			}
+	
+	*aResult = KIdentifyData;
+	User::RequestComplete(stat, KErrNone);
+    }
+  
+void CTestPlugin1::Train(TIdentityId /*aId*/, HBufC8*& aResult,
+						 TRequestStatus& aRequest)
+    {
+	aResult = HBufC8::New(20);
+	
+	TRequestStatus* status = &aRequest;
+	
+	if(aResult == NULL)
+		{
+		User::RequestComplete(status, KErrNoMemory);
+		return;
+		}
+
+	*aResult = KTrainData;
+	User::RequestComplete(status, KErrNone);
+			
+	}
+
+
+void CUnknownPlugin::Identify(TIdentityId& aId, const TDesC& /*aClientMessage*/,
+							  HBufC8*& aResult, TRequestStatus& aRequest)
+    {
+	aId = KUnknownIdentity;
+	aResult = HBufC8::New(0);
+	
+	TRequestStatus *stat = &aRequest;
+	
+	if(aResult == NULL)
+		{
+		User::RequestComplete(stat, KErrNoMemory);
+		return;
+		}
+	
+	User::RequestComplete(stat, KErrNone);
+    }
+  
+void CUnknownPlugin::Train(TIdentityId /*aId*/, HBufC8*& aResult,
+						 TRequestStatus& aRequest)
+    {
+	aResult = HBufC8::New(0);
+	TRequestStatus* status = &aRequest;
+	
+	if(aResult == NULL)
+		{
+		User::RequestComplete(status, KErrNoMemory);
+		return;
+		}
+	
+	User::RequestComplete(status, KErrAuthServPluginCancelled);
+	}
+
+TBool CTestPlugin1::IsActive() const 
+    {
+	return iActive;
+	}
+
+
+TInt CTestPlugin1::Forget(TIdentityId /*aId*/)
+    {
+	return KErrNone;
+    }
+TInt CTestPlugin1::DefaultData(TIdentityId /*aId*/, HBufC8*& /*aOutputBuf*/)
+    {
+	return KErrNotSupported;
+    }
+
+TInt CTestPlugin1::Reset(TIdentityId /*aId*/, const TDesC& /*aRegistrationData*/, HBufC8*& /*aResult*/)
+	{
+	return KErrNotSupported;
+	}
+
+const TImplementationProxy ImplementationTable[] =
+  {
+	IMPLEMENTATION_PROXY_ENTRY(0x10274104, CTestPlugin1::NewL),
+	IMPLEMENTATION_PROXY_ENTRY(0x10274105, CBlockPlugin::NewL),
+	IMPLEMENTATION_PROXY_ENTRY(0x10274106, CInactivePlugin::NewL),
+	IMPLEMENTATION_PROXY_ENTRY(0x10274107, CUnknownPlugin::NewL)
+  };
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+  {
+  aTableCount = sizeof(ImplementationTable) /
+	sizeof(TImplementationProxy);
+  return ImplementationTable;
+  }
+
+const TPtrC& CTestPlugin1::Name() const
+  {
+  return iName;
+  }
+const TPtrC& CTestPlugin1::Description() const
+  {
+  return iDescription;
+  }
+TAuthPluginType CTestPlugin1::Type() const 
+  {
+  return iType;
+  }
+
+TEntropy CTestPlugin1::MinEntropy() const
+  {
+  return iMinEntropy;
+  }
+
+TPercentage CTestPlugin1::FalsePositiveRate() const
+  {
+  return iFalsePositiveRate;
+  }
+
+TPercentage CTestPlugin1::FalseNegativeRate() const
+  {
+  return iFalseNegativeRate;
+  }
+
+
+//Unknown Plugin
+
+const TPtrC& CUnknownPlugin::Name() const
+  {
+  return iName;
+  }
+const TPtrC& CUnknownPlugin::Description() const
+  {
+  return iDescription;
+  }
+AuthServer::TAuthPluginType CUnknownPlugin::Type() const 
+  {
+  return iType;
+  }
+
+AuthServer::TEntropy CUnknownPlugin::MinEntropy() const
+  {
+  return iMinEntropy;
+  }
+
+AuthServer::TPercentage CUnknownPlugin::FalsePositiveRate() const
+  {
+  return iFalsePositiveRate;
+  }
+
+AuthServer::TPercentage CUnknownPlugin::FalseNegativeRate() const
+  {
+  return iFalseNegativeRate;
+  }
+
+
+
+//Inactive Plugin
+
+const TPtrC& CInactivePlugin::Name() const
+  {
+  return iName;
+  }
+const TPtrC& CInactivePlugin::Description() const
+  {
+  return iDescription;
+  }
+AuthServer::TAuthPluginType CInactivePlugin::Type() const 
+  {
+  return iType;
+  }
+
+AuthServer::TEntropy CInactivePlugin::MinEntropy() const
+  {
+  return iMinEntropy;
+  }
+
+AuthServer::TPercentage CInactivePlugin::FalsePositiveRate() const
+  {
+  return iFalsePositiveRate;
+  }
+
+AuthServer::TPercentage CInactivePlugin::FalseNegativeRate() const
+  {
+  return iFalseNegativeRate;
+  }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tauthplugins/testpluginsupgrade.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+
+
+TARGET				testpluginsupgrade.dll
+TARGETTYPE			PLUGIN
+UID					0x10009d8d 0x10204F0E
+VENDORID			0x70000001
+
+CAPABILITY			ALL -TCB
+
+VERSION 10.1
+
+SYSTEMINCLUDE		/epoc32/include
+
+USERINCLUDE			.
+USERINCLUDE			../../source/common
+USERINCLUDE			../../source/server
+USERINCLUDE			../../source/client
+USERINCLUDE			../../inc_private
+
+SOURCEPATH			.
+SOURCE				testpluginsupgrade.cpp
+
+START RESOURCE        10204f0e_upgrade.rss
+#ifdef SYMBIAN_SECURE_ECOM
+TARGET testpluginsupgrade.rsc
+#endif
+END
+
+
+
+LIBRARY			euser.lib ecom.lib efsrv.lib authcommon.lib
+SMPSAFE
--- a/authorisation/userpromptservice/database/test/tupsdb/scripts/tupsdb.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/authorisation/userpromptservice/database/test/tupsdb/scripts/tupsdb.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,6 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
 
 LOAD_SUITE tupsdb
 
--- a/authorisation/userpromptservice/database/test/tupsdb/scripts/tupsdbperformance.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/authorisation/userpromptservice/database/test/tupsdb/scripts/tupsdbperformance.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,6 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
 
 LOAD_SUITE tupsdb
 
--- a/authorisation/userpromptservice/policies/test/packages/build.fil	Sat Dec 05 21:34:52 2009 +0000
+++ b/authorisation/userpromptservice/policies/test/packages/build.fil	Sat Dec 05 21:41:51 2009 +0000
@@ -16,7 +16,7 @@
 
 	if not exist %EPOCROOT%epoc32\data\z\tups\tpolicies\sis mkdir %EPOCROOT%epoc32\data\z\tups\tpolicies\sis
 	if not exist %EPOCROOT%epoc32\data\z\tups\tpolicies\sis\tupspolicies1.sis  makesis tupspolicies1.pkg %EPOCROOT%epoc32\data\z\tups\tpolicies\sis\tupspolicies1_unsigned.sis
-	if not exist %EPOCROOT%epoc32\data\z\tups\tpolicies\sis\tupspolicies1.sis  signsis %EPOCROOT%epoc32\data\z\tups\tpolicies\sis\tupspolicies1_unsigned.sis %EPOCROOT%epoc32\data\z\tups\tpolicies\sis\tupspolicies1.sis ..\..\..\..\..\..\..\mw\appinstall\installationservices\swi\test\tsisfile\data\signedsis\Root5CA\ca.pem ..\..\..\..\..\..\..\mw\appinstall\installationservices\swi\test\tsisfile\data\signedsis\Root5CA\ca.key.pem
+	if not exist %EPOCROOT%epoc32\data\z\tups\tpolicies\sis\tupspolicies1.sis  signsis %EPOCROOT%epoc32\data\z\tups\tpolicies\sis\tupspolicies1_unsigned.sis %EPOCROOT%epoc32\data\z\tups\tpolicies\sis\tupspolicies1.sis %SECURITYSOURCEDIR%\testframework\testcertificates\ups\test\root5ca\ca.pem %SECURITYSOURCEDIR%\testframework\testcertificates\ups\test\root5ca\ca.key.pem
 	if exist %EPOCROOT%epoc32\data\z\tups\tpolicies\sis\tupspolicies1_unsigned.sis del /q %EPOCROOT%epoc32\data\z\tups\tpolicies\sis\tupspolicies1_unsigned.sis
 
 	if not exist %EPOCROOT%epoc32\release\winscw\udeb\z\tups\tpolicies\sis\ mkdir %EPOCROOT%epoc32\release\winscw\udeb\z\tups\tpolicies\sis\
@@ -38,12 +38,12 @@
 LIB : DO_NOTHING
 RESOURCE : DO_NOTHING
 CLEANLIB : DO_NOTHING
-FINAL : DO_NOTHING
+BLD : DO_NOTHING
 RELEASABLES : DO_NOTHING
 
 SAVESPACE : BLD
 
-BLD : MAKEDATA
+FINAL : MAKEDATA
 
 CLEAN :     
 	if exist %EPOCROOT%epoc32\data\z\tups\tpolicies\sis\tupspolicies1.sis 					del /q %EPOCROOT%epoc32\data\z\tups\tpolicies\sis\tupspolicies1.sis
--- a/authorisation/userpromptservice/policies/test/tupspolicies/scripts/tpolicycache.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/authorisation/userpromptservice/policies/test/tupspolicies/scripts/tpolicycache.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,6 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
 
 LOAD_SUITE tupspolicies
 PRINT ----------------------------------------------------------
--- a/authorisation/userpromptservice/policies/test/tupspolicies/scripts/tpolicycacheoom.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/authorisation/userpromptservice/policies/test/tupspolicies/scripts/tpolicycacheoom.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,6 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
 
 LOAD_SUITE tupspolicies
 PRINT ----------------------------------------------------------
--- a/authorisation/userpromptservice/policies/test/tupspolicies/scripts/tpolicyreader.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/authorisation/userpromptservice/policies/test/tupspolicies/scripts/tpolicyreader.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,6 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
 
 LOAD_SUITE tupspolicies
 PRINT ----------------------------------------------------------
--- a/authorisation/userpromptservice/policies/test/tupspolicies/scripts/tserviceconfig.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/authorisation/userpromptservice/policies/test/tupspolicies/scripts/tserviceconfig.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,6 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
 
 LOAD_SUITE tupspolicies
 PRINT ----------------------------------------------------------
--- a/authorisation/userpromptservice/policies/test/tupspolicies/scripts/tupsnotifier.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/authorisation/userpromptservice/policies/test/tupspolicies/scripts/tupsnotifier.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,6 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
 
 LOAD_SUITE tupspolicies
 PRINT ----------------------------------------------------------
--- a/authorisation/userpromptservice/server/inc_private/product/upsclientconfig.h	Sat Dec 05 21:34:52 2009 +0000
+++ b/authorisation/userpromptservice/server/inc_private/product/upsclientconfig.h	Sat Dec 05 21:41:51 2009 +0000
@@ -43,7 +43,7 @@
 NONSHARABLE_CLASS(CUpsClientConfig) : public CBase
 	{
 public:
-	static CUpsClientConfig* CUpsClientConfig::NewL(TInt aCount, TServiceConfig *aRawServiceConfig);	
+	static CUpsClientConfig* NewL(TInt aCount, TServiceConfig *aRawServiceConfig);	
 
 	enum TQueryUpsResult { EAllow, EQueryUps, EReject };
 	
--- a/authorisation/userpromptservice/test/group/bld.inf	Sat Dec 05 21:34:52 2009 +0000
+++ b/authorisation/userpromptservice/test/group/bld.inf	Sat Dec 05 21:41:51 2009 +0000
@@ -85,12 +85,8 @@
 
 tupsinteg_post1.mmp  // target need to be deleted after sis creation 
 
-//// create SIS files for postmanufacture tests.   /////
+//// create SIS files for postmanufacture tests and negative postmanufacture tests   /////
 makefile  ../tups/packages/integ_buildsis.fil
-makefile  ../tups/packages/integ_buildsis_2.fil
-
-//// create SIS files for negative postmanufacture tests.   /////
-makefile  ../tups/packages/integ_buildsis_negative.fil
 
 gnumakefile ../tups/packages/testromstub.mak
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authorisation/userpromptservice/test/tups/packages/copy.bat	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,60 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem 
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem 
+@rem Contributors:
+@rem 
+@rem Description: 
+@rem 
+
+
+echo Copy pkg files to common location and change to that location
+call mkdir %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\
+copy /y tupsinteg_post1.pkg %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\tupsinteg_post1.pkg
+copy /y tupsinteg_policies1.pkg %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\tupsinteg_policies1.pkg
+copy /y tupsinteg_policies2.pkg %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\tupsinteg_policies2.pkg
+copy /y tupsinteg_evaluator1.pkg %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\tupsinteg_evaluator1.pkg
+copy /y tupsinteg_eclipse1.pkg %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\tupsinteg_eclipse1.pkg
+copy /y tupsinteg_dialog1.pkg %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\tupsinteg_dialog1.pkg
+copy /y tupsinteg_ca_not_instore.pkg %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\tupsinteg_ca_not_instore.pkg
+copy /y testupsromstub.pkg %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\testupsromstub.pkg
+copy /y dummy.txt %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\dummy.txt
+
+copy /y %EPOCROOT%epoc32\release\%1\%2\tupsinteg_post1.exe %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\tupsinteg_post1.exe
+copy /y %EPOCROOT%epoc32\release\%1\%2\tups_policyevaluator05.dll %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\tups_policyevaluator05.dll
+copy /y %EPOCROOT%epoc32\data\z\resource\plugins\tups_policyevaluator05.rsc %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\tups_policyevaluator05.rsc
+copy /y %EPOCROOT%epoc32\release\%1\%2\tups_dialogcreator07.dll %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\tups_dialogcreator07.dll
+copy /y %EPOCROOT%epoc32\data\z\resource\plugins\tups_dialogcreator07.rsc %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\tups_dialogcreator07.rsc
+
+if "%1"=="WINSCW" goto WINSCW;
+if "%1"=="ARMV5" goto ARMV5;
+
+
+:WINSCW
+copy /y %EPOCROOT%epoc32\release\%1\%2\Z\private\10283558\policies\t_ups_101f7f1f_ff000001_version1.rsc %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\t_ups_101f7f1f_ff000001_version1.rsc
+copy /y %EPOCROOT%epoc32\release\%1\%2\Z\private\10283558\policies\t_ups_101f7f1f_ff000001_version2.rsc %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\t_ups_101f7f1f_ff000001_version2.rsc
+copy /y %EPOCROOT%epoc32\release\%1\%2\Z\private\10283558\policies\t_ups_101f7f1f_0000aaa2_version1.rsc %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\t_ups_101f7f1f_0000aaa2_version1.rsc
+copy /y %EPOCROOT%epoc32\release\%1\%2\Z\private\10283558\policies\eclipse_ups_101f7f1f_0000aaa3.rsc %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\eclipse_ups_101f7f1f_0000aaa3.rsc
+copy /y %EPOCROOT%epoc32\release\%1\%2\Z\private\10283558\policies\t_ups_101f7f1f_0000aaa4.rsc %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\t_ups_101f7f1f_0000aaa4.rsc
+copy /y %EPOCROOT%epoc32\release\%1\%2\Z\private\10283558\policies\t_ups_101f7f1f_ff000001_version1.rsc %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\t_ups_101f7f1f_ff000001_version1.rsc
+copy /y %EPOCROOT%epoc32\release\%1\%2\Z\private\10283558\policies\t_ups_101f7f1f_ff000001_version2.rsc %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\t_ups_101f7f1f_ff000001_version2.rsc
+goto EXIT;
+
+:ARMV5
+copy /y %EPOCROOT%epoc32\data\z\private\10283558\policies\t_ups_101f7f1f_ff000001_version1.rsc %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\t_ups_101f7f1f_ff000001_version1.rsc
+copy /y %EPOCROOT%epoc32\data\z\private\10283558\policies\t_ups_101f7f1f_ff000001_version2.rsc %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\t_ups_101f7f1f_ff000001_version2.rsc
+copy /y %EPOCROOT%epoc32\data\z\private\10283558\policies\t_ups_101f7f1f_0000aaa2_version1.rsc %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\t_ups_101f7f1f_0000aaa2_version1.rsc
+copy /y %EPOCROOT%epoc32\data\z\private\10283558\policies\eclipse_ups_101f7f1f_0000aaa3.rsc %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\eclipse_ups_101f7f1f_0000aaa3.rsc
+copy /y %EPOCROOT%epoc32\data\z\private\10283558\policies\t_ups_101f7f1f_0000aaa4.rsc %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\t_ups_101f7f1f_0000aaa4.rsc
+copy /y %EPOCROOT%epoc32\data\z\private\10283558\policies\t_ups_101f7f1f_ff000001_version1.rsc %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\t_ups_101f7f1f_ff000001_version1.rsc
+copy /y %EPOCROOT%epoc32\data\z\private\10283558\policies\t_ups_101f7f1f_ff000001_version2.rsc %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\t_ups_101f7f1f_ff000001_version2.rsc
+goto EXIT;
+
+:EXIT
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authorisation/userpromptservice/test/tups/packages/create.bat	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,53 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem 
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem 
+@rem Contributors:
+@rem 
+@rem Description: 
+@rem 
+
+
+
+echo makesis
+cd %EPOCROOT%epoc32\WINSCW\c\tups\data\%2\
+makesis %3.pkg %4_unsigned.sis
+
+echo signsis
+if "%5"=="ROOT5CA" signsis %4_unsigned.sis %4.sis %SECURITYSOURCEDIR%\testframework\testcertificates\ups\test\root5ca\ca.pem  %SECURITYSOURCEDIR%\testframework\testcertificates\ups\test\root5ca\ca.key.pem
+if "%5"=="ALL" signsis %4_unsigned.sis %4.sis %SECURITYSOURCEDIR%\testframework\testcertificates\ups\test\symbiantestallcapabilitiesca\symbiantestallcapabilitiesca.pem  %SECURITYSOURCEDIR%\testframework\testcertificates\ups\test\symbiantestallcapabilitiesca\cakey.pem
+if "%5"=="TESTROOT" signsis %4_unsigned.sis %4.sis %SECURITYSOURCEDIR%\testframework\testcertificates\ups\test\symbiantestrootcadsa\ca.pem %SECURITYSOURCEDIR%\testframework\testcertificates\ups\test\symbiantestrootcadsa\ca.key.pem
+if "%5"=="SELF" signsis %4_unsigned.sis %4.sis %SECURITYSOURCEDIR%\testframework\testcertificates\ups\test\certificatesnotinstore\selfsigned_cert.pem %SECURITYSOURCEDIR%\testframework\testcertificates\ups\test\certificatesnotinstore\selfsigned_key.pem
+
+if "%1"=="WINSCW" goto COPYWINSCW;
+if "%1"=="ARMV5" goto COPYARMV5;
+
+:COPYWINSCW
+
+echo Copy winscw sis to emulator drive or armv5 to data z tree
+copy /y %4.sis %EPOCROOT%epoc32\release\%1\%2\z\tups\integ\packages\%4.sis
+goto clean;
+
+	
+:COPYARMV5
+echo Copy winscw sis to emulator drive or armv5 to data z tree
+copy /y %4.sis %EPOCROOT%epoc32\data\z\tups\integ\packages\%4.sis
+
+
+goto clean;
+
+:clean
+del /q %4_unsigned.sis 
+del /q %4.sis 
+
+goto exit;
+
+:exit
+
--- a/authorisation/userpromptservice/test/tups/packages/integ_buildsis.fil	Sat Dec 05 21:34:52 2009 +0000
+++ b/authorisation/userpromptservice/test/tups/packages/integ_buildsis.fil	Sat Dec 05 21:41:51 2009 +0000
@@ -1,99 +1,66 @@
+MAKEDATA :
 !IF "$(PLATFORM)" == "GCCXML" || "$(PLATFORM)" == "TOOLS" || "$(PLATFORM)" == "TOOLS2" 
-MAKEDATA :
 	cd
 	echo ----------------
 	echo  Do nothing ...
 	echo ----------------
 !ELSE
+	cd
+	echo --------------------------------------------------------------
+	echo Copying required input datas
+	echo --------------------------------------------------------------
 
-!IF "$(PLATFORM)" == "WINSCW"
-$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\z\tups\integ\packages\tupsinteg_post1.sis : $(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\tupsinteg_1.exe tupsinteg_post1.pkg
-!ELSE
-$(EPOCROOT)epoc32\data\z\tups\integ\packages\tupsinteg_post1.sis : $(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\tupsinteg_1.exe tupsinteg_post1.pkg
-!ENDIF
-	cd
+	call copy.bat $(PLATFORM) $(CFG)
+
 	echo --------------------------------------------------------------
 	echo Building SIS file to install removable test client
 	echo --------------------------------------------------------------
 	
-	echo Copy executable to common location
-	copy /y %EPOCROOT%epoc32\release\"$(PLATFORM)"\"$(CFG)"\tupsinteg_post1.exe tupsinteg_post1.exe
-	
-	echo makesis
-	makesis tupsinteg_post1.pkg tupsinteg_post1_unsigned.sis
-	del /q  tupsinteg_post1.exe
-	
-	echo signsis	
-	signsis tupsinteg_post1_unsigned.sis tupsinteg_post1.sis   %SECURITYSOURCEDIR%\testframework\testcertificates\ups\test\root5ca\ca.pem  %SECURITYSOURCEDIR%\testframework\testcertificates\ups\test\root5ca\ca.key.pem
-	del /q tupsinteg_post1_unsigned.sis 
-		
-	echo Copy winscw sis to emulator drive or armv5 to data z tree
-	if "$(PLATFORM)" == "WINSCW" copy /y tupsinteg_post1.sis %EPOCROOT%epoc32\release\"$(PLATFORM)"\"$(CFG)"\z\tups\integ\packages\tupsinteg_post1.sis 
-	if "$(PLATFORM)" == "ARMV5"  copy /y tupsinteg_post1.sis %EPOCROOT%epoc32\data\z\tups\integ\packages\tupsinteg_post1.sis 
-	if exist tupsinteg_post1.sis	del /q tupsinteg_post1.sis 
+	call create.bat $(PLATFORM) $(CFG) tupsinteg_post1 tupsinteg_post1 ROOT5CA
 	
 
-!IF "$(PLATFORM)" == "WINSCW"
-$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\z\tups\integ\packages\tupsinteg_policies1.sis : $(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\Z\private\10283558\policies\t_ups_101f7f1f_ff000001_version1.rsc tupsinteg_policies1.pkg
-!ELSE
-$(EPOCROOT)epoc32\data\z\tups\integ\packages\tupsinteg_policies1.sis : $(EPOCROOT)epoc32\data\z\private\10283558\policies\t_ups_101f7f1f_ff000001_version1.rsc tupsinteg_policies1.pkg
-!ENDIF
+	echo --------------------------------------------------------------
+	echo Building SIS to install policy files post manufacture.
+	echo --------------------------------------------------------------
+	
+	call create.bat $(PLATFORM) $(CFG) tupsinteg_policies1 tupsinteg_policies1 ROOT5CA
+
 	echo --------------------------------------------------------------
 	echo Building SIS to install policy files post manufacture.
 	echo --------------------------------------------------------------
 	
-	echo RSC file to here
-	if "$(PLATFORM)" == "WINSCW" copy /y %EPOCROOT%epoc32\release\"$(PLATFORM)"\"$(CFG)"\Z\private\10283558\policies\t_ups_101f7f1f_ff000001_version1.rsc 
-	if "$(PLATFORM)" == "ARMV5"  copy /y %EPOCROOT%epoc32\data\z\private\10283558\policies\t_ups_101f7f1f_ff000001_version1.rsc 
-	
-	echo makesis
-    makesis tupsinteg_policies1.pkg tupsinteg_policies1_unsigned.sis
-	del /q t_ups_101f7f1f_ff000001_version1.rsc
-
-	echo signsis	
-	signsis tupsinteg_policies1_unsigned.sis tupsinteg_policies1.sis   %SECURITYSOURCEDIR%\testframework\testcertificates\ups\test\root5ca\ca.pem  %SECURITYSOURCEDIR%\testframework\testcertificates\ups\test\root5ca\ca.key.pem
-	del /q tupsinteg_policies1_unsigned.sis
+	call create.bat $(PLATFORM) $(CFG) tupsinteg_policies2 tupsinteg_policies2 ROOT5CA
 
-	echo Copy winscw sis to emulator drive or armv5 to data z tree
-	if "$(PLATFORM)" == "WINSCW" copy /y tupsinteg_policies1.sis %EPOCROOT%epoc32\release\"$(PLATFORM)"\"$(CFG)"\z\tups\integ\packages\tupsinteg_policies1.sis 
-	if "$(PLATFORM)" == "ARMV5" copy /y tupsinteg_policies1.sis %EPOCROOT%epoc32\data\z\tups\integ\packages\tupsinteg_policies1.sis
-	 
-	Rem Removes temporary files.
-	del /q tupsinteg_policies1.sis 
-
-!IF "$(PLATFORM)" == "WINSCW"
-$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\z\tups\integ\packages\tupsinteg_policies2.sis : $(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\Z\private\10283558\policies\t_ups_101f7f1f_ff000001_version2.rsc tupsinteg_policies2.pkg
-!ELSE
-$(EPOCROOT)epoc32\data\z\tups\integ\packages\tupsinteg_policies2.sis : $(EPOCROOT)epoc32\data\z\private\10283558\policies\t_ups_101f7f1f_ff000001_version2.rsc tupsinteg_policies2.pkg
-!ENDIF
 	echo --------------------------------------------------------------
-	echo Building SIS to install policy files post manufacture.
+	echo Building SIS file to install a policy evaluator via SWI
 	echo --------------------------------------------------------------
 	
-	echo RSC file to here
-	if "$(PLATFORM)" == "WINSCW" copy /y %EPOCROOT%epoc32\release\"$(PLATFORM)"\"$(CFG)"\Z\private\10283558\policies\t_ups_101f7f1f_ff000001_version2.rsc 
-	if "$(PLATFORM)" == "ARMV5"  copy /y %EPOCROOT%epoc32\data\z\private\10283558\policies\t_ups_101f7f1f_ff000001_version2.rsc 
+	call create.bat $(PLATFORM) $(CFG) tupsinteg_evaluator1	tupsinteg_evaluator1 ALL
+    
+	echo ---------------------------------------------------------------------------
+	echo Building SIS file to install a policy evaluator and dialog creator via SWI
+	echo ---------------------------------------------------------------------------
 	
-	echo makesis
-    makesis tupsinteg_policies2.pkg tupsinteg_policies2_unsigned.sis
-	del /q t_ups_101f7f1f_ff000001_version2.rsc
-
-	echo signsis	
-	signsis tupsinteg_policies2_unsigned.sis tupsinteg_policies2.sis   %SECURITYSOURCEDIR%\testframework\testcertificates\ups\test\root5ca\ca.pem  	%SECURITYSOURCEDIR%\testframework\testcertificates\ups\test\root5ca\ca.key.pem
-	del /q tupsinteg_policies2_unsigned.sis
+	call create.bat $(PLATFORM) $(CFG) tupsinteg_dialog1 tupsinteg_dialog1 ALL
 
-	echo Copy winscw sis to emulator drive or armv5 to data z tree
-	if "$(PLATFORM)" == "WINSCW" copy /y tupsinteg_policies2.sis %EPOCROOT%epoc32\release\"$(PLATFORM)"\"$(CFG)"\z\tups\integ\packages\tupsinteg_policies2.sis 
-	if "$(PLATFORM)" == "ARMV5" copy /y tupsinteg_policies2.sis %EPOCROOT%epoc32\data\z\tups\integ\packages\tupsinteg_policies2.sis
-	 
-	Rem Removes temporary files.
-	del /q tupsinteg_policies2.sis 
+	echo -------------------------------------- 
+	echo Building SIS to eclipse policy files.
+	echo --------------------------------------
+	
+	call create.bat $(PLATFORM) $(CFG) tupsinteg_eclipse1 tupsinteg_eclipse1 ROOT5CA
 
-!IF "$(PLATFORM)" == "WINSCW"
-MAKEDATA : $(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\z\tups\integ\packages\tupsinteg_post1.sis $(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\z\tups\integ\packages\tupsinteg_policies1.sis $(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\z\tups\integ\packages\tupsinteg_policies2.sis 
-!ELSE
-MAKEDATA : $(EPOCROOT)epoc32\data\z\tups\integ\packages\tupsinteg_post1.sis $(EPOCROOT)epoc32\data\z\tups\integ\packages\tupsinteg_policies1.sis $(EPOCROOT)epoc32\data\z\tups\integ\packages\tupsinteg_policies2.sis 
-!ENDIF
+	echo --------------------------------------------------------------------------
+	echo Building SIS to (attempt to) install policy files (incorrect cert used)
+	echo --------------------------------------------------------------------------
+	
+	call create.bat $(PLATFORM) $(CFG) tupsinteg_policies1	tupsinteg_policies1_negative TESTROOT
+
+	echo -----------------------------------------------------------------------
+	echo Building SIS to install policy files signed with CA cert not in store
+	echo -----------------------------------------------------------------------
+	
+	call create.bat $(PLATFORM) $(CFG) tupsinteg_ca_not_instore tupsinteg_ca_not_instore SELF
+
 	echo
 
 !ENDIF
@@ -111,12 +78,12 @@
 LIB : DO_NOTHING
 RESOURCE : DO_NOTHING
 CLEANLIB : DO_NOTHING
-FINAL : DO_NOTHING
+BLD : DO_NOTHING
 RELEASABLES : DO_NOTHING
 
 SAVESPACE : BLD
 
-BLD : MAKEDATA
+FINAL : MAKEDATA
 
 CLEAN : 
 	if exist %EPOCROOT%epoc32\release\"$(PLATFORM)"\"$(CFG)"\z\tups\integ\packages\tupsinteg_post1.sis 	del /q %EPOCROOT%epoc32\release\"$(PLATFORM)"\"$(CFG)"\z\tups\integ\packages\tupsinteg_post1.sis 
--- a/authorisation/userpromptservice/test/tups/scripts/tups_integ.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/authorisation/userpromptservice/test/tups/scripts/tups_integ.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,7 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
+
 //tups_install
 //PRINT Run Basic test cases PREQ1262 for integration test
 
--- a/authorisation/userpromptservice/test/tups/scripts/tups_integ_post1.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/authorisation/userpromptservice/test/tups/scripts/tups_integ_post1.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,6 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
 
 LOAD_SUITE tupsinteg_post1
 
@@ -36,4 +21,4 @@
 START_TESTCASE SEC-UPS-INTEG-POST-0001
 RUN_TEST_STEP 100 tupsinteg_post1 UPSClientStep z:\tups\integ\scripts\tups_integ.ini populate_sample
 RUN_TEST_STEP 100 tupsinteg_post1 UPSClientStep z:\tups\integ\scripts\tups_integ.ini check_sample
-END_TESTCASE SEC-UPS-INTEG-POST-0001
\ No newline at end of file
+END_TESTCASE SEC-UPS-INTEG-POST-0001
--- a/authorisation/userpromptservice/test/tups/scripts/tups_integ_post1_check.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/authorisation/userpromptservice/test/tups/scripts/tups_integ_post1_check.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,6 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
 
 LOAD_SUITE tupsinteg_post1
 
@@ -35,4 +20,4 @@
 
 START_TESTCASE SEC-UPS-INTEG-POST-0002
 RUN_TEST_STEP 100 tupsinteg_post1 UPSClientStep z:\tups\integ\scripts\tups_integ.ini check_sample
-END_TESTCASE SEC-UPS-INTEG-POST-0002
\ No newline at end of file
+END_TESTCASE SEC-UPS-INTEG-POST-0002
--- a/contentmgmt/contentaccessfwfordrm/engineering/dox/HowToContentAPI.dox	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/contentaccessfwfordrm/engineering/dox/HowToContentAPI.dox	Sat Dec 05 21:41:51 2009 +0000
@@ -1,4 +1,4 @@
-// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2006-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"
Binary file contentmgmt/contentaccessfwfordrm/engineering/features/SGL.GT0250.135 CAF Developer Test Specification v1.0.doc has changed
--- a/contentmgmt/contentaccessfwfordrm/group/CafUtils.mmp	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/contentaccessfwfordrm/group/CafUtils.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -62,7 +62,8 @@
 USERINCLUDE	../inc
 USERINCLUDE	../source/cafutils
 
-OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+// OS_LAYER_SYSTEMINCLUDE_SYMBIAN -- should be this but has an upward dependency on apmstd.h in the MW layer.
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
 OS_LAYER_ESTLIB_SYSTEMINCLUDE
 
 LIBRARY		euser.lib
--- a/contentmgmt/contentaccessfwfordrm/group/caf.mmp	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/contentaccessfwfordrm/group/caf.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -60,7 +60,7 @@
 USERINCLUDE		../inc
 USERINCLUDE		../source/caf
 
-OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+// OS_LAYER_SYSTEMINCLUDE_SYMBIAN -- should be this but has an upward dependency on apmstd.h in the MW layer.
 MW_LAYER_SYSTEMINCLUDE_SYMBIAN
 
 LIBRARY		euser.lib
--- a/contentmgmt/contentaccessfwfordrm/group/f32agent.mmp	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/contentaccessfwfordrm/group/f32agent.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -40,7 +40,7 @@
 
 USERINCLUDE		../source/f32agent
 
-OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+// OS_LAYER_SYSTEMINCLUDE_SYMBIAN -- should be this but has an upward dependency on apmstd.h in the MW layer.
 MW_LAYER_SYSTEMINCLUDE_SYMBIAN
 
 start resource	101FC2CD.rss
--- a/contentmgmt/contentaccessfwfordrm/group/f32agentui.mmp	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/contentaccessfwfordrm/group/f32agentui.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -35,7 +35,8 @@
 
 USERINCLUDE		../inc
 
-OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+// OS_LAYER_SYSTEMINCLUDE_SYMBIAN -- should be this but has an upward dependency on apmstd.h in the MW layer.
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
 
 LIBRARY			euser.lib
 SMPSAFE
--- a/contentmgmt/contentaccessfwfordrm/group/reccaf.mmp	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/contentaccessfwfordrm/group/reccaf.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -39,7 +39,8 @@
 USERINCLUDE		../source/caf 
 USERINCLUDE		../source/reccaf
 
-OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+// OS_LAYER_SYSTEMINCLUDE_SYMBIAN -- should be this but has an upward dependency on apmstd.h in the MW layer.
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
 
 LIBRARY			euser.lib apmime.lib estor.lib
 LIBRARY			caf.lib efsrv.lib 
--- a/contentmgmt/contentaccessfwfordrm/source/f32agent/f32agentdata.cpp	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/contentaccessfwfordrm/source/f32agent/f32agentdata.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -362,7 +362,7 @@
 	{
 	if(aEncryptedInputDataPacket.Length() <= 0)
 		{
-		User::Leave(KErrInsufficientDataPacketLength);
+		return KErrInsufficientDataPacketLength;
 		}
 	
 	aDecryptedOutputDataPacket = aEncryptedInputDataPacket;
--- a/contentmgmt/referencedrmagent/RefTestAgent/BWINS/rtaparser_v3u.def	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/BWINS/rtaparser_v3u.def	Sat Dec 05 21:41:51 2009 +0000
@@ -41,7 +41,7 @@
 	?Read@CDrmFileContent@ReferenceTestAgent@@QAEH_JAAVTDes8@@H@Z @ 40 NONAME ; int ReferenceTestAgent::CDrmFileContent::Read(long long, class TDes8 &, int)
 	?GetStringAttribute@CWmdrmContentParser@ReferenceTestAgent@@QBEHHAAVTDes16@@@Z @ 41 NONAME ; int ReferenceTestAgent::CWmdrmContentParser::GetStringAttribute(int, class TDes16 &) const
 	?GetAttribute@CWmdrmContentParser@ReferenceTestAgent@@QBEHHAAH@Z @ 42 NONAME ; int ReferenceTestAgent::CWmdrmContentParser::GetAttribute(int, int &) const
-	?GetStringAttributeSet@CWmdrmContentParser@ReferenceTestAgent@@QBEHAAVRStringAttributeSet@ContentAccess@@@Z @ 43 NONAME ; int ReferenceTestAgent::CWmdrmContentParser::GetStringAttributeSet(class ContentAccess::RStringAttributeSet &) const
+	?GetStringAttributeSetL@CWmdrmContentParser@ReferenceTestAgent@@QBEXAAVRStringAttributeSet@ContentAccess@@@Z @ 43 NONAME ; void ReferenceTestAgent::CWmdrmContentParser::GetStringAttributeSetL(class ContentAccess::RStringAttributeSet &) const
 	?GetAttributeSet@CWmdrmContentParser@ReferenceTestAgent@@QBEHAAVRAttributeSet@ContentAccess@@@Z @ 44 NONAME ; int ReferenceTestAgent::CWmdrmContentParser::GetAttributeSet(class ContentAccess::RAttributeSet &) const
 	?NewL@CWmdrmContentParser@ReferenceTestAgent@@SAPAV12@ABVTDesC8@@@Z @ 45 NONAME ; class ReferenceTestAgent::CWmdrmContentParser * ReferenceTestAgent::CWmdrmContentParser::NewL(class TDesC8 const &)
 
--- a/contentmgmt/referencedrmagent/RefTestAgent/EABI/rtaParser_v3u.DEF	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/EABI/rtaParser_v3u.DEF	Sat Dec 05 21:41:51 2009 +0000
@@ -83,5 +83,5 @@
 	_ZNK18ReferenceTestAgent19CWmdrmContentParser12GetAttributeEiRi @ 82 NONAME
 	_ZNK18ReferenceTestAgent19CWmdrmContentParser15GetAttributeSetERN13ContentAccess13RAttributeSetE @ 83 NONAME
 	_ZNK18ReferenceTestAgent19CWmdrmContentParser18GetStringAttributeEiR6TDes16 @ 84 NONAME
-	_ZNK18ReferenceTestAgent19CWmdrmContentParser21GetStringAttributeSetERN13ContentAccess19RStringAttributeSetE @ 85 NONAME
+	_ZNK18ReferenceTestAgent19CWmdrmContentParser22GetStringAttributeSetLERN13ContentAccess19RStringAttributeSetE @ 85 NONAME
 
--- a/contentmgmt/referencedrmagent/RefTestAgent/RTAParser/wmdrmcontentparser.cpp	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/RTAParser/wmdrmcontentparser.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -129,26 +129,15 @@
 	return err;
 	}
 
-EXPORT_C TInt CWmdrmContentParser::GetStringAttributeSet(RStringAttributeSet &aStringAttributeSet) const
+EXPORT_C void CWmdrmContentParser::GetStringAttributeSetL(RStringAttributeSet &aStringAttributeSet) const
 	{
-	TInt err = KErrNone;
 	for(TInt i = 0; i < aStringAttributeSet.Count(); i++)
 		{
 		TInt attribute = aStringAttributeSet[i];
-		HBufC* value = NULL;
-		TRAP(err, value = HBufC::NewL(iStringAttributeSet.GetValueLength(attribute)));
-		CleanupStack::PushL(value);
-
+		HBufC* value = HBufC::NewLC(iStringAttributeSet.GetValueLength(attribute));
 		TPtr valuePtr = value->Des();
-		err = GetStringAttribute(attribute, valuePtr);
-		if(err != KErrNone)
-			{
-			CleanupStack::PopAndDestroy(value);
-			break;
-			}
-
-		aStringAttributeSet.SetValue(attribute, valuePtr, err);
+		User::LeaveIfError(GetStringAttribute(attribute, valuePtr));
+		aStringAttributeSet.SetValue(attribute, valuePtr, KErrNone);
 		CleanupStack::PopAndDestroy(value);
 		}
-	return err;
 	}
--- a/contentmgmt/referencedrmagent/RefTestAgent/RTAServer/Server/rtacontenthandler.cpp	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/RTAServer/Server/rtacontenthandler.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -485,7 +485,7 @@
     attributeSet.InternalizeL(readStream);     
     CleanupStack::PopAndDestroy(2, value);     
          
-    iWmdrmContentObject->GetStringAttributeSet(attributeSet);     
+    iWmdrmContentObject->GetStringAttributeSetL(attributeSet);     
       
     // Write the object out to a buffer, send to client     
     CBufFlat* buf = CBufFlat::NewL(50);     
--- a/contentmgmt/referencedrmagent/RefTestAgent/RTAServer/Server/rtadatahandler.cpp	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/RTAServer/Server/rtadatahandler.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -453,7 +453,7 @@
     attributeSet.InternalizeL(readStream);     
     CleanupStack::PopAndDestroy(2, value);     
          
-    iWmdrmContentObject->GetStringAttributeSet(attributeSet);     
+    iWmdrmContentObject->GetStringAttributeSetL(attributeSet);     
       
     // Write the object out to a buffer, send to client     
     CBufFlat* buf = CBufFlat::NewL(50);     
--- a/contentmgmt/referencedrmagent/RefTestAgent/RTAServer/Server/rtamanagerhandler.cpp	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/RTAServer/Server/rtamanagerhandler.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -655,7 +655,7 @@
     attributeSet.InternalizeL(readStream);     
     CleanupStack::PopAndDestroy(2, value);     
          
-    iWmdrmContentObject->GetStringAttributeSet(attributeSet);     
+    iWmdrmContentObject->GetStringAttributeSetL(attributeSet);     
       
     // Write the object out to a buffer, send to client     
     CBufFlat* buf = CBufFlat::NewL(50);     
--- a/contentmgmt/referencedrmagent/RefTestAgent/RTAUtils/scripts/rta.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/RTAUtils/scripts/rta.script	Sat Dec 05 21:41:51 2009 +0000
@@ -17,9 +17,9 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
--- a/contentmgmt/referencedrmagent/RefTestAgent/RTAUtils/scripts/rta_64bit.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/RTAUtils/scripts/rta_64bit.script	Sat Dec 05 21:41:51 2009 +0000
@@ -17,9 +17,9 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
--- a/contentmgmt/referencedrmagent/RefTestAgent/inc/wmdrmcontentparser.h	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/inc/wmdrmcontentparser.h	Sat Dec 05 21:41:51 2009 +0000
@@ -41,7 +41,7 @@
 		IMPORT_C TInt GetAttribute(TInt aAttribute, TInt& aValue) const;
 		IMPORT_C TInt GetStringAttribute(TInt aAttribute, TDes& aValue) const;
 		IMPORT_C TInt GetAttributeSet(ContentAccess::RAttributeSet &aAttributeSet) const; 
-		IMPORT_C TInt GetStringAttributeSet(ContentAccess::RStringAttributeSet &aStringAttributeSet) const;
+		IMPORT_C void GetStringAttributeSetL(ContentAccess::RStringAttributeSet &aStringAttributeSet) const;
 		
 	private:
 		CWmdrmContentParser();
--- a/contentmgmt/referencedrmagent/tcaf/scripts/Consumerstep.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/tcaf/scripts/Consumerstep.script	Sat Dec 05 21:41:51 2009 +0000
@@ -17,9 +17,9 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
--- a/contentmgmt/referencedrmagent/tcaf/scripts/ContentStep.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/tcaf/scripts/ContentStep.script	Sat Dec 05 21:41:51 2009 +0000
@@ -17,9 +17,9 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
--- a/contentmgmt/referencedrmagent/tcaf/scripts/cafutils.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/tcaf/scripts/cafutils.script	Sat Dec 05 21:41:51 2009 +0000
@@ -17,9 +17,9 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
--- a/contentmgmt/referencedrmagent/tcaf/scripts/consumerstep_64bit.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/tcaf/scripts/consumerstep_64bit.script	Sat Dec 05 21:41:51 2009 +0000
@@ -17,9 +17,9 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
--- a/contentmgmt/referencedrmagent/tcaf/scripts/contentiteratorstep.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/tcaf/scripts/contentiteratorstep.script	Sat Dec 05 21:41:51 2009 +0000
@@ -17,9 +17,9 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
--- a/contentmgmt/referencedrmagent/tcaf/scripts/drmfileperformance_armv5.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/tcaf/scripts/drmfileperformance_armv5.script	Sat Dec 05 21:41:51 2009 +0000
@@ -17,9 +17,9 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
--- a/contentmgmt/referencedrmagent/tcaf/scripts/managerstep.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/tcaf/scripts/managerstep.script	Sat Dec 05 21:41:51 2009 +0000
@@ -17,9 +17,9 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
--- a/contentmgmt/referencedrmagent/tcaf/scripts/nodrmcapsteps.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/tcaf/scripts/nodrmcapsteps.script	Sat Dec 05 21:41:51 2009 +0000
@@ -17,9 +17,9 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
--- a/contentmgmt/referencedrmagent/tcaf/scripts/oom.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/tcaf/scripts/oom.script	Sat Dec 05 21:41:51 2009 +0000
@@ -17,9 +17,9 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
--- a/contentmgmt/referencedrmagent/tcaf/scripts/performance.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/tcaf/scripts/performance.script	Sat Dec 05 21:41:51 2009 +0000
@@ -17,9 +17,9 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
--- a/contentmgmt/referencedrmagent/tcaf/scripts/recognize.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/tcaf/scripts/recognize.script	Sat Dec 05 21:41:51 2009 +0000
@@ -17,9 +17,9 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
--- a/contentmgmt/referencedrmagent/tcaf/scripts/rightsmanagerstep.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/tcaf/scripts/rightsmanagerstep.script	Sat Dec 05 21:41:51 2009 +0000
@@ -17,9 +17,9 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
--- a/contentmgmt/referencedrmagent/tcaf/scripts/stringattributes.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/tcaf/scripts/stringattributes.script	Sat Dec 05 21:41:51 2009 +0000
@@ -17,9 +17,9 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
--- a/contentmgmt/referencedrmagent/tcaf/scripts/supply.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/tcaf/scripts/supply.script	Sat Dec 05 21:41:51 2009 +0000
@@ -17,9 +17,9 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
--- a/contentmgmt/referencedrmagent/tcaf/scripts/supply_without_http.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/tcaf/scripts/supply_without_http.script	Sat Dec 05 21:41:51 2009 +0000
@@ -17,9 +17,9 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
--- a/contentmgmt/referencedrmagent/tcaf/scripts/tcaf.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/tcaf/scripts/tcaf.script	Sat Dec 05 21:41:51 2009 +0000
@@ -17,9 +17,9 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
--- a/contentmgmt/referencedrmagent/tcaf/scripts/tcafhelper.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/tcaf/scripts/tcafhelper.script	Sat Dec 05 21:41:51 2009 +0000
@@ -17,9 +17,9 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
--- a/contentmgmt/referencedrmagent/tcaf/scripts/tcafnodrmcap.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/tcaf/scripts/tcafnodrmcap.script	Sat Dec 05 21:41:51 2009 +0000
@@ -17,9 +17,9 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
--- a/contentmgmt/referencedrmagent/tcaf/scripts/tcafwmdrmsupport.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/tcaf/scripts/tcafwmdrmsupport.script	Sat Dec 05 21:41:51 2009 +0000
@@ -17,9 +17,9 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
--- a/contentmgmt/referencedrmagent/tcaf/scripts/testcleanupstep.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/contentmgmt/referencedrmagent/tcaf/scripts/testcleanupstep.script	Sat Dec 05 21:41:51 2009 +0000
@@ -17,9 +17,9 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
--- a/crypto/weakcrypto/inc/padding.h	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcrypto/inc/padding.h	Sat Dec 05 21:41:51 2009 +0000
@@ -204,7 +204,7 @@
 	* @param aBlockBytes	The block size in bytes.
 	* @return				A pointer to the new CPaddingPKCS1Signature object.
 	*/
-	IMPORT_C static CPaddingPKCS1Signature* CPaddingPKCS1Signature::NewLC(
+	IMPORT_C static CPaddingPKCS1Signature* NewLC(
 		TInt aBlockBytes);
 	void DoPadL(const TDesC8& aInput,TDes8& aOutput);
 	void UnPadL(const TDesC8& aInput,TDes8& aOutput);
--- a/crypto/weakcryptospi/inc/padding.h	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/inc/padding.h	Sat Dec 05 21:41:51 2009 +0000
@@ -202,7 +202,7 @@
 	* @param aBlockBytes	The block size in bytes.
 	* @return				A pointer to the new CPaddingPKCS1Signature object.
 	*/
-	IMPORT_C static CPaddingPKCS1Signature* CPaddingPKCS1Signature::NewLC(
+	IMPORT_C static CPaddingPKCS1Signature* NewLC(
 		TInt aBlockBytes);
 	void UnPadL(const TDesC8& aInput,TDes8& aOutput);
 	TInt MinPaddingLength(void) const;
--- a/crypto/weakcryptospi/source/bigint/mont.cpp	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/source/bigint/mont.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -56,7 +56,7 @@
 	{
 	}
 
-TInteger& CMontgomeryStructure::ConvertIn(TInteger& aInteger) const
+TInteger& CMontgomeryStructure::ConvertInL(TInteger& aInteger) const
 	{
 	aInteger <<= WordsToBits(iModulus.Size());
 	aInteger %= iModulus;
@@ -99,7 +99,7 @@
 	{
 	RInteger a = RInteger::NewL(aA);
 	CleanupStack::PushL(a);
-	DoSquareL(iResult, ConvertIn(a));
+	DoSquareL(iResult, ConvertInL(a));
 	ConvertOutL(iResult);
 	CleanupStack::PopAndDestroy(&a);
 	return iResult;
@@ -138,8 +138,8 @@
 	// g2 <- g^2
 	RInteger g2 = RInteger::NewL(aBase);
 	CleanupStack::PushL(g2);
-	ConvertIn(g2);
-	//ConvertIn can shrink g2, because we call DoSquare on g2, g2 must be the same size as the modulus
+	ConvertInL(g2);
+	//ConvertInL can shrink g2, because we call DoSquare on g2, g2 must be the same size as the modulus
 	g2.CleanGrowL(iModulus.Size());
 	RInteger g1 = RInteger::NewL(g2);
 	CleanupStack::PushL(g1);
@@ -164,7 +164,7 @@
 	// 2 A <- 1, i <- t
 	RInteger temp = RInteger::NewL(TInteger::One());
 	CleanupStack::PushL(temp);
-	ConvertIn(temp);
+	ConvertInL(temp);
 
 	RInteger& A = iResult;
 	//Set A to one converted in for this modulus without changing the memory size of A (iResult)
@@ -214,7 +214,7 @@
 	{
 	RInteger temp = RInteger::NewL(aInteger);
 	CleanupStack::PushL(temp);
-	ConvertIn(temp);
+	ConvertInL(temp);
 	iResult.CopyL(ConvertOutL(temp), EFalse);
 	CleanupStack::PopAndDestroy(&temp);
 	return iResult;
@@ -235,7 +235,7 @@
 	CleanupStack::PushL(a);
 	RInteger b = RInteger::NewL(aB);
 	CleanupStack::PushL(b);
-	DoMultiplyL(iResult, ConvertIn(a), ConvertIn(b));
+	DoMultiplyL(iResult, ConvertInL(a), ConvertInL(b));
 	ConvertOutL(iResult);
 	CleanupStack::PopAndDestroy(&b); 
 	CleanupStack::PopAndDestroy(&a); 
--- a/crypto/weakcryptospi/source/bigint/mont.h	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/source/bigint/mont.h	Sat Dec 05 21:41:51 2009 +0000
@@ -45,7 +45,7 @@
 protected:
 	void DoMultiplyL(TInteger& aResult, const TInteger& aA, const TInteger& aB) const;
 	void DoSquareL(TInteger& aResult, const TInteger& aA) const;
-	TInteger& ConvertIn(TInteger& aInteger) const;
+	TInteger& ConvertInL(TInteger& aInteger) const;
 	TInteger& ConvertOutL(TInteger& aInteger) const;
 	CMontgomeryStructure();
 private:
--- a/crypto/weakcryptospi/test/tasymmetric/scripts/asymmetricPerformance.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tasymmetric/scripts/asymmetricPerformance.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-ASYMMETRICPERFORMANCE-0001
--- a/crypto/weakcryptospi/test/tasymmetric/scripts/tasymmetrictests.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tasymmetric/scripts/tasymmetrictests.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-TASYMMETRICTESTS-0001
--- a/crypto/weakcryptospi/test/tbigint/scripts/tbasicmathstests.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tbigint/scripts/tbasicmathstests.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-TBASICMATHSTESTS-0001
--- a/crypto/weakcryptospi/test/tbigint/scripts/tconstructiontests.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tbigint/scripts/tconstructiontests.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-TCONSTRUCTIONTESTS-0001
--- a/crypto/weakcryptospi/test/tbigint/scripts/tmontgomerytests.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tbigint/scripts/tmontgomerytests.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-TMONTGOMERYTESTS-0001
--- a/crypto/weakcryptospi/test/tbigint/scripts/tperformancetests.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tbigint/scripts/tperformancetests.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-TPERFORMANCETESTS-0001
--- a/crypto/weakcryptospi/test/tbigint/scripts/tprimefailuretests.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tbigint/scripts/tprimefailuretests.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-TPRIMEFAILURETESTS-0001
--- a/crypto/weakcryptospi/test/tbigint/scripts/tprimegen.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tbigint/scripts/tprimegen.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-TPRIMEGEN-0001
--- a/crypto/weakcryptospi/test/tbigint/scripts/tprimetests.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tbigint/scripts/tprimetests.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-TPRIMETESTS-0001
--- a/crypto/weakcryptospi/test/tbigint/scripts/tprimetests2.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tbigint/scripts/tprimetests2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-TPRIMETESTS2-0001
--- a/crypto/weakcryptospi/test/tcryptospi/scripts/tcryptospi.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tcryptospi/scripts/tcryptospi.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,22 +13,7 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
-//
+
 PRINT Run all Te_CryptoSpi Suite Tests
 
 //
--- a/crypto/weakcryptospi/test/tcryptospi/scripts/tcryptospi_v2.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tcryptospi/scripts/tcryptospi_v2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,22 +13,7 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
-//
+
 PRINT Run all Te_CryptoSpi Suite Tests
 
 //
--- a/crypto/weakcryptospi/test/tcryptospi/scripts/te_asymmetricciphertestcases.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tcryptospi/scripts/te_asymmetricciphertestcases.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,7 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
+
 
 PRINT Run all te_ASymmetricCipherTestCases Tests
 //
--- a/crypto/weakcryptospi/test/tcryptospi/scripts/te_dummyeccciphertestcases.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tcryptospi/scripts/te_dummyeccciphertestcases.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,7 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
+
 
 PRINT Run all te_DummyEccCipherTestCases
 //
--- a/crypto/weakcryptospi/test/tcryptospi/scripts/te_hash_test_cases.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tcryptospi/scripts/te_hash_test_cases.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,7 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
+
 
 PRINT Run all te_Hash_Test_Cases Tests
 //
--- a/crypto/weakcryptospi/test/tcryptospi/scripts/te_hashhmactestcases.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tcryptospi/scripts/te_hashhmactestcases.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,7 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
+
 
 PRINT Run all te_HashHmacTestCases Tests
 //
--- a/crypto/weakcryptospi/test/tcryptospi/scripts/te_hashhmactestcases_v2.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tcryptospi/scripts/te_hashhmactestcases_v2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,7 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
+
 
 PRINT Run all te_HashHmacTestCases Tests
 //
--- a/crypto/weakcryptospi/test/tcryptospi/scripts/te_mac_test_cases.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tcryptospi/scripts/te_mac_test_cases.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,7 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
+
 
 PRINT Run all te_mac_test_cases Tests
 //
--- a/crypto/weakcryptospi/test/tcryptospi/scripts/te_miscellaneoustestcases.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tcryptospi/scripts/te_miscellaneoustestcases.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,22 +13,7 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
-//
+
 PRINT Run all te_MiscellaneousTestCases Tests
 
 //
--- a/crypto/weakcryptospi/test/tcryptospi/scripts/te_plugincharstestcases.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tcryptospi/scripts/te_plugincharstestcases.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,22 +13,7 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
-//
+
 PRINT Run all te_plugincharstestcases Suite Tests
 
 //
--- a/crypto/weakcryptospi/test/tcryptospi/scripts/te_plugincharstestcases_v2.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tcryptospi/scripts/te_plugincharstestcases_v2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,22 +13,7 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
-//
+
 PRINT Run all te_plugincharstestcases Suite Tests
 
 //
--- a/crypto/weakcryptospi/test/tcryptospi/scripts/te_pluginloadtestcases.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tcryptospi/scripts/te_pluginloadtestcases.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,7 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
+
 
 PRINT Run all te_pluginload Test Cases
 //
--- a/crypto/weakcryptospi/test/tcryptospi/scripts/te_randomtestcases.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tcryptospi/scripts/te_randomtestcases.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,7 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
+
 
 PRINT Run all te_RandomTestCases Tests
 //
--- a/crypto/weakcryptospi/test/tcryptospi/scripts/te_ruleselectiontestcases.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tcryptospi/scripts/te_ruleselectiontestcases.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,22 +13,7 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
-//
+
 PRINT Run all te_ruleselection Suite Tests
 
 //
--- a/crypto/weakcryptospi/test/tcryptospi/scripts/te_ruleselectiontestcases_v2.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tcryptospi/scripts/te_ruleselectiontestcases_v2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,22 +13,7 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
-//
+
 PRINT Run all te_ruleselection Suite Tests
 
 //
--- a/crypto/weakcryptospi/test/tcryptospi/scripts/te_symmetricciphertestcases.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tcryptospi/scripts/te_symmetricciphertestcases.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,7 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
+
 
 PRINT Run all te_SymmetricCipherTestCases Tests
 //
--- a/crypto/weakcryptospi/test/tpadding/scripts/tpadding.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tpadding/scripts/tpadding.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,22 +13,7 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
-//
+
 PRINT Run all tpadding tests 
 //
 LOAD_SUITE tpaddingserver
--- a/crypto/weakcryptospi/test/tpadding/scripts/tpaddingudeb.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tpadding/scripts/tpaddingudeb.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,22 +13,7 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
-//
+
 PRINT Run all tpadding tests 
 //
 LOAD_SUITE tpaddingserver
--- a/crypto/weakcryptospi/test/tpbe/scripts/tpbetests.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tpbe/scripts/tpbetests.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-TPBETESTS-0001
--- a/crypto/weakcryptospi/test/tpbe/scripts/tpbetests_v2.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tpbe/scripts/tpbetests_v2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-TPBETESTS_V2-0001
--- a/crypto/weakcryptospi/test/tpkcs5kdf/scripts/tpkcs12kdftests.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tpkcs5kdf/scripts/tpkcs12kdftests.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-TPKCS12KDFTESTS-0001
--- a/crypto/weakcryptospi/test/tsymmetric/scripts/AESECBVectorsScript.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tsymmetric/scripts/AESECBVectorsScript.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-AESECBVECTORSSCRIPT-0001
--- a/crypto/weakcryptospi/test/tsymmetric/scripts/AESECB_KAT_VK.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tsymmetric/scripts/AESECB_KAT_VK.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-AESECB_KAT_VK-0001
--- a/crypto/weakcryptospi/test/tsymmetric/scripts/AESECB_KAT_VT.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tsymmetric/scripts/AESECB_KAT_VT.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-AESECB_KAT_VT-0001
--- a/crypto/weakcryptospi/test/tsymmetric/scripts/AESMonteCarloDecryptCBC128.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tsymmetric/scripts/AESMonteCarloDecryptCBC128.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-AESMONTECARLODECRYPTCBC128-0001
--- a/crypto/weakcryptospi/test/tsymmetric/scripts/AESMonteCarloDecryptCBC192.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tsymmetric/scripts/AESMonteCarloDecryptCBC192.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-AESMONTECARLODECRYPTCBC192-0001
--- a/crypto/weakcryptospi/test/tsymmetric/scripts/AESMonteCarloDecryptCBC256.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tsymmetric/scripts/AESMonteCarloDecryptCBC256.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-AESMONTECARLODECRYPTCBC256-0001
--- a/crypto/weakcryptospi/test/tsymmetric/scripts/AESMonteCarloDecryptECB128.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tsymmetric/scripts/AESMonteCarloDecryptECB128.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-AESMONTECARLODECRYPTECB128-0001
--- a/crypto/weakcryptospi/test/tsymmetric/scripts/AESMonteCarloDecryptECB192.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tsymmetric/scripts/AESMonteCarloDecryptECB192.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-AESMONTECARLODECRYPTECB192-0001
--- a/crypto/weakcryptospi/test/tsymmetric/scripts/AESMonteCarloDecryptECB256.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tsymmetric/scripts/AESMonteCarloDecryptECB256.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-AESMONTECARLODECRYPTECB256-0001
--- a/crypto/weakcryptospi/test/tsymmetric/scripts/AESMonteCarloEncryptCBC128.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tsymmetric/scripts/AESMonteCarloEncryptCBC128.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-AESMONTECARLOENCRYPTCBC128-0001
--- a/crypto/weakcryptospi/test/tsymmetric/scripts/AESMonteCarloEncryptCBC256.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tsymmetric/scripts/AESMonteCarloEncryptCBC256.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-AESMONTECARLOENCRYPTCBC256-0001
--- a/crypto/weakcryptospi/test/tsymmetric/scripts/AESMonteCarloEncryptECB128.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tsymmetric/scripts/AESMonteCarloEncryptECB128.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-AESMONTECARLOENCRYPTECB128-0001
--- a/crypto/weakcryptospi/test/tsymmetric/scripts/AESMonteCarloEncryptECB192.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tsymmetric/scripts/AESMonteCarloEncryptECB192.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-AESMONTECARLOENCRYPTECB192-0001
--- a/crypto/weakcryptospi/test/tsymmetric/scripts/AESMonteCarloEncryptECB256.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tsymmetric/scripts/AESMonteCarloEncryptECB256.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-AESMONTECARLOENCRYPTECB256-0001
--- a/crypto/weakcryptospi/test/tsymmetric/scripts/aesmontecarloencryptcbc192A.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tsymmetric/scripts/aesmontecarloencryptcbc192A.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-AESMONTECARLOENCRYPTCBC192A-0001
--- a/crypto/weakcryptospi/test/tsymmetric/scripts/aesmontecarloencryptcbc192B.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tsymmetric/scripts/aesmontecarloencryptcbc192B.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-AESMONTECARLOENCRYPTCBC192B-0001
--- a/crypto/weakcryptospi/test/tsymmetric/scripts/symmetricOOMtests.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tsymmetric/scripts/symmetricOOMtests.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-SYMMETRICOOMTESTS-0001
--- a/crypto/weakcryptospi/test/tsymmetric/scripts/tsymmetricperformancetests.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tsymmetric/scripts/tsymmetricperformancetests.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-TSYMMETRICPERFORMANCETESTS-0001
--- a/crypto/weakcryptospi/test/tsymmetric/scripts/tsymmetrictests.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/crypto/weakcryptospi/test/tsymmetric/scripts/tsymmetrictests.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CRYPTOSPI-TSYMMETRICTESTS-0002
Binary file cryptomgmtlibs/securitydocs/How-to_Configure_Java_Security_0.3.doc has changed
Binary file cryptomgmtlibs/securitydocs/How-to_Configure_Software_Installation_Policies_1.1.doc has changed
Binary file cryptomgmtlibs/securitydocs/How-to_Configure_the_File_Certificate_Store_1.1.doc has changed
Binary file cryptomgmtlibs/securitydocs/How-to_Configure_the_SWI_Certificate_Store_1.1.doc has changed
Binary file cryptomgmtlibs/securitydocs/How-to_Create_a_Root_Certificate_for_Inclusion_in_the_SWI_Certificate_Store_as_a_Trust_Anchor_1.1.doc has changed
Binary file cryptomgmtlibs/securitydocs/How-to_Deploy_a_Writeable_SWI_Certificate_Store_1.1.doc has changed
Binary file cryptomgmtlibs/securitydocs/How-to_Diagnose_Installation_Failures_1.1.doc has changed
Binary file cryptomgmtlibs/securitydocs/How-to_migrate_CryptoSPI_APIs.doc has changed
Binary file cryptomgmtlibs/securitydocs/Introduction_Cryptography_And_Key_Management.doc has changed
Binary file cryptomgmtlibs/securitydocs/SGL.GT0176.053.Rev2.1_DRM_Functional_Specification.doc has changed
Binary file cryptomgmtlibs/securitydocs/SGL.GT0235.201_Security_9.2_Functional_Specification.doc has changed
Binary file cryptomgmtlibs/securitydocs/SGL.GT0235.253_Native_SWI_UI_Flow.doc has changed
Binary file cryptomgmtlibs/securitydocs/SGL.GT0255.265_Security Subsystem Architectural Description.doc has changed
Binary file cryptomgmtlibs/securitydocs/SGL.GT0255.350_SWI_Troubleshooting.doc has changed
Binary file cryptomgmtlibs/securitydocs/SGL.GT0255.351_Security_Release_Note.doc has changed
Binary file cryptomgmtlibs/securitydocs/SGL.GT0256.350_How_to_Configure_Symbian_Security_Components.doc has changed
Binary file cryptomgmtlibs/securitydocs/SGL.TS0013.604_Secure Software Install Design.doc has changed
Binary file cryptomgmtlibs/securitydocs/SWI UI Callback Sequence.doc has changed
Binary file cryptomgmtlibs/securitydocs/Software_Install_SIS File Format.doc has changed
--- a/cryptomgmtlibs/securitytestfw/test/autotesting/dummytefscript.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptomgmtlibs/securitytestfw/test/autotesting/dummytefscript.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,6 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
 //! @file
 // Dummy TEF Script
 PRINT This is a dummy TEF script, it's purpose is to allow particular batch files to be run as part of the ONB (via pre-command arguments to DABS) without any associated tests being run with them.
--- a/cryptomgmtlibs/securitytestfw/test/autotesting/runcertman_9.5.bat	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptomgmtlibs/securitytestfw/test/autotesting/runcertman_9.5.bat	Sat Dec 05 21:41:51 2009 +0000
@@ -31,9 +31,6 @@
 del c:\system\data\cacerts.dat
 
 del c:\system\data\certclients.dat
-t_certstore c:\tcertstore\scripts\t_certstore_sha2.txt c:\testresults\t_certstore_sha2.txt
-move c:\testresults\t_certstore_sha2.txt e:\testresults\t_certstore_sha2.txt
-
 t_certstore c:\tcertstore\scripts\t_certstore_sha2.script c:\testresults\t_certstore_sha2.htm
 move c:\testresults\t_certstore_sha2.htm e:\testresults\t_certstore_sha2.htm
 
@@ -68,7 +65,7 @@
 
 del c:\system\data\cacerts.dat
 t_certstore c:\tcertstore\scripts\swicertstore1.script c:\logs\testexecute\swicertstore1.htm
-move c:\logs\testexecute\swicertstore.htm e:\testresults\swicertstore.htm
+move c:\logs\testexecute\swicertstore1.htm e:\testresults\swicertstore1.htm
 
 t_certstore c:\tcertstore\scripts\swicertstore4.script c:\logs\testexecute\swicertstore4.htm
 move c:\logs\testexecute\swicertstore4.htm e:\testresults\swicertstore4.htm
--- a/cryptomgmtlibs/securitytestfw/test/autotesting/runfiletokens_disableauth_with_wmdrm.bat	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptomgmtlibs/securitytestfw/test/autotesting/runfiletokens_disableauth_with_wmdrm.bat	Sat Dec 05 21:41:51 2009 +0000
@@ -52,7 +52,7 @@
 t_keystore c:\tkeystore\scripts\oldserver_newfeature.script c:\logs\testexecute\oldserver_newfeature.htm
 move c:\logs\testexecute\oldserver_newfeature.htm e:\testresults\oldserver_newfeature.htm
 
-t_keystore c:\tkeystore\scripts\thwkeystore.txt c:\testresults\thwkeystore.log
-move c:\testresults\thwkeystore.log e:\testresults\thwkeystore.log
+t_keystore c:\tkeystore\scripts\thwkeystore.script c:\logs\testexecute\thwkeystore.htm
+move c:\logs\testexecute\thwkeystore.htm e:\testresults\thwkeystore.htm
 
 del /s c:\tkeystore\
--- a/cryptomgmtlibs/securitytestfw/test/autotesting/runfiletokens_useauth.bat	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptomgmtlibs/securitytestfw/test/autotesting/runfiletokens_useauth.bat	Sat Dec 05 21:41:51 2009 +0000
@@ -39,8 +39,8 @@
 T_KEYSTORE c:\tkeystore\scripts\tkeystore_useauth.script	c:\logs\testexecute\tkeystore_useauth.htm
 move c:\logs\testexecute\tkeystore_useauth.htm e:\testresults\tkeystore_useauth.htm
 
-T_KEYSTORE c:\tkeystore\scripts\authobjects_useauth.txt c:\tkeystore_authobjects_useauth.log
-move c:\tkeystore_authobjects_useauth.log e:\testresults\tkeystore_authobjects_useauth.log
+T_KEYSTORE c:\tkeystore\scripts\authobjects_useauth.script c:\logs\testexecute\tkeystore_authobjects_useauth.htm
+move c:\logs\testexecute\tkeystore_authobjects_useauth.htm e:\testresults\tkeystore_authobjects_useauth.htm
 
 T_KEYSTORE c:\tkeystore\scripts\exportscript_useauth.script c:\logs\testexecute\tkeystore_export_useauth.htm
 move c:\logs\testexecute\tkeystore_export_useauth.htm c:\testresults\tkeystore_export_useauth.htm
--- a/cryptomgmtlibs/securitytestfw/test/autotesting/testMakesis.pl	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptomgmtlibs/securitytestfw/test/autotesting/testMakesis.pl	Sat Dec 05 21:41:51 2009 +0000
@@ -11,9 +11,10 @@
 #
 # Contributors:
 #
-# Description: 
+# Description:
 # Perl script that creates PKG files and test MAKESIS tools with different ranges
-#
+# 
+
 
 $logFile = "/epoc32/winscw/c/makesis_test.txt";
 $makesisExeLocation = "/epoc32/tools/makesis";
--- a/cryptomgmtlibs/securitytestfw/test/autotesting/test_spec_sdp_9.5.txt	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptomgmtlibs/securitytestfw/test/autotesting/test_spec_sdp_9.5.txt	Sat Dec 05 21:41:51 2009 +0000
@@ -239,8 +239,7 @@
 t_certstore, \logs\testexecute\tcertstore_conf1.2.htm,, -Dtextshell -- \tcertstore\scripts\unifiedcertstore2-conf1.script \logs\testexecute\tcertstore_conf1.2.htm, 300, UDEB#UREL, \epoc32\winscw\c\twtlscert\scripts\batchfiles\precert_backup.bat, \epoc32\winscw\c\twtlscert\scripts\batchfiles\postcert_restore.bat
 t_certstore, \logs\testexecute\tcertstore_conf1.3.htm,, -Dtextshell -- \tcertstore\scripts\unifiedcertstore3-conf1.script \logs\testexecute\tcertstore_conf1.3.htm, 300, UDEB#UREL, \epoc32\winscw\c\twtlscert\scripts\batchfiles\precert_backup.bat, \epoc32\winscw\c\twtlscert\scripts\batchfiles\postcert_restore.bat
 t_certstore, \logs\testexecute\t_handle_1.htm,, -Dtextshell -- \tcertstore\scripts\t_handle_1.script \logs\testexecute\t_handle_1.htm, 300, UDEB#UREL, \epoc32\winscw\c\twtlscert\scripts\batchfiles\precert_backup.bat, \epoc32\winscw\c\twtlscert\scripts\batchfiles\postcert_restore.bat
-//As of now, not in TMS format. Should be changed to TEF.
-t_certstore, \t_certstore_sha2.txt,, -Dtextshell -- \tcertstore\scripts\t_certstore_sha2.txt \t_certstore_sha2.txt, 300, UDEB#UREL, \epoc32\winscw\c\twtlscert\scripts\batchfiles\precert_backup.bat, \epoc32\winscw\c\twtlscert\scripts\batchfiles\postcert_restore.bat
+
 //TEF Format
 t_certstore, \logs\testexecute\t_certstore_sha2.htm,, -Dtextshell -- \tcertstore\scripts\t_certstore_sha2.script \logs\testexecute\t_certstore_sha2.htm, 300, UDEB#UREL, \epoc32\winscw\c\twtlscert\scripts\batchfiles\precert_backup.bat, \epoc32\winscw\c\twtlscert\scripts\batchfiles\postcert_restore.bat
 
@@ -584,9 +583,7 @@
 
 # TMS support
 T_KEYSTORE, \logs\testexecute\tkeystore_useauth.htm,,     -Dstartupmode=1 -- \tkeystore\scripts\tkeystore_useauth.script	\logs\testexecute\tkeystore_useauth.htm,			300, UDEB#UREL,, \epoc32\winscw\c\tkeystore\scripts\batchfiles\tkeystore_post.bat 
-
-# non TMS
-T_KEYSTORE, \tkeystore_authobjects_useauth.log,, -Dstartupmode=1 -- \tkeystore\scripts\authobjects_useauth.txt	\tkeystore_authobjects_useauth.log,		300, UDEB#UREL,, \epoc32\winscw\c\tkeystore\scripts\batchfiles\tkeystore_authobject_post.bat 
+T_KEYSTORE, \logs\testexecute\tkeystore_authobjects_useauth.htm,, -Dstartupmode=1 -- \tkeystore\scripts\authobjects_useauth.script	\logs\testexecute\tkeystore_authobjects_useauth.htm,		300, UDEB#UREL,, \epoc32\winscw\c\tkeystore\scripts\batchfiles\tkeystore_authobject_post.bat 
 
 # TMS support
 T_KEYSTORE, \logs\testexecute\tkeystore_export_useauth.htm,,      -Dstartupmode=1 -- \tkeystore\scripts\exportscript_useauth.script	\logs\testexecute\tkeystore_export_useauth.htm,			300, UDEB#UREL,, 
@@ -595,11 +592,10 @@
 T_KEYSTORE, \logs\testexecute\tkeystore_servoom_useauth.htm,,	 -Dstartupmode=1 -- \tkeystore\scripts\servoom_useauth.script \logs\testexecute\tkeystore_servoom_useauth.htm,			6000, UDEB,, 
 T_KEYSTORE, \logs\testexecute\tkeystore_reload_useauth.htm,,      -Dstartupmode=1 -- \tkeystore\scripts\reload_useauth.script \logs\testexecute\tkeystore_reload_useauth.htm,			300, UDEB#UREL,, 
 T_KEYSTORE, \logs\testexecute\tkeystore_capability_useauth.htm,,	 -Dstartupmode=1 -- \tkeystore\scripts\capability_useauth.script \logs\testexecute\tkeystore_capability_useauth.htm,	1800, UDEB#UREL,, 
+T_KEYSTORE, \logs\testexecute\tkeystore_createoldkeystore.htm,,	 -Dstartupmode=1 -- \tkeystore\scripts\createoldkeystore.script		\logs\testexecute\tkeystore_createoldkeystore.htm,	1800, UDEB#UREL,\epoc32\winscw\c\tkeystore\scripts\batchfiles\tkeystore_migrate_pre.bat, \epoc32\winscw\c\tkeystore\scripts\batchfiles\tkeystore_migrate_copykeys.bat
+TESTEXECUTE, \logs\testexecute\keytool_migrate.htm,,  -Dstartupmode=1 -- \ttesttools\scripts\keytool_migrate.script, 600, UDEB#UREL,,
+T_KEYSTORE, \logs\testexecute\tkeystore_testnewkeystore.htm,,	 -Dstartupmode=1 -- \tkeystore\scripts\testnewkeystore.script		\logs\testexecute\tkeystore_testnewkeystore.htm,	1800, UDEB#UREL,\epoc32\winscw\c\tkeystore\scripts\batchfiles\tkeystore_migrate_post.bat, 
 
-# non TMS
-T_KEYSTORE, \tkeystore_createoldkeystore.log,,	 -Dstartupmode=1 -- \tkeystore\scripts\createoldkeystore.txt		\tkeystore_createoldkeystore.log,	1800, UDEB#UREL,\epoc32\winscw\c\tkeystore\scripts\batchfiles\tkeystore_migrate_pre.bat, \epoc32\winscw\c\tkeystore\scripts\batchfiles\tkeystore_migrate_copykeys.bat  
-TESTEXECUTE, \logs\testexecute\keytool_migrate.htm,,  -Dstartupmode=1 -- \ttesttools\scripts\keytool_migrate.script, 600, UDEB#UREL,,
-T_KEYSTORE, \tkeystore_testnewkeystore.log,,	 -Dstartupmode=1 -- \tkeystore\scripts\testnewkeystore.txt		\tkeystore_testnewkeystore.log,	1800, UDEB#UREL,\epoc32\winscw\c\tkeystore\scripts\batchfiles\tkeystore_migrate_post.bat, 
 
 # TMS support
 T_KEYSTORE, \logs\testexecute\tkeystore_authenticate_useauth.htm,,	 -Dstartupmode=1 -- \tkeystore\scripts\authenticate_useauth.script \logs\testexecute\tkeystore_authenticate_useauth.htm,	1800, UDEB#UREL,, 
@@ -725,7 +721,7 @@
 PERL, \security_tools\tcertapp\tCertapp_Output.htm,, \epoc32\winscw\c\security_tools\tcertapp\run_tcertapp.pl, 1600, UDEB#UREL,,
 t_certapps, \logs\testexecute\SDP-Security_Tools-CertApp-CCDAT-EMU00.htm,, -Dtextshell -- \security_tools\tcertapp\SDP-Security_Tools-CertApp-CCDAT-EMU00.script \logs\testexecute\SDP-Security_Tools-CertApp-CCDAT-EMU00.htm, 300, UDEB#UREL, \epoc32\winscw\c\security_tools\tcertapp\pre_tcertapp.bat, \epoc32\winscw\c\security_tools\tcertapp\post_tcertapp.bat
 t_certstore, \logs\testexecute\SDP-Security_Tools-CertApp-FILEDAT-EMU00.htm,, -Dtextshell -- \security_tools\tcertapp\SDP-Security_Tools-CertApp-FILEDAT-EMU00.script \logs\testexecute\SDP-Security_Tools-CertApp-FILEDAT-EMU00.htm, 600, UDEB#UREL, \epoc32\winscw\c\security_tools\tcertapp\pre_tcertapp.bat, \epoc32\winscw\c\security_tools\tcertapp\post_tcertapp.bat
-t_certstore, \logs\testexecute\SDP-Security_Tools-CertApp-SWIDAT-EMU00.htm,, -Dtextshell -- \security_tools\tcertapp\SDP-Security_Tools-CertApp-SWIDAT-EMU00.script \logs\testexecute\SDP-Security_Tools-CertApp-SWIDAT-EMU00.htm 600, UDEB#UREL, \epoc32\winscw\c\security_tools\tcertapp\pre_tcertapp.bat, \epoc32\winscw\c\security_tools\tcertapp\post_tcertapp.bat
+t_certstore, \logs\testexecute\SDP-Security_Tools-CertApp-SWIDAT-EMU00.htm,, -Dtextshell -- \security_tools\tcertapp\SDP-Security_Tools-CertApp-SWIDAT-EMU00.script \logs\testexecute\SDP-Security_Tools-CertApp-SWIDAT-EMU00.htm, 600, UDEB#UREL, \epoc32\winscw\c\security_tools\tcertapp\pre_tcertapp.bat, \epoc32\winscw\c\security_tools\tcertapp\post_tcertapp.bat
 
 [UptoMCL]
 # Scan for unexpected panics in epocwind.out files
@@ -742,7 +738,7 @@
 # Categorisation tags are checked for all of security sub-system 
 PERL, \searchtags.txt,,\epoc32\winscw\c\tswi\searchtags.pl, 300, UDEB,,
 [FileTokens_HwImpl]
-T_KEYSTORE, \thwkeystore.log,,		     -Dstartupmode=1 -- \tkeystore\scripts\thwkeystore.txt	\thwkeystore.log,				300, UDEB#UREL, \epoc32\winscw\c\testdata\tcryptospi\scripts\batchfiles\pre_dummyeccplugin.bat, \epoc32\winscw\c\testdata\tcryptospi\scripts\batchfiles\post_dummyeccplugin.bat
+T_KEYSTORE, \logs\testexecute\thwkeystore.htm,,		     -Dstartupmode=1 -- \tkeystore\scripts\thwkeystore.script	\logs\testexecute\thwkeystore.htm,				300, UDEB#UREL, \epoc32\winscw\c\testdata\tcryptospi\scripts\batchfiles\pre_dummyeccplugin.bat, \epoc32\winscw\c\testdata\tcryptospi\scripts\batchfiles\post_dummyeccplugin.bat
 TESTEXECUTE, \logs\testexecute\te_dummyeccciphertestcases.htm,, -Dtextshell -- \testdata\tcryptospi\scripts\te_dummyeccciphertestcases.script, 900, UDEB#UREL, \epoc32\winscw\c\testdata\tcryptospi\scripts\batchfiles\pre_dummyeccplugin.bat, \epoc32\winscw\c\testdata\tcryptospi\scripts\batchfiles\post_dummyeccplugin.bat
 
 
--- a/cryptomgmtlibs/securitytestfw/test/testhandler2/t_tefinput.cpp	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptomgmtlibs/securitytestfw/test/testhandler2/t_tefinput.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -2,22 +2,18 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
-// T_INPUT.CPP
-//
-// Copyright (c) Symbian Software Ltd 1998-2007.  All rights reserved.
-//
 
 #include <s32file.h>
 #include "t_tefinput.h"
--- a/cryptomgmtlibs/securitytestfw/test/testhandler2/t_tefinput.h	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptomgmtlibs/securitytestfw/test/testhandler2/t_tefinput.h	Sat Dec 05 21:41:51 2009 +0000
@@ -1,16 +1,17 @@
+//
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 
--- a/cryptomgmtlibs/securityutils/source/sectcbutil/miscutil.cpp	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptomgmtlibs/securityutils/source/sectcbutil/miscutil.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -87,16 +87,14 @@
  */
 EXPORT_C void DeletePathIfEmpty(RFs& aFs, const TDesC& aPath)
 	{
-	HBufC* pathBuf = aPath.AllocLC();
-	TPtr pathPtr(pathBuf->Des());
-	TParsePtr path(pathPtr);
+	TParse path;
+	path.Set(aPath,NULL,NULL);
 
 	if (path.PathPresent())
 		{
 		while ((aFs.RmDir(path.DriveAndPath()) == KErrNone) && (path.PopDir() == KErrNone))
 			;
-		}
-	CleanupStack::PopAndDestroy(pathBuf);
+		}		
 	}
 
 }	// namespace MiscUtil
--- a/cryptomgmtlibs/securityutils/test/trecog/scripts/trecogcert.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptomgmtlibs/securityutils/test/trecog/scripts/trecogcert.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,6 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
 //! @file
 // Recog unit (integration) tests
 PRINT Run Cert Recog test
--- a/cryptomgmtlibs/securityutils/test/trecog/scripts/trecogjava.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptomgmtlibs/securityutils/test/trecog/scripts/trecogjava.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,6 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
 //! @file
 // Recog unit (integration) tests
 PRINT Run Java Recog test
@@ -91,4 +76,4 @@
 RUN_TEST_STEP 10 trecogserver RecogStep c:\trecog\trecogjava.ini PassByNameVeryLargeJad
 RUN_UTILS DeleteFile c:\trecog\verylargejad.jad
 
-END_TESTCASE SEC-JAVATRECOG-0008
\ No newline at end of file
+END_TESTCASE SEC-JAVATRECOG-0008
--- a/cryptomgmtlibs/securityutils/test/trecog/scripts/trecogpkcs12.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptomgmtlibs/securityutils/test/trecog/scripts/trecogpkcs12.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,6 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
 //! @file
 // Recog unit (integration) tests
 PRINT Run PKCS12 Recog test
--- a/cryptoservices/asnpkcs/test/scripts/tasnpkcstests.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/asnpkcs/test/scripts/tasnpkcstests.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-ASNPKCS-TASNPKCSTESTS-0001
Binary file cryptoservices/certificateandkeymgmt/documentation/How to build a certclients file.doc has changed
--- a/cryptoservices/certificateandkeymgmt/group/bld.inf	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/group/bld.inf	Sat Dec 05 21:41:51 2009 +0000
@@ -569,7 +569,7 @@
 ../tcertstore/scripts/t_certstore_2.ini				/epoc32/winscw/c/t_certstore_2.ini
 ../tcertstore/scripts/t_certstore_sha2.script			/epoc32/winscw/c/tcertstore/scripts/t_certstore_sha2.script
 ../tcertstore/scripts/t_certstore_sha2.ini			/epoc32/winscw/c/tcertstore/scripts/t_certstore_sha2.ini
-../tcertstore/scripts/t_certstore_sha2.txt			/epoc32/winscw/c/tcertstore/scripts/t_certstore_sha2.txt
+
 
 
 
@@ -601,7 +601,6 @@
 ../tcertstore/certstores/test2certstore.dat	/epoc32/winscw/c/tcertstore/certstores/test2deviceimmutablecertstore.dat
 
 // SWI cert store tests (winscw only)
-../tcertstore/scripts/swicertstore1hw.txt		/epoc32/winscw/c/tcertstore/scripts/swicertstore1hw.txt // For ROM build
 
 
 ../tcertstore/scripts/swicertstore1.script		/epoc32/winscw/c/tcertstore/scripts/swicertstore1.script
@@ -609,7 +608,7 @@
 ../tcertstore/scripts/swicertstore3.script		/epoc32/winscw/c/tcertstore/scripts/swicertstore3.script
 ../tcertstore/scripts/swicertstore4.script		/epoc32/winscw/c/tcertstore/scripts/swicertstore4.script
 ../tcertstore/scripts/wri-swicertstore1.script	/epoc32/winscw/c/tcertstore/scripts/wri-swicertstore1.script // For emulator tests
-// ../tcertstore/scripts/swicertstore1hw.script	/epoc32/winscw/c/tcertstore/scripts/swicertstore1hw.script // For ROM build
+../tcertstore/scripts/swicertstore1hw.script	/epoc32/winscw/c/tcertstore/scripts/swicertstore1hw.script // For ROM build
 ../tcertstore/scripts/wri-swicertstorehw.script	/epoc32/winscw/c/tcertstore/scripts/wri-swicertstorehw.script // For ROM build
 ../tcertstore/scripts/wri-swicertstore2.script	/epoc32/winscw/c/tcertstore/scripts/wri-swicertstore2.script
 ../tcertstore/scripts/wri-swicertstore3.script	/epoc32/winscw/c/tcertstore/scripts/wri-swicertstore3.script
@@ -620,7 +619,7 @@
 ../tcertstore/scripts/swicertstore3.ini		/epoc32/winscw/c/tcertstore/scripts/swicertstore3.ini
 ../tcertstore/scripts/swicertstore4.ini		/epoc32/winscw/c/tcertstore/scripts/swicertstore4.ini
 ../tcertstore/scripts/wri-swicertstore1.ini	/epoc32/winscw/c/tcertstore/scripts/wri-swicertstore1.ini // For emulator tests
-// ../tcertstore/scripts/swicertstore1hw.ini		/epoc32/winscw/c/tcertstore/scripts/swicertstore1hw.ini // For ROM build
+../tcertstore/scripts/swicertstore1hw.ini		/epoc32/winscw/c/tcertstore/scripts/swicertstore1hw.ini // For ROM build
 ../tcertstore/scripts/wri-swicertstorehw.ini	/epoc32/winscw/c/tcertstore/scripts/wri-swicertstorehw.ini // For ROM build
 ../tcertstore/scripts/wri-swicertstore2.ini	/epoc32/winscw/c/tcertstore/scripts/wri-swicertstore2.ini
 ../tcertstore/scripts/wri-swicertstore3.ini	/epoc32/winscw/c/tcertstore/scripts/wri-swicertstore3.ini
--- a/cryptoservices/certificateandkeymgmt/inc/certmantests.iby	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/inc/certmantests.iby	Sat Dec 05 21:41:51 2009 +0000
@@ -442,13 +442,13 @@
 data = ABI_DIR\BUILD_DIR\t_certstore.exe				sys\bin\t_certstore.exe
 
 //scripts
-data = ZDRIVE\tcertstore\scripts\t_certstore_sha2.txt			tcertstore\scripts\t_certstore_sha2.txt attrib=r
 data = ZDRIVE\tcertstore\scripts\t_certstore_sha2.script		tcertstore\scripts\t_certstore_sha2.script attrib=r
 data = ZDRIVE\tcertstore\scripts\t_certstore_sha2.ini			tcertstore\scripts\t_certstore_sha2.ini attrib=r
 data = ZDRIVE\tcertstoreconcurrent\scripts\certstoreconcurrent1.txt	tcertstoreconcurrent\scripts\certstoreconcurrent1.txt attrib=r
 data = ZDRIVE\tcertstoreconcurrent\scripts\certstoreconcurrent2.txt	tcertstoreconcurrent\scripts\certstoreconcurrent2.txt attrib=r
 data = ZDRIVE\tcertstoreconcurrent\scripts\certstoreconcurrent3.txt	tcertstoreconcurrent\scripts\certstoreconcurrent3.txt attrib=r
-data = ZDRIVE\tcertstore\scripts\swicertstore1hw.txt				tcertstore\scripts\swicertstore1.txt attrib=r
+data = ZDRIVE\tcertstore\scripts\swicertstore1hw.ini				tcertstore\scripts\swicertstore1.ini attrib=r
+data = ZDRIVE\tcertstore\scripts\swicertstore1hw.script		      tcertstore\scripts\swicertstore1.script attrib=r
 
 
 //TMS support
--- a/cryptoservices/certificateandkeymgmt/inc/x520ava.h	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/inc/x520ava.h	Sat Dec 05 21:41:51 2009 +0000
@@ -46,7 +46,6 @@
 _LIT(KX520DNQualifier,"2.5.4.46");
 _LIT(KX520SerialNumber,"2.5.4.5");
 
-#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
 //more attribute types we handle at present
 _LIT(KX520PostalCode,"2.5.4.17");
 _LIT(KRFC2247DomainComponent, "0.9.2342.19200300.100.1.25");
@@ -94,8 +93,6 @@
 /** The maximum length allowed a for street. */
 const TInt KRFC2256StreetLength = 128;
 
-#endif
-
 
 /** The attribute type. 
 * 
--- a/cryptoservices/certificateandkeymgmt/pkcs12recog/pkcs12recog.mmp	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/pkcs12recog/pkcs12recog.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -31,7 +31,8 @@
 
 SOURCEPATH		.
 
-OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+// OS_LAYER_SYSTEMINCLUDE_SYMBIAN -- should be this but has a dependency on apmstd.h in MW layer.
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
 
 SOURCE			pkcs12recog.cpp
 START RESOURCE	2000151F.rss
--- a/cryptoservices/certificateandkeymgmt/pkixcertbase/pkixcertbase.mmp	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/pkixcertbase/pkixcertbase.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -35,6 +35,7 @@
 SOURCE pkixcertchainao.cpp pkixvalidationresult.cpp Pkixchainbuilder.cpp
 
 USERINCLUDE ../../../crypto/weakcrypto/inc
+USERINCLUDE ../inc
 OS_LAYER_SYSTEMINCLUDE_SYMBIAN
 
 LIBRARY	euser.lib x500.lib x509.lib crypto.lib
--- a/cryptoservices/certificateandkeymgmt/pkixcertbase/pkixcertchainao.cpp	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/pkixcertbase/pkixcertchainao.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -20,7 +20,7 @@
 #include "pkixCons.h"
 #include <x509keys.h>
 #include <pkixcertchain.h>
-#include <x509constraintext.h>
+#include "x509constraintext.h"
 
 CPKIXCertChainAO* CPKIXCertChainAO::NewL(MCertStore& aCertStore,
 										 CPKIXCertChainBase &aPKIXCertChain,
--- a/cryptoservices/certificateandkeymgmt/recog/CertRecog.mmp	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/recog/CertRecog.mmp	Sat Dec 05 21:41:51 2009 +0000
@@ -31,7 +31,8 @@
 
 SOURCEPATH	.
 
-OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+// OS_LAYER_SYSTEMINCLUDE_SYMBIAN -- should be this, but has a dependency on apmstd.h in the MW layer
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
 
 SOURCE          CertRecog.cpp
 START RESOURCE 	000047EB.rss
--- a/cryptoservices/certificateandkeymgmt/swicertstore/log.h	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/swicertstore/log.h	Sat Dec 05 21:41:51 2009 +0000
@@ -1,19 +1,21 @@
-// Copyright (c) 2006-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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-// This header contains definitions for logging commands.
-// 
-//
+/*
+* Copyright (c) 2006-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: 
+* This header contains definitions for logging commands.
+*
+*/
+
 
 /**
  @file 
--- a/cryptoservices/certificateandkeymgmt/tasn1/scripts/tasn1-oom.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tasn1/scripts/tasn1-oom.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-TASN1-OOM-0001
--- a/cryptoservices/certificateandkeymgmt/tasn1/scripts/tasn1.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tasn1/scripts/tasn1.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-TASN1-0001
--- a/cryptoservices/certificateandkeymgmt/tcertdump/displaytype.cpp	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertdump/displaytype.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -17,11 +17,6 @@
 
 
 #include "displaytype.h"
-#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
-_LIT(KX520PostalCode,"2.5.4.17");
-_LIT(KRFC2247DomainComponent, "0.9.2342.19200300.100.1.25");
-_LIT(KRFC2256Street,"2.5.4.9");
-#endif
 
 const TDesC16& GetType(const TDesC16& aType)
 	{
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore01.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore01.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE1: Duplicates in same certstore (SD), only this file is present under ROM drive (single)
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore02.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore02.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE2: Duplicates in same certstore (SD) present with corrupt certstore (C) which has highest order.
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore03.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore03.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE3: Duplicates in same certstore (SD) with case when corrupt certstore (C)is middle of the order.
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore04.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore04.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE4: Covers the case corrupt certstore (C) with (SD) in middle of the order.
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore05.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore05.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE5: Covers the case 'Duplicates in same certstore' (SD) with corrupt certstore (C) of least order.
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore06.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore06.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE6: corrupt certstore (C), only this file is present under ROM drive (single)
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore07.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore07.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE7: Duplicates in Distinct certstore (DD), with corrupt certstore (C) of highest order
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore08.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore08.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE8: Duplicates in Distinct certstore (DD), with corrupt certstore (C) in middle of the order
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore09.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore09.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE9: Duplicates in Distinct certstore (DD), with corrupt certstore (C) of least order
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore10.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore10.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE10: Duplicates in Distinct certstore (DD), with Duplicates in Same certstore (SD) of highest order
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore11.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore11.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE11: Duplicates in Distinct certstore (DD), with Duplicates in Same certstore (SD) of least order
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore12.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore12.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE12: Duplicates in Distinct certstore (DD),  only these files are present under ROM drive (single)
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore13.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore13.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE13: No Duplicates present (ND), with corrupt certstore (C) of highest order
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore14.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore14.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE14: No Duplicates present (ND), with corrupt certstore (C) in middle of the order
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore15.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore15.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE15: No Duplicates present (ND), with corrupt certstore (C) of least order
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore16.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore16.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE16: No Duplicates (ND), only these files are present under ROM drive (single)
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore17.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore17.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE17: No certstores present under ROM drive
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore18.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tfilecertstore18.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE18: No Duplicates (ND), Duplicates in Distinct certstore (DD), Duplicates in same certstore (SD), Empty certstore (E)
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore01.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore01.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE1: Duplicates in same certstore (SD), only this file is present under ROM drive (single)
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore02.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore02.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE2: Duplicates in same certstore (SD) present with corrupt certstore (C) which has highest order.
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore03.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore03.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE3: Duplicates in same certstore (SD) with case when corrupt certstore (C)is middle of the order.
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore04.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore04.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE4: Covers the case corrupt certstore (C) with (SD) in middle of the order.
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore05.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore05.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE5: Covers the case 'Duplicates in same certstore' (SD) with corrupt certstore (C) of least order.
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore06.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore06.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE6: corrupt certstore (C), only this file is present under ROM drive (single)
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore07.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore07.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE7: Duplicates in Distinct certstore (DD), with corrupt certstore (C) of highest order
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore08.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore08.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE8: Duplicates in Distinct certstore (DD), with corrupt certstore (C) in middle of the order
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore09.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore09.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE9: Duplicates in Distinct certstore (DD), with corrupt certstore (C) of least order
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore10.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore10.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE10: Duplicates in Distinct certstore (DD), with Duplicates in Same certstore (SD) of highest order
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore11.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore11.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE11: Duplicates in Distinct certstore (DD), with Duplicates in Same certstore (SD) of least order
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore12.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore12.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE12: Duplicates in Distinct certstore (DD),  only these files are present under ROM drive (single)
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore13.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore13.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE13: No Duplicates present (ND), with corrupt certstore (C) of highest order
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore14.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore14.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE14: No Duplicates present (ND), with corrupt certstore (C) in middle of the order
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore15.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore15.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE15: No Duplicates present (ND), with corrupt certstore (C) of least order
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore16.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore16.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE16: No Duplicates (ND), only these files are present under ROM drive (single)
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore17.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore17.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE17: No certstores present under ROM drive
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore18.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore18.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE18: No Duplicates (ND), Duplicates in Distinct certstore (DD), Duplicates in same certstore (SD), Empty certstore (E)
--- a/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore19.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/multiple_certstore/scripts/tswicertstore19.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // CASE19: When writable swicertstore is present. Duplicates in Distinct certstore (DD),  only these files are present under ROM drive (single)
--- a/cryptoservices/certificateandkeymgmt/tcertstore/pre-unifiedcertstore3-conf3.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/pre-unifiedcertstore3-conf3.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-PRE-UNIFIEDCERTSTORE3-CONF3-0001
Binary file cryptoservices/certificateandkeymgmt/tcertstore/scripts/DLL testspec.doc has changed
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/apipolicing.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/apipolicing.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,20 +2,17 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
-// apipolicing.txt
-
-// 
 
 // Test cert store API policing of filetokens cert store
 
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/bldcertstore.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/bldcertstore.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-BLDCERTSTORE-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/cancel1.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/cancel1.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-CANCEL1-CERTSTORE-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/cancel2.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/cancel2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-CANCEL2-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/certappmanager.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/certappmanager.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-CERTAPPMANAGER-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/certstoreconcurrent1.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/certstoreconcurrent1.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-CERTSTORECONCURRENT1-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/certstoreconcurrent2.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/certstoreconcurrent2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-CERTSTORECONCURRENT2-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/certstoreconcurrent3.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/certstoreconcurrent3.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-CERTSTORECONCURRENT3-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/dsa.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/dsa.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-DSA-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/filecertstore_errors.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/filecertstore_errors.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // Error tests for filetokens cert store, run in configuration 1
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/filecertstore_servoom.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/filecertstore_servoom.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-FILECERTSTORE_SERVOOM-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/multiplecertstoresfilter.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/multiplecertstoresfilter.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // multiplecertstoresfilter.txt
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/multiplecertstoresfilter1.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/multiplecertstoresfilter1.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // multiplecertstoresfilter1.txt
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/multiplecertstoresfilter2.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/multiplecertstoresfilter2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // multiplecertstoresfilter1.txt
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/oom1.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/oom1.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-OOM1-CERTSTORE-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/oom2.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/oom2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-OOM2-CERTSTORE-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/oom3.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/oom3.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-OOM3-CERTSTORE-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/reload.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/reload.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-RELOAD-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/swicertstore1.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/swicertstore1.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // swicertstore1.txt
@@ -496,7 +496,7 @@
 
 RUN_TEST_STEP                 -1    CTestHandler        delete              
 
-END_TESTCASE                  SEC-TCERTSTORE-SWICERTSTORE1-19
+END_TESTCASE                  SEC-TCERTSTORE-SWICERTSTORE1-19-0001
 
 
 
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/swicertstore1hw.ini	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/swicertstore1hw.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -1,3 +1,6 @@
+[SEC-TCERTSTORE-SWICERTSTORE1HW-2-001]
+<actionbody>
+	<filter>
 	<ownertype>ca</ownertype>
 	</filter>
 </actionbody>
@@ -6,10 +9,9 @@
 	<CCTCertInfo><label>SymbianTestDSACA</label><readonly>True</readonly></CCTCertInfo>
 	<CCTCertInfo><label>SymbianTestRSACA</label><readonly>True</readonly></CCTCertInfo>
 	<CCTCertInfo><label>allcapabilitiesinstall</label><readonly>True</readonly></CCTCertInfo>
-
 </actionresult>
 
-[SEC-TCERTSTORE-SWICERTSTORE1-20-001]
+[SEC-TCERTSTORE-SWICERTSTORE1HW-3-001]
 <actionbody>
 	<label>SymbianTestRSACA</label>
 </actionbody>
@@ -17,29 +19,29 @@
 	<systemupgrade>ETrue</systemupgrade>
 </actionresult>
 
-[SEC-TCERTSTORE-SWICERTSTORE1-3-001]
+[SEC-TCERTSTORE-SWICERTSTORE1HW-4-001]
 <actionbody>
 	<filter>
 	<ownertype>user</ownertype>
 	</filter>
 </actionbody>
 
-[SEC-TCERTSTORE-SWICERTSTORE1-4-001]
+[SEC-TCERTSTORE-SWICERTSTORE1HW-5-001]
 <actionbody>
 	<label>Root5CA</label>
 </actionbody>
 
-[SEC-TCERTSTORE-SWICERTSTORE1-5-001]
+[SEC-TCERTSTORE-SWICERTSTORE1HW-6-001]
 <actionbody>
 	<label>SymbianTestDSACA</label>
 </actionbody>
 
-[SEC-TCERTSTORE-SWICERTSTORE1-6-001]
+[SEC-TCERTSTORE-SWICERTSTORE1HW-7-001]
 <actionbody>
 	<label>SymbianTestRSACA</label>
 </actionbody>
 
-[SEC-TCERTSTORE-SWICERTSTORE1-7-001]
+[SEC-TCERTSTORE-SWICERTSTORE1HW-8-001]
 <actionbody>
 	<label>Root5CA</label>
 </actionbody>
@@ -47,7 +49,7 @@
 	<uid>268452523</uid>
 </actionresult>
 
-[SEC-TCERTSTORE-SWICERTSTORE1-8-001]
+[SEC-TCERTSTORE-SWICERTSTORE1HW-9-001]
 <actionbody>
 	<label>Root5CA</label>
 </actionbody>
@@ -55,7 +57,7 @@
 	<trust>1</trust>
 </actionresult>
 
-[SEC-TCERTSTORE-SWICERTSTORE1-9-001]
+[SEC-TCERTSTORE-SWICERTSTORE1HW-10-001]
 <actionbody>
 	<label>SymbianTestDSACA</label>
 </actionbody>
@@ -63,7 +65,7 @@
 	<uid>268452523 268478646</uid>
 </actionresult>
 
-[SEC-TCERTSTORE-SWICERTSTORE1-10-001]
+[SEC-TCERTSTORE-SWICERTSTORE1HW-11-001]
 <actionbody>
 	<label>SymbianTestDSACA</label>
 </actionbody>
@@ -71,7 +73,7 @@
 	<trust>1</trust>
 </actionresult>
 
-[SEC-TCERTSTORE-SWICERTSTORE1-11-001]
+[SEC-TCERTSTORE-SWICERTSTORE1HW-12-001]
 <actionbody>
 	<label>SymbianTestRSACA</label>
 </actionbody>
@@ -79,7 +81,7 @@
 	<uid>268452523 268478646</uid>
 </actionresult>
 
-[SEC-TCERTSTORE-SWICERTSTORE1-12-001]
+[SEC-TCERTSTORE-SWICERTSTORE1HW-13-001]
 <actionbody>
 	<label>SymbianTestRSACA</label>
 </actionbody>
@@ -87,7 +89,7 @@
 	<trust>1</trust>
 </actionresult>
 
-[SEC-TCERTSTORE-SWICERTSTORE1-13-001]
+[SEC-TCERTSTORE-SWICERTSTORE1HW-14-001]
 <actionbody>
 	<label>Root5CA</label>
 </actionbody>
@@ -98,7 +100,7 @@
 	<capability>AllFiles</capability>
 </actionresult>
 
-[SEC-TCERTSTORE-SWICERTSTORE1-14-001]
+[SEC-TCERTSTORE-SWICERTSTORE1HW-15-001]
 <actionbody>
 	<label>Root5CA</label>
 </actionbody>
@@ -106,7 +108,7 @@
 	<mandatory>EFalse</mandatory>
 </actionresult>
 
-[SEC-TCERTSTORE-SWICERTSTORE1-15-001]
+[SEC-TCERTSTORE-SWICERTSTORE1HW-16-001]
 <actionbody>
 	<label>SymbianTestDSACA</label>
 </actionbody>
@@ -117,7 +119,7 @@
 	<capability>Location</capability>
 </actionresult>
 
-[SEC-TCERTSTORE-SWICERTSTORE1-16-001]
+[SEC-TCERTSTORE-SWICERTSTORE1HW-17-001]
 <actionbody>
 	<label>SymbianTestDSACA</label>
 </actionbody>
@@ -125,7 +127,7 @@
 	<mandatory>EFalse</mandatory>
 </actionresult>
 
-[SEC-TCERTSTORE-SWICERTSTORE1-17-001]
+[SEC-TCERTSTORE-SWICERTSTORE1HW-18-001]
 <actionbody>
 	<label>SymbianTestRSACA</label>
 </actionbody>
@@ -134,7 +136,7 @@
 	<capability>WriteUserData</capability>
 </actionresult>
 
-[SEC-TCERTSTORE-SWICERTSTORE1-18-001]
+[SEC-TCERTSTORE-SWICERTSTORE1HW-19-001]
 <actionbody>
 	<label>SymbianTestRSACA</label>
 </actionbody>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/swicertstore1hw.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,507 @@
+/*
+* Copyright (c) 2007-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: 
+* Library to add s32strm support for IPC (ie. stream via multiple IPC read/writes instead of
+* copying to a buffer and streaming to/from there.
+*
+*/
+
+// SWICERTSTORE1HW.script
+
+// 
+
+// Test direct access to SWI cert store
+
+
+
+START_TESTCASE                SEC-TCERTSTORE-SWICERTSTORE1HW-1-0001
+
+//! @SYMTestCaseID            SEC-TCERTSTORE-SWICERTSTORE1HW-1-0001
+
+//! @file                     
+
+//! @SYMTestCaseDesc          Open the SWI cert store
+
+//! @SYMREQ                   REQ0000
+
+//! @SYMTestCasePriority      High
+
+//! @SYMTestExpectedResults   KErrNone
+
+//! @SYMTestActions           1) Open the SWI cert store
+
+RUN_TEST_STEP                 -1    CTestHandler        initswicertstore    
+
+END_TESTCASE                  SEC-TCERTSTORE-SWICERTSTORE1HW-1-0001
+
+
+
+
+
+START_TESTCASE                SEC-TCERTSTORE-SWICERTSTORE1HW-2-0001
+
+//! @SYMTestCaseID            SEC-TCERTSTORE-SWICERTSTORE1HW-2-0001
+
+//! @file                     
+
+//! @SYMTestCaseDesc          Get the list of CA certificates
+
+//! @SYMREQ                   REQ0000
+
+//! @SYMTestCasePriority      High
+
+//! @SYMTestExpectedResults   KErrNone
+
+//! @SYMTestActions           1) Get the list of CA certificates
+
+RUN_TEST_STEP                 -1    CTestHandler        listcert               SWICERTSTORE1.ini   SEC-TCERTSTORE-SWICERTSTORE1HW-2-001
+
+END_TESTCASE                  SEC-TCERTSTORE-SWICERTSTORE1HW-2-0001
+
+
+
+
+
+START_TESTCASE                SEC-TCERTSTORE-SWICERTSTORE1HW-3-0001
+
+//! @SYMTestCaseID            SEC-TCERTSTORE-SWICERTSTORE1HW-3-0001
+
+//! @file                     
+
+//! @SYMTestCaseDesc          Get the systemupgrade flag for sucert
+
+//! @SYMREQ                   REQ0000
+
+//! @SYMTestCasePriority      High
+
+//! @SYMTestExpectedResults   KErrNone
+
+//! @SYMTestActions           1) Get the systemupgrade flag for sucert
+
+RUN_TEST_STEP                 -1    CTestHandler        getsystemupgrade       SWICERTSTORE1.ini   SEC-TCERTSTORE-SWICERTSTORE1HW-3-001
+
+END_TESTCASE                  SEC-TCERTSTORE-SWICERTSTORE1HW-3-0001
+
+
+
+
+
+START_TESTCASE                SEC-TCERTSTORE-SWICERTSTORE1HW-4-0001
+
+//! @SYMTestCaseID            SEC-TCERTSTORE-SWICERTSTORE1HW-4-0001
+
+//! @file                     
+
+//! @SYMTestCaseDesc          Get the list of user certificates
+
+//! @SYMREQ                   REQ0000
+
+//! @SYMTestCasePriority      High
+
+//! @SYMTestExpectedResults   KErrNone
+
+//! @SYMTestActions           1) Get the list of user certificates
+
+RUN_TEST_STEP                 -1    CTestHandler        listcert               SWICERTSTORE1.ini   SEC-TCERTSTORE-SWICERTSTORE1HW-4-001
+
+END_TESTCASE                  SEC-TCERTSTORE-SWICERTSTORE1HW-4-0001
+
+
+
+
+
+START_TESTCASE                SEC-TCERTSTORE-SWICERTSTORE1HW-5-0001
+
+//! @SYMTestCaseID            SEC-TCERTSTORE-SWICERTSTORE1HW-5-0001
+
+//! @file                     
+
+//! @SYMTestCaseDesc          Retrieve Root5CA cert
+
+//! @SYMREQ                   REQ0000
+
+//! @SYMTestCasePriority      High
+
+//! @SYMTestExpectedResults   KErrNone
+
+//! @SYMTestActions           1) Retrieve Root5CA cert
+
+RUN_TEST_STEP                 -1    CTestHandler        retrieve               SWICERTSTORE1.ini   SEC-TCERTSTORE-SWICERTSTORE1HW-5-001
+
+END_TESTCASE                  SEC-TCERTSTORE-SWICERTSTORE1HW-5-0001
+
+
+
+
+
+START_TESTCASE                SEC-TCERTSTORE-SWICERTSTORE1HW-6-0001
+
+//! @SYMTestCaseID            SEC-TCERTSTORE-SWICERTSTORE1HW-6-0001
+
+//! @file                     
+
+//! @SYMTestCaseDesc          Retrieve SymbianTestDSACA cert
+
+//! @SYMREQ                   REQ0000
+
+//! @SYMTestCasePriority      High
+
+//! @SYMTestExpectedResults   KErrNone
+
+//! @SYMTestActions           1) Retrieve SymbianTestDSACA cert
+
+RUN_TEST_STEP                 -1    CTestHandler        retrieve               SWICERTSTORE1.ini   SEC-TCERTSTORE-SWICERTSTORE1HW-6-001
+
+END_TESTCASE                  SEC-TCERTSTORE-SWICERTSTORE1HW-6-0001
+
+
+
+
+
+START_TESTCASE                SEC-TCERTSTORE-SWICERTSTORE1HW-7-0001
+
+//! @SYMTestCaseID            SEC-TCERTSTORE-SWICERTSTORE1HW-7-0001
+
+//! @file                     
+
+//! @SYMTestCaseDesc          Retrieve SymbianTestRSACA cert
+
+//! @SYMREQ                   REQ0000
+
+//! @SYMTestCasePriority      High
+
+//! @SYMTestExpectedResults   KErrNone
+
+//! @SYMTestActions           1) Retrieve SymbianTestRSACA cert
+
+RUN_TEST_STEP                 -1    CTestHandler        retrieve               SWICERTSTORE1.ini   SEC-TCERTSTORE-SWICERTSTORE1HW-7-001
+
+END_TESTCASE                  SEC-TCERTSTORE-SWICERTSTORE1HW-7-0001
+
+
+
+
+
+START_TESTCASE                SEC-TCERTSTORE-SWICERTSTORE1HW-8-0001
+
+//! @SYMTestCaseID            SEC-TCERTSTORE-SWICERTSTORE1HW-8-0001
+
+//! @file                     
+
+//! @SYMTestCaseDesc          Get applications for Root5CA
+
+//! @SYMREQ                   REQ0000
+
+//! @SYMTestCasePriority      High
+
+//! @SYMTestExpectedResults   KErrNone
+
+//! @SYMTestActions           1) Get applications for Root5CA
+
+RUN_TEST_STEP                 -1    CTestHandler        getapplications        SWICERTSTORE1.ini   SEC-TCERTSTORE-SWICERTSTORE1HW-8-001
+
+END_TESTCASE                  SEC-TCERTSTORE-SWICERTSTORE1HW-8-0001
+
+
+
+
+
+START_TESTCASE                SEC-TCERTSTORE-SWICERTSTORE1HW-9-0001
+
+//! @SYMTestCaseID            SEC-TCERTSTORE-SWICERTSTORE1HW-9-0001
+
+//! @file                     
+
+//! @SYMTestCaseDesc          Get the trust for Root5CA
+
+//! @SYMREQ                   REQ0000
+
+//! @SYMTestCasePriority      High
+
+//! @SYMTestExpectedResults   KErrNone
+
+//! @SYMTestActions           1) Get the trust for Root5CA
+
+RUN_TEST_STEP                 -1    CTestHandler        gettrusters            SWICERTSTORE1.ini   SEC-TCERTSTORE-SWICERTSTORE1HW-9-001
+
+END_TESTCASE                  SEC-TCERTSTORE-SWICERTSTORE1HW-9-0001
+
+
+
+
+
+START_TESTCASE                SEC-TCERTSTORE-SWICERTSTORE1HW-10-0001
+
+//! @SYMTestCaseID            SEC-TCERTSTORE-SWICERTSTORE1HW-10-0001
+
+//! @file                     
+
+//! @SYMTestCaseDesc          Get applications for SymbianTestDSACA
+
+//! @SYMREQ                   REQ0000
+
+//! @SYMTestCasePriority      High
+
+//! @SYMTestExpectedResults   KErrNone
+
+//! @SYMTestActions           1) Get applications for SymbianTestDSACA
+
+RUN_TEST_STEP                 -1    CTestHandler        getapplications        SWICERTSTORE1.ini   SEC-TCERTSTORE-SWICERTSTORE1HW-10-001
+
+END_TESTCASE                  SEC-TCERTSTORE-SWICERTSTORE1HW-10-0001
+
+
+
+
+
+START_TESTCASE                SEC-TCERTSTORE-SWICERTSTORE1HW-11-0001
+
+//! @SYMTestCaseID            SEC-TCERTSTORE-SWICERTSTORE1HW-11-0001
+
+//! @file                     
+
+//! @SYMTestCaseDesc          Get the trust for SymbianTestDSACA
+
+//! @SYMREQ                   REQ0000
+
+//! @SYMTestCasePriority      High
+
+//! @SYMTestExpectedResults   KErrNone
+
+//! @SYMTestActions           1) Get the trust for SymbianTestDSACA
+
+RUN_TEST_STEP                 -1    CTestHandler        gettrusters            SWICERTSTORE1.ini   SEC-TCERTSTORE-SWICERTSTORE1HW-11-001
+
+END_TESTCASE                  SEC-TCERTSTORE-SWICERTSTORE1HW-11-0001
+
+
+
+
+
+START_TESTCASE                SEC-TCERTSTORE-SWICERTSTORE1HW-12-0001
+
+//! @SYMTestCaseID            SEC-TCERTSTORE-SWICERTSTORE1HW-12-0001
+
+//! @file                     
+
+//! @SYMTestCaseDesc          Get applications for SymbianTestRSACA
+
+//! @SYMREQ                   REQ0000
+
+//! @SYMTestCasePriority      High
+
+//! @SYMTestExpectedResults   KErrNone
+
+//! @SYMTestActions           1) Get applications for SymbianTestRSACA
+
+RUN_TEST_STEP                 -1    CTestHandler        getapplications        SWICERTSTORE1.ini   SEC-TCERTSTORE-SWICERTSTORE1HW-12-001
+
+END_TESTCASE                  SEC-TCERTSTORE-SWICERTSTORE1HW-12-0001
+
+
+
+
+
+START_TESTCASE                SEC-TCERTSTORE-SWICERTSTORE1HW-13-0001
+
+//! @SYMTestCaseID            SEC-TCERTSTORE-SWICERTSTORE1HW-13-0001
+
+//! @file                     
+
+//! @SYMTestCaseDesc          Get the trust for SymbianTestRSACA
+
+//! @SYMREQ                   REQ0000
+
+//! @SYMTestCasePriority      High
+
+//! @SYMTestExpectedResults   KErrNone
+
+//! @SYMTestActions           1) Get the trust for SymbianTestRSACA
+
+RUN_TEST_STEP                 -1    CTestHandler        gettrusters            SWICERTSTORE1.ini   SEC-TCERTSTORE-SWICERTSTORE1HW-13-001
+
+END_TESTCASE                  SEC-TCERTSTORE-SWICERTSTORE1HW-13-0001
+
+
+
+
+
+START_TESTCASE                SEC-TCERTSTORE-SWICERTSTORE1HW-14-0001
+
+//! @SYMTestCaseID            SEC-TCERTSTORE-SWICERTSTORE1HW-14-0001
+
+//! @file                     
+
+//! @SYMTestCaseDesc          Get the capabilities for Root5CA
+
+//! @SYMREQ                   REQ0000
+
+//! @SYMTestCasePriority      High
+
+//! @SYMTestExpectedResults   KErrNone
+
+//! @SYMTestActions           1) Get the capabilities for Root5CA
+
+RUN_TEST_STEP                 -1    CTestHandler        getcapabilities        SWICERTSTORE1.ini   SEC-TCERTSTORE-SWICERTSTORE1HW-14-001
+
+END_TESTCASE                  SEC-TCERTSTORE-SWICERTSTORE1HW-14-0001
+
+
+
+
+
+START_TESTCASE                SEC-TCERTSTORE-SWICERTSTORE1HW-15-0001
+
+//! @SYMTestCaseID            SEC-TCERTSTORE-SWICERTSTORE1HW-15-0001
+
+//! @file                     
+
+//! @SYMTestCaseDesc          Get the mandatory flag for Root5CA
+
+//! @SYMREQ                   REQ0000
+
+//! @SYMTestCasePriority      High
+
+//! @SYMTestExpectedResults   KErrNone
+
+//! @SYMTestActions           1) Get the mandatory flag for Root5CA
+
+RUN_TEST_STEP                 -1    CTestHandler        getmandatory           SWICERTSTORE1.ini   SEC-TCERTSTORE-SWICERTSTORE1HW-15-001
+
+END_TESTCASE                  SEC-TCERTSTORE-SWICERTSTORE1HW-15-0001
+
+
+
+
+
+START_TESTCASE                SEC-TCERTSTORE-SWICERTSTORE1HW-16-0001
+
+//! @SYMTestCaseID            SEC-TCERTSTORE-SWICERTSTORE1HW-16-0001
+
+//! @file                     
+
+//! @SYMTestCaseDesc          Get the capabilities for SymbianTestDSACA
+
+//! @SYMREQ                   REQ0000
+
+//! @SYMTestCasePriority      High
+
+//! @SYMTestExpectedResults   KErrNone
+
+//! @SYMTestActions           1) Get the capabilities for SymbianTestDSACA
+
+RUN_TEST_STEP                 -1    CTestHandler        getcapabilities        SWICERTSTORE1.ini   SEC-TCERTSTORE-SWICERTSTORE1HW-16-001
+
+END_TESTCASE                  SEC-TCERTSTORE-SWICERTSTORE1HW-16-0001
+
+
+
+
+
+START_TESTCASE                SEC-TCERTSTORE-SWICERTSTORE1HW-17-0001
+
+//! @SYMTestCaseID            SEC-TCERTSTORE-SWICERTSTORE1HW-17-0001
+
+//! @file                     
+
+//! @SYMTestCaseDesc          Get the mandatory flag for SymbianTestDSACA
+
+//! @SYMREQ                   REQ0000
+
+//! @SYMTestCasePriority      High
+
+//! @SYMTestExpectedResults   KErrNone
+
+//! @SYMTestActions           1) Get the mandatory flag for SymbianTestDSACA
+
+RUN_TEST_STEP                 -1    CTestHandler        getmandatory           SWICERTSTORE1.ini   SEC-TCERTSTORE-SWICERTSTORE1HW-17-001
+
+END_TESTCASE                  SEC-TCERTSTORE-SWICERTSTORE1HW-17-0001
+
+
+
+
+
+START_TESTCASE                SEC-TCERTSTORE-SWICERTSTORE1HW-18-0001
+
+//! @SYMTestCaseID            SEC-TCERTSTORE-SWICERTSTORE1HW-18-0001
+
+//! @file                     
+
+//! @SYMTestCaseDesc          Get the capabilities for SymbianTestRSACA
+
+//! @SYMREQ                   REQ0000
+
+//! @SYMTestCasePriority      High
+
+//! @SYMTestExpectedResults   KErrNone
+
+//! @SYMTestActions           1) Get the capabilities for SymbianTestRSACA
+
+RUN_TEST_STEP                 -1    CTestHandler        getcapabilities        SWICERTSTORE1.ini   SEC-TCERTSTORE-SWICERTSTORE1HW-18-001
+
+END_TESTCASE                  SEC-TCERTSTORE-SWICERTSTORE1HW-18-0001
+
+
+
+
+
+START_TESTCASE                SEC-TCERTSTORE-SWICERTSTORE1HW-19-0001
+
+//! @SYMTestCaseID            SEC-TCERTSTORE-SWICERTSTORE1HW-19-0001
+
+//! @file                     
+
+//! @SYMTestCaseDesc          Get the mandatory flag for
+
+//! @SYMREQ                   REQ0000
+
+//! @SYMTestCasePriority      High
+
+//! @SYMTestExpectedResults   KErrNone
+
+//! @SYMTestActions           1) Get the mandatory flag for
+
+RUN_TEST_STEP                 -1    CTestHandler        getmandatory           SWICERTSTORE1.ini   SEC-TCERTSTORE-SWICERTSTORE1HW-19-001
+
+END_TESTCASE                  SEC-TCERTSTORE-SWICERTSTORE1HW-19-0001
+
+
+
+
+
+START_TESTCASE                SEC-TCERTSTORE-SWICERTSTORE1HW-20-0001
+
+//! @SYMTestCaseID            SEC-TCERTSTORE-SWICERTSTORE1HW-20-0001
+
+//! @file                     
+
+//! @SYMTestCaseDesc          Deleting the SWI cert store
+
+//! @SYMREQ                   REQ0000
+
+//! @SYMTestCasePriority      High
+
+//! @SYMTestExpectedResults   KErrNone
+
+//! @SYMTestActions           1) Deleting the SWI cert store
+
+RUN_TEST_STEP                 -1    CTestHandler        delete              
+
+END_TESTCASE                  SEC-TCERTSTORE-SWICERTSTORE1HW-20-0001
+
+
+
+
+
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/swicertstore2.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/swicertstore2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // swicertstore2.txt
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/swicertstore3.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/swicertstore3.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // swicertstore3.txt
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/swicertstore4.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/swicertstore4.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // swicertstore4.txt
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/t_certstore.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/t_certstore.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-T_CERTSTORE-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/t_certstore_2.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/t_certstore_2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-T_CERTSTORE_2-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/t_certstore_sha2.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/t_certstore_sha2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-TCERTSTORESHA2-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/t_handle_1.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/t_handle_1.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-T_HANDLE_1-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/unifiedcertstore1-conf1.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/unifiedcertstore1-conf1.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-UNIFIEDCERTSTORE1-CONF1-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/unifiedcertstore1-conf2.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/unifiedcertstore1-conf2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-UNIFIEDCERTSTORE1-CONF2-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/unifiedcertstore1-conf3.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/unifiedcertstore1-conf3.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-UNIFIEDCERTSTORE1-CONF3-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/unifiedcertstore2-conf1.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/unifiedcertstore2-conf1.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-UNIFIEDCERTSTORE2-CONF1-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/unifiedcertstore2-conf2.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/unifiedcertstore2-conf2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-UNIFIEDCERTSTORE2-CONF2-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/unifiedcertstore2-conf2a.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/unifiedcertstore2-conf2a.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-UNIFIEDCERTSTORE2-CONF2A-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/unifiedcertstore2-conf3.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/unifiedcertstore2-conf3.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-UNIFIEDCERTSTORE2-CONF3-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/unifiedcertstore3-conf1.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/unifiedcertstore3-conf1.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-UNIFIEDCERTSTORE3-CONF1-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/unifiedcertstore3-conf2.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/unifiedcertstore3-conf2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-UNIFIEDCERTSTORE3-CONF2-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/unifiedcertstore3-conf3.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/unifiedcertstore3-conf3.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-UNIFIEDCERTSTORE3-CONF3-0001
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/wri-swicertstore1.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/wri-swicertstore1.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // wri-swicertstore1.txt
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/wri-swicertstore2.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/wri-swicertstore2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // wri-swicertstore2.txt
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/wri-swicertstore3.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/wri-swicertstore3.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // wri-swicertstore3.txt
--- a/cryptoservices/certificateandkeymgmt/tcertstore/scripts/wri-swicertstorehw.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tcertstore/scripts/wri-swicertstorehw.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // wri-swicertstore1.txt
--- a/cryptoservices/certificateandkeymgmt/tder/dergen.pl	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tder/dergen.pl	Sat Dec 05 21:41:51 2009 +0000
@@ -15,9 +15,6 @@
 # Basic ASN.1 encoding library
 # Some parts of this program requrie OpenSSL which may be freely downloaded
 # from www.openssl.org
-#
-#!/bin/perl -w
-
 use strict;
 use Digest::HMAC_MD5;
 use Digest::HMAC_SHA1;
--- a/cryptoservices/certificateandkeymgmt/tder/example/goodaia.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tder/example/goodaia.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,6 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
 // This example script demonstrates how complex ASN.1 may be imported, edited
 // and exported.
 // This was generated from the output of importdumpasn1.pl and the signature
--- a/cryptoservices/certificateandkeymgmt/tpkcs10/scripts/tpkcs10_v2.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tpkcs10/scripts/tpkcs10_v2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,22 +13,7 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
-//
+
 PRINT Run Positive and OOM tests tpkcs1010serverv2 Suite 
 
 LOAD_SUITE tpkcs10serverv2
--- a/cryptoservices/certificateandkeymgmt/tpkcs7/scripts/tcms.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tpkcs7/scripts/tcms.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,6 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
 // tcms.script
 
 LOAD_SUITE tpkcs7server
--- a/cryptoservices/certificateandkeymgmt/tpkcs7/scripts/tinteg_cms.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tpkcs7/scripts/tinteg_cms.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,6 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
 // tinteg_cms.script
 // Integration tests for CMS (Cryptographic message sintax)
 
--- a/cryptoservices/certificateandkeymgmt/tpkcs7/scripts/tpkcs7_v2.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tpkcs7/scripts/tpkcs7_v2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,6 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
 // tpkcs7.script
 
 LOAD_SUITE tpkcs7server
--- a/cryptoservices/certificateandkeymgmt/tpkixcert/scripts/cancel1.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tpkixcert/scripts/cancel1.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-CANCEL1-PKIXCERT-0001
--- a/cryptoservices/certificateandkeymgmt/tpkixcert/scripts/oom1.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tpkixcert/scripts/oom1.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-OOM1-PKIXCERT-0001
--- a/cryptoservices/certificateandkeymgmt/tpkixcert/scripts/oom2.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tpkixcert/scripts/oom2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-OOM2-PKIXCERT-0001
--- a/cryptoservices/certificateandkeymgmt/tpkixcert/scripts/oom3.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tpkixcert/scripts/oom3.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-OOM3-PKIXCERT-0001
--- a/cryptoservices/certificateandkeymgmt/tpkixcert/scripts/oom4.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tpkixcert/scripts/oom4.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-OOM4-0001
--- a/cryptoservices/certificateandkeymgmt/tpkixcert/scripts/tpkixtest_all.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tpkixcert/scripts/tpkixtest_all.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-TPKIXTEST_ALL-0001
--- a/cryptoservices/certificateandkeymgmt/tpkixcert/scripts/tpkixtest_part1.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tpkixcert/scripts/tpkixtest_part1.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-TPKIXTEST_PART1-0001
--- a/cryptoservices/certificateandkeymgmt/tpkixcert/scripts/tpkixtest_part2.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tpkixcert/scripts/tpkixtest_part2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-TPKIXTEST_PART2-0001
--- a/cryptoservices/certificateandkeymgmt/tpkixcert_tef/scripts/tpkixcert_tef.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tpkixcert_tef/scripts/tpkixcert_tef.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,6 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
 //! @file
 //! @SYMTestSuiteName SEC-CERTMAN
 //! @SYMScriptTestEnvironment The script has no specific test environment requirements. 
--- a/cryptoservices/certificateandkeymgmt/twtlscert/scripts/twtlscert.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/twtlscert/scripts/twtlscert.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-TWTLSCERT-0001
--- a/cryptoservices/certificateandkeymgmt/twtlscert/scripts/twtlscert1.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/twtlscert/scripts/twtlscert1.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-TWTLSCERT1-0001
--- a/cryptoservices/certificateandkeymgmt/twtlscert/scripts/twtlscert2.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/twtlscert/scripts/twtlscert2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-TWTLSCERT2-0001
--- a/cryptoservices/certificateandkeymgmt/twtlscert/scripts/twtlscert3.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/twtlscert/scripts/twtlscert3.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-TWTLSCERT3-0001
--- a/cryptoservices/certificateandkeymgmt/tx509/Data/extensions/certextbuilder.pl	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tx509/Data/extensions/certextbuilder.pl	Sat Dec 05 21:41:51 2009 +0000
@@ -15,12 +15,6 @@
 # This script converts certificate constraint extensions specified in an INI 
 # format into a hex representation of the DER encoding that OpenSSL can 
 # add to a certificate.
-# This script allows corrupt certificate extensions to be generated for unit 
-# testing and therefore using this script to create production certificates is
-# NOT supported.
-#
-#!/bin/perl -w
-
 use strict;
 use Getopt::Long;
 
--- a/cryptoservices/certificateandkeymgmt/tx509/Scripts/tx509-1.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tx509/Scripts/tx509-1.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-TX509-1-0001
--- a/cryptoservices/certificateandkeymgmt/tx509/Scripts/tx509-2.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tx509/Scripts/tx509-2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-TX509-2-0001
--- a/cryptoservices/certificateandkeymgmt/tx509/Scripts/tx509-3.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tx509/Scripts/tx509-3.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-TX509-3-0001
--- a/cryptoservices/certificateandkeymgmt/tx509/Scripts/tx509-dnames.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tx509/Scripts/tx509-dnames.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-TX509-DNAMES-0001
--- a/cryptoservices/certificateandkeymgmt/tx509/Scripts/tx509-oom1.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tx509/Scripts/tx509-oom1.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-TX509-OOM1-0001
--- a/cryptoservices/certificateandkeymgmt/tx509/Scripts/tx509-oom2.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tx509/Scripts/tx509-oom2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-TX509-OOM2-0001
--- a/cryptoservices/certificateandkeymgmt/tx509/Scripts/tx509.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tx509/Scripts/tx509.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-TX509-0001
--- a/cryptoservices/certificateandkeymgmt/tx509/Scripts/tx509_dev_certs.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tx509/Scripts/tx509_dev_certs.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-TX509_DEV_CERTS-0001
--- a/cryptoservices/certificateandkeymgmt/tx509/Scripts/tx509_dev_certs_oom.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/tx509/Scripts/tx509_dev_certs_oom.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CERTMAN-TX509_DEV_CERTS_OOM-0001
--- a/cryptoservices/certificateandkeymgmt/x500/x520ava.cpp	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/x500/x520ava.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -21,55 +21,6 @@
 #include <asn1enc.h>
 #include <asn1dec.h>
 
-#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
-//these are the only attribute types we handle at present
-_LIT(KX520PostalCode,"2.5.4.17");
-_LIT(KRFC2247DomainComponent, "0.9.2342.19200300.100.1.25");
-_LIT(KRFC2256Street,"2.5.4.9");
-_LIT(KPKCS9UnstructuredName, "1.2.840.113549.1.9.2");
-
-//email address is deprecated but we support it anyway...
-_LIT(KPKCS9EmailAddress, "1.2.840.113549.1.9.1");
-
-/** The maximum length allowed for a country name. */
-const TInt KX520MaxCLength = 2;
-/** The maximum length allowed for an organization name. */
-const TInt KX520MaxOLength = 64;
-/** The maximum length allowed for an organizational unit name. */
-const TInt KX520MaxOULength = 64;
-/** The maximum length allowed for a locality name. */
-const TInt KX520MaxLLength = 128;
-/** The maximum length allowed for a state or province name. */
-const TInt KX520MaxSOPLength = 128;
-/** The maximum length allowed for an title. */
-const TInt KX520MaxTLength = 64;
-/** The maximum length allowed for a common name. */
-const TInt KX520MaxCNLength = 256;
-/** The maximum length allowed for a given name. */
-const TInt KX520MaxGNLength = 16;
-/** The maximum length allowed for a surname. */
-const TInt KX520MaxSLength = 40;
-/** The maximum length allowed for initials. */
-const TInt KX520MaxILength = 5;
-/** The maximum length allowed for a generation qualifier. */
-const TInt KX520MaxGQLength = 3;
-/** The maximum length allowed for a serial number. */
-const TInt KX520MaxSNLength = 64;
-/** The maximum length allowed for a postal code. */
-const TInt KX520MaxPostalCodeLength = 40;
-/** The maximum length allowed for an email address. */
-const TInt KPKCS9MaxEmailAddressLength = 256;
-/** The maximum length allowed for an unstructured name. */
-const TInt KPKCS9MaxUnstructuredNameLength = 256;
-// No maximum was specified in the standard - 128 should be sufficient
-/** The maximum length allowed for an RFC 2247 domain component. 
-* 
-* Each component of the domain name is a short string. */
-const TInt KRFC2247MaxDomainComponentLength = 128;
-/** The maximum length allowed a for street. */
-const TInt KRFC2256StreetLength = 128;
-
-#endif
 
 EXPORT_C CX520AttributeTypeAndValue* CX520AttributeTypeAndValue::NewL(const CX520AttributeTypeAndValue& aPair)
 	{
--- a/cryptoservices/certificateandkeymgmt/x509/x509constraintext.cpp	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/certificateandkeymgmt/x509/x509constraintext.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -17,7 +17,7 @@
 
 
 #include <asn1dec.h>
-#include <x509constraintext.h>
+#include "x509constraintext.h"
 #include "x509bitstring.h"
 
 // Integer list methods
--- a/cryptoservices/filebasedcertificateandkeystores/Inc/filetokenstests.iby	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/Inc/filetokenstests.iby	Sat Dec 05 21:41:51 2009 +0000
@@ -46,7 +46,8 @@
 ECOM_PLUGIN(101faaa5.dll, 101faaa5.rsc)
 
 #if (defined(SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT) && defined(SYMBIAN_ENABLE_SDP_ECC))
-data = ZDRIVE\tkeystore\scripts\thwkeystore.txt		tkeystore\scripts\thwkeystore.txt
+data = ZDRIVE\tkeystore\scripts\thwkeystore.script		tkeystore\scripts\thwkeystore.script
+data = ZDRIVE\tkeystore\scripts\thwkeystore.ini			tkeystore\scripts\thwkeystore.ini
 data = ZPRIVATE\101f7e95\hwkeys.dat					private\101f7e95\hwkeys.dat
 data = ZDRIVE\tkeystore\data\hwkeys.dat				tkeystore\scripts\hwkeys.dat
 file = ABI_DIR\BUILD_DIR\tcryptotokenhai.dll			sys\bin\tcryptotokenhai.dll
@@ -59,7 +60,8 @@
 data = ZDRIVE\tkeystore\scripts\initialize.script	tkeystore\scripts\initialize.script
 data = ZDRIVE\tkeystore\scripts\reg_first_identity.script	tkeystore\scripts\reg_first_identity.script
 data = ZDRIVE\tkeystore\scripts\reg_second_identity.script	tkeystore\scripts\reg_second_identity.script
-data = ZDRIVE\tkeystore\scripts\authobjects_useauth.txt	tkeystore\scripts\authobjects_useauth.txt
+data = ZDRIVE\tkeystore\scripts\authobjects_useauth.script	tkeystore\scripts\authobjects_useauth.script
+data = ZDRIVE\tkeystore\scripts\authobjects_useauth.ini	tkeystore\scripts\authobjects_useauth.ini
 
 //TMS support
 data = ZDRIVE\tkeystore\scripts\cancel_useauth.script		tkeystore\scripts\cancel_useauth.script
@@ -178,6 +180,7 @@
 // ttesttools data
 
 data = ZDRIVE\ttesttools\data\cert_addapps.txt		ttesttools\data\cert_addapps.txt
+data = ZDRIVE\ttesttools\data\cert_addapps1.txt		ttesttools\data\cert_addapps1.txt
 data = ZDRIVE\ttesttools\data\cert_addappsfail1.txt	ttesttools\data\cert_addappsfail1.txt
 data = ZDRIVE\ttesttools\data\cert_addappsfail2.txt	ttesttools\data\cert_addappsfail2.txt
 data = ZDRIVE\ttesttools\data\cert_helpfail1.txt	ttesttools\data\cert_helpfail1.txt
@@ -214,6 +217,11 @@
 data = ZDRIVE\ttesttools\data\cert_setappsfail1.txt	ttesttools\data\cert_setappsfail1.txt
 data = ZDRIVE\ttesttools\data\cert_setappsfail2.txt	ttesttools\data\cert_setappsfail2.txt
 data = ZDRIVE\ttesttools\data\certfail.txt		ttesttools\data\certfail.txt
+data = ZDRIVE\ttesttools\data\cert_importdeletable1.txt		ttesttools\data\cert_importdeletable1.txt
+data = ZDRIVE\ttesttools\data\cert_importdeletable2.txt		ttesttools\data\cert_importdeletable2.txt
+data = ZDRIVE\ttesttools\data\cert_importdeletable3.txt		ttesttools\data\cert_importdeletable3.txt
+data = ZDRIVE\ttesttools\data\cert_removedeletable1.txt		ttesttools\data\cert_removedeletable1.txt
+data = ZDRIVE\ttesttools\data\cert_removedeletable2.txt		ttesttools\data\cert_removedeletable2.txt
 data = ZDRIVE\ttesttools\data\certhelp.txt		ttesttools\data\certhelp.txt
 
 data = ZDRIVE\tkeystore\data\corrupt.001		tkeystore\data\corrupt.001
@@ -274,10 +282,13 @@
 #else
 // additional certstore needed in normal rom for sec-filetokens tests which uses certstore1 ,2,...
 ECOM_PLUGIN(tadditionalstores.dll, tadditionalstores.rsc)
-// The below 4 test data needed for sec-filetokens-tools.script which will run only in normal image(testsecurity_sdp.bat)
-data = ZDRIVE\tcertstore\ent-wtls.cer					\tcertstore\ent-wtls.cer attrib=r
-data = ZDRIVE\tcertstore\ent-wtls1.cer					\tcertstore\ent-wtls1.cer attrib=r
-data = ZDRIVE\tcertstore\ent-wtls2.cer					\tcertstore\ent-wtls2.cer attrib=r
+// The below test data needed for sec-filetokens-tools.script which will run only in normal image(testsecurity_sdp.bat)
+data = ZDRIVE\tcertstore\ent-wtls.cer					             \tcertstore\ent-wtls.cer attrib=r
+data = ZDRIVE\tcertstore\ent-wtls1.cer					           \tcertstore\ent-wtls1.cer attrib=r
+data = ZDRIVE\tcertstore\ent-wtls2.cer					           \tcertstore\ent-wtls2.cer attrib=r
+data = ZDRIVE\tcertstore\thawteserverca.cer				         \tcertstore\thawteserverca.cer attrib=r
+data = ZDRIVE\tcertstore\veriSignclass1primaryca.cer			 \tcertstore\veriSignclass1primaryca.cer attrib=r
+
 // DSA private key and certificate for certstore tests
 data = ZDRIVE\tcertstore\data\pkcs8dsa1.001			tcertstore\data\pkcs8dsa1.001 attrib=r
 data = ZDRIVE\tcertstore\data\cert_dsa1.der			tcertstore\data\cert_dsa1.der attrib=r
--- a/cryptoservices/filebasedcertificateandkeystores/group/bld.inf	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/group/bld.inf	Sat Dec 05 21:41:51 2009 +0000
@@ -71,10 +71,13 @@
 ../test/tkeystore/scripts/batchfiles/tkeystore_export_post.bat	/epoc32/winscw/c/tkeystore/scripts/batchfiles/tkeystore_export_post.bat	
 
 #ifdef SYMBIAN_AUTH_SERVER
-../test/tkeystore/scripts/authobjects_v2_useauth.txt	/epoc32/winscw/c/tkeystore/scripts/authobjects_useauth.txt
+../test/tkeystore/scripts/authobjects_v2_useauth.script	/epoc32/winscw/c/tkeystore/scripts/authobjects_useauth.script
+../test/tkeystore/scripts/authobjects_v2_useauth.ini	/epoc32/winscw/c/tkeystore/scripts/authobjects_useauth.ini
 
-../test/tkeystore/scripts/createoldkeystore.txt			/epoc32/winscw/c/tkeystore/scripts/createoldkeystore.txt
-../test/tkeystore/scripts/testnewkeystore.txt			/epoc32/winscw/c/tkeystore/scripts/testnewkeystore.txt
+../test/tkeystore/scripts/createoldkeystore.script			/epoc32/winscw/c/tkeystore/scripts/createoldkeystore.script
+../test/tkeystore/scripts/createoldkeystore.ini			/epoc32/winscw/c/tkeystore/scripts/createoldkeystore.ini
+../test/tkeystore/scripts/testnewkeystore.script			/epoc32/winscw/c/tkeystore/scripts/testnewkeystore.script
+../test/tkeystore/scripts/testnewkeystore.ini			/epoc32/winscw/c/tkeystore/scripts/testnewkeystore.ini
 
 ../test/tkeystore/scripts/oldserver_newfeature.script		/epoc32/winscw/c/tkeystore/scripts/oldserver_newfeature.script
 ../test/tkeystore/scripts/tkeystore_useauth.script			/epoc32/winscw/c/tkeystore/scripts/tkeystore_useauth.script
@@ -121,6 +124,7 @@
 // ttesttools data
 
 ../test/ttesttools/data/cert_addapps.txt	/epoc32/winscw/c/ttesttools/data/cert_addapps.txt
+../test/ttesttools/data/cert_addapps1.txt	/epoc32/winscw/c/ttesttools/data/cert_addapps1.txt
 ../test/ttesttools/data/cert_addappsfail1.txt	/epoc32/winscw/c/ttesttools/data/cert_addappsfail1.txt
 ../test/ttesttools/data/cert_addappsfail2.txt	/epoc32/winscw/c/ttesttools/data/cert_addappsfail2.txt
 ../test/ttesttools/data/cert_helpfail1.txt	/epoc32/winscw/c/ttesttools/data/cert_helpfail1.txt
@@ -158,7 +162,11 @@
 ../test/ttesttools/data/cert_setappsfail2.txt	/epoc32/winscw/c/ttesttools/data/cert_setappsfail2.txt
 ../test/ttesttools/data/certfail.txt		/epoc32/winscw/c/ttesttools/data/certfail.txt
 ../test/ttesttools/data/certhelp.txt		/epoc32/winscw/c/ttesttools/data/certhelp.txt
-
+../test/ttesttools/data/cert_importdeletable1.txt		/epoc32/winscw/c/ttesttools/data/cert_importdeletable1.txt
+../test/ttesttools/data/cert_importdeletable2.txt		/epoc32/winscw/c/ttesttools/data/cert_importdeletable2.txt
+../test/ttesttools/data/cert_importdeletable3.txt		/epoc32/winscw/c/ttesttools/data/cert_importdeletable3.txt
+../test/ttesttools/data/cert_removedeletable1.txt		/epoc32/winscw/c/ttesttools/data/cert_removedeletable1.txt
+../test/ttesttools/data/cert_removedeletable2.txt		/epoc32/winscw/c/ttesttools/data/cert_removedeletable2.txt
 
 ../test/ttesttools/data/corrupt.001		/epoc32/winscw/c/tkeystore/data/corrupt.001
 ../test/ttesttools/data/empty.001		/epoc32/winscw/c/tkeystore/data/empty.001
@@ -333,7 +341,8 @@
 ../Inc/filetokenstests.iby /epoc32/rom/include/filetokenstests.iby
 
 #if (defined(SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT) && defined(SYMBIAN_ENABLE_SDP_ECC))
-../test/tkeystore/scripts/thwkeystore.txt			/epoc32/winscw/c/tkeystore/scripts/thwkeystore.txt
+../test/tkeystore/scripts/thwkeystore.script			/epoc32/winscw/c/tkeystore/scripts/thwkeystore.script
+../test/tkeystore/scripts/thwkeystore.ini			/epoc32/winscw/c/tkeystore/scripts/thwkeystore.ini
 ../test/tkeystore/data/hwkeys.dat				/epoc32/data/z/private/101f7e95/hwkeys.dat
 ../test/tkeystore/data/hwkeys.dat				/epoc32/release/winscw/udeb/z/private/101f7e95/hwkeys.dat
 ../test/tkeystore/data/hwkeys.dat				/epoc32/release/winscw/urel/z/private/101f7e95/hwkeys.dat
--- a/cryptoservices/filebasedcertificateandkeystores/source/certstore/server/filecertstore.cpp	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/source/certstore/server/filecertstore.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -326,11 +326,15 @@
 	// API policing
 	const CCertStoreEntry& entry = iEntryList->GetByIndex(index);
 
-	if (!AddRemovePolicy(entry.CertInfo().CertificateOwnerType()).CheckPolicy(aMessage))
+
+	//Check whether the certificate is deleteable and that the necessary capabilities are 
+	//present
+	if (!AddRemovePolicy(entry.CertInfo().CertificateOwnerType()).CheckPolicy(aMessage) ||
+	        !entry.CertInfo().IsDeletable())
 		{
 		User::Leave(KErrPermissionDenied);
 		}
-
+	
 	TCleanupItem cleanupStore(RevertStore, iStore);
 	CleanupStack::PushL(cleanupStore);	
 	
--- a/cryptoservices/filebasedcertificateandkeystores/test/certtool/certtool.cpp	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/certtool/certtool.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -36,6 +36,7 @@
 _LIT(KDone, "Press any key to continue... \n");
 
 // CertTool command line parameters
+
 _LIT(KList, "-list");
 _LIT(KListShort, "-l");
 
@@ -85,9 +86,21 @@
 
 _LIT(KUids, "-uids");
 
+_LIT(KDeletable, "-deletable");
+_LIT(KDeletableShort, "-del");
+
 const TInt KMaxArgs = 10;
 
 /**
+ * Certtool can operate in the following modes.
+**/
+enum OperationMode {
+Interactive,
+NonInteractive
+};
+
+
+/**
  * Displays tool name and copy-right informations.
  */
 LOCAL_D void BoilerPlateL(CConsoleBase* console) 
@@ -145,276 +158,333 @@
 	}
 	
 /**
+ * Returns the mode in which the tool would operate. If the command is invoked 
+ * with 2 parameters(certool inputFile outputFile), the tool works in non-interactive
+ * mode else the interactive mode is chosen.
+ */
+
+LOCAL_D OperationMode ModeOfOperationL(const CCommandLineArguments& aCmdArgs, RFs& aFs, RFile& aFile)
+    {
+    OperationMode mode = Interactive;
+    if (KeyToolUtils::DoesFileExistsL(aFs,aCmdArgs.Arg(1)))
+        {
+		mode = NonInteractive;
+        TInt error = aFile.Open(aFs, aCmdArgs.Arg(1), EFileRead|EFileShareAny);
+        aFile.Close();
+        
+        TInt error1 = aFile.Replace(aFs, aCmdArgs.Arg(2), EFileWrite|EFileShareExclusive);
+        // If the input file doesn't exist or not able to create outputfile
+        // switch to Interactive mode
+        if (error != KErrNone || error1 != KErrNone)
+            {
+            CleanupStack::PopAndDestroy(&aFile);
+            mode = Interactive;
+            }   
+                    
+         }
+    return mode;
+    }
+
+/**
+ * The main parsing logic. Same for interactive and non-interactive modes.
+ */
+LOCAL_D void ParseAndHandleCommandL(CArrayFixFlat<TPtrC>& aArgs, CCertToolController& aController)
+    {
+    CKeyToolParameters* params = CKeyToolParameters::NewLC();
+            
+    TInt command = -1; 
+    TInt i = -1;
+           
+    TInt argsCount = aArgs.Count();
+    while (i < (argsCount-1))
+        {
+        i++;
+        if ((aArgs.At(i).CompareF(KDetails)==0)|| (aArgs.At(i).Compare(KDetailsShort)==0))
+                    {
+                    params->iIsDetailed = ETrue;
+                    continue;
+                    }
+        
+                if (aArgs.At(i).CompareF(KPageWise)==0 || (aArgs.At(i).Compare(KPageWiseShort)==0))
+                    {
+                    i++;
+                    params->iPageWise = ETrue;
+                    continue;
+                    }
+
+                if (aArgs.At(i).Compare(KRemoveKeyAlso)==0)
+                    {
+                    params->iRemoveKey = ETrue;
+                    continue;
+                    }
+
+                if (aArgs.At(i).CompareF(KApps)==0)
+                    {
+                    i++;
+                    RArray<TUid> apps;
+                    TInt k = 0;
+                    for (k = i; k < argsCount; k++)
+                        {               
+                        if (aArgs.At(k).Find(_L("-")) == KErrNotFound)
+                            {
+                            TUint uid;
+                            if (aArgs.At(k).CompareF(KSWInstall)==0)
+                                {
+                                uid = swinstalluid;
+                                }
+                            else
+                                {
+                                if (aArgs.At(k).CompareF(KSWInstallOCSP)==0)
+                                    {
+                                    uid = swinstallocspuid;
+                                    }
+                                else
+                                    {
+                                    if (aArgs.At(k).CompareF(KMidletInstall)==0)
+                                        {
+                                        uid = midletinstalluid;
+                                        }
+                                    else
+                                        {
+                                        if (aArgs.At(k).CompareF(KTls)==0)
+                                            {
+                                            uid = tlsuid;
+                                            }
+                                        else
+                                            {
+                                            // no more valid apps, break cycle
+                                            break;
+                                            }
+                                        }
+                                    }
+                                }
+                            apps.Append(TUid::Uid(uid));                        
+                            }
+                        else 
+                            {
+                            // We parsed all UIDs, break the cycle and go on!
+                            break;
+                            }
+                        }
+                    i = k-1;
+                    params->iUIDs = apps; // We pass on ownership
+                    params->iIsDetailed = ETrue;
+                    continue;           
+                    }
+            
+                if (aArgs.At(i).CompareF(KUids)==0)
+                    {
+                    i++;
+                    RArray<TUid> uids;
+                    TInt k = 0;
+                    for (k = i; k < argsCount; k++)
+                        {               
+                        if (aArgs.At(k).Left(2) == _L("0x"))
+                            {
+                            TLex lex(aArgs.At(k).Mid(2));       
+                            TUint uid =0;
+                            TInt err = lex.Val(uid, EHex);
+                            if (err == KErrNone)
+                                {
+                                params->iUIDs.Append(TUid::Uid(uid));                       
+                                }            
+                            }
+                        else 
+                            {
+                            // We parsed all UIDs, break the cycle and go on!
+                            break;
+                            }
+                        }
+                    i = k-1;
+                    params->iIsDetailed = ETrue;
+                    continue;           
+                    }
+                
+                TDesC& cmd = aArgs.At(i);
+                if (cmd.CompareF(KLabel) == 0 || 
+                    cmd.CompareF(KPrivate) == 0 || cmd.CompareF(KStore) == 0 ||
+                    cmd.CompareF(KOwnerType) == 0 || cmd.Compare(KOwnerTypeShort) == 0 ||
+                    cmd.CompareF(KHelp) == 0 || cmd.Compare(KHelpShort) == 0 ||
+                    cmd.CompareF(KDeletable) == 0 || cmd.CompareF(KDeletableShort) == 0)
+                    {
+                    i++;
+                    if (i >= argsCount || aArgs.At(i)[0] == '-')
+                        {
+                        i = argsCount;
+                        command = CertToolDefController::KUsageCommand;
+                        }
+                    else if (cmd.CompareF(KHelp) == 0 || cmd.Compare(KHelpShort) == 0)
+                        {
+                        params->iDefault = aArgs.At(i).AllocL();
+                        i = argsCount;  
+                        }
+                    else if (cmd.CompareF(KLabel) == 0)
+                        {
+                        params->iLabel = aArgs.At(i).AllocL();
+                        }
+                    else if (cmd.CompareF(KPrivate) == 0)
+                        {
+                        params->iPrivate = aArgs.At(i).AllocL();
+                        }
+                    else if (cmd.CompareF(KStore) == 0)
+                        {
+                        TLex parser(aArgs.At(i));
+                        TInt err = parser.Val(params->iCertstoreIndex);
+                        params->iIsDetailed = ETrue;
+                        }
+                    else if (cmd.CompareF(KOwnerType) == 0 || cmd.Compare(KOwnerTypeShort) == 0)
+                        {
+                        params->iIsDetailed = ETrue;
+                        params->iOwnerType = aArgs.At(i).AllocL();
+                        }
+                    else if (cmd.CompareF(KDeletable) == 0 || cmd.CompareF(KDeletableShort) == 0)
+                        {
+                        params->iIsDetailed = ETrue;
+                        params->iIsDeletable = aArgs.At(i).AllocL();
+                        }
+                    continue;
+                    }
+        
+                if (VerifyCommand(aArgs.At(i), command, i))
+                    {
+                    continue;
+                    }
+
+                    
+                if (i!=0) 
+                    {
+                    if (aArgs.At(i)[0] == '-')
+                        {
+                        i = argsCount;
+                        command = CertToolDefController::KUsageCommand;
+                        continue;
+                        }
+                    delete params->iDefault;
+                    params->iDefault = NULL;
+                    params->iDefault = aArgs.At(i).AllocL();
+                    params->iIsDetailed = ETrue;            
+                    }
+                } 
+             
+             
+            if (command != -1)
+                {
+                TRAP_IGNORE(aController.HandleCommandL(command, params));
+                }
+            else 
+                {
+                aController.HandleCommandL(CertToolDefController::KUsageCommand, params);       
+                }
+            CleanupStack::PopAndDestroy(params);
+            }
+
+
+/**
+ * Parsing the command for non-interactive mode.
+ */
+
+LOCAL_D void ParseCommandInNonInteractiveModeL(RFile& aFile, const CCommandLineArguments& aCmdArgs)
+    {
+  
+    KeyToolUtils::SetFile(&aFile);
+    
+    CKeytoolFileView* view(0); 
+    view = CKeytoolFileView::NewLC(aCmdArgs.Arg(1));
+    TInt cmdCount = view->SplitFileInputToArrayL();
+    
+    //For every command, parse and handle.
+    for (TInt j = 0; j < cmdCount; j++)
+        {
+        CCertToolController* controller = CCertToolController::NewLC(*view);
+        
+        CArrayFixFlat<TPtrC>* args = view->ReadArrayArgumentsLC(j);
+        ParseAndHandleCommandL(*args, *controller);
+        
+        CleanupStack::PopAndDestroy(2, controller);
+        }
+        
+    
+    CleanupStack::PopAndDestroy(view);
+    
+    }
+
+
+/**
+ * Parsing the command for interactive mode.
+ */
+
+
+LOCAL_D void ParseCommandInInteractiveModeL(CConsoleBase& aConsole, const CCommandLineArguments& aCmdArgs)
+    {
+    CArrayFixFlat<TPtrC>* args = new (ELeave) CArrayFixFlat<TPtrC> (10);
+    CleanupStack::PushL(args);
+    CKeytoolConsoleView* view = CKeytoolConsoleView::NewLC(aConsole);
+    CCertToolController* controller = CCertToolController::NewLC(*view);
+
+    TInt cmdArgsCount = aCmdArgs.Count();
+    
+    KeyToolUtils::SetConsole(&aConsole);
+    BoilerPlateL(&aConsole);
+    
+    for (TInt i = 0; i < cmdArgsCount; i++)
+        {
+        args->AppendL(aCmdArgs.Arg(i));
+        }
+    
+    //Interactive mode can handle only one command at a time.
+    ParseAndHandleCommandL(*args, *controller); 
+    
+    // We are done!
+    aConsole.Printf(KNewLine);
+    aConsole.Printf(KDone);
+    aConsole.Getch(); 
+    
+    CleanupStack::PopAndDestroy(3, args); // controller, view, args
+    
+    }
+
+/**
  * Parses the command line and given control to the handler to deal with the request.
  */
 LOCAL_D void DoMainL() 
 	{
-	TBool interactiveMode = ETrue;
-	
+
 	RFs fs;
 	User::LeaveIfError(fs.Connect());
 	CleanupClosePushL(fs);
+	RFile file;
 	
 	CConsoleBase* console = Console::NewL(KShortName, TSize(KConsFullScreen, KConsFullScreen));
 	CleanupStack::PushL(console);
 	CCommandLineArguments* cmdArgs = CCommandLineArguments::NewLC();
 	TInt cmdArgsCount = cmdArgs->Count();
 	
-	RFile file;
-	// command: certtool inputfile outputfile
+	
+	OperationMode currentMode = Interactive; //Interactive by default.
+	
+	// Determine the mode of operation as either interactive or non-interactive.
 	if (cmdArgsCount == 3)
 		{
-		if (KeyToolUtils::DoesFileExistsL(fs,cmdArgs->Arg(1)))
-		  	{
-		  	interactiveMode = EFalse;
-		  	TInt error = file.Open(fs, cmdArgs->Arg(1), EFileRead|EFileShareAny);
-		  	file.Close();
-		  	TInt error1 = file.Replace(fs, cmdArgs->Arg(2), EFileWrite|EFileShareExclusive);
-		  	CleanupClosePushL(file);
-		  	// If the input file doesn't exist or not able to create outputfile
-		  	// switch to Interactive mode
-		  	if (error != KErrNone || error1 != KErrNone)
-		   		{
-			   	CleanupStack::PopAndDestroy(&file);
-			   	interactiveMode = ETrue;
-			  	}	
-				
-			}
+		currentMode = ModeOfOperationL(*cmdArgs, fs, file);
 		}
 		
-	CKeytoolConsoleView* view = CKeytoolConsoleView::NewLC(*console);
-	CCertToolController* controller = CCertToolController::NewLC(*view);
-	CArrayFixFlat<TPtrC>* args = new (ELeave) CArrayFixFlat<TPtrC> (10);
-	CleanupStack::PushL(args);
-	CKeytoolFileView* view1 = NULL;
-
-	TInt cmdCount = 0;
-	if (interactiveMode)
-		{
-		KeyToolUtils::SetConsole(console);
-		BoilerPlateL(console);
-		for (TInt i = 0; i < cmdArgsCount; i++)
-			{
-			args->AppendL(cmdArgs->Arg(i));
-			}
-		// In Interactive mode by default we can execute 1 command only.
-		cmdCount = 1;
-		}
-	else
-		{
-		CleanupStack::PopAndDestroy(3, view); // args, controller, view
-		KeyToolUtils::SetFile(&file);
-		view1 = CKeytoolFileView::NewLC(cmdArgs->Arg(1));
-		cmdCount = view1->SplitFileInputToArrayL();
-		}	
-	
-	for (TInt j = 0; j < cmdCount; j++)
-		{
-		if (!interactiveMode)
-			{
-			controller = CCertToolController::NewLC(*view1);
-			args = view1->ReadArrayArgumentsLC(j);
-			}
-
-		CKeyToolParameters* params = CKeyToolParameters::NewLC();
-		
-		TInt command = -1; 
-		TInt i = -1;
-		
-		TInt argsCount = args->Count();
-		while (i < (argsCount-1))
-		 	{
-		 	i++;
-			if ((args->At(i).CompareF(KDetails)==0)|| (args->At(i).Compare(KDetailsShort)==0))
-				{
-				params->iIsDetailed = ETrue;
-				continue;
-				}
-	
-			if (args->At(i).CompareF(KPageWise)==0 || (args->At(i).Compare(KPageWiseShort)==0))
-				{
-				i++;
-				params->iPageWise = ETrue;
-				continue;
-				}
-
-			if (args->At(i).Compare(KRemoveKeyAlso)==0)
-				{
-				params->iRemoveKey = ETrue;
-				continue;
-				}
+	switch(currentMode)
+	    {
+	    case Interactive:
+	        ParseCommandInInteractiveModeL(*console, *cmdArgs);
+	        break;
+	        
+	    case NonInteractive:
+	        //file refers to the output file name.
+	        CleanupClosePushL(file);
+	        ParseCommandInNonInteractiveModeL(file, *cmdArgs);
+	        CleanupStack::PopAndDestroy(&file);
+	        break;
+	    }
 
-			if (args->At(i).CompareF(KApps)==0)
-				{
-				i++;
-				RArray<TUid> apps;
-				TInt k = 0;
-				for (k = i; k < argsCount; k++)
-					{				
-					if (args->At(k).Find(_L("-")) == KErrNotFound)
-						{
-						TUint uid;
-						if (args->At(k).CompareF(KSWInstall)==0)
-							{
-							uid = swinstalluid;
-							}
-						else
-							{
-							if (args->At(k).CompareF(KSWInstallOCSP)==0)
-								{
-								uid = swinstallocspuid;
-								}
-							else
-								{
-								if (args->At(k).CompareF(KMidletInstall)==0)
-									{
-									uid = midletinstalluid;
-									}
-								else
-									{
-									if (args->At(k).CompareF(KTls)==0)
-										{
-										uid = tlsuid;
-										}
-									else
-										{
-										// no more valid apps, break cycle
-										break;
-										}
-									}
-								}
-							}
-						apps.Append(TUid::Uid(uid));						
-						}
-					else 
-						{
-						// We parsed all UIDs, break the cycle and go on!
-						break;
-						}
-					}
-				i = k-1;
-				params->iUIDs = apps; // We pass on ownership
-				params->iIsDetailed = ETrue;
-				continue;			
-				}
-		
-			if (args->At(i).CompareF(KUids)==0)
-				{
-				i++;
-				RArray<TUid> uids;
-				TInt k = 0;
-				for (k = i; k < argsCount; k++)
-					{				
-					if (args->At(k).Left(2) == _L("0x"))
-						{
-						TLex lex(args->At(k).Mid(2));		
-						TUint uid =0;
-						TInt err = lex.Val(uid, EHex);
-						if (err == KErrNone)
-							{
-							params->iUIDs.Append(TUid::Uid(uid));						
-							}			 
-						}
-					else 
-						{
-						// We parsed all UIDs, break the cycle and go on!
-						break;
-						}
-					}
-				i = k-1;
-				params->iIsDetailed = ETrue;
-				continue;			
-				}
-			
-			TDesC& cmd = args->At(i);
-			if (cmd.CompareF(KLabel) == 0 || 
-			    cmd.CompareF(KPrivate) == 0 || cmd.CompareF(KStore) == 0 ||
-			    cmd.CompareF(KOwnerType) == 0 || cmd.Compare(KOwnerTypeShort) == 0 ||
-			    cmd.CompareF(KHelp) == 0 || cmd.Compare(KHelpShort) == 0 )
-				{
-				i++;
-				if (i >= argsCount || args->At(i)[0] == '-')
-					{
-					i = argsCount;
-					command = CertToolDefController::KUsageCommand;
-					}
-				else if (cmd.CompareF(KHelp) == 0 || cmd.Compare(KHelpShort) == 0)
-					{
-					params->iDefault = args->At(i).AllocL();
-					i = argsCount;	
-					}
-				else if (cmd.CompareF(KLabel) == 0)
-					{
-					params->iLabel = args->At(i).AllocL();
-					}
-				else if (cmd.CompareF(KPrivate) == 0)
-					{
-					params->iPrivate = args->At(i).AllocL();
-					}
-				else if (cmd.CompareF(KStore) == 0)
-					{
-					TLex parser(args->At(i));
-					TInt err = parser.Val(params->iCertstoreIndex);
-					params->iIsDetailed = ETrue;
-					}
-				else if (cmd.CompareF(KOwnerType) == 0 || cmd.Compare(KOwnerTypeShort) == 0)
-					{
-					params->iIsDetailed = ETrue;
-					params->iOwnerType = args->At(i).AllocL();
-					}
-				else
-					{
-					// no action required	
-					}
-				continue;
-				}
-	
-			if (VerifyCommand(args->At(i), command, i))
-				{
-				continue;
-				}
+	CleanupStack::PopAndDestroy(3, &fs);
+	}
 
-				
-			if (i!=0) 
-				{
-				if (args->At(i)[0] == '-')
-					{
-					i = argsCount;
-					command = CertToolDefController::KUsageCommand;
-					continue;
-					}
-				delete params->iDefault;
-				params->iDefault = NULL;
-				params->iDefault = args->At(i).AllocL();
-				params->iIsDetailed = ETrue;			
-				}
-		 	} 
-		 
-		 
-		if (command != -1)
-			{
-			TRAP_IGNORE(controller->HandleCommandL(command, params));
-			}
-		else 
-			{
-			controller->HandleCommandL(CertToolDefController::KUsageCommand, params);		
-			}
-		CleanupStack::PopAndDestroy(3, controller); // params, args, controller
-		}
-	if (interactiveMode)
-		{
-		CleanupStack::PopAndDestroy(view);
-		// We are done!
-		console->Printf(KNewLine);
-		console->Printf(KDone);
-		console->Getch();	
-		}
-	else
-		{
-		CleanupStack::PopAndDestroy(2, &file); //view1 and file
-		}
-	CleanupStack::PopAndDestroy(3, &fs); //cmdArgs, console, fs
-	}
 	
 
 GLDEF_C TInt E32Main()         // main function called by E32
--- a/cryptoservices/filebasedcertificateandkeystores/test/certtool/certtool.rls	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/certtool/certtool.rls	Sat Dec 05 21:41:51 2009 +0000
@@ -40,11 +40,12 @@
 rls_string STRING_r_certtool_usage_list5 "If a details tag is specified using -details, then it displays all the details about the certificate"
 
 
-rls_string STRING_r_certtool_usage_import "[-store idx] [-label labelname] [-private key] -import | -i {CertFile} Imports a certificate from the specified file."
+rls_string STRING_r_certtool_usage_import "[-store idx] [-label labelname] [-private key] [-deletable | -del {yes|no}] -import | -i {CertFile} Imports a certificate from the specified file."
 rls_string STRING_r_certtool_usage_import2 "The certificate is added to the first store implementation found."
 rls_string STRING_r_certtool_usage_import3 "If a certstore implementation is specified using -store, then it is added to the one specified with -store."
 rls_string STRING_r_certtool_usage_import4 "If a certificate label is specified using -label, then it is added with specified label otherwise the certificate file name is taken as label."
 rls_string STRING_r_certtool_usage_import5 "If a private key (DER encoded pkcs file)is specified using -private, then the certificate is imported as a CA root certificate if and only if the corresponding private key cannot be found in the keystore otherwise imported as a user certificate."
+rls_string STRING_r_certtool_usage_import6 "-deletable {Y|N} Used to set if a certificate is deletable or not. A certificate is deletable by default."
 
 rls_string STRING_r_certtool_usage_remove "-remove CertLabel [-rka] Removes the specified certificate from the certstore."
 rls_string STRING_r_certtool_usage_remove2 "if -rka option specified, then the key with the CertLabel also be removed if and only if the key is imported using -private option from the certtool."
@@ -93,6 +94,7 @@
 
 rls_string STRING_r_certtool_err_remove "Certificate to remove not specified."
 rls_string STRING_r_certtool_err_remove_success "Certificate removed successfully."
+rls_string STRING_r_certtool_err_remove_failure "Certificate removal failed."
 
 rls_string STRING_r_certtool_err_setapps_success "Certificate applicability set successfully."
 
--- a/cryptoservices/filebasedcertificateandkeystores/test/certtool/certtool_addapps.cpp	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/certtool/certtool_addapps.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -35,7 +35,7 @@
 	return self;
 	}
 
-CCertToolAddApps::CCertToolAddApps(CCertToolController* aController) : CCertToolList(aController)
+CCertToolAddApps::CCertToolAddApps(CCertToolController* aController) : CCertToolList(aController), iCertIndex (-1)
 	{
 	}
 
@@ -67,19 +67,17 @@
 				if (iParams->iDefault)    
 					{
 					// Look for a specific certificate					
-					TInt certIndex = -1;
 					for (TInt j = 0; j < iCertInfos.Count(); j++)
 						{
 						if (iCertInfos[j]->Label() == *iParams->iDefault) 
 							{
-							certIndex = j;
+							iCertIndex = j;
 							break;
 							}
 						}	
 						
-					if (certIndex != -1)
+					if (iCertIndex != -1)
 						{
-						iIndex = certIndex;						
 						// Certificate found set app uids!
 						if (iParams->iCertstoreIndex == -1)
 							{
@@ -90,7 +88,7 @@
 							iController->DisplayLocalisedMsgL(R_CERTTOOL_ERR_NOTEXIST);	
 							User::Leave(KErrArgument);			
 							}						
-						iCertStore->Applications(*iCertInfos[iIndex], iApps, iStatus);
+						iCertStore->Applications(*iCertInfos[iCertIndex], iApps, iStatus);
 						iState = ESetApps;
 						SetActive();
 						}
@@ -131,9 +129,24 @@
 				{
 				iParams->iUIDs.Append(iApps[j]);
 				}
+			if(iCertInfos[iCertIndex]->CertificateOwnerType() == ECACertificate)							
+				{
+				iState = ESetTrust;
+				}
+			else
+				{
+				iState = EFinished;								
+				}	
+			iCertStore->SetApplicability(*iCertInfos[iCertIndex], iParams->iUIDs, iStatus);
+			SetActive();
+			}
+			break;
+		case ESetTrust:
+			{
 			iState = EFinished;
-			iCertStore->SetApplicability(*iCertInfos[iIndex], iParams->iUIDs, iStatus);
-			SetActive();
+			const TBool caCert = ETrue;
+			iCertStore->SetTrust(*iCertInfos[iCertIndex],caCert,iStatus);
+			SetActive();				
 			}
 			break;
 		case EFinished:
--- a/cryptoservices/filebasedcertificateandkeystores/test/certtool/certtool_commands.h	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/certtool/certtool_commands.h	Sat Dec 05 21:41:51 2009 +0000
@@ -196,6 +196,7 @@
 private:
 	HBufC8*	iCertData;
 	CUnifiedCertStore* iCertStore;	
+	TBool iIsDeletable;
 	};
 
 
@@ -212,7 +213,7 @@
 	
 public: // From CActive
 	void RunL();
-
+	TInt RunError(TInt aError);    
 protected:
 
 private:
@@ -241,7 +242,6 @@
 private:
 	CCertToolSetApps(CCertToolController* aController);
 	TInt iCertIndex;
-	TBool iCaCert;
 	};
 	
 	
@@ -266,13 +266,14 @@
 		ERetrieve,
 		EGetApps,
 		ESetApps,
+		ESetTrust,
 		EFinished,
 		EIntermediate
 		} iState;
 
 private:
 	CCertToolAddApps(CCertToolController* aController);
-	
+	TInt iCertIndex;
 	};
 	
 /**
--- a/cryptoservices/filebasedcertificateandkeystores/test/certtool/certtool_controller.cpp	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/certtool/certtool_controller.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -155,6 +155,12 @@
 			{
 			certstoreIndex = aParam->iCertstoreIndex;
 			iEngine->AddAppsL(aParam);
+			if (aParam->iLabel)
+				{
+				delete aParam->iDefault;
+				aParam->iDefault = NULL;
+				aParam->iDefault = aParam->iLabel->AllocL();
+				}
 			CActiveScheduler::Start();
 			aParam->iCertstoreIndex = certstoreIndex;	
 			iEngine->ListL(aParam);			
--- a/cryptoservices/filebasedcertificateandkeystores/test/certtool/certtool_import.cpp	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/certtool/certtool_import.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -54,7 +54,8 @@
 
 void CCertToolAdd::ConstructL()
 	{
-
+	//The Certificate added is deletable by default.
+	iIsDeletable = ETrue;
 	}
 
 
@@ -152,10 +153,35 @@
 		TCertificateFormat format = DoRecognizeL(*iCertData);
 						
 		iState = EIntermediate;
+		
+		/**
+		 * If the iIsDeletable variable of iParams is set, parse its value
+		 * and set the iIsDeletable flag appropriately.
+		 */
+		if(iParams->iIsDeletable)
+		    {
+		    HBufC* lowerCaseString = HBufC::NewLC(iParams->iIsDeletable->Length());
+		    TPtr ptr(lowerCaseString->Des());
+		    
+		    //Convert to lower case.
+		    ptr.CopyLC(*iParams->iIsDeletable);
+		    
+		    if(ptr.CompareF(_L("n")) == 0 || ptr.CompareF(_L("no")) == 0 )
+		        {
+		        iIsDeletable = EFalse;
+		        }
+            else if (ptr.CompareF(_L("y")) != 0  && ptr.CompareF(_L("yes")) != 0)
+                {
+                //Wrong value passed.
+                User::Leave(KErrArgument);     
+                }
+
+		    CleanupStack::PopAndDestroy(lowerCaseString);            
+		    }
 
 		SetActive();
 		//wCertStore.Add(*iParams->iLabel, format, ECACertificate, NULL, NULL, *iCertData, iStatus);
-		wCertStore.Add(*iParams->iLabel, format, EUserCertificate, NULL, NULL, *iCertData, iStatus);
+		wCertStore.Add(*iParams->iLabel, format, EUserCertificate, NULL, NULL, *iCertData, iIsDeletable, iStatus);
 		CleanupStack::PopAndDestroy(2, &fs);
 	}
 
@@ -178,7 +204,7 @@
 				MCTWritableCertStore& wCertStore = iCertStore->WritableCertStore(iParams->iCertstoreIndex);
 				TCertificateFormat format = DoRecognizeL(*iCertData);
 				SetActive();				
-				wCertStore.Add(*iParams->iLabel, format, ECACertificate, NULL, NULL, *iCertData, iStatus);				
+				wCertStore.Add(*iParams->iLabel, format, ECACertificate, NULL, NULL, *iCertData, iIsDeletable, iStatus);				
 				}
 			else 
 				{
--- a/cryptoservices/filebasedcertificateandkeystores/test/certtool/certtool_remove.cpp	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/certtool/certtool_remove.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -79,8 +79,12 @@
 			break;
 		case EFinished:
 			{
-			// We are done!
-			iController->DisplayLocalisedMsgL(R_CERTTOOL_ERR_REMOVE_SUCCESS);			
+
+			User::LeaveIfError(iStatus.Int());
+
+		     // We are done!
+		    iController->DisplayLocalisedMsgL(R_CERTTOOL_ERR_REMOVE_SUCCESS);   
+			 		
 			CActiveScheduler::Stop();
 			}
 			break;
@@ -91,3 +95,24 @@
 		}
 	}
 
+TInt CCertToolRemove::RunError(TInt aError)
+    {
+    CActiveScheduler::Stop();
+
+    switch (aError)
+        {
+        case KErrNotFound :
+            {
+            TRAP_IGNORE(iController->DisplayLocalisedMsgL(R_CERTTOOL_ERR_NOTFOUND));         
+            }
+            break;
+        default:
+            {
+            TRAP_IGNORE(iController->DisplayLocalisedMsgL(R_CERTTOOL_ERR_REMOVE_FAILURE, aError));                
+            }
+        }   
+
+	TRAP_IGNORE(iController->DisplayErrorL(_L("\n"), iParams->iPageWise));  
+    return KErrNone;        
+    }
+
--- a/cryptoservices/filebasedcertificateandkeystores/test/certtool/certtool_setapps.cpp	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/certtool/certtool_setapps.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -35,7 +35,7 @@
 	return self;
 	}
 
-CCertToolSetApps::CCertToolSetApps(CCertToolController* aController) : CCertToolList(aController), iCertIndex (-1), iCaCert(EFalse)
+CCertToolSetApps::CCertToolSetApps(CCertToolController* aController) : CCertToolList(aController), iCertIndex (-1)
 	{
 	}
 
@@ -90,7 +90,6 @@
 							}
 						if(iCertInfos[iCertIndex]->CertificateOwnerType() == ECACertificate)							
 							{
-							iCaCert = ETrue;
 							iState = ESetTrust;
 							}
 						else
@@ -111,7 +110,8 @@
 		case ESetTrust:
 			{
 			iState = EFinished;
-			iCertStore->SetTrust(*iCertInfos[iCertIndex],iCaCert,iStatus);
+			const TBool caCert = ETrue;
+			iCertStore->SetTrust(*iCertInfos[iCertIndex],caCert,iStatus);
 			SetActive();				
 			}
 			break;
--- a/cryptoservices/filebasedcertificateandkeystores/test/certtool/certtool_usage.cpp	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/certtool/certtool_usage.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -78,6 +78,7 @@
         iController->DisplayLocalisedMsgL(R_CERTTOOL_USAGE_IMPORT3);
         iController->DisplayLocalisedMsgL(R_CERTTOOL_USAGE_IMPORT4);
         iController->DisplayLocalisedMsgL(R_CERTTOOL_USAGE_IMPORT5);
+        iController->DisplayLocalisedMsgL(R_CERTTOOL_USAGE_IMPORT6);
 		}
 	else
 	if (!aParam->iDefault->Compare(_L("list")) )
--- a/cryptoservices/filebasedcertificateandkeystores/test/keytool/keytool.rss	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/keytool/keytool.rss	Sat Dec 05 21:41:51 2009 +0000
@@ -475,6 +475,11 @@
 	{
 	buf = STRING_r_certtool_err_remove_success;
 	}
+
+RESOURCE TBUF r_certtool_err_remove_failure
+	{
+	buf = STRING_r_certtool_err_remove_failure;
+	}
 	
 RESOURCE TBUF r_certtool_err_list
 	{
@@ -649,8 +654,12 @@
 RESOURCE TBUF r_certtool_usage_import5
 	{
 	buf = STRING_r_certtool_usage_import5;
+	}	
+
+RESOURCE TBUF r_certtool_usage_import6
+	{
+	buf = STRING_r_certtool_usage_import6;
 	}
-	
 
 RESOURCE TBUF r_certtool_usage_liststores
 	{
--- a/cryptoservices/filebasedcertificateandkeystores/test/keytool/keytool_commands.h	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/keytool/keytool_commands.h	Sat Dec 05 21:41:51 2009 +0000
@@ -86,6 +86,7 @@
 		TBool 						iPageWise;
 		TBool						iRemoveKey;
 		TSetPolicy					iPolicy;
+		HBufC*                      iIsDeletable;
 #ifdef KEYTOOL
 		HBufC*						iOldKeyFile;
 		HBufC*						iNewKeyFile;
--- a/cryptoservices/filebasedcertificateandkeystores/test/keytool/keytool_params.cpp	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/keytool/keytool_params.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -39,7 +39,11 @@
 	delete iLabel;
 	delete iPrivate;
 	delete iOwnerType;
+	delete iIsDeletable;
 	iUIDs.Close();
+	
+	
+	
 #ifdef KEYTOOL
 	delete iOldKeyFile;
 	delete iNewKeyFile;
--- a/cryptoservices/filebasedcertificateandkeystores/test/keytool/keytool_utils.cpp	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/keytool/keytool_utils.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -837,6 +837,10 @@
 	PrintInfoL(_L("\tMarked as trusted: "));
 	PrintInfoL( aTrusted ? _L("Yes"): _L("No"));
 	PrintInfoL(newline, aPageWise);
+	PrintInfoL(_L("\tMarked as Deletable : "));
+	PrintInfoL( aCertInfo.IsDeletable() ? _L("Yes"): _L("No"));
+
+	PrintInfoL(newline, aPageWise);
 	}
 	
 void KeyToolUtils::SetConsole(CConsoleBase *aConsole )
--- a/cryptoservices/filebasedcertificateandkeystores/test/tcertapps/scripts/apipolicing.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tcertapps/scripts/apipolicing.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // apipolicing.txt
--- a/cryptoservices/filebasedcertificateandkeystores/test/tcertapps/scripts/script1.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tcertapps/scripts/script1.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 // platsec tests
--- a/cryptoservices/filebasedcertificateandkeystores/test/thwkeystore/common/tkeydetails.cpp	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/thwkeystore/common/tkeydetails.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -25,6 +25,25 @@
 CKeyDetails::CKeyDetails()
 	{}
 
+CKeyDetails::CKeyDetails(	
+		TKeyIdentifier aID,
+		TKeyUsagePKCS15 aUsage,
+		TUint aSize, 
+		HBufC* aLabel,
+		TInt aHandle,
+		const TSecurityPolicy& aUsePolicy,
+		const TSecurityPolicy& aManagementPolicy,
+		EKeyAlgorithm aAlgorithm,
+		TInt aAccessType,
+		TBool aNative,
+		TTime aStartDate,
+		TTime aEndDate,
+		HBufC8* aPKCS8AttributeSet)
+		: CKeyInfoBase(	aID,aUsage,aSize,aLabel,aHandle,
+						aUsePolicy,aManagementPolicy,aAlgorithm,
+						aAccessType,aNative,aStartDate,aEndDate,aPKCS8AttributeSet)
+		{}
+
 CKeyDetails::~CKeyDetails()
 	{
 	delete iPrivateKey;
@@ -51,9 +70,29 @@
 								const TDesC8& aPrivateKey, 
 								const TDesC8& aPublicKey )
 	{
-	CKeyDetails* keyDetails = new (ELeave) CKeyDetails();
+	TKeyIdentifier keyID;
+	keyID.FillZ(keyID.MaxSize());
+	TKeyUsagePKCS15 usage = EPKCS15UsageNone;
+	TUint size = 0;
+	TInt handle = aHandle;
+	const TSecurityPolicy& usePolicy = TSecurityPolicy::EAlwaysPass;
+	const TSecurityPolicy& managementPolicy = TSecurityPolicy::EAlwaysPass;
+	EKeyAlgorithm algorithm = EECC;
+	TInt accessType = CKeyInfoBase::ENeverExtractable;
+	accessType |= CKeyInfoBase::ELocal;
+	TBool native = ETrue;
+	TTime startDate = 0;
+	TTime endDate = 0;
+	HBufC8* pkcs8AttributeSet = NULL;
+	
+	HBufC* label = HBufC::NewLC(aLabel.Length());
+	label->Des().Copy(aLabel);
+
+	CKeyDetails* keyDetails = new (ELeave) CKeyDetails(keyID,usage,size,label,handle,usePolicy,managementPolicy,algorithm,accessType,native,startDate,endDate,pkcs8AttributeSet);
+	
+	CleanupStack::Pop(label);
 	CleanupStack::PushL(keyDetails);
-	keyDetails->ConstructL(aHandle, aLabel, aPrivateKey, aPublicKey);
+	keyDetails->ConstructL(aPrivateKey, aPublicKey);
 	CleanupStack::Pop(keyDetails);
 	return keyDetails;
 	}
@@ -63,64 +102,44 @@
     {
     CKeyDetails* self = new (ELeave) CKeyDetails();
     CleanupStack::PushL(self);
-    self->InternalizeL(aReadStream);
+    self->ConstructL(aReadStream);
     CleanupStack::Pop(self);
     return (self);
     }
 
-void CKeyDetails::ConstructL(	TInt aHandle, const TDesC& aLabel, 
-								const TDesC8& aPrivateKey, const TDesC8& aPublicKey )
+void CKeyDetails::ConstructL( const TDesC8& aPrivateKey, const TDesC8& aPublicKey )
 	{
-	CKeyInfoBase::ConstructL();
-	iHandle = aHandle;
-	iLabel = aLabel.AllocL();
 	iPrivateKey = aPrivateKey.AllocL();
-	iPublicKey = aPublicKey.AllocL();
-	    
-	// set the access type to never extractable
-	iAccessType |= CKeyInfoBase::ENeverExtractable;
-	iAccessType |= CKeyInfoBase::ELocal;
-	// Policy set for keys in hardware depends on the vendor requirements 
-	// this reference implementation assumes that accessibility of keys
-	// does not need any restriction. Hence for the testing environment policy is set to always pass.
-	TSecurityPolicy  temp(TSecurityPolicy::EAlwaysPass);
-	iUsePolicy = temp;
+	iPublicKey = aPublicKey.AllocL();   
+	}
+
+void CKeyDetails::ConstructL(RStoreReadStream& aReadStream)
+	{
+	CKeyInfoBase::ConstructL(aReadStream);
+	InternalizeL(aReadStream);
 	}
 
 void CKeyDetails::ExternalizeL(RWriteStream& aWriteStream) const
-    {
-    aWriteStream.WriteInt32L(iHandle);
-
-    TInt stringLen = iLabel->Length();
-    aWriteStream.WriteInt32L(stringLen);
-    TPtr stringPtr = iLabel->Des();
-    stringPtr.SetLength(stringLen);
-    aWriteStream.WriteL(stringPtr);
+    {		
+    CKeyInfoBase::ExternalizeL(aWriteStream);
     
-    stringLen = iPrivateKey->Length();
+    TInt stringLen = iPrivateKey->Length();
     aWriteStream.WriteInt32L(stringLen);
     TPtr8 keyPtr = iPrivateKey->Des();
     keyPtr.SetLength(stringLen);
     aWriteStream.WriteL(keyPtr);
-
+        
     stringLen = iPublicKey->Length();
     aWriteStream.WriteInt32L(stringLen);
     keyPtr = iPublicKey->Des();
     keyPtr.SetLength(stringLen);
     aWriteStream.WriteL(keyPtr);
+    
     }
 
 void CKeyDetails::InternalizeL(RReadStream& aReadStream)
     {
-    iHandle = aReadStream.ReadInt32L();
-
     TInt stringLen = aReadStream.ReadInt32L();
-    iLabel = HBufC::NewMaxL(stringLen);
-    TPtr labelPtr((TUint16*)iLabel->Ptr(), stringLen, stringLen);
-    labelPtr.FillZ(stringLen);
-    aReadStream.ReadL(labelPtr);
-    
-    stringLen = aReadStream.ReadInt32L();
     iPrivateKey = HBufC8::NewMaxL(stringLen);
     TPtr8 privateKeyPtr((TUint8*)iPrivateKey->Ptr(), stringLen, stringLen);
     privateKeyPtr.FillZ(stringLen);
@@ -131,9 +150,5 @@
     TPtr8 publicKeyPtr((TUint8*)iPublicKey->Ptr(), stringLen, stringLen);
     publicKeyPtr.FillZ(stringLen);
     aReadStream.ReadL(publicKeyPtr);
-    // Policy set for keys in hardware depends on the vendor requirements 
-    // this reference implementation assumes that accessibility of keys
-    // does not need any restriction. Hence for the testing environment policy is set to always pass.
-    TSecurityPolicy  temp(TSecurityPolicy::EAlwaysPass);
-    iUsePolicy = temp;
+    
     }
--- a/cryptoservices/filebasedcertificateandkeystores/test/thwkeystore/common/tkeydetails.h	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/thwkeystore/common/tkeydetails.h	Sat Dec 05 21:41:51 2009 +0000
@@ -34,7 +34,6 @@
 class CKeyDetails : public CKeyInfoBase
 	{
 public:
-
 	static CKeyDetails* NewL(	TInt aHandle, const TDesC& aLabel, 
 								const TDesC8& aPrivateKey, const TDesC8& aPublicKey );
 	static CKeyDetails* NewL(RStoreReadStream& aReadStream);
@@ -48,7 +47,22 @@
 	void ExternalizeL(RWriteStream&) const;
 	
 private:
-	void ConstructL(TInt aHandle, const TDesC& aLabel,const TDesC8& aPrivateKey, const TDesC8& aPublicKey );
+	CKeyDetails(TKeyIdentifier aID,
+				TKeyUsagePKCS15 aUsage,
+				TUint aSize, 
+				HBufC* aLabel,
+				TInt aHandle,
+				const TSecurityPolicy& aUsePolicy,
+				const TSecurityPolicy& aManagementPolicy,
+				EKeyAlgorithm aAlgorithm,
+				TInt aAccessType,
+				TBool aNative,
+				TTime aStartDate,
+				TTime aEndDate,
+				HBufC8* aPKCS8AttributeSet);
+		
+	void ConstructL(const TDesC8& aPrivateKey, const TDesC8& aPublicKey );
+	void ConstructL( RStoreReadStream& aReadStream);
 	CKeyDetails();
 	void InternalizeL(RReadStream& aReadStream);
 	
Binary file cryptoservices/filebasedcertificateandkeystores/test/tkeystore/data/hwkeys.dat has changed
--- a/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/authenticate_useauth.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/authenticate_useauth.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-AUTHENTICATE_USEAUTH-0001
--- a/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/authobjects_v2.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/authobjects_v2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-FILETOKENS-AUTHOBJECTS_V2-0001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/authobjects_v2_useauth.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,2872 @@
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-1-002]
+
+<actionbody>
+
+	<mode>manager</mode>
+
+</actionbody>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-2-001]
+
+<actionbody>
+
+	<keyusage>allusagesbutNR</keyusage>
+
+	<keysize>512</keysize>
+
+	<keylabel>banana</keylabel>
+
+	<keyalgorithm>RSA</keyalgorithm>
+
+	<keyaccesstype>Extractable</keyaccesstype>
+
+</actionbody>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-2-005]
+
+<actionbody>
+
+	<keyusage>DSAUsage</keyusage>
+
+	<keysize>512</keysize>
+
+	<keylabel>mango</keylabel>
+
+	<keyalgorithm>DSA</keyalgorithm>
+
+	<keyaccesstype>Extractable</keyaccesstype>
+
+</actionbody>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-2-006]
+
+<actionbody>
+
+	<keyusage>Derive</keyusage>
+
+	<keysize>512</keysize>
+
+	<keylabel>tomato</keylabel>
+
+	<keyalgorithm>DH</keyalgorithm>
+
+	<keyaccesstype>Extractable</keyaccesstype>
+
+</actionbody>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-2-007]
+
+<actionbody>
+
+	<foundkey>banana</foundkey>
+
+	<foundkey>mango</foundkey>
+
+	<foundkey>tomato</foundkey>
+
+</actionbody>
+
+
+
+
+
+
+
+
+
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-3-001]
+
+<actionbody>
+
+	<keylabel>banana</keylabel>
+
+</actionbody>
+
+<actionresult>
+
+	<policy>
+
+			<secureid>0x101F7E95</secureid>
+
+		</policy>
+
+</actionresult>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-3-002]
+
+<actionbody>
+
+	<keylabel>banana</keylabel>
+
+</actionbody>
+
+<actionresult>
+
+	<policy>
+
+			<secureid>0x101F7E95</secureid>
+
+		</policy>
+
+</actionresult>
+
+
+
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-001]
+
+<actionbody>
+
+	<keylabel>banana</keylabel>
+
+	<policy>
+
+	<secureid>0x101FFFFF</secureid>
+
+	<capability>DRM</capability>
+
+	<capability>ReadUserData</capability>
+
+	</policy>
+
+</actionbody>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-002]
+
+<actionbody>
+
+	<keylabel>banana</keylabel>
+
+</actionbody>
+
+<actionresult>
+
+	<policy>
+
+			<secureid>0x101FFFFF</secureid>
+
+			<capability>DRM</capability>
+
+			<capability>ReadUserData</capability>
+
+		</policy>
+
+</actionresult>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-003]
+
+<actionbody>
+
+	<keylabel>mango</keylabel>
+
+	<policy>
+
+	<vendorid>0x70000007</vendorid>
+
+	<capability>DRM</capability>
+
+	<capability>ReadUserData</capability>
+
+	</policy>
+
+</actionbody>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-004]
+
+<actionbody>
+
+	<keylabel>mango</keylabel>
+
+</actionbody>
+
+<actionresult>
+
+	<policy>
+
+			<vendorid>0x70000007</vendorid>
+
+			<capability>DRM</capability>
+
+			<capability>ReadUserData</capability>
+
+		</policy>
+
+</actionresult>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-005]
+
+<actionbody>
+
+	<keylabel>tomato</keylabel>
+
+	<policy>
+
+	<capability>DRM</capability>
+
+	<capability>ReadUserData</capability>
+
+	<capability>WriteUserData</capability>
+
+	<capability>ReadDeviceData</capability>
+
+	<capability>WriteDeviceData</capability>
+
+	</policy>
+
+</actionbody>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-006]
+
+<actionbody>
+
+	<keylabel>tomato</keylabel>
+
+</actionbody>
+
+<actionresult>
+
+	<policy>
+
+			<capability>DRM</capability>
+
+			<capability>ReadUserData</capability>
+
+			<capability>WriteUserData</capability>
+
+			<capability>ReadDeviceData</capability>
+
+			<capability>WriteDeviceData</capability>
+
+		</policy>
+
+</actionresult>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-007]
+
+<actionbody>
+
+	<keylabel>banana</keylabel>
+
+	<policy>
+
+	<capability>DRM</capability>
+
+	<capability>ReadUserData</capability>
+
+	<capability>WriteUserData</capability>
+
+	<capability>NetworkControl</capability>
+
+	</policy>
+
+</actionbody>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-008]
+
+<actionbody>
+
+	<keylabel>banana</keylabel>
+
+	<policy>
+
+	<secureid>0x101F7E96</secureid>
+
+	<capability>DRM</capability>
+
+	<capability>ReadUserData</capability>
+
+	<capability>WriteUserData</capability>
+
+	</policy>
+
+</actionbody>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-009]
+
+<actionbody>
+
+	<keylabel>banana</keylabel>
+
+	<policy>
+
+	<vendorid>0x70000002</vendorid>
+
+	<capability>DRM</capability>
+
+	<capability>ReadUserData</capability>
+
+	<capability>WriteUserData</capability>
+
+	</policy>
+
+</actionbody>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-010]
+
+<actionbody>
+
+	<keylabel>banana</keylabel>
+
+	<policy>
+
+	<capability>DRM</capability>
+
+	<capability>ReadUserData</capability>
+
+	<capability>WriteUserData</capability>
+
+	</policy>
+
+</actionbody>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-011]
+
+<actionbody>
+
+	<keylabel>banana</keylabel>
+
+</actionbody>
+
+<actionresult>
+
+	<policy>
+
+			<capability>DRM</capability>
+
+			<capability>ReadUserData</capability>
+
+			<capability>WriteUserData</capability>
+
+		</policy>
+
+</actionresult>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-012]
+
+<actionbody>
+
+	<keylabel>mango</keylabel>
+
+	<policy>
+
+	<secureid>0x101F7E95</secureid>
+
+	<capability>ReadUserData</capability>
+
+	<capability>DRM</capability>
+
+	<capability>ReadDeviceData</capability>
+
+	</policy>
+
+</actionbody>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-013]
+
+<actionbody>
+
+	<keylabel>mango</keylabel>
+
+</actionbody>
+
+<actionresult>
+
+	<policy>
+
+			<secureid>0x101F7E95</secureid>
+
+			<capability>ReadUserData</capability>
+
+			<capability>DRM</capability>
+
+			<capability>ReadDeviceData</capability>
+
+		</policy>
+
+</actionresult>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-014]
+
+<actionbody>
+
+	<keylabel>tomato</keylabel>
+
+	<policy>
+
+	<vendorid>0x70000001</vendorid>
+
+	<capability>ReadUserData</capability>
+
+	<capability>DRM</capability>
+
+	<capability>WriteDeviceData</capability>
+
+	</policy>
+
+</actionbody>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-015]
+
+<actionbody>
+
+	<keylabel>tomato</keylabel>
+
+</actionbody>
+
+<actionresult>
+
+	<policy>
+
+			<vendorid>0x70000001</vendorid>
+
+			<capability>ReadUserData</capability>
+
+			<capability>DRM</capability>
+
+			<capability>WriteDeviceData</capability>
+
+		</policy>
+
+</actionresult>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-5-001]
+
+<actionbody>
+
+	<testexe>t_keystore.exe</testexe>
+
+	<excludedcapabilities>
+
+	<capability>TCB</capability>
+
+	</excludedcapabilities>
+
+	<policy>
+
+	<secureid>0x101FFFFF</secureid>
+
+	<capability>DRM</capability>
+
+	<capability>ReadUserData</capability>
+
+	</policy>
+
+
+
+	<preactions>
+
+	<action>
+
+		<actionname>1, Open key store in manager mode</actionname>
+
+		<actiontype>init</actiontype>
+
+		<actionbody>
+
+			<mode>manager</mode>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+	</preactions>
+
+
+
+	<passactions>
+
+	<action>
+
+		<actionname>2, Get key info</actionname>
+
+		<actiontype>getkeyinfo</actiontype>
+
+		<actionbody>
+
+			<keylabel>banana</keylabel>
+
+			<keyusage>allusagesbutNR</keyusage>
+
+			<keysize>512</keysize>
+
+			<keyalgorithm>RSA</keyalgorithm>
+
+			<keyaccesstype>Extractable</keyaccesstype>
+
+			<keyaccesstype>Local</keyaccesstype>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>3, Sign</actionname>
+
+		<actiontype>sign</actiontype>
+
+		<actionbody>
+
+			<keylabel>banana</keylabel>
+
+			<open>RSA</open>
+
+			<text>This is text of 20 .</text>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>4, Decrypt</actionname>
+
+		<actiontype>decrypt</actiontype>
+
+		<actionbody>
+
+			<keylabel>banana</keylabel>
+
+			<text>Ook!</text>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+	</passactions>
+
+
+
+	<failactions>
+
+	<action>
+
+		<actionname>2, Get key info</actionname>
+
+		<actiontype>getkeyinfo</actiontype>
+
+		<actionbody>
+
+			<keylabel>banana</keylabel>
+
+			<keyusage>allusagesbutNR</keyusage>
+
+			<keysize>512</keysize>
+
+			<keyalgorithm>RSA</keyalgorithm>
+
+			<keyaccesstype>Extractable</keyaccesstype>
+
+			<keyaccesstype>Local</keyaccesstype>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrPermissionDenied</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>3, Sign</actionname>
+
+		<actiontype>sign</actiontype>
+
+		<actionbody>
+
+			<keylabel>banana</keylabel>
+
+			<open>RSA</open>
+
+			<text>This is text of 20 .</text>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrPermissionDenied</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>4, Decrypt</actionname>
+
+		<actiontype>decrypt</actiontype>
+
+		<actionbody>
+
+			<keylabel>banana</keylabel>
+
+			<text>Ook!</text>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrPermissionDenied</return>
+
+		</actionresult>
+
+	</action>
+
+	</failactions>
+
+
+
+	<postactions>
+
+	<action>
+
+		<actionname>5, Close key store</actionname>
+
+		<actiontype>delete</actiontype>
+
+		<actionbody></actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+	</postactions>
+
+</actionbody>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-5-002]
+
+<actionbody>
+
+	<testexe>t_keystore.exe</testexe>
+
+	<excludedcapabilities>
+
+	<capability>TCB</capability>
+
+	</excludedcapabilities>
+
+	<policy>
+
+	<vendorid>0x70000007</vendorid>
+
+	<capability>DRM</capability>
+
+	<capability>ReadUserData</capability>
+
+	</policy>
+
+
+
+	<preactions>
+
+	<action>
+
+		<actionname>1, Open key store in manager mode</actionname>
+
+		<actiontype>init</actiontype>
+
+		<actionbody>
+
+			<mode>manager</mode>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+	</preactions>
+
+
+
+	<passactions>
+
+	<action>
+
+		<actionname>2, Get key info</actionname>
+
+		<actiontype>getkeyinfo</actiontype>
+
+		<actionbody>
+
+			<keylabel>mango</keylabel>
+
+			<keyusage>allusagesbutNR</keyusage>
+
+			<keysize>512</keysize>
+
+			<keyalgorithm>DSA</keyalgorithm>
+
+			<keyaccesstype>Extractable</keyaccesstype>
+
+			<keyaccesstype>Local</keyaccesstype>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>3, Sign</actionname>
+
+		<actiontype>sign</actiontype>
+
+		<actionbody>
+
+			<keylabel>mango</keylabel>
+
+			<open>DSA</open>
+
+			<text>This is text of 20 .</text>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+	</passactions>
+
+
+
+	<failactions>
+
+	<action>
+
+		<actionname>2, Get key info</actionname>
+
+		<actiontype>getkeyinfo</actiontype>
+
+		<actionbody>
+
+			<keylabel>mango</keylabel>
+
+			<keyusage>allusagesbutNR</keyusage>
+
+			<keysize>512</keysize>
+
+			<keyalgorithm>DSA</keyalgorithm>
+
+			<keyaccesstype>Extractable</keyaccesstype>
+
+			<keyaccesstype>Local</keyaccesstype>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrPermissionDenied</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>3, Sign</actionname>
+
+		<actiontype>sign</actiontype>
+
+		<actionbody>
+
+			<keylabel>mango</keylabel>
+
+			<open>DSA</open>
+
+			<text>This is text of 20 .</text>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrPermissionDenied</return>
+
+		</actionresult>
+
+	</action>
+
+	</failactions>
+
+
+
+	<postactions>
+
+	<action>
+
+		<actionname>4, Close key store</actionname>
+
+		<actiontype>delete</actiontype>
+
+		<actionbody></actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+	</postactions>
+
+</actionbody>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-5-003]
+
+<actionbody>
+
+	<testexe>t_keystore.exe</testexe>
+
+	<excludedcapabilities>
+
+	<capability>TCB</capability>
+
+	</excludedcapabilities>
+
+	<policy>
+
+	<capability>DRM</capability>
+
+	<capability>ReadUserData</capability>
+
+	<capability>WriteUserData</capability>
+
+	<capability>ReadDeviceData</capability>
+
+	<capability>WriteDeviceData</capability>
+
+	</policy>
+
+
+
+	<preactions>
+
+	<action>
+
+		<actionname>1, Open key store in manager mode</actionname>
+
+		<actiontype>init</actiontype>
+
+		<actionbody>
+
+			<mode>manager</mode>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+	</preactions>
+
+
+
+	<passactions>
+
+	<action>
+
+		<actionname>2, Get key info</actionname>
+
+		<actiontype>getkeyinfo</actiontype>
+
+		<actionbody>
+
+			<keylabel>tomato</keylabel>
+
+			<keyusage>allusagesbutNR</keyusage>
+
+			<keysize>512</keysize>
+
+			<keyalgorithm>DH</keyalgorithm>
+
+			<keyaccesstype>Extractable</keyaccesstype>
+
+			<keyaccesstype>Local</keyaccesstype>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>2, Test derive</actionname>
+
+		<actiontype>derive</actiontype>
+
+		<actionbody>
+
+			<keylabel>tomato</keylabel>
+
+			<n>DA9A18547FF03B385CC16508C173A7EF4EB61CB40EF8FEF3B31F145051676166BCDC3FE6B799FC394D08C26385F9413F896E09117E46209D6923602683CEA100924A6EE695281775C619DAA94EA8CB3691B4275B0183F1D39639EBC92995FE645D6C1BC28D409E585549BBD2C5DCDD6C208B04EADD8B7A6D997F72CBAD88390F</n>
+
+			<g>02</g>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+	</passactions>
+
+
+
+	<failactions>
+
+	<action>
+
+		<actionname>2, Get key info</actionname>
+
+		<actiontype>getkeyinfo</actiontype>
+
+		<actionbody>
+
+			<keylabel>tomato</keylabel>
+
+			<keyusage>allusagesbutNR</keyusage>
+
+			<keysize>512</keysize>
+
+			<keyalgorithm>DH</keyalgorithm>
+
+			<keyaccesstype>Extractable</keyaccesstype>
+
+			<keyaccesstype>Local</keyaccesstype>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrPermissionDenied</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>2, Test derive</actionname>
+
+		<actiontype>derive</actiontype>
+
+		<actionbody>
+
+			<keylabel>tomato</keylabel>
+
+			<n>DA9A18547FF03B385CC16508C173A7EF4EB61CB40EF8FEF3B31F145051676166BCDC3FE6B799FC394D08C26385F9413F896E09117E46209D6923602683CEA100924A6EE695281775C619DAA94EA8CB3691B4275B0183F1D39639EBC92995FE645D6C1BC28D409E585549BBD2C5DCDD6C208B04EADD8B7A6D997F72CBAD88390F</n>
+
+			<g>02</g>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrPermissionDenied</return>
+
+		</actionresult>
+
+	</action>
+
+	</failactions>
+
+
+
+	<postactions>
+
+	<action>
+
+		<actionname>3, Close key store</actionname>
+
+		<actiontype>delete</actiontype>
+
+		<actionbody></actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+	</postactions>
+
+</actionbody>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-5-004]
+
+<actionbody>
+
+	<testexe>t_keystore.exe</testexe>
+	
+	<excludedcapabilities>
+
+	<capability>TCB</capability>
+
+	</excludedcapabilities>
+
+	<policy>
+
+	<capability>DRM</capability>
+
+	<capability>ReadUserData</capability>
+
+	<capability>WriteUserData</capability>
+
+	</policy>
+
+
+
+	<preactions>
+
+	<action>
+
+		<actionname>1, Open key store in manager mode</actionname>
+
+		<actiontype>init</actiontype>
+
+		<actionbody>
+
+			<mode>manager</mode>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+	</preactions>
+
+
+
+	<passactions>
+
+
+
+	<action>
+
+		<actionname>1, Export</actionname>
+
+		<actiontype>exportkey</actiontype>
+
+		<actionbody>
+
+			<ExportFile>exported_banana.der</ExportFile>
+
+			<keyusage>allusagesbutNR</keyusage>
+
+			<keylabel>banana</keylabel>
+
+			<keyalgorithm>RSA</keyalgorithm>
+
+			<encrypted>0</encrypted>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>2, Export encrypted</actionname>
+
+		<actiontype>exportkey</actiontype>
+
+		<actionbody>
+
+			<ExportFile>exported_encrypted_banana.der</ExportFile>
+
+			<keyusage>allusagesbutNR</keyusage>
+
+			<keylabel>banana</keylabel>
+
+			<keyalgorithm>RSA</keyalgorithm>
+
+			<encrypted>1</encrypted>
+
+			<passphrase>export clanger</passphrase>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>3, Check use policy</actionname>
+
+		<actiontype>getusepolicy</actiontype>
+
+		<actionbody>
+
+			<keylabel>banana</keylabel>
+
+		</actionbody>
+
+		<actionresult>
+
+			<policy>
+
+				<secureid>0x101FFFFF</secureid>
+
+				<capability>DRM</capability>
+
+				<capability>ReadUserData</capability>
+
+			</policy>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>4, Set use policy</actionname>
+
+		<actiontype>setusepolicy</actiontype>
+
+		<actionbody>
+
+			<keylabel>banana</keylabel>
+
+			<policy>
+
+				<capability>ReadUserData</capability>
+
+				<capability>WriteUserData</capability>
+
+			</policy>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>5, Check use policy</actionname>
+
+		<actiontype>getusepolicy</actiontype>
+
+		<actionbody>
+
+			<keylabel>banana</keylabel>
+
+		</actionbody>
+
+		<actionresult>
+
+			<policy>
+
+				<capability>ReadUserData</capability>
+
+				<capability>WriteUserData</capability>
+
+			</policy>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>6, Check management policy</actionname>
+
+		<actiontype>getmanagementpolicy</actiontype>
+
+		<actionbody>
+
+			<keylabel>banana</keylabel>
+
+		</actionbody>
+
+		<actionresult>
+
+			<policy>
+
+				<capability>DRM</capability>
+
+				<capability>ReadUserData</capability>
+
+				<capability>WriteUserData</capability>
+
+			</policy>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>7, Set management policy</actionname>
+
+		<actiontype>setmanagementpolicy</actiontype>
+
+		<actionbody>
+
+			<keylabel>banana</keylabel>
+
+			<policy>
+
+				<capability>ReadUserData</capability>
+
+				<capability>WriteUserData</capability>
+
+			</policy>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>8, Check management policy</actionname>
+
+		<actiontype>getmanagementpolicy</actiontype>
+
+		<actionbody>
+
+			<keylabel>banana</keylabel>
+
+		</actionbody>
+
+		<actionresult>
+
+			<policy>
+
+				<capability>ReadUserData</capability>
+
+				<capability>WriteUserData</capability>
+
+			</policy>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>9, Delete key</actionname>
+
+		<actiontype>deletekeys</actiontype>
+
+		<actionbody>
+
+			<keylabel>banana</keylabel>
+
+			<deletecount>1</deletecount>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	</passactions>
+
+
+
+	<failactions>
+
+
+
+	<action>
+
+		<actionname>1, Export</actionname>
+
+		<actiontype>exportkey</actiontype>
+
+		<actionbody>
+
+			<ExportFile>exported_banana.der</ExportFile>
+
+			<keyusage>allusagesbutNR</keyusage>
+
+			<keylabel>banana</keylabel>
+
+			<keyalgorithm>RSA</keyalgorithm>
+
+			<encrypted>0</encrypted>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrPermissionDenied</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>2, Export encrypted</actionname>
+
+		<actiontype>exportkey</actiontype>
+
+		<actionbody>
+
+			<ExportFile>exported_encrypted_banana.der</ExportFile>
+
+			<keyusage>allusagesbutNR</keyusage>
+
+			<keylabel>banana</keylabel>
+
+			<keyalgorithm>RSA</keyalgorithm>
+
+			<encrypted>1</encrypted>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrPermissionDenied</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>3, Set use policy</actionname>
+
+		<actiontype>setusepolicy</actiontype>
+
+		<actionbody>
+
+			<keylabel>banana</keylabel>
+
+			<policy>
+
+				<capability>ReadUserData</capability>
+
+				<capability>WriteUserData</capability>
+
+			</policy>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrPermissionDenied</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>5, Set management policy</actionname>
+
+		<actiontype>setmanagementpolicy</actiontype>
+
+		<actionbody>
+
+			<keylabel>banana</keylabel>
+
+			<policy>
+
+				<capability>ReadUserData</capability>
+
+				<capability>WriteUserData</capability>
+
+			</policy>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrPermissionDenied</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>7, Delete key</actionname>
+
+		<actiontype>deletekeys</actiontype>
+
+		<actionbody>
+
+			<keylabel>banana</keylabel>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrPermissionDenied</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	</failactions>
+
+
+
+	<postactions>
+
+	<action>
+
+		<actionname>4, Close key store</actionname>
+
+		<actiontype>delete</actiontype>
+
+		<actionbody></actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+	</postactions>
+
+</actionbody>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-5-005]
+
+<actionbody>
+
+	<testexe>t_keystore.exe</testexe>
+
+	<excludedcapabilities>
+
+	<capability>TCB</capability>
+
+	</excludedcapabilities>
+
+	<policy>
+
+	<secureid>0x101F7E95</secureid>
+
+	<capability>ReadUserData</capability>
+
+	<capability>DRM</capability>
+
+	<capability>ReadDeviceData</capability>
+
+	</policy>
+
+
+
+	<preactions>
+
+	<action>
+
+		<actionname>1, Open key store in manager mode</actionname>
+
+		<actiontype>init</actiontype>
+
+		<actionbody>
+
+			<mode>manager</mode>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+	</preactions>
+
+
+
+	<passactions>
+
+
+
+	<action>
+
+		<actionname>2, Export</actionname>
+
+		<actiontype>exportkey</actiontype>
+
+		<actionbody>
+
+			<ExportFile>exported_mango.der</ExportFile>
+
+			<keyusage>DSAUsage</keyusage>
+
+			<keylabel>mango</keylabel>
+
+			<keyalgorithm>DSA</keyalgorithm>
+
+			<encrypted>0</encrypted>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>3, Export encrypted</actionname>
+
+		<actiontype>exportkey</actiontype>
+
+		<actionbody>
+
+			<ExportFile>exported_encrypted_mango.der</ExportFile>
+
+			<keyusage>DSAUsage</keyusage>
+
+			<keylabel>mango</keylabel>
+
+			<keyalgorithm>DSA</keyalgorithm>
+
+			<encrypted>1</encrypted>	
+
+			<passphrase>export clanger</passphrase>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>4, Check use policy</actionname>
+
+		<actiontype>getusepolicy</actiontype>
+
+		<actionbody>
+
+			<keylabel>mango</keylabel>
+
+		</actionbody>
+
+		<actionresult>
+
+			<policy>
+
+				<vendorid>0x70000007</vendorid>
+
+				<capability>DRM</capability>
+
+				<capability>ReadUserData</capability>
+
+			</policy>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>5, Set use policy</actionname>
+
+		<actiontype>setusepolicy</actiontype>
+
+		<actionbody>
+
+			<keylabel>mango</keylabel>
+
+			<policy>
+
+				<capability>ReadUserData</capability>
+
+				<capability>WriteUserData</capability>
+
+			</policy>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>6, Check use policy</actionname>
+
+		<actiontype>getusepolicy</actiontype>
+
+		<actionbody>
+
+			<keylabel>mango</keylabel>
+
+		</actionbody>
+
+		<actionresult>
+
+			<policy>
+
+				<capability>ReadUserData</capability>
+
+				<capability>WriteUserData</capability>
+
+			</policy>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>7, Check management policy</actionname>
+
+		<actiontype>getmanagementpolicy</actiontype>
+
+		<actionbody>
+
+			<keylabel>mango</keylabel>
+
+		</actionbody>
+
+		<actionresult>
+
+			<policy>
+
+				<secureid>0x101F7E95</secureid>
+
+				<capability>ReadUserData</capability>
+
+				<capability>DRM</capability>
+
+				<capability>ReadDeviceData</capability>
+
+			</policy>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>8, Set management policy</actionname>
+
+		<actiontype>setmanagementpolicy</actiontype>
+
+		<actionbody>
+
+			<keylabel>mango</keylabel>
+
+			<policy>
+
+				<capability>DRM</capability>
+
+				<capability>ReadDeviceData</capability>
+
+			</policy>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>9, Check management policy</actionname>
+
+		<actiontype>getmanagementpolicy</actiontype>
+
+		<actionbody>
+
+			<keylabel>mango</keylabel>
+
+		</actionbody>
+
+		<actionresult>
+
+			<policy>
+
+				<capability>DRM</capability>
+
+				<capability>ReadDeviceData</capability>
+
+			</policy>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>10, Delete key</actionname>
+
+		<actiontype>deletekeys</actiontype>
+
+		<actionbody>
+
+			<keylabel>mango</keylabel>
+
+			<deletecount>1</deletecount>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	</passactions>
+
+
+
+	<failactions>
+
+
+
+	<action>
+
+		<actionname>2, Export</actionname>
+
+		<actiontype>exportkey</actiontype>
+
+		<actionbody>
+
+			<ExportFile>exported_mango.der</ExportFile>
+
+			<keyusage>DSAUsage</keyusage>
+
+			<keylabel>mango</keylabel>
+
+			<keyalgorithm>DSA</keyalgorithm>
+
+			<encrypted>0</encrypted>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrPermissionDenied</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>3, Export encrypted</actionname>
+
+		<actiontype>exportkey</actiontype>
+
+		<actionbody>
+
+			<ExportFile>exported_encrypted_mango.der</ExportFile>
+
+			<keyusage>DSAUsage</keyusage>
+
+			<keylabel>mango</keylabel>
+
+			<keyalgorithm>DSA</keyalgorithm>
+
+			<encrypted>1</encrypted>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrPermissionDenied</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>4, Set use policy</actionname>
+
+		<actiontype>setusepolicy</actiontype>
+
+		<actionbody>
+
+			<keylabel>mango</keylabel>
+
+			<policy>
+
+				<capability>ReadUserData</capability>
+
+				<capability>WriteUserData</capability>
+
+			</policy>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrPermissionDenied</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>5, Set management policy</actionname>
+
+		<actiontype>setmanagementpolicy</actiontype>
+
+		<actionbody>
+
+			<keylabel>mango</keylabel>
+
+			<policy>
+
+				<capability>DRM</capability>
+
+				<capability>ReadDeviceData</capability>
+
+			</policy>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrPermissionDenied</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>6, Delete key</actionname>
+
+		<actiontype>deletekeys</actiontype>
+
+		<actionbody>
+
+			<keylabel>mango</keylabel>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrPermissionDenied</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	</failactions>
+
+
+
+	<postactions>
+
+	<action>
+
+		<actionname>11, Close key store</actionname>
+
+		<actiontype>delete</actiontype>
+
+		<actionbody></actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+	</postactions>
+
+</actionbody>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-5-006]
+
+<actionbody>
+
+	<testexe>t_keystore.exe</testexe>
+
+	<excludedcapabilities>
+
+	<capability>TCB</capability>
+
+	</excludedcapabilities>
+
+	<policy>
+
+	<vendorid>0x70000001</vendorid>
+
+	<capability>ReadUserData</capability>
+
+	<capability>DRM</capability>
+
+	<capability>WriteDeviceData</capability>
+
+	</policy>
+
+
+
+	<preactions>
+
+	<action>
+
+		<actionname>1, Open key store in manager mode</actionname>
+
+		<actiontype>init</actiontype>
+
+		<actionbody>
+
+			<mode>manager</mode>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+	</preactions>
+
+
+
+	<passactions>
+
+
+
+	<action>
+
+		<actionname>2, Check use policy</actionname>
+
+		<actiontype>getusepolicy</actiontype>
+
+		<actionbody>
+
+			<keylabel>tomato</keylabel>
+
+		</actionbody>
+
+		<actionresult>
+
+			<policy>
+
+				<capability>DRM</capability>
+
+				<capability>ReadUserData</capability>
+
+				<capability>WriteUserData</capability>
+
+				<capability>ReadDeviceData</capability>
+
+				<capability>WriteDeviceData</capability>
+
+			</policy>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>3, Set use policy</actionname>
+
+		<actiontype>setusepolicy</actiontype>
+
+		<actionbody>
+
+			<keylabel>tomato</keylabel>
+
+			<policy>
+
+				<capability>ReadUserData</capability>
+
+				<capability>WriteUserData</capability>
+
+			</policy>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>4, Check use policy</actionname>
+
+		<actiontype>getusepolicy</actiontype>
+
+		<actionbody>
+
+			<keylabel>tomato</keylabel>
+
+		</actionbody>
+
+		<actionresult>
+
+			<policy>
+
+				<capability>ReadUserData</capability>
+
+				<capability>WriteUserData</capability>
+
+			</policy>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>5, Check management policy</actionname>
+
+		<actiontype>getmanagementpolicy</actiontype>
+
+		<actionbody>
+
+			<keylabel>tomato</keylabel>
+
+		</actionbody>
+
+		<actionresult>
+
+			<policy>
+
+				<vendorid>0x70000001</vendorid>
+
+				<capability>ReadUserData</capability>
+
+				<capability>DRM</capability>
+
+				<capability>WriteDeviceData</capability>
+
+			</policy>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>6, Set management policy</actionname>
+
+		<actiontype>setmanagementpolicy</actiontype>
+
+		<actionbody>
+
+			<keylabel>tomato</keylabel>
+
+			<policy>
+
+				<capability>DRM</capability>
+
+				<capability>WriteDeviceData</capability>
+
+			</policy>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>7, Check management policy</actionname>
+
+		<actiontype>getmanagementpolicy</actiontype>
+
+		<actionbody>
+
+			<keylabel>tomato</keylabel>
+
+		</actionbody>
+
+		<actionresult>
+
+			<policy>
+
+				<capability>DRM</capability>
+
+				<capability>WriteDeviceData</capability>
+
+			</policy>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>8, Delete key</actionname>
+
+		<actiontype>deletekeys</actiontype>
+
+		<actionbody>
+
+			<keylabel>tomato</keylabel>
+
+			<deletecount>1</deletecount>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	</passactions>
+
+
+
+	<failactions>
+
+
+
+	<action>
+
+		<actionname>2, Set use policy</actionname>
+
+		<actiontype>setusepolicy</actiontype>
+
+		<actionbody>
+
+			<keylabel>tomato</keylabel>
+
+			<policy>
+
+				<capability>ReadUserData</capability>
+
+				<capability>WriteUserData</capability>
+
+			</policy>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrPermissionDenied</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>3, Set management policy</actionname>
+
+		<actiontype>setmanagementpolicy</actiontype>
+
+		<actionbody>
+
+			<keylabel>tomato</keylabel>
+
+			<policy>
+
+				<capability>DRM</capability>
+
+				<capability>WriteDeviceData</capability>
+
+			</policy>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrPermissionDenied</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>4, Delete key</actionname>
+
+		<actiontype>deletekeys</actiontype>
+
+		<actionbody>
+
+			<keylabel>tomato</keylabel>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrPermissionDenied</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	</failactions>
+
+
+
+	<postactions>
+
+	<action>
+
+		<actionname>9, Close key store</actionname>
+
+		<actiontype>delete</actiontype>
+
+		<actionbody></actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+	</postactions>
+
+</actionbody>
+
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-6-001]
+
+<actionbody>
+
+	<testexe>t_keystore.exe</testexe>
+
+	<excludedcapabilities>
+
+	<capability>TCB</capability>
+
+	</excludedcapabilities>
+
+	<policy>
+
+	<capability>WriteUserData</capability>
+
+	</policy>
+
+
+
+	<preactions>
+
+	<action>
+
+		<actionname>1, Open key store</actionname>
+
+		<actiontype>init</actiontype>
+
+		<actionbody>
+
+			<mode>manager</mode>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+	</preactions>
+
+
+
+	<passactions>
+
+	<action>
+
+		<actionname>2, Create key</actionname>
+
+		<actiontype>addkey</actiontype>
+
+		<actionbody>
+
+			<keyusage>allusagesbutNR</keyusage>
+
+			<keysize>512</keysize>
+
+			<keylabel>raspberry</keylabel>
+
+			<keyalgorithm>RSA</keyalgorithm>
+
+			<keyaccesstype>Extractable</keyaccesstype>
+
+			<keystore>0</keystore>
+
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>3, Import key</actionname>
+
+		<actiontype>importkey</actiontype>
+
+		<actionbody>
+
+			<ImportData>pkcs8rsa.001</ImportData>
+
+			<keyusage>allusagesbutNR</keyusage>
+
+			<keylabel>blueberry</keylabel>
+
+			<keyaccesstype>Extractable</keyaccesstype>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+	</passactions>
+
+
+
+	<failactions>
+
+	<action>
+
+		<actionname>2, Create key</actionname>
+
+		<actiontype>addkey</actiontype>
+
+		<actionbody>
+
+			<keyusage>allusagesbutNR</keyusage>
+
+			<keysize>512</keysize>
+
+			<keylabel>raspberry</keylabel>
+
+			<keyalgorithm>RSA</keyalgorithm>
+
+			<keyaccesstype>Extractable</keyaccesstype>
+
+			<keystore>0</keystore>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrPermissionDenied</return>
+
+		</actionresult>
+
+	</action>
+
+
+
+	<action>
+
+		<actionname>3, Import key</actionname>
+
+		<actiontype>importkey</actiontype>
+
+		<actionbody>
+
+			<ImportData>pkcs8rsa.001</ImportData>
+
+			<keyusage>allusagesbutNR</keyusage>
+
+			<keylabel>blueberry</keylabel>
+
+			<keyaccesstype>Extractable</keyaccesstype>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrPermissionDenied</return>
+
+		</actionresult>
+
+	</action>
+
+	</failactions>
+
+
+
+	<postactions>
+
+	<action>
+
+		<actionname>5, Close key store</actionname>
+
+		<actiontype>delete</actiontype>
+
+		<actionbody></actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+	</postactions>
+
+</actionbody>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-6-002]
+
+<actionbody>
+
+	<testexe>t_keystore.exe</testexe>
+
+	<excludedcapabilities>
+
+	<capability>TCB</capability>
+
+	</excludedcapabilities>
+
+	<policy>
+
+	<capability>ReadUserData</capability>
+
+	</policy>
+
+
+
+	<preactions>
+
+	<action>
+
+		<actionname>1, Open key store</actionname>
+
+		<actiontype>init</actiontype>
+
+		<actionbody>
+
+			<mode>manager</mode>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+	</preactions>
+
+
+
+	<passactions>
+
+	<action>
+
+		<actionname>2, List keys</actionname>
+
+		<actiontype>listkeys</actiontype>
+
+		<actionbody>
+
+			<foundkey>raspberry</foundkey>
+
+			<foundkey>blueberry</foundkey>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+	</passactions>
+
+
+
+	<failactions>
+
+	<action>
+
+		<actionname>2, List keys</actionname>
+
+		<actiontype>listkeys</actiontype>
+
+		<actionbody>
+
+		</actionbody>
+
+		<actionresult>
+
+			<return>KErrPermissionDenied</return>
+
+		</actionresult>
+
+	</action>
+
+	</failactions>
+
+
+
+	<postactions>
+
+	<action>
+
+		<actionname>4, Close key store</actionname>
+
+		<actiontype>delete</actiontype>
+
+		<actionbody></actionbody>
+
+		<actionresult>
+
+			<return>KErrNone</return>
+
+		</actionresult>
+
+	</action>
+
+	</postactions>
+
+</actionbody>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-7-001]
+
+<actionbody>
+
+	<foundkey>raspberry</foundkey>
+
+	<foundkey>blueberry</foundkey>
+
+</actionbody>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-7-002]
+
+<actionbody>
+
+	<deletecount>2</deletecount>
+
+</actionbody>
+
+
+
+[SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-7-004]
+
+<actionbody>
+
+	<seconds>5</seconds>
+
+</actionbody>
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/authobjects_v2_useauth.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,310 @@
+/*
+* Copyright (c) 2007-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: 
+* Library to add s32strm support for IPC (ie. stream via multiple IPC read/writes instead of
+* copying to a buffer and streaming to/from there.
+*
+*/
+
+START_TESTCASE                SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-0001
+
+//! @SYMTestCaseID            SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-0001
+
+//! @SYMTestCaseDesc          Script 2: Test authentication, paspphrase caching, etc
+
+//!                           
+
+//!                           //////////////////////////////////////////////////////////////////////////////
+
+//!                           0. Initialisation
+
+//!                           //////////////////////////////////////////////////////////////////////////////
+
+//!                           
+
+//!                           First we delete the keystore data file, so that we know we are setting the
+
+//!                           passphrase with our first key add operation.
+
+//!                           Then we set up some keys for the rest of the test script to use:
+
+//!                           
+
+//!                           Key:     Type:
+
+//!                           banana	RSA
+
+//!                           mango	DSA
+
+//!                           tomato	DH
+
+//!                           
+
+//!                           test passphrase timeout affects all keys, and all processes
+
+//! @SYMTestActions           1) 0.1, Delete keystore data file
+
+//!                           2) 0.2, Opening key store in manager mode
+
+//!                           3) 0.3 Delete everything
+
+RUN_TEST_STEP                 -1    CTestHandler        deletekeystoredata  
+
+RUN_TEST_STEP                 -1    CTestHandler        init                   authobjects_useauth.ini	SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-1-002
+
+RUN_TEST_STEP                 -1    CTestHandler        deletekeys          
+
+END_TESTCASE                  SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-0001
+
+
+
+
+
+START_TESTCASE                SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-0002
+
+//! @SYMTestCaseID            SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-0002
+
+//! @SYMTestCaseDesc          //////////////////////////////////////////////////////////////////////////////
+
+//!                           1. Test passphrase caching
+
+//!                           //////////////////////////////////////////////////////////////////////////////
+
+//!                           
+
+//!                           1.1 Test adding a key leaves it open and with default timeout of 30 seconds
+
+//! @SYMTestActions           1) 1.1.1, Add key banana
+
+//!                           5) 1.1.5, Add key mango
+
+//!                           6) 1.1.6, Add key tomato
+
+//!                           7) 1.1.7, Check everything added ok
+
+RUN_TEST_STEP                 -1    CTestHandler        addkey                 authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-2-001
+
+RUN_TEST_STEP                 -1    CTestHandler        addkey                 authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-2-005
+
+RUN_TEST_STEP                 -1    CTestHandler        addkey                 authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-2-006
+
+RUN_TEST_STEP                 -1    CTestHandler        listkeys               authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-2-007
+
+END_TESTCASE                  SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-0002
+
+
+
+
+START_TESTCASE                SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-0003
+
+//! @SYMTestCaseID            SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-0003
+
+//! @SYMTestCaseDesc          //////////////////////////////////////////////////////////////////////////////
+
+//!                           6. Test security policies
+
+//!                           //////////////////////////////////////////////////////////////////////////////
+
+//!                           
+
+//!                           6.1 Test default policy is to police based on SID of the creator
+
+//! @SYMTestActions           1) 6.1.1, Get default use policy
+
+//!                           2) 6.1.2, Get default management policy
+
+RUN_TEST_STEP                 -1    CTestHandler        getusepolicy           authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-3-001
+
+RUN_TEST_STEP                 -1    CTestHandler        getmanagementpolicy    authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-3-002
+
+END_TESTCASE                  SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-0003
+
+
+
+
+
+START_TESTCASE                SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-0004
+
+//! @SYMTestCaseID            SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-0004
+
+//! @SYMTestCaseDesc          6.2 Test setting policies for the keys
+
+//! @SYMTestActions           1) 6.2.1, Set banana's use policy based on SID and capabilities
+
+//!                           2) 6.2.2, Check banana's use policy set correctly
+
+//!                           3) 6.2.3, Set mango's use policy based on VID and capabilities
+
+//!                           4) 6.2.4, Check mango's use policy set correctly
+
+//!                           5) 6.2.5, Set tomato's use policy based on just capabilities
+
+//!                           6) 6.2.6, Check tomato's use policy set correctly
+
+//!                           7) 6.2.7.1, Test we can't set management policy that doesn't include the calling process
+
+//!                           8) 6.2.7.2, Test we can't set management policy that doesn't include the calling process
+
+//!                           9) 6.2.7.3, Test we can't set management policy that doesn't include the calling process
+
+//!                           10) 6.2.7.4, Set banana's management policy based on just capabilities
+
+//!                           11) 6.2.8, Check banana's management policy set correctly
+
+//!                           12) 6.2.9, Set mango's management policy based on SID and capabilities
+
+//!                           13) 6.2.10, Check mango's management policy set correctly
+
+//!                           14) 6.2.11, Set tomato's management policy based on VID and capabilities
+
+//!                           15) 6.2.12, Check tomato's management policy set correctly
+
+RUN_TEST_STEP                 -1    CTestHandler        setusepolicy           authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-001
+
+RUN_TEST_STEP                 -1    CTestHandler        getusepolicy           authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-002
+
+RUN_TEST_STEP                 -1    CTestHandler        setusepolicy           authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-003
+
+RUN_TEST_STEP                 -1    CTestHandler        getusepolicy           authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-004
+
+RUN_TEST_STEP                 -1    CTestHandler        setusepolicy           authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-005
+
+RUN_TEST_STEP                 -1    CTestHandler        getusepolicy           authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-006
+
+RUN_TEST_STEP !Error=-6       -1    CTestHandler        setmanagementpolicy    authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-007
+
+RUN_TEST_STEP !Error=-6       -1    CTestHandler        setmanagementpolicy    authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-008
+
+RUN_TEST_STEP !Error=-6       -1    CTestHandler        setmanagementpolicy    authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-009
+
+RUN_TEST_STEP                 -1    CTestHandler        setmanagementpolicy    authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-010
+
+RUN_TEST_STEP                 -1    CTestHandler        getmanagementpolicy    authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-011
+
+RUN_TEST_STEP                 -1    CTestHandler        setmanagementpolicy    authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-012
+
+RUN_TEST_STEP                 -1    CTestHandler        getmanagementpolicy    authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-013
+
+RUN_TEST_STEP                 -1    CTestHandler        setmanagementpolicy    authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-014
+
+RUN_TEST_STEP                 -1    CTestHandler        getmanagementpolicy    authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-4-015
+
+END_TESTCASE                  SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-0004
+
+
+
+
+
+START_TESTCASE                SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-0005
+
+//! @SYMTestCaseID            SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-0005
+
+//! @SYMTestCaseDesc          6.3 Test enforcement of security policies
+
+//! @SYMTestActions           1) 6.3.1, Test use policy enforcement for SID and capabilities
+
+//!                           2) 6.3.2, Test use policy enforcement for VID and capabilities
+
+//!                           3) 6.3.3, Test use policy enforcement for just capabilities
+
+//!                           4) 6.3.4, Test banana's management policy enforcement (just capabilities)
+
+//!                           5) 6.3.5, Test mango's management policy enforcement (SID and capabilities)
+
+//!                           6) 6.3.6, Test tomato's management policy enforcement (VID and capabilities)
+
+RUN_TEST_STEP                 -1    CTestHandler        policytest             authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-5-001
+
+RUN_TEST_STEP                 -1    CTestHandler        policytest             authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-5-002
+
+RUN_TEST_STEP                 -1    CTestHandler        policytest             authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-5-003
+
+RUN_TEST_STEP                 -1    CTestHandler        policytest             authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-5-004
+
+RUN_TEST_STEP                 -1    CTestHandler        policytest             authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-5-005
+
+RUN_TEST_STEP                 -1    CTestHandler        policytest             authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-5-006
+
+END_TESTCASE                  SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-0005
+
+
+
+
+
+START_TESTCASE                SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-0006
+
+//! @SYMTestCaseID            SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-0006
+
+//! @SYMTestCaseDesc          //////////////////////////////////////////////////////////////////////////////
+
+//!                           7. Test policing of other APIs
+
+//!                           //////////////////////////////////////////////////////////////////////////////
+
+//!                           
+
+//!                           7.1 Test set timeout is policed with WriteDeviceData capability
+
+//! @SYMTestActions           1) 7.1, Test policing of set timeout
+
+//!                           2) 7.2, Test policing of create and import by WriteUserData
+
+//!                           3) 7.3, Test policing of list by ReadUserData
+
+RUN_TEST_STEP                 -1    CTestHandler        policytest             authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-6-001
+
+RUN_TEST_STEP                 -1    CTestHandler        policytest             authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-6-002
+
+END_TESTCASE                  SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-0006
+
+
+
+
+
+START_TESTCASE                SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-0007
+
+//! @SYMTestCaseID            SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-0007
+
+//! @SYMTestCaseDesc          //////////////////////////////////////////////////////////////////////////////
+
+//!                           Cleanup
+
+//!                           //////////////////////////////////////////////////////////////////////////////
+
+//! @SYMTestActions           1) 8.0, List keys
+
+//!                           2) 8.1, Delete keys
+
+//!                           3) 8.2, Close key store
+
+//!                           4) 8.3, Sleep 5 seconds
+
+//!                           5) 8.4, Check for server heap error
+
+RUN_TEST_STEP                 -1    CTestHandler        listkeys               authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-7-001
+
+RUN_TEST_STEP                 -1    CTestHandler        deletekeys             authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-7-002
+
+RUN_TEST_STEP                 -1    CTestHandler        delete              
+
+RUN_TEST_STEP                 -1    CTestHandler        sleep                  authobjects_useauth.ini   SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-7-004
+
+RUN_TEST_STEP                 -1    CTestHandler        checkserverheaperror
+
+END_TESTCASE                  SEC-FILETOKENS-AUTHOBJECTS_V2_USEAUTH-0007
+
+
+
+
+
--- a/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/buildromstore.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/buildromstore.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-FILETOKENS-BUILDROMSTORE-0001
--- a/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/cancel.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/cancel.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-FILETOKENS-CANCEL-0001
--- a/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/cancel_useauth.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/cancel_useauth.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CANCEL_USEAUTH-0001
--- a/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/capability_useauth.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/capability_useauth.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-CAPABILITY_USEAUTH-0001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/createoldkeystore.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,59 @@
+[SEC-FILETOKENS-CREATEOLDKEYSTORE-1-002]
+<actionbody>
+	<mode>manager</mode>
+</actionbody>
+
+
+[SEC-FILETOKENS-CREATEOLDKEYSTORE-1-004]
+<actionbody>
+	<keyusage>Derive</keyusage>
+	<keysize>512</keysize>
+	<keylabel>dhkey</keylabel>
+	<keyalgorithm>DH</keyalgorithm>
+	<keyaccesstype>Extractable</keyaccesstype>
+	<keystore>0</keystore>
+	<passphrase>create pinkcloud</passphrase>
+</actionbody>
+
+
+[SEC-FILETOKENS-CREATEOLDKEYSTORE-1-005]
+<actionbody>
+	<keyusage>allusagesbutNR</keyusage>
+	<keysize>512</keysize>
+	<keylabel>rsakey</keylabel>
+	<keyalgorithm>RSA</keyalgorithm>
+	<keyaccesstype>Extractable</keyaccesstype>
+	<keystore>0</keystore>
+</actionbody>
+
+
+[SEC-FILETOKENS-CREATEOLDKEYSTORE-1-006]
+<actionbody>
+	<keyusage>DSAUsage</keyusage>
+	<keysize>512</keysize>
+	<keylabel>dsakey</keylabel>
+	<keyalgorithm>DSA</keyalgorithm>
+	<keyaccesstype>Extractable</keyaccesstype>
+		
+		
+</actionbody>
+
+
+[SEC-FILETOKENS-CREATEOLDKEYSTORE-1-007]
+<actionbody>
+	<foundkey>dhkey</foundkey>
+	<foundkey>rsakey</foundkey>
+	<foundkey>dsakey</foundkey>
+</actionbody>
+
+
+
+[SEC-FILETOKENS-CREATEOLDKEYSTORE-1-009]
+<actionbody>
+        <seconds>5</seconds>
+</actionbody>
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/createoldkeystore.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,72 @@
+//
+// Copyright (c) 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: 
+//
+//
+
+
+START_TESTCASE               SEC-FILETOKENS-CREATEOLDKEYSTORE-1-0001
+
+//! @SYMTestCaseID           SEC-FILETOKENS-CREATEOLDKEYSTORE-1-0001
+
+//! @SYMTestCaseDesc          
+
+					///////////////////////////////////////////////////////////////////////////////
+					//	Create an old key store
+					////////////////////////////////////////////////////////////////////////////////////
+
+//! @SYMTestActions           1) Delete keystore data file
+
+//!                           2) Opening key store in manager mode
+
+//!                           3) Delete default keys
+
+//!                           4) Add a DH key
+
+//!                           5) Add a RSA key
+
+//!                           6) Add a DSA key
+
+//!                           7) List all keys
+
+//!                           8) Closing key store
+
+//!                           9) Sleep 5 seconds
+
+//!                          10) Check for server heap error
+
+
+
+RUN_TEST_STEP -1 CTestHandler deletekeystoredata
+ 
+RUN_TEST_STEP -1 CTestHandler init createoldkeystore.ini SEC-FILETOKENS-CREATEOLDKEYSTORE-1-002
+
+RUN_TEST_STEP -1 CTestHandler deletekeys
+
+RUN_TEST_STEP -1 CTestHandler addkey createoldkeystore.ini SEC-FILETOKENS-CREATEOLDKEYSTORE-1-004
+
+RUN_TEST_STEP -1 CTestHandler addkey createoldkeystore.ini SEC-FILETOKENS-CREATEOLDKEYSTORE-1-005
+
+RUN_TEST_STEP -1 CTestHandler addkey createoldkeystore.ini SEC-FILETOKENS-CREATEOLDKEYSTORE-1-006
+
+RUN_TEST_STEP -1 CTestHandler listallkeys createoldkeystore.ini SEC-FILETOKENS-CREATEOLDKEYSTORE-1-007
+
+RUN_TEST_STEP -1 CTestHandler delete
+
+RUN_TEST_STEP -1 CTestHandler sleep createoldkeystore.ini SEC-FILETOKENS-CREATEOLDKEYSTORE-1-009
+
+RUN_TEST_STEP -1 CTestHandler checkserverheaperror
+
+END_TESTCASE                 SEC-FILETOKENS-CREATEOLDKEYSTORE-1-0001
+
--- a/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/exportscript.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/exportscript.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-FILETOKENS-EXPORTSCRIPT-0001
--- a/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/exportscript_useauth.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/exportscript_useauth.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-EXPORTSCRIPT_USEAUTH-0001
--- a/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/initialize.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/initialize.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,7 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
+
 
 PRINT Initialize authentication server to run key store test.
 
--- a/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/oldserver_newfeature.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/oldserver_newfeature.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-OLDSERVER_NEWFEATURE-0001
--- a/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/oom.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/oom.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-FILETOKENS-OOM-0001
--- a/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/oom_useauth.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/oom_useauth.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-OOM_USEAUTH-0001
--- a/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/reg_first_identity.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/reg_first_identity.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,7 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
+
 
 PRINT Authentication Server tests...
 
--- a/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/reg_second_identity.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/reg_second_identity.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,6 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
 
 PRINT Authentication Server tests...
 
--- a/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/reload.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/reload.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-FILETOKENS-RELOAD-0001
--- a/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/reload_useauth.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/reload_useauth.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-RELOAD_USEAUTH-0001
--- a/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/servoom.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/servoom.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-FILETOKENS-SERVOOM-0001
--- a/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/servoom_useauth.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/servoom_useauth.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-SERVOOM_USEAUTH-0001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/testnewkeystore.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,67 @@
+[SEC-FILETOKENS-TESTNEWKEYSTORE-1-001]
+	<actionbody>
+		<mode>manager</mode>
+	</actionbody>
+
+
+[SEC-FILETOKENS-TESTNEWKEYSTORE-1-002]
+   	<actionbody>
+   		<foundkey>dhkey</foundkey>
+		<foundkey>rsakey</foundkey>
+		<foundkey>dsakey</foundkey>
+   	</actionbody>
+
+
+[SEC-FILETOKENS-TESTNEWKEYSTORE-1-003]
+	<actionbody>
+		<keylabel>dhkey</keylabel>
+		<open>DH</open>
+	</actionbody>
+
+
+[SEC-FILETOKENS-TESTNEWKEYSTORE-1-004]
+	<actionbody>
+		<keylabel>dhkey</keylabel>
+		<n>DA9A18547FF03B385CC16508C173A7EF4EB61CB40EF8FEF3B31F145051676166BCDC3FE6B799FC394D08C26385F9413F896E09117E46209D6923602683CEA100924A6EE695281775C619DAA94EA8CB3691B4275B0183F1D39639EBC92995FE645D6C1BC28D409E585549BBD2C5DCDD6C208B04EADD8B7A6D997F72CBAD88390F</n>
+		<g>02</g>
+	</actionbody>
+
+
+[SEC-FILETOKENS-TESTNEWKEYSTORE-1-005]
+	<actionbody>
+		<keylabel>rsakey</keylabel>
+		<open>RSA</open>
+		<text>This is text of 20 .</text>		
+	</actionbody>
+
+
+
+[SEC-FILETOKENS-TESTNEWKEYSTORE-1-006]
+	<actionbody>
+		<keylabel>rsakey</keylabel>
+		<text>Ook!</text>		
+	</actionbody>
+
+
+[SEC-FILETOKENS-TESTNEWKEYSTORE-1-007]
+	<actionbody>
+		<keylabel>dsakey</keylabel>
+		<open>DSA</open>
+		<text>This is text of 20 .</text>		
+	</actionbody>
+
+
+
+
+[SEC-FILETOKENS-TESTNEWKEYSTORE-1-009]
+	<actionbody>
+          <seconds>5</seconds>
+        </actionbody>
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/testnewkeystore.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,73 @@
+//
+// Copyright (c) 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: 
+//
+//
+
+
+START_TESTCASE               SEC-FILETOKENS-TESTNEWKEYSTORE-1-0001
+
+//! @SYMTestCaseID           SEC-FILETOKENS-TESTNEWKEYSTORE-1-0001
+
+//! @SYMTestCaseDesc     
+     
+//!					////////////////////////////////////////////////////////////////////////////////////
+//!					//	Operations on migrated key store
+//!					////////////////////////////////////////////////////////////////////////////////////
+
+//! @SYMTestActions           1) Opening key store in manager mode
+
+//!                           2) List all keys
+
+//!                           3) Open a DH key
+
+//!                           4) derive for dhkey
+
+//!                           5) Sign with RSA key
+
+//!                           6) Decrypt with RSA key
+
+//!                           7) Closing key store
+
+//!                           8) Closing key store
+
+//!                           9) Sleep 5 seconds
+
+//!                          10) Check for server heap error
+
+
+RUN_TEST_STEP -1 CTestHandler init testnewkeystore.ini SEC-FILETOKENS-TESTNEWKEYSTORE-1-001
+
+RUN_TEST_STEP -1 CTestHandler listallkeys testnewkeystore.ini SEC-FILETOKENS-TESTNEWKEYSTORE-1-002
+
+RUN_TEST_STEP -1 CTestHandler open testnewkeystore.ini SEC-FILETOKENS-TESTNEWKEYSTORE-1-003
+
+RUN_TEST_STEP -1 CTestHandler derive testnewkeystore.ini SEC-FILETOKENS-TESTNEWKEYSTORE-1-004
+
+RUN_TEST_STEP -1 CTestHandler sign testnewkeystore.ini SEC-FILETOKENS-TESTNEWKEYSTORE-1-005
+
+RUN_TEST_STEP -1 CTestHandler decrypt testnewkeystore.ini SEC-FILETOKENS-TESTNEWKEYSTORE-1-006
+
+RUN_TEST_STEP -1 CTestHandler sign testnewkeystore.ini SEC-FILETOKENS-TESTNEWKEYSTORE-1-007
+
+RUN_TEST_STEP -1 CTestHandler delete
+
+RUN_TEST_STEP -1 CTestHandler sleep testnewkeystore.ini SEC-FILETOKENS-TESTNEWKEYSTORE-1-009
+
+RUN_TEST_STEP -1 CTestHandler checkserverheaperror
+
+
+END_TESTCASE                SEC-FILETOKENS-TESTNEWKEYSTORE-1-0001
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/thwkeystore.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,251 @@
+[SEC-FILETOKENS-THWKEYSTORE-1-002]
+	<actionbody>
+		<mode>manager</mode>
+		<CheckKeyStoreLabel>1</CheckKeyStoreLabel>
+		<keystoreindex>3</keystoreindex>
+		<keystorelabel>Hardware plugin implementation</keystorelabel>
+	</actionbody>
+
+
+
+
+[SEC-FILETOKENS-THWKEYSTORE-1-004]
+	<actionbody>
+		<listcount>2</listcount>
+		<foundkey>ecckey</foundkey>
+		<foundkey>ecckey2</foundkey>
+	</actionbody>
+
+
+[SEC-FILETOKENS-THWKEYSTORE-1-005]
+	<actionbody>
+		<hwtype>1</hwtype>
+		<operationtype>sign</operationtype>
+		<keylabel>ecckey</keylabel>
+		<open>ECC</open>
+	</actionbody>
+
+
+
+[SEC-FILETOKENS-THWKEYSTORE-1-006]
+	<actionbody>
+		<hwtype>1</hwtype>
+		<operationtype>decrypt</operationtype>
+		<keylabel>ecckey</keylabel>
+		<open>ECC</open>
+	</actionbody>
+
+
+
+[SEC-FILETOKENS-THWKEYSTORE-1-007]
+	<actionbody>
+		<hwtype>0</hwtype>
+		<operationtype>sign</operationtype>
+		<keylabel>ecckey</keylabel>
+		<open>ECC</open>
+		<keystorelabel>Hardware plugin implementation</keystorelabel>
+	<text>sample text</text>
+	</actionbody>
+
+
+
+[SEC-FILETOKENS-THWKEYSTORE-1-008]
+	<actionbody>
+		<hwtype>0</hwtype>
+		<operationtype>decrypt</operationtype>
+		<keylabel>ecckey2</keylabel>
+		<open>ECC</open>
+		<keystorelabel>Hardware plugin implementation</keystorelabel>
+	<text>sample text</text>
+	</actionbody>
+
+
+
+[SEC-FILETOKENS-THWKEYSTORE-1-009]
+	<actionbody>
+		<hwtype>1</hwtype>
+		<operationtype>sign</operationtype>
+		<keylabel>ecckey</keylabel>
+		<open>ECC</open>
+		<keystorelabel>Hardware plugin implementation</keystorelabel>
+	<text>sample text</text>
+	</actionbody>
+
+
+[SEC-FILETOKENS-THWKEYSTORE-1-010]
+	<actionbody>
+		<hwtype>1</hwtype>
+		<operationtype>decrypt</operationtype>
+		<keylabel>ecckey2</keylabel>
+		<open>ECC</open>
+		<keystorelabel>Hardware plugin implementation</keystorelabel>
+	<text>sample text</text>
+	</actionbody>
+
+
+
+[SEC-FILETOKENS-THWKEYSTORE-1-011]
+	<actionbody>
+		<foundkey>ecckey3</foundkey>
+		<listingstatus>fail</listingstatus>
+	</actionbody>
+
+
+
+[SEC-FILETOKENS-THWKEYSTORE-1-012]
+	<actionbody>
+		<keyusage>allusagesbutNR</keyusage>
+		<keysize>512</keysize>
+		<keylabel>banana</keylabel>
+		<keyalgorithm>RSA</keyalgorithm>
+		<keyaccesstype>Extractable</keyaccesstype>
+		<keystore>0</keystore>
+		<usekeystore>Hardware plugin implementation</usekeystore>
+	</actionbody>
+	<actionresult>
+		<return>KErrNotSupported</return>
+	</actionresult>
+
+
+
+[SEC-FILETOKENS-THWKEYSTORE-1-013]
+	<actionbody>
+		<keylabel>ecckey</keylabel>
+	</actionbody>
+	<actionresult>
+		<return>KErrNotSupported</return>
+	</actionresult>
+
+
+
+[SEC-FILETOKENS-THWKEYSTORE-1-014]
+	<actionbody>
+		<keylabel>ecckey</keylabel>
+		<open>RSA</open>
+	</actionbody>
+	<actionresult>
+		<return>KErrNotSupported</return>
+	</actionresult>
+
+
+
+[SEC-FILETOKENS-THWKEYSTORE-1-015]
+	<actionbody>
+		<keylabel>ecckey</keylabel>
+		<open>DSA</open>
+	</actionbody>
+	<actionresult>
+		<return>KErrNotSupported</return>
+	</actionresult>
+
+
+
+[SEC-FILETOKENS-THWKEYSTORE-1-016]
+	<actionbody>
+		<keylabel>ecckey</keylabel>
+		<open>Decrypt</open>
+	</actionbody>
+	<actionresult>
+		<return>KErrNotSupported</return>
+	</actionresult>
+
+
+
+[SEC-FILETOKENS-THWKEYSTORE-1-017]
+	<actionbody>
+		<ImportData>pkcs8rsa.001</ImportData>
+		<keyusage>allusagesbutNR</keyusage>
+		<keylabel>ImportHardwareKey</keylabel>
+		<keyaccesstype>NeverExtractable</keyaccesstype>
+		<usekeystore>Hardware plugin implementation</usekeystore>
+	</actionbody>
+	<actionresult>
+		<return>KErrNotSupported</return>
+	</actionresult>
+
+
+
+[SEC-FILETOKENS-THWKEYSTORE-1-018]
+	<actionbody>
+		<ImportData>encryptPK8rsaDER.txt</ImportData>
+		<keyusage>allusagesbutNR</keyusage>
+		<keylabel>ImportEncryptedHardwareKey</keylabel>
+		<keyaccesstype>NeverExtractable</keyaccesstype>
+		<usekeystore>Hardware plugin implementation</usekeystore>
+	</actionbody>
+	<actionresult>
+		<return>KErrNotSupported</return>
+	</actionresult>
+
+
+
+[SEC-FILETOKENS-THWKEYSTORE-1-019]
+	<actionbody>
+		<ExportFile>export_hardware_key</ExportFile>
+		<keyusage>Derive</keyusage>
+		<keylabel>ecckey</keylabel>
+		<keyalgorithm>ECC</keyalgorithm>
+		<encrypted>0</encrypted>
+	</actionbody>
+	<actionresult>
+		<return>KErrNotSupported</return>
+	</actionresult>
+
+
+[SEC-FILETOKENS-THWKEYSTORE-1-020]
+	<actionbody>
+		<ExportFile>export_encrypted_hardware_key</ExportFile>
+		<keyusage>Derive</keyusage>
+		<keylabel>ecckey</keylabel>
+		<keyalgorithm>ECC</keyalgorithm>
+		<encrypted>1</encrypted>
+	</actionbody>
+	<actionresult>
+		<return>KErrNotSupported</return>
+	</actionresult>
+
+
+[SEC-FILETOKENS-THWKEYSTORE-1-021]
+	<actionbody>
+		<keylabel>ecckey</keylabel>
+		<policy>
+			<secureid>0x101FFFFF</secureid>
+			<capability>DRM</capability>
+			<capability>ReadUserData</capability>
+		</policy>
+	</actionbody>
+	<actionresult>
+		<return>KErrNotSupported</return>
+	</actionresult>
+
+
+[SEC-FILETOKENS-THWKEYSTORE-1-022]
+	<actionbody>
+		<keylabel>ecckey</keylabel>
+		<policy>
+			<secureid>0x101FFFFF</secureid>
+			<capability>DRM</capability>
+			<capability>ReadUserData</capability>
+		</policy>
+	</actionbody>
+	<actionresult>
+		<return>KErrNotSupported</return>
+	</actionresult>
+
+
+[SEC-FILETOKENS-THWKEYSTORE-1-023]
+	<actionbody>
+		<keyalgorithm>ECC</keyalgorithm>
+		<keylabel>ecckey</keylabel>
+	</actionbody>
+	<actionresult>
+		<return>KErrNotSupported</return>
+	</actionresult>
+
+
+
+[SEC-FILETOKENS-THWKEYSTORE-1-025]
+	<actionbody>
+          <seconds>5</seconds>
+        </actionbody>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/thwkeystore.script	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,129 @@
+//
+// Copyright (c) 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: 
+//
+//
+
+START_TESTCASE               SEC-FILETOKENS-THWKEYSTORE-1-0001
+
+//! @SYMTestCaseID           SEC-FILETOKENS-THWKEYSTORE-1-0001
+
+//! @SYMTestCaseDesc     
+     
+//!					////////////////////////////////////////////////////////////////////////////////////
+//!					//	Testing hardware token implementation
+//!					////////////////////////////////////////////////////////////////////////////////////
+
+//! @SYMTestActions           1) Delete keystore data file
+
+//!                           2) Retrieving label of a particular key store
+
+//!                           3) delete keys
+
+//!                           4) List Keys
+
+//!                           5) Open a key for signing
+
+//!                           6) Open a key for decryption
+
+//!                           7) Open a key for signing
+
+//!                           8) Open a key for decryption
+
+//!                           9) Open a key for signing
+
+//!                          10) Open a key for decryption
+
+//!			           11) List Keys
+
+//!                          12) Add a key
+
+//!                          13) Get key information
+
+//!                          14) Open a key as a RSA signer
+
+//!                          15) Open a key as a DSA signer
+
+//!                          16) Open key for decrypt
+
+//!                          17) Import a key
+
+//!                          18) Import a PKCS5 encrypted RSA key
+
+//!                          19) Export a key
+
+//!                          20) Set use policy
+
+//!                          21) Open key for decrypt
+
+//!                          22) Set use policy
+
+//!                          23) Delete a key
+
+//!                          24) Closing key store
+
+//!                          25) Sleep 5 seconds
+
+
+RUN_TEST_STEP -1 CTestHandler deletekeystoredata
+
+RUN_TEST_STEP -1 CTestHandler init thwkeystore.ini SEC-FILETOKENS-THWKEYSTORE-1-002
+
+RUN_TEST_STEP -1 CTestHandler deletekeys
+
+RUN_TEST_STEP -1 CTestHandler listallkeys thwkeystore.ini SEC-FILETOKENS-THWKEYSTORE-1-004
+
+RUN_TEST_STEP -1 CTestHandler open thwkeystore.ini SEC-FILETOKENS-THWKEYSTORE-1-005
+
+RUN_TEST_STEP -1 CTestHandler open thwkeystore.ini SEC-FILETOKENS-THWKEYSTORE-1-006
+
+RUN_TEST_STEP -1 CTestHandler sign thwkeystore.ini SEC-FILETOKENS-THWKEYSTORE-1-007
+
+RUN_TEST_STEP -1 CTestHandler decrypt thwkeystore.ini SEC-FILETOKENS-THWKEYSTORE-1-008
+
+RUN_TEST_STEP -1 CTestHandler sign thwkeystore.ini SEC-FILETOKENS-THWKEYSTORE-1-009
+
+RUN_TEST_STEP -1 CTestHandler decrypt thwkeystore.ini SEC-FILETOKENS-THWKEYSTORE-1-010
+
+RUN_TEST_STEP -1 CTestHandler listkeys thwkeystore.ini SEC-FILETOKENS-THWKEYSTORE-1-011
+
+RUN_TEST_STEP !Error=-5 -1 CTestHandler addkey thwkeystore.ini SEC-FILETOKENS-THWKEYSTORE-1-012
+
+RUN_TEST_STEP !Error=-5 -1 CTestHandler getkeyinfo thwkeystore.ini SEC-FILETOKENS-THWKEYSTORE-1-013
+
+RUN_TEST_STEP !Error=-5 -1 CTestHandler open thwkeystore.ini SEC-FILETOKENS-THWKEYSTORE-1-014
+
+RUN_TEST_STEP !Error=-5 -1 CTestHandler open thwkeystore.ini SEC-FILETOKENS-THWKEYSTORE-1-015
+
+RUN_TEST_STEP !Error=-5 -1 CTestHandler open thwkeystore.ini SEC-FILETOKENS-THWKEYSTORE-1-016
+
+RUN_TEST_STEP !Error=-5 -1 CTestHandler importkey thwkeystore.ini SEC-FILETOKENS-THWKEYSTORE-1-017
+
+RUN_TEST_STEP !Error=-5 -1 CTestHandler importkey thwkeystore.ini SEC-FILETOKENS-THWKEYSTORE-1-018
+
+RUN_TEST_STEP !Error=-5 -1 CTestHandler exportkey thwkeystore.ini SEC-FILETOKENS-THWKEYSTORE-1-019
+
+RUN_TEST_STEP !Error=-5 -1 CTestHandler exportkey thwkeystore.ini SEC-FILETOKENS-THWKEYSTORE-1-020
+
+RUN_TEST_STEP !Error=-5 -1 CTestHandler setusepolicy thwkeystore.ini SEC-FILETOKENS-THWKEYSTORE-1-021
+
+RUN_TEST_STEP !Error=-5 -1 CTestHandler setmanagementpolicy thwkeystore.ini SEC-FILETOKENS-THWKEYSTORE-1-022
+
+RUN_TEST_STEP !Error=-5 -1 CTestHandler deletekeys thwkeystore.ini SEC-FILETOKENS-THWKEYSTORE-1-023
+
+RUN_TEST_STEP -1 CTestHandler delete
+
+RUN_TEST_STEP -1 CTestHandler sleep thwkeystore.ini SEC-FILETOKENS-THWKEYSTORE-1-025
+
+END_TESTCASE               SEC-FILETOKENS-THWKEYSTORE-1-0001
--- a/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/tkeystore.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/tkeystore.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-FILETOKENS-TKEYSTORE-0001
--- a/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/tkeystore_authentication1.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/tkeystore_authentication1.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-TKEYSTORE_AUTHENTICATION1-0001
--- a/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/tkeystore_authentication2.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/tkeystore_authentication2.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-TKEYSTORE_AUTHENTICATION2-0001
--- a/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/tkeystore_nouserregistered.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/tkeystore_nouserregistered.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-TKEYSTORE_NOUSERREGISTERED-0001
--- a/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/tkeystore_useauth.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/scripts/tkeystore_useauth.script	Sat Dec 05 21:41:51 2009 +0000
@@ -2,16 +2,16 @@
 // Copyright (c) 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 "Symbian Foundation License v1.0"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description:
+// Description: 
 //
 
 START_TESTCASE                SEC-TKEYSTORE_USEAUTH-0001
--- a/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/t_keystore_actions.cpp	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/t_keystore_actions.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -131,7 +131,7 @@
 	iDisableCheckDialog = Input::ParseIntElement(aTestActionSpec.iActionBody, KDisableDialogStart, KDisableDialogEnd, pos);
 
 	pos = 0;
-	iKeyStoreImplLabel.Set(Input::ParseElement(aTestActionSpec.iActionBody, KUseKeyStoreStart, KUseKeyStoreEnd, pos));
+	iKeyStoreImplLabel.Copy(Input::ParseElement(aTestActionSpec.iActionBody, KUseKeyStoreStart, KUseKeyStoreEnd, pos));
 	
 #ifdef SYMBIAN_AUTH_SERVER
 	TPtrC8 authExpr;
--- a/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/t_keystore_actions.h	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/tkeystore/t_keystore_actions.h	Sat Dec 05 21:41:51 2009 +0000
@@ -114,7 +114,7 @@
 	TInt iDisableCheckDialog;
 	TKeyTypes iType;
 	TInt iKeyStoreImplIndex;
-	TPtrC8 iKeyStoreImplLabel;
+	TBuf8<50> iKeyStoreImplLabel;
 	
 #ifdef SYMBIAN_AUTH_SERVER
 	// this variable would be used to retrieve the rom build variant 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/ttesttools/data/cert_addapps1.txt	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,3 @@
+certtool -remove c:\tcertstore\ent-wtls1.cer
+certtool -import c:\tcertstore\ent-wtls1.cer
+certtool -addapps -apps SSL/TLS -label c:\tcertstore\ent-wtls1.cer
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/ttesttools/data/cert_importdeletable1.txt	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,2 @@
+certtool -label deletableimport1 -import c:\tcertstore\thawteserverca.cer -deletable y
+certtool -i c:\tcertstore\thawteserverca.cer -deletable y
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/ttesttools/data/cert_importdeletable2.txt	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,2 @@
+certtool -label deletableimport2 -import c:\tcertstore\verisignclass1primaryca.cer -deletable n
+certtool -i c:\tcertstore\verisignclass1primaryca.cer -deletable n
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/ttesttools/data/cert_importdeletable3.txt	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,2 @@
+certtool -label deletableimport3 -import c:\tcertstore\thawteserverca.cer -deletable yesno
+certtool -i c:\tcertstore\thawteserverca.cer -deletable yesno
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/ttesttools/data/cert_removedeletable1.txt	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,3 @@
+certtool -remove deletableimport1 
+certtool -r deletableimport1 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/ttesttools/data/cert_removedeletable2.txt	Sat Dec 05 21:41:51 2009 +0000
@@ -0,0 +1,2 @@
+certtool -remove deletableimport2
+certtool -r deletableimport2
\ No newline at end of file
Binary file cryptoservices/filebasedcertificateandkeystores/test/ttesttools/documentation/sec ttesttools Test Suite Description Document.doc has changed
--- a/cryptoservices/filebasedcertificateandkeystores/test/ttesttools/scripts/keytool_migrate.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/ttesttools/scripts/keytool_migrate.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,6 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
 //! @file
 // filetokens tools unit (integration) tests
 PRINT Run  test for migrating old keys data to new format.
--- a/cryptoservices/filebasedcertificateandkeystores/test/ttesttools/scripts/sec-filetokens-tools.ini	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/ttesttools/scripts/sec-filetokens-tools.ini	Sat Dec 05 21:41:51 2009 +0000
@@ -307,4 +307,33 @@
 
 [certtool_setapps2]
 expectedlabel1=c:\tcertstore\ent-wtls1.cer
-trust=1
\ No newline at end of file
+trust=1
+
+[certtool_addapps1]
+actualoutput=c:\output.txt
+expectedlabel1=c:\tcertstore\ent-wtls1.cer
+numapps=1
+apps0=SSL/TLS
+
+[certtool_addapps2]
+expectedlabel1=c:\tcertstore\ent-wtls1.cer
+trust=1
+
+[certtool_importdeletable1]
+expectedlabel1=deletableimport1 
+
+[certtool_importdeletable2]
+expectedlabel1=deletableimport2
+
+[certtool_importdeletable3]
+actualoutput=c:\output.txt
+expectederror=An error occured during certificate import.
+
+[certtool_removedeletable1]
+actualoutput=c:\output.txt
+expectederror=Certificate removed successfully.
+
+[certtool_removedeletable2]
+actualoutput=c:\output.txt
+expectederror=Certificate removal failed.
+
--- a/cryptoservices/filebasedcertificateandkeystores/test/ttesttools/scripts/sec-filetokens-tools.script	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/ttesttools/scripts/sec-filetokens-tools.script	Sat Dec 05 21:41:51 2009 +0000
@@ -13,21 +13,7 @@
 //
 // Description: 
 //
-//
-// Copyright (c) 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 "Symbian Foundation License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
+
 //! @file
 // filetokens tools unit (integration) tests
 PRINT Run all certtool and keytool tests
@@ -984,21 +970,21 @@
 END_TESTCASE SEC-FILETOKENS-EC097-0069
 
 
-//! @SYMTestCaseID 	SEC-FILETOKENS-Defect118391-0001
+//! @SYMTestCaseID 	SEC-FILETOKENS-Defect118391-0070
 //! @SYMTestCaseDesc 	Certool import command
 //! 			(certtool_import_def118391)
 //! @SYMTestPriority 	Medium
 //! @SYMTestActions  	call Certool import command without a label specified
 //! @SYMTestExpectedResults Certtool  should not display any error message and work fine.
 
-START_TESTCASE SEC-FILETOKENS-Defect118391-0001
+START_TESTCASE SEC-FILETOKENS-Defect118391-0070
 RUN_PROGRAM certtool.exe c:\ttesttools\data\cert_import.txt c:\output.txt
 RUN_TEST_STEP 100 ttesttools ListCertStep c:\ttesttools\scripts\sec-filetokens-tools.ini certtool_import
 RUN_TEST_STEP 100 ttesttools ListKeyStep c:\ttesttools\scripts\sec-filetokens-tools.ini certtool_import
-END_TESTCASE SEC-FILETOKENS-Defect118391-0001
+END_TESTCASE SEC-FILETOKENS-Defect118391-0070
 
 
-//! @SYMTestCaseID 	SEC-FILETOKENS-Defect118391-0002
+//! @SYMTestCaseID 	SEC-FILETOKENS-Defect118391-0071
 //! @SYMTestCaseDesc 	Certool setapps command
 //! 			(certtool_setapps_defect118391)
 //! @SYMTestPriority 	Medium
@@ -1006,20 +992,107 @@
 //! @SYMTestExpectedResults Certtool  should not display any error message and work fine.
 
 
-START_TESTCASE SEC-FILETOKENS-Defect118391-0002
+START_TESTCASE SEC-FILETOKENS-Defect118391-0071
 RUN_PROGRAM certtool.exe c:\ttesttools\data\cert_setapps1.txt c:\output.txt
 RUN_TEST_STEP 100 ttesttools GetTrustAppsStep c:\ttesttools\scripts\sec-filetokens-tools.ini certtool_setapps1
-END_TESTCASE SEC-FILETOKENS-Defect118391-0002
+END_TESTCASE SEC-FILETOKENS-Defect118391-0071
 
 
-//! @SYMTestCaseID 	SEC-FILETOKENS-Defect118391-0003
+//! @SYMTestCaseID 	SEC-FILETOKENS-Defect118391-0072
 //! @SYMTestCaseDesc 	Certool setapps command  
 //! 			(certtool_trust)
 //! @SYMTestPriority 	Medium
 //! @SYMTestActions  	call Certool to set the application trust status for the certificate
 //! @SYMTestExpectedResults Query certstore via CUnifiedCertstore for the certificats trust status
 
-START_TESTCASE SEC-FILETOKENS-Defect118391-0003
+START_TESTCASE SEC-FILETOKENS-Defect118391-0072
 RUN_PROGRAM certtool.exe c:\ttesttools\data\cert_setapps.txt c:\output.txt
 RUN_TEST_STEP 100 ttesttools GetTrustStep c:\ttesttools\scripts\sec-filetokens-tools.ini certtool_setapps2
-END_TESTCASE SEC-FILETOKENS-Defect118391-0003
+END_TESTCASE SEC-FILETOKENS-Defect118391-0072
+
+
+//! @SYMTestCaseID 	SEC-FILETOKENS-QI-0073
+//! @SYMTestCaseDesc 	Certool addapps command
+//! 			(certtool_addapps_QI)
+//! @SYMTestPriority 	Medium
+//! @SYMTestActions  	First remove the cert, then import the certificate then call Certool to set the application trust status for the certificate
+//! @SYMTestExpectedResults Query certstore via CUnifiedCertstore for the certificats app status.
+
+
+START_TESTCASE SEC-FILETOKENS-QI-0073
+RUN_PROGRAM certtool.exe c:\ttesttools\data\cert_addapps1.txt c:\output.txt
+RUN_TEST_STEP 100 ttesttools GetTrustAppsStep c:\ttesttools\scripts\sec-filetokens-tools.ini certtool_addapps1
+END_TESTCASE SEC-FILETOKENS-QI-0073
+
+
+//! @SYMTestCaseID 	SEC-FILETOKENS-QI-0074
+//! @SYMTestCaseDesc 	Certool addapps command  
+//! 			(certtool_trust)
+//! @SYMTestPriority 	Medium
+//! @SYMTestActions  	call gettrust status to check the trust status for the certificate
+//! @SYMTestExpectedResults Query certstore via CUnifiedCertstore for the certificats trust status
+
+START_TESTCASE SEC-FILETOKENS-QI-0074
+RUN_TEST_STEP 100 ttesttools GetTrustStep c:\ttesttools\scripts\sec-filetokens-tools.ini certtool_addapps2
+END_TESTCASE SEC-FILETOKENS-QI-0074
+
+//! @SYMTestCaseID 	SEC-FILETOKENS-IMPROVEMENT-0001
+//! @SYMTestCaseDesc 	Certtool import command
+//! @SYMTestPriority 	Medium
+//! @SYMTestActions  	call Certtool to import a certificate with the deletable flag set to 'y'.
+//! @SYMTestExpectedResults Call certstore list via CUnifiedCertstore, the certificate is listed.
+
+START_TESTCASE SEC-FILETOKENS-IMPROVEMENT-0001
+RUN_PROGRAM certtool.exe c:\ttesttools\data\cert_importdeletable1.txt c:\output.txt
+RUN_TEST_STEP 100 ttesttools ListCertStep c:\ttesttools\scripts\sec-filetokens-tools.ini certtool_importdeletable1
+
+END_TESTCASE SEC-FILETOKENS-IMPROVEMENT-0001
+
+
+//! @SYMTestCaseID 	SEC-FILETOKENS-IMPROVEMENT-0002
+//! @SYMTestCaseDesc 	Certtool import command
+//! @SYMTestPriority 	Medium
+//! @SYMTestActions  	call Certtool to import a certificate with the deletable flag set to 'n'.
+//! @SYMTestExpectedResults Call certstore list via CUnifiedCertstore, the certificate is listed.
+
+START_TESTCASE SEC-FILETOKENS-IMPROVEMENT-0002
+RUN_PROGRAM certtool.exe c:\ttesttools\data\cert_importdeletable2.txt c:\output.txt
+RUN_TEST_STEP 100 ttesttools ListCertStep c:\ttesttools\scripts\sec-filetokens-tools.ini certtool_importdeletable2
+END_TESTCASE SEC-FILETOKENS-IMPROVEMENT-0002
+
+//! @SYMTestCaseID 	SEC-FILETOKENS-IMPROVEMENT-0003
+//! @SYMTestCaseDesc 	Certtool import command
+//! @SYMTestPriority 	Medium
+//! @SYMTestActions  	call Certtool to import a certificate with the deletable flag set to a garbage value.
+//! @SYMTestExpectedResults The expected output is "An error occured during certificate import."
+
+START_TESTCASE SEC-FILETOKENS-IMPROVEMENT-0003
+RUN_PROGRAM certtool.exe c:\ttesttools\data\cert_importdeletable3.txt c:\output.txt
+RUN_TEST_STEP 100 ttesttools ParseFileStep c:\ttesttools\scripts\sec-filetokens-tools.ini certtool_importdeletable3
+END_TESTCASE SEC-FILETOKENS-IMPROVEMENT-0003
+
+
+//! @SYMTestCaseID 	SEC-FILETOKENS-IMPROVEMENT-0004
+//! @SYMTestCaseDesc 	Certtool remove command
+//! @SYMTestPriority 	Medium
+//! @SYMTestActions  	Call certtool to remove the certificate imported with deletable set to 'y'
+//! @SYMTestExpectedResults The expected output is "Certificate removed successfully."
+
+START_TESTCASE SEC-FILETOKENS-IMPROVEMENT-0004
+RUN_PROGRAM certtool.exe c:\ttesttools\data\cert_removedeletable1.txt c:\output.txt
+RUN_TEST_STEP 100 ttesttools ParseFileStep c:\ttesttools\scripts\sec-filetokens-tools.ini certtool_removedeletable1
+END_TESTCASE SEC-FILETOKENS-IMPROVEMENT-0004
+
+
+//! @SYMTestCaseID 	SEC-FILETOKENS-IMPROVEMENT-0005
+//! @SYMTestCaseDesc 	Certtool remove command
+//! @SYMTestPriority 	Medium
+//! @SYMTestActions  	Call certtool to remove the certificate imported with deletable set to 'n'
+//! @SYMTestExpectedResults "The expected output is Certificate removal failed."
+
+START_TESTCASE SEC-FILETOKENS-IMPROVEMENT-0005
+RUN_PROGRAM certtool.exe c:\ttesttools\data\cert_removedeletable2.txt c:\output.txt
+RUN_TEST_STEP 100 ttesttools ParseFileStep c:\ttesttools\scripts\sec-filetokens-tools.ini certtool_removedeletable2
+END_TESTCASE SEC-FILETOKENS-IMPROVEMENT-0005
+
+
--- a/cryptoservices/filebasedcertificateandkeystores/test/ttesttools/ttesttoolstep.cpp	Sat Dec 05 21:34:52 2009 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/ttesttools/ttesttoolstep.cpp	Sat Dec 05 21:41:51 2009 +0000
@@ -611,7 +611,7 @@
 	
 		if (iExpectedError.CompareF(*actual16) != KErrNone)
 			{
-			INFO_PRINTF1(_L("Exptected Error is Different from Actual"));
+			INFO_PRINTF1(_L("Expected Error is Different from Actual"));
 			SetTestStepResult(EFail);
 			}
 		CleanupStack::PopAndDestroy(3, fileContents); //actual16, actualError, fileContents
--- a/package_definition.xml	Sat Dec 05 21:34:52 2009 +0000
+++ b/package_definition.xml	Sat Dec 05 21:41:51 2009 +0000
@@ -1,6 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <SystemDefinition schema="3.0.0">
   <package id="security" name="OS Security" levels="physical-abstraction plugins libraries management services utilities">
+	<collection id="authenticationservices" name="Authentication Services" level="utilities">
+      <component id="authenticationserver" name="Authentication Server" introduced="tb92" purpose="optional">
+        <unit bldFile="authenticationservices/authenticationserver/group" mrp="authenticationservices/authenticationserver/group/security_authserver.mrp"/>
+      </component>
+    </collection>
     <collection id="authorisation" name="Authorisation" level="utilities">
       <component id="userpromptservice" name="User Prompt Service" introduced="tb92" purpose="mandatory">
         <unit bldFile="authorisation/userpromptservice/group" mrp="authorisation/userpromptservice/group/security_ups.mrp"/>
@@ -32,8 +37,8 @@
       <component id="securityutils" name="Security Utils" introduced="8.0" purpose="optional">
         <unit bldFile="cryptomgmtlibs/securityutils/group" mrp="cryptomgmtlibs/securityutils/group/security_common.mrp"/>
       </component>
-      <component id="securitytestfw" name="Security Test Framework" deprecated="tb92" introduced="7.0" purpose="development">
-        <unit mrp="cryptomgmtlibs/securitytestfw/group/security_testframework.mrp"/>
+      <component id="securitytestfw" name="Security Test Framework" deprecated="tb92" introduced="7.0" purpose="development" filter="test">
+        <unit mrp="cryptomgmtlibs/securitytestfw/group/security_testframework.mrp" bldFile="cryptomgmtlibs/securitytestfw/group"/>
       </component>
       <component id="securitydocs" name="Security Documentation" purpose="development" class="doc">
         <unit mrp="cryptomgmtlibs/securitydocs/security_documentation.mrp"/>
--- a/securityanddataprivacytools/securitytools/certapp/GNUmakefile	Sat Dec 05 21:34:52 2009 +0000
+++ b/securityanddataprivacytools/securitytools/certapp/GNUmakefile	Sat Dec 05 21:41:51 2009 +0000
@@ -10,7 +10,7 @@
 #
 # Contributors:
 #
-# Description:
+# Description: 
 #
 
 include GNUmakefile.inc
--- a/securityanddataprivacytools/securitytools/certapp/GNUmakefile.inc	Sat Dec 05 21:34:52 2009 +0000
+++ b/securityanddataprivacytools/securitytools/certapp/GNUmakefile.inc	Sat Dec 05 21:41:51 2009 +0000
@@ -1,4 +1,18 @@
-# Copyright (c) Symbian Software Ltd 2008.  All rights reserved.
+# Copyright (c) 2008-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:
+#
+
 CPPFLAGS=-MMD -D_DEBUG -D_UNICODE -D__LINUX__ -D__TOOLS2_LINUX__ $(INC)
 CXXFLAGS=-g -Wall -W -fstrict-aliasing
 CFLAGS=-g -Wall -W -fstrict-aliasing
--- a/securityanddataprivacytools/securitytools/certapp/api/GNUmakefile	Sat Dec 05 21:34:52 2009 +0000
+++ b/securityanddataprivacytools/securitytools/certapp/api/GNUmakefile	Sat Dec 05 21:41:51 2009 +0000
@@ -1,4 +1,4 @@
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 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"
@@ -10,8 +10,7 @@
 #
 # Contributors:
 #
-# Description:
-#
+# Description: 
 
 include ../GNUmakefile.inc
 TARGETLIB=libcertapp-api.a
--- a/securityanddataprivacytools/securitytools/certapp/encdec/GNUmakefile	Sat Dec 05 21:34:52 2009 +0000
+++ b/securityanddataprivacytools/securitytools/certapp/encdec/GNUmakefile	Sat Dec 05 21:41:51 2009 +0000
@@ -1,4 +1,4 @@
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 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"
@@ -10,8 +10,7 @@
 #
 # Contributors:
 #
-# Description:
-#
+# Description: 
 
 include ../GNUmakefile.inc
 TARGETLIB=encdec.a
--- a/securityanddataprivacytools/securitytools/certapp/store--/GNUmakefile	Sat Dec 05 21:34:52 2009 +0000
+++ b/securityanddataprivacytools/securitytools/certapp/store--/GNUmakefile	Sat Dec 05 21:41:51 2009 +0000
@@ -1,4 +1,4 @@
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 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"
@@ -10,8 +10,7 @@
 #
 # Contributors:
 #
-# Description:
-#
+# Description: 
 
 include ../GNUmakefile.inc
 TARGETLIB=	store--.a
--- a/securityanddataprivacytools/securitytools/certapp/test/GNUmakefile	Sat Dec 05 21:34:52 2009 +0000
+++ b/securityanddataprivacytools/securitytools/certapp/test/GNUmakefile	Sat Dec 05 21:41:51 2009 +0000
@@ -1,4 +1,4 @@
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 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"
@@ -10,8 +10,7 @@
 #
 # Contributors:
 #
-# Description:
-#
+# Description: 
 
 include ../GNUmakefile.inc
 SUBDIRS= tcertapp
--- a/securityanddataprivacytools/securitytools/certapp/test/tcertapp/GNUmakefile	Sat Dec 05 21:34:52 2009 +0000
+++ b/securityanddataprivacytools/securitytools/certapp/test/tcertapp/GNUmakefile	Sat Dec 05 21:41:51 2009 +0000
@@ -1,4 +1,4 @@
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 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"
@@ -10,8 +10,7 @@
 #
 # Contributors:
 #
-# Description:
-#
+# Description: 
 
 include ../../GNUmakefile.inc
 TARGET=tcertapp
--- a/securityanddataprivacytools/securitytools/certapp/utils/GNUmakefile	Sat Dec 05 21:34:52 2009 +0000
+++ b/securityanddataprivacytools/securitytools/certapp/utils/GNUmakefile	Sat Dec 05 21:41:51 2009 +0000
@@ -10,7 +10,7 @@
 #
 # Contributors:
 #
-# Description:
+# Description: 
 #
 
 include ../GNUmakefile.inc
Binary file securityanddataprivacytools/securitytools/documentation/SGL.GT0379.357_CR1392_UserGuide.doc has changed