Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
onlyoffice_core
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boris Kocherov
onlyoffice_core
Commits
1d003863
Commit
1d003863
authored
Apr 17, 2017
by
Oleg Korshul
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
.
parent
d356a305
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
279 additions
and
295 deletions
+279
-295
DesktopEditor/xmlsec/test/windows_list_serts/main.cpp
DesktopEditor/xmlsec/test/windows_list_serts/main.cpp
+279
-295
No files found.
DesktopEditor/xmlsec/test/windows_list_serts/main.cpp
View file @
1d003863
...
...
@@ -23,319 +23,303 @@ bool Verify(HCERTSTORE hStoreHandle, PCCERT_CONTEXT pCertContext, std::wstring s
void
main
(
void
)
{
//-------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// This program lists all of the certificates in a system certificate
// store and all of the property identifier numbers of those
// certificates. It also demonstrates the use of two
// UI functions. One, CryptUIDlgSelectCertificateFromStore,
// displays the certificates in a store
// and allows the user to select one of them,
// The other, CryptUIDlgViewContext,
// displays the contents of a single certificate.
//-------------------------------------------------------------------
// Declare and initialize variables.
HCERTSTORE
hCertStore
;
PCCERT_CONTEXT
pCertContext
=
NULL
;
char
pszNameString
[
256
];
char
pszStoreName
[
256
];
void
*
pvData
;
DWORD
cbData
;
DWORD
dwPropId
=
0
;
// Zero must be used on the first
// call to the function. After that,
// the last returned property identifier is passed.
//-------------------------------------------------------------------
// Begin processing and Get the name of the system certificate store
// to be enumerated. Output here is to stderr so that the program
// can be run from the command line and stdout can be redirected
// to a file.
/*
fprintf(stderr,"Please enter the store name:");
gets_s(pszStoreName, sizeof(pszStoreName));
fprintf(stderr,"The store name is %s.\n",pszStoreName);
*/
pszStoreName
[
0
]
=
'M'
;
pszStoreName
[
1
]
=
'Y'
;
pszStoreName
[
2
]
=
'\0'
;
//-------------------------------------------------------------------
// Open a system certificate store.
if
(
hCertStore
=
CertOpenSystemStore
(
NULL
,
pszStoreName
))
{
fprintf
(
stderr
,
"The %s store has been opened.
\n
"
,
pszStoreName
);
}
else
{
// If the store was not opened, exit to an error routine.
MyHandleError
(
"The store was not opened."
);
}
//-------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// This program lists all of the certificates in a system certificate
// store and all of the property identifier numbers of those
// certificates. It also demonstrates the use of two
// UI functions. One, CryptUIDlgSelectCertificateFromStore,
// displays the certificates in a store
// and allows the user to select one of them,
// The other, CryptUIDlgViewContext,
// displays the contents of a single certificate.
//-------------------------------------------------------------------
// Declare and initialize variables.
HCERTSTORE
hCertStore
;
PCCERT_CONTEXT
pCertContext
=
NULL
;
char
pszNameString
[
256
];
char
pszStoreName
[
256
];
void
*
pvData
;
DWORD
cbData
;
DWORD
dwPropId
=
0
;
// Zero must be used on the first
// call to the function. After that,
// the last returned property identifier is passed.
//-------------------------------------------------------------------
// Begin processing and Get the name of the system certificate store
// to be enumerated. Output here is to stderr so that the program
// can be run from the command line and stdout can be redirected
// to a file.
/*
fprintf(stderr,"Please enter the store name:");
gets_s(pszStoreName, sizeof(pszStoreName));
fprintf(stderr,"The store name is %s.\n",pszStoreName);
*/
pszStoreName
[
0
]
=
'M'
;
pszStoreName
[
1
]
=
'Y'
;
pszStoreName
[
2
]
=
'\0'
;
//-------------------------------------------------------------------
// Open a system certificate store.
if
(
hCertStore
=
CertOpenSystemStore
(
NULL
,
pszStoreName
))
{
fprintf
(
stderr
,
"The %s store has been opened.
\n
"
,
pszStoreName
);
}
else
{
// If the store was not opened, exit to an error routine.
MyHandleError
(
"The store was not opened."
);
}
//-------------------------------------------------------------------
// Use CertEnumCertificatesInStore to get the certificates
// from the open store. pCertContext must be reset to
// NULL to retrieve the first certificate in the store.
//-------------------------------------------------------------------
// Use CertEnumCertificatesInStore to get the certificates
// from the open store. pCertContext must be reset to
// NULL to retrieve the first certificate in the store.
// pCertContext = NULL;
// pCertContext = NULL;
#ifdef ENUMS_CERTS
while
(
pCertContext
=
CertEnumCertificatesInStore
(
hCertStore
,
pCertContext
))
{
//-------------------------------------------------------------------
// A certificate was retrieved. Continue.
//-------------------------------------------------------------------
// Display the certificate.
if
(
CryptUIDlgViewContext
(
CERT_STORE_CERTIFICATE_CONTEXT
,
pCertContext
,
NULL
,
NULL
,
0
,
NULL
))
{
// printf("OK\n");
}
else
{
MyHandleError
(
"UI failed."
);
}
while
(
pCertContext
=
CertEnumCertificatesInStore
(
hCertStore
,
pCertContext
))
{
//-------------------------------------------------------------------
// A certificate was retrieved. Continue.
//-------------------------------------------------------------------
// Display the certificate.
if
(
CertGetNameString
(
pCertContext
,
CERT_NAME_SIMPLE_DISPLAY_TYPE
,
0
,
NULL
,
pszNameString
,
128
))
{
printf
(
"
\n
Certificate for %s
\n
"
,
pszNameString
);
}
else
fprintf
(
stderr
,
"CertGetName failed.
\n
"
);
//-------------------------------------------------------------------
// Loop to find all of the property identifiers for the specified
// certificate. The loop continues until
// CertEnumCertificateContextProperties returns zero.
while
(
dwPropId
=
CertEnumCertificateContextProperties
(
pCertContext
,
// The context whose properties are to be listed.
dwPropId
))
// Number of the last property found.
// This must be zero to find the first
// property identifier.
{
//-------------------------------------------------------------------
// When the loop is executed, a property identifier has been found.
// Print the property number.
printf
(
"Property # %d found->"
,
dwPropId
);
//-------------------------------------------------------------------
// Indicate the kind of property found.
switch
(
dwPropId
)
{
case
CERT_FRIENDLY_NAME_PROP_ID
:
{
printf
(
"Display name: "
);
break
;
}
case
CERT_SIGNATURE_HASH_PROP_ID
:
{
printf
(
"Signature hash identifier "
);
break
;
}
case
CERT_KEY_PROV_HANDLE_PROP_ID
:
{
printf
(
"KEY PROVE HANDLE"
);
break
;
}
case
CERT_KEY_PROV_INFO_PROP_ID
:
{
printf
(
"KEY PROV INFO PROP ID "
);
break
;
}
case
CERT_SHA1_HASH_PROP_ID
:
{
printf
(
"SHA1 HASH identifier"
);
break
;
}
case
CERT_MD5_HASH_PROP_ID
:
{
printf
(
"md5 hash identifier "
);
break
;
}
case
CERT_KEY_CONTEXT_PROP_ID
:
{
printf
(
"KEY CONTEXT PROP identifier"
);
break
;
}
case
CERT_KEY_SPEC_PROP_ID
:
{
printf
(
"KEY SPEC PROP identifier"
);
break
;
}
case
CERT_ENHKEY_USAGE_PROP_ID
:
{
printf
(
"ENHKEY USAGE PROP identifier"
);
break
;
}
case
CERT_NEXT_UPDATE_LOCATION_PROP_ID
:
{
printf
(
"NEXT UPDATE LOCATION PROP identifier"
);
break
;
}
case
CERT_PVK_FILE_PROP_ID
:
{
printf
(
"PVK FILE PROP identifier "
);
break
;
}
case
CERT_DESCRIPTION_PROP_ID
:
{
printf
(
"DESCRIPTION PROP identifier "
);
break
;
}
case
CERT_ACCESS_STATE_PROP_ID
:
{
printf
(
"ACCESS STATE PROP identifier "
);
break
;
}
case
CERT_SMART_CARD_DATA_PROP_ID
:
{
printf
(
"SMART_CARD DATA PROP identifier "
);
break
;
}
case
CERT_EFS_PROP_ID
:
{
printf
(
"EFS PROP identifier "
);
break
;
}
case
CERT_FORTEZZA_DATA_PROP_ID
:
{
printf
(
"FORTEZZA DATA PROP identifier "
);
break
;
}
case
CERT_ARCHIVED_PROP_ID
:
{
printf
(
"ARCHIVED PROP identifier "
);
break
;
}
case
CERT_KEY_IDENTIFIER_PROP_ID
:
{
printf
(
"KEY IDENTIFIER PROP identifier "
);
break
;
}
case
CERT_AUTO_ENROLL_PROP_ID
:
{
printf
(
"AUTO ENROLL identifier. "
);
break
;
}
}
// End switch.
//-------------------------------------------------------------------
// Retrieve information on the property by first getting the
// property size.
// For more information, see CertGetCertificateContextProperty.
if
(
CertGetCertificateContextProperty
(
pCertContext
,
dwPropId
,
NULL
,
&
cbData
))
if
(
CryptUIDlgViewContext
(
CERT_STORE_CERTIFICATE_CONTEXT
,
pCertContext
,
NULL
,
NULL
,
0
,
NULL
))
{
//
Continue.
//
printf("OK\n");
}
else
{
// If the first call to the function failed,
// exit to an error routine.
MyHandleError
(
"Call #1 to GetCertContextProperty failed."
);
{
MyHandleError
(
"UI failed."
);
}
//-------------------------------------------------------------------
// The call succeeded. Use the size to allocate memory
// for the property.
if
(
pvData
=
(
void
*
)
malloc
(
cbData
))
{
// Memory is allocated. Continue.
}
else
{
// If memory allocation failed, exit to an error routine.
MyHandleError
(
"Memory allocation failed."
);
}
//----------------------------------------------------------------
// Allocation succeeded. Retrieve the property data.
if
(
CertGetCertificateContextProperty
(
pCertContext
,
dwPropId
,
pvData
,
&
cbData
))
if
(
CertGetNameString
(
pCertContext
,
CERT_NAME_SIMPLE_DISPLAY_TYPE
,
0
,
NULL
,
pszNameString
,
128
))
{
// The data has been retrieved. Continue.
printf
(
"
\n
Certificate for %s
\n
"
,
pszNameString
);
}
else
fprintf
(
stderr
,
"CertGetName failed.
\n
"
);
//-------------------------------------------------------------------
// Loop to find all of the property identifiers for the specified
// certificate. The loop continues until
// CertEnumCertificateContextProperties returns zero.
while
(
dwPropId
=
CertEnumCertificateContextProperties
(
pCertContext
,
// The context whose properties are to be listed.
dwPropId
))
// Number of the last property found.
// This must be zero to find the first
// property identifier.
{
// If an error occurred in the second call,
// exit to an error routine.
MyHandleError
(
"Call #2 failed."
);
}
//---------------------------------------------------------------
// Show the results.
printf
(
"The Property Content is %d
\n
"
,
pvData
);
//----------------------------------------------------------------
// Free the certificate context property memory.
free
(
pvData
);
}
// End inner while.
}
// End outer while.
//-------------------------------------------------------------------
// When the loop is executed, a property identifier has been found.
// Print the property number.
printf
(
"Property # %d found->"
,
dwPropId
);
//-------------------------------------------------------------------
// Indicate the kind of property found.
switch
(
dwPropId
)
{
case
CERT_FRIENDLY_NAME_PROP_ID
:
{
printf
(
"Display name: "
);
break
;
}
case
CERT_SIGNATURE_HASH_PROP_ID
:
{
printf
(
"Signature hash identifier "
);
break
;
}
case
CERT_KEY_PROV_HANDLE_PROP_ID
:
{
printf
(
"KEY PROVE HANDLE"
);
break
;
}
case
CERT_KEY_PROV_INFO_PROP_ID
:
{
printf
(
"KEY PROV INFO PROP ID "
);
break
;
}
case
CERT_SHA1_HASH_PROP_ID
:
{
printf
(
"SHA1 HASH identifier"
);
break
;
}
case
CERT_MD5_HASH_PROP_ID
:
{
printf
(
"md5 hash identifier "
);
break
;
}
case
CERT_KEY_CONTEXT_PROP_ID
:
{
printf
(
"KEY CONTEXT PROP identifier"
);
break
;
}
case
CERT_KEY_SPEC_PROP_ID
:
{
printf
(
"KEY SPEC PROP identifier"
);
break
;
}
case
CERT_ENHKEY_USAGE_PROP_ID
:
{
printf
(
"ENHKEY USAGE PROP identifier"
);
break
;
}
case
CERT_NEXT_UPDATE_LOCATION_PROP_ID
:
{
printf
(
"NEXT UPDATE LOCATION PROP identifier"
);
break
;
}
case
CERT_PVK_FILE_PROP_ID
:
{
printf
(
"PVK FILE PROP identifier "
);
break
;
}
case
CERT_DESCRIPTION_PROP_ID
:
{
printf
(
"DESCRIPTION PROP identifier "
);
break
;
}
case
CERT_ACCESS_STATE_PROP_ID
:
{
printf
(
"ACCESS STATE PROP identifier "
);
break
;
}
case
CERT_SMART_CARD_DATA_PROP_ID
:
{
printf
(
"SMART_CARD DATA PROP identifier "
);
break
;
}
case
CERT_EFS_PROP_ID
:
{
printf
(
"EFS PROP identifier "
);
break
;
}
case
CERT_FORTEZZA_DATA_PROP_ID
:
{
printf
(
"FORTEZZA DATA PROP identifier "
);
break
;
}
case
CERT_ARCHIVED_PROP_ID
:
{
printf
(
"ARCHIVED PROP identifier "
);
break
;
}
case
CERT_KEY_IDENTIFIER_PROP_ID
:
{
printf
(
"KEY IDENTIFIER PROP identifier "
);
break
;
}
case
CERT_AUTO_ENROLL_PROP_ID
:
{
printf
(
"AUTO ENROLL identifier. "
);
break
;
}
}
// End switch.
//-------------------------------------------------------------------
// Retrieve information on the property by first getting the
// property size.
// For more information, see CertGetCertificateContextProperty.
if
(
CertGetCertificateContextProperty
(
pCertContext
,
dwPropId
,
NULL
,
&
cbData
))
{
// Continue.
}
else
{
// If the first call to the function failed,
// exit to an error routine.
MyHandleError
(
"Call #1 to GetCertContextProperty failed."
);
}
//-------------------------------------------------------------------
// The call succeeded. Use the size to allocate memory
// for the property.
if
(
pvData
=
(
void
*
)
malloc
(
cbData
))
{
// Memory is allocated. Continue.
}
else
{
// If memory allocation failed, exit to an error routine.
MyHandleError
(
"Memory allocation failed."
);
}
//----------------------------------------------------------------
// Allocation succeeded. Retrieve the property data.
if
(
CertGetCertificateContextProperty
(
pCertContext
,
dwPropId
,
pvData
,
&
cbData
))
{
// The data has been retrieved. Continue.
}
else
{
// If an error occurred in the second call,
// exit to an error routine.
MyHandleError
(
"Call #2 failed."
);
}
//---------------------------------------------------------------
// Show the results.
printf
(
"The Property Content is %d
\n
"
,
pvData
);
//----------------------------------------------------------------
// Free the certificate context property memory.
free
(
pvData
);
}
// End inner while.
}
// End outer while.
#endif
//-------------------------------------------------------------------
// Select a new certificate by using the user interface.
if
(
!
(
pCertContext
=
CryptUIDlgSelectCertificateFromStore
(
hCertStore
,
NULL
,
NULL
,
NULL
,
CRYPTUI_SELECT_LOCATION_COLUMN
,
0
,
NULL
)))
{
MyHandleError
(
"Select UI failed."
);
}
//-------------------------------------------------------------------
// Clean up.
/////
bool
bRes
=
true
;
bRes
=
Sign
(
hCertStore
,
pCertContext
,
NSFile
::
GetProcessDirectory
()
+
L"/document.xml"
,
NSFile
::
GetProcessDirectory
()
+
L"/result.txt"
);
bRes
=
Verify
(
hCertStore
,
pCertContext
,
NSFile
::
GetProcessDirectory
()
+
L"/document.xml"
,
NSFile
::
GetProcessDirectory
()
+
L"/result.txt"
);
///
//-------------------------------------------------------------------
// Select a new certificate by using the user interface.
if
(
!
(
pCertContext
=
CryptUIDlgSelectCertificateFromStore
(
hCertStore
,
NULL
,
NULL
,
NULL
,
CRYPTUI_SELECT_LOCATION_COLUMN
,
0
,
NULL
)))
{
MyHandleError
(
"Select UI failed."
);
}
CertFreeCertificateContext
(
pCertContext
);
CertCloseStore
(
hCertStore
,
0
);
printf
(
"The function completed successfully.
\n
"
);
}
// End of main.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool
bRes
=
true
;
bRes
=
Sign
(
hCertStore
,
pCertContext
,
NSFile
::
GetProcessDirectory
()
+
L"/document.xml"
,
NSFile
::
GetProcessDirectory
()
+
L"/result.txt"
);
bRes
=
Verify
(
hCertStore
,
pCertContext
,
NSFile
::
GetProcessDirectory
()
+
L"/document.xml"
,
NSFile
::
GetProcessDirectory
()
+
L"/result.txt"
);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CertFreeCertificateContext
(
pCertContext
);
CertCloseStore
(
hCertStore
,
0
);
printf
(
"The function completed successfully.
\n
"
);
}
void
MyHandleError
(
LPTSTR
psz
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment