/[openpgpmdrv]/trunk/OpenPGPminidriver/tlv.c
ViewVC logotype

Annotation of /trunk/OpenPGPminidriver/tlv.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 6 - (hide annotations)
Thu Mar 4 21:17:51 2010 UTC (15 years, 2 months ago) by vletoux
File MIME type: text/plain
File size: 1246 byte(s)
Everything is working except the certificate
1 vletoux 6 #include <windows.h>
2    
3     DWORD getTlvSize(__in PBYTE pbPointer, __in PDWORD pdwOffset)
4     {
5     DWORD dwSize;
6     switch(*pbPointer)
7     {
8     case 0x81:
9     *pdwOffset+=2;
10     dwSize = pbPointer[1];
11     break;
12     case 0x82:
13     *pdwOffset+=3;
14     dwSize = pbPointer[1] * 0x100 + pbPointer[2];
15     break;
16     default:
17     dwSize = *pbPointer;
18     *pdwOffset+=1;
19     break;
20     }
21     return dwSize;
22     }
23    
24     BOOL find_tlv(__in PBYTE pbData, __in DWORD dwTlvSearched, __in DWORD dwTotalSize, __out PBYTE *pbDataOut, __out_opt PDWORD pdwSize)
25     {
26     DWORD dwOffset = 0, dwTlv ;
27     DWORD dwSize;
28     BOOL bFound = FALSE;
29     while (dwOffset < dwTotalSize)
30     {
31     // check the tlv
32     // if it begins with 0x5F => tlv of 2 bytes.
33     // else 1 byte
34     dwTlv = 0;
35     if (pbData[dwOffset] == 0x5F)
36     {
37     dwTlv = pbData[dwOffset] * 0x100;
38     dwOffset++;
39     }
40     dwTlv += pbData[dwOffset];
41     dwOffset++;
42    
43    
44     if (dwTlv == dwTlvSearched)
45     {
46     // size sequence
47     dwSize = getTlvSize(pbData + dwOffset,&dwOffset);
48     if (pdwSize)
49     {
50     *pdwSize = dwSize;
51     }
52     *pbDataOut = pbData + dwOffset;
53     return TRUE;
54     }
55     else
56     {
57     dwSize = getTlvSize(pbData + dwOffset,&dwOffset);
58     if (dwTlv != 0x73)
59     {
60     dwOffset += dwSize;
61     }
62     }
63     }
64     return FALSE;
65     }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26