@@ -18,16 +18,21 @@ use parsec_interface::requests::ResponseStatus;
18
18
use pkcs11:: errors:: Error ;
19
19
use pkcs11:: types:: * ;
20
20
21
+ /// Convert the PKCS 11 library specific error values to ResponseStatus values that are returned on
22
+ /// the wire protocol
23
+ ///
24
+ /// Most of them are PsaErrorCommunicationFailure as, in the general case, the calls to the PKCS11
25
+ /// library should suceed with the values crafted by the provider.
26
+ /// If an error happens in the PKCS11 library, it means that it was badly used by the provider or
27
+ /// that it failed in an unexpected way and hence the PsaErrorCommunicationFailure error.
28
+ /// The errors translated to response status are related with signature verification failure, lack
29
+ /// of memory, hardware failure, corruption detection, lack of entropy and unsupported operations.
21
30
pub fn to_response_status ( error : Error ) -> ResponseStatus {
22
31
match error {
23
32
Error :: Io ( e) => ResponseStatus :: from ( e) ,
24
- Error :: Module ( e) => {
33
+ Error :: Module ( e) | Error :: InvalidInput ( e ) => {
25
34
error ! ( "Conversion of error \" {}\" " , e) ;
26
- ResponseStatus :: PsaErrorGenericError
27
- }
28
- Error :: InvalidInput ( e) => {
29
- error ! ( "Conversion of error \" {}\" " , e) ;
30
- ResponseStatus :: PsaErrorInvalidArgument
35
+ ResponseStatus :: PsaErrorCommunicationFailure
31
36
}
32
37
Error :: Pkcs11 ( ck_rv) => rv_to_response_status ( ck_rv) ,
33
38
}
@@ -36,106 +41,25 @@ pub fn to_response_status(error: Error) -> ResponseStatus {
36
41
pub fn rv_to_response_status ( rv : CK_RV ) -> ResponseStatus {
37
42
match rv {
38
43
CKR_OK => ResponseStatus :: Success ,
39
- CKR_CANCEL => ResponseStatus :: PsaErrorGenericError ,
40
44
CKR_HOST_MEMORY => ResponseStatus :: PsaErrorInsufficientMemory ,
41
- CKR_SLOT_ID_INVALID => ResponseStatus :: PsaErrorInvalidArgument ,
42
- CKR_GENERAL_ERROR => ResponseStatus :: PsaErrorGenericError ,
43
- CKR_FUNCTION_FAILED => ResponseStatus :: PsaErrorGenericError ,
44
- CKR_ARGUMENTS_BAD => ResponseStatus :: PsaErrorInvalidArgument ,
45
- CKR_NO_EVENT => ResponseStatus :: PsaErrorGenericError ,
46
- CKR_NEED_TO_CREATE_THREADS => ResponseStatus :: PsaErrorInvalidArgument ,
47
- CKR_CANT_LOCK => ResponseStatus :: PsaErrorInvalidArgument ,
48
- CKR_ATTRIBUTE_READ_ONLY => ResponseStatus :: PsaErrorNotPermitted ,
49
- CKR_ATTRIBUTE_SENSITIVE => ResponseStatus :: PsaErrorNotPermitted ,
50
- CKR_ATTRIBUTE_TYPE_INVALID => ResponseStatus :: PsaErrorInvalidArgument ,
51
- CKR_ATTRIBUTE_VALUE_INVALID => ResponseStatus :: PsaErrorInvalidArgument ,
52
- CKR_ACTION_PROHIBITED => ResponseStatus :: PsaErrorNotPermitted ,
53
- CKR_DATA_INVALID => ResponseStatus :: PsaErrorInvalidArgument ,
54
- CKR_DATA_LEN_RANGE => ResponseStatus :: PsaErrorInvalidArgument ,
55
45
CKR_DEVICE_ERROR => ResponseStatus :: PsaErrorHardwareFailure ,
56
46
CKR_DEVICE_MEMORY => ResponseStatus :: PsaErrorInsufficientStorage ,
57
47
CKR_DEVICE_REMOVED => ResponseStatus :: PsaErrorHardwareFailure ,
58
- CKR_ENCRYPTED_DATA_INVALID => ResponseStatus :: PsaErrorInvalidArgument ,
59
- CKR_ENCRYPTED_DATA_LEN_RANGE => ResponseStatus :: PsaErrorInvalidArgument ,
60
- CKR_FUNCTION_CANCELED => ResponseStatus :: PsaErrorGenericError ,
61
- CKR_FUNCTION_NOT_PARALLEL => ResponseStatus :: PsaErrorGenericError ,
62
- CKR_FUNCTION_NOT_SUPPORTED => ResponseStatus :: PsaErrorNotSupported ,
63
- CKR_KEY_HANDLE_INVALID => ResponseStatus :: PsaErrorInvalidHandle ,
64
- CKR_KEY_SIZE_RANGE => ResponseStatus :: PsaErrorNotSupported ,
65
- CKR_KEY_TYPE_INCONSISTENT => ResponseStatus :: PsaErrorInvalidArgument ,
66
- CKR_KEY_NOT_NEEDED => ResponseStatus :: PsaErrorInvalidArgument ,
67
- CKR_KEY_CHANGED => ResponseStatus :: PsaErrorInvalidArgument ,
68
- CKR_KEY_NEEDED => ResponseStatus :: PsaErrorInvalidArgument ,
69
- CKR_KEY_INDIGESTIBLE => ResponseStatus :: PsaErrorGenericError ,
70
- CKR_KEY_FUNCTION_NOT_PERMITTED => ResponseStatus :: PsaErrorNotPermitted ,
71
- CKR_KEY_NOT_WRAPPABLE => ResponseStatus :: PsaErrorNotSupported ,
72
- CKR_KEY_UNEXTRACTABLE => ResponseStatus :: PsaErrorNotPermitted ,
73
- CKR_MECHANISM_INVALID => ResponseStatus :: PsaErrorInvalidArgument ,
74
- CKR_MECHANISM_PARAM_INVALID => ResponseStatus :: PsaErrorInvalidArgument ,
75
- CKR_OBJECT_HANDLE_INVALID => ResponseStatus :: PsaErrorInvalidHandle ,
76
- CKR_OPERATION_ACTIVE => ResponseStatus :: PsaErrorBadState ,
77
- CKR_OPERATION_NOT_INITIALIZED => ResponseStatus :: PsaErrorGenericError ,
78
- CKR_PIN_INCORRECT => ResponseStatus :: PsaErrorNotPermitted ,
79
- CKR_PIN_INVALID => ResponseStatus :: PsaErrorInvalidArgument ,
80
- CKR_PIN_LEN_RANGE => ResponseStatus :: PsaErrorInvalidArgument ,
81
- CKR_PIN_EXPIRED => ResponseStatus :: PsaErrorBadState ,
82
- CKR_PIN_LOCKED => ResponseStatus :: PsaErrorNotPermitted ,
83
- CKR_SESSION_CLOSED => ResponseStatus :: PsaErrorBadState ,
84
- CKR_SESSION_COUNT => ResponseStatus :: PsaErrorBadState ,
85
- CKR_SESSION_HANDLE_INVALID => ResponseStatus :: PsaErrorInvalidHandle ,
86
- CKR_SESSION_PARALLEL_NOT_SUPPORTED => ResponseStatus :: PsaErrorNotSupported ,
87
- CKR_SESSION_READ_ONLY => ResponseStatus :: PsaErrorNotPermitted ,
88
- CKR_SESSION_EXISTS => ResponseStatus :: PsaErrorBadState ,
89
- CKR_SESSION_READ_ONLY_EXISTS => ResponseStatus :: PsaErrorBadState ,
90
- CKR_SESSION_READ_WRITE_SO_EXISTS => ResponseStatus :: PsaErrorBadState ,
91
48
CKR_SIGNATURE_INVALID => ResponseStatus :: PsaErrorInvalidSignature ,
92
49
CKR_SIGNATURE_LEN_RANGE => ResponseStatus :: PsaErrorInvalidSignature ,
93
- CKR_TEMPLATE_INCOMPLETE => ResponseStatus :: PsaErrorInvalidArgument ,
94
- CKR_TEMPLATE_INCONSISTENT => ResponseStatus :: PsaErrorInvalidArgument ,
95
50
CKR_TOKEN_NOT_PRESENT => ResponseStatus :: PsaErrorHardwareFailure ,
96
51
CKR_TOKEN_NOT_RECOGNIZED => ResponseStatus :: PsaErrorHardwareFailure ,
97
- CKR_TOKEN_WRITE_PROTECTED => ResponseStatus :: PsaErrorNotPermitted ,
98
- CKR_UNWRAPPING_KEY_HANDLE_INVALID => ResponseStatus :: PsaErrorInvalidArgument ,
99
- CKR_UNWRAPPING_KEY_SIZE_RANGE => ResponseStatus :: PsaErrorNotSupported ,
100
- CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT => ResponseStatus :: PsaErrorInvalidArgument ,
101
- CKR_USER_ALREADY_LOGGED_IN => ResponseStatus :: PsaErrorBadState ,
102
- CKR_USER_NOT_LOGGED_IN => ResponseStatus :: PsaErrorBadState ,
103
- CKR_USER_PIN_NOT_INITIALIZED => ResponseStatus :: PsaErrorBadState ,
104
- CKR_USER_TYPE_INVALID => ResponseStatus :: PsaErrorInvalidArgument ,
105
- CKR_USER_ANOTHER_ALREADY_LOGGED_IN => ResponseStatus :: PsaErrorBadState ,
106
- CKR_USER_TOO_MANY_TYPES => ResponseStatus :: PsaErrorBadState ,
107
- CKR_WRAPPED_KEY_INVALID => ResponseStatus :: PsaErrorInvalidArgument ,
108
- CKR_WRAPPED_KEY_LEN_RANGE => ResponseStatus :: PsaErrorInvalidArgument ,
109
- CKR_WRAPPING_KEY_HANDLE_INVALID => ResponseStatus :: PsaErrorInvalidArgument ,
110
- CKR_WRAPPING_KEY_SIZE_RANGE => ResponseStatus :: PsaErrorNotSupported ,
111
- CKR_WRAPPING_KEY_TYPE_INCONSISTENT => ResponseStatus :: PsaErrorInvalidArgument ,
112
- CKR_RANDOM_SEED_NOT_SUPPORTED => ResponseStatus :: PsaErrorInvalidArgument ,
113
52
CKR_RANDOM_NO_RNG => ResponseStatus :: PsaErrorInsufficientEntropy ,
114
- CKR_DOMAIN_PARAMS_INVALID => ResponseStatus :: PsaErrorInvalidArgument ,
115
- CKR_CURVE_NOT_SUPPORTED => ResponseStatus :: PsaErrorNotSupported ,
116
- CKR_BUFFER_TOO_SMALL => ResponseStatus :: PsaErrorBufferTooSmall ,
117
- CKR_SAVED_STATE_INVALID => ResponseStatus :: PsaErrorInvalidArgument ,
118
- CKR_INFORMATION_SENSITIVE => ResponseStatus :: PsaErrorNotPermitted ,
119
53
CKR_STATE_UNSAVEABLE => ResponseStatus :: PsaErrorHardwareFailure ,
120
- CKR_CRYPTOKI_NOT_INITIALIZED => ResponseStatus :: PsaErrorBadState ,
121
- CKR_CRYPTOKI_ALREADY_INITIALIZED => ResponseStatus :: PsaErrorBadState ,
122
- CKR_MUTEX_BAD => ResponseStatus :: PsaErrorInvalidArgument ,
123
- CKR_MUTEX_NOT_LOCKED => ResponseStatus :: PsaErrorBadState ,
124
- CKR_NEW_PIN_MODE => ResponseStatus :: PsaErrorGenericError ,
125
- CKR_NEXT_OTP => ResponseStatus :: PsaErrorGenericError ,
126
- CKR_EXCEEDED_MAX_ITERATIONS => ResponseStatus :: PsaErrorGenericError ,
127
- CKR_FIPS_SELF_TEST_FAILED => ResponseStatus :: PsaErrorGenericError ,
128
- CKR_LIBRARY_LOAD_FAILED => ResponseStatus :: ConnectionError ,
129
- CKR_PIN_TOO_WEAK => ResponseStatus :: PsaErrorInvalidArgument ,
130
- CKR_PUBLIC_KEY_INVALID => ResponseStatus :: PsaErrorInvalidArgument ,
131
- CKR_FUNCTION_REJECTED => ResponseStatus :: PsaErrorGenericError ,
132
- CKR_VENDOR_DEFINED => ResponseStatus :: PsaErrorGenericError ,
54
+ s @ CKR_CURVE_NOT_SUPPORTED
55
+ | s @ CKR_DOMAIN_PARAMS_INVALID
56
+ | s @ CKR_FUNCTION_NOT_SUPPORTED => {
57
+ error ! ( "Not supported value ({:?})" , s) ;
58
+ ResponseStatus :: PsaErrorNotSupported
59
+ }
133
60
e => {
134
- error ! (
135
- "Can not encode value {} into on of the possible PKCS#11 return values." ,
136
- e
137
- ) ;
138
- ResponseStatus :: InvalidEncoding
61
+ error ! ( "Error \" {}\" converted to PsaErrorCommunicationFailure." , e) ;
62
+ ResponseStatus :: PsaErrorCommunicationFailure
139
63
}
140
64
}
141
65
}
0 commit comments