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

Contents of /trunk/OpenPGPminidriver/tlv.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 6 - (show 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 #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