24#define ASN_TAG_IS_CONSTRUCTED 0x20
27#define ASN_TAG_BITSTRING 0x03
28#define ASN_TAG_OCTET_STRING 0x04
29#define ASN_TAG_OBJECT_ID 0x06
31#define ASN_TAG_SEQUENCE_RAW 0x10
32#define ASN_TAG_SET_RAW 0x11
34#define ASN_TAG_SEQUENCE 0x30
35#define ASN_TAG_SET 0x31
38#define ASN_TAG_CONTEXT_SPECIFIC 0x80
39#define ASN_TAG_CONTEXT_SPECIFIC_N(n) (ASN_TAG_CONTEXT_SPECIFIC | (n))
41#define ASN_TAG_OPTIONAL 0xA0
42#define ASN_TAG_OPTIONAL_N(n) (ASN_TAG_OPTIONAL | (n))
50 case 0x0:
return L"EOC";
51 case 0x1:
return L"BOOL";
52 case 0x2:
return L"INTEGER";
55 case 0x5:
return L"NULL";
57 case 0x7:
return L"Object Descriptor";
58 case 0x8:
return L"EXTERNAL";
59 case 0x9:
return L"REAL";
60 case 0xA:
return L"ENUMERATED";
61 case 0xB:
return L"EMBEDDED PDV";
62 case 0xC:
return L"UTF8String";
63 case 0xD:
return L"RELATIVE-OID";
64 case 0xE:
return L"TIME";
65 case 0xF:
return L"Reserved";
68 case 0x12:
return L"NumericString";
69 case 0x13:
return L"PRINTABLE_STRING";
70 case 0x14:
return L"T61String";
71 case 0x15:
return L"VideotexString";
72 case 0x16:
return L"IA5String";
73 case 0x17:
return L"UTC_TIME";
74 case 0x18:
return L"GeneralizedTime";
75 case 0x19:
return L"GraphicString";
76 case 0x1A:
return L"VisibleString";
77 case 0x1B:
return L"GeneralString";
78 case 0x1C:
return L"UniversalString";
79 case 0x1D:
return L"CHARACTER STRING";
80 case 0x1E:
return L"BMPString";
81 case 0x1F:
return L"DATE";
82 case 0x20:
return L"CONSTRUCTED";
135 if ((
pData[0] & 0x1f) != 0x1f)
138 dwTagAndClass =
pData[0];
148 dwTagAndClass |= (
pData[
n] & 0x7f);
163 dwTagAndClass |= (dwClass << (32-3));
173 if (!(
pData[0] & 0x80))
180 if (dwBytes == 0 || dwBytes > 8 || dwBytes + 1 >
dwSize)
225 while (dwPadding > 50)
227 ConPrintf(
StdOut,
L"%*s; %s (%x Bytes)\n", 50 - dwPadding,
L"", wszTag, dwTagLength);
241 if (pInfo && pInfo->pszOID && !
_stricmp(pInfo->pszOID,
Names->Oid))
252 Names->Names[
Names->NumberOfNames++] = pInfo->pwszName;
276 dwValue |=
pData[
n] & 0x7f;
289 DWORD id1 = dwValue / 40;
290 DWORD id2 = dwValue % 40;
295 id2 += (id1 - 2) * 40;
308 if (dwValue ||
count)
410 ConPrintf(
StdOut,
L"CertUtil: -asn command unexpected failure parsing tag near 0x%x\n",
pData - pRoot);
431 switch (dwTagAndClass)
443 wszPrefix[
len] =
'\0';
495 if (!fRead || cbRead !=
dwSize)
BOOL ParseTag(PBYTE &pData, DWORD &dwSize, DWORD &dwTagAndClass)
#define ASN_TAG_BITSTRING
BOOL WINAPI CryptOIDEnumCallback(_In_ PCCRYPT_OID_INFO pInfo, _Inout_opt_ void *pvArg)
#define ASN_TAG_OPTIONAL_N(n)
BOOL Move(DWORD dwLen, PBYTE &pData, DWORD &dwSize)
#define ASN_TAG_OBJECT_ID
LPCWSTR TagToName(DWORD dwTag)
BOOL asn_dump(LPCWSTR Filename)
BOOL ParseLength(PBYTE &pData, DWORD &dwSize, DWORD &dwLength)
#define ASN_TAG_IS_CONSTRUCTED
void PrintOID(PBYTE pRoot, PBYTE pHeader, PBYTE pData, DWORD dwSize, PWSTR wszPrefix)
#define ASN_TAG_OCTET_STRING
#define ASN_TAG_CONTEXT_SPECIFIC_N(n)
void PrintTag(PBYTE pRoot, PBYTE pHeader, DWORD dwTag, DWORD dwTagLength, PBYTE pData, PWSTR wszPrefix)
BOOL ParseAsn(PBYTE pRoot, PBYTE pData, DWORD dwSize, PWSTR wszPrefix, BOOL fPrint)
#define ASN_TAG_SEQUENCE_RAW
DWORD HexDump(PBYTE pRoot, PBYTE pData, DWORD dwSize, PWSTR wszPrefix)
void ConPuts(FILE *fp, LPCWSTR psz)
void ConPrintf(FILE *fp, LPCWSTR psz,...)
BOOL WINAPI CryptEnumOIDInfo(DWORD dwGroupId, DWORD dwFlags, void *pvArg, PFN_CRYPT_ENUM_OID_INFO pfnEnumOIDInfo)
static const WCHAR szOID[]
#define ReadFile(a, b, c, d, e)
#define INVALID_HANDLE_VALUE
static DWORD DWORD * dwLength
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
IN PVCB IN PBCB OUT PDIRENT IN USHORT IN POEM_STRING Filename
GLuint GLuint GLsizei count
FxContextHeader * pHeader
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
HLOCAL NTAPI LocalFree(HLOCAL hMem)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
void __cdecl __debugbreak(void)
#define FILE_FLAG_SEQUENTIAL_SCAN
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
STRSAFEAPI StringCchCatW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
STRSAFEAPI StringCchPrintfExA(STRSAFE_LPSTR pszDest, size_t cchDest, STRSAFE_LPSTR *ppszDestEnd, size_t *pcchRemaining, STRSAFE_DWORD dwFlags, STRSAFE_LPCSTR pszFormat,...)
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
DWORD WINAPI GetLastError(void)
#define INVALID_FILE_SIZE