ReactOS 0.4.17-dev-1037-g720d112
ncrypt.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  _NCryptAlgorithmName
 
struct  _NCryptBuffer
 
struct  _NCryptBufferDesc
 
struct  NCryptKeyName
 
struct  __NCRYPT_SUPPORTED_LENGTHS
 
struct  __NCRYPT_UI_POLICY
 

Macros

#define WINAPI   __stdcall
 
#define __SECSTATUS_DEFINED__
 
#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"
 

Typedefs

typedef LONG SECURITY_STATUS
 
typedef struct _NCryptAlgorithmName NCryptAlgorithmName
 
typedef struct _NCryptBuffer NCryptBuffer
 
typedef struct _NCryptBuffer * PNCryptBuffer
 
typedef struct _NCryptBufferDesc NCryptBufferDesc
 
typedef struct _NCryptBufferDesc * PNCryptBufferDesc
 
typedef struct NCryptKeyName NCryptKeyName
 
typedef struct __NCRYPT_SUPPORTED_LENGTHS NCRYPT_SUPPORTED_LENGTHS
 
typedef struct __NCRYPT_UI_POLICY 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
 

Functions

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)
 

Macro Definition Documentation

◆ __SECSTATUS_DEFINED__

#define __SECSTATUS_DEFINED__

Definition at line 32 of file ncrypt.h.

◆ NCRYPT_ALGORITHM_GROUP_PROPERTY

#define NCRYPT_ALGORITHM_GROUP_PROPERTY   L"Algorithm Group"

Definition at line 125 of file ncrypt.h.

◆ NCRYPT_ALGORITHM_PROPERTY

#define NCRYPT_ALGORITHM_PROPERTY   L"Algorithm Name"

Definition at line 107 of file ncrypt.h.

◆ NCRYPT_ALLOW_ALL_USAGES

#define NCRYPT_ALLOW_ALL_USAGES   0x00ffffff

Definition at line 98 of file ncrypt.h.

◆ NCRYPT_ALLOW_ARCHIVING_FLAG

#define NCRYPT_ALLOW_ARCHIVING_FLAG   0x00000004

Definition at line 102 of file ncrypt.h.

◆ NCRYPT_ALLOW_DECRYPT_FLAG

#define NCRYPT_ALLOW_DECRYPT_FLAG   0x00000001

Definition at line 94 of file ncrypt.h.

◆ NCRYPT_ALLOW_EXPORT_FLAG

#define NCRYPT_ALLOW_EXPORT_FLAG   0x00000001

Definition at line 100 of file ncrypt.h.

◆ NCRYPT_ALLOW_KEY_AGREEMENT_FLAG

#define NCRYPT_ALLOW_KEY_AGREEMENT_FLAG   0x00000004

Definition at line 96 of file ncrypt.h.

◆ NCRYPT_ALLOW_KEY_IMPORT_FLAG

#define NCRYPT_ALLOW_KEY_IMPORT_FLAG   0x00000008

Definition at line 97 of file ncrypt.h.

◆ NCRYPT_ALLOW_PLAINTEXT_ARCHIVING_FLAG

#define NCRYPT_ALLOW_PLAINTEXT_ARCHIVING_FLAG   0x00000008

Definition at line 103 of file ncrypt.h.

◆ NCRYPT_ALLOW_PLAINTEXT_EXPORT_FLAG

#define NCRYPT_ALLOW_PLAINTEXT_EXPORT_FLAG   0x00000002

Definition at line 101 of file ncrypt.h.

◆ NCRYPT_ALLOW_SIGNING_FLAG

#define NCRYPT_ALLOW_SIGNING_FLAG   0x00000002

Definition at line 95 of file ncrypt.h.

◆ NCRYPT_ASSOCIATED_ECDH_KEY

#define NCRYPT_ASSOCIATED_ECDH_KEY   L"SmartCardAssociatedECDHKey"

Definition at line 135 of file ncrypt.h.

◆ NCRYPT_BLOCK_LENGTH_PROPERTY

#define NCRYPT_BLOCK_LENGTH_PROPERTY   L"Block Length"

Definition at line 110 of file ncrypt.h.

◆ NCRYPT_CERTIFICATE_PROPERTY

#define NCRYPT_CERTIFICATE_PROPERTY   L"SmartCardKeyCertificate"

Definition at line 130 of file ncrypt.h.

◆ NCRYPT_EXPORT_POLICY_PROPERTY

#define NCRYPT_EXPORT_POLICY_PROPERTY   L"Export Policy"

Definition at line 112 of file ncrypt.h.

◆ NCRYPT_IMPL_TYPE_PROPERTY

#define NCRYPT_IMPL_TYPE_PROPERTY   L"Impl Type"

Definition at line 115 of file ncrypt.h.

◆ NCRYPT_KEY_PROTECTION_INTERFACE

#define NCRYPT_KEY_PROTECTION_INTERFACE   0x00010004

Definition at line 85 of file ncrypt.h.

◆ NCRYPT_KEY_STORAGE_INTERFACE

#define NCRYPT_KEY_STORAGE_INTERFACE   0x00010001

Definition at line 82 of file ncrypt.h.

◆ NCRYPT_KEY_TYPE_PROPERTY

#define NCRYPT_KEY_TYPE_PROPERTY   L"Key Type"

Definition at line 117 of file ncrypt.h.

◆ NCRYPT_KEY_USAGE_PROPERTY

#define NCRYPT_KEY_USAGE_PROPERTY   L"Key Usage"

Definition at line 116 of file ncrypt.h.

◆ NCRYPT_LAST_MODIFIED_PROPERTY

#define NCRYPT_LAST_MODIFIED_PROPERTY   L"Modified"

Definition at line 123 of file ncrypt.h.

◆ NCRYPT_LENGTH_PROPERTY

#define NCRYPT_LENGTH_PROPERTY   L"Length"

Definition at line 108 of file ncrypt.h.

◆ NCRYPT_LENGTHS_PROPERTY

#define NCRYPT_LENGTHS_PROPERTY   L"Lengths"

Definition at line 109 of file ncrypt.h.

◆ NCRYPT_MAX_NAME_LENGTH_PROPERTY

#define NCRYPT_MAX_NAME_LENGTH_PROPERTY   L"Max Name Length"

Definition at line 124 of file ncrypt.h.

◆ NCRYPT_NAME_PROPERTY

#define NCRYPT_NAME_PROPERTY   L"Name"

Definition at line 105 of file ncrypt.h.

◆ NCRYPT_NO_PADDING_FLAG

#define NCRYPT_NO_PADDING_FLAG   0x00000001

Definition at line 89 of file ncrypt.h.

◆ NCRYPT_PAD_OAEP_FLAG

#define NCRYPT_PAD_OAEP_FLAG   0x00000004

Definition at line 91 of file ncrypt.h.

◆ NCRYPT_PAD_PKCS1_FLAG

#define NCRYPT_PAD_PKCS1_FLAG   0x00000002

Definition at line 90 of file ncrypt.h.

◆ NCRYPT_PAD_PSS_FLAG

#define NCRYPT_PAD_PSS_FLAG   0x00000008

Definition at line 92 of file ncrypt.h.

◆ NCRYPT_PIN_PROMPT_PROPERTY

#define NCRYPT_PIN_PROMPT_PROPERTY   L"SmartCardPinPrompt"

Definition at line 131 of file ncrypt.h.

◆ NCRYPT_PIN_PROPERTY

#define NCRYPT_PIN_PROPERTY   L"SmartCardPin"

Definition at line 127 of file ncrypt.h.

◆ NCRYPT_PROVIDER_HANDLE_PROPERTY

#define NCRYPT_PROVIDER_HANDLE_PROPERTY   L"Provider Handle"

Definition at line 126 of file ncrypt.h.

◆ NCRYPT_READER_PROPERTY

#define NCRYPT_READER_PROPERTY   L"SmartCardReader"

Definition at line 128 of file ncrypt.h.

◆ NCRYPT_ROOT_CERTSTORE_PROPERTY

#define NCRYPT_ROOT_CERTSTORE_PROPERTY   L"SmartcardRootCertStore"

Definition at line 133 of file ncrypt.h.

◆ NCRYPT_SCARD_PIN_ID

#define NCRYPT_SCARD_PIN_ID   L"SmartCardPinId"

Definition at line 136 of file ncrypt.h.

◆ NCRYPT_SCARD_PIN_INFO

#define NCRYPT_SCARD_PIN_INFO   L"SmartCardPinInfo"

Definition at line 137 of file ncrypt.h.

◆ NCRYPT_SCHANNEL_INTERFACE

#define NCRYPT_SCHANNEL_INTERFACE   0x00010002

Definition at line 83 of file ncrypt.h.

◆ NCRYPT_SCHANNEL_SIGNATURE_INTERFACE

#define NCRYPT_SCHANNEL_SIGNATURE_INTERFACE   0x00010003

Definition at line 84 of file ncrypt.h.

◆ NCRYPT_SECURE_PIN_PROPERTY

#define NCRYPT_SECURE_PIN_PROPERTY   L"SmartCardSecurePin"

Definition at line 134 of file ncrypt.h.

◆ NCRYPT_SECURITY_DESCR_PROPERTY

#define NCRYPT_SECURITY_DESCR_PROPERTY   L"Security Descr"

Definition at line 120 of file ncrypt.h.

◆ NCRYPT_SECURITY_DESCR_SUPPORT_PROPERTY

#define NCRYPT_SECURITY_DESCR_SUPPORT_PROPERTY   L"Security Descr Support"

Definition at line 119 of file ncrypt.h.

◆ NCRYPT_SILENT_FLAG

#define NCRYPT_SILENT_FLAG   0x00000040

Definition at line 87 of file ncrypt.h.

◆ NCRYPT_SMARTCARD_GUID_PROPERTY

#define NCRYPT_SMARTCARD_GUID_PROPERTY   L"SmartCardGuid"

Definition at line 129 of file ncrypt.h.

◆ NCRYPT_UI_POLICY_PROPERTY

#define NCRYPT_UI_POLICY_PROPERTY   L"UI Policy"

Definition at line 111 of file ncrypt.h.

◆ NCRYPT_UNIQUE_NAME_PROPERTY

#define NCRYPT_UNIQUE_NAME_PROPERTY   L"Unique Name"

Definition at line 106 of file ncrypt.h.

◆ NCRYPT_USE_CONTEXT_PROPERTY

#define NCRYPT_USE_CONTEXT_PROPERTY   L"Use Context"

Definition at line 114 of file ncrypt.h.

◆ NCRYPT_USE_COUNT_ENABLED_PROPERTY

#define NCRYPT_USE_COUNT_ENABLED_PROPERTY   L"Enabled Use Count"

Definition at line 121 of file ncrypt.h.

◆ NCRYPT_USE_COUNT_PROPERTY

#define NCRYPT_USE_COUNT_PROPERTY   L"Use Count"

Definition at line 122 of file ncrypt.h.

◆ NCRYPT_USER_CERTSTORE_PROPERTY

#define NCRYPT_USER_CERTSTORE_PROPERTY   L"SmartCardUserCertStore"

Definition at line 132 of file ncrypt.h.

◆ NCRYPT_VERSION_PROPERTY

#define NCRYPT_VERSION_PROPERTY   L"Version"

Definition at line 118 of file ncrypt.h.

◆ NCRYPT_WINDOW_HANDLE_PROPERTY

#define NCRYPT_WINDOW_HANDLE_PROPERTY   L"HWND Handle"

Definition at line 113 of file ncrypt.h.

◆ WINAPI

#define WINAPI   __stdcall

Definition at line 27 of file ncrypt.h.

Typedef Documentation

◆ NCRYPT_HANDLE

Definition at line 76 of file ncrypt.h.

◆ NCRYPT_HASH_HANDLE

Definition at line 79 of file ncrypt.h.

◆ NCRYPT_KEY_HANDLE

Definition at line 78 of file ncrypt.h.

◆ NCRYPT_PROV_HANDLE

Definition at line 77 of file ncrypt.h.

◆ NCRYPT_SECRET_HANDLE

Definition at line 80 of file ncrypt.h.

◆ NCRYPT_SUPPORTED_LENGTHS

◆ NCRYPT_UI_POLICY

◆ NCryptAlgorithmName

◆ NCryptBuffer

◆ NCryptBufferDesc

◆ NCryptKeyName

◆ PNCryptBuffer

◆ PNCryptBufferDesc

◆ SECURITY_STATUS

Definition at line 31 of file ncrypt.h.

Function Documentation

◆ NCryptCreatePersistedKey()

SECURITY_STATUS WINAPI NCryptCreatePersistedKey ( NCRYPT_PROV_HANDLE  provider,
NCRYPT_KEY_HANDLE *  key,
const WCHAR *  algid,
const WCHAR *  name,
DWORD  keyspec,
DWORD  flags 
)

Definition at line 184 of file main.c.

186{
187 struct object *object;
188
189 TRACE("(%#Ix, %p, %s, %s, %#lx, %#lx)\n", provider, key, wine_dbgstr_w(algid),
190 wine_dbgstr_w(name), keyspec, flags);
191
192 if (!provider) return NTE_INVALID_HANDLE;
194 if (name) FIXME("Persistent keys are not supported\n");
195
197 {
199 DWORD default_bitlen = 1024;
200
201 if (!(object = create_key_object(RSA, provider)))
202 {
203 ERR("Error allocating memory\n");
204 return NTE_NO_MEMORY;
205 }
206
207 status = BCryptGenerateKeyPair(BCRYPT_RSA_ALG_HANDLE, &object->key.bcrypt_key, default_bitlen, 0);
208 if (status != STATUS_SUCCESS)
209 {
210 ERR("Error generating key pair %#lx\n", status);
211 free(object);
212 return map_ntstatus(status);
213 }
214
215 set_object_property(object, NCRYPT_LENGTH_PROPERTY, (BYTE *)&default_bitlen, sizeof(default_bitlen));
216 set_object_property(object, BCRYPT_PUBLIC_KEY_LENGTH, (BYTE *)&default_bitlen, sizeof(default_bitlen));
217 }
219 {
221 DWORD bitlen = 256;
222
223 if (!(object = create_key_object(ECDSA_P256, provider)))
224 return NTE_NO_MEMORY;
225
227 if (status != STATUS_SUCCESS)
228 {
229 free(object);
230 return map_ntstatus(status);
231 }
232
233 set_object_property(object, NCRYPT_LENGTH_PROPERTY, (BYTE *)&bitlen, sizeof(bitlen));
234 set_object_property(object, BCRYPT_PUBLIC_KEY_LENGTH, (BYTE *)&bitlen, sizeof(bitlen));
235 }
236 else
237 {
238 FIXME("Algorithm not handled %s\n", wine_dbgstr_w(algid));
239 return NTE_NOT_SUPPORTED;
240 }
241
242 *key = (NCRYPT_KEY_HANDLE)object;
243 return ERROR_SUCCESS;
244}
LONG NTSTATUS
Definition: precomp.h:26
#define FIXME(fmt,...)
Definition: precomp.h:53
#define ERR(fmt,...)
Definition: precomp.h:57
#define BCRYPT_PUBLIC_KEY_LENGTH
Definition: bcrypt.h:69
#define BCRYPT_RSA_ALGORITHM
Definition: bcrypt.h:117
#define BCRYPT_RSA_ALG_HANDLE
Definition: bcrypt.h:430
#define BCRYPT_ECDSA_P256_ALGORITHM
Definition: bcrypt.h:107
#define BCRYPT_ECDSA_P256_ALG_HANDLE
Definition: bcrypt.h:462
NTSTATUS WINAPI BCryptGenerateKeyPair(BCRYPT_ALG_HANDLE handle, BCRYPT_KEY_HANDLE *ret_handle, ULONG bitlen, ULONG flags)
Definition: bcrypt_main.c:3571
#define free
Definition: debug_ros.c:5
#define ERROR_SUCCESS
Definition: deptool.c:10
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4171
static struct object * create_key_object(enum algid algid, NCRYPT_PROV_HANDLE provider)
Definition: main.c:138
static SECURITY_STATUS map_ntstatus(NTSTATUS status)
Definition: main.c:37
static SECURITY_STATUS set_object_property(struct object *object, const WCHAR *name, BYTE *value, DWORD value_size)
Definition: main.c:116
unsigned long DWORD
Definition: ntddk_ex.h:95
GLbitfield flags
Definition: glext.h:7161
#define wine_dbgstr_w
Definition: kernel32.h:34
#define NCRYPT_LENGTH_PROPERTY
Definition: ncrypt.h:108
ULONG_PTR NCRYPT_KEY_HANDLE
Definition: ncrypt.h:78
algid
@ ECDSA_P256
@ RSA
#define STATUS_SUCCESS
Definition: shellext.h:65
#define TRACE(s)
Definition: solgame.cpp:4
Definition: copy.c:22
Definition: name.c:39
struct key key
IWbemClassObject * object
Definition: locator.c:514
Definition: ps.c:97
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
Definition: winerror.h:210
#define NTE_INVALID_HANDLE
Definition: winerror.h:4285
#define NTE_NOT_SUPPORTED
Definition: winerror.h:4288
#define RPC_X_NULL_REF_POINTER
Definition: winerror.h:1444
#define NTE_NO_MEMORY
Definition: winerror.h:4261
unsigned char BYTE
Definition: xxhash.c:193

Referenced by test_create_persisted_key(), test_finalize_key(), test_NCryptEncrypt(), test_NCryptExportKey(), and test_set_property().

◆ NCryptDecrypt()

SECURITY_STATUS WINAPI NCryptDecrypt ( NCRYPT_KEY_HANDLE  key,
BYTE *  input,
DWORD  insize,
void *  padding,
BYTE *  output,
DWORD  outsize,
DWORD *  result,
DWORD  flags 
)

Definition at line 246 of file main.c.

248{
249 FIXME("(%#Ix, %p, %lu, %p, %p, %lu, %p, %#lx): stub\n", key, input, insize, padding,
250 output, outsize, result, flags);
251 return NTE_NOT_SUPPORTED;
252}
GLuint64EXT * result
Definition: glext.h:11304
GLenum GLenum GLenum input
Definition: glext.h:9031
const unsigned char size_t insize
Definition: jpeglib.h:986
unsigned char size_t * outsize
Definition: jpeglib.h:983
static const DWORD padding[]
Definition: mciwnd.c:88

◆ NCryptEncrypt()

SECURITY_STATUS WINAPI NCryptEncrypt ( NCRYPT_KEY_HANDLE  key,
BYTE *  input,
DWORD  insize,
void *  padding,
BYTE *  output,
DWORD  outsize,
DWORD *  result,
DWORD  flags 
)

Definition at line 260 of file main.c.

262{
263 struct object *key_object = (struct object *)key;
264
265 TRACE("(%#Ix, %p, %lu, %p, %p, %lu, %p, %#lx)\n", key, input, insize, padding,
266 output, outsize, result, flags);
267
270 {
271 FIXME("Flags %lx not supported\n", flags);
272 return NTE_BAD_FLAGS;
273 }
274
276 {
277 FIXME("No padding and oaep padding not supported\n");
278 return NTE_NOT_SUPPORTED;
279 }
280
281 if (key_object->type != KEY) return NTE_INVALID_HANDLE;
282
283 return map_ntstatus(BCryptEncrypt(key_object->key.bcrypt_key, input, insize, padding,
284 NULL, 0, output, outsize, result, flags));
285}
NTSTATUS WINAPI BCryptEncrypt(BCRYPT_KEY_HANDLE handle, UCHAR *input, ULONG input_len, void *padding, UCHAR *iv, ULONG iv_len, UCHAR *output, ULONG output_len, ULONG *ret_len, ULONG flags)
Definition: bcrypt_main.c:2307
#define NULL
Definition: types.h:112
#define NCRYPT_PAD_PKCS1_FLAG
Definition: ncrypt.h:90
#define NCRYPT_NO_PADDING_FLAG
Definition: ncrypt.h:89
#define NCRYPT_PAD_OAEP_FLAG
Definition: ncrypt.h:91
#define NCRYPT_SILENT_FLAG
Definition: ncrypt.h:87
Definition: btrfs.h:143
enum object_type type
#define NTE_BAD_FLAGS
Definition: winerror.h:4256

Referenced by test_NCryptEncrypt().

◆ NCryptExportKey()

SECURITY_STATUS WINAPI NCryptExportKey ( NCRYPT_KEY_HANDLE  key,
NCRYPT_KEY_HANDLE  encrypt_key,
const WCHAR *  type,
NCryptBufferDesc *  params,
BYTE *  output,
DWORD  output_len,
DWORD *  ret_len,
DWORD  flags 
)

Definition at line 475 of file main.c.

478{
479 struct object *object = (struct object *)key;
480
481 TRACE("(%#Ix, %#Ix, %s, %p, %p, %lu, %p, %#lx)\n", key, encrypt_key, wine_dbgstr_w(type), params, output,
482 output_len, ret_len, flags);
483
484 if (encrypt_key)
485 {
486 FIXME("Key blob encryption not implemented\n");
487 return NTE_NOT_SUPPORTED;
488 }
489 if (params)
490 {
491 FIXME("Parameter information not implemented\n");
492 return NTE_NOT_SUPPORTED;
493 }
495 {
496 FIXME("Silent flag not implemented\n");
497 }
498
499 return map_ntstatus(BCryptExportKey(object->key.bcrypt_key, NULL, type, output, output_len, ret_len, 0));
500}
NTSTATUS WINAPI BCryptExportKey(BCRYPT_KEY_HANDLE export_key_handle, BCRYPT_KEY_HANDLE encrypt_key_handle, const WCHAR *type, UCHAR *output, ULONG output_len, ULONG *size, ULONG flags)
Definition: bcrypt_main.c:2749
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLenum const GLfloat * params
Definition: glext.h:5645
static JOBOBJECTINFOCLASS LPVOID DWORD LPDWORD ret_len
Definition: process.c:81

Referenced by test_NCryptExportKey().

◆ NCryptFinalizeKey()

SECURITY_STATUS WINAPI NCryptFinalizeKey ( NCRYPT_KEY_HANDLE  handle,
DWORD  flags 
)

Definition at line 301 of file main.c.

302{
303 struct object *object = (struct object *)handle;
305 struct object_property *prop;
307
308 TRACE("(%#Ix, %#lx)\n", handle, flags);
309
310 if (!object || object->type != KEY) return NTE_INVALID_HANDLE;
311
313 key_length = *(DWORD *)prop->value;
315 if (status != STATUS_SUCCESS)
316 {
317 ERR("Error setting key length property\n");
318 return map_ntstatus(status);
319 }
320
321 status = BCryptFinalizeKeyPair(object->key.bcrypt_key, 0);
322 if (status != STATUS_SUCCESS)
323 {
324 ERR("Error finalizing key pair\n");
325 return map_ntstatus(status);
326 }
327
328 return ERROR_SUCCESS;
329}
#define BCRYPT_KEY_LENGTH
Definition: bcrypt.h:61
NTSTATUS WINAPI BCryptSetProperty(BCRYPT_HANDLE handle, const WCHAR *prop, UCHAR *value, ULONG size, ULONG flags)
Definition: bcrypt_main.c:1230
NTSTATUS WINAPI BCryptFinalizeKeyPair(BCRYPT_KEY_HANDLE handle, ULONG flags)
Definition: bcrypt_main.c:3658
static struct object_property * get_object_property(struct object *object, const WCHAR *name)
Definition: main.c:70
#define key_length
Definition: crypt.c:1100
unsigned char UCHAR
Definition: typedefs.h:53

Referenced by test_create_persisted_key(), test_finalize_key(), test_NCryptEncrypt(), and test_NCryptExportKey().

◆ NCryptFreeObject()

SECURITY_STATUS WINAPI NCryptFreeObject ( NCRYPT_HANDLE  handle)

Definition at line 342 of file main.c.

343{
344 struct object *object = (struct object *)handle;
346 unsigned int i;
347
348 TRACE("(%#Ix)\n", handle);
349
350 if (!object)
351 {
352 WARN("invalid handle %#Ix\n", handle);
353 return NTE_INVALID_HANDLE;
354 }
355
356 switch (object->type)
357 {
358 case KEY:
359 {
360 if ((ret = free_key_object(&object->key))) return ret;
361 break;
362 }
363 case STORAGE_PROVIDER:
365 return 0;
366 break;
367
368 default:
369 WARN("invalid handle %#Ix\n", handle);
370 return NTE_INVALID_HANDLE;
371 }
372
373 for (i = 0; i < object->num_properties; i++)
374 {
377
378 free(object->properties[i].key);
379 free(object->properties[i].value);
380 }
382 free(object);
383 return ret;
384}
#define InterlockedDecrement
Definition: armddk.h:52
#define WARN(fmt,...)
Definition: precomp.h:61
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
Definition: wcs.c:1977
SECURITY_STATUS WINAPI NCryptFreeObject(NCRYPT_HANDLE handle)
Definition: main.c:342
static SECURITY_STATUS free_key_object(struct key *key)
Definition: main.c:337
return ret
Definition: mutex.c:147
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define KEY
Definition: profile.c:30
LONG SECURITY_STATUS
Definition: ncrypt.h:31
#define NCRYPT_PROVIDER_HANDLE_PROPERTY
Definition: ncrypt.h:126
ULONG_PTR NCRYPT_HANDLE
Definition: ncrypt.h:76
@ STORAGE_PROVIDER
struct object_property * properties

Referenced by check_property(), NCryptFreeObject(), test_create_persisted_key(), test_finalize_key(), test_free_object(), test_get_property(), test_key_import_rsa(), test_NCryptEncrypt(), test_NCryptExportKey(), test_NCryptIsAlgSupported(), test_set_property(), and test_verify_signature().

◆ NCryptGetProperty()

SECURITY_STATUS WINAPI NCryptGetProperty ( NCRYPT_HANDLE  handle,
const WCHAR *  name,
BYTE *  output,
DWORD  outsize,
DWORD *  result,
DWORD  flags 
)

Definition at line 386 of file main.c.

388{
389 struct object *object = (struct object *)handle;
390 const struct object_property *property;
391
392 TRACE("(%#Ix, %s, %p, %lu, %p, %#lx)\n", handle, wine_dbgstr_w(name), output, outsize, result, flags);
393 if (flags) FIXME("flags %#lx not supported\n", flags);
394
395 if (!object) return NTE_INVALID_HANDLE;
396 if (!(property = get_object_property(object, name))) return NTE_INVALID_PARAMETER;
397
398 *result = property->value_size;
399 if (!output) return ERROR_SUCCESS;
400 if (outsize < property->value_size) return NTE_BUFFER_TOO_SMALL;
401
402 memcpy(output, property->value, property->value_size);
405 return ERROR_SUCCESS;
406}
static void provider_addref(NCRYPT_PROV_HANDLE handle)
Definition: main.c:64
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
ULONG_PTR NCRYPT_PROV_HANDLE
Definition: ncrypt.h:77
#define NTE_INVALID_PARAMETER
Definition: winerror.h:4286
#define NTE_BUFFER_TOO_SMALL
Definition: winerror.h:4287

Referenced by check_property(), and test_get_property().

◆ NCryptImportKey()

SECURITY_STATUS WINAPI NCryptImportKey ( NCRYPT_PROV_HANDLE  provider,
NCRYPT_KEY_HANDLE  decrypt_key,
const WCHAR *  type,
NCryptBufferDesc *  params,
NCRYPT_KEY_HANDLE *  handle,
BYTE *  data,
DWORD  datasize,
DWORD  flags 
)

Definition at line 408 of file main.c.

411{
413 struct object *object;
414
415 TRACE("(%#Ix, %#Ix, %s, %p, %p, %p, %lu, %#lx)\n", provider, decrypt_key, wine_dbgstr_w(type),
417
418 if (decrypt_key)
419 {
420 FIXME("Key blob decryption not implemented\n");
421 return NTE_NOT_SUPPORTED;
422 }
423 if (params)
424 {
425 FIXME("Parameter information not implemented\n");
426 return NTE_NOT_SUPPORTED;
427 }
429 {
430 FIXME("Silent flag not implemented\n");
431 }
432 else if (flags)
433 {
434 WARN("Invalid flags %#lx\n", flags);
435 return NTE_BAD_FLAGS;
436 }
437 if (!header) return NTE_INVALID_PARAMETER;
438
439 switch (header->Magic)
440 {
444 {
447
448 if (!(object = create_key_object(RSA, provider)))
449 {
450 ERR("Error allocating memory\n");
451 return NTE_NO_MEMORY;
452 }
453
455 if (status != STATUS_SUCCESS)
456 {
457 WARN("Error importing key pair %#lx\n", status);
458 free(object);
459 return map_ntstatus(status);
460 }
461
462 set_object_property(object, NCRYPT_LENGTH_PROPERTY, (BYTE *)&rsablob->BitLength, sizeof(rsablob->BitLength));
463 set_object_property(object, BCRYPT_PUBLIC_KEY_LENGTH, (BYTE *)&rsablob->BitLength, sizeof(rsablob->BitLength));
464 break;
465 }
466 default:
467 FIXME("Unhandled key magic %#lx\n", header->Magic);
469 }
470
471 *handle = (NCRYPT_KEY_HANDLE)object;
472 return ERROR_SUCCESS;
473}
#define BCRYPT_RSAFULLPRIVATE_MAGIC
Definition: bcrypt.h:243
#define BCRYPT_RSAPRIVATE_MAGIC
Definition: bcrypt.h:242
#define BCRYPT_RSAPUBLIC_MAGIC
Definition: bcrypt.h:241
NTSTATUS WINAPI BCryptImportKeyPair(BCRYPT_ALG_HANDLE handle, BCRYPT_KEY_HANDLE decrypt_key_handle, const WCHAR *type, BCRYPT_KEY_HANDLE *ret_handle, UCHAR *input, ULONG input_len, ULONG flags)
Definition: bcrypt_main.c:3481
static SIZE_T datasize
Definition: asm.c:30
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950

Referenced by test_free_object(), test_get_property(), test_key_import_rsa(), test_set_property(), and test_verify_signature().

◆ NCryptIsAlgSupported()

SECURITY_STATUS WINAPI NCryptIsAlgSupported ( NCRYPT_PROV_HANDLE  provider,
const WCHAR *  algid,
DWORD  flags 
)

Definition at line 502 of file main.c.

503{
504 static const ULONG supported = BCRYPT_CIPHER_OPERATION |\
509 ULONG i, count;
511
512 TRACE("(%#Ix, %s, %#lx)\n", provider, wine_dbgstr_w(algid), flags);
513
514 if (!provider) return NTE_INVALID_HANDLE;
517 {
518 FIXME("Silent flag not implemented\n");
519 }
520 else if (flags)
521 {
522 WARN("Invalid flags %#lx\n", flags);
523 return NTE_BAD_FLAGS;
524 }
526
527 status = BCryptEnumAlgorithms(supported, &count, &list, 0);
528 if (status != STATUS_SUCCESS)
529 {
530 ERR("Error retrieving algorithm list %#lx\n", status);
531 return map_ntstatus(status);
532 }
533
535 for (i = 0; i < count; i++)
536 {
537 if (!lstrcmpiW(list[i].pszName, algid))
538 {
540 break;
541 }
542 }
543
545 return map_ntstatus(status);
546}
#define BCRYPT_SECRET_AGREEMENT_OPERATION
Definition: bcrypt.h:180
#define BCRYPT_SIGNATURE_OPERATION
Definition: bcrypt.h:181
#define BCRYPT_CIPHER_OPERATION
Definition: bcrypt.h:177
#define BCRYPT_ASYMMETRIC_ENCRYPTION_OPERATION
Definition: bcrypt.h:179
#define BCRYPT_RSA_SIGN_ALGORITHM
Definition: bcrypt.h:118
NTSTATUS WINAPI BCryptEnumAlgorithms(ULONG type, ULONG *ret_count, BCRYPT_ALGORITHM_IDENTIFIER **ret_list, ULONG flags)
Definition: bcrypt_main.c:424
void WINAPI BCryptFreeBuffer(void *buffer)
Definition: bcrypt_main.c:332
Definition: list.h:39
#define STATUS_NOT_SUPPORTED
Definition: d3dkmdt.h:48
GLuint GLuint GLsizei count
Definition: gl.h:1545
#define list
Definition: rosglue.h:35
uint32_t ULONG
Definition: typedefs.h:59

Referenced by test_NCryptIsAlgSupported().

◆ NCryptOpenKey()

SECURITY_STATUS WINAPI NCryptOpenKey ( NCRYPT_PROV_HANDLE  provider,
NCRYPT_KEY_HANDLE *  key,
const WCHAR *  name,
DWORD  keyspec,
DWORD  flags 
)

Definition at line 554 of file main.c.

556{
557 FIXME("(%#Ix, %p, %s, %#lx, %#lx): stub\n", provider, key, wine_dbgstr_w(name), keyspec, flags);
558 return NTE_NOT_SUPPORTED;
559}

◆ NCryptOpenStorageProvider()

SECURITY_STATUS WINAPI NCryptOpenStorageProvider ( NCRYPT_PROV_HANDLE *  provider,
const WCHAR *  name,
DWORD  flags 
)

Definition at line 561 of file main.c.

562{
563 struct object *object;
564
565 FIXME("(%p, %s, %#lx): stub\n", provider, wine_dbgstr_w(name), flags);
566
567 if (!(object = allocate_object(STORAGE_PROVIDER)))
568 {
569 ERR("Error allocating memory.\n");
570 return NTE_NO_MEMORY;
571 }
572 *provider = (NCRYPT_PROV_HANDLE)object;
573 return ERROR_SUCCESS;
574}
static struct object * allocate_object(enum object_type type)
Definition: main.c:55

Referenced by test_create_persisted_key(), test_finalize_key(), test_free_object(), test_get_property(), test_key_import_rsa(), test_NCryptEncrypt(), test_NCryptExportKey(), test_NCryptIsAlgSupported(), test_set_property(), and test_verify_signature().

◆ NCryptSetProperty()

SECURITY_STATUS WINAPI NCryptSetProperty ( NCRYPT_HANDLE  handle,
const WCHAR *  name,
BYTE *  input,
DWORD  insize,
DWORD  flags 
)

Definition at line 576 of file main.c.

577{
578 struct object *object = (struct object *)handle;
579
580 TRACE("(%#Ix, %s, %p, %lu, %#lx)\n", handle, wine_dbgstr_w(name), input, insize, flags);
581 if (flags) FIXME("flags %#lx not supported\n", flags);
582
583 if (!object) return NTE_INVALID_HANDLE;
585 return set_object_property(object, name, input, insize);
586}

Referenced by test_NCryptExportKey(), and test_set_property().

◆ NCryptSignHash()

SECURITY_STATUS WINAPI NCryptSignHash ( NCRYPT_KEY_HANDLE  handle,
void *  padding,
BYTE *  value,
DWORD  value_len,
BYTE *  sig,
DWORD  sig_len,
DWORD *  ret_len,
DWORD  flags 
)

Definition at line 588 of file main.c.

590{
591 struct object *object = (struct object *)handle;
592
593 TRACE("(%#Ix, %p, %p, %lu, %p, %lu, %#lx)\n", handle, padding, value, value_len, sig, sig_len, flags);
594 if (flags & NCRYPT_SILENT_FLAG) FIXME("Silent flag not implemented\n");
595
596 if (!object || object->type != KEY) return NTE_INVALID_HANDLE;
597
598 return map_ntstatus(BCryptSignHash(object->key.bcrypt_key, padding, value, value_len, sig, sig_len,
600}
NTSTATUS WINAPI BCryptSignHash(BCRYPT_KEY_HANDLE handle, void *padding, UCHAR *hash, ULONG hash_len, UCHAR *signature, ULONG signature_len, ULONG *ret_len, ULONG flags)
Definition: bcrypt_main.c:3870
Definition: pdh_main.c:64

◆ NCryptVerifySignature()

SECURITY_STATUS WINAPI NCryptVerifySignature ( NCRYPT_KEY_HANDLE  handle,
void *  padding,
BYTE *  hash,
DWORD  hash_size,
BYTE *  signature,
DWORD  signature_size,
DWORD  flags 
)

Definition at line 602 of file main.c.

604{
605 struct object *key_object = (struct object *)handle;
606
607 TRACE("(%#Ix, %p, %p, %lu, %p, %lu, %#lx)\n", handle, padding, hash, hash_size, signature,
608 signature_size, flags);
609
610 if (!hash_size || !signature_size) return NTE_INVALID_PARAMETER;
612 if (!handle || key_object->type != KEY) return NTE_INVALID_HANDLE;
613
614 if (key_object->key.algid < RSA)
615 {
616 FIXME("Symmetric keys not supported.\n");
617 return NTE_NOT_SUPPORTED;
618 }
619
620 return map_ntstatus(BCryptVerifySignature(key_object->key.bcrypt_key, padding, hash, hash_size, signature,
621 signature_size, flags));
622}
NTSTATUS WINAPI BCryptVerifySignature(BCRYPT_KEY_HANDLE handle, void *padding, UCHAR *hash, ULONG hash_len, UCHAR *signature, ULONG signature_len, ULONG flags)
Definition: bcrypt_main.c:3975

Referenced by test_verify_signature().