103 lines
2.2 KiB
C
103 lines
2.2 KiB
C
#undef UNICODE // ## Not Yet
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <ctype.h>
|
|
#include <windows.h>
|
|
#include <wincrypt.h>
|
|
|
|
CHAR pszMyName[64];
|
|
HCRYPTKEY hClientKey;
|
|
HCRYPTPROV hMe;
|
|
HCRYPTKEY hKey2;
|
|
|
|
BOOL Logon(int cArg);
|
|
|
|
int __cdecl main(int cArg, char *rgszArg[])
|
|
{
|
|
|
|
// Logon to provider
|
|
if (!Logon(cArg))
|
|
goto exit;
|
|
|
|
exit:
|
|
return(0);
|
|
|
|
}
|
|
|
|
BOOL Logon(int cArg)
|
|
{
|
|
HCRYPTKEY hTestKey;
|
|
|
|
pszMyName[0] = 0;
|
|
|
|
if (RCRYPT_FAILED(CryptAcquireContext(&hMe, pszMyName, MS_DEF_PROV,
|
|
PROV_RSA_FULL, 0)))
|
|
{
|
|
if (cArg > 1)
|
|
printf("\nUser doesn't exists, try to create it ");
|
|
|
|
if (RCRYPT_FAILED(CryptAcquireContext(&hMe, pszMyName,
|
|
MS_DEF_PROV, PROV_RSA_FULL, CRYPT_NEWKEYSET)))
|
|
{
|
|
if (cArg > 1)
|
|
printf("FAIL Error = %x\n", GetLastError());
|
|
return(FALSE);
|
|
}
|
|
else
|
|
{
|
|
if (cArg > 1)
|
|
printf("SUCCEED\n");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (cArg > 1)
|
|
printf("CryptAcquireContext for user: %s\n", pszMyName);
|
|
}
|
|
|
|
|
|
if (RCRYPT_FAILED(CryptGetUserKey(hMe, AT_SIGNATURE, &hTestKey)))
|
|
{
|
|
|
|
if (cArg > 1)
|
|
printf("Create signature key for %s: ", pszMyName);
|
|
|
|
if (RCRYPT_FAILED(CryptGenKey(hMe, CALG_RSA_SIGN,
|
|
CRYPT_EXPORTABLE, &hClientKey)))
|
|
{
|
|
if (cArg > 1)
|
|
printf("FAIL Error = %x\n", GetLastError());
|
|
return(FALSE);
|
|
}
|
|
if (cArg > 1)
|
|
printf("SUCCEED\n");
|
|
}
|
|
else
|
|
CryptDestroyKey(hTestKey);
|
|
|
|
if (RCRYPT_FAILED(CryptGetUserKey(hMe, AT_KEYEXCHANGE, &hTestKey)))
|
|
{
|
|
if (cArg > 1 )
|
|
printf("Create key exchange for %s: ", pszMyName);
|
|
|
|
if (RCRYPT_FAILED(CryptGenKey(hMe, CALG_RSA_KEYX,
|
|
CRYPT_EXPORTABLE, &hKey2)))
|
|
{
|
|
if (cArg > 1)
|
|
printf("FAIL Error = %x\n", GetLastError());
|
|
return(FALSE);
|
|
}
|
|
if (cArg > 1)
|
|
printf("SUCCEED\n");
|
|
}
|
|
else
|
|
CryptDestroyKey(hTestKey);
|
|
|
|
if (cArg > 1)
|
|
printf("Init completed\n");
|
|
|
|
return(TRUE);
|
|
|
|
}
|
|
|