Java API
HSM Dinamo
Loading...
Looking for...
No entries found
IssueHOTPBlobGenerate.java

Example of generating, checking and re-synchronizing a HOTP Blob OATH using the HSM. With seed generated inside the HSM.

See Note on examples.
package doxy.examples;
import com.dinamonetworks.Dinamo;
import br.com.trueaccess.TacException;
import br.com.trueaccess.TacNDJavaLib;
public class IssueHOTPBlobGenerate {
static String ip = "127.0.0.1";
static String user = "master";
static String password = "12345678";
public static void main(String[] args) throws TacException {
Dinamo api = new Dinamo();
api.openSession(ip, user, password);
String masterKeyName = "master_key";
/*
* Cria uma chave mestra.
* */
System.out.println("--> Cria chave mestra");
api.createKey(masterKeyName, TacNDJavaLib.ALG_AES_256, true);
/*
* Gera o Blog HOTP com a semente gerada dentro do HSM.
* */
System.out.println("--> Gera BLOB HOTP");
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).
*
* */
System.out.println("--> Recupera semente do BLOB HOTP");
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.
* */
System.out.println("--> Gera próximo OTP");
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.
*
* */
System.out.println("--> Verifica OTP");
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.
*
* */
System.out.println("--> Re-sincroniza o BLOB HOTP");
hotpGenBlob = api.resyncOATHBlobOTP(masterKeyName, "457762", "251104", hotpGenBlob);
/*
* Deleta a chave mestra.
* */
System.out.println("--> Deleta chave mestra");
api.deleteKey(masterKeyName);
api.closeSession();
}
}