1pub use crate::*;
6use std::os::raw::{c_char, c_int, c_uchar, c_uint, c_void};
7
8extern "C" {
9 pub fn PK11_FreeSlot(slot: *mut PK11SlotInfo);
10 pub fn PK11_GetInternalSlot() -> *mut PK11SlotInfo;
11 pub fn PK11_GetInternalKeySlot() -> *mut PK11SlotInfo;
12 pub fn PK11_NeedUserInit(slot: *mut PK11SlotInfo) -> PRBool;
13 pub fn PK11_NeedLogin(slot: *mut PK11SlotInfo) -> PRBool;
14 pub fn PK11_IsLoggedIn(slot: *mut PK11SlotInfo, wincx: *mut c_void) -> PRBool;
15 pub fn PK11_CheckUserPassword(slot: *mut PK11SlotInfo, password: *const c_char) -> SECStatus;
16 pub fn PK11_GenerateRandom(data: *mut c_uchar, len: c_int) -> SECStatus;
17 pub fn PK11_FreeSymKey(key: *mut PK11SymKey);
18 pub fn PK11_InitPin(
19 slot: *mut PK11SlotInfo,
20 ssopw: *const c_char,
21 pk11_userpwd: *const c_char,
22 ) -> SECStatus;
23 pub fn PK11_KeyGen(
24 slot: *mut PK11SlotInfo,
25 type_: CK_MECHANISM_TYPE,
26 param: *mut SECItem,
27 keySize: c_int,
28 wincx: *mut c_void,
29 ) -> *mut PK11SymKey;
30 pub fn PK11_ImportSymKey(
31 slot: *mut PK11SlotInfo,
32 type_: CK_MECHANISM_TYPE,
33 origin: u32, operation: CK_ATTRIBUTE_TYPE,
35 key: *mut SECItem,
36 wincx: *mut c_void,
37 ) -> *mut PK11SymKey;
38 pub fn PK11_ImportSymKeyWithFlags(
39 slot: *mut PK11SlotInfo,
40 type_: CK_MECHANISM_TYPE,
41 origin: u32, operation: CK_ATTRIBUTE_TYPE,
43 key: *mut SECItem,
44 flags: CK_FLAGS,
45 isPerm: PRBool,
46 wincx: *mut c_void,
47 ) -> *mut PK11SymKey;
48 pub fn PK11_SetSymKeyNickname(key: *mut PK11SymKey, name: *const c_char) -> SECStatus;
49 pub fn PK11_Derive(
50 baseKey: *mut PK11SymKey,
51 mechanism: CK_MECHANISM_TYPE,
52 param: *mut SECItem,
53 target: CK_MECHANISM_TYPE,
54 operation: CK_ATTRIBUTE_TYPE,
55 keySize: c_int,
56 ) -> *mut PK11SymKey;
57 pub fn PK11_PubDeriveWithKDF(
58 privKey: *mut SECKEYPrivateKey,
59 pubKey: *mut SECKEYPublicKey,
60 isSender: PRBool,
61 randomA: *mut SECItem,
62 randomB: *mut SECItem,
63 derive: CK_MECHANISM_TYPE,
64 target: CK_MECHANISM_TYPE,
65 operation: CK_ATTRIBUTE_TYPE,
66 keySize: c_int,
67 kdf: CK_ULONG,
68 sharedData: *mut SECItem,
69 wincx: *mut c_void,
70 ) -> *mut PK11SymKey;
71 pub fn PK11_WrapSymKey(
72 type_: CK_MECHANISM_TYPE,
73 param: *mut SECItem,
74 wrappingKey: *mut PK11SymKey,
75 symKey: *mut PK11SymKey,
76 wrappedKey: *mut SECItem,
77 ) -> SECStatus;
78 pub fn PK11_UnwrapSymKey(
79 wrappingKey: *mut PK11SymKey,
80 wrapType: CK_MECHANISM_TYPE,
81 param: *mut SECItem,
82 wrappedKey: *mut SECItem,
83 target: CK_MECHANISM_TYPE,
84 operation: CK_ATTRIBUTE_TYPE,
85 keySize: c_int,
86 ) -> *mut PK11SymKey;
87 pub fn PK11_ExtractKeyValue(symKey: *mut PK11SymKey) -> SECStatus;
88 pub fn PK11_GetKeyData(symKey: *mut PK11SymKey) -> *mut SECItem;
89 pub fn PK11_GenerateKeyPair(
90 slot: *mut PK11SlotInfo,
91 type_: CK_MECHANISM_TYPE,
92 param: *mut c_void,
93 pubk: *mut *mut SECKEYPublicKey,
94 isPerm: PRBool,
95 isSensitive: PRBool,
96 wincx: *mut c_void,
97 ) -> *mut SECKEYPrivateKey;
98 pub fn PK11_FindKeyByKeyID(
99 slot: *mut PK11SlotInfo,
100 keyID: *mut SECItem,
101 wincx: *mut c_void,
102 ) -> *mut SECKEYPrivateKey;
103 pub fn PK11_ListFixedKeysInSlot(
104 slot: *mut PK11SlotInfo,
105 nickname: *mut c_char,
106 wincx: *mut c_void,
107 ) -> *mut PK11SymKey;
108 pub fn PK11_Decrypt(
109 symkey: *mut PK11SymKey,
110 mechanism: CK_MECHANISM_TYPE,
111 param: *mut SECItem,
112 out: *mut c_uchar,
113 outLen: *mut c_uint,
114 maxLen: c_uint,
115 enc: *const c_uchar,
116 encLen: c_uint,
117 ) -> SECStatus;
118 pub fn PK11_Encrypt(
119 symKey: *mut PK11SymKey,
120 mechanism: CK_MECHANISM_TYPE,
121 param: *mut SECItem,
122 out: *mut c_uchar,
123 outLen: *mut c_uint,
124 maxLen: c_uint,
125 data: *const c_uchar,
126 dataLen: c_uint,
127 ) -> SECStatus;
128 pub fn PK11_VerifyWithMechanism(
129 key: *mut SECKEYPublicKey,
130 mechanism: CK_MECHANISM_TYPE,
131 param: *const SECItem,
132 sig: *const SECItem,
133 hash: *const SECItem,
134 wincx: *mut c_void,
135 ) -> SECStatus;
136 pub fn PK11_MapSignKeyType(keyType: u32 ) -> CK_MECHANISM_TYPE;
137 pub fn PK11_DestroyContext(context: *mut PK11Context, freeit: PRBool);
138 pub fn PK11_CreateContextBySymKey(
139 type_: CK_MECHANISM_TYPE,
140 operation: CK_ATTRIBUTE_TYPE,
141 symKey: *mut PK11SymKey,
142 param: *const SECItem,
143 ) -> *mut PK11Context;
144 pub fn PK11_DigestBegin(cx: *mut PK11Context) -> SECStatus;
145 pub fn PK11_HashBuf(
146 hashAlg: u32, out: *mut c_uchar,
148 in_: *const c_uchar,
149 len: PRInt32,
150 ) -> SECStatus;
151 pub fn PK11_DigestOp(context: *mut PK11Context, in_: *const c_uchar, len: c_uint) -> SECStatus;
152 pub fn PK11_DigestFinal(
153 context: *mut PK11Context,
154 data: *mut c_uchar,
155 outLen: *mut c_uint,
156 length: c_uint,
157 ) -> SECStatus;
158 pub fn PK11_DestroyGenericObject(object: *mut PK11GenericObject) -> SECStatus;
159 pub fn PK11_CreateGenericObject(
160 slot: *mut PK11SlotInfo,
161 pTemplate: *const CK_ATTRIBUTE,
162 count: c_int,
163 token: PRBool,
164 ) -> *mut PK11GenericObject;
165 pub fn PK11_ReadRawAttribute(
166 type_: u32, object: *mut c_void,
168 attr: CK_ATTRIBUTE_TYPE,
169 item: *mut SECItem,
170 ) -> SECStatus;
171 pub fn PK11_CreatePBEV2AlgorithmID(
172 pbeAlgTag: u32, cipherAlgTag: u32, prfAlgTag: u32, keyLength: c_int,
176 iteration: c_int,
177 salt: *mut SECItem,
178 ) -> *mut SECAlgorithmID;
179 pub fn PK11_PBEKeyGen(
180 slot: *mut PK11SlotInfo,
181 algid: *mut SECAlgorithmID,
182 pwitem: *mut SECItem,
183 faulty3DES: PRBool,
184 wincx: *mut c_void,
185 ) -> *mut PK11SymKey;
186 pub fn SECITEM_AllocItem(
187 arena: *mut PLArenaPool,
188 item: *mut SECItem,
189 len: c_uint,
190 ) -> *mut SECItem;
191}