/* * Gets X509v3 extensions as array of X509Ext objects */ static VALUE ossl_x509crl_get_extensions(VALUE self) { X509_CRL *crl; int count, i; X509_EXTENSION *ext; VALUE ary; GetX509CRL(self, crl); count = X509_CRL_get_ext_count(crl); if (count < 0) { OSSL_Debug("count < 0???"); return rb_ary_new(); } ary = rb_ary_new2(count); for (i=0; i<count; i++) { ext = X509_CRL_get_ext(crl, i); /* NO DUP - don't free! */ rb_ary_push(ary, ossl_x509ext_new(ext)); } return ary; }
int X509_CRL_print(BIO *out, X509_CRL *x) { char buf[256]; unsigned char *s; STACK_OF(X509_REVOKED) *rev; X509_REVOKED *r; long l; int i, j, n; BIO_printf(out, "Certificate Revocation List (CRL):\n"); l = X509_CRL_get_version(x); BIO_printf(out, "%8sVersion %lu (0x%lx)\n", "", l+1, l); i = OBJ_obj2nid(x->sig_alg->algorithm); BIO_printf(out, "%8sSignature Algorithm: %s\n", "", (i == NID_undef) ? "NONE" : OBJ_nid2ln(i)); X509_NAME_oneline(X509_CRL_get_issuer(x),buf,256); BIO_printf(out,"%8sIssuer: %s\n","",buf); BIO_printf(out,"%8sLast Update: ",""); ASN1_TIME_print(out,X509_CRL_get_lastUpdate(x)); BIO_printf(out,"\n%8sNext Update: ",""); if (X509_CRL_get_nextUpdate(x)) ASN1_TIME_print(out,X509_CRL_get_nextUpdate(x)); else BIO_printf(out,"NONE"); BIO_printf(out,"\n"); n=X509_CRL_get_ext_count(x); if (n > 0) { BIO_printf(out,"%8sCRL extensions:\n",""); for (i=0; i<n; i++) ext_print(out, X509_CRL_get_ext(x, i)); } rev = X509_CRL_get_REVOKED(x); if(sk_X509_REVOKED_num(rev)) BIO_printf(out, "Revoked Certificates:\n"); else BIO_printf(out, "No Revoked Certificates.\n"); for(i = 0; i < sk_X509_REVOKED_num(rev); i++) { r = sk_X509_REVOKED_value(rev, i); BIO_printf(out," Serial Number: "); i2a_ASN1_INTEGER(out,r->serialNumber); BIO_printf(out,"\n Revocation Date: ",""); ASN1_TIME_print(out,r->revocationDate); BIO_printf(out,"\n"); for(j = 0; j < X509_REVOKED_get_ext_count(r); j++) ext_print(out, X509_REVOKED_get_ext(r, j)); } i=OBJ_obj2nid(x->sig_alg->algorithm); BIO_printf(out," Signature Algorithm: %s", (i == NID_undef)?"UNKNOWN":OBJ_nid2ln(i)); s = x->signature->data; n = x->signature->length; for (i=0; i<n; i++, s++) { if ((i%18) == 0) BIO_write(out,"\n ",9); BIO_printf(out,"%02x%s",*s, ((i+1) == n)?"":":"); } BIO_write(out,"\n",1); return 1; }