|         |      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  |