const char *gnutls_pk_algorithm_get_name( gnutls_pk_algorithm_t algorithm);
typedef enum { GNUTLS_SIGN_RSA_SHA = 1, GNUTLS_SIGN_DSA_SHA,
- GNUTLS_SIGN_RSA_MD5, GNUTLS_SIGN_RSA_MD2,
+ GNUTLS_SIGN_RSA_MD5, GNUTLS_SIGN_RSA_MD2, GNUTLS_SIGN_RSA_RMD160,
GNUTLS_SIGN_UNKNOWN = 0xff
} gnutls_sign_algorithm_t;
#include "gnutls_algorithms.h"
#include "gnutls_errors.h"
#include "gnutls_cert.h"
-
+#include <x509/common.h>
/* Cred type mappings to KX algorithms
* FIXME: The mappings are not 1-1. Some KX such as SRP_RSA require
struct gnutls_hash_entry {
const char *name;
+ const char* oid;
gnutls_mac_algorithm_t id;
};
typedef struct gnutls_hash_entry gnutls_hash_entry;
static const gnutls_hash_entry hash_algorithms[] = {
- {"SHA", GNUTLS_MAC_SHA},
- {"MD5", GNUTLS_MAC_MD5},
- {"RIPEMD160", GNUTLS_MAC_RMD160},
- {"NULL", GNUTLS_MAC_NULL},
- {0, 0}
+ {"SHA", OID_SHA1, GNUTLS_MAC_SHA},
+ {"MD5", OID_MD5, GNUTLS_MAC_MD5},
+ {"MD2", OID_MD2, 0/*GNUTLS_MAC_MD2*/},
+ {"RIPEMD160", OID_RMD160, GNUTLS_MAC_RMD160},
+ {"NULL", "", GNUTLS_MAC_NULL},
+ {0, 0, 0}
};
#define GNUTLS_HASH_LOOP(b) \
return ret;
}
+const char *_gnutls_x509_mac_to_oid(gnutls_mac_algorithm_t algorithm)
+{
+ const char *ret = NULL;
+
+ /* avoid prefix */
+ GNUTLS_HASH_ALG_LOOP(ret = p->oid);
+
+ return ret;
+}
+
+gnutls_mac_algorithm_t _gnutls_x509_oid2mac_algorithm(const char *oid)
+{
+gnutls_mac_algorithm_t ret = 0;
+
+ GNUTLS_HASH_LOOP(if (strcmp(oid, p->oid)==0) {ret = p->id;break;});
+
+ if (ret == 0) return GNUTLS_MAC_UNKNOWN;
+ return ret;
+}
+
+
int _gnutls_mac_is_ok(gnutls_mac_algorithm_t algorithm)
{
ssize_t ret = -1;
*/
struct gnutls_sign_entry {
const char *name;
+ const char* oid;
gnutls_sign_algorithm_t id;
+ gnutls_pk_algorithm_t pk;
+ gnutls_mac_algorithm_t mac;
};
typedef struct gnutls_sign_entry gnutls_sign_entry;
static const gnutls_sign_entry sign_algorithms[] = {
- {"RSA-SHA", GNUTLS_SIGN_RSA_SHA},
- {"DSA-SHA", GNUTLS_SIGN_DSA_SHA},
- {"RSA-MD5", GNUTLS_SIGN_RSA_MD5},
- {"RSA-MD2", GNUTLS_SIGN_RSA_MD2},
- {0, 0}
+ {"RSA-SHA", RSA_SHA1_OID, GNUTLS_SIGN_RSA_SHA, GNUTLS_PK_RSA, GNUTLS_MAC_SHA},
+ {"RSA-RMD160", RSA_RMD160_OID, GNUTLS_SIGN_RSA_RMD160, GNUTLS_PK_RSA, GNUTLS_MAC_RMD160},
+ {"DSA-SHA", DSA_SHA1_OID, GNUTLS_SIGN_DSA_SHA, GNUTLS_PK_DSA, GNUTLS_MAC_SHA},
+ {"RSA-MD5", RSA_MD5_OID, GNUTLS_SIGN_RSA_MD5, GNUTLS_PK_RSA, GNUTLS_MAC_MD5},
+ {"RSA-MD2", RSA_MD2_OID, GNUTLS_SIGN_RSA_MD2, GNUTLS_PK_RSA, 0/*GNUTLS_MAC_MD2*/},
+ {0, 0, 0, 0, 0}
};
#define GNUTLS_SIGN_LOOP(b) \
for(p = sign_algorithms; p->name != NULL; p++) { b ; }
#define GNUTLS_SIGN_ALG_LOOP(a) \
- GNUTLS_SIGN_LOOP( if(p->id == algorithm) { a; break; } )
+ GNUTLS_SIGN_LOOP( if(p->id == sign) { a; break; } )
* of the specified sign algorithm or NULL.
**/
const char *gnutls_sign_algorithm_get_name(gnutls_sign_algorithm_t
- algorithm)
+ sign)
{
const char *ret = NULL;
return ret;
}
+gnutls_sign_algorithm_t _gnutls_x509_oid2sign_algorithm(const char *oid)
+{
+ gnutls_sign_algorithm_t ret = 0;
+
+ GNUTLS_SIGN_LOOP(if(strcmp(oid, p->oid)==0) {ret=p->id;break;});
+
+ if (ret == 0) {
+ _gnutls_x509_log("Unknown SIGN OID: '%s'\n", oid);
+ return GNUTLS_SIGN_UNKNOWN;
+ }
+ return ret;
+}
+
+gnutls_sign_algorithm_t _gnutls_x509_pk_to_sign(gnutls_pk_algorithm_t pk,
+ gnutls_mac_algorithm_t mac)
+{
+gnutls_sign_algorithm_t ret = 0;
+
+ GNUTLS_SIGN_LOOP(if(pk==p->pk && mac==p->mac) {ret=p->id;break;});
+
+ if (ret==0) return GNUTLS_SIGN_UNKNOWN;
+ return ret;
+}
+
+const char *_gnutls_x509_sign_to_oid(gnutls_pk_algorithm_t pk,
+ gnutls_mac_algorithm_t mac)
+{
+gnutls_sign_algorithm_t sign;
+const char* ret;
+
+ sign = _gnutls_x509_pk_to_sign(pk, mac);
+
+ GNUTLS_SIGN_ALG_LOOP(ret=p->oid);
+ return ret;
+}
+
+
/* pk algorithms;
*/
struct gnutls_pk_entry {
const char *name;
+ const char* oid;
gnutls_pk_algorithm_t id;
};
typedef struct gnutls_pk_entry gnutls_pk_entry;
static const gnutls_pk_entry pk_algorithms[] = {
- {"RSA", GNUTLS_PK_RSA},
- {"DSA", GNUTLS_PK_DSA},
- {0, 0}
+ {"RSA", PKIX1_RSA_OID, GNUTLS_PK_RSA},
+ {"DSA", DSA_OID, GNUTLS_PK_DSA},
+ {0, 0, 0}
};
#define GNUTLS_PK_LOOP(b) \
return ret;
}
+
+gnutls_pk_algorithm_t _gnutls_x509_oid2pk_algorithm(const char *oid)
+{
+gnutls_pk_algorithm_t ret = GNUTLS_PK_UNKNOWN;
+
+ GNUTLS_PK_LOOP(if (strcmp(p->oid,oid)==0) {ret = p->id; break;});
+ return ret;
+}
+
+const char *_gnutls_x509_pk_to_oid(gnutls_pk_algorithm_t algorithm)
+{
+ const char *ret = NULL;
+
+ GNUTLS_PK_ALG_LOOP(ret = p->oid);
+ return ret;
+}
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
+#ifndef ALGORITHMS_H
+# define ALGORITHMS_H
+
#include "gnutls_auth.h"
/* functions for version */
int _gnutls_mac_is_ok(gnutls_mac_algorithm_t algorithm);
int _gnutls_mac_priority(gnutls_session_t session,
gnutls_mac_algorithm_t algorithm);
+gnutls_mac_algorithm_t _gnutls_x509_oid2mac_algorithm(const char *oid);
+const char *_gnutls_x509_mac_to_oid(gnutls_mac_algorithm_t mac);
/* functions for cipher suites */
int _gnutls_supported_ciphersuites(gnutls_session_t session,
const char *_gnutls_cipher_suite_get_name(cipher_suite_st * algorithm);
gnutls_cipher_algorithm_t _gnutls_cipher_suite_get_cipher_algo(const
- cipher_suite_st
- *
- algorithm);
+ cipher_suite_st* algorithm);
gnutls_kx_algorithm_t _gnutls_cipher_suite_get_kx_algo(const
- cipher_suite_st *
- algorithm);
+ cipher_suite_st * algorithm);
gnutls_mac_algorithm_t _gnutls_cipher_suite_get_mac_algo(const
- cipher_suite_st *
- algorithm);
+ cipher_suite_st *algorithm);
gnutls_protocol_t _gnutls_cipher_suite_get_version(const cipher_suite_st *
algorithm);
cipher_suite_st _gnutls_cipher_suite_get_suite_name(cipher_suite_st *
/* functions for ciphers */
int _gnutls_cipher_priority(gnutls_session_t session,
- gnutls_cipher_algorithm_t algorithm);
+ gnutls_cipher_algorithm_t algorithm);
int _gnutls_cipher_get_block_size(gnutls_cipher_algorithm_t algorithm);
int _gnutls_cipher_is_block(gnutls_cipher_algorithm_t algorithm);
int _gnutls_cipher_is_ok(gnutls_cipher_algorithm_t algorithm);
/* KX to PK mapping */
gnutls_pk_algorithm_t _gnutls_map_pk_get_pk(gnutls_kx_algorithm_t
- kx_algorithm);
+ kx_algorithm);
+gnutls_pk_algorithm_t _gnutls_x509_oid2pk_algorithm(const char *oid);
+const char *_gnutls_x509_pk_to_oid(gnutls_pk_algorithm_t pk);
enum encipher_type { CIPHER_ENCRYPT = 0, CIPHER_SIGN = 1, CIPHER_IGN };
int comp_level;
};
typedef struct gnutls_compression_entry gnutls_compression_entry;
+
+/* sign algorithms stuff
+ */
+gnutls_sign_algorithm_t _gnutls_x509_oid2sign_algorithm(const char *oid);
+gnutls_sign_algorithm_t _gnutls_x509_oid2sign_algorithm(const char *oid);
+gnutls_sign_algorithm_t _gnutls_x509_pk_to_sign(gnutls_pk_algorithm_t pk,
+ gnutls_mac_algorithm_t mac);
+const char *_gnutls_x509_sign_to_oid(gnutls_pk_algorithm_t,
+ gnutls_mac_algorithm_t mac);
+
+
+#endif
typedef enum gnutls_sign_algorithm {
GNUTLS_SIGN_RSA_SHA = 1, GNUTLS_SIGN_DSA_SHA,
- GNUTLS_SIGN_RSA_MD5, GNUTLS_SIGN_RSA_MD2,
+ GNUTLS_SIGN_RSA_MD5, GNUTLS_SIGN_RSA_MD2, GNUTLS_SIGN_RSA_RMD160,
GNUTLS_SIGN_UNKNOWN = 0xff
} gnutls_sign_algorithm_t;
/* Pull & Push functions defines:
*/
-typedef ssize_t(*gnutls_pull_func) (gnutls_transport_ptr_t, void *,
- size_t);
-typedef ssize_t(*gnutls_push_func) (gnutls_transport_ptr_t, const void *,
- size_t);
+typedef ssize_t(*gnutls_pull_func)(gnutls_transport_ptr_t, void *, size_t);
+typedef ssize_t(*gnutls_push_func)(gnutls_transport_ptr_t, const void *,size_t);
/* Store & Retrieve functions defines:
*/
typedef int (*gnutls_db_store_func) (void *, gnutls_datum_t key,
- gnutls_datum_t data);
+ gnutls_datum_t data);
typedef int (*gnutls_db_remove_func) (void *, gnutls_datum_t key);
typedef gnutls_datum_t(*gnutls_db_retr_func) (void *, gnutls_datum_t key);
sprintf(data, "%d", k);
}
-
-gnutls_pk_algorithm_t _gnutls_x509_oid2pk_algorithm(const char *oid)
-{
- if (strcmp(oid, PKIX1_RSA_OID) == 0) /* pkix-1 1 - RSA */
- return GNUTLS_PK_RSA;
- else if (strcmp(oid, DSA_OID) == 0)
- return GNUTLS_PK_DSA;
-
- _gnutls_x509_log("Unknown PK OID: '%s'\n", oid);
-
- return GNUTLS_PK_UNKNOWN;
-}
-
-gnutls_sign_algorithm_t _gnutls_x509_oid2sign_algorithm(const char *oid)
-{
- if (strcmp(oid, RSA_MD5_OID) == 0) {
- return GNUTLS_SIGN_RSA_MD5;
- } else if (strcmp(oid, RSA_SHA1_OID) == 0) {
- return GNUTLS_SIGN_RSA_SHA;
- } else if (strcmp(oid, RSA_MD2_OID) == 0) {
- return GNUTLS_SIGN_RSA_MD2;
- } else if (strcmp(oid, DSA_SHA1_OID) == 0) {
- return GNUTLS_SIGN_DSA_SHA;
- }
-
- _gnutls_x509_log("Unknown SIGN OID: '%s'\n", oid);
-
- return GNUTLS_SIGN_UNKNOWN;
-}
-
-
-/* returns -1 on error
- */
-gnutls_mac_algorithm_t _gnutls_x509_oid2mac_algorithm(const char *oid)
-{
- if (strcmp(oid, OID_SHA1) == 0)
- return GNUTLS_MAC_SHA;
- else if (strcmp(oid, OID_MD5) == 0)
- return GNUTLS_MAC_MD5;
-
- return GNUTLS_MAC_UNKNOWN;
-}
-
-const char *_gnutls_x509_mac_to_oid(gnutls_mac_algorithm_t mac)
-{
- if (mac == GNUTLS_MAC_SHA)
- return OID_SHA1;
- else if (mac == GNUTLS_MAC_MD5)
- return OID_MD5;
- else
- return NULL;
-}
-
-const char *_gnutls_x509_pk_to_oid(gnutls_pk_algorithm_t pk)
-{
- if (pk == GNUTLS_PK_RSA)
- return PKIX1_RSA_OID;
- else if (pk == GNUTLS_PK_DSA)
- return DSA_OID;
- else
- return NULL;
-}
-
-gnutls_sign_algorithm_t _gnutls_x509_pk_to_sign(gnutls_pk_algorithm_t pk,
- gnutls_mac_algorithm_t mac)
-{
- if (pk == GNUTLS_PK_RSA) {
- if (mac == GNUTLS_MAC_SHA)
- return GNUTLS_SIGN_RSA_SHA;
- else if (mac == GNUTLS_MAC_MD5)
- return GNUTLS_SIGN_RSA_MD5;
- } else if (pk == GNUTLS_PK_DSA) {
- if (mac == GNUTLS_MAC_SHA)
- return GNUTLS_SIGN_DSA_SHA;
- }
- return GNUTLS_SIGN_UNKNOWN;
-}
-
-const char *_gnutls_x509_sign_to_oid(gnutls_pk_algorithm_t pk,
- gnutls_mac_algorithm_t mac)
-{
- gnutls_sign_algorithm_t sign;
-
- sign = _gnutls_x509_pk_to_sign(pk, mac);
-
- if (sign == GNUTLS_SIGN_RSA_SHA)
- return RSA_SHA1_OID;
- else if (sign == GNUTLS_SIGN_RSA_MD5)
- return RSA_MD5_OID;
- else if (sign == GNUTLS_SIGN_DSA_SHA)
- return DSA_SHA1_OID;
-
- return NULL;
-}
-
-
/* TIME functions
* Convertions between generalized or UTC time to time_t
*
+#ifndef COMMON_H
+# define COMMON_H
+
+#include <gnutls_algorithms.h>
+
/* for int2str */
#define MAX_INT_DIGITS 4
void _gnutls_int2str(unsigned int k, char *data);
#define RSA_MD5_OID "1.2.840.113549.1.1.4"
#define RSA_MD2_OID "1.2.840.113549.1.1.2"
#define RSA_SHA1_OID "1.2.840.113549.1.1.5"
+#define RSA_RMD160_OID "1.3.36.3.3.1.2"
time_t _gnutls_x509_utcTime2gtime(const char *ttime);
time_t _gnutls_x509_generalTime2gtime(const char *ttime);
int _gnutls_x509_oid_data_choice(const char *OID);
int _gnutls_x509_oid_data_printable(const char *OID);
-gnutls_pk_algorithm_t _gnutls_x509_oid2pk_algorithm(const char *oid);
-gnutls_mac_algorithm_t _gnutls_x509_oid2mac_algorithm(const char *oid);
-gnutls_sign_algorithm_t _gnutls_x509_oid2sign_algorithm(const char *oid);
-
-const char *_gnutls_x509_pk_to_oid(gnutls_pk_algorithm_t pk);
-
-gnutls_sign_algorithm_t _gnutls_x509_pk_to_sign(gnutls_pk_algorithm_t pk,
- gnutls_mac_algorithm_t
- mac);
-const char *_gnutls_x509_sign_to_oid(gnutls_pk_algorithm_t,
- gnutls_mac_algorithm_t mac);
-const char *_gnutls_x509_mac_to_oid(gnutls_mac_algorithm_t mac);
-
time_t _gnutls_x509_get_time(ASN1_TYPE c2, const char *when);
gnutls_x509_subject_alt_name_t _gnutls_x509_san_find_type(char *str_type);
int _gnutls_x509_der_encode_and_copy(ASN1_TYPE src, const char *src_name,
- ASN1_TYPE dest, const char *dest_name,
- int str);
+ ASN1_TYPE dest, const char *dest_name,
+ int str);
int _gnutls_x509_der_encode(ASN1_TYPE src, const char *src_name,
- gnutls_datum_t * res, int str);
+ gnutls_datum_t * res, int str);
int _gnutls_x509_export_int(ASN1_TYPE asn1_data,
- gnutls_x509_crt_fmt_t format, char *pem_header,
- int tmp_buf_size, unsigned char *output_data,
- size_t * output_data_size);
+ gnutls_x509_crt_fmt_t format, char *pem_header,
+ int tmp_buf_size, unsigned char *output_data,
+ size_t * output_data_size);
int _gnutls_x509_read_value(ASN1_TYPE c, const char *root,
- gnutls_datum_t * ret, int str);
+ gnutls_datum_t * ret, int str);
int _gnutls_x509_write_value(ASN1_TYPE c, const char *root,
- const gnutls_datum_t * data, int str);
+ const gnutls_datum_t * data, int str);
int _gnutls_x509_encode_and_write_attribute(const char *given_oid,
- ASN1_TYPE asn1_struct,
- const char *where,
- const void *data,
- int sizeof_data, int multi);
+ ASN1_TYPE asn1_struct, const char *where, const void *data,
+ int sizeof_data, int multi);
int _gnutls_x509_decode_and_read_attribute(ASN1_TYPE asn1_struct,
- const char *where, char *oid,
- int oid_size,
- gnutls_datum_t * value,
- int multi);
+ const char *where, char *oid, int oid_size, gnutls_datum_t * value, int multi);
int _gnutls_x509_get_pk_algorithm(ASN1_TYPE src, const char *src_name,
- unsigned int *bits);
+ unsigned int *bits);
int _gnutls_x509_encode_and_copy_PKI_params(ASN1_TYPE dst,
- const char *dst_name,
- gnutls_pk_algorithm_t
- pk_algorithm, mpi_t * params,
- int params_size);
+ const char *dst_name, gnutls_pk_algorithm_t pk_algorithm, mpi_t * params,
+ int params_size);
int _gnutls_asn1_copy_node(ASN1_TYPE * dst, const char *dst_name,
- ASN1_TYPE src, const char *src_name);
+ ASN1_TYPE src, const char *src_name);
int _gnutls_x509_get_signed_data(ASN1_TYPE src, const char *src_name,
gnutls_datum_t * signed_data);
int _gnutls_x509_get_signature(ASN1_TYPE src, const char *src_name,
gnutls_datum_t * signature);
+
+#endif
#define OID_SHA1 "1.3.14.3.2.26"
#define OID_MD5 "1.2.840.113549.2.5"
+#define OID_MD2 "1.2.840.113549.2.2"
+#define OID_RMD160 "1.3.36.3.2.1"
typedef struct gnutls_x509_crl_int {
ASN1_TYPE crl;