Version 0.x.y
- Added client side session resuming
+- Better documentation (check doc/API)
+- Better socket handling (gnutls can be used with select())
Version 0.0.5 (7/12/2000)
- Added Compression (using ZLIB)
gnutls_cipher.h gnutls_buffers.h gnutls_errors.h gnutls_int.h \
gnutls_handshake.h gnutls_num.h gnutls_algorithms.h gnutls_dh.h \
gnutls_kx.h gnutls_hash_int.h gnutls_cipher_int.h gnutls_der.h \
- gnutls_cert.lex gnutls_compress_int.h gnutls_session.h
+ gnutls_cert.lex gnutls_compress_int.h gnutls_session.h gnutls_priority.h
lib_LTLIBRARIES = libgnutls.la
libgnutls_la_SOURCES = gnutls.c gnutls_compress.c debug.c gnutls_plaintext.c \
gnutls_cipher.c gnutls_buffers.c gnutls_handshake.c gnutls_num.c \
void _gnutls_print_TLSCiphertext( GNUTLSCiphertext *);
char * _gnutls_bin2hex(const unsigned char *old, const size_t oldlen);
void _gnutls_dump_mpi(char* prefix,MPI a);
+char* _gnutls_packet2str( int packet);
+char* _gnutls_alert2str( int alert);
#endif
#include "gnutls_handshake.h"
#include "gnutls_hash_int.h"
#include "gnutls_cipher_int.h"
+#include "gnutls_priority.h"
+#include "gnutls_algorithms.h"
GNUTLS_Version gnutls_get_current_version(GNUTLS_STATE state) {
GNUTLS_Version ver;
ssize_t gnutls_send_int(int cd, GNUTLS_STATE state, ContentType type, void *_data, size_t sizeofdata)
{
uint8 *cipher;
- int i, err, cipher_size;
+ int i, cipher_size;
int ret = 0;
int iterations;
uint16 length;
ssize_t _gnutls_send_change_cipher_spec(int cd, GNUTLS_STATE state)
{
uint16 length;
- int ret = 0, Size;
+ int ret = 0;
uint8 type=GNUTLS_CHANGE_CIPHER_SPEC;
char data[1] = { GNUTLS_TYPE_CHANGE_CIPHER_SPEC };
uint8 headers[5];
#include "gnutls_algorithms.h"
#include "gnutls_hash_int.h"
#include "gnutls_cipher_int.h"
+#include "gnutls_plaintext.h"
+#include "debug.h"
int _gnutls_encrypt(GNUTLS_STATE state, char *data, size_t data_size,
uint8 ** ciphertext, ContentType type)
GNUTLSPlaintext *gtxt;
GNUTLSCompressed *gcomp;
GNUTLSCiphertext *gcipher;
- int total_length = 0, err, i;
+ int total_length = 0, err;
if (data_size == 0)
return 0;
GNUTLSPlaintext *gtxt;
GNUTLSCompressed *gcomp;
GNUTLSCiphertext gcipher;
- int iterations, i;
- int err, ret;
- int total_length = 0;
+ int ret;
if (ciphertext_size == 0)
return 0;
int _gnutls_encrypt( GNUTLS_STATE state, char* data, size_t data_size, uint8** ciphertext, ContentType type);
+int _gnutls_decrypt(GNUTLS_STATE state, char *ciphertext,
+ size_t ciphertext_size, uint8 ** data,
+ ContentType type);
int _gnutls_TLSCompressed2TLSCiphertext(GNUTLS_STATE state,
GNUTLSCiphertext**
cipher,
# ifdef __LINE__
# define gnutls_assert() fprintf(stderr, "GNUTLS_ASSERT: %s:%d\n", __FILE__,__LINE__);
# else
-# define gnutls_assert() 1
+# define gnutls_assert()
# endif
# else /* __FILE__ defined */
-# define gnutls_assert() 1
+# define gnutls_assert()
# endif
#else /* no debug */
-# define gnutls_assert() 1
+# define gnutls_assert()
#endif
char* gnutls_strerror(int error);
{
uint8 *data, *vrfy;
int data_size;
- uint8* concat; /* md5+sha1 */
int ret;
int vrfysize;
memmove(&data[pos], i_data, i_datasize - 4);
#ifdef HANDSHAKE_DEBUG
- fprintf(stderr, "Send HANDSHAKE[%d] of %d bytes\n", type, i_datasize+4);
+ fprintf(stderr, "Send HANDSHAKE[%d] of %ld bytes\n", type, i_datasize+4);
#endif
/* Here we keep the handshake messages in order to hash them later!
length32 = byteswap32(length32);
#endif
#ifdef HANDSHAKE_DEBUG
- fprintf(stderr, "Received HANDSHAKE[%d] of %d bytes\n", dataptr[0], length32+4);
+ fprintf(stderr, "Received HANDSHAKE[%d] of %ld bytes\n", dataptr[0], length32+4);
#endif
dataptr = gnutls_realloc( dataptr, length32+HANDSHAKE_HEADERS_SIZE);
int _gnutls_recv_certificate(int cd, GNUTLS_STATE state, char *data, int datalen)
{
- uint8 session_id_len = 0, z;
int pos = 0;
char* certificate_list;
- int i, ret=0;
- uint16 x;
+ int ret=0;
uint32 sizeOfCert;
uint24 num;
int gnutls_handshake_finish(int cd, GNUTLS_STATE state)
{
int ret=0;
- char *session_id;
- uint8 session_id_size;
if (state->security_parameters.entity == GNUTLS_CLIENT) {
int gnutls_handshake(int cd, GNUTLS_STATE state);
int _gnutls_recv_handshake( int cd, GNUTLS_STATE state, uint8**, int*, HandshakeType);
int _gnutls_generate_session_id( char** session_id, uint8* len);
+int _gnutls_recv_certificate(int cd, GNUTLS_STATE state, char *data, int datalen);
+int gnutls_handshake_begin(int cd, GNUTLS_STATE state);
+int gnutls_handshake_finish(int cd, GNUTLS_STATE state);
{
GNUTLS_MAC_HANDLE ret;
char ipad[48];
- char *digest;
int padsize;
switch (algorithm) {
int keylen)
{
GNUTLS_MAC_HANDLE ret;
- char *digest;
- int padsize;
ret = gnutls_hash_init(algorithm);
if (ret!=GNUTLS_MAC_FAILED) {
static void *ssl3_md5(int i, char *secret, int secret_len, char *random,
int random_len)
{
- int j;
void *digest;
GNUTLS_MAC_HANDLE td;
#define GNUTLS_INT_H
-/*
+
#define HANDSHAKE_DEBUG
#define HARD_DEBUG
#define READ_DEBUG
#define WRITE_DEBUG
#define DEBUG
-*/
+
#define MAX32 4294967295
#define MAX24 16777215
uint8 *data_g;
uint8 *data_Y;
int ret = 0, i;
-unsigned char tmpy[2048];
-int ii;
#ifdef HARD_DEBUG
fprintf(stderr, "Receiving Server KX message\n");
#include <stdio.h>
#include <errno.h>
+#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int sd, ret;
struct sockaddr_in sa_serv;
struct sockaddr_in sa_cli;
- int client_len, i;
+ int client_len;
char topbuf[512];
GNUTLS_STATE state;
- char *str;
- char buf[4096];
char buffer[MAX_BUF];