Jump to content

chamada diadoacbr

Assista tectoy.png

Implementação Da Classe Acbread


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

Recommended Posts

Bom dia  a todos,

 

É fato que ainda para o pacote Java, não esta completo com todas as funções necessárias, exemplo o ACBrEAD e o ACBrAAC.

 

Tomei liberdade para encapsular a classe ACBrEADInterop.java, e criei a ACBrEAD, para encapsular alguns métodos, o método "assinarArquivoComEAD(...)", funcionou! Os métodos que ainda não implementei, não pude entender a funcionalidade, se alguém puder me explicar, eu me a habilito a terminar de implementar os outros métodos.

 

Por favor, sintam-se  livres para comentar e me corrigir:

package jACBrFramework.serial.ecf;

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

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.");
        }
    }
    
    // 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 void calcularChavePublica() throws ACBrException {
        ByteBuffer returnBuffer = ByteBuffer.allocate(STR_BUFFER_LEN);
        int ret = ACBrEADInterop.INSTANCE.EAD_CalcularChavePublica(getHandle(), returnBuffer, STR_BUFFER_LEN);
        checkResult(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 removeEADArquivo(String nomeArquivo) throws ACBrException {
        int ret = ACBrEADInterop.INSTANCE.EAD_RemoveEADArquivo(getHandle(), toUTF8(nomeArquivo));
        checkResult(ret);
    }

    public void verificaEAD(String ead) throws ACBrException {
        int ret = ACBrEADInterop.INSTANCE.EAD_VerificarEAD(getHandle(), toUTF8(ead));
        checkResult(ret);
    }
    
    public void verificaEADArquivo(String nomeArquivo) throws ACBrException {
        int ret = ACBrEADInterop.INSTANCE.EAD_VerificarEADArquivo(getHandle(), toUTF8(nomeArquivo));
        checkResult(ret);        
    }
    
}

 

Obrigado;

Edited by Wagner Fonseca
Link to comment
Share on other sites

@wagner

A implementação esta correta, mas precisa de correções em algumas funções.

 

1º - Você precisa adicionar o eventos OnGetChavePrivada e o OnGetChavePublica - este eventos são para pegar as chaves privada e publica para fazer os calculos do ead - tem um exemplo de como fazer eles no ecf o ongetpafkey se não estou errado.

 

2ª - Sobre os metodos quem você não entendeu, eu recomendo olhar a implementação em c# pois como as sintaxes são parecidas vai te ajudar muito olhar o projeto.

 

3º - Os metodos verificaEADArquivo, verificaEAD eles retornar bool.

 

4ª - O metodo calcularChavePublica retorna uma string que é a chave publica calcula da chave privada que você fornece no evento OnGetChavePrivada.

 

Obs: as chaves privadas e public tem que ser passadas como string e respeitando a quebra de linha.

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

Projeto ACBr

Desenvolvedor ACBrLib.

 

Link to comment
Share on other sites

  • 2 weeks later...

Ola Rafael e Wagner

 

Wagner conseguiu desenvolver algo a mais do EAD?

 

Rafael nesse post você falou que deveria setar a chave : 

 

o setar que você fala é esse métodos: 

 

 

int EAD_SetOnGetChavePrivada(int eadHandle, ACBrEADInterop.GetChavePrivadaCallback method);
    int EAD_SetOnGetChavePublica(int eadHandle, ACBrEADInterop.GetChavePublicaCallback method);
 
?
Link to comment
Share on other sites

@wagner

A implementação esta correta, mas precisa de correções em algumas funções.

 

1º - Você precisa adicionar o eventos OnGetChavePrivada e o OnGetChavePublica - este eventos são para pegar as chaves privada e publica para fazer os calculos do ead - tem um exemplo de como fazer eles no ecf o ongetpafkey se não estou errado.

 

2ª - Sobre os metodos quem você não entendeu, eu recomendo olhar a implementação em c# pois como as sintaxes são parecidas vai te ajudar muito olhar o projeto.

 

3º - Os metodos verificaEADArquivo, verificaEAD eles retornar bool.

 

4ª - O metodo calcularChavePublica retorna uma string que é a chave publica calcula da chave privada que você fornece no evento OnGetChavePrivada.

 

Obs: as chaves privadas e public tem que ser passadas como string e respeitando a quebra de linha.

 

Seriam essas alterações:

 

/*
 * 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 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

  • Este tópico foi criado há 3386 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.