API Java
HSM Dinamo
Cargando...
Buscando...
No se han encontrado entradas
MergeX9_24KeyParts.java

Ejemplo de unión de componentes de llave según la norma ANSI X9.24.

Véase la nota sobre ejemplos.
package doxy.examples;
import com.dinamonetworks.Dinamo;
import br.com.trueaccess.TacException;
import br.com.trueaccess.TacNDJavaLib;
public class MergeX9_24KeyParts {
public static void main(String[] args) throws TacException {
Dinamo api = new Dinamo();
api.openSession("127.0.0.1", "master", "12345678", false);
final String PART1 = "x924_part1";
final String PART2 = "x924_part2";
final String PART3 = "x924_part3";
final String DEST = "x924_merged";
// Componentes com valor zero: XOR(0, 0, 0) = 0
// KCV X9.24 da chave zero AES-128 (AES-ECB de 16 bytes zero, primeiros 3 bytes)
byte[] zeroPart = new byte[16];
byte[] expectedKcv = {(byte)0x66, (byte)0xE9, (byte)0x4B};
// Importa 3 componentes AES-128 com o atributo de componente X9.24.
// Em produção, cada componente vem de um custodiante diferente.
api.importKey(PART1, TacNDJavaLib.PLAINTEXTKEY_BLOB,
TacNDJavaLib.ALG_AES_128, TacNDJavaLib.AUP_EFT_X9_24_PART,
zeroPart, zeroPart.length);
api.importKey(PART2, TacNDJavaLib.PLAINTEXTKEY_BLOB,
TacNDJavaLib.ALG_AES_128, TacNDJavaLib.AUP_EFT_X9_24_PART,
zeroPart, zeroPart.length);
api.importKey(PART3, TacNDJavaLib.PLAINTEXTKEY_BLOB,
TacNDJavaLib.ALG_AES_128, TacNDJavaLib.AUP_EFT_X9_24_PART,
zeroPart, zeroPart.length);
// Junta os 3 componentes. O HSM verifica o KCV após o XOR:
// se não corresponder, a chave gerada é removida e a operação retorna erro.
// EXPORTABLE_KEY é proibido nos atributos de destino.
api.mergeX9_24KeyParts(DEST, TacNDJavaLib.AUP_DATA_CRYPTO,
PART1, PART2, PART3, expectedKcv);
System.out.println("Chave resultante criada com sucesso: " + DEST);
// Para junção com 2 componentes, passe null para o terceiro:
api.deleteKey(DEST);
api.mergeX9_24KeyParts(DEST, TacNDJavaLib.AUP_DATA_CRYPTO,
PART1, PART2, null, expectedKcv);
System.out.println("Junção de 2 componentes concluída com sucesso.");
// Limpeza
api.deleteKey(PART1);
api.deleteKey(PART2);
api.deleteKey(PART3);
api.deleteKey(DEST);
api.closeSession();
}
}