|
@@ -35,6 +35,9 @@
|
|
#include <shellapi.h>
|
|
#include <shellapi.h>
|
|
#include <shlobj.h>
|
|
#include <shlobj.h>
|
|
|
|
|
|
|
|
+#include <openssl/evp.h>
|
|
|
|
+#include <openssl/ec.h>
|
|
|
|
+
|
|
// Process name list of incompatible anti-virus software
|
|
// Process name list of incompatible anti-virus software
|
|
static BAD_PROCESS bad_processes[] =
|
|
static BAD_PROCESS bad_processes[] =
|
|
{
|
|
{
|
|
@@ -5566,17 +5569,58 @@ void PrintCertInfo(HWND hWnd, CERT_DLG *p)
|
|
GetDateTimeStrEx64(tmp, sizeof(tmp), SystemToLocal64(x->notAfter), NULL);
|
|
GetDateTimeStrEx64(tmp, sizeof(tmp), SystemToLocal64(x->notAfter), NULL);
|
|
LvInsert(hWnd, L_CERTINFO, ICO_CERT, NULL, 2, _UU("CERT_NOT_AFTER"), tmp);
|
|
LvInsert(hWnd, L_CERTINFO, ICO_CERT, NULL, 2, _UU("CERT_NOT_AFTER"), tmp);
|
|
|
|
|
|
- // Number of bits
|
|
|
|
- if (x->is_compatible_bit)
|
|
|
|
- {
|
|
|
|
- UniFormat(tmp, sizeof(tmp), _UU("CERT_BITS_FORMAT"), x->bits);
|
|
|
|
- LvInsert(hWnd, L_CERTINFO, ICO_CERT, NULL, 2, _UU("CERT_BITS"), tmp);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
// Public key
|
|
// Public key
|
|
k = GetKFromX(x);
|
|
k = GetKFromX(x);
|
|
if (k != NULL)
|
|
if (k != NULL)
|
|
{
|
|
{
|
|
|
|
+ UINT type = EVP_PKEY_base_id(k->pkey);
|
|
|
|
+ switch (type)
|
|
|
|
+ {
|
|
|
|
+ case EVP_PKEY_RSA:
|
|
|
|
+ LvInsert(hWnd, L_CERTINFO, ICO_CERT, NULL, 2, _UU("CERT_KEY_ALGORITHM"), L"RSA");
|
|
|
|
+ UniFormat(tmp, sizeof(tmp), _UU("CERT_BITS_FORMAT"), x->bits);
|
|
|
|
+ LvInsert(hWnd, L_CERTINFO, ICO_CERT, NULL, 2, _UU("CERT_BITS"), tmp);
|
|
|
|
+ break;
|
|
|
|
+ case EVP_PKEY_EC:
|
|
|
|
+ LvInsert(hWnd, L_CERTINFO, ICO_CERT, NULL, 2, _UU("CERT_KEY_ALGORITHM"), L"ECDSA");
|
|
|
|
+ UniFormat(tmp, sizeof(tmp), _UU("CERT_BITS_FORMAT"), x->bits);
|
|
|
|
+ LvInsert(hWnd, L_CERTINFO, ICO_CERT, NULL, 2, _UU("CERT_BITS"), tmp);
|
|
|
|
+
|
|
|
|
+# ifndef OPENSSL_NO_EC
|
|
|
|
+ EC_KEY *key = EVP_PKEY_get0_EC_KEY(k->pkey);
|
|
|
|
+ if (key == NULL)
|
|
|
|
+ {
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ EC_GROUP *group = EC_KEY_get0_group(key);
|
|
|
|
+ if (group == NULL)
|
|
|
|
+ {
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ int nid = EC_GROUP_get_curve_name(group);
|
|
|
|
+ if (nid == 0)
|
|
|
|
+ {
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (StrToUni(tmp, sizeof(tmp), OBJ_nid2sn(nid)) > 0)
|
|
|
|
+ {
|
|
|
|
+ wchar_t *nname = CopyStrToUni(EC_curve_nid2nist(nid));
|
|
|
|
+ if (nname)
|
|
|
|
+ {
|
|
|
|
+ UniFormat(tmp, sizeof(tmp), L"%s (%s)", tmp, nname);
|
|
|
|
+ }
|
|
|
|
+ LvInsert(hWnd, L_CERTINFO, ICO_CERT, NULL, 2, _UU("CERT_KEY_PARAMETER"), tmp);
|
|
|
|
+ Free(nname);
|
|
|
|
+ }
|
|
|
|
+# endif
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
BUF *b = KToBuf(k, false, NULL);
|
|
BUF *b = KToBuf(k, false, NULL);
|
|
s_tmp = CopyBinToStrEx(b->Buf, b->Size);
|
|
s_tmp = CopyBinToStrEx(b->Buf, b->Size);
|
|
StrToUni(tmp, sizeof(tmp), s_tmp);
|
|
StrToUni(tmp, sizeof(tmp), s_tmp);
|