# WolfSSL

A wolfSSL (anteriormente conhecida como CyaSSL) é uma implementação pequena, leve, portável e de código fonte aberto, dos protocolos SSL e TLS (SSL 3.0, TLS 1.0, 1.1, 1.2, e DTLS 1.0 e 1.2) direcionada para uso em sistemas embarcados. Escrita na linguagem C, a biblioteca implementa ambos os lados da conexão, cliente e servidor, assim como suporta várias outras APIs, incluindo aquelas definidas para os protocolos SSL e TLS. A wolfSSL também inclui uma interface de compatibilidade com a biblioteca OpenSSL contendo as funções mais comumente utilizadas da do OpenSSL.
A yaSSL, uma antecessora da CyaSSL, é uma biblioteca SSL escrita em C++ para ambientes embarcados e sistemas operacionais de tempo real com recursos limitados.

## Plataformas

wolfSSL está atualmente disponível para Win32/64, Linux, Mac OS X, Solaris, Threadx, VxWorks, FreeBSD, NetBSD, OpenBSD, Linux embarcado, WinCE, Haiku, o OpenWrt, iPhone, Android, Nintendo Wii e Gamecube através do suporte do DevKitPro, QNX, MontaVista, variantes do Tron, NonStop, OpenCL, MicroC/OS-II da Micrium, FreeRTOS, SafeRTOS, Freescale MQX, Nucleus, TinyOS, TI-RTOS, e HP-UX.

## História

A gênese da yaSSL, data de 2004. O OpenSSL já estava disponível no momento, e era licenciado sob a Licença OpenSSL e a licença SSLeay. yaSSL, em contrapartida, foi desenvolvida e licença dupla, tanto sob uma licença comercial e a GPL. A yaSSL oferecia uma API mais moderna, com um estilo comercial de suporte ao desenvolvedor e possuía uma camada de compatibilidade com o OpenSSL. O primeira grande usuário da wolfSSL/CyaSSL/yaSSL foi o MySQL. Através da agregação com o MySQL, a yaSSL atingiu um volume extremamente alto de distribuição na casa dos milhões.
Hoje a wolfSSL é usada tanto em projetos comerciais como em projetos de código aberto. A wolfSSL está incluída em vários tipos de dispositivos conectados, tais como dispositivos inteligentes em automóveis, telefones IP, telefones celulares, roteadores, impressoras e leitores de cartão de crédito.

## Protocolos

O wolfSSL leve SSL biblioteca implementa os protocolos a seguir:
* O SSL 3.0, TLS 1.0, O TLS 1.1, TLS 1.2
* DTLS 1.0, DTLS 1.2
Notas:
SSL 2.0 - A wolfSSL não dá suporte ao SSL 2.0, citando problemas de segurança. SSL 3.0 - A wolfSSL desabilitou o SSL 3.0 em tempo de compilação desde a versão 3.6.6; no entanto, este ainda pode ser habilitado via diretivas de compilação.

## Algoritmos

A wolfSSL utiliza as seguintes bibliotecas criptográficas:

### wolfCrypt

Por padrão, a wolfSSL utiliza os serviços de criptografia fornecidos pela wolfCrypt. A wolfCrypt fornece RSA, ECC, DSS, Diffie–Hellman, EDH, NTRU, DES, Triple DES, AES (CBC, CTR, CCM, GCM), Camélia, IDÉIA, Rabbit, ARC4, HC-128, ChaCha20, MD2, MD4, MD5, SHA-1, SHA-2, BLAKE2, RIPEMD-160, Poly1305, geração de números aleatórios, suporte a números gigantes e conversão de base 16/64.
A wolfCrypt também inclui suporte para algoritmos mais recentes como Curve25519 e Ed25519.
A wolfCrypt também é utilizada por vários softwares e bibliotecas populares, incluindo o MIT Kerberos (onde ela pode ser habilitada através de uma opção de compilação).

### NTRU

A wolfSSL suporta o algoritmo de criptografia de chave pública NTRU. A adição do NTRU na wolfSSL foi resultado de uma parceria entre a wolfSSL e a Security Innovation. O NTRU funciona bem em dispositivos móveis e embarcados devido ao tamanho reduzido de bits necessários para fornecer o mesmo nível de segurança de outros sistemas de chave pública. Além disso, não se sabe se o NTRU é vulnerável a ataques quânticos. Várias combinações de algoritmos utilizando NTRU estão disponíveis na wolfSSL, incluindo AES-256, RC4, e HC-128.

## Licenciamento

A wolfSSL é Open Source, licenciada sob a Licença Pública Geral GNU GPLv2.

## Prémios

2011 Tomorrow's Technology Today - Mobile Encryption
2015 Cybersecurity 500 - wolfSSL