diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2003-04-01 09:11:46 +0000 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2003-04-01 09:11:46 +0000 |
commit | 9fce98e569983b9881c252b5b6dafd1247e719f7 (patch) | |
tree | 1ef0cbbcba212aac132ad23726d6c522ed1f351c | |
parent | a6dc8fe502baf15f47a56e29a6c21f30d253855d (diff) | |
download | gnutls-9fce98e569983b9881c252b5b6dafd1247e719f7.tar.gz |
*** empty log message ***
-rw-r--r-- | lib/x509/common.c | 10 | ||||
-rw-r--r-- | lib/x509/x509.c | 56 |
2 files changed, 40 insertions, 26 deletions
diff --git a/lib/x509/common.c b/lib/x509/common.c index a2ce341cfb..3269e5e1dc 100644 --- a/lib/x509/common.c +++ b/lib/x509/common.c @@ -208,7 +208,15 @@ gnutls_pk_algorithm _gnutls_x509_oid2pk_algorithm( const char* oid) return GNUTLS_PK_RSA; else if (strcmp( oid, DSA_OID) == 0) return GNUTLS_PK_DSA; - + else if (strcmp( oid, RSA_MD5_OID) == 0) + return GNUTLS_PK_RSA; + else if (strcmp( oid, RSA_SHA1_OID) == 0) + return GNUTLS_PK_RSA; + else if (strcmp( oid, DSA_SHA1_OID) == 0) + return GNUTLS_PK_DSA; + + _gnutls_x509_log("Unknown PK OID: '%s'\n", oid); + return GNUTLS_PK_UNKNOWN; } diff --git a/lib/x509/x509.c b/lib/x509/x509.c index 2b429a219f..9cd1db77c1 100644 --- a/lib/x509/x509.c +++ b/lib/x509/x509.c @@ -522,42 +522,25 @@ int gnutls_x509_crt_get_serial(gnutls_x509_crt cert, char* result, int* result_s int gnutls_x509_crt_get_pk_algorithm( gnutls_x509_crt cert, int* bits) { int result; - opaque *str; + opaque *str = NULL; int algo; - int len = sizeof(str); + char oid[64]; + int len; GNUTLS_MPI params[MAX_PUBLIC_PARAMS_SIZE]; - len = 0; + len = sizeof(oid); result = asn1_read_value (cert->cert, "tbsCertificate.subjectPublicKeyInfo.algorithm.algorithm", - NULL, &len); - - if (result != ASN1_MEM_ERROR) { - gnutls_assert(); - return _gnutls_asn2err(result); - } - - str = gnutls_malloc( len); - if (str == NULL) { - gnutls_assert(); - return GNUTLS_E_MEMORY_ERROR; - } - - result = - asn1_read_value - (cert->cert, - "tbsCertificate.subjectPublicKeyInfo.algorithm.algorithm", - str, &len); + oid, &len); if (result != ASN1_SUCCESS) { gnutls_assert(); - gnutls_free(str); return _gnutls_asn2err(result); } - algo = _gnutls_x509_oid2pk_algorithm( str); + algo = _gnutls_x509_oid2pk_algorithm( oid); if ( bits==NULL) { gnutls_free(str); @@ -566,19 +549,42 @@ int gnutls_x509_crt_get_pk_algorithm( gnutls_x509_crt cert, int* bits) /* Now read the parameters' bits */ - len = sizeof(str) - 1; + len = 0; result = asn1_read_value (cert->cert, "tbsCertificate.subjectPublicKeyInfo.subjectPublicKey", - str, &len); + NULL, &len); + + if (result != ASN1_MEM_ERROR) { + gnutls_assert(); + return _gnutls_asn2err(result); + } + + if (len % 8 != 0) { + gnutls_assert(); + return GNUTLS_E_CERTIFICATE_ERROR; + } + len /= 8; + + str = gnutls_malloc( len); + if (str == NULL) { + gnutls_assert(); + return GNUTLS_E_MEMORY_ERROR; + } + result = + asn1_read_value + (cert->cert, "tbsCertificate.subjectPublicKeyInfo.subjectPublicKey", + str, &len); + if (result != ASN1_SUCCESS) { gnutls_assert(); gnutls_free(str); return _gnutls_asn2err(result); } + len /= 8; if (algo==GNUTLS_PK_RSA) { if ((result=_gnutls_x509_read_rsa_params( str, len, params)) < 0) { |