asn1_delete_structure (&dn);
return result;
+}
+
+/*
+ * Compares the DER encoded part of a DN.
+ *
+ * Returns 1 if the DN's match and (0) if they don't match. Otherwise
+ * a negative error code is returned to indicate error.
+ */
+int
+_gnutls_x509_compare_raw_dn (const gnutls_datum_t * dn1,
+ const gnutls_datum_t * dn2)
+{
+ if (dn1->size != dn2->size)
+ {
+ gnutls_assert ();
+ return 0;
+ }
+ if (memcmp (dn1->data, dn2->data, dn2->size) != 0)
+ {
+ gnutls_assert ();
+ return 0;
+ }
+ return 1; /* they match */
}
/**
size_t id2_size;
int ret;
- if (cert->raw_issuer_dn.size == issuer->raw_dn.size &&
- memcmp(cert->raw_issuer_dn.data, issuer->raw_dn.data, issuer->raw_dn.size) == 0)
+ if (_gnutls_x509_compare_raw_dn(&cert->raw_issuer_dn, &issuer->raw_dn) != 0)
ret = 1;
else
ret = 0;
static int
is_crl_issuer (gnutls_x509_crl_t crl, gnutls_x509_crt_t issuer)
{
- if (crl->raw_issuer_dn.size == issuer->raw_dn.size &&
- memcmp(crl->raw_issuer_dn.data, issuer->raw_dn.data, issuer->raw_dn.size) == 0)
+ if (_gnutls_x509_compare_raw_dn(&crl->raw_issuer_dn, &issuer->raw_dn) != 0)
return 1;
else
return 0;
int
_gnutls_is_same_dn (gnutls_x509_crt_t cert1, gnutls_x509_crt_t cert2)
{
- if (cert1->raw_dn.size == cert2->raw_dn.size &&
- memcmp(cert1->raw_dn.data, cert2->raw_dn.data, cert2->raw_dn.size) == 0)
+ if (_gnutls_x509_compare_raw_dn(&cert1->raw_dn, &cert2->raw_dn) != 0)
return 1;
else
return 0;
static int
crl_issuer_matches (gnutls_x509_crl_t crl, gnutls_x509_crt_t cert)
{
- if (crl->raw_issuer_dn.size == cert->raw_issuer_dn.size &&
- memcmp(crl->raw_issuer_dn.data, cert->raw_issuer_dn.data, cert->raw_issuer_dn.size) == 0)
+ if (_gnutls_x509_compare_raw_dn(&crl->raw_issuer_dn, &cert->raw_issuer_dn) != 0)
return 1;
else
return 0;
int _gnutls_x509_crt_cpy (gnutls_x509_crt_t dest, gnutls_x509_crt_t src);
-
+int _gnutls_x509_compare_raw_dn (const gnutls_datum_t * dn1,
+ const gnutls_datum_t * dn2);
int _gnutls_x509_crl_cpy (gnutls_x509_crl_t dest, gnutls_x509_crl_t src);
int _gnutls_x509_crl_get_raw_issuer_dn (gnutls_x509_crl_t crl,