This package contains the first (lowest) Java layer of the PKCS#11 wrapper. It is a straight-forward mapping of the PKCS#11 API from the C programming language to the Java programming language. As a result, it is not really object oriented in its style and handling as know from Java. Anyone familiar with PKCS#11 in C, will find this layer easy to use. All methods of the `PKCS11` interface have the same name as the corresponding functions of PKCS#11, and all classes have the same name as the corresponding data structures of PKCS#11. The developer can use this layer directly or may use the next higher level layer that is located in the `iaik.pkcs.pkcs11` package and in the `iaik.pkcs.pkcs11.objects` package. If the application uses this layer directly, it calls `PKCS11Connector.connectToPKCS11Module(String)` (passing the PKCS#11 module as parameter; e.g. "C:\Program Files\Drivers\mypkcs11driver.dll") to get an implementation of the `PKCS11` interface. Through this object, the application accesses all the functionality of the underlaying PKCS#11 module.
The main differeces between this API to the original PKCS#11 API are:
* The functions in this package do not return return-values as know from PKCS#11. If the underlying PKCS#11 module returns a value other than CKR_OK, the wrapper throws an `PKCS11Exception` which holds the return value for information.
* Where PKCS#11 functions use pointers to return various objects, such objects and values are returned directly as the regular return value of the according function.
* In Java, it is not necessary to store the length of an array separatly. Every array in Java 'knows' it own length.
Any PKCS#11 module compliant to PKCS#11 version 2.x should be compatible to this API. We used PKCS#11 version 2.11 as a basis for development.