The PKCS #11 library files conform to the MISRA C:2012
guidelines, with some noted exceptions. Compliance is checked with Coverity static analysis.
Deviations from the MISRA standard are listed below:
Deviation |
Category |
Justification |
Directive 4.5 |
Advisory |
Allow names that MISRA considers ambiguous (such as LogInfo and LogError) |
Directive 4.8 |
Advisory |
Allow inclusion of unused types. Header files for a specific port, which are needed by all files, may define types that are not used by a specific file. |
Directive 4.9 |
Advisory |
Allow inclusion of function like macros. The assert macro is used throughout the library for parameter validation, and logging is done using function like macros. |
Rule 2.4 |
Advisory |
Allow unused tags. Some compilers warn if types are not tagged. |
Rule 2.5 |
Advisory |
Allow unused macros. Library headers may define macros intended for the application's use, but are not used by a specific file. |
Rule 3.1 |
Required |
Allow nested comments. C++ style // comments are used in example code within Doxygen documentation blocks. |
Rule 8.13 |
Advisory |
A pointer should be a const qualified type whenever possible. The files could be const qualified but the header files pkcs11.h , pkcs11t.h , and pkcs11f.h are derived from the PKCS #11 specification, and cannot be modified. |
| Rule 11.5 | Advisory | Allow casts from void *
. Fields such as publish payloads are passed as void *
and must be cast to the correct data type before use. |
| Rule 21.1 | Required | Allow use of all macro names. For compatibility, some macros introduced in C99 are defined for use with C90 compilers. |
| Rule 21.2 | Required | Allow use of all macro and identifier names. For compatibility, some macros introduced in C99 are defined for use with C90 compilers. |
Deviation |
Category |
Justification |
Rule 8.7 |
Advisory |
API functions are not used by the library outside of the files they are defined; however, they must be externally visible in order to be used by an application. |
Suppressed with Coverity Comments
Deviation |
Category |
Justification |
Rule 10.5 |
Advisory |
The value of an expression should not be cast to an inappropriate essential type. The boolean type of the PKCS #11 standard is an unsigned char, which is an acceptable base type for a boolean type. |