-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkey.h
57 lines (41 loc) · 1.61 KB
/
key.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <stdlib.h>
#ifndef KEY_H
#define KEY_H
#define C 4 // Número de caracteres na senha.
#define B 5 // Número de bits por caractere.
#define R (1 << B) // Tamanho do alfabeto (sempre = 32).
#define N (B * C) // Número de bits por senha.
#define ALPHABET "abcdefghijklmnopqrstuvwxyz012345"
// Um inteiro módulo R formado por C dígitos. O array está contido
// dentro de uma estrutura para facilitar a gerência de memória e
// a passagem de parâmetros nas funções.
typedef struct
{
unsigned char digit[C];
} Key;
typedef Key Value;
// Inicializa e retorna uma chave a partir do vetor de char dado.
// Exemplo: s = "abcdwxyz" => k = 0 1 2 3 22 23 24 25
Key init_key(unsigned char s[]);
// Exibe a chave 'k' em stdout em três formatos: chars, ints (base R) e binário.
void print_key(Key k);
// Exibe a chave 'k' em stdout somente no formato de chars.
void print_key_char(Key k);
// Retorna o i-ésimo bit de k.
int bit(Key k, int i);
int bit_l(unsigned char k, int i);
// Retorna a + b (mod 2^N) .
Key add(Key a, Key b);
// Soma (módulo 2^N) e retorna o subconjunto dos inteiros T[i] que
// são indexados pelos bits de k.
Key subset_sum(Key k, Key T[N]);
// Lista todas as possíveis senhas com um algoritmo de força bruta
void dec_forca_bruta(Key encrypted, Key T[N]);
// Lista todas as possíveis senhas com um algoritmo de tabela de simbolos
void dec_symbol_table(Key encrypted, Key T[N]);
void teste_symbol_table(Key encrypted, Key T[N]);
void dec_symbol_table_new(Key encrypted, Key T[N]);
void novo_(Key encrypted, Key T[N]);
// COmpara duas chaves
int compareK(Key a, Key b);
#endif