/if837-protocolos-de-comunicacao

Um sistema de votação seguro para uma rede WiFi não confiável.

Primary LanguagePython

Table of Contents

sevp

Este módulo fornece suporte em Python ao protocolo de segurança SEVP para sistemas eletrônicos de votação.

start_server

start_server()

Inicialize o servidor e retorne um objeto ServerSocket.

connect_to_server

connect_to_server()

Faça uma conexão TCP com o servidor e retorne um objeto ClientSocket.

build_record

build_record(message)

Empacote um objeto Message num record SEVP e retorne o record.

dissect_record

dissect_record(record)

Desempacote os campos de um record e retorne uma instância de Message.

load_private_key

load_private_key(path, password)

Carregue em memória uma chave privada e retorne um objeto RSAPrivateKey.

load_certificate

load_certificate(path)

Carregue um certificado em memória e retorne um objeto Certificate.

SEVPSocket Objects

class SEVPSocket()

__init__

 | __init__(socket)

Construa um objeto SEVPSocket.

send_message

 | send_message(message)

Serialize um objeto Message e o envie pelo socket.

receive_message

 | receive_message()

Receba um record pelo socket, desempacote o record e retorne um objeto Message.

close_connection

 | close_connection()

Feche imediatamente a conexão atual.

ClientSocket Objects

class ClientSocket(SEVPSocket)

__init__

 | __init__(socket)

Construa um objeto ClientSocket.

do_handshake

 | do_handshake()

Execute o handshake, estabelecendo uma conexão segura.

get_server_cert

 | get_server_cert()

Solicite o certificado ao servidor e o retorne como um objeto Certificate.

check_certificate

 | check_certificate(cert)

Valide a assinatura e o CN do certificado.

send_client_public_key

 | send_client_public_key()

Envie a chave pública.

rcv_secret_key

 | rcv_secret_key()

Receba a chave secreta para geração do MAC.

send_encrypted_msn

 | send_encrypted_msn(code, data)

Envie dados encriptados com a chave pública do servidor.

rcv_encrypted_msn

 | rcv_encrypted_msn()

Receba dados encriptados, os desencripte e verifique sua integridade e autenticidade.

ServerSocket Objects

class ServerSocket(SEVPSocket)

__init__

 | __init__(socket)

Construa um objeto ServerSocket.

accept_incoming_conn

 | accept_incoming_conn()

Habilite o servidor para aceitar uma conexão de chegada e retorne uma tupla (ServerSocket, endereço).

do_handshake

 | do_handshake()

Execute o handshake, estabelecendo uma conexão segura.

send_server_cert

 | send_server_cert()

Efetue o envio do certificado.

rcv_client_hello

 | rcv_client_hello()

Receba a mensagem "client hello" e retorne um objeto Message.

rcv_client_public_key

 | rcv_client_public_key()

Recebe a chave pública do cliente e retorna uma instância de RSAPublicKey.

send_secret_key

 | send_secret_key()

Gere uma chave secreta para geração de MAC e a envie.

send_encrypted_msn

 | send_encrypted_msn(code, data)

Envie dados encriptados com a chave pública do cliente.

rcv_encrypted_msn

 | rcv_encrypted_msn()

Receba dados encriptados, os desencripte e verifique sua integridade e autenticidade.

Message Objects

class Message()

__init__

 | __init__(data, code=1, mac_key=None)

Construa um objeto Message.

mac

 | mac(mac_key)

Gere o MAC de um dado a partir de uma chave e retorne o MAC.

encrypt

 | encrypt(public_key)

Encripte os dados, possivelmente concatenados com o MAC, utilizando uma chave.

decrypt

 | decrypt(private_key)

Desencripte os dados utilizando uma chave.

verify

 | verify(mac_key)

Verifique se a mensagem corresponde ao MAC contido nos dados.

separate_data_from_mac

 | separate_data_from_mac()

Separe os bytes referentes aos dados (aplicação) dos referentes ao MAC.

db

Este módulo fornece uma classe com métodos que manipulam o Banco de Dados do servidor.

DB Objects

class DB()

__init__

 | __init__(path)

Instância um objeto DB passando o path (arquivo.csv) como argumento.

get_fieldnames

 | get_fieldnames()

Retorna uma lista contendo os fieldnames do arquivo.csv.

read_file

 | read_file()

Lê um arquivo e o imprime na tela.

write_line

 | write_line(dict)

Acrescenta uma linha no arquivo, o argumento(linha) deve ser do tipo Dicionário.

update_line

 | update_line(key, dict)

Substitui uma linha do arquivo,os argumentos devem ser um fieldname e um Dicionário respectivamente.