make X509_CRL opaque

Reviewed-by: Tim Hudson <tjh@openssl.org>
This commit is contained in:
Dr. Stephen Henson 2015-08-31 21:30:13 +01:00
parent cf170f558b
commit e3e571925c
11 changed files with 91 additions and 40 deletions

View file

@ -358,8 +358,13 @@ int crl_main(int argc, char **argv)
goto end;
}
if (badsig)
x->signature->data[x->signature->length - 1] ^= 0x1;
if (badsig) {
ASN1_BIT_STRING *sig;
unsigned char *psig;
X509_CRL_get0_signature(&sig, NULL, x);
psig = ASN1_STRING_data(sig);
psig[ASN1_STRING_length(sig) - 1] ^= 0x1;
}
if (outformat == FORMAT_ASN1)
i = (int)i2d_X509_CRL_bio(out, x);

View file

@ -63,6 +63,7 @@
#include <openssl/bn.h>
#include <openssl/objects.h>
#include <openssl/x509.h>
#include "internal/x509_int.h"
#include <openssl/x509v3.h>
#ifndef OPENSSL_NO_STDIO

View file

@ -61,6 +61,7 @@
#include <openssl/asn1t.h>
#include "asn1_locl.h"
#include <openssl/x509.h>
#include "internal/x509_int.h"
#include <openssl/x509v3.h>
static int X509_REVOKED_cmp(const X509_REVOKED *const *a,

View file

@ -105,3 +105,36 @@ struct X509_req_st {
ASN1_BIT_STRING *signature;
int references;
};
struct X509_crl_info_st {
ASN1_INTEGER *version;
X509_ALGOR *sig_alg;
X509_NAME *issuer;
ASN1_TIME *lastUpdate;
ASN1_TIME *nextUpdate;
STACK_OF(X509_REVOKED) *revoked;
STACK_OF(X509_EXTENSION) /* [0] */ *extensions;
ASN1_ENCODING enc;
};
struct X509_crl_st {
/* actual signature */
X509_CRL_INFO *crl;
X509_ALGOR *sig_alg;
ASN1_BIT_STRING *signature;
int references;
int flags;
/* Copies of various extensions */
AUTHORITY_KEYID *akid;
ISSUING_DIST_POINT *idp;
/* Convenient breakdown of IDP */
int idp_flags;
int idp_reasons;
/* CRL and base CRL numbers for delta processing */
ASN1_INTEGER *crl_number;
ASN1_INTEGER *base_crl_number;
unsigned char sha1_hash[SHA_DIGEST_LENGTH];
STACK_OF(GENERAL_NAMES) *issuers;
const X509_CRL_METHOD *meth;
void *meth_data;
};

View file

@ -71,6 +71,7 @@
#include <openssl/lhash.h>
#include <openssl/x509.h>
#include "internal/x509_int.h"
typedef struct lookup_dir_hashes_st {
unsigned long hash;

View file

@ -63,6 +63,7 @@
#include <openssl/objects.h>
#include <openssl/evp.h>
#include <openssl/x509.h>
#include "internal/x509_int.h"
#include <openssl/x509v3.h>
int X509_CRL_get_ext_count(X509_CRL *x)

View file

@ -60,6 +60,7 @@
#include "internal/cryptlib.h"
#include <openssl/lhash.h>
#include <openssl/x509.h>
#include "internal/x509_int.h"
#include <openssl/x509v3.h>
#include "x509_lcl.h"

View file

@ -69,6 +69,7 @@
#include <openssl/x509.h>
#include <openssl/x509v3.h>
#include <openssl/objects.h>
#include "internal/x509_int.h"
#include "x509_lcl.h"
/* CRL score values */

View file

@ -63,6 +63,7 @@
#include <openssl/objects.h>
#include <openssl/evp.h>
#include <openssl/x509.h>
#include "internal/x509_int.h"
int X509_CRL_set_version(X509_CRL *x, long version)
{
@ -137,6 +138,40 @@ void X509_CRL_up_ref(X509_CRL *crl)
CRYPTO_add(&crl->references, 1, CRYPTO_LOCK_X509_CRL);
}
long X509_CRL_get_version(X509_CRL *crl)
{
return ASN1_INTEGER_get(crl->crl->version);
}
ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl)
{
return crl->crl->lastUpdate;
}
ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl)
{
return crl->crl->nextUpdate;
}
X509_NAME *X509_CRL_get_issuer(X509_CRL *crl)
{
return crl->crl->issuer;
}
STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl)
{
return crl->crl->revoked;
}
void X509_CRL_get0_signature(ASN1_BIT_STRING **psig, X509_ALGOR **palg,
const X509_CRL *crl)
{
if (psig)
*psig = crl->signature;
if (palg)
*palg = crl->sig_alg;
}
int X509_REVOKED_set_revocationDate(X509_REVOKED *x, ASN1_TIME *tm)
{
ASN1_TIME *in;

View file

@ -63,6 +63,7 @@
#include "internal/cryptlib.h"
#include <openssl/conf.h>
#include <openssl/x509.h>
#include "internal/x509_int.h"
#include <openssl/x509v3.h>
static int v3_check_critical(char **value);

View file

@ -340,38 +340,7 @@ struct x509_revoked_st {
DECLARE_STACK_OF(X509_REVOKED)
typedef struct X509_crl_info_st {
ASN1_INTEGER *version;
X509_ALGOR *sig_alg;
X509_NAME *issuer;
ASN1_TIME *lastUpdate;
ASN1_TIME *nextUpdate;
STACK_OF(X509_REVOKED) *revoked;
STACK_OF(X509_EXTENSION) /* [0] */ *extensions;
ASN1_ENCODING enc;
} X509_CRL_INFO;
struct X509_crl_st {
/* actual signature */
X509_CRL_INFO *crl;
X509_ALGOR *sig_alg;
ASN1_BIT_STRING *signature;
int references;
int flags;
/* Copies of various extensions */
AUTHORITY_KEYID *akid;
ISSUING_DIST_POINT *idp;
/* Convenient breakdown of IDP */
int idp_flags;
int idp_reasons;
/* CRL and base CRL numbers for delta processing */
ASN1_INTEGER *crl_number;
ASN1_INTEGER *base_crl_number;
unsigned char sha1_hash[SHA_DIGEST_LENGTH];
STACK_OF(GENERAL_NAMES) *issuers;
const X509_CRL_METHOD *meth;
void *meth_data;
} /* X509_CRL */ ;
typedef struct X509_crl_info_st X509_CRL_INFO;
DECLARE_STACK_OF(X509_CRL)
@ -494,12 +463,6 @@ extern "C" {
# define X509_name_cmp(a,b) X509_NAME_cmp((a),(b))
# define X509_get_signature_type(x) EVP_PKEY_type(OBJ_obj2nid((x)->sig_alg->algorithm))
# define X509_CRL_get_version(x) ASN1_INTEGER_get((x)->crl->version)
# define X509_CRL_get_lastUpdate(x) ((x)->crl->lastUpdate)
# define X509_CRL_get_nextUpdate(x) ((x)->crl->nextUpdate)
# define X509_CRL_get_issuer(x) ((x)->crl->issuer)
# define X509_CRL_get_REVOKED(x) ((x)->crl->revoked)
void X509_CRL_set_default_method(const X509_CRL_METHOD *meth);
X509_CRL_METHOD *X509_CRL_METHOD_new(int (*crl_init) (X509_CRL *crl),
int (*crl_free) (X509_CRL *crl),
@ -834,6 +797,14 @@ int X509_CRL_set_nextUpdate(X509_CRL *x, const ASN1_TIME *tm);
int X509_CRL_sort(X509_CRL *crl);
void X509_CRL_up_ref(X509_CRL *crl);
long X509_CRL_get_version(X509_CRL *crl);
ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl);
ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl);
X509_NAME *X509_CRL_get_issuer(X509_CRL *crl);
STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl);
void X509_CRL_get0_signature(ASN1_BIT_STRING **psig, X509_ALGOR **palg,
const X509_CRL *crl);
int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial);
int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm);