@@ -44,6 +44,17 @@ macro_rules! check_fn {
4444 } } ;
4545}
4646
47+ macro_rules! check_30_fn {
48+ ( $pkcs11: expr, $func_name: ident) => { {
49+ let func = paste! { $pkcs11
50+ . impl_
51+ . function_list_30
52+ . map( |f| f. [ <C_ $func_name>] )
53+ } ;
54+ func. is_some( )
55+ } } ;
56+ }
57+
4758#[ allow( missing_docs) ]
4859#[ derive( Debug , Copy , Clone ) ]
4960/// Enumeration of all functions defined by the PKCS11 spec
@@ -116,6 +127,31 @@ pub enum Function {
116127 GetFunctionStatus ,
117128 CancelFunction ,
118129 WaitForSlotEvent ,
130+ /* PKCS #11 3.0 */
131+ GetInterfaceList ,
132+ GetInterface ,
133+ LoginUser ,
134+ SessionCancel ,
135+ MessageEncryptInit ,
136+ EncryptMessage ,
137+ EncryptMessageBegin ,
138+ EncryptMessageNext ,
139+ MessageEncryptFinal ,
140+ MessageDecryptInit ,
141+ DecryptMessage ,
142+ DecryptMessageBegin ,
143+ DecryptMessageNext ,
144+ MessageDecryptFinal ,
145+ MessageSignInit ,
146+ SignMessage ,
147+ SignMessageBegin ,
148+ SignMessageNext ,
149+ MessageSignFinal ,
150+ MessageVerifyInit ,
151+ VerifyMessage ,
152+ VerifyMessageBegin ,
153+ VerifyMessageNext ,
154+ MessageVerifyFinal ,
119155}
120156
121157impl Display for Function {
@@ -195,5 +231,30 @@ pub(super) fn is_fn_supported(ctx: &Pkcs11, function: Function) -> bool {
195231 Function :: GetFunctionStatus => check_fn ! ( ctx, GetFunctionStatus ) ,
196232 Function :: CancelFunction => check_fn ! ( ctx, CancelFunction ) ,
197233 Function :: WaitForSlotEvent => check_fn ! ( ctx, WaitForSlotEvent ) ,
234+ /* PKCS #11 3.0 */
235+ Function :: GetInterfaceList => check_30_fn ! ( ctx, GetInterfaceList ) ,
236+ Function :: GetInterface => check_30_fn ! ( ctx, GetInterface ) ,
237+ Function :: LoginUser => check_30_fn ! ( ctx, LoginUser ) ,
238+ Function :: SessionCancel => check_30_fn ! ( ctx, SessionCancel ) ,
239+ Function :: MessageEncryptInit => check_30_fn ! ( ctx, MessageEncryptInit ) ,
240+ Function :: EncryptMessage => check_30_fn ! ( ctx, EncryptMessage ) ,
241+ Function :: EncryptMessageBegin => check_30_fn ! ( ctx, EncryptMessageBegin ) ,
242+ Function :: EncryptMessageNext => check_30_fn ! ( ctx, EncryptMessageNext ) ,
243+ Function :: MessageEncryptFinal => check_30_fn ! ( ctx, MessageEncryptFinal ) ,
244+ Function :: MessageDecryptInit => check_30_fn ! ( ctx, MessageDecryptInit ) ,
245+ Function :: DecryptMessage => check_30_fn ! ( ctx, DecryptMessage ) ,
246+ Function :: DecryptMessageBegin => check_30_fn ! ( ctx, DecryptMessageBegin ) ,
247+ Function :: DecryptMessageNext => check_30_fn ! ( ctx, DecryptMessageNext ) ,
248+ Function :: MessageDecryptFinal => check_30_fn ! ( ctx, MessageDecryptFinal ) ,
249+ Function :: MessageSignInit => check_30_fn ! ( ctx, MessageSignInit ) ,
250+ Function :: SignMessage => check_30_fn ! ( ctx, SignMessage ) ,
251+ Function :: SignMessageBegin => check_30_fn ! ( ctx, SignMessageBegin ) ,
252+ Function :: SignMessageNext => check_30_fn ! ( ctx, SignMessageNext ) ,
253+ Function :: MessageSignFinal => check_30_fn ! ( ctx, MessageSignFinal ) ,
254+ Function :: MessageVerifyInit => check_30_fn ! ( ctx, MessageVerifyInit ) ,
255+ Function :: VerifyMessage => check_30_fn ! ( ctx, VerifyMessage ) ,
256+ Function :: VerifyMessageBegin => check_30_fn ! ( ctx, VerifyMessageBegin ) ,
257+ Function :: VerifyMessageNext => check_30_fn ! ( ctx, VerifyMessageNext ) ,
258+ Function :: MessageVerifyFinal => check_30_fn ! ( ctx, MessageVerifyFinal ) ,
198259 }
199260}
0 commit comments