diff --git a/trab.c b/trab.c
index a9451d790761b58126a77c2e802df084ffab7b44..3213043d3a9d7a753fba9ecc97cd6dd884a86c56 100644
--- a/trab.c
+++ b/trab.c
@@ -170,18 +170,19 @@ int ConexaoRawSocket(char *device) {
 }
 
 //vertical impar
-void paridade(pacote *package) {
-    byte tmp;
+void paridade(t_pacote *pacote) { //coloca paridade no campo paridade
+    char paridade, r[2];
     int i;
-    //package->paridade = ~(package->tamanho ^ package->sequencia ^ package->tipo ^ (int) package->dados);
-    package->paridade = package->tamanho;
-    package->paridade ^= package->sequencia;
-    package->paridade ^= package->tipo;
-    for (i=0;i<package->tamanho;i++) {
-        tmp.byte = *package->dados;
-        package->paridade ^= tmp.low;
-        package->paridade ^= tmp.high;
-    }
+    r[0] = '\0';
+    r[1] = '\0';
+    r[0] = (((char)pacote->tamanho) << 2 | ((char) (pacote->sequencia >> 4) & 0x03));
+    r[1] = (char) pacote->sequencia << 4 | pacote->tipo & 0x0f;
+
+    paridade = r[0] ^ r[1];
+
+    for(i = 0; i < pacote->tamanho; i++)
+        paridade = pacote->dados[i] ^ paridade;
+    pacote->paridade = paridade;
 }
 
 void faz_ham(char o, char *c1, char *c2) { //faz hamming em c1 e retorna em c1 e c2
@@ -342,18 +343,19 @@ void monta_pacote(pacote *package, int tamanho, int tipo, char * dados) {
 }
 
 int checa_paridade(pacote *package) {
-    byte tmp;
-    nibble paridade;
+    char paridade, r[2];
     int i;
-    paridade.val = package->tamanho;
-    paridade.val ^= package->sequencia;
-    paridade.val ^= package->tipo;
-    for (i=0;i<package->tamanho;i++) {
-        tmp.byte = *package->dados;
-        paridade.val ^= tmp.low;
-        paridade.val ^= tmp.high;
-    }
-    return (paridade.val ^ package->paridade);
+    r[0] = '\0';
+    r[1] = '\0';
+    r[0] = (((char)pacote->tamanho) << 2 | ((char) (pacote->sequencia >> 4) & 0x03));
+    r[1] = (char) pacote->sequencia << 4 | pacote->tipo & 0x0f;
+
+    paridade = r[0] ^ r[1];
+
+    for(i = 0; i < pacote->tamanho; i++)
+        paridade = pacote->dados[i] ^ paridade;
+    return (paridade ^ package->paridade);
+}
 
 int manda_pacote(pacote *package) {
     int i,status;