You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
199 lines
4.9 KiB
199 lines
4.9 KiB
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 1996 - 1999
|
|
//
|
|
// File: makecat.cpp
|
|
//
|
|
// Contents: Microsoft Internet Security Catalog Utilities
|
|
//
|
|
// Functions: wmain
|
|
//
|
|
// History: 05-May-1997 pberkman created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
|
|
#include <stdio.h>
|
|
#include <windows.h>
|
|
#include <io.h>
|
|
#include <wchar.h>
|
|
#include <malloc.h>
|
|
#include <memory.h>
|
|
|
|
#include "unicode.h"
|
|
#include "wincrypt.h"
|
|
#include "wintrust.h"
|
|
#include "mssip.h"
|
|
#include "mscat.h"
|
|
#include "dbgdef.h"
|
|
|
|
#include "gendefs.h"
|
|
#include "printfu.hxx"
|
|
#include "cwargv.hxx"
|
|
|
|
#include "resource.h"
|
|
|
|
|
|
WCHAR *pwszFile = NULL;
|
|
PrintfU_ *pPrint = NULL;
|
|
int iRet = 0;
|
|
|
|
WCHAR gszUsage[] = L"usage: calchash filename\n -?: this screen\n" ;
|
|
|
|
const char RgchHex[] = {'0', '1', '2', '3', '4', '5', '6', '7',
|
|
'8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
void FormatHashString(LPSTR *ppString, DWORD cbBlob, BYTE *pblob)
|
|
{
|
|
DWORD i, j = 0;
|
|
BYTE *pb = NULL;
|
|
DWORD numCharsInserted = 0;
|
|
LPSTR psz;
|
|
|
|
*ppString = NULL;
|
|
pb = pblob;
|
|
|
|
// fill the buffer
|
|
i=0;
|
|
while (j < cbBlob)
|
|
{
|
|
if ((*ppString) == NULL)
|
|
{
|
|
psz = NULL;
|
|
*ppString = (LPSTR) malloc(3 * sizeof(char));
|
|
}
|
|
else
|
|
{
|
|
psz = *ppString;
|
|
#pragma prefast(suppress:308, "the pointer was saved above (PREfast bug 506)")
|
|
*ppString = (LPSTR) realloc(*ppString, (j+1) * 3 * sizeof(char));
|
|
}
|
|
|
|
if (*ppString == NULL)
|
|
{
|
|
if (psz != NULL)
|
|
{
|
|
free(psz);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
(*ppString)[i++] = RgchHex[(*pb & 0xf0) >> 4];
|
|
(*ppString)[i++] = RgchHex[*pb & 0x0f];
|
|
(*ppString)[i++] = ' ';
|
|
|
|
pb++;
|
|
j++;
|
|
}
|
|
|
|
(*ppString)[i-1] = 0;
|
|
}
|
|
|
|
|
|
extern "C" int __cdecl wmain(int argc, WCHAR **wargv)
|
|
{
|
|
int cMember;
|
|
cWArgv_ *pArgs;
|
|
BOOL fFailed;
|
|
CRYPTCATCDF *pCDF;
|
|
CRYPTCATMEMBER *pMember;
|
|
LPWSTR pwszMemberTag;
|
|
CRYPTCATATTRIBUTE *pAttr;
|
|
BOOL fContinueOnError;
|
|
BYTE pbHash[40];
|
|
DWORD cbHash = sizeof(pbHash);
|
|
HANDLE hFile;
|
|
LPSTR psz;
|
|
|
|
pCDF = NULL;
|
|
|
|
if (!(pArgs = new cWArgv_((HINSTANCE)GetModuleHandle(NULL), &fFailed)))
|
|
{
|
|
goto MemoryError;
|
|
}
|
|
|
|
if (fFailed)
|
|
{
|
|
goto MemoryError;
|
|
}
|
|
|
|
pArgs->AddUsageText(IDS_USAGETEXT_USAGE, IDS_USAGETEXT_OPTIONS,
|
|
IDS_USAGETEXT_OPTPARAM, IDS_USAGETEXT_FILENAME, IDS_USAGETEXT_OPTPARAM);
|
|
|
|
pArgs->Add2List(IDS_PARAM_HELP, IDS_PARAMTEXT_HELP, WARGV_VALUETYPE_BOOL, (void *)FALSE);
|
|
|
|
pArgs->Fill(argc, wargv);
|
|
|
|
if (!(pArgs->Fill(argc, wargv)) ||
|
|
(pArgs->GetValue(IDS_PARAM_HELP)))
|
|
{
|
|
wprintf(L"%s", gszUsage);
|
|
goto NeededHelp;
|
|
}
|
|
|
|
if (!(pwszFile = pArgs->GetFileName()))
|
|
{
|
|
wprintf(L"%s",gszUsage);
|
|
goto ParamError;
|
|
}
|
|
|
|
pPrint = new PrintfU_;
|
|
|
|
SetLastError(0);
|
|
|
|
if ((hFile = CreateFileU(pwszFile,
|
|
GENERIC_READ,
|
|
FILE_SHARE_READ,
|
|
NULL,
|
|
OPEN_EXISTING,
|
|
FILE_ATTRIBUTE_NORMAL,
|
|
NULL)) == INVALID_HANDLE_VALUE)
|
|
{
|
|
|
|
wprintf(L"Cannot open file - GLE = %lx\n", GetLastError());
|
|
goto CATCloseError;
|
|
}
|
|
|
|
if (!CryptCATAdminCalcHashFromFileHandle(hFile,
|
|
&cbHash,
|
|
pbHash,
|
|
0))
|
|
{
|
|
goto CATCloseError;
|
|
}
|
|
|
|
FormatHashString(&psz, cbHash, pbHash);
|
|
if (psz != NULL)
|
|
{
|
|
printf("%s\n", psz);
|
|
free(psz);
|
|
}
|
|
else
|
|
{
|
|
goto MemoryError;
|
|
}
|
|
|
|
CommonReturn:
|
|
DELETE_OBJECT(pArgs);
|
|
DELETE_OBJECT(pPrint);
|
|
|
|
return(iRet);
|
|
|
|
ErrorReturn:
|
|
iRet = 1;
|
|
goto CommonReturn;
|
|
|
|
TRACE_ERROR_EX(DBG_SS_APP, MemoryError);
|
|
TRACE_ERROR_EX(DBG_SS_APP, ParamError);
|
|
TRACE_ERROR_EX(DBG_SS_APP, NeededHelp);
|
|
TRACE_ERROR_EX(DBG_SS_APP, CATCloseError);
|
|
}
|
|
|
|
|
|
|