public class Session extends Object
TokenInfo tokenInfo = token.getTokenInfo();
// check, if log-in of the user is required at all
if (tokenInfo.isLoginRequired()) {
// check, if the token has own means to authenticate the user; e.g. a
// PIN-pad on the reader
if (tokenInfo.isProtectedAuthenticationPath()) {
System.out.println(
"Please enter the user PIN at the PIN-pad of your reader.");
// the token prompts the PIN by other means; e.g. PIN-pad
session.login(Session.UserType.USER, null);
} else {
System.out.print("Enter user-PIN and press [return key]: ");
System.out.flush();
BufferedReader input = new BufferedReader(
new InputStreamReader(System.in));
String userPINString = input.readLine();
session.login(Session.UserType.USER, userPINString.toCharArray());
}
}
With this session object the application can search for token objects and
perform a cryptographic operation. For example, to find private RSA keys that
the application can use for signing, you can write:
RSAPrivateKey privateSignatureKeyTemplate = new RSAPrivateKey();
privateSignatureKeyTemplate.getSign().setBooleanValue(Boolean.TRUE);
session.findObjectsInit(privateSignatureKeyTemplate);
PKCS11Object[] privateSignatureKeys;
List signatureKeyList = new Vector(4);
while ((privateSignatureKeys = session.findObjects(1)).length > 0) {
signatureKeyList.add(privateSignatureKeys[0]);
}
session.findObjectsFinal();
Having chosen one of this keys, the application can create a signature value
using it.
// e.g. the encoded digest info object that contains an identifier of the
// hash algorithm and the hash value
byte[] toBeSigned;
// toBeSigned = ... assign value
RSAPrivateKey selectedSignatureKey;
// selectedSignatureKey = ... assign one of the available signature keys
// initialize for signing
session.signInit(Mechanism.RSA_PKCS, selectedSignatureKey);
// sign the data to be signed
byte[] signatureValue = session.sign(toBeSigned);
If the application does not need the session any longer, it should close the
session.
session.closeSession();
PKCS11Object,
Parameters,
Session,
SessionInfo| Modifier and Type | Class and Description |
|---|---|
static interface |
Session.UserType
This interface defines the different user types of PKCS#11.
|
| Modifier | Constructor and Description |
|---|---|
protected |
Session(Token token,
long sessionHandle)
Constructor taking the token and the session handle.
|
| Modifier and Type | Method and Description |
|---|---|
void |
closeSession()
Closes this session.
|
PKCS11Object |
copyObject(PKCS11Object sourceObject,
PKCS11Object templateObject)
Copy an existing object.
|
PKCS11Object |
createObject(PKCS11Object templateObject)
Create a new object on the token (or in the session).
|
int |
decrypt(byte[] in,
int inOfs,
int inLen,
byte[] out,
int outOfs,
int outLen)
Decrypts the given data with the key and mechanism given to the
decryptInit method.
|
int |
decryptFinal(byte[] out,
int outOfs,
int outLen)
This method finalizes a decryption operation and returns the final
result.
|
void |
decryptInit(Mechanism mechanism,
Key key)
Initializes a new decryption operation.
|
int |
decryptUpdate(byte[] in,
int inOfs,
int inLen,
byte[] out,
int outOfs,
int outLen)
This method can be used to decrypt multiple pieces of data; e.g.
|
Key |
deriveKey(Mechanism mechanism,
Key baseKey,
Key template)
Derives a new key from a specified base key using the given mechanism.
|
void |
destroyObject(PKCS11Object object)
Destroy a certain object on the token (or in the session).
|
int |
digest(byte[] in,
int inOfs,
int inLen,
byte[] digest,
int digestOfs,
int digestLen)
Digests the given data with the mechanism given to the digestInit method.
|
int |
digestFinal(byte[] digest,
int digestOfs,
int digestLen)
This method finalizes a digesting operation and returns the final result.
|
void |
digestInit(Mechanism mechanism)
Initializes a new digesting operation.
|
void |
digestKey(SecretKey key)
This method is similar to digestUpdate and can be combined with it during
one digesting operation.
|
int |
digestSingle(Mechanism mechanism,
byte[] in,
int inOfs,
int inLen,
byte[] digest,
int digestOfs,
int digestLen)
This method digests data in a single part.
|
void |
digestUpdate(byte[] part,
int partOfs,
int partLen)
This method can be used to digest multiple pieces of data; e.g.
|
int |
encrypt(byte[] in,
int inOfs,
int inLen,
byte[] out,
int outOfs,
int outLen)
Encrypts the given data with the key and mechanism given to the
encryptInit method.
|
int |
encryptFinal(byte[] out,
int outOfs,
int outLen)
This method finalizes an encryption operation and returns the final
result.
|
void |
encryptInit(Mechanism mechanism,
Key key)
Initializes a new encryption operation.
|
int |
encryptUpdate(byte[] in,
int inOfs,
int inLen,
byte[] out,
int outOfs,
int outLen)
This method can be used to encrypt multiple pieces of data; e.g.
|
boolean |
equals(Object otherObject)
Compares the sessionHandle and token of this object with the other
object.
|
PKCS11Object[] |
findObjects(int maxObjectCount)
Finds objects that match the template object passed to findObjectsInit.
|
void |
findObjectsFinal()
Finalizes a find operation.
|
void |
findObjectsInit(PKCS11Object templateObject)
Initializes a find operations that provides means to find objects by
passing a template object.
|
PKCS11Object |
generateKey(Mechanism mechanism,
PKCS11Object template)
Generate a new secret key or a set of domain parameters.
|
KeyPair |
generateKeyPair(Mechanism mechanism,
PKCS11Object publicKeyTemplate,
PKCS11Object privateKeyTemplate)
Generate a new public key - private key key-pair and use the set
attributes of the template objects for setting the attributes of the new
public key and private key objects.
|
byte[] |
generateRandom(int numberOfBytesToGenerate)
Generates a certain number of random bytes.
|
PKCS11Object |
getAttributeValues(PKCS11Object objectToRead)
Reads all the attributes of the given PKCS11Object from the token and
returns a new PKCS11Object that contains all these attributes.
|
Module |
getModule()
Get the Module which this Session object operates with.
|
byte[] |
getOperationState()
Get the current operation state.
|
long |
getSessionHandle()
Get the handle of this session.
|
SessionInfo |
getSessionInfo()
Get information about this session.
|
Token |
getToken()
Get the token that created this Session object.
|
int |
hashCode()
The overriding of this method should ensure that the objects of this
class work correctly in a hashtable.
|
void |
login(boolean userType,
char[] pin)
Logs in the user or the security officer to the session.
|
void |
login(long userType,
char[] pin)
Logs in the user or the security officer to the session.
|
void |
logout()
Logs out this session.
|
void |
seedRandom(byte[] seed)
Mixes additional seeding material into the random number generator.
|
void |
setAttributeValues(PKCS11Object objectToUpdate,
PKCS11Object templateObject)
Gets all present attributes of the given template object an writes them
to the object to update on the token (or in the session).
|
void |
setOperationState(byte[] operationState,
Key encryptionKey,
Key authenticationKey)
Sets the operation state of this session to a previously saved one.
|
void |
setSessionHandle(long sessionHandle) |
byte[] |
sign(byte[] data)
Signs the given data with the key and mechanism given to the signInit
method.
|
byte[] |
signFinal(int expectedLen)
This method finalizes a signing operation and returns the final result.
|
void |
signInit(Mechanism mechanism,
Key key)
Initializes a new signing operation.
|
int |
signRecover(byte[] in,
int inOfs,
int inLen,
byte[] out,
int outOfs,
int outLen)
Signs the given data with the key and mechanism given to the
signRecoverInit method.
|
void |
signRecoverInit(Mechanism mechanism,
Key key)
Initializes a new signing operation for signing with recovery.
|
void |
signUpdate(byte[] in,
int inOfs,
int inLen)
This method can be used to sign multiple pieces of data; e.g.
|
String |
toString()
Returns the string representation of this object.
|
Key |
unwrapKey(Mechanism mechanism,
Key unwrappingKey,
byte[] wrappedKey,
PKCS11Object keyTemplate)
Unwraps (decrypts) the given encrypted key with the unwrapping key using
the given mechanism.
|
void |
verify(byte[] data,
byte[] signature)
Verifies the given signature against the given data with the key and
mechanism given to the verifyInit method.
|
void |
verifyFinal(byte[] signature)
This method finalizes a verification operation.
|
void |
verifyInit(Mechanism mechanism,
Key key)
Initializes a new verification operation.
|
int |
verifyRecover(byte[] in,
int inOfs,
int inLen,
byte[] out,
int outOfs,
int outLen)
Signs the given data with the key and mechanism given to the
signRecoverInit method.
|
void |
verifyRecoverInit(Mechanism mechanism,
Key key)
Initializes a new verification operation for verification with data
recovery.
|
void |
verifyUpdate(byte[] in,
int inOfs,
int inLen)
This method can be used to verify a signature with multiple pieces of
data; e.g.
|
byte[] |
wrapKey(Mechanism mechanism,
Key wrappingKey,
Key key)
Wraps (encrypts) the given key with the wrapping key using the given
mechanism.
|
protected Session(Token token, long sessionHandle)
token - The token this session operates with.sessionHandle - The session handle to perform the operations with.public void closeSession()
throws TokenException
TokenException - If closing the session failed.public boolean equals(Object otherObject)
public int hashCode()
public long getSessionHandle()
public SessionInfo getSessionInfo() throws TokenException
TokenException - If getting the information failed.public Module getModule()
public Token getToken()
public byte[] getOperationState()
throws TokenException
TokenException - If saving the state fails or is not possible.setOperationState(byte[],Key,Key)public void setOperationState(byte[] operationState,
Key encryptionKey,
Key authenticationKey)
throws TokenException
operationState - The previously saved state as returned by getOperationState().encryptionKey - A encryption or decryption key, if a encryption or decryption
operation was saved which should be continued, but the keys
could not be saved.authenticationKey - A signing, verification of MAC key, if a signing, verification
or MAC operation needs to be restored that could not save the
key.TokenException - If restoring the state fails.getOperationState()public void setSessionHandle(long sessionHandle)
public void login(boolean userType,
char[] pin)
throws TokenException
userType - UserType.SO for the security officer or UserType.USER to login
the user.pin - The PIN. The security officer-PIN or the user-PIN depending on
the userType parameter.TokenException - If login fails.public void login(long userType,
char[] pin)
throws TokenException
userType - PKCS11Constants.CKU_SO for the security officer or
PKCS11Constants.CKU_USER to login the user.pin - The PIN. The security officer-PIN or the user-PIN depending on
the userType parameter.TokenException - If login fails.public void logout()
throws TokenException
TokenException - If logging out the session fails.public PKCS11Object createObject(PKCS11Object templateObject) throws TokenException
ValuedSecretKey aesKeyTemplate =
new ValuedSecretKey(PKCS11Constants.CKK_AES);
aesKeyTemplate.setValue(myDesKeyValueAs8BytesLongByteArray);
aesKeyTemplate.setToken(Boolean.TRUE);
aesKeyTemplate.setPrivate(Boolean.TRUE);
aesKeyTemplate.setEncrypt(Boolean.TRUE);
aesKeyTemplate.setDecrypt(Boolean.TRUE);
...
ValuedSecretKey theCreatedAESKeyObject =
(ValuedSecretKey) userSession.createObject(aesKeyTemplate);
Refer to the PKCS#11 standard to find out what attributes must be
set for certain types of objects to create them on the token.templateObject - The template object that holds all values that the new object on
the token should contain. (this is not a Object!)TokenException - If the creation of the new object fails. If it fails, the no
new object was created on the token.public PKCS11Object copyObject(PKCS11Object sourceObject, PKCS11Object templateObject) throws TokenException
sourceObject - The source object of the copy operation.templateObject - A template object which's attribute values are used for the new
object; i.e. they have higher priority than the attribute values
from the source object. May be null; in that case the new object
is just a one-to-one copy of the sourceObject.TokenException - If copying the object fails for some reason.public void setAttributeValues(PKCS11Object objectToUpdate, PKCS11Object templateObject) throws TokenException
objectToUpdate - The attributes of this object get updated.templateObject - This methods gets all present attributes of this template object
and set this attributes at the objectToUpdate.TokenException - If update of the attributes fails. All or no attributes are
updated.public PKCS11Object getAttributeValues(PKCS11Object objectToRead) throws TokenException
objectToRead - The object to newly read from the token.TokenException - If reading the attributes fails.public void destroyObject(PKCS11Object object) throws TokenException
object - The object that should be destroyed.TokenException - If the object could not be destroyed.public void findObjectsInit(PKCS11Object templateObject) throws TokenException
templateObject - The object that serves as a template for searching. If this
object is null, the find operation will find all objects that
this session can see. Notice, that only a user session will see
private objects.TokenException - If initializing the find operation fails.public PKCS11Object[] findObjects(int maxObjectCount) throws TokenException
maxObjectCount - Specifies how many objects to return with this call.TokenException - A plain TokenException if something during PKCS11 FindObject
went wrong, a TokenException with a nested TokenException if
the Exception is raised during object parsing.public void findObjectsFinal()
throws TokenException
TokenException - If finalizing the current find operation was not possible.public void encryptInit(Mechanism mechanism, Key key) throws TokenException
mechanism - The mechanism to use; e.g. Mechanism.DES_CBC.key - The decryption key to use.TokenException - If initializing this operation failed.public int encrypt(byte[] in,
int inOfs,
int inLen,
byte[] out,
int outOfs,
int outLen)
throws TokenException
in - buffer containing the to-be-encrypted datainOfs - buffer offset of the to-be-encrypted datainLen - length of the to-be-encrypted dataout - buffer for the encrypted dataoutOfs - buffer offset for the encrypted dataoutLen - buffer size for the encrypted dataTokenException - If encrypting failed.public int encryptUpdate(byte[] in,
int inOfs,
int inLen,
byte[] out,
int outOfs,
int outLen)
throws TokenException
in - buffer containing the to-be-encrypted datainOfs - buffer offset of the to-be-encrypted datainLen - length of the to-be-encrypted dataout - buffer for the encrypted dataoutOfs - buffer offset for the encrypted dataoutLen - buffer size for the encrypted dataTokenException - If encrypting the data failed.public int encryptFinal(byte[] out,
int outOfs,
int outLen)
throws TokenException
out - buffer for the encrypted dataoutOfs - buffer offset for the encrypted dataoutLen - buffer size for the encrypted dataTokenException - If calculating the final result failed.public void decryptInit(Mechanism mechanism, Key key) throws TokenException
mechanism - The mechanism to use; e.g. Mechanism.DES_CBC.key - The decryption key to use.TokenException - If initializing this operation failed.public int decrypt(byte[] in,
int inOfs,
int inLen,
byte[] out,
int outOfs,
int outLen)
throws TokenException
in - buffer containing the to-be-decrypted datainOfs - buffer offset of the to-be-decrypted datainLen - length of the to-be-decrypted dataout - buffer for the decrypted dataoutOfs - buffer offset for the decrypted dataoutLen - buffer size for the decrypted dataTokenException - If decrypting failed.public int decryptUpdate(byte[] in,
int inOfs,
int inLen,
byte[] out,
int outOfs,
int outLen)
throws TokenException
in - buffer containing the to-be-decrypted datainOfs - buffer offset of the to-be-decrypted datainLen - length of the to-be-decrypted dataout - buffer for the decrypted dataoutOfs - buffer offset for the decrypted dataoutLen - buffer size for the decrypted dataTokenException - If decrypting the data failed.public int decryptFinal(byte[] out,
int outOfs,
int outLen)
throws TokenException
out - buffer for the decrypted dataoutOfs - buffer offset for the decrypted dataoutLen - buffer size for the decrypted dataTokenException - If calculating the final result failed.public void digestInit(Mechanism mechanism) throws TokenException
mechanism - The mechanism to use; e.g. Mechanism.SHA_1.TokenException - If initializing this operation failed.public int digest(byte[] in,
int inOfs,
int inLen,
byte[] digest,
int digestOfs,
int digestLen)
throws TokenException
in - buffer containing the to-be-digested datainOfs - buffer offset of the to-be-digested datainLen - length of the to-be-digested datadigest - buffer for the digested datadigestOfs - buffer offset for the digested datadigestLen - buffer size for the digested dataTokenException - If digesting the data failed.public int digestSingle(Mechanism mechanism, byte[] in, int inOfs, int inLen, byte[] digest, int digestOfs, int digestLen) throws TokenException
mechanism - The mechanism to use; e.g. Mechanism.SHA_1.in - buffer containing the to-be-digested datainOfs - buffer offset of the to-be-digested datainLen - length of the to-be-digested datadigest - buffer for the digested datadigestOfs - buffer offset for the digested datadigestLen - buffer size for the digested dataTokenException - If digesting the data failed.public void digestUpdate(byte[] part,
int partOfs,
int partLen)
throws TokenException
part - buffer containing the to-be-digested datapartOfs - buffer offset of the to-be-digested datapartLen - length of the to-be-digested dataTokenException - If digesting the data failed.public void digestKey(SecretKey key) throws TokenException
key - The key to digest the value of.TokenException - If digesting the key failed.public int digestFinal(byte[] digest,
int digestOfs,
int digestLen)
throws TokenException
digest - buffer for the message digestdigestOfs - buffer offset for the message digestdigestLen - buffer size for the message digestTokenException - If calculating the final message digest failed.public void signInit(Mechanism mechanism, Key key) throws TokenException
mechanism - The mechanism to use; e.g. Mechanism.RSA_PKCS.key - The signing key to use.TokenException - If initializing this operation failed.public byte[] sign(byte[] data)
throws TokenException
data - The data to sign.TokenException - If signing the data failed.public void signUpdate(byte[] in,
int inOfs,
int inLen)
throws TokenException
in - buffer containing the to-be-signed datainOfs - buffer offset of the to-be-signed datainLen - length of the to-be-signed dataTokenException - If signing the data failed.public byte[] signFinal(int expectedLen)
throws TokenException
expectedLen - expected length of the signature value.TokenException - If calculating the final signature value failed.public void signRecoverInit(Mechanism mechanism, Key key) throws TokenException
mechanism - The mechanism to use; e.g. Mechanism.RSA_9796.key - The signing key to use.TokenException - If initializing this operation failed.public int signRecover(byte[] in,
int inOfs,
int inLen,
byte[] out,
int outOfs,
int outLen)
throws TokenException
in - buffer containing the to-be-signed datainOfs - buffer offset of the to-be-signed datainLen - length of the to-be-signed dataout - buffer for the signed dataoutOfs - buffer offset for the signed dataoutLen - buffer size for the signed dataTokenException - If signing the data failed.public void verifyInit(Mechanism mechanism, Key key) throws TokenException
mechanism - The mechanism to use; e.g. Mechanism.RSA_PKCS.key - The verification key to use.TokenException - If initializing this operation failed.public void verify(byte[] data,
byte[] signature)
throws TokenException
data - The data that was signed.signature - The signature or MAC to verify.TokenException - If verifying the signature fails. This is also the case, if
the signature is forged.public void verifyUpdate(byte[] in,
int inOfs,
int inLen)
throws TokenException
in - buffer containing the to-be-verified datainOfs - buffer offset of the to-be-verified datainLen - length of the to-be-verified dataTokenException - If verifying (e.g. digesting) the data failed.public void verifyFinal(byte[] signature)
throws TokenException
signature - The signature value.TokenException - If verifying the signature fails. This is also the case, if
the signature is forged.public void verifyRecoverInit(Mechanism mechanism, Key key) throws TokenException
mechanism - The mechanism to use; e.g. Mechanism.RSA_9796.key - The verification key to use.TokenException - If initializing this operation failed.public int verifyRecover(byte[] in,
int inOfs,
int inLen,
byte[] out,
int outOfs,
int outLen)
throws TokenException
in - buffer containing the to-be-verified datainOfs - buffer offset of the to-be-verified datainLen - length of the to-be-verified dataout - buffer for the verified dataoutOfs - buffer offset for the verified dataoutLen - buffer size for the verified dataTokenException - If signing the data failed.public PKCS11Object generateKey(Mechanism mechanism, PKCS11Object template) throws TokenException
mechanism - The mechanism to generate a key for; e.g. Mechanism.DES to
generate a DES key.template - The template for the new key or domain parameters; e.g. a
DESSecretKey object which has set certain attributes.TokenException - If generating a new secret key or domain parameters failed.public KeyPair generateKeyPair(Mechanism mechanism, PKCS11Object publicKeyTemplate, PKCS11Object privateKeyTemplate) throws TokenException
mechanism - The mechanism to generate a key for; e.g. Mechanism.RSA to
generate a new RSA key-pair.publicKeyTemplate - The template for the new public key part; e.g. a RSAPublicKey
object which has set certain attributes (e.g. public exponent
and verify).privateKeyTemplate - The template for the new private key part; e.g. a RSAPrivateKey
object which has set certain attributes (e.g. sign and decrypt).TokenException - If generating a new key-pair failed.public byte[] wrapKey(Mechanism mechanism, Key wrappingKey, Key key) throws TokenException
mechanism - The mechanism to use for wrapping the key.wrappingKey - The key to use for wrapping (encrypting).key - The key to wrap (encrypt).TokenException - If wrapping the key failed.public Key unwrapKey(Mechanism mechanism, Key unwrappingKey, byte[] wrappedKey, PKCS11Object keyTemplate) throws TokenException
mechanism - The mechanism to use for unwrapping the key.unwrappingKey - The key to use for unwrapping (decrypting).wrappedKey - The encrypted key to unwrap (decrypt).keyTemplate - The template for creating the new key object.TokenException - If unwrapping the key or creating a new key object failed.public Key deriveKey(Mechanism mechanism, Key baseKey, Key template) throws TokenException
mechanism - The mechanism to use for deriving the new key from the base key.baseKey - The key to use as base for derivation.template - The template for creating the new key object.TokenException - If deriving the key or creating a new key object failed.public void seedRandom(byte[] seed)
throws TokenException
seed - The seed bytes to mix in.TokenException - If mixing in the seed failed.public byte[] generateRandom(int numberOfBytesToGenerate)
throws TokenException
numberOfBytesToGenerate - The number of random bytes to generate.TokenException - If generating random bytes failed.Copyright © 2020. All rights reserved.