xmlsecurityengine/xmlseccertman/src/xmlsecmsymbiancertstore.cpp
changeset 0 e35f40988205
equal deleted inserted replaced
-1:000000000000 0:e35f40988205
       
     1 /*
       
     2 
       
     3 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
       
     4 
       
     5 * All rights reserved.
       
     6 
       
     7 * This component and the accompanying materials are made available
       
     8 
       
     9 * under the terms of "Eclipse Public License v1.0"
       
    10 
       
    11 * which accompanies this distribution, and is available
       
    12 
       
    13 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
    14 
       
    15 *
       
    16 
       
    17 * Initial Contributors:
       
    18 
       
    19 * Nokia Corporation - initial contribution.
       
    20 
       
    21 *
       
    22 
       
    23 * Contributors:
       
    24 
       
    25 *
       
    26 
       
    27 * Description: An XmlSec interface to the Symbian Unified Certificate Store       
       
    28 
       
    29 *
       
    30 
       
    31 */
       
    32 
       
    33 
       
    34 
       
    35 
       
    36 
       
    37 #include <mctcertstore.h>
       
    38 
       
    39 
       
    40 
       
    41 #include <x509cert.h>
       
    42 
       
    43 
       
    44 
       
    45 #include <charconv.h>
       
    46 
       
    47 
       
    48 
       
    49 #include <utf.h>
       
    50 
       
    51 
       
    52 
       
    53 
       
    54 
       
    55 
       
    56 
       
    57 #include "xmlsecmsymbiancertstore.h"
       
    58 
       
    59 
       
    60 
       
    61 // -----------------------------------------------------------------------------
       
    62 
       
    63 
       
    64 
       
    65 // FindMatchedCert 
       
    66 
       
    67 
       
    68 
       
    69 // Find the cert that matched iCertLabel from iCerts. 
       
    70 
       
    71 
       
    72 
       
    73 // The cert found will be stored in iCert.
       
    74 
       
    75 
       
    76 
       
    77 // -----------------------------------------------------------------------------
       
    78 
       
    79 
       
    80 
       
    81 //
       
    82 
       
    83 
       
    84 
       
    85 void CSymbianCertStore::FindMatchedCert()
       
    86 
       
    87 
       
    88 
       
    89     {
       
    90 
       
    91 
       
    92 
       
    93     TInt numCert = iCerts.Count();
       
    94 
       
    95 
       
    96 
       
    97     // Reset iCert
       
    98 
       
    99 
       
   100 
       
   101     if (iCert)
       
   102 
       
   103 
       
   104 
       
   105         {
       
   106 
       
   107 
       
   108 
       
   109         //delete iCert;	
       
   110 
       
   111 
       
   112 
       
   113         iCert->Release();
       
   114 
       
   115 
       
   116 
       
   117         iCert = NULL;
       
   118 
       
   119 
       
   120 
       
   121         }	
       
   122 
       
   123 
       
   124 
       
   125         // No label to be found
       
   126 
       
   127 
       
   128 
       
   129         if (!iCertLabel)
       
   130 
       
   131 
       
   132 
       
   133             return;			
       
   134 
       
   135 
       
   136 
       
   137         for (int i=0;i<numCert;i++)
       
   138 
       
   139 
       
   140 
       
   141             {
       
   142 
       
   143 
       
   144 
       
   145             CCTCertInfo* cert = (CCTCertInfo *)iCerts[i];
       
   146 
       
   147 
       
   148 
       
   149             if (iCertLabel->Compare(cert->Label()) == 0)
       
   150 
       
   151 
       
   152 
       
   153                 {
       
   154 
       
   155 
       
   156 
       
   157                 iCert = cert;
       
   158 
       
   159 
       
   160 
       
   161                 }			
       
   162 
       
   163 
       
   164 
       
   165             }	
       
   166 
       
   167 
       
   168 
       
   169             ResetAndDestroyCertsArray();     //iCerts
       
   170 
       
   171 
       
   172 
       
   173     }
       
   174 
       
   175 
       
   176 
       
   177     
       
   178 
       
   179 
       
   180 
       
   181 // ---------------------------------------------------------------------------
       
   182 
       
   183 
       
   184 
       
   185 // Constructor
       
   186 
       
   187 
       
   188 
       
   189 // ---------------------------------------------------------------------------
       
   190 
       
   191 
       
   192 
       
   193 // 
       
   194 
       
   195 
       
   196 
       
   197 CSymbianCertStore::CSymbianCertStore()
       
   198 
       
   199 
       
   200 
       
   201 :	CActive( EPriorityStandard ),
       
   202 
       
   203 
       
   204 
       
   205 	iState( EUnitialized )
       
   206 
       
   207 
       
   208 
       
   209     {
       
   210 
       
   211 
       
   212 
       
   213     }    
       
   214 
       
   215 
       
   216 
       
   217     
       
   218 
       
   219 
       
   220 
       
   221 // ---------------------------------------------------------------------------
       
   222 
       
   223 
       
   224 
       
   225 // Second phase constructor
       
   226 
       
   227 
       
   228 
       
   229 // ---------------------------------------------------------------------------
       
   230 
       
   231 
       
   232 
       
   233 // 
       
   234 
       
   235 
       
   236 
       
   237 void CSymbianCertStore::ConstructL()
       
   238 
       
   239 
       
   240 
       
   241     {
       
   242 
       
   243 
       
   244 
       
   245     User::LeaveIfError(iFs.Connect()); 
       
   246 
       
   247 
       
   248 
       
   249     CActiveScheduler::Add(this);
       
   250 
       
   251 
       
   252 
       
   253     }
       
   254 
       
   255 
       
   256 
       
   257     
       
   258 
       
   259 
       
   260 
       
   261 // ---------------------------------------------------------------------------
       
   262 
       
   263 
       
   264 
       
   265 // Two phase constructor
       
   266 
       
   267 
       
   268 
       
   269 // ---------------------------------------------------------------------------
       
   270 
       
   271 
       
   272 
       
   273 //   
       
   274 
       
   275 
       
   276 
       
   277 EXPORT_C CSymbianCertStore* CSymbianCertStore::NewL()
       
   278 
       
   279 
       
   280 
       
   281     {
       
   282 
       
   283 
       
   284 
       
   285     CSymbianCertStore* self = NewLC();
       
   286 
       
   287 
       
   288 
       
   289     CleanupStack::Pop(self);
       
   290 
       
   291 
       
   292 
       
   293     return self;
       
   294 
       
   295 
       
   296 
       
   297     }
       
   298 
       
   299 
       
   300 
       
   301     
       
   302 
       
   303 
       
   304 
       
   305 // ---------------------------------------------------------------------------
       
   306 
       
   307 
       
   308 
       
   309 // Two phase constructor
       
   310 
       
   311 
       
   312 
       
   313 // ---------------------------------------------------------------------------
       
   314 
       
   315 
       
   316 
       
   317 //   
       
   318 
       
   319 
       
   320 
       
   321 EXPORT_C CSymbianCertStore* CSymbianCertStore::NewLC()
       
   322 
       
   323 
       
   324 
       
   325     {
       
   326 
       
   327 
       
   328 
       
   329     CSymbianCertStore* self = new( ELeave ) CSymbianCertStore;
       
   330 
       
   331 
       
   332 
       
   333     CleanupStack::PushL( self );
       
   334 
       
   335 
       
   336 
       
   337     self->ConstructL();
       
   338 
       
   339 
       
   340 
       
   341     return self;
       
   342 
       
   343 
       
   344 
       
   345     }
       
   346 
       
   347 
       
   348 
       
   349     
       
   350 
       
   351 
       
   352 
       
   353 // ---------------------------------------------------------------------------
       
   354 
       
   355 
       
   356 
       
   357 // Destructor
       
   358 
       
   359 
       
   360 
       
   361 // ---------------------------------------------------------------------------
       
   362 
       
   363 
       
   364 
       
   365 //    
       
   366 
       
   367 
       
   368 
       
   369 CSymbianCertStore::~CSymbianCertStore()
       
   370 
       
   371 
       
   372 
       
   373     {
       
   374 
       
   375 
       
   376 
       
   377     Cancel();
       
   378 
       
   379 
       
   380 
       
   381     ResetAndDestroyCertsArray();     //iCerts
       
   382 
       
   383 
       
   384 
       
   385     // Free memory
       
   386 
       
   387 
       
   388 
       
   389         delete iCertFilter;
       
   390 
       
   391 
       
   392 
       
   393         delete iCertLabel;
       
   394 
       
   395 
       
   396 
       
   397         delete iCertData;
       
   398 
       
   399 
       
   400 
       
   401         delete iCertObject;
       
   402 
       
   403 
       
   404 
       
   405     if (iCert)
       
   406 
       
   407 
       
   408 
       
   409         {
       
   410 
       
   411 
       
   412 
       
   413         iCert->Release();
       
   414 
       
   415 
       
   416 
       
   417         }
       
   418 
       
   419 
       
   420 
       
   421 	
       
   422 
       
   423 
       
   424 
       
   425         delete iCertStore;
       
   426 
       
   427 
       
   428 
       
   429     iFs.Close();	
       
   430 
       
   431 
       
   432 
       
   433     }
       
   434 
       
   435 
       
   436 
       
   437     
       
   438 
       
   439 
       
   440 
       
   441 // -----------------------------------------------------------------------------
       
   442 
       
   443 
       
   444 
       
   445 // Release all resources kept in iCerts array (exept for iCert which is released 
       
   446 
       
   447 
       
   448 
       
   449 // separetly) and empty iCerts array
       
   450 
       
   451 
       
   452 
       
   453 // -----------------------------------------------------------------------------
       
   454 
       
   455 
       
   456 
       
   457 //
       
   458 
       
   459 
       
   460 
       
   461  void CSymbianCertStore::ResetAndDestroyCertsArray()
       
   462 
       
   463 
       
   464 
       
   465     {    
       
   466 
       
   467 
       
   468 
       
   469     TInt count = iCerts.Count();        
       
   470 
       
   471 
       
   472 
       
   473     for ( int i=0; i<count; ++i )
       
   474 
       
   475 
       
   476 
       
   477         {
       
   478 
       
   479 
       
   480 
       
   481         CCTCertInfo* cert = iCerts[i];
       
   482 
       
   483 
       
   484 
       
   485         if ( cert != iCert )
       
   486 
       
   487 
       
   488 
       
   489             {
       
   490 
       
   491 
       
   492 
       
   493             cert->Release();
       
   494 
       
   495 
       
   496 
       
   497             }
       
   498 
       
   499 
       
   500 
       
   501         }	    
       
   502 
       
   503 
       
   504 
       
   505         iCerts.Reset();            
       
   506 
       
   507 
       
   508 
       
   509     }
       
   510 
       
   511 
       
   512 
       
   513 // -----------------------------------------------------------------------------
       
   514 
       
   515 
       
   516 
       
   517 // Release all resources kept in iCerts array  and empty iCerts array
       
   518 
       
   519 
       
   520 
       
   521 // -----------------------------------------------------------------------------
       
   522 
       
   523 
       
   524 
       
   525 //
       
   526 
       
   527 
       
   528 
       
   529  void CSymbianCertStore::ResetCertsList()
       
   530 
       
   531 
       
   532 
       
   533     {    
       
   534 
       
   535 
       
   536 
       
   537     TInt count = iCerts.Count();        
       
   538 
       
   539 
       
   540 
       
   541     for ( int i=0; i<count; ++i )
       
   542 
       
   543 
       
   544 
       
   545         {
       
   546 
       
   547 
       
   548 
       
   549         CCTCertInfo* cert = iCerts[i];
       
   550 
       
   551 
       
   552 
       
   553             cert->Release();
       
   554 
       
   555 
       
   556 
       
   557         }	    
       
   558 
       
   559 
       
   560 
       
   561         iCerts.Reset();            
       
   562 
       
   563 
       
   564 
       
   565     }    
       
   566 
       
   567 
       
   568 
       
   569 // -----------------------------------------------------------------------------
       
   570 
       
   571 
       
   572 
       
   573 //RunL
       
   574 
       
   575 
       
   576 
       
   577 // Handles an active object's request completion event.
       
   578 
       
   579 
       
   580 
       
   581 // (other items were commented in a header).
       
   582 
       
   583 
       
   584 
       
   585 // -----------------------------------------------------------------------------
       
   586 
       
   587 
       
   588 
       
   589 //
       
   590 
       
   591 
       
   592 
       
   593 void CSymbianCertStore::RunL()
       
   594 
       
   595 
       
   596 
       
   597     {
       
   598 
       
   599 
       
   600 
       
   601     if (iStatus!=KErrNone) 
       
   602 
       
   603 
       
   604 
       
   605         {
       
   606 
       
   607 
       
   608 
       
   609     	TInt err = iStatus.Int();
       
   610 
       
   611 
       
   612 
       
   613     	User::Leave(iStatus.Int());
       
   614 
       
   615 
       
   616 
       
   617         }
       
   618 
       
   619 
       
   620 
       
   621     switch(iState)
       
   622 
       
   623 
       
   624 
       
   625         {
       
   626 
       
   627 
       
   628 
       
   629         case EInitializingCertStore:
       
   630 
       
   631 
       
   632 
       
   633     	            CActiveScheduler::Stop();
       
   634 
       
   635 
       
   636 
       
   637     	            break;
       
   638 
       
   639 
       
   640 
       
   641         case EFindingCerts:
       
   642 
       
   643 
       
   644 
       
   645     	            FindMatchedCert();
       
   646 
       
   647 
       
   648 
       
   649     	            CActiveScheduler::Stop();   
       
   650 
       
   651 
       
   652 
       
   653                      break;
       
   654 
       
   655 
       
   656 
       
   657         case EListCerts:
       
   658 
       
   659 
       
   660 
       
   661     	            CActiveScheduler::Stop();   
       
   662 
       
   663 
       
   664 
       
   665                      break;		
       
   666 
       
   667 
       
   668 
       
   669         case EAddingCert:
       
   670 
       
   671 
       
   672 
       
   673                     CActiveScheduler::Stop();
       
   674 
       
   675 
       
   676 
       
   677                     break;     
       
   678 
       
   679 
       
   680 
       
   681         case ERetrievingCertData:
       
   682 
       
   683 
       
   684 
       
   685                     CActiveScheduler::Stop();
       
   686 
       
   687 
       
   688 
       
   689                     break;
       
   690 
       
   691 
       
   692 
       
   693         case ERetrievingCertObject:
       
   694 
       
   695 
       
   696 
       
   697                     CActiveScheduler::Stop();
       
   698 
       
   699 
       
   700 
       
   701                     break;
       
   702 
       
   703 
       
   704 
       
   705         }
       
   706 
       
   707 
       
   708 
       
   709     }
       
   710 
       
   711 
       
   712 
       
   713     
       
   714 
       
   715 
       
   716 
       
   717 // -----------------------------------------------------------------------------
       
   718 
       
   719 
       
   720 
       
   721 // DoCancel
       
   722 
       
   723 
       
   724 
       
   725 // This function is called as part of the active object's Cancel().
       
   726 
       
   727 
       
   728 
       
   729 // (other items were commented in a header).
       
   730 
       
   731 
       
   732 
       
   733 // -----------------------------------------------------------------------------
       
   734 
       
   735 
       
   736 
       
   737 //  
       
   738 
       
   739 
       
   740 
       
   741 void CSymbianCertStore::DoCancel()
       
   742 
       
   743 
       
   744 
       
   745     {
       
   746 
       
   747 
       
   748 
       
   749     }
       
   750 
       
   751 
       
   752 
       
   753     
       
   754 
       
   755 
       
   756 
       
   757 // -----------------------------------------------------------------------------
       
   758 
       
   759 
       
   760 
       
   761 // RunError
       
   762 
       
   763 
       
   764 
       
   765 // Handles Leaves from RunL function.
       
   766 
       
   767 
       
   768 
       
   769 // (other items were commented in a header).
       
   770 
       
   771 
       
   772 
       
   773 // -----------------------------------------------------------------------------
       
   774 
       
   775 
       
   776 
       
   777 // 
       
   778 
       
   779 
       
   780 
       
   781 TInt CSymbianCertStore::RunError(TInt aError)
       
   782 
       
   783 
       
   784 
       
   785 	{
       
   786 
       
   787 
       
   788 
       
   789 	iError=aError;
       
   790 
       
   791 
       
   792 
       
   793 	CActiveScheduler::Stop();
       
   794 
       
   795 
       
   796 
       
   797 	return KErrNone;
       
   798 
       
   799 
       
   800 
       
   801 	}
       
   802 
       
   803 
       
   804 
       
   805 	
       
   806 
       
   807 
       
   808 
       
   809 // -----------------------------------------------------------------------------
       
   810 
       
   811 
       
   812 
       
   813 // CreateUnifiedCertStoreL
       
   814 
       
   815 
       
   816 
       
   817 // Create the Unified Cert Store structure iCertStore
       
   818 
       
   819 
       
   820 
       
   821 // -----------------------------------------------------------------------------
       
   822 
       
   823 
       
   824 
       
   825 //
       
   826 
       
   827 
       
   828 
       
   829 EXPORT_C void CSymbianCertStore::CreateUnifiedCertStoreL()
       
   830 
       
   831 
       
   832 
       
   833     {
       
   834 
       
   835 
       
   836 
       
   837     if (iCertStore)
       
   838 
       
   839 
       
   840 
       
   841         {
       
   842 
       
   843 
       
   844 
       
   845         delete iCertStore;    
       
   846 
       
   847 
       
   848 
       
   849         iCertStore = NULL;
       
   850 
       
   851 
       
   852 
       
   853         }
       
   854 
       
   855 
       
   856 
       
   857   
       
   858 
       
   859 
       
   860 
       
   861     iCertStore = CUnifiedCertStore::NewL(iFs,ETrue);
       
   862 
       
   863 
       
   864 
       
   865     iCertStore->Initialize(iStatus);
       
   866 
       
   867 
       
   868 
       
   869     iState = EInitializingCertStore;
       
   870 
       
   871 
       
   872 
       
   873     SetActive();
       
   874 
       
   875 
       
   876 
       
   877     // RunL() called when this completes
       
   878 
       
   879 
       
   880 
       
   881     }
       
   882 
       
   883 
       
   884 
       
   885     
       
   886 
       
   887 
       
   888 
       
   889 // -----------------------------------------------------------------------------
       
   890 
       
   891 
       
   892 
       
   893 // FindCert 
       
   894 
       
   895 
       
   896 
       
   897 // Lists certs from Unified Cert Store in  iCerts with label
       
   898 
       
   899 
       
   900 
       
   901 // -----------------------------------------------------------------------------
       
   902 
       
   903 
       
   904 
       
   905 //
       
   906 
       
   907 
       
   908 
       
   909 EXPORT_C void CSymbianCertStore::FindCertL(const TDesC8 &aLabel)
       
   910 
       
   911 
       
   912 
       
   913     {
       
   914 
       
   915 
       
   916 
       
   917     if(iCertFilter)
       
   918 
       
   919 
       
   920 
       
   921         {
       
   922 
       
   923 
       
   924 
       
   925         delete iCertFilter;
       
   926 
       
   927 
       
   928 
       
   929         iCertFilter = NULL;
       
   930 
       
   931 
       
   932 
       
   933         }
       
   934 
       
   935 
       
   936 
       
   937     iCertFilter = CCertAttributeFilter::NewL();     
       
   938 
       
   939 
       
   940 
       
   941     iCertFilter->SetFormat(EX509Certificate);
       
   942 
       
   943 
       
   944 
       
   945     iCertFilter->SetOwnerType(ECACertificate);		
       
   946 
       
   947 
       
   948 
       
   949     // Store aLabel
       
   950 
       
   951 
       
   952 
       
   953     if (iCertLabel)
       
   954 
       
   955 
       
   956 
       
   957         {
       
   958 
       
   959 
       
   960 
       
   961     	delete iCertLabel;
       
   962 
       
   963 
       
   964 
       
   965     	iCertLabel = NULL;
       
   966 
       
   967 
       
   968 
       
   969         }
       
   970 
       
   971 
       
   972 
       
   973     TRAPD(err,iCertLabel = CnvUtfConverter::ConvertToUnicodeFromUtf8L(aLabel));
       
   974 
       
   975 
       
   976 
       
   977     if (err != KErrNone)
       
   978 
       
   979 
       
   980 
       
   981         {
       
   982 
       
   983 
       
   984 
       
   985         iError=err;
       
   986 
       
   987 
       
   988 
       
   989         }
       
   990 
       
   991 
       
   992 
       
   993     iCertStore->List(iCerts, *iCertFilter, iStatus);
       
   994 
       
   995 
       
   996 
       
   997     iState = EFindingCerts;
       
   998 
       
   999 
       
  1000 
       
  1001     SetActive();
       
  1002 
       
  1003 
       
  1004 
       
  1005     // RunL() called when this completes
       
  1006 
       
  1007 
       
  1008 
       
  1009     }
       
  1010 
       
  1011 
       
  1012 
       
  1013     
       
  1014 
       
  1015 
       
  1016 
       
  1017 // -----------------------------------------------------------------------------
       
  1018 
       
  1019 
       
  1020 
       
  1021 // ListCert 
       
  1022 
       
  1023 
       
  1024 
       
  1025 // List certs from Unified Cert Store in iCerts. 
       
  1026 
       
  1027 
       
  1028 
       
  1029 // The found certs will be stored in iCerts
       
  1030 
       
  1031 
       
  1032 
       
  1033 // -----------------------------------------------------------------------------
       
  1034 
       
  1035 
       
  1036 
       
  1037 //
       
  1038 
       
  1039 
       
  1040 
       
  1041 EXPORT_C void CSymbianCertStore::ListCertL()
       
  1042 
       
  1043 
       
  1044 
       
  1045     {
       
  1046 
       
  1047 
       
  1048 
       
  1049     if(iCertFilter)
       
  1050 
       
  1051 
       
  1052 
       
  1053         {
       
  1054 
       
  1055 
       
  1056 
       
  1057         delete iCertFilter;
       
  1058 
       
  1059 
       
  1060 
       
  1061         iCertFilter = NULL;
       
  1062 
       
  1063 
       
  1064 
       
  1065         }
       
  1066 
       
  1067 
       
  1068 
       
  1069     if(iCerts.Count())
       
  1070 
       
  1071 
       
  1072 
       
  1073         {
       
  1074 
       
  1075 
       
  1076 
       
  1077        ResetCertsList();
       
  1078 
       
  1079 
       
  1080 
       
  1081         }
       
  1082 
       
  1083 
       
  1084 
       
  1085     iCertFilter = CCertAttributeFilter::NewL();     
       
  1086 
       
  1087 
       
  1088 
       
  1089     iCertFilter->SetFormat(EX509Certificate);
       
  1090 
       
  1091 
       
  1092 
       
  1093     iCertFilter->SetOwnerType(ECACertificate);		
       
  1094 
       
  1095 
       
  1096 
       
  1097        
       
  1098 
       
  1099 
       
  1100 
       
  1101     iCertStore->List(iCerts, *iCertFilter, iStatus);
       
  1102 
       
  1103 
       
  1104 
       
  1105     iState = EListCerts;
       
  1106 
       
  1107 
       
  1108 
       
  1109     SetActive();
       
  1110 
       
  1111 
       
  1112 
       
  1113     // RunL() called when this completes
       
  1114 
       
  1115 
       
  1116 
       
  1117     }
       
  1118 
       
  1119 
       
  1120 
       
  1121     
       
  1122 
       
  1123 
       
  1124 
       
  1125 // -----------------------------------------------------------------------------
       
  1126 
       
  1127 
       
  1128 
       
  1129 // GetCertsList 
       
  1130 
       
  1131 
       
  1132 
       
  1133 // Returns  certs list from SymbianCertStore. 				  
       
  1134 
       
  1135 
       
  1136 
       
  1137 // Returns: RMPointerArray<CCTCertInfo> list
       
  1138 
       
  1139 
       
  1140 
       
  1141 // -----------------------------------------------------------------------------
       
  1142 
       
  1143 
       
  1144 
       
  1145 //
       
  1146 
       
  1147 
       
  1148 
       
  1149 EXPORT_C RMPointerArray<CCTCertInfo> CSymbianCertStore::GetCertList()
       
  1150 
       
  1151 
       
  1152 
       
  1153     {
       
  1154 
       
  1155 
       
  1156 
       
  1157     return iCerts;
       
  1158 
       
  1159 
       
  1160 
       
  1161     }   
       
  1162 
       
  1163 
       
  1164 
       
  1165     
       
  1166 
       
  1167 
       
  1168 
       
  1169 // -----------------------------------------------------------------------------
       
  1170 
       
  1171 
       
  1172 
       
  1173 // hasCert  
       
  1174 
       
  1175 
       
  1176 
       
  1177 // Check if a cert is found in the Unified Cert Store				  
       
  1178 
       
  1179 
       
  1180 
       
  1181 // Returns: KErrNone if iCert is set 
       
  1182 
       
  1183 
       
  1184 
       
  1185 //                  KErrNotFound in other case
       
  1186 
       
  1187 
       
  1188 
       
  1189 // -----------------------------------------------------------------------------
       
  1190 
       
  1191 
       
  1192 
       
  1193 EXPORT_C TInt CSymbianCertStore::hasCert()
       
  1194 
       
  1195 
       
  1196 
       
  1197     {
       
  1198 
       
  1199 
       
  1200 
       
  1201 	if (iCert)
       
  1202 
       
  1203 
       
  1204 
       
  1205 		return KErrNone;
       
  1206 
       
  1207 
       
  1208 
       
  1209 	else
       
  1210 
       
  1211 
       
  1212 
       
  1213 		return KErrNotFound;
       
  1214 
       
  1215 
       
  1216 
       
  1217     }     
       
  1218 
       
  1219 
       
  1220 
       
  1221     
       
  1222 
       
  1223 
       
  1224 
       
  1225 // -----------------------------------------------------------------------------
       
  1226 
       
  1227 
       
  1228 
       
  1229 // SetCert 
       
  1230 
       
  1231 
       
  1232 
       
  1233 // Sets iCert. 				  
       
  1234 
       
  1235 
       
  1236 
       
  1237 // -----------------------------------------------------------------------------
       
  1238 
       
  1239 
       
  1240 
       
  1241 //
       
  1242 
       
  1243 
       
  1244 
       
  1245 EXPORT_C void CSymbianCertStore::SetCert(CCTCertInfo* cert)
       
  1246 
       
  1247 
       
  1248 
       
  1249     {
       
  1250 
       
  1251 
       
  1252 
       
  1253     iCert=cert;
       
  1254 
       
  1255 
       
  1256 
       
  1257     }        
       
  1258 
       
  1259 
       
  1260 
       
  1261     
       
  1262 
       
  1263 
       
  1264 
       
  1265 // -----------------------------------------------------------------------------
       
  1266 
       
  1267 
       
  1268 
       
  1269 // GetCertSize 
       
  1270 
       
  1271 
       
  1272 
       
  1273 // Returns size of the cert.			  
       
  1274 
       
  1275 
       
  1276 
       
  1277 // Returns: TUint size
       
  1278 
       
  1279 
       
  1280 
       
  1281 // -----------------------------------------------------------------------------
       
  1282 
       
  1283 
       
  1284 
       
  1285 //
       
  1286 
       
  1287 
       
  1288 
       
  1289 EXPORT_C TUint CSymbianCertStore::GetCertSize()
       
  1290 
       
  1291 
       
  1292 
       
  1293     {
       
  1294 
       
  1295 
       
  1296 
       
  1297 	// assert iCert
       
  1298 
       
  1299 
       
  1300 
       
  1301 	return iCert->Size();
       
  1302 
       
  1303 
       
  1304 
       
  1305     }
       
  1306 
       
  1307 
       
  1308 
       
  1309     
       
  1310 
       
  1311 
       
  1312 
       
  1313 // -----------------------------------------------------------------------------
       
  1314 
       
  1315 
       
  1316 
       
  1317 // AddCertL 
       
  1318 
       
  1319 
       
  1320 
       
  1321 // Add cert  to Unified Cert Store
       
  1322 
       
  1323 
       
  1324 
       
  1325 // -----------------------------------------------------------------------------
       
  1326 
       
  1327 
       
  1328 
       
  1329 //
       
  1330 
       
  1331 
       
  1332 
       
  1333 EXPORT_C void CSymbianCertStore::AddCert(
       
  1334 
       
  1335 
       
  1336 
       
  1337     const TDesC8 &aCertData, 
       
  1338 
       
  1339 
       
  1340 
       
  1341     const TDesC8 &aCertName)		
       
  1342 
       
  1343 
       
  1344 
       
  1345     {
       
  1346 
       
  1347 
       
  1348 
       
  1349     if (iCert)
       
  1350 
       
  1351 
       
  1352 
       
  1353         { 
       
  1354 
       
  1355 
       
  1356 
       
  1357         //delete iCert;
       
  1358 
       
  1359 
       
  1360 
       
  1361         iCert->Release();
       
  1362 
       
  1363 
       
  1364 
       
  1365         iCert = NULL;
       
  1366 
       
  1367 
       
  1368 
       
  1369         }   
       
  1370 
       
  1371 
       
  1372 
       
  1373     //iWritableCertStore=&(iCertStore->WritableCertStore(0));
       
  1374 
       
  1375 
       
  1376 
       
  1377     TInt num = iCertStore->WritableCertStoreCount();
       
  1378 
       
  1379 
       
  1380 
       
  1381 	TBool found = EFalse;
       
  1382 
       
  1383 
       
  1384 
       
  1385    	   
       
  1386 
       
  1387 
       
  1388 
       
  1389 	for (TInt i = 0;i<num;i++)
       
  1390 
       
  1391 
       
  1392 
       
  1393 		{
       
  1394 
       
  1395 
       
  1396 
       
  1397    		iWritableCertStore = &(iCertStore->WritableCertStore(i));
       
  1398 
       
  1399 
       
  1400 
       
  1401 		MCTToken& token = iWritableCertStore->Token();
       
  1402 
       
  1403 
       
  1404 
       
  1405 		TUid tokenuid = token.Handle().iTokenTypeUid;
       
  1406 
       
  1407 
       
  1408 
       
  1409    		if ( tokenuid == TUid::Uid(KTokenTypeFileCertstore) ) // Symbian's file cert store, defined in mctcertstore.h
       
  1410 
       
  1411 
       
  1412 
       
  1413    			{
       
  1414 
       
  1415 
       
  1416 
       
  1417    	    		found = ETrue;
       
  1418 
       
  1419 
       
  1420 
       
  1421 			break;
       
  1422 
       
  1423 
       
  1424 
       
  1425    	    	}
       
  1426 
       
  1427 
       
  1428 
       
  1429 		}	
       
  1430 
       
  1431 
       
  1432 
       
  1433 
       
  1434 
       
  1435 
       
  1436 
       
  1437 	if ( !found && (num > 0) )
       
  1438 
       
  1439 
       
  1440 
       
  1441 		{
       
  1442 
       
  1443 
       
  1444 
       
  1445 		// Not found, let's use the first one as a default anyway
       
  1446 
       
  1447 
       
  1448 
       
  1449    		iWritableCertStore = &(iCertStore->WritableCertStore(0));
       
  1450 
       
  1451 
       
  1452 
       
  1453 		}	
       
  1454 
       
  1455 
       
  1456 
       
  1457    
       
  1458 
       
  1459 
       
  1460 
       
  1461     // Convert key name from TDesC8 to TDesC16
       
  1462 
       
  1463 
       
  1464 
       
  1465     HBufC16* unicodeCertName=NULL;
       
  1466 
       
  1467 
       
  1468 
       
  1469     TRAPD(err,unicodeCertName=CnvUtfConverter::ConvertToUnicodeFromUtf8L(aCertName));
       
  1470 
       
  1471 
       
  1472 
       
  1473     if (err != KErrNone)
       
  1474 
       
  1475 
       
  1476 
       
  1477         {
       
  1478 
       
  1479 
       
  1480 
       
  1481         iError=err;
       
  1482 
       
  1483 
       
  1484 
       
  1485         }
       
  1486 
       
  1487 
       
  1488 
       
  1489     iWritableCertStore->Add(*unicodeCertName, 
       
  1490 
       
  1491 
       
  1492 
       
  1493                                         EX509Certificate,
       
  1494 
       
  1495 
       
  1496 
       
  1497                                         ECACertificate, 
       
  1498 
       
  1499 
       
  1500 
       
  1501                                         NULL, 
       
  1502 
       
  1503 
       
  1504 
       
  1505                                         NULL, 
       
  1506 
       
  1507 
       
  1508 
       
  1509                                         aCertData, 
       
  1510 
       
  1511 
       
  1512 
       
  1513                                         iStatus);
       
  1514 
       
  1515 
       
  1516 
       
  1517     delete unicodeCertName;
       
  1518 
       
  1519 
       
  1520 
       
  1521     iState = EAddingCert;
       
  1522 
       
  1523 
       
  1524 
       
  1525     SetActive();
       
  1526 
       
  1527 
       
  1528 
       
  1529     // RunL() called when this completes
       
  1530 
       
  1531 
       
  1532 
       
  1533     }    
       
  1534 
       
  1535 
       
  1536 
       
  1537        
       
  1538 
       
  1539 
       
  1540 
       
  1541 // -----------------------------------------------------------------------------
       
  1542 
       
  1543 
       
  1544 
       
  1545 // RetrieveCertDataL 
       
  1546 
       
  1547 
       
  1548 
       
  1549 // Sets iCertData from iCert
       
  1550 
       
  1551 
       
  1552 
       
  1553 // -----------------------------------------------------------------------------
       
  1554 
       
  1555 
       
  1556 
       
  1557 //
       
  1558 
       
  1559 
       
  1560 
       
  1561 EXPORT_C void CSymbianCertStore::RetrieveCertDataL()
       
  1562 
       
  1563 
       
  1564 
       
  1565     {
       
  1566 
       
  1567 
       
  1568 
       
  1569     if(!iCert)
       
  1570 
       
  1571 
       
  1572 
       
  1573        User::Leave(KErrNotFound);
       
  1574 
       
  1575 
       
  1576 
       
  1577     if(iCertData)
       
  1578 
       
  1579 
       
  1580 
       
  1581         {
       
  1582 
       
  1583 
       
  1584 
       
  1585         delete iCertData;
       
  1586 
       
  1587 
       
  1588 
       
  1589         iCertData = NULL;
       
  1590 
       
  1591 
       
  1592 
       
  1593         }
       
  1594 
       
  1595 
       
  1596 
       
  1597     iCertData = HBufC8::NewMaxL(iCert->Size()); 
       
  1598 
       
  1599 
       
  1600 
       
  1601     TPtr8 data=iCertData->Des();
       
  1602 
       
  1603 
       
  1604 
       
  1605     iCertStore->Retrieve(*iCert, data, iStatus);
       
  1606 
       
  1607 
       
  1608 
       
  1609     iState = ERetrievingCertData;
       
  1610 
       
  1611 
       
  1612 
       
  1613     SetActive();
       
  1614 
       
  1615 
       
  1616 
       
  1617     // RunL called when this completes
       
  1618 
       
  1619 
       
  1620 
       
  1621     }
       
  1622 
       
  1623 
       
  1624 
       
  1625     
       
  1626 
       
  1627 
       
  1628 
       
  1629 // -----------------------------------------------------------------------------
       
  1630 
       
  1631 
       
  1632 
       
  1633 // GetRetrieveCertData 
       
  1634 
       
  1635 
       
  1636 
       
  1637 // Returns  cert data. 				  
       
  1638 
       
  1639 
       
  1640 
       
  1641 // Returns: HBufC8* iCertData
       
  1642 
       
  1643 
       
  1644 
       
  1645 // -----------------------------------------------------------------------------
       
  1646 
       
  1647 
       
  1648 
       
  1649 //
       
  1650 
       
  1651 
       
  1652 
       
  1653 EXPORT_C HBufC8* CSymbianCertStore::GetRetrieveCertData()
       
  1654 
       
  1655 
       
  1656 
       
  1657     {
       
  1658 
       
  1659 
       
  1660 
       
  1661     return iCertData;
       
  1662 
       
  1663 
       
  1664 
       
  1665     }    
       
  1666 
       
  1667 
       
  1668 
       
  1669         
       
  1670 
       
  1671 
       
  1672 
       
  1673 // -----------------------------------------------------------------------------
       
  1674 
       
  1675 
       
  1676 
       
  1677 // RetrieveCertObjectL 
       
  1678 
       
  1679 
       
  1680 
       
  1681 // Set iCertObject from iCert
       
  1682 
       
  1683 
       
  1684 
       
  1685 // -----------------------------------------------------------------------------
       
  1686 
       
  1687 
       
  1688 
       
  1689 //
       
  1690 
       
  1691 
       
  1692 
       
  1693 EXPORT_C void CSymbianCertStore::RetrieveCertObjectL()
       
  1694 
       
  1695 
       
  1696 
       
  1697     {
       
  1698 
       
  1699 
       
  1700 
       
  1701     if(!iCert)
       
  1702 
       
  1703 
       
  1704 
       
  1705         User::Leave(KErrNotFound);
       
  1706 
       
  1707 
       
  1708 
       
  1709     if(iCertObject)
       
  1710 
       
  1711 
       
  1712 
       
  1713         {
       
  1714 
       
  1715 
       
  1716 
       
  1717         delete iCertObject;
       
  1718 
       
  1719 
       
  1720 
       
  1721         iCertObject = NULL;
       
  1722 
       
  1723 
       
  1724 
       
  1725         }
       
  1726 
       
  1727 
       
  1728 
       
  1729     iCertStore->Retrieve(*iCert, iCertObject, iStatus);
       
  1730 
       
  1731 
       
  1732 
       
  1733     iState = ERetrievingCertObject;
       
  1734 
       
  1735 
       
  1736 
       
  1737     SetActive();
       
  1738 
       
  1739 
       
  1740 
       
  1741     // RunL called when this completes
       
  1742 
       
  1743 
       
  1744 
       
  1745     }
       
  1746 
       
  1747 
       
  1748 
       
  1749     
       
  1750 
       
  1751 
       
  1752 
       
  1753 // -----------------------------------------------------------------------------
       
  1754 
       
  1755 
       
  1756 
       
  1757 // GetRetrieveCertObject 
       
  1758 
       
  1759 
       
  1760 
       
  1761 // Returns  cert object. 				  
       
  1762 
       
  1763 
       
  1764 
       
  1765 // Returns: CCertificate*  iCertObject
       
  1766 
       
  1767 
       
  1768 
       
  1769 // -----------------------------------------------------------------------------
       
  1770 
       
  1771 
       
  1772 
       
  1773 //
       
  1774 
       
  1775 
       
  1776 
       
  1777 EXPORT_C CCertificate* CSymbianCertStore::GetRetrieveCertObject()
       
  1778 
       
  1779 
       
  1780 
       
  1781     {
       
  1782 
       
  1783 
       
  1784 
       
  1785     return iCertObject;
       
  1786 
       
  1787 
       
  1788 
       
  1789     }  
       
  1790 
       
  1791 
       
  1792 
       
  1793     
       
  1794 
       
  1795 
       
  1796 
       
  1797 // -----------------------------------------------------------------------------
       
  1798 
       
  1799 
       
  1800 
       
  1801 // GetError
       
  1802 
       
  1803 
       
  1804 
       
  1805 // Get the error flag
       
  1806 
       
  1807 
       
  1808 
       
  1809 // Returns: error code
       
  1810 
       
  1811 
       
  1812 
       
  1813 // -----------------------------------------------------------------------------
       
  1814 
       
  1815 
       
  1816 
       
  1817 //
       
  1818 
       
  1819 
       
  1820 
       
  1821 EXPORT_C TInt CSymbianCertStore::GetError()
       
  1822 
       
  1823 
       
  1824 
       
  1825     {
       
  1826 
       
  1827 
       
  1828 
       
  1829     return iError;
       
  1830 
       
  1831 
       
  1832 
       
  1833     }
       
  1834 
       
  1835 
       
  1836 
       
  1837 
       
  1838 
       
  1839 
       
  1840 
       
  1841 
       
  1842 
       
  1843 
       
  1844 
       
  1845 
       
  1846