cpsecplugins/cpadvancedsecplugin/src/cpcertdetailview.cpp
changeset 37 7bad16cccaca
parent 26 aad866c37519
equal deleted inserted replaced
26:aad866c37519 37:7bad16cccaca
    43 #include <HbGroupBox>
    43 #include <HbGroupBox>
    44 #include <hbpushbutton.h>
    44 #include <hbpushbutton.h>
    45 #include <hbdataform.h>
    45 #include <hbdataform.h>
    46 #include <hbdataformmodel.h>
    46 #include <hbdataformmodel.h>
    47 #include <hbdataformmodelitem.h>
    47 #include <hbdataformmodelitem.h>
    48 
    48 #include <../../inc/cpsecplugins.h>
    49 #include "cpcertdetailview.h"
    49 #include "cpcertdetailview.h"
    50 #include "cpcertview.h"
    50 #include "cpcertview.h"
    51 #include "cpcertdatacontainer.h"
    51 #include "cpcertdatacontainer.h"
    52 #include "cpcertmanuisyncwrapper.h"
    52 #include "cpcertmanuisyncwrapper.h"
    53 #include "../../../pkiutilities/DeviceToken/Inc/TrustedSitesStore.h"
    53 #include "../../../pkiutilities/DeviceToken/Inc/TrustedSitesStore.h"
   115 CpCertDetailView::~CpCertDetailView()
   115 CpCertDetailView::~CpCertDetailView()
   116 	{}
   116 	{}
   117 
   117 
   118 void CpCertDetailView::viewCertificateDetailsL( TInt aIndex, CpCertView::TCertificateViews aType )
   118 void CpCertDetailView::viewCertificateDetailsL( TInt aIndex, CpCertView::TCertificateViews aType )
   119 	{
   119 	{
   120 	
   120 	RDEBUG("0", 0);
   121 	QGraphicsLinearLayout *layout = q_check_ptr(new QGraphicsLinearLayout(Qt::Vertical));	
   121 	QGraphicsLinearLayout *layout = q_check_ptr(new QGraphicsLinearLayout(Qt::Vertical));	
   122 	setLayout(layout);
   122 	setLayout(layout);
   123 	
   123 	
   124 	HbListWidget* mCertDetails = q_check_ptr(new HbListWidget(this));
   124 	HbListWidget* mCertDetails = q_check_ptr(new HbListWidget(this));
   125 		
   125 		
   149         }
   149         }
   150     else
   150     else
   151         {
   151         {
   152 		addLabel(*entry, *mCertDetails);
   152 		addLabel(*entry, *mCertDetails);
   153         }
   153         }
   154 
   154 		RDEBUG("0", 0);
   155     // certificate issuer and owner
   155     // certificate issuer and owner
   156     if( certificateFormat == EX509Certificate )
   156     if( certificateFormat == EX509Certificate )
   157         {
   157         {
   158 		addIssuerL(*details, *mCertDetails);
   158 		addIssuerL(*details, *mCertDetails);
   159 		addSubjectL(*details, *mCertDetails);
   159 		addSubjectL(*details, *mCertDetails);
   166     if(( aType == CpCertView::EPersonalView ) || ( aType == CpCertView::EDeviceView ))
   166     if(( aType == CpCertView::EPersonalView ) || ( aType == CpCertView::EDeviceView ))
   167         {
   167         {
   168 		TKeyUsagePKCS15 usage = keyUsageAndLocationL( *entry, &keyLocation );
   168 		TKeyUsagePKCS15 usage = keyUsageAndLocationL( *entry, &keyLocation );
   169         addCertUsage(usage, *mCertDetails);		
   169         addCertUsage(usage, *mCertDetails);		
   170         }
   170         }
   171 
   171 		RDEBUG("0", 0);
   172     if( certificateFormat == EX509Certificate )
   172     if( certificateFormat == EX509Certificate )
   173         {
   173         {
   174 		addValidityPeriod( *details, *mCertDetails );                
   174 		addValidityPeriod( *details, *mCertDetails );                
   175         TUid certLoc;
   175         TUid certLoc;
   176         certLoc.iUid = entry->Token().TokenType().Type().iUid;
   176         certLoc.iUid = entry->Token().TokenType().Type().iUid;
   203         }
   203         }
   204     else
   204     else
   205         {
   205         {
   206         // SetUrlCertAlgorihm()
   206         // SetUrlCertAlgorihm()
   207         }
   207         }
   208 
   208 		RDEBUG("0", 0);
   209     if( certificateFormat != EX509CertificateUrl )
   209     if( certificateFormat != EX509CertificateUrl )
   210         {
   210         {
   211         CleanupStack::PopAndDestroy( details );
   211         CleanupStack::PopAndDestroy( details );
   212         }
   212         }
   213     else
   213     else
   218     layout->addItem(mCertDetails);
   218     layout->addItem(mCertDetails);
   219     }
   219     }
   220 
   220 
   221 const CCTCertInfo* CpCertDetailView::certInfo( TInt index, CpCertView::TCertificateViews certView )
   221 const CCTCertInfo* CpCertDetailView::certInfo( TInt index, CpCertView::TCertificateViews certView )
   222 	{
   222 	{
       
   223 	RDEBUG("0", 0);
   223 	const CCTCertInfo* certinfo = NULL;
   224 	const CCTCertInfo* certinfo = NULL;
   224 	
   225 	
   225 	if( certView == CpCertView::EAuthorityView )
   226 	if( certView == CpCertView::EAuthorityView )
   226 		{
   227 		{
   227 		certinfo = ( mCertDataContainer.iCALabelEntries )[ index ]->iCAEntry;
   228 		certinfo = ( mCertDataContainer.iCALabelEntries )[ index ]->iCAEntry;
   241 	return certinfo;
   242 	return certinfo;
   242 	}
   243 	}
   243 
   244 
   244 void CpCertDetailView::addTrustedSitesL( const CCertificate& certDetails, HbListWidget& certDisplayDetails )
   245 void CpCertDetailView::addTrustedSitesL( const CCertificate& certDetails, HbListWidget& certDisplayDetails )
   245 	{
   246 	{
       
   247 	RDEBUG("0", 0);
   246 	CTrustSitesStore* trustedSitesStore = CTrustSitesStore::NewL();
   248 	CTrustSitesStore* trustedSitesStore = CTrustSitesStore::NewL();
   247 	CleanupStack::PushL( trustedSitesStore );
   249 	CleanupStack::PushL( trustedSitesStore );
   248 
   250 
   249 	RPointerArray<HBufC> trustedSites;
   251 	RPointerArray<HBufC> trustedSites;
   250 	CleanupResetAndDestroyPushL( trustedSites );
   252 	CleanupResetAndDestroyPushL( trustedSites );
   269 
   271 
   270 	}
   272 	}
   271 
   273 
   272 void CpCertDetailView::addLabel( const CCTCertInfo& aCertInfo, HbListWidget& certDisplayDetails )
   274 void CpCertDetailView::addLabel( const CCTCertInfo& aCertInfo, HbListWidget& certDisplayDetails )
   273 	{
   275 	{
       
   276 	RDEBUG("0", 0);
   274 	QString sLabel("Label:");
   277 	QString sLabel("Label:");
   275 	QString sLabelDetails = "(No label)"; 
   278 	QString sLabelDetails = "(No label)"; 
   276 	if(aCertInfo.Label().Length()  != 0)
   279 	if(aCertInfo.Label().Length()  != 0)
   277 		{
   280 		{
   278 		sLabelDetails = QString((QChar*)(aCertInfo.Label().Ptr()),aCertInfo.Label().Length());
   281 		sLabelDetails = QString((QChar*)(aCertInfo.Label().Ptr()),aCertInfo.Label().Length());
   299 	}
   302 	}
   300 
   303 
   301 void CpCertDetailView::addSubjectL( const CCertificate& aCertDetails, 
   304 void CpCertDetailView::addSubjectL( const CCertificate& aCertDetails, 
   302 									HbListWidget& certDisplayDetails )
   305 									HbListWidget& certDisplayDetails )
   303 	{
   306 	{
       
   307 	RDEBUG("0", 0);
   304 	HBufC* subject = NULL;
   308 	HBufC* subject = NULL;
   305 	X509CertNameParser::SubjectFullNameL( (CX509Certificate&)aCertDetails, subject );
   309 	X509CertNameParser::SubjectFullNameL( (CX509Certificate&)aCertDetails, subject );
   306 	CleanupStack::PushL( subject );
   310 	CleanupStack::PushL( subject );
   307 
   311 
   308 	QString sSubject = "Subject:";
   312 	QString sSubject = "Subject:";
   317 	CleanupStack::PopAndDestroy( subject );
   321 	CleanupStack::PopAndDestroy( subject );
   318 	}
   322 	}
   319 
   323 
   320 void CpCertDetailView::addCertUsage( TKeyUsagePKCS15 usage, HbListWidget& certDisplayDetails )
   324 void CpCertDetailView::addCertUsage( TKeyUsagePKCS15 usage, HbListWidget& certDisplayDetails )
   321 	{
   325 	{
       
   326 	RDEBUG("0", 0);
   322 	QString strUsage;
   327 	QString strUsage;
   323 	switch( usage )
   328 	switch( usage )
   324 		{
   329 		{
   325 		case EPKCS15UsageSignSignRecover:
   330 		case EPKCS15UsageSignSignRecover:
   326 		case EPKCS15UsageSignDecrypt:
   331 		case EPKCS15UsageSignDecrypt:
   339 
   344 
   340 
   345 
   341 void CpCertDetailView::addValidityPeriod( 	const CCertificate& aCertDetails, 
   346 void CpCertDetailView::addValidityPeriod( 	const CCertificate& aCertDetails, 
   342 											HbListWidget& certDisplayDetails)
   347 											HbListWidget& certDisplayDetails)
   343 	{
   348 	{
       
   349 	RDEBUG("0", 0);
   344 	// Certificate validity period
   350 	// Certificate validity period
   345 	// Hometime's offset to UTC
   351 	// Hometime's offset to UTC
   346 	TLocale locale;
   352 	TLocale locale;
   347 	TTimeIntervalSeconds offSet = locale.UniversalTimeOffset();
   353 	TTimeIntervalSeconds offSet = locale.UniversalTimeOffset();
   348 	
   354 	
   373 		
   379 		
   374 	}
   380 	}
   375 
   381 
   376 void CpCertDetailView::setURLLocation( HBufC8& urlDetails, HbListWidget& certDisplayDetails )
   382 void CpCertDetailView::setURLLocation( HBufC8& urlDetails, HbListWidget& certDisplayDetails )
   377 	{
   383 	{
       
   384 	RDEBUG("0", 0);
   378 	TPtr8 urlPtr = urlDetails.Des();
   385 	TPtr8 urlPtr = urlDetails.Des();
   379 		
   386 		
   380 	QString certUrl = "Location:"; 
   387 	QString certUrl = "Location:"; 
   381 	QString certURLDetail = "(Not defined)";
   388 	QString certURLDetail = "(Not defined)";
   382 	TInt length = urlPtr.Length();
   389 	TInt length = urlPtr.Length();
   387 	addToListWidget(certDisplayDetails, certUrl, certURLDetail);
   394 	addToListWidget(certDisplayDetails, certUrl, certURLDetail);
   388 	}
   395 	}
   389 
   396 
   390 void CpCertDetailView::addCertFormat( TCertificateFormat aCertFormat, HbListWidget& certDisplayDetails )
   397 void CpCertDetailView::addCertFormat( TCertificateFormat aCertFormat, HbListWidget& certDisplayDetails )
   391 	{
   398 	{
       
   399 	RDEBUG("0", 0);
   392 	// certificate format
   400 	// certificate format
   393 	QString certFormat = "Certificate format:";
   401 	QString certFormat = "Certificate format:";
   394 	QString certFormatDetails = "(Not defined)";
   402 	QString certFormatDetails = "(Not defined)";
   395 	if( aCertFormat == EX509Certificate || aCertFormat == EX509CertificateUrl)
   403 	if( aCertFormat == EX509Certificate || aCertFormat == EX509CertificateUrl)
   396 		{
   404 		{
   400 	}
   408 	}
   401 
   409 
   402 void CpCertDetailView::addAlgoDetails( 	const CCertificate& certificate, 
   410 void CpCertDetailView::addAlgoDetails( 	const CCertificate& certificate, 
   403 										HbListWidget& certDisplayDetails )
   411 										HbListWidget& certDisplayDetails )
   404 	{
   412 	{
       
   413 	RDEBUG("0", 0);
   405 	// certificate algorithms
   414 	// certificate algorithms
   406 	QString sDgstAlgoDetails = "Unknown";
   415 	QString sDgstAlgoDetails = "Unknown";
   407 	// digest algorithm
   416 	// digest algorithm
   408 	TAlgorithmId algorithmId = certificate.SigningAlgorithm().DigestAlgorithm().Algorithm();
   417 	TAlgorithmId algorithmId = certificate.SigningAlgorithm().DigestAlgorithm().Algorithm();
   409 	switch( algorithmId )
   418 	switch( algorithmId )
   438 	}
   447 	}
   439 
   448 
   440 void CpCertDetailView::addSerialNo( const CCertificate& certificate, 
   449 void CpCertDetailView::addSerialNo( const CCertificate& certificate, 
   441 									HbListWidget& certDisplayDetails )
   450 									HbListWidget& certDisplayDetails )
   442 	{
   451 	{
       
   452 	RDEBUG("0", 0);
   443 	// certificate serial number
   453 	// certificate serial number
   444 	QString sCertSerialNo("Serial number:");
   454 	QString sCertSerialNo("Serial number:");
   445 	QString sCertSerialNoDetails = 0;
   455 	QString sCertSerialNoDetails = 0;
   446 	TPtrC8 serialNumber = certificate.SerialNumber();
   456 	TPtrC8 serialNumber = certificate.SerialNumber();
   447 	TBuf<KMaxLengthTextSerialNumberFormatting> buf2;
   457 	TBuf<KMaxLengthTextSerialNumberFormatting> buf2;
   455 	}
   465 	}
   456 
   466 
   457 void CpCertDetailView::addFingerprint(	const CCertificate& certificate, 
   467 void CpCertDetailView::addFingerprint(	const CCertificate& certificate, 
   458 										HbListWidget& certDisplayDetails)
   468 										HbListWidget& certDisplayDetails)
   459 	{
   469 	{
       
   470 	RDEBUG("0", 0);
   460 	// certificate fingerprint SHA-1
   471 	// certificate fingerprint SHA-1
   461 	QString sSha1("Fingerprint (SHA1):");
   472 	QString sSha1("Fingerprint (SHA1):");
   462 	TPtrC8 sha1_fingerprint = certificate.Fingerprint();
   473 	TPtrC8 sha1_fingerprint = certificate.Fingerprint();
   463 	HBufC* finalSha1 = NULL;
   474 	HBufC* finalSha1 = NULL;
   464 	QT_TRAP_THROWING(	 finalSha1 = HBufC::NewLC(100));
   475 	QString sSha1Details = NULL;
   465 	TPtr finalShaPtr = finalSha1->Des();
   476 	
   466 	divideIntoBlocks( sha1_fingerprint, finalShaPtr );
   477 	QT_TRAP_THROWING
   467 	QString sSha1Details = QString( (QChar*)finalShaPtr.Ptr(), finalShaPtr.Length() );
   478 		(	 
   468 	CleanupStack::PopAndDestroy(finalSha1);
   479 		finalSha1 = HBufC::NewLC(100);
       
   480 		TPtr finalShaPtr = finalSha1->Des();
       
   481 		divideIntoBlocks( sha1_fingerprint, finalShaPtr );
       
   482 		sSha1Details = QString( (QChar*)finalShaPtr.Ptr(), finalShaPtr.Length() );
       
   483 		CleanupStack::PopAndDestroy(finalSha1);
       
   484 		)
   469 	
   485 	
   470 	addToListWidget(certDisplayDetails, sSha1, sSha1Details);
   486 	addToListWidget(certDisplayDetails, sSha1, sSha1Details);
   471 		
   487 		
   472 	// certificate fingerprint MD5
   488 	// certificate fingerprint MD5
   473 	QString sMd5("Fingerprint (MD5):");
   489 	QString sMd5("Fingerprint (MD5):");
   474 	CMD5* md5= NULL;
   490 	CMD5* md5= NULL;
   475 	QT_TRAP_THROWING(	 md5 = CMD5::NewL());
   491 	QT_TRAP_THROWING
   476 	QT_TRAP_THROWING(CleanupStack::PushL( md5 ));
   492 		(	 
   477 	TBuf8<20> fingerprint = md5->Hash( certificate.Encoding() );
   493 		md5 = CMD5::NewL();
   478 	CleanupStack::PopAndDestroy( md5 );
   494 		CleanupStack::PushL( md5 );
   479 	HBufC* finalMd5 = NULL;
   495 		TBuf8<20> fingerprint = md5->Hash( certificate.Encoding() );
   480 	QT_TRAP_THROWING(	finalMd5 = HBufC::NewLC(100));
   496 		CleanupStack::PopAndDestroy( md5 );
   481 	TPtr finalMd5Ptr = finalMd5->Des();
   497 		HBufC* finalMd5 = NULL;
   482 	divideIntoBlocks( fingerprint, finalMd5Ptr );
   498 		finalMd5 = HBufC::NewLC(100);
   483 	QString sMd5Details = QString( (QChar*)finalMd5Ptr.Ptr(), finalMd5Ptr.Length());
   499 		TPtr finalMd5Ptr = finalMd5->Des();
   484 	CleanupStack::PopAndDestroy(finalMd5);
   500 		divideIntoBlocks( fingerprint, finalMd5Ptr );
   485 	addToListWidget(certDisplayDetails, sMd5, sMd5Details);
   501 		QString sMd5Details = QString( (QChar*)finalMd5Ptr.Ptr(), finalMd5Ptr.Length());
       
   502 		CleanupStack::PopAndDestroy(finalMd5);
       
   503 		addToListWidget(certDisplayDetails, sMd5, sMd5Details);
       
   504 		)
   486 	}
   505 	}
   487 
   506 
   488 void CpCertDetailView::addPublicKeyDetailsL(	const CCertificate& certificate, 
   507 void CpCertDetailView::addPublicKeyDetailsL(	const CCertificate& certificate, 
   489 											HbListWidget& certDisplayDetails )
   508 											HbListWidget& certDisplayDetails )
   490 	{
   509 	{
       
   510 	RDEBUG("0", 0);
   491 	// Public key
   511 	// Public key
   492     // Should look like: "Public key (%0U %1N bit):"
   512     // Should look like: "Public key (%0U %1N bit):"
   493         
   513         
   494 	QString sPublicKey("Public key ("); // %S %d bits):");
   514 	QString sPublicKey("Public key ("); // %S %d bits):");
   495 	sPublicKey.append(asymmetricAlgoId(certificate));
   515 	sPublicKey.append(asymmetricAlgoId(certificate));
   572 	addToListWidget(certDisplayDetails, sPublicKey, sPublicKeyDetails);
   592 	addToListWidget(certDisplayDetails, sPublicKey, sPublicKeyDetails);
   573 	}
   593 	}
   574 
   594 
   575 QString CpCertDetailView::asymmetricAlgoId( const CCertificate& certificate )
   595 QString CpCertDetailView::asymmetricAlgoId( const CCertificate& certificate )
   576 	{
   596 	{
       
   597 	RDEBUG("0", 0);
   577 	QString sAsymmetricAlgoId = 0;
   598 	QString sAsymmetricAlgoId = 0;
   578 	// public-key algorithm
   599 	// public-key algorithm
   579 	TAlgorithmId algorithmId = certificate.SigningAlgorithm().AsymmetricAlgorithm().Algorithm();
   600 	TAlgorithmId algorithmId = certificate.SigningAlgorithm().AsymmetricAlgorithm().Algorithm();
   580 	switch( algorithmId )
   601 	switch( algorithmId )
   581 		{
   602 		{
   623 	}
   644 	}
   624 
   645 
   625 void CpCertDetailView::validateCertificateL(
   646 void CpCertDetailView::validateCertificateL(
   626     TInt aIndex, const CCertificate& certDetails, const CCTCertInfo& aCertInfo, CpCertView::TCertificateViews aType )
   647     TInt aIndex, const CCertificate& certDetails, const CCTCertInfo& aCertInfo, CpCertView::TCertificateViews aType )
   627     {
   648     {
   628     
   649     RDEBUG("0", 0);
   629     TInt poppableItems = 0;
   650     TInt poppableItems = 0;
   630     // Check allways first the validity period
   651     // Check allways first the validity period
   631     // Show Expired/Not yet valid notes
   652     // Show Expired/Not yet valid notes
   632     const CValidityPeriod& validityPeriod = certDetails.ValidityPeriod();
   653     const CValidityPeriod& validityPeriod = certDetails.ValidityPeriod();
   633     const TTime& startValue = validityPeriod.Start();
   654     const TTime& startValue = validityPeriod.Start();
   736     CleanupStack::PopAndDestroy( poppableItems );
   757     CleanupStack::PopAndDestroy( poppableItems );
   737     }
   758     }
   738 
   759 
   739 CArrayFixFlat<TValidationError>* CpCertDetailView::validateX509CertificateL( const CX509Certificate& certDetails )
   760 CArrayFixFlat<TValidationError>* CpCertDetailView::validateX509CertificateL( const CX509Certificate& certDetails )
   740     {
   761     {
       
   762     RDEBUG("0", 0);
   741     TInt poppableItems = 0;
   763     TInt poppableItems = 0;
   742     CArrayFixFlat<TValidationError>* validationError =
   764     CArrayFixFlat<TValidationError>* validationError =
   743         new ( ELeave ) CArrayFixFlat<TValidationError>( 1 );
   765         new ( ELeave ) CArrayFixFlat<TValidationError>( 1 );
   744     CleanupStack::PushL( validationError ); //This is returned, so it isn't destroyed at the end.
   766     CleanupStack::PushL( validationError ); //This is returned, so it isn't destroyed at the end.
   745         
   767         
   772 
   794 
   773 TKeyUsagePKCS15 CpCertDetailView::keyUsageAndLocationL( const CCTCertInfo& certEntry,
   795 TKeyUsagePKCS15 CpCertDetailView::keyUsageAndLocationL( const CCTCertInfo& certEntry,
   774                                                         TUid* keyLocation )
   796                                                         TUid* keyLocation )
   775     {
   797     {
   776     TKeyUsagePKCS15 keyUsage;
   798     TKeyUsagePKCS15 keyUsage;
   777 
   799 		RDEBUG("0", 0);
   778     // Check whether we have key for this certificate
   800     // Check whether we have key for this certificate
   779     RMPointerArray<CCTKeyInfo> keyEntry;
   801     RMPointerArray<CCTKeyInfo> keyEntry;
   780     TCTKeyAttributeFilter filter;
   802     TCTKeyAttributeFilter filter;
   781     filter.iKeyId = certEntry.SubjectKeyId();
   803     filter.iKeyId = certEntry.SubjectKeyId();
   782 
   804 
   804 // Adds certificate/private key's location info to certificate details
   826 // Adds certificate/private key's location info to certificate details
   805 // ---------------------------------------------------------
   827 // ---------------------------------------------------------
   806 //
   828 //
   807 void CpCertDetailView::setLocationInfo(TBool certificate, TUid locUid, HbListWidget& certDisplayDetails)
   829 void CpCertDetailView::setLocationInfo(TBool certificate, TUid locUid, HbListWidget& certDisplayDetails)
   808     {
   830     {
   809     
   831     RDEBUG("0", 0);
   810     QString locationDetails = "(Not defined)";
   832     QString locationDetails = "(Not defined)";
   811 
   833 
   812     switch ( locUid.iUid )
   834     switch ( locUid.iUid )
   813         {
   835         {
   814         case KFileCertStoreUid:
   836         case KFileCertStoreUid:
   845 // CCertManUICertificateHelper::divideIntoBlocks
   867 // CCertManUICertificateHelper::divideIntoBlocks
   846 // ---------------------------------------------------------
   868 // ---------------------------------------------------------
   847 //
   869 //
   848 void CpCertDetailView::divideIntoBlocks( const TDesC8& input, TPtr& output )
   870 void CpCertDetailView::divideIntoBlocks( const TDesC8& input, TPtr& output )
   849     {
   871     {
       
   872     RDEBUG("0", 0);
   850     const TInt KBlockLength = 2;
   873     const TInt KBlockLength = 2;
   851     TInt blockIndex = 0;
   874     TInt blockIndex = 0;
   852     for ( TInt j = 0 ; j < input.Length() ; j++ )
   875     for ( TInt j = 0 ; j < input.Length() ; j++ )
   853         {
   876         {
   854         if ( blockIndex == KBlockLength )
   877         if ( blockIndex == KBlockLength )