Jump to content

click.png

click.png

click.png

click.png click.png click.png

click.png click.png click.png

click.png

click.png

click.png

click.png

click.png

click.png

Ead Ao Gerar Arquivos


vasilvei
  • Este tópico foi criado há 3096 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Bom bia gostaria de uma ajuda para desenvolver a assinatura do EAD.

 

quando eu mando gerar os arquivos espelho, LMFC por exemplo ele gera mas dá um erro da chave, eu tentei implementar o

 

 

ACbrEAD.java:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jACBrFramework.serial.ecf;

import com.sun.jna.ptr.IntByReference;
import jACBrFramework.ACBrClass;
import jACBrFramework.ACBrEventListener;
import jACBrFramework.ACBrException;
import jACBrFramework.ChaveEventObject;
import jACBrFramework.interop.ACBrEADInterop;
import java.nio.ByteBuffer;

/**
 *
 * @author Valde
 */
public class ACBrEAD extends ACBrClass {

    public ACBrEAD() throws ACBrException {
    }

    @Override
    protected void onInitialize() throws ACBrException {
        IntByReference handle = new IntByReference();
        int ret = ACBrEADInterop.INSTANCE.EAD_Create(handle);
        checkResult(ret);

        setHandle(handle.getValue());
    }

    @Override
    protected void onFinalize() throws ACBrException {
        int ret = ACBrEADInterop.INSTANCE.EAD_Destroy(getHandle());
        checkResult(ret);

        setHandle(0);
    }

    @Override
    protected void checkResult(int result) throws ACBrException {
        switch (result) {
            case -1:
                String message;

                int LEN = 1024;
                ByteBuffer buffer = ByteBuffer.allocate(LEN);
                int ret = ACBrEADInterop.INSTANCE.EAD_GetUltimoErro(getHandle(), buffer, LEN);

                message = fromUTF8(buffer, ret);
                throw new ACBrException(message);


            case -2:
                throw new ACBrException("ACBr EAD não inicializado.");
        }
    }

    public void addOnGetChavePrivada(ACBrEventListener<ChaveEventObject> listener) {
        if (!hasListeners("OnGetChavePrivada")) {
            ACBrEADInterop.INSTANCE.EAD_SetOnGetChavePrivada(getHandle(), new ACBrEADInterop.GetChavePrivadaCallback() {
                @Override
                public String invoke() {
                    return OnGetChavePrivada();
                }
            });
        }

        addListener("OnGetChavePrivada", listener);
    }

    public void removeOnPAFGetKeyRSA(ACBrEventListener<ChaveEventObject> listener) {
        removeListener("OnGetChavePrivada", listener);

        if (!hasListeners("OnGetChavePrivada")) {
            ACBrEADInterop.INSTANCE.EAD_SetOnGetChavePrivada(getHandle(), null);
        }
    }

    private String OnGetChavePrivada() {
        ChaveEventObject e = new ChaveEventObject(this, "");
        notifyListeners("OnGetChavePrivada", e);

        return e.getChave();
    }

    public void addOnGetChavePublica(ACBrEventListener<ChaveEventObject> listener) {
        if (!hasListeners("OnGetChavePublica")) {
            ACBrEADInterop.INSTANCE.EAD_SetOnGetChavePublica(getHandle(), new ACBrEADInterop.GetChavePublicaCallback() {
                @Override
                public String invoke() {
                    return OnGetChavePublica();
                }
            });
        }

        addListener("OnGetChavePublica", listener);
    }

    public void removeOnGetChavePublica(ACBrEventListener<ChaveEventObject> listener) {
        removeListener("OnGetChavePublica", listener);

        if (!hasListeners("OnGetChavePublica")) {
            ACBrEADInterop.INSTANCE.EAD_SetOnGetChavePublica(getHandle(), null);
        }
    }

    private String OnGetChavePublica() {
        ChaveEventObject e = new ChaveEventObject(this, "");
        notifyListeners("OnGetChavePublica", e);

        return e.getChave();
    }

    // Funções
    /**
     * @return String
     * @param arquivo local para gravar o arquivo
     * @param remove boolean
     * @throws ACBrException
     */
    public String assinarArquivoComEAD(String nomeArquivo, boolean remove) throws ACBrException {
        ByteBuffer returnBuffer = ByteBuffer.allocate(STR_BUFFER_LEN);
        int ret = ACBrEADInterop.INSTANCE.EAD_AssinarArquivoComEAD(getHandle(), toUTF8(nomeArquivo), remove, returnBuffer, STR_BUFFER_LEN);
        checkResult(ret);

        return fromUTF8(returnBuffer, ret);
    }

    public String calcularChavePublica() throws ACBrException {
        ByteBuffer returnBuffer = ByteBuffer.allocate(STR_BUFFER_LEN);
        int ret = ACBrEADInterop.INSTANCE.EAD_CalcularChavePublica(getHandle(), returnBuffer, STR_BUFFER_LEN);
        checkResult(ret);

        return fromUTF8(returnBuffer, ret);
    }

    public void calcularEADArquivo(String nomeArquivo) throws ACBrException {
        ByteBuffer returnBuffer = ByteBuffer.allocate(STR_BUFFER_LEN);
        int ret = ACBrEADInterop.INSTANCE.EAD_CalcularEADArquivo(getHandle(), toUTF8(nomeArquivo), returnBuffer, STR_BUFFER_LEN);
        checkResult(ret);
    }

    //int EAD_GerarChaves(int eadHandle, ByteBuffer ChavePUB, ByteBuffer ChavePRI, int bufferLen);
    //int EAD_GerarXMLeECFc(int eadHandle, String NomeSH, String PathArquivo);
    //int EAD_MD5FromFile(int eadHandle, String Arquivo, ByteBuffer MD5, int bufferLen);
    //int EAD_MD5FromString(int eadHandle, String AString, ByteBuffer MD5, int bufferLen);
    public void gerarChaves() throws ACBrException {
        ByteBuffer returnBuffer = ByteBuffer.allocate(STR_BUFFER_LEN);
        int ret = ACBrEADInterop.INSTANCE.EAD_GerarChaves(getHandle(), returnBuffer, returnBuffer, STR_BUFFER_LEN);
        checkResult(ret);
    }

    public void gerarXMLeECFc(String nomeSH, String pathArquivo) throws ACBrException {
        int ret = ACBrEADInterop.INSTANCE.EAD_GerarXMLeECFc(getHandle(), toUTF8(nomeSH), toUTF8(pathArquivo));
        checkResult(ret);
    }

    public void removeEADArquivo(String nomeArquivo) throws ACBrException {
        int ret = ACBrEADInterop.INSTANCE.EAD_RemoveEADArquivo(getHandle(), toUTF8(nomeArquivo));
        checkResult(ret);
    }

    public boolean verificaEAD(String ead) throws ACBrException {
        int ret = ACBrEADInterop.INSTANCE.EAD_VerificarEAD(getHandle(), toUTF8(ead));
        checkResult(ret);
        return ret != 0;
    }

    public boolean verificaEADArquivo(String nomeArquivo) throws ACBrException {
        int ret = ACBrEADInterop.INSTANCE.EAD_VerificarEADArquivo(getHandle(), toUTF8(nomeArquivo));
        checkResult(ret);
        return ret != 0;
    }
}

Só que eu não sei como usar, se eu mando 

 

fazer isso:

 public static void gerarXMLeECFc(){
        try {
            ACBrEAD.gerarXMLeECFc("Belsystem Sistemas de automção LTDA", "c:\\Arena\\");
        } catch (ACBrException ex) {
            Logger.getLogger(Ead.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

ele dá null...

 

pelo que eu entendi tem que gerar as chaves publicas e privadas antes, e sentar no medoto do AcbrECF.

public void addOnPAFCalcEAD(ACBrEventListener<PAFCalcEADEventObject> listener)
	{
		if (!hasListeners("onPAFCalcEAD")) {
			ACBrECFInterop.INSTANCE.ECF_SetOnPAFCalcEAD(getHandle(), new ACBrECFInterop.PAFCalcEADCallback()
			{
				@Override
				public void invoke(String value)
				{
					onPAFCalcEAD(toUTF8(value));
				}
			});
		}

		addListener("onPAFCalcEAD", listener);
	}

	public void removeOnPAFCalcEAD(ACBrEventListener<PAFCalcEADEventObject> listener)
	{
		removeListener("onPAFCalcEAD", listener);

		if (!hasListeners("onPAFCalcEAD")) {
			ACBrECFInterop.INSTANCE.ECF_SetOnPAFCalcEAD(getHandle(), null);
		}
	}

	private void onPAFCalcEAD(String value)
	{
		PAFCalcEADEventObject e = new PAFCalcEADEventObject(this, value);
		notifyListeners("onPAFCalcEAD", e);
	}

mas como eu faço isso...

 

Resumindo eu gostaria de uma ajuda...

 

-Para terminar a implementação do AcbrEAD.java, e com eu faço para usa-lo.

-Como setar o EAD no AcbrECF.java.

 

por gentileza alguém pode me ajudar.

Link to comment
Share on other sites

Descubri o porque do null, hahrharh.

 

estava faltando o ACBrEAD = new ACBrEAD();

 

quando eu faço :

  public static void gerarChaves(){
        try {
            ACBrEAD = new ACBrEAD();
            ACBrEAD.gerarChaves();
        } catch (ACBrException ex) {
            TrataException.trataInformacaoLog(ex.getMessage());
        }
    }

ele retorna "Erro ao gerar par de Chaves RSA"

 

qual é o procedimento correto para gerar as chaves?

Link to comment
Share on other sites

  • Consultores

Se entendi bem, gerarChaves é para gerar novos pares de chaves.

Mas quando você for usar no seu aplicativo, você deve passar as chaves por meio dos métodos OnGetChavePrivada e OnGetChavePublica.

Posso estar enganado, pois uso apenas o ACBrEAD e não o ACBrFrameWork.

[]'s

Consultor SAC ACBr

Elton
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link to comment
Share on other sites

  • Consultores

Funciona exatamente assim, mas no java são os listener que seriam os eventos do delphi e c#.

A chave você não gera na hora, você passa atraves do listener OnGetChavePrivada ou OnGetChavePublica.

Como ja disse anteriormente olhe o exemplo em c# que você vai ter uma ideia melhor de como proceder.

Consultor SAC ACBr Rafael Dias
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Desenvolvedor ACBrLib.

 

Link to comment
Share on other sites

  • Consultores

Sim, você gera fora do programa, pois as chaves não pode ser mudadas toda vez que executa a função.

Elas estão la para garantir que os dados são validos, se você mudar toda hora a chave não tem como faze-lo.

Consultor SAC ACBr Rafael Dias
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Desenvolvedor ACBrLib.

 

Link to comment
Share on other sites

Como eu faço para eu gerar meu par de chaves, que eu não tenho ainda com o java?

e para eu passar as chaves no OnGetChavePrivada e OnGetChavePublica, eu passo o caminho da chave gerada ou a chave em formato string?

Obrigado!

Edited by vasilvei
Link to comment
Share on other sites

Certo, no caso eu gero o par de chaves pelo delphi por exemplo, isso já consegui...

 

daí eu para eu setar as chaves no meu aplicativo java como 

EMBarbosa

citou antes.

Eu passo o caminho no OnGetChavePrivada e OnGetChavePublica

 private String OnGetChavePublica() {
        ChaveEventObject e = new ChaveEventObject(this, "c://pub_key.pem");
        notifyListeners("OnGetChavePublica", e);

        return e.getChave();
    }

é isso que devo fazer?

 

Obrigado Rafael!

Link to comment
Share on other sites

Rafael, eu gerei as assinaturas e arquivo xml com o nome da SH com o exemplo do lazarus.

 

mas com eu faço para vincular essas chaves ao meu aplicativo java?

 

Obrigado!

 

desculpe se estou sendo inconveniente, mas se você puder me ajudar nesses detalhes, ficarei muito grato. 

Link to comment
Share on other sites

Então é + ou - isso aqui:

 

Você usa seu objeto ead e adiciona um novo listener a ele:

ead.addOnGetChavePublica(new ACBrEventListener<ChaveEventObject>() 
{
         @Override
 	 public void notification(ChaveEventObject e)
	 { 
            e.SetChave("XXXXXXXXXXXXXXXXXXXXX" + "\n" +
                       "YYYYYYYYYYYYYYYYYYYYY" + "\n"
                       "...");
	 }
 } 
);

Esse listener esperado no método addOnGetChavePublica é só uma implementação da classe ACBrEventListener<ChaveEventObject> que contém o método abstrato notification onde o conteúdo da chave será retornado.

 

No exemplo acima, implementamos como uma classe anônima, bastante comum em eventos no java.

 

Não se esqueça de passar o conteúdo da sua chave, e não o caminho do arquivo.

E inclua as quebras de linha, exatamente onde elas estão, pois o ACBr precisa delas.

 

Abraços.

Rafael Batiati

ACBrFramework - Automação comercial para todos.

MultiClubes - Soluções para a área de clubes, parques, lazer e entretenimento.

Link to comment
Share on other sites

Obrigado Rafael, eu fiz o seguinte peguei as chaves e coloquei um metodo que quando eu inicializo o aplicativo ele chama esse metodo:

public static void ativarEad() {
        try {
            ACBrEAD = new ACBrEAD();
            ACBrEAD.addOnGetChavePrivada(new ACBrEventListener<ChaveEventObject>() {
                @Override
                public void notification(ChaveEventObject e) {
                    e.setChave("MIICXAIBAAKBgQCv6M1/kW13FVMNG/d7Mwe2SB9r6A11FbDuJ0tt0S3o/u+NJ7DF"+"\n"
                            + "8dGIaJnYCxYP7lVKPWEH8k1K1sLYF5+nT8Mvv8HT2FRuL60moI7IUldpR/BfPcm5"+"\n"
                            + "kW1/ru4LrNERlTQ2d8F0Fw0YF80A1whD2a4U3mKHmmXTI2ezUmeZWcXF6QIDAQAB"+"\n"
                            + "AoGAPsa573iatBCsHtWIMDM54VdDv2KEyu/+wD7NsFciJzAzlRBBCaMOv7t0i6EJ"+"\n"
                            + "Mo4/acsVwZw68SZLSorDsxXH9b4yDy+EcDULUY8w4W1pjn7/uWBYqEUHN1CBFGsi"+"\n"
                            + "Q7bZ8HD9qps69ll9z3BJHtJ4QHoA8cN2OeZ5PuKPyj7jWAECQQDpsJd9XQwDCt0l"+"\n"
                            + "HSXTKUjj4dBLgX4ot4jkvQiWOsuhnrIYX1QKl0CM030T4ai4xuIOPBq+4TX5Ehdz"+"\n"
                            + "akhirzWpAkEAwLQM1VglsZCR9ajh3qN3YcF+9v0Mt763hreiln3xQ0BSpYtqxtP1"+"\n"
                            + "Wq4cJgHLS2IFj3eDnsp6FmDvD6WnUeu2QQJAQvukIIHoLIMTqky1h9ZAl1klnE7s"+"\n"
                            + "u30IFxB8AputvJDBWa0RaMu76+G+61D2TKhtKUlfHTFuiAsAf8uKHgc8qQJAfTB7"+"\n"
                            + "Zd5uHn0dVcrxcgIgfJGIOk0LBhQQhqSmK76GDnqrNoDsTV9F9jNGdiqUN9TmZ93s"+"\n"
                            + "1CwWRJOUu0WS/dV0AQJBAK1HVx/CybyhTULjfsItL39cHhPbaOzNImJjURtJQST3"+"\n"
                            + "gyzTJyL4k0vNugwpmWURBkGv8TCowYjdic8/lEjaJT0=");
                    
                }
            });
            ACBrEAD.addOnGetChavePublica(new ACBrEventListener<ChaveEventObject>() {
                @Override
                public void notification(ChaveEventObject e) {
                    e.setChave("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCv6M1/kW13FVMNG/d7Mwe2SB9r"+"\n"
                            + "6A11FbDuJ0tt0S3o/u+NJ7DF8dGIaJnYCxYP7lVKPWEH8k1K1sLYF5+nT8Mvv8HT"+"\n"
                            + "2FRuL60moI7IUldpR/BfPcm5kW1/ru4LrNERlTQ2d8F0Fw0YF80A1whD2a4U3mKH"+"\n"
                            + "mmXTI2ezUmeZWcXF6QIDAQAB");
                }
            });
        } catch (ACBrException ex) {
            TrataException.trataInformacao(ex.getMessage());
        }
    }

dai eu mandei gerar o arquivo ArqMF, por exemplo:

   ACBrECF.pafMF_LMFC_Cotepe1704(inicio, fim, caminhoArquivo);

e mandei assinar o arquivo:

 Ead.assinarArquivo(caminhoArquivo + "ACBr_CTP.txt");
.....
public static void assinarArquivo(String pathArquivo) {
        try {
            ACBrEAD.assinarArquivoComEAD(pathArquivo, true);
        } catch (ACBrException ex) {
            TrataException.trataInformacao(ex.getMessage());
        }
    }

 

 

ele gerar normalmente o arquivo, e também a EAD no final do arquivo.

 

porém quando eu vou validar, no eECFc, seleciono a arquivo xml SH que eu gerei pelo exemplo EAD em lazaruz,  e seleciono o arquivo diz que a assinatura inválida.

 

Sabe me dizer se esta faltando algo ou no que eu posso estar errando?

 

Obrigado!

Link to comment
Share on other sites

  • Consultores

a chave ta incorreta, precisa colocar ela completa.

 e.setChave("-----BEGIN RSA PRIVATE KEY-----+"\n"
                            +"MIICXAIBAAKBgQCv6M1/kW13FVMNG/d7Mwe2SB9r6A11FbDuJ0tt0S3o/u+NJ7DF"+"\n"
                            + "8dGIaJnYCxYP7lVKPWEH8k1K1sLYF5+nT8Mvv8HT2FRuL60moI7IUldpR/BfPcm5"+"\n"
                            + "kW1/ru4LrNERlTQ2d8F0Fw0YF80A1whD2a4U3mKHmmXTI2ezUmeZWcXF6QIDAQAB"+"\n"
                            + "AoGAPsa573iatBCsHtWIMDM54VdDv2KEyu/+wD7NsFciJzAzlRBBCaMOv7t0i6EJ"+"\n"
                            + "Mo4/acsVwZw68SZLSorDsxXH9b4yDy+EcDULUY8w4W1pjn7/uWBYqEUHN1CBFGsi"+"\n"
                            + "Q7bZ8HD9qps69ll9z3BJHtJ4QHoA8cN2OeZ5PuKPyj7jWAECQQDpsJd9XQwDCt0l"+"\n"
                            + "HSXTKUjj4dBLgX4ot4jkvQiWOsuhnrIYX1QKl0CM030T4ai4xuIOPBq+4TX5Ehdz"+"\n"
                            + "akhirzWpAkEAwLQM1VglsZCR9ajh3qN3YcF+9v0Mt763hreiln3xQ0BSpYtqxtP1"+"\n"
                            + "Wq4cJgHLS2IFj3eDnsp6FmDvD6WnUeu2QQJAQvukIIHoLIMTqky1h9ZAl1klnE7s"+"\n"
                            + "u30IFxB8AputvJDBWa0RaMu76+G+61D2TKhtKUlfHTFuiAsAf8uKHgc8qQJAfTB7"+"\n"
                            + "Zd5uHn0dVcrxcgIgfJGIOk0LBhQQhqSmK76GDnqrNoDsTV9F9jNGdiqUN9TmZ93s"+"\n"
                            + "1CwWRJOUu0WS/dV0AQJBAK1HVx/CybyhTULjfsItL39cHhPbaOzNImJjURtJQST3"+"\n"
                            + "gyzTJyL4k0vNugwpmWURBkGv8TCowYjdic8/lEjaJT0="+"\n"
                            + "-----END RSA PRIVATE KEY-----")
Consultor SAC ACBr Rafael Dias
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Desenvolvedor ACBrLib.

 

Link to comment
Share on other sites

Ainda não esta validando, primeiro fiz o que você falou colocando o begin e o end, não validou.

daí tentei gerar novamente o par de chaves e o xml da SH pelo exemplo do Lazaruz, e coloquei no meu aplicativo continua dando erro.

 public static void ativarEad() {
        try {
            ACBrEAD = new ACBrEAD();
            ACBrEAD.addOnGetChavePrivada(new ACBrEventListener<ChaveEventObject>() {
                @Override
                public void notification(ChaveEventObject e) {

                    e.setChave("-----BEGIN RSA PRIVATE KEY-----" + "\n"
                            + "MIICXAIBAAKBgQDp/V8QcF+Tt1FPN9ZHMYCsVJWE4trenBRClGOTRnESNuFHvWs+" + "\n"
                            + "MT6opx1EQTwI0YAGzQJZwNl64GtFNmuNJvnborn8Ll84mSyUEG4NSx6+10nAb0P7" + "\n"
                            + "LMiK9OXdG/ivTc8Ssn06Sgvg+p1nD6tvY038XbfJbLAFOQ85DxVWn7RrQQIDAQAB" + "\n"
                            + "AoGBAKcI+JQDpDcO5jxm39Byxig/OX1jdFr1kID27R51asJV6vwLfEMpZFGA+qN+" + "\n"
                            + "7hxdccdpEgSAZsAQ9IK0FpLs/+8s/W4NqBOGQj9w3Y6aSeXrXYlgsyek3jAOKT/v" + "\n"
                            + "IdwKn1OppxPKT6ppl0+qFHcl5O5ZTbqk7ADbKfSRLTfR4esBAkEA+S7RlMK9vUmo" + "\n"
                            + "cVadnhr8TgOjdicerQ3XOJoWJNyGmX+2ziqJB+lTm6wYu7lpTzT3izBNoCKS1VzC" + "\n"
                            + "UXHHRBvwlwJBAPBkJUlLDP28t4LqnOWdJg2h7bR90o/OjJ69hEr5bXOMIQIehpz+" + "\n"
                            + "ivTSLLNajaOHOQM6rfOQZFeOTn5qxwubpecCQHfVQSr2QEMwkhX3XpNzTNTDwS+H" + "\n"
                            + "/qOgnVj2GSIe/4gAOEyLfhzU48VgjQByWSejREymrR4OomiDVFvQiNDDUv8CQGk0" + "\n"
                            + "ywS6reLWltHa7/OlxSOuPKQDdQWu9ef7NUzCwN4S89dDmNJYrGPdH+cWuGpbId6B" + "\n"
                            + "7eNszB1tkHjPLnGsGv0CQF5W43durX4WS+0SUHPIeNpNtA9c6gwuRKbLqlyvVLoL" + "\n"
                            + "fNLeG+ye46qc9ikpHtvfn69tYU4hHDylKrXES4ZVTDk=" + "\n"
                            + "-----END RSA PRIVATE KEY-----");

                }
            });
            ACBrEAD.addOnGetChavePublica(new ACBrEventListener<ChaveEventObject>() {
                @Override
                public void notification(ChaveEventObject e) {
                    e.setChave("-----BEGIN PUBLIC KEY-----" + "\n"
                            + "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDp/V8QcF+Tt1FPN9ZHMYCsVJWE" + "\n"
                            + "4trenBRClGOTRnESNuFHvWs+MT6opx1EQTwI0YAGzQJZwNl64GtFNmuNJvnborn8" + "\n"
                            + "Ll84mSyUEG4NSx6+10nAb0P7LMiK9OXdG/ivTc8Ssn06Sgvg+p1nD6tvY038XbfJ" + "\n"
                            + "bLAFOQ85DxVWn7RrQQIDAQAB" + "\n"
                            + "-----END PUBLIC KEY-----");
                }
            });
        } catch (ACBrException ex) {
            TrataException.trataInformacao(ex.getMessage());
        }
    }

esta certa a minha classe ACBrEAD.java:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jACBrFramework.serial.ecf;

import com.sun.jna.ptr.IntByReference;
import jACBrFramework.ACBrClass;
import jACBrFramework.ACBrEventListener;
import jACBrFramework.ACBrException;
import jACBrFramework.ChaveEventObject;
import jACBrFramework.interop.ACBrEADInterop;
import java.nio.ByteBuffer;

/**
 *
 * @author Valde
 */
public class ACBrEAD extends ACBrClass {

    public ACBrEAD() throws ACBrException {
    }

    @Override
    protected void onInitialize() throws ACBrException {
        IntByReference handle = new IntByReference();
        int ret = ACBrEADInterop.INSTANCE.EAD_Create(handle);
        checkResult(ret);

        setHandle(handle.getValue());
    }

    @Override
    protected void onFinalize() throws ACBrException {
        int ret = ACBrEADInterop.INSTANCE.EAD_Destroy(getHandle());
        checkResult(ret);

        setHandle(0);
    }

    @Override
    protected void checkResult(int result) throws ACBrException {
        switch (result) {
            case -1:
                String message;

                int LEN = 1024;
                ByteBuffer buffer = ByteBuffer.allocate(LEN);
                int ret = ACBrEADInterop.INSTANCE.EAD_GetUltimoErro(getHandle(), buffer, LEN);

                message = fromUTF8(buffer, ret);
                throw new ACBrException(message);


            case -2:
                throw new ACBrException("ACBr EAD não inicializado.");
        }
    }

    public void addOnGetChavePrivada(ACBrEventListener<ChaveEventObject> listener) {
        if (!hasListeners("OnGetChavePrivada")) {
            
            ACBrEADInterop.INSTANCE.EAD_SetOnGetChavePrivada(getHandle(), new ACBrEADInterop.GetChavePrivadaCallback() {
                @Override
                public String invoke() {
                    return OnGetChavePrivada();
                }
            });
        }

        addListener("OnGetChavePrivada", listener);
    }

    public void removeOnPAFGetKeyRSA(ACBrEventListener<ChaveEventObject> listener) {
        removeListener("OnGetChavePrivada", listener);

        if (!hasListeners("OnGetChavePrivada")) {
            ACBrEADInterop.INSTANCE.EAD_SetOnGetChavePrivada(getHandle(), null);
        }
    }

    private String OnGetChavePrivada() {
        ChaveEventObject e = new ChaveEventObject(this, "");        
        notifyListeners("OnGetChavePrivada", e);

        return e.getChave();
    }

    public void addOnGetChavePublica(ACBrEventListener<ChaveEventObject> listener) {
        if (!hasListeners("OnGetChavePublica")) {
            ACBrEADInterop.INSTANCE.EAD_SetOnGetChavePublica(getHandle(), new ACBrEADInterop.GetChavePublicaCallback() {
                @Override
                public String invoke() {
                    return OnGetChavePublica();
                }
            });
        }

        addListener("OnGetChavePublica", listener);
    }

    public void removeOnGetChavePublica(ACBrEventListener<ChaveEventObject> listener) {
        removeListener("OnGetChavePublica", listener);

        if (!hasListeners("OnGetChavePublica")) {
            ACBrEADInterop.INSTANCE.EAD_SetOnGetChavePublica(getHandle(), null);
        }
    }

    private String OnGetChavePublica() {
        ChaveEventObject e = new ChaveEventObject(this, "");
        notifyListeners("OnGetChavePublica", e);

        return e.getChave();
    }

    // Funções
    /**
     * @return String
     * @param arquivo local para gravar o arquivo
     * @param remove boolean
     * @throws ACBrException
     */
    public String assinarArquivoComEAD(String nomeArquivo, boolean remove) throws ACBrException {
        ByteBuffer returnBuffer = ByteBuffer.allocate(STR_BUFFER_LEN);
        int ret = ACBrEADInterop.INSTANCE.EAD_AssinarArquivoComEAD(getHandle(), toUTF8(nomeArquivo), remove, returnBuffer, STR_BUFFER_LEN);
        checkResult(ret);

        return fromUTF8(returnBuffer, ret);
    }

    public String calcularChavePublica() throws ACBrException {
        ByteBuffer returnBuffer = ByteBuffer.allocate(STR_BUFFER_LEN);
        int ret = ACBrEADInterop.INSTANCE.EAD_CalcularChavePublica(getHandle(), returnBuffer, STR_BUFFER_LEN);
        checkResult(ret);

        return fromUTF8(returnBuffer, ret);
    }

    public void calcularEADArquivo(String nomeArquivo) throws ACBrException {
        ByteBuffer returnBuffer = ByteBuffer.allocate(STR_BUFFER_LEN);
        int ret = ACBrEADInterop.INSTANCE.EAD_CalcularEADArquivo(getHandle(), toUTF8(nomeArquivo), returnBuffer, STR_BUFFER_LEN);
        checkResult(ret);
    }

    public void gerarChaves() throws ACBrException {
        ByteBuffer returnBuffer = ByteBuffer.allocate(STR_BUFFER_LEN);
        int ret = ACBrEADInterop.INSTANCE.EAD_GerarChaves(getHandle(), returnBuffer, returnBuffer, STR_BUFFER_LEN);
        checkResult(ret);
    }

    public void gerarXMLeECFc(String nomeSH, String pathArquivo) throws ACBrException {
        int ret = ACBrEADInterop.INSTANCE.EAD_GerarXMLeECFc(getHandle(), toUTF8(nomeSH), toUTF8(pathArquivo));
        checkResult(ret);
    }

    public void removeEADArquivo(String nomeArquivo) throws ACBrException {
        int ret = ACBrEADInterop.INSTANCE.EAD_RemoveEADArquivo(getHandle(), toUTF8(nomeArquivo));
        checkResult(ret);
    }

    public boolean verificaEAD(String ead) throws ACBrException {
        int ret = ACBrEADInterop.INSTANCE.EAD_VerificarEAD(getHandle(), toUTF8(ead));
        checkResult(ret);
        return ret != 0;
    }

    public boolean verificaEADArquivo(String nomeArquivo) throws ACBrException {
        int ret = ACBrEADInterop.INSTANCE.EAD_VerificarEADArquivo(getHandle(), toUTF8(nomeArquivo));
        checkResult(ret);
        return ret != 0;
    }
}

Link to comment
Share on other sites

Eu fiz um exemplo,fiz a assinatura de um arquivo com as mesmas chaves que estou usando no java, fiz a assinatura pelo Lazaruz, pelo exemplo do acbr, daí validou, sabem o que pode estar ocorrendo com a minha aplicação em java?

 

Obrigado!

Link to comment
Share on other sites

  • Este tópico foi criado há 3096 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.