78{
85
86 TRACE(
"(%p %p %ld %p %p)\n", pSubjectInfo, pdwEncodingType, dwIndex,
87 pcbSignedDataMsg, pbSignedDataMsg);
88
92 {
95 }
96
97 r = IStorage_OpenStream(stg,
L"\5DigitalSignature", 0,
100 {
101 TRACE(
"couldn't find digital signature stream\n");
102 goto freestorage;
103 }
104
107 goto freestream;
109 {
110 WARN(
"unexpected data in digital sig: 0x%02x%02x\n",
hdr[0],
hdr[1]);
111 goto freestream;
112 }
113
114
115
116
118 {
119 WARN(
"indefinite-length encoding not supported!\n");
120 goto freestream;
121 }
122 else if (
hdr[1] & 0x80)
123 {
126
127 lenBytes =
hdr[1] & 0x7f;
128 if (lenBytes >
sizeof(
DWORD))
129 {
130 WARN(
"asn.1 length too long (%ld)\n", lenBytes);
131 goto freestream;
132 }
133 r = IStream_Read(stm,
len, lenBytes, &
count);
135 goto freestream;
136 dataBytes = 0;
140 {
141 dataBytes <<= 8;
143 }
144 }
145 else
146 {
147 lenBytes = 0;
149 }
150
151 if (!pbSignedDataMsg)
152 {
153 *pcbSignedDataMsg = 2 + lenBytes + dataBytes;
155 }
156 else if (*pcbSignedDataMsg < 2 + lenBytes + dataBytes)
157 {
159 *pcbSignedDataMsg = 2 + lenBytes + dataBytes;
160 }
161 else
162 {
164
167 if (lenBytes)
168 {
171 }
172 r = IStream_Read(stm,
ptr, dataBytes, &
count);
174 {
176 *pcbSignedDataMsg = 2 + lenBytes + dataBytes;
178 }
179 }
180
181freestream:
182 IStream_Release(stm);
183freestorage:
184 IStorage_Release(stg);
186
189}
#define ERROR_INSUFFICIENT_BUFFER
HRESULT WINAPI StgOpenStorage(const OLECHAR *pwcsName, IStorage *pstgPriority, DWORD grfMode, SNB snbExclude, DWORD reserved, IStorage **ppstgOpen)
GLuint GLuint GLsizei count
GLdouble GLdouble GLdouble r
#define memcpy(s1, s2, n)
#define STGM_SHARE_EXCLUSIVE
#define STGM_SHARE_DENY_WRITE
#define X509_ASN_ENCODING
#define PKCS_7_ASN_ENCODING