| /* |
| * Copyright (c) 2016 Austin English |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA |
| */ |
| |
| #ifndef __NCRYPT_H__ |
| #define __NCRYPT_H__ |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #ifndef WINAPI |
| #define WINAPI __stdcall |
| #endif |
| |
| #ifndef __SECSTATUS_DEFINED__ |
| typedef LONG SECURITY_STATUS; |
| #define __SECSTATUS_DEFINED__ |
| #endif |
| |
| typedef struct _NCryptAlgorithmName { |
| LPWSTR pszName; |
| DWORD dwClass; |
| DWORD dwAlgOperations; |
| DWORD dwFlags; |
| } NCryptAlgorithmName; |
| |
| typedef struct _NCryptBuffer { |
| ULONG cbBuffer; |
| ULONG BufferType; |
| PVOID pvBuffer; |
| } NCryptBuffer, *PNCryptBuffer; |
| |
| typedef struct _NCryptBufferDesc { |
| ULONG ulVersion; |
| ULONG cBuffers; |
| PNCryptBuffer pBuffers; |
| } NCryptBufferDesc, *PNCryptBufferDesc; |
| |
| typedef struct NCryptKeyName { |
| LPWSTR pszName; |
| LPWSTR pszAlgid; |
| DWORD dwLegacyKeySpec; |
| DWORD dwFlags; |
| } NCryptKeyName; |
| |
| typedef struct __NCRYPT_SUPPORTED_LENGTHS { |
| DWORD dwMinLength; |
| DWORD dwMaxLength; |
| DWORD dwIncrement; |
| DWORD dwDefaultLength; |
| } NCRYPT_SUPPORTED_LENGTHS; |
| |
| typedef struct __NCRYPT_UI_POLICY { |
| DWORD dwVersion; |
| DWORD dwFlags; |
| LPCWSTR pszCreationTitle; |
| LPCWSTR pszFriendlyName; |
| LPCWSTR pszDescription; |
| } NCRYPT_UI_POLICY; |
| |
| typedef ULONG_PTR NCRYPT_HANDLE; |
| typedef ULONG_PTR NCRYPT_PROV_HANDLE; |
| typedef ULONG_PTR NCRYPT_KEY_HANDLE; |
| typedef ULONG_PTR NCRYPT_HASH_HANDLE; |
| typedef ULONG_PTR NCRYPT_SECRET_HANDLE; |
| |
| #define NCRYPT_KEY_STORAGE_INTERFACE 0x00010001 |
| #define NCRYPT_SCHANNEL_INTERFACE 0x00010002 |
| #define NCRYPT_SCHANNEL_SIGNATURE_INTERFACE 0x00010003 |
| #define NCRYPT_KEY_PROTECTION_INTERFACE 0x00010004 |
| |
| #define NCRYPT_SILENT_FLAG 0x00000040 |
| |
| #define NCRYPT_NO_PADDING_FLAG 0x00000001 |
| #define NCRYPT_PAD_PKCS1_FLAG 0x00000002 |
| #define NCRYPT_PAD_OAEP_FLAG 0x00000004 |
| #define NCRYPT_PAD_PSS_FLAG 0x00000008 |
| |
| #define NCRYPT_ALLOW_DECRYPT_FLAG 0x00000001 |
| #define NCRYPT_ALLOW_SIGNING_FLAG 0x00000002 |
| #define NCRYPT_ALLOW_KEY_AGREEMENT_FLAG 0x00000004 |
| #define NCRYPT_ALLOW_KEY_IMPORT_FLAG 0x00000008 |
| #define NCRYPT_ALLOW_ALL_USAGES 0x00ffffff |
| |
| #define NCRYPT_ALLOW_EXPORT_FLAG 0x00000001 |
| #define NCRYPT_ALLOW_PLAINTEXT_EXPORT_FLAG 0x00000002 |
| #define NCRYPT_ALLOW_ARCHIVING_FLAG 0x00000004 |
| #define NCRYPT_ALLOW_PLAINTEXT_ARCHIVING_FLAG 0x00000008 |
| |
| #define NCRYPT_NAME_PROPERTY L"Name" |
| #define NCRYPT_UNIQUE_NAME_PROPERTY L"Unique Name" |
| #define NCRYPT_ALGORITHM_PROPERTY L"Algorithm Name" |
| #define NCRYPT_LENGTH_PROPERTY L"Length" |
| #define NCRYPT_LENGTHS_PROPERTY L"Lengths" |
| #define NCRYPT_BLOCK_LENGTH_PROPERTY L"Block Length" |
| #define NCRYPT_UI_POLICY_PROPERTY L"UI Policy" |
| #define NCRYPT_EXPORT_POLICY_PROPERTY L"Export Policy" |
| #define NCRYPT_WINDOW_HANDLE_PROPERTY L"HWND Handle" |
| #define NCRYPT_USE_CONTEXT_PROPERTY L"Use Context" |
| #define NCRYPT_IMPL_TYPE_PROPERTY L"Impl Type" |
| #define NCRYPT_KEY_USAGE_PROPERTY L"Key Usage" |
| #define NCRYPT_KEY_TYPE_PROPERTY L"Key Type" |
| #define NCRYPT_VERSION_PROPERTY L"Version" |
| #define NCRYPT_SECURITY_DESCR_SUPPORT_PROPERTY L"Security Descr Support" |
| #define NCRYPT_SECURITY_DESCR_PROPERTY L"Security Descr" |
| #define NCRYPT_USE_COUNT_ENABLED_PROPERTY L"Enabled Use Count" |
| #define NCRYPT_USE_COUNT_PROPERTY L"Use Count" |
| #define NCRYPT_LAST_MODIFIED_PROPERTY L"Modified" |
| #define NCRYPT_MAX_NAME_LENGTH_PROPERTY L"Max Name Length" |
| #define NCRYPT_ALGORITHM_GROUP_PROPERTY L"Algorithm Group" |
| #define NCRYPT_PROVIDER_HANDLE_PROPERTY L"Provider Handle" |
| #define NCRYPT_PIN_PROPERTY L"SmartCardPin" |
| #define NCRYPT_READER_PROPERTY L"SmartCardReader" |
| #define NCRYPT_SMARTCARD_GUID_PROPERTY L"SmartCardGuid" |
| #define NCRYPT_CERTIFICATE_PROPERTY L"SmartCardKeyCertificate" |
| #define NCRYPT_PIN_PROMPT_PROPERTY L"SmartCardPinPrompt" |
| #define NCRYPT_USER_CERTSTORE_PROPERTY L"SmartCardUserCertStore" |
| #define NCRYPT_ROOT_CERTSTORE_PROPERTY L"SmartcardRootCertStore" |
| #define NCRYPT_SECURE_PIN_PROPERTY L"SmartCardSecurePin" |
| #define NCRYPT_ASSOCIATED_ECDH_KEY L"SmartCardAssociatedECDHKey" |
| #define NCRYPT_SCARD_PIN_ID L"SmartCardPinId" |
| #define NCRYPT_SCARD_PIN_INFO L"SmartCardPinInfo" |
| |
| SECURITY_STATUS WINAPI NCryptCreatePersistedKey(NCRYPT_PROV_HANDLE, NCRYPT_KEY_HANDLE *, const WCHAR *, const WCHAR *, |
| DWORD, DWORD); |
| SECURITY_STATUS WINAPI NCryptDecrypt(NCRYPT_KEY_HANDLE, BYTE *, DWORD, void *, BYTE *, DWORD, DWORD *, DWORD); |
| SECURITY_STATUS WINAPI NCryptEncrypt(NCRYPT_KEY_HANDLE, BYTE *, DWORD, void *, BYTE *, DWORD, DWORD *, DWORD); |
| SECURITY_STATUS WINAPI NCryptExportKey(NCRYPT_KEY_HANDLE, NCRYPT_KEY_HANDLE, const WCHAR *, NCryptBufferDesc *, BYTE *, |
| DWORD, DWORD *, DWORD); |
| SECURITY_STATUS WINAPI NCryptFinalizeKey(NCRYPT_KEY_HANDLE, DWORD); |
| SECURITY_STATUS WINAPI NCryptFreeObject(NCRYPT_HANDLE); |
| SECURITY_STATUS WINAPI NCryptGetProperty(NCRYPT_HANDLE, const WCHAR *, BYTE *, DWORD, DWORD *, DWORD); |
| SECURITY_STATUS WINAPI NCryptImportKey(NCRYPT_PROV_HANDLE, NCRYPT_KEY_HANDLE, const WCHAR *, NCryptBufferDesc *, |
| NCRYPT_KEY_HANDLE *, BYTE *, DWORD, DWORD); |
| SECURITY_STATUS WINAPI NCryptIsAlgSupported(NCRYPT_PROV_HANDLE, const WCHAR *, DWORD); |
| SECURITY_STATUS WINAPI NCryptOpenKey(NCRYPT_PROV_HANDLE, NCRYPT_KEY_HANDLE *, const WCHAR *, DWORD, DWORD); |
| SECURITY_STATUS WINAPI NCryptOpenStorageProvider(NCRYPT_PROV_HANDLE *, const WCHAR *, DWORD); |
| SECURITY_STATUS WINAPI NCryptSetProperty(NCRYPT_HANDLE, const WCHAR *, BYTE *, DWORD, DWORD); |
| SECURITY_STATUS WINAPI NCryptSignHash(NCRYPT_KEY_HANDLE, void *, BYTE *, DWORD, BYTE *, DWORD, DWORD *, DWORD); |
| SECURITY_STATUS WINAPI NCryptVerifySignature(NCRYPT_KEY_HANDLE, void *, BYTE *, DWORD, BYTE *, DWORD, DWORD); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* __NCRYPT_H__ */ |