break;   case ASN1_OP_I2D_PRE: old_cmp=sk_X509_REVOKED_set_cmp_func(a->revoked,X509_REVOKED_seq_cmp); sk_X509_REVOKED_sort(a->revoked); sk_X509_REVOKED_set_cmp_func(a->revoked,old_cmp);
ASN1_SEQUENCE(X509_REVOKED) = {	ASN1_SIMPLE(X509_REVOKED,serialNumber, ASN1_INTEGER),	ASN1_SIMPLE(X509_REVOKED,revocationDate, ASN1_TIME),	ASN1_SEQUENCE_OF_OPT(X509_REVOKED,extensions, X509_EXTENSION)} ASN1_SEQUENCE_END(X509_REVOKED)/* The X509_CRL_INFO structure needs a bit of customisation. This is actually * mirroring the old behaviour: its purpose is to allow the use of * sk_X509_REVOKED_find to lookup revoked certificates. Unfortunately * this will zap the original order and the signature so we keep a copy * of the original positions and reorder appropriately before encoding. * * Might want to see if there's a better way of doing this later... */static int crl_inf_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it){	X509_CRL_INFO *a = (X509_CRL_INFO *)*pval;	int i;	int (*old_cmp)(const X509_REVOKED * const *,			const X509_REVOKED * const *);	if(!a || !a->revoked) return 1;	switch(operation) {		/* Save original order */		case ASN1_OP_D2I_POST:		for (i=0; i<sk_X509_REVOKED_num(a->revoked); i++)			sk_X509_REVOKED_value(a->revoked,i)->sequence=i;		sk_X509_REVOKED_set_cmp_func(a->revoked,X509_REVOKED_cmp);		break;		/* Restore original order */		case ASN1_OP_I2D_PRE:		old_cmp=sk_X509_REVOKED_set_cmp_func(a->revoked,X509_REVOKED_seq_cmp);		sk_X509_REVOKED_sort(a->revoked);		sk_X509_REVOKED_set_cmp_func(a->revoked,old_cmp);		break;	}	return 1;}