Ir para conteúdo
  • Cadastre-se

dev botao

Implementação Da Classe Acbread


Wagner Fonseca
  • Este tópico foi criado há 4027 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;

Editado por Wagner Fonseca
Link para o comentário
Compartilhar em outros 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.

 

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...

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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.