1 // Copyright © 2016-2017 winapi-rs developers
2 // Licensed under the Apache License, Version 2.0
3 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
4 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
5 // All files in the project carrying such notice may not be copied, modified, or distributed
6 // except according to those terms.
7 use shared::basetsd::{SIZE_T, ULONG_PTR};
8 use shared::bcrypt::{BCRYPT_NO_KEY_VALIDATION, BCryptBufferDesc};
9 use shared::minwindef::{DWORD, LPVOID, PBYTE};
10 use um::winnt::{LONG, LPCWSTR, VOID};
11 pub type SECURITY_STATUS = LONG;
12 pub type HCRYPTPROV = ULONG_PTR;
13 pub type HCRYPTKEY = ULONG_PTR;
14 pub type HCRYPTHASH = ULONG_PTR;
15 FN!{stdcall PFN_NCRYPT_ALLOC(
16     cbSize: SIZE_T,
17 ) -> LPVOID}
18 FN!{stdcall PFN_NCRYPT_FREE(
19     pv: LPVOID,
20 ) -> VOID}
21 STRUCT!{struct NCRYPT_ALLOC_PARA {
22     cbSize: DWORD,
23     pfnAlloc: PFN_NCRYPT_ALLOC,
24     pfnFree: PFN_NCRYPT_FREE,
25 }}
26 pub type NCryptBufferDesc = BCryptBufferDesc;
27 pub type NCRYPT_HANDLE = ULONG_PTR;
28 pub type NCRYPT_PROV_HANDLE = ULONG_PTR;
29 pub type NCRYPT_KEY_HANDLE = ULONG_PTR;
30 pub type NCRYPT_HASH_HANDLE = ULONG_PTR;
31 pub type NCRYPT_SECRET_HANDLE = ULONG_PTR;
32 pub const NCRYPT_NO_PADDING_FLAG: DWORD = 0x00000001;
33 pub const NCRYPT_PAD_PKCS1_FLAG: DWORD = 0x00000002;
34 pub const NCRYPT_PAD_OAEP_FLAG: DWORD = 0x00000004;
35 pub const NCRYPT_PAD_PSS_FLAG: DWORD = 0x00000008;
36 pub const NCRYPT_PAD_CIPHER_FLAG: DWORD = 0x00000010;
37 pub const NCRYPT_ATTESTATION_FLAG: DWORD = 0x00000020;
38 pub const NCRYPT_SEALING_FLAG: DWORD = 0x00000100;
39 pub const NCRYPT_REGISTER_NOTIFY_FLAG: DWORD = 0x00000001;
40 pub const NCRYPT_UNREGISTER_NOTIFY_FLAG: DWORD = 0x00000002;
41 pub const NCRYPT_NO_KEY_VALIDATION: DWORD = BCRYPT_NO_KEY_VALIDATION;
42 pub const NCRYPT_MACHINE_KEY_FLAG: DWORD = 0x00000020;
43 pub const NCRYPT_SILENT_FLAG: DWORD = 0x00000040;
44 pub const NCRYPT_OVERWRITE_KEY_FLAG: DWORD = 0x00000080;
45 pub const NCRYPT_WRITE_KEY_TO_LEGACY_STORE_FLAG: DWORD = 0x00000200;
46 pub const NCRYPT_DO_NOT_FINALIZE_FLAG: DWORD = 0x00000400;
47 pub const NCRYPT_EXPORT_LEGACY_FLAG: DWORD = 0x00000800;
48 pub const NCRYPT_IGNORE_DEVICE_STATE_FLAG: DWORD = 0x00001000;
49 pub const NCRYPT_TREAT_NIST_AS_GENERIC_ECC_FLAG: DWORD = 0x00002000;
50 pub const NCRYPT_NO_CACHED_PASSWORD: DWORD = 0x00004000;
51 pub const NCRYPT_PROTECT_TO_LOCAL_SYSTEM: DWORD = 0x00008000;
52 pub const NCRYPT_PERSIST_ONLY_FLAG: DWORD = 0x40000000;
53 pub const NCRYPT_PERSIST_FLAG: DWORD = 0x80000000;
54 pub const NCRYPT_PREFER_VIRTUAL_ISOLATION_FLAG: DWORD = 0x00010000;
55 pub const NCRYPT_USE_VIRTUAL_ISOLATION_FLAG: DWORD = 0x00020000;
56 pub const NCRYPT_USE_PER_BOOT_KEY_FLAG: DWORD = 0x00040000;
57 extern "system" {
NCryptOpenStorageProvider( phProvider: *mut NCRYPT_PROV_HANDLE, pszProviderName: LPCWSTR, dwFlags: DWORD, ) -> SECURITY_STATUS58     pub fn NCryptOpenStorageProvider(
59         phProvider: *mut NCRYPT_PROV_HANDLE,
60         pszProviderName: LPCWSTR,
61         dwFlags: DWORD,
62     ) -> SECURITY_STATUS;
63 }
64 pub const NCRYPT_ALLOW_EXPORT_FLAG: DWORD = 0x00000001;
65 pub const NCRYPT_ALLOW_PLAINTEXT_EXPORT_FLAG: DWORD = 0x00000002;
66 pub const NCRYPT_ALLOW_ARCHIVING_FLAG: DWORD = 0x00000004;
67 pub const NCRYPT_ALLOW_PLAINTEXT_ARCHIVING_FLAG: DWORD = 0x00000008;
68 extern "system" {
NCryptSetProperty( hObject: NCRYPT_HANDLE, pszProperty: LPCWSTR, pbInput: PBYTE, cbInput: DWORD, dwFlags: DWORD, ) -> SECURITY_STATUS69     pub fn NCryptSetProperty(
70         hObject: NCRYPT_HANDLE,
71         pszProperty: LPCWSTR,
72         pbInput: PBYTE,
73         cbInput: DWORD,
74         dwFlags: DWORD,
75     ) -> SECURITY_STATUS;
NCryptImportKey( hProvider: NCRYPT_PROV_HANDLE, hImportKey: NCRYPT_KEY_HANDLE, pszBlobType: LPCWSTR, pParameterList: *const NCryptBufferDesc, phKey: *mut NCRYPT_KEY_HANDLE, pbData: PBYTE, cbData: DWORD, dwFlags: DWORD, ) -> SECURITY_STATUS76     pub fn NCryptImportKey(
77         hProvider: NCRYPT_PROV_HANDLE,
78         hImportKey: NCRYPT_KEY_HANDLE,
79         pszBlobType: LPCWSTR,
80         pParameterList: *const NCryptBufferDesc,
81         phKey: *mut NCRYPT_KEY_HANDLE,
82         pbData: PBYTE,
83         cbData: DWORD,
84         dwFlags: DWORD,
85     ) -> SECURITY_STATUS;
NCryptFreeObject( hObject: NCRYPT_HANDLE, ) -> SECURITY_STATUS86     pub fn NCryptFreeObject(
87         hObject: NCRYPT_HANDLE,
88     ) -> SECURITY_STATUS;
89 }
90