IssueHOTPBlobGenerate.java

Exemplo de geração, verificação e re-sincronização de Blob HOTP OATH utilizando o HSM. Com semente gerada dentro do HSM.

Veja Nota sobre os exemplos.
package doxy.examples;
public class IssueHOTPBlobGenerate {
public static void main(String[] args) throws TacException {
Dinamo api = new Dinamo();
api.openSession("10.0.62.14", "master", "12345678");
String masterKeyName = "master_key";
//Se a chave não estiver gerada, utilizar a chamada abaixo.
//api.createKey(masterKeyName, TacNDJavaLib.ALG_AES_256, true);
/*
* Gera o Blog HOTP com a semente gerada dentro do HSM.
* */
byte[] hotpGenBlob = api.generateOATHHotpBlob(masterKeyName);
/*
* Recupera a semente do Blog OATH gerado pelo HSM.
*
* Esta semente pode ser transformada de binário para Base32
* e importada no client(Google Authenticator, por exemplo).
*
* */
byte[] hotpGenBlobSeed = api.getOATHSeed(masterKeyName, hotpGenBlob);
/*
* Esta chamada simula o cliente OTP. Ela gera o próximo OTP, sem alterar
* o conteúdo do OATH blob.
* */
String nextOtp = api.getNextOATHOTP(masterKeyName,
TacNDJavaLib.ISSUE_OATH_MIN_OTP_LEN,
hotpGenBlob);
/*
* Verifica o OTP e atualiza o Blob.
* O Blob anterior pode e deve ser descartado.
*
* */
hotpGenBlob = api.checkOATHBlobOTP(masterKeyName, nextOtp, hotpGenBlob);
/*
* Re-sincroniza o blob HOTP e atualiza o Blob.
* Usar quando o blob OATH estiver fora de sincronia.
* O Blob anterior pode e deve ser descartado.
*
* Passa-se 2 OTPs consecutivos para que o HSM ajuste a janela de eventos.
*
* */
hotpGenBlob = api.resyncOATHBlobOTP(masterKeyName, "457762", "251104", hotpGenBlob);
api.closeSession();
}
}