Version 0.9.98
- The openssl compatibility layer was moved to gnutls-openssl
library instead of being included in the gnutls-extra library.
+- Added the RIPEMD ciphersuites defined in draft-ietf-tls-openpgp-keys-04.
Version 0.9.97 (11/11/2003)
- The certtool utility can now generate PKCS #12 structures
dnl Gnutls Version
GNUTLS_MAJOR_VERSION=0
GNUTLS_MINOR_VERSION=9
-GNUTLS_MICRO_VERSION=97
+GNUTLS_MICRO_VERSION=98
GNUTLS_VERSION=$GNUTLS_MAJOR_VERSION.$GNUTLS_MINOR_VERSION.$GNUTLS_MICRO_VERSION
AC_DEFINE_UNQUOTED(GNUTLS_VERSION, "$GNUTLS_VERSION", [version of gnutls])
typedef enum gnutls_credentials_type { GNUTLS_CRD_CERTIFICATE=1, GNUTLS_CRD_ANON, GNUTLS_CRD_SRP } gnutls_credentials_type;
-typedef enum gnutls_mac_algorithm { GNUTLS_MAC_NULL=1, GNUTLS_MAC_MD5, GNUTLS_MAC_SHA } gnutls_mac_algorithm;
+typedef enum gnutls_mac_algorithm { GNUTLS_MAC_NULL=1,
+ GNUTLS_MAC_MD5, GNUTLS_MAC_SHA, GNUTLS_MAC_RMD160
+} gnutls_mac_algorithm;
/* The enumerations here should have the same value with gnutls_mac_algorithm.
*/
static const gnutls_hash_entry hash_algorithms[] = {
{"SHA", GNUTLS_MAC_SHA, 20},
{"MD5", GNUTLS_MAC_MD5, 16},
+ {"RIPEMD160", GNUTLS_MAC_RMD160, 20},
{"NULL", GNUTLS_MAC_NULL, 0},
{0, 0, 0}
};
#define GNUTLS_DHE_DSS_3DES_EDE_CBC_SHA { 0x00, 0x13 }
+
/* gnutls private extensions:
*/
#define GNUTLS_DHE_DSS_TWOFISH_128_CBC_SHA { 0xFF, 0x54 }
+
+/* draft-ietf-tls-openpgp-keys-04:
+ */
+#define GNUTLS_DHE_DSS_3DES_EDE_CBC_RMD { 0x00, 0x72 }
+#define GNUTLS_DHE_RSA_3DES_EDE_CBC_RMD { 0x00, 0x77 }
+#define GNUTLS_DHE_DSS_AES_256_CBC_RMD { 0x00, 0x73 }
+#define GNUTLS_DHE_DSS_AES_128_CBC_RMD { 0x00, 0x74 }
+#define GNUTLS_DHE_RSA_AES_128_CBC_RMD { 0x00, 0x78 }
+#define GNUTLS_DHE_RSA_AES_256_CBC_RMD { 0x00, 0x79 }
+#define GNUTLS_RSA_3DES_EDE_CBC_RMD { 0x00, 0x7C }
+#define GNUTLS_RSA_AES_128_CBC_RMD { 0x00, 0x7D }
+#define GNUTLS_RSA_AES_256_CBC_RMD { 0x00, 0x7E }
+
+
/* draft-ietf-tls-56-bit-ciphersuites-01:
*/
#define GNUTLS_DHE_DSS_ARCFOUR_SHA { 0x00, 0x66 }
+
/* rfc3268:
*/
#define GNUTLS_DHE_DSS_AES_256_CBC_SHA { 0x00, 0x38 }
#define GNUTLS_DHE_DSS_AES_128_CBC_SHA { 0x00, 0x32 }
-
/** DHE RSA
**/
#define GNUTLS_DHE_RSA_3DES_EDE_CBC_SHA { 0x00, 0x16 }
GNUTLS_CIPHER_SUITE_ENTRY(GNUTLS_DHE_DSS_AES_256_CBC_SHA,
GNUTLS_CIPHER_AES_256_CBC, GNUTLS_KX_DHE_DSS,
GNUTLS_MAC_SHA, GNUTLS_SSL3),
-
+ GNUTLS_CIPHER_SUITE_ENTRY(GNUTLS_DHE_DSS_3DES_EDE_CBC_RMD,
+ GNUTLS_CIPHER_3DES_CBC, GNUTLS_KX_DHE_DSS,
+ GNUTLS_MAC_RMD160, GNUTLS_TLS1),
+ GNUTLS_CIPHER_SUITE_ENTRY(GNUTLS_DHE_DSS_AES_128_CBC_RMD,
+ GNUTLS_CIPHER_AES_128_CBC, GNUTLS_KX_DHE_DSS,
+ GNUTLS_MAC_RMD160, GNUTLS_TLS1),
+ GNUTLS_CIPHER_SUITE_ENTRY(GNUTLS_DHE_DSS_AES_256_CBC_RMD,
+ GNUTLS_CIPHER_AES_256_CBC, GNUTLS_KX_DHE_DSS,
+ GNUTLS_MAC_RMD160, GNUTLS_TLS1),
/* DHE_RSA */
GNUTLS_CIPHER_SUITE_ENTRY(GNUTLS_DHE_RSA_TWOFISH_128_CBC_SHA,
GNUTLS_CIPHER_TWOFISH_128_CBC, GNUTLS_KX_DHE_RSA,
GNUTLS_CIPHER_SUITE_ENTRY(GNUTLS_DHE_RSA_AES_256_CBC_SHA,
GNUTLS_CIPHER_AES_256_CBC, GNUTLS_KX_DHE_RSA,
GNUTLS_MAC_SHA, GNUTLS_SSL3),
-
+ GNUTLS_CIPHER_SUITE_ENTRY(GNUTLS_DHE_RSA_3DES_EDE_CBC_RMD,
+ GNUTLS_CIPHER_3DES_CBC, GNUTLS_KX_DHE_RSA,
+ GNUTLS_MAC_RMD160, GNUTLS_TLS1),
+ GNUTLS_CIPHER_SUITE_ENTRY(GNUTLS_DHE_RSA_AES_128_CBC_RMD,
+ GNUTLS_CIPHER_AES_128_CBC, GNUTLS_KX_DHE_RSA,
+ GNUTLS_MAC_RMD160, GNUTLS_TLS1),
+ GNUTLS_CIPHER_SUITE_ENTRY(GNUTLS_DHE_RSA_AES_256_CBC_RMD,
+ GNUTLS_CIPHER_AES_256_CBC, GNUTLS_KX_DHE_RSA,
+ GNUTLS_MAC_RMD160, GNUTLS_TLS1),
/* RSA */
GNUTLS_CIPHER_SUITE_ENTRY(GNUTLS_RSA_NULL_MD5,
GNUTLS_CIPHER_NULL,
GNUTLS_CIPHER_SUITE_ENTRY(GNUTLS_RSA_TWOFISH_128_CBC_SHA,
GNUTLS_CIPHER_TWOFISH_128_CBC, GNUTLS_KX_RSA,
GNUTLS_MAC_SHA, GNUTLS_TLS1),
-
+ GNUTLS_CIPHER_SUITE_ENTRY(GNUTLS_RSA_3DES_EDE_CBC_RMD,
+ GNUTLS_CIPHER_3DES_CBC,
+ GNUTLS_KX_RSA, GNUTLS_MAC_RMD160, GNUTLS_TLS1),
+ GNUTLS_CIPHER_SUITE_ENTRY(GNUTLS_RSA_AES_128_CBC_RMD,
+ GNUTLS_CIPHER_AES_128_CBC, GNUTLS_KX_RSA,
+ GNUTLS_MAC_RMD160, GNUTLS_TLS1),
+ GNUTLS_CIPHER_SUITE_ENTRY(GNUTLS_RSA_AES_256_CBC_RMD,
+ GNUTLS_CIPHER_AES_256_CBC, GNUTLS_KX_RSA,
+ GNUTLS_MAC_RMD160, GNUTLS_TLS1),
{0, {{0,0}}, 0, 0, 0, 0}
};
GNUTLS_HASH_HANDLE _gnutls_hash_init(gnutls_mac_algorithm algorithm)
{
- GNUTLS_MAC_HANDLE ret;
+ GNUTLS_MAC_HANDLE ret = NULL;
gcry_error_t result;
+ ret = gnutls_malloc(sizeof(GNUTLS_MAC_HANDLE_INT));
+ if (ret == NULL) {
+ gnutls_assert();
+ return GNUTLS_HASH_FAILED;
+ }
+
+ ret->algorithm = algorithm;
+
switch (algorithm) {
case GNUTLS_MAC_SHA:
- ret = gnutls_malloc(sizeof(GNUTLS_MAC_HANDLE_INT));
- if (ret == NULL)
- return GNUTLS_HASH_FAILED;
result = gcry_md_open( &ret->handle, GCRY_MD_SHA1, 0);
- if (result) {
- gnutls_free(ret);
- ret = GNUTLS_HASH_FAILED;
- }
break;
-
case GNUTLS_MAC_MD5:
- ret = gnutls_malloc(sizeof(GNUTLS_MAC_HANDLE_INT));
- if (ret == NULL)
- return GNUTLS_HASH_FAILED;
result = gcry_md_open( &ret->handle, GCRY_MD_MD5, 0);
- if (result) {
- gnutls_free(ret);
- ret = GNUTLS_HASH_FAILED;
- }
break;
-
+ case GNUTLS_MAC_RMD160:
+ result = gcry_md_open( &ret->handle, GCRY_MD_RMD160, 0);
+ break;
default:
+ gnutls_assert();
+ gnutls_free( ret);
ret = GNUTLS_HASH_FAILED; break;
}
- if (ret != GNUTLS_HASH_FAILED)
- ret->algorithm = algorithm;
+ if (result) {
+ gnutls_assert();
+ gnutls_free(ret);
+ ret = GNUTLS_HASH_FAILED;
+ }
return ret;
}
case GNUTLS_MAC_MD5:
ret = gcry_md_get_algo_dlen(GCRY_MD_MD5);
break;
+ case GNUTLS_MAC_RMD160:
+ ret = gcry_md_get_algo_dlen(GCRY_MD_MD5);
+ break;
default:
ret = 0; break;
}
GNUTLS_MAC_HANDLE ret;
gcry_error_t result;
+ ret = gnutls_malloc(sizeof(GNUTLS_MAC_HANDLE_INT));
+ if (ret == NULL)
+ return GNUTLS_MAC_FAILED;
+
switch (algorithm) {
case GNUTLS_MAC_SHA:
- ret = gnutls_malloc(sizeof(GNUTLS_MAC_HANDLE_INT));
- if (ret == NULL)
- return GNUTLS_MAC_FAILED;
-
result = gcry_md_open(&ret->handle, GCRY_MD_SHA1, GCRY_MD_FLAG_HMAC);
-
- if (result)
- ret = GNUTLS_MAC_FAILED;
break;
case GNUTLS_MAC_MD5:
- ret = gnutls_malloc(sizeof(GNUTLS_MAC_HANDLE_INT));
- if (ret == NULL)
- return GNUTLS_MAC_FAILED;
-
result = gcry_md_open(&ret->handle, GCRY_MD_MD5, GCRY_MD_FLAG_HMAC);
-
- if (result)
- ret = GNUTLS_MAC_FAILED;
+ break;
+ case GNUTLS_MAC_RMD160:
+ result = gcry_md_open(&ret->handle, GCRY_MD_RMD160, GCRY_MD_FLAG_HMAC);
break;
default:
+ gnutls_free(ret);
ret = GNUTLS_MAC_FAILED;
}
+ if (result)
+ ret = GNUTLS_MAC_FAILED;
+
if (ret != GNUTLS_MAC_FAILED) {
gcry_md_setkey(ret->handle, key, keylen);
ret->keysize = keylen;
}
-
-
return ret;
}
gnutls_free(handle);
}
+inline static int get_padsize( gnutls_mac_algorithm algorithm)
+{
+ switch (algorithm) {
+ case GNUTLS_MAC_MD5:
+ return 48;
+ case GNUTLS_MAC_SHA:
+ return 40;
+ default:
+ return 0;
+ }
+}
+
GNUTLS_MAC_HANDLE _gnutls_mac_init_ssl3(gnutls_mac_algorithm algorithm, void *key,
int keylen)
{
char ipad[48];
int padsize;
- switch (algorithm) {
- case GNUTLS_MAC_MD5:
- padsize = 48;
- break;
- case GNUTLS_MAC_SHA:
- padsize = 40;
- break;
- default:
- padsize = 0;
- }
- if (padsize > 0) {
- memset(ipad, 0x36, padsize);
+ padsize = get_padsize( algorithm);
+ if (padsize == 0) {
+ gnutls_assert();
+ return GNUTLS_MAC_FAILED;
}
+
+ memset(ipad, 0x36, padsize);
+
ret = _gnutls_hash_init(algorithm);
if (ret != GNUTLS_HASH_FAILED) {
ret->key = key;
int padsize;
int block;
- switch (handle->algorithm) {
- case GNUTLS_MAC_MD5:
- padsize = 48;
- break;
- case GNUTLS_MAC_SHA:
- padsize = 40;
- break;
- default:
- padsize = 0;
- }
- if (padsize > 0) {
- memset(opad, 0x5C, padsize);
+ padsize = get_padsize( handle->algorithm);
+ if (padsize == 0) {
+ gnutls_assert();
+ return;
}
+ memset(opad, 0x5C, padsize);
+
td = _gnutls_hash_init(handle->algorithm);
if (td != GNUTLS_MAC_FAILED) {
if (handle->keysize > 0)
int padsize;
int block;
- switch (handle->algorithm) {
- case GNUTLS_MAC_MD5:
- padsize = 48;
- break;
- case GNUTLS_MAC_SHA:
- padsize = 40;
- break;
- default:
- padsize = 0;
- }
- if (padsize > 0) {
- memset(opad, 0x5C, padsize);
- memset(ipad, 0x36, padsize);
+ padsize = get_padsize( handle->algorithm);
+ if (padsize == 0) {
+ gnutls_assert();
+ return;
}
+ memset(opad, 0x5C, padsize);
+ memset(ipad, 0x36, padsize);
+
td = _gnutls_hash_init(handle->algorithm);
if (td != GNUTLS_HASH_FAILED) {
if (key_size > 0)
GNUTLS_KX_RSA_EXPORT, GNUTLS_KX_SRP_RSA, GNUTLS_KX_SRP_DSS
} gnutls_kx_algorithm;
-typedef enum gnutls_mac_algorithm { GNUTLS_MAC_UNKNOWN=0, GNUTLS_MAC_NULL=1, GNUTLS_MAC_MD5, GNUTLS_MAC_SHA } gnutls_mac_algorithm;
+typedef enum gnutls_mac_algorithm { GNUTLS_MAC_UNKNOWN=0, GNUTLS_MAC_NULL=1,
+GNUTLS_MAC_MD5, GNUTLS_MAC_SHA, GNUTLS_MAC_RMD160
+} gnutls_mac_algorithm;
typedef gnutls_mac_algorithm gnutls_digest_algorithm;
typedef enum gnutls_compression_method { GNUTLS_COMP_NULL=1, GNUTLS_COMP_ZLIB,
* the appropriate functions.
*
* The order is TLS1, SSL3 for protocols.
- * GNUTLS_KX_RSA, GNUTLS_KX_DHE_DSS, GNUTLS_KX_DHE_RSA for key exchange
- * algorithms.
- * GNUTLS_MAC_SHA, GNUTLS_MAC_MD5 for MAC algorithms.
- * GNUTLS_CIPHER_AES_256_CBC,
- * GNUTLS_CIPHER_AES_128_CBC,
- * and GNUTLS_CIPHER_3DES_CBC,
- * GNUTLS_CIPHER_ARCFOUR_128 for ciphers.
+ * RSA, DHE_DSS, DHE_RSA for key exchange
+ * algorithms. SHA, MD5 and RIPEMD160 for MAC algorithms.
+ * AES_256_CBC, AES_128_CBC, 3DES_CBC,
+ * and ARCFOUR_128 for ciphers.
*
**/
int gnutls_set_default_priority(gnutls_session session)
};
static const int comp_priority[] = { GNUTLS_COMP_NULL, 0 };
static const int mac_priority[] =
- { GNUTLS_MAC_SHA, GNUTLS_MAC_MD5, 0 };
+ { GNUTLS_MAC_SHA, GNUTLS_MAC_MD5, GNUTLS_MAC_RMD160, 0 };
gnutls_cipher_set_priority(session, cipher_priority);
gnutls_compression_set_priority(session, comp_priority);
* Sets some default priority on the ciphers, key exchange methods, macs
* and compression methods. This is to avoid using the gnutls_*_priority() functions, if
* these defaults are ok. This function also includes weak algorithms.
- * The order is TLS1, SSL3 for protocols, GNUTLS_KX_DHE_DSS, GNUTLS_KX_RSA,
- * GNUTLS_KX_DHE_RSA, GNUTLS_KX_RSA_EXPORT for key exchange algorithms.
- * GNUTLS_MAC_SHA, GNUTLS_MAC_MD5 for MAC algorithms,
- * GNUTLS_CIPHER_AES_256_CBC, GNUTLS_CIPHER_AES_128_CBC,
- * and GNUTLS_CIPHER_3DES_CBC, GNUTLS_CIPHER_ARCFOUR_128,
- * GNUTLS_CIPHER_ARCFOUR_40 for ciphers.
+ * The order is TLS1, SSL3 for protocols, RSA, DHE_DSS,
+ * DHE_RSA, RSA_EXPORT for key exchange algorithms.
+ * SHA, MD5, RIPEMD160 for MAC algorithms,
+ * AES_256_CBC, AES_128_CBC,
+ * and 3DES_CBC, ARCFOUR_128, ARCFOUR_40 for ciphers.
*
**/
int gnutls_set_default_export_priority(gnutls_session session)
};
static const int comp_priority[] = { GNUTLS_COMP_NULL, 0 };
static const int mac_priority[] =
- { GNUTLS_MAC_SHA, GNUTLS_MAC_MD5, 0 };
+ { GNUTLS_MAC_SHA, GNUTLS_MAC_MD5, GNUTLS_MAC_RMD160, 0 };
gnutls_cipher_set_priority(session, cipher_priority);
gnutls_compression_set_priority(session, comp_priority);
*output_data_size = len;
if (result == ASN1_MEM_ERROR) {
gnutls_assert();
- _gnutls_debug_log("Length required for der coding: %d\n", len);
return GNUTLS_E_SHORT_MEMORY_BUFFER;
}
gnutls_assert();
if ((result=asn1_der_coding( asn1_data, "", tmp, &len, NULL)) != ASN1_SUCCESS) {
gnutls_assert();
if (result == ASN1_MEM_ERROR) {
- _gnutls_debug_log("Length required for der coding: %d\n", len);
*output_data_size = B64FSIZE(strlen(pem_header),len) + 1;
}
gnutls_afree(tmp);
};
int cipher_priority[PRI_MAX] =
{ GNUTLS_CIPHER_ARCFOUR_128, GNUTLS_CIPHER_AES_128_CBC,
- GNUTLS_CIPHER_3DES_CBC,
+ GNUTLS_CIPHER_3DES_CBC, GNUTLS_CIPHER_AES_256_CBC,
GNUTLS_CIPHER_ARCFOUR_40, 0
};
int comp_priority[PRI_MAX] = { GNUTLS_COMP_ZLIB, GNUTLS_COMP_NULL, 0 };
-int mac_priority[PRI_MAX] = { GNUTLS_MAC_SHA, GNUTLS_MAC_MD5, 0 };
+int mac_priority[PRI_MAX] =
+ { GNUTLS_MAC_SHA, GNUTLS_MAC_MD5, GNUTLS_MAC_RMD160, 0 };
int cert_type_priority[PRI_MAX] = { GNUTLS_CRT_X509, GNUTLS_CRT_OPENPGP, 0 };
/* end of global stuff */
printf("MACs:");
printf(" MD5");
+ printf(", RMD160");
printf(", SHA-1\n");
printf("Key exchange algorithms:");
for (j = i = 0; i < nmacs; i++) {
if (strncasecmp(macs[i], "MD5", 3) == 0)
mac_priority[j++] = GNUTLS_MAC_MD5;
+ if (strncasecmp(macs[i], "RMD", 3) == 0)
+ mac_priority[j++] = GNUTLS_MAC_RMD160;
if (strncasecmp(macs[i], "SHA", 3) == 0)
mac_priority[j++] = GNUTLS_MAC_SHA;
}
int comp_priority[PRI_MAX] =
{ GNUTLS_COMP_ZLIB, GNUTLS_COMP_LZO, GNUTLS_COMP_NULL, 0 };
-int mac_priority[PRI_MAX] = { GNUTLS_MAC_SHA, GNUTLS_MAC_MD5, 0 };
+int mac_priority[PRI_MAX] =
+ { GNUTLS_MAC_SHA, GNUTLS_MAC_MD5, GNUTLS_MAC_RMD160, 0 };
int cert_type_priority[PRI_MAX] = { GNUTLS_CRT_X509, GNUTLS_CRT_OPENPGP, 0 };
LIST_DECLARE_INIT(listener_list, listener_item, listener_free);