Support different encoding types in certificate.get_encoding()
This commit is contained in:
@@ -1221,9 +1221,16 @@ static bool get_validity(private_x509_cert_t *this, time_t *when,
|
||||
/**
|
||||
* Implementation of certificate_t.get_encoding.
|
||||
*/
|
||||
static chunk_t get_encoding(private_x509_cert_t *this)
|
||||
static bool get_encoding(private_x509_cert_t *this, cred_encoding_type_t type,
|
||||
chunk_t *encoding)
|
||||
{
|
||||
return chunk_clone(this->encoding);
|
||||
if (type == CERT_ASN1_DER)
|
||||
{
|
||||
*encoding = chunk_clone(this->encoding);
|
||||
return TRUE;
|
||||
}
|
||||
return lib->encoding->encode(lib->encoding, type, NULL, encoding,
|
||||
CRED_PART_X509_ASN1_DER, this->encoding, CRED_PART_END);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1246,7 +1253,10 @@ static bool equals(private_x509_cert_t *this, certificate_t *other)
|
||||
{ /* skip allocation if we have the same implementation */
|
||||
return chunk_equals(this->encoding, ((private_x509_cert_t*)other)->encoding);
|
||||
}
|
||||
encoding = other->get_encoding(other);
|
||||
if (!other->get_encoding(other, CERT_ASN1_DER, &encoding))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
equal = chunk_equals(this->encoding, encoding);
|
||||
free(encoding.ptr);
|
||||
return equal;
|
||||
@@ -1376,7 +1386,7 @@ static private_x509_cert_t* create_empty(void)
|
||||
this->public.interface.interface.issued_by = (bool (*) (certificate_t*, certificate_t*))issued_by;
|
||||
this->public.interface.interface.get_public_key = (public_key_t* (*) (certificate_t*))get_public_key;
|
||||
this->public.interface.interface.get_validity = (bool (*) (certificate_t*, time_t*, time_t*, time_t*))get_validity;
|
||||
this->public.interface.interface.get_encoding = (chunk_t (*) (certificate_t*))get_encoding;
|
||||
this->public.interface.interface.get_encoding = (bool (*) (certificate_t*,cred_encoding_type_t,chunk_t*))get_encoding;
|
||||
this->public.interface.interface.equals = (bool (*)(certificate_t*, certificate_t*))equals;
|
||||
this->public.interface.interface.get_ref = (certificate_t* (*)(certificate_t*))get_ref;
|
||||
this->public.interface.interface.destroy = (void (*)(certificate_t*))destroy;
|
||||
|
||||
Reference in New Issue
Block a user