@@ -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,30 @@ pub enum Function {
116127    GetFunctionStatus , 
117128    CancelFunction , 
118129    WaitForSlotEvent , 
130+     GetInterfaceList , 
131+     GetInterface , 
132+     LoginUser , 
133+     SessionCancel , 
134+     MessageEncryptInit , 
135+     EncryptMessage , 
136+     EncryptMessageBegin , 
137+     EncryptMessageNext , 
138+     MessageEncryptFinal , 
139+     MessageDecryptInit , 
140+     DecryptMessage , 
141+     DecryptMessageBegin , 
142+     DecryptMessageNext , 
143+     MessageDecryptFinal , 
144+     MessageSignInit , 
145+     SignMessage , 
146+     SignMessageBegin , 
147+     SignMessageNext , 
148+     MessageSignFinal , 
149+     MessageVerifyInit , 
150+     VerifyMessage , 
151+     VerifyMessageBegin , 
152+     VerifyMessageNext , 
153+     MessageVerifyFinal , 
119154} 
120155
121156impl  Display  for  Function  { 
@@ -195,5 +230,29 @@ pub(super) fn is_fn_supported(ctx: &Pkcs11, function: Function) -> bool {
195230        Function :: GetFunctionStatus  => check_fn ! ( ctx,  GetFunctionStatus ) , 
196231        Function :: CancelFunction  => check_fn ! ( ctx,  CancelFunction ) , 
197232        Function :: WaitForSlotEvent  => check_fn ! ( ctx,  WaitForSlotEvent ) , 
233+         Function :: GetInterfaceList  => check_30_fn ! ( ctx,  GetInterfaceList ) , 
234+         Function :: GetInterface  => check_30_fn ! ( ctx,  GetInterface ) , 
235+         Function :: LoginUser  => check_30_fn ! ( ctx,  LoginUser ) , 
236+         Function :: SessionCancel  => check_30_fn ! ( ctx,  SessionCancel ) , 
237+         Function :: MessageEncryptInit  => check_30_fn ! ( ctx,  MessageEncryptInit ) , 
238+         Function :: EncryptMessage  => check_30_fn ! ( ctx,  EncryptMessage ) , 
239+         Function :: EncryptMessageBegin  => check_30_fn ! ( ctx,  EncryptMessageBegin ) , 
240+         Function :: EncryptMessageNext  => check_30_fn ! ( ctx,  EncryptMessageNext ) , 
241+         Function :: MessageEncryptFinal  => check_30_fn ! ( ctx,  MessageEncryptFinal ) , 
242+         Function :: MessageDecryptInit  => check_30_fn ! ( ctx,  MessageDecryptInit ) , 
243+         Function :: DecryptMessage  => check_30_fn ! ( ctx,  DecryptMessage ) , 
244+         Function :: DecryptMessageBegin  => check_30_fn ! ( ctx,  DecryptMessageBegin ) , 
245+         Function :: DecryptMessageNext  => check_30_fn ! ( ctx,  DecryptMessageNext ) , 
246+         Function :: MessageDecryptFinal  => check_30_fn ! ( ctx,  MessageDecryptFinal ) , 
247+         Function :: MessageSignInit  => check_30_fn ! ( ctx,  MessageSignInit ) , 
248+         Function :: SignMessage  => check_30_fn ! ( ctx,  SignMessage ) , 
249+         Function :: SignMessageBegin  => check_30_fn ! ( ctx,  SignMessageBegin ) , 
250+         Function :: SignMessageNext  => check_30_fn ! ( ctx,  SignMessageNext ) , 
251+         Function :: MessageSignFinal  => check_30_fn ! ( ctx,  MessageSignFinal ) , 
252+         Function :: MessageVerifyInit  => check_30_fn ! ( ctx,  MessageVerifyInit ) , 
253+         Function :: VerifyMessage  => check_30_fn ! ( ctx,  VerifyMessage ) , 
254+         Function :: VerifyMessageBegin  => check_30_fn ! ( ctx,  VerifyMessageBegin ) , 
255+         Function :: VerifyMessageNext  => check_30_fn ! ( ctx,  VerifyMessageNext ) , 
256+         Function :: MessageVerifyFinal  => check_30_fn ! ( ctx,  MessageVerifyFinal ) , 
198257    } 
199258} 
0 commit comments