AC_PROG_CC
AC_PROG_INSTALL
PKG_CHECK_MODULES(GNUTLS, gnutls >= 1.4.0, , AC_MSG_ERROR(Could not find gnutls))
-LIBS="$GNUTLS_LIBS $LIBS -lz"
-CFLAGS="$GNUTLS_CFLAGS $CFLAGS"
+AM_PATH_LIBGCRYPT(,,AC_MSG_ERROR(Could not find gcrypt))
+LIBS="$LIBGCRYPT_LIBS $GNUTLS_LIBS $LIBS -lz"
+CFLAGS="$LIBGCRYPT_CFLAGS $GNUTLS_CFLAGS $CFLAGS"
AC_OUTPUT(Makefile)
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
+#include <gcrypt.h>
#include "pmhash.h"
#include "rnet_message.h"
{
return decfile->message;
}
+
+char * rnet_decfile_get_file_hash(struct rnet_decfile *decfile)
+{
+ char *hash;
+ size_t len;
+ if (gcry_md_test_algo(GCRY_MD_MD5))
+ return NULL;
+ len = gcry_md_get_algo_dlen(GCRY_MD_MD5);
+ hash = malloc(len);
+ if (!hash)
+ return NULL;
+ gcry_md_hash_buffer(GCRY_MD_MD5, hash, decfile->message->buffer,
+ decfile->message->len);
+ return hash;
+}
char *rnet_decfile_get_header_field(struct rnet_decfile *decfile, char *field);
struct rnet_message * rnet_decfile_get_file(struct rnet_decfile *decfile);
+char * rnet_decfile_get_file_hash(struct rnet_decfile *decfile);
#endif
char *uf;
uint16_t versao_pgd;
uint64_t file_len;
+ char *hash;
*msg = rnet_message_new();
if (*msg == NULL) {
}
file_len = rnet_decfile_get_file(decfile)->len;
+ hash = rnet_decfile_get_file_hash(decfile);
+ if (!hash)
+ return -1;
codigo_recnet = rnet_decfile_get_header_field(decfile, "codigo_recnet");
tp_arq = strtoul(codigo_recnet, NULL, 10);
r = rnet_message_add_u32(msg, "id_dec", id_dec);
r = rnet_message_add_ascii(msg, "exercicio", ano);
r = rnet_message_add_ascii(msg, "exercicio_pgd", exerc);
+ r = rnet_message_add_buffer(msg, "hash_arq", hash, 16);
+ r = rnet_message_add_buffer(msg, "hash_trans", hash, 16);
r = rnet_message_add_ascii(msg, "ni", cpf);
r = rnet_message_add_ascii(msg, "tipo_ni", "CPF");
r = rnet_message_add_u8(msg, "num_ass", 0);
r = rnet_message_add_u64(msg, "tam_dados_val_chave", 0);
r = rnet_message_add_u32(msg, "arquivos_restantes", 0);
+ free(hash);
+
if (r < 0)
return r;
return 0;