| Index: openssl/apps/x509.c
|
| ===================================================================
|
| --- openssl/apps/x509.c (revision 105093)
|
| +++ openssl/apps/x509.c (working copy)
|
| @@ -99,7 +99,13 @@
|
| " -passin arg - private key password source\n",
|
| " -serial - print serial number value\n",
|
| " -subject_hash - print subject hash value\n",
|
| +#ifndef OPENSSL_NO_MD5
|
| +" -subject_hash_old - print old-style (MD5) subject hash value\n",
|
| +#endif
|
| " -issuer_hash - print issuer hash value\n",
|
| +#ifndef OPENSSL_NO_MD5
|
| +" -issuer_hash_old - print old-style (MD5) issuer hash value\n",
|
| +#endif
|
| " -hash - synonym for -subject_hash\n",
|
| " -subject - print subject DN\n",
|
| " -issuer - print issuer DN\n",
|
| @@ -179,6 +185,9 @@
|
| int text=0,serial=0,subject=0,issuer=0,startdate=0,enddate=0;
|
| int next_serial=0;
|
| int subject_hash=0,issuer_hash=0,ocspid=0;
|
| +#ifndef OPENSSL_NO_MD5
|
| + int subject_hash_old=0,issuer_hash_old=0;
|
| +#endif
|
| int noout=0,sign_flag=0,CA_flag=0,CA_createserial=0,email=0;
|
| int ocsp_uri=0;
|
| int trustout=0,clrtrust=0,clrreject=0,aliasout=0,clrext=0;
|
| @@ -190,7 +199,7 @@
|
| X509_REQ *rq=NULL;
|
| int fingerprint=0;
|
| char buf[256];
|
| - const EVP_MD *md_alg,*digest=EVP_sha1();
|
| + const EVP_MD *md_alg,*digest=NULL;
|
| CONF *extconf = NULL;
|
| char *extsect = NULL, *extfile = NULL, *passin = NULL, *passargin = NULL;
|
| int need_rand = 0;
|
| @@ -225,7 +234,7 @@
|
|
|
| ctx=X509_STORE_new();
|
| if (ctx == NULL) goto end;
|
| - X509_STORE_set_verify_cb_func(ctx,callb);
|
| + X509_STORE_set_verify_cb(ctx,callb);
|
|
|
| argc--;
|
| argv++;
|
| @@ -397,8 +406,16 @@
|
| else if (strcmp(*argv,"-hash") == 0
|
| || strcmp(*argv,"-subject_hash") == 0)
|
| subject_hash= ++num;
|
| +#ifndef OPENSSL_NO_MD5
|
| + else if (strcmp(*argv,"-subject_hash_old") == 0)
|
| + subject_hash_old= ++num;
|
| +#endif
|
| else if (strcmp(*argv,"-issuer_hash") == 0)
|
| issuer_hash= ++num;
|
| +#ifndef OPENSSL_NO_MD5
|
| + else if (strcmp(*argv,"-issuer_hash_old") == 0)
|
| + issuer_hash_old= ++num;
|
| +#endif
|
| else if (strcmp(*argv,"-subject") == 0)
|
| subject= ++num;
|
| else if (strcmp(*argv,"-issuer") == 0)
|
| @@ -539,7 +556,6 @@
|
| if (reqfile)
|
| {
|
| EVP_PKEY *pkey;
|
| - X509_CINF *ci;
|
| BIO *in;
|
|
|
| if (!sign_flag && !CA_flag)
|
| @@ -607,7 +623,6 @@
|
| print_name(bio_err, "subject=", X509_REQ_get_subject_name(req), nmflag);
|
|
|
| if ((x=X509_new()) == NULL) goto end;
|
| - ci=x->cert_info;
|
|
|
| if (sno == NULL)
|
| {
|
| @@ -626,7 +641,7 @@
|
| if (!X509_set_subject_name(x,req->req_info->subject)) goto end;
|
|
|
| X509_gmtime_adj(X509_get_notBefore(x),0);
|
| - X509_gmtime_adj(X509_get_notAfter(x),(long)60*60*24*days);
|
| + X509_time_adj_ex(X509_get_notAfter(x),days, 0, NULL);
|
|
|
| pkey = X509_REQ_get_pubkey(req);
|
| X509_set_pubkey(x,pkey);
|
| @@ -738,13 +753,14 @@
|
| else if ((email == i) || (ocsp_uri == i))
|
| {
|
| int j;
|
| - STACK *emlst;
|
| + STACK_OF(OPENSSL_STRING) *emlst;
|
| if (email == i)
|
| emlst = X509_get1_email(x);
|
| else
|
| emlst = X509_get1_ocsp(x);
|
| - for (j = 0; j < sk_num(emlst); j++)
|
| - BIO_printf(STDout, "%s\n", sk_value(emlst, j));
|
| + for (j = 0; j < sk_OPENSSL_STRING_num(emlst); j++)
|
| + BIO_printf(STDout, "%s\n",
|
| + sk_OPENSSL_STRING_value(emlst, j));
|
| X509_email_free(emlst);
|
| }
|
| else if (aliasout == i)
|
| @@ -758,10 +774,22 @@
|
| {
|
| BIO_printf(STDout,"%08lx\n",X509_subject_name_hash(x));
|
| }
|
| +#ifndef OPENSSL_NO_MD5
|
| + else if (subject_hash_old == i)
|
| + {
|
| + BIO_printf(STDout,"%08lx\n",X509_subject_name_hash_old(x));
|
| + }
|
| +#endif
|
| else if (issuer_hash == i)
|
| {
|
| BIO_printf(STDout,"%08lx\n",X509_issuer_name_hash(x));
|
| }
|
| +#ifndef OPENSSL_NO_MD5
|
| + else if (issuer_hash_old == i)
|
| + {
|
| + BIO_printf(STDout,"%08lx\n",X509_issuer_name_hash_old(x));
|
| + }
|
| +#endif
|
| else if (pprint == i)
|
| {
|
| X509_PURPOSE *ptmp;
|
| @@ -892,14 +920,18 @@
|
| int j;
|
| unsigned int n;
|
| unsigned char md[EVP_MAX_MD_SIZE];
|
| + const EVP_MD *fdig = digest;
|
|
|
| - if (!X509_digest(x,digest,md,&n))
|
| + if (!fdig)
|
| + fdig = EVP_sha1();
|
| +
|
| + if (!X509_digest(x,fdig,md,&n))
|
| {
|
| BIO_printf(bio_err,"out of memory\n");
|
| goto end;
|
| }
|
| BIO_printf(STDout,"%s Fingerprint=",
|
| - OBJ_nid2sn(EVP_MD_type(digest)));
|
| + OBJ_nid2sn(EVP_MD_type(fdig)));
|
| for (j=0; j<(int)n; j++)
|
| {
|
| BIO_printf(STDout,"%02X%c",md[j],
|
| @@ -919,14 +951,6 @@
|
| passin, e, "Private key");
|
| if (Upkey == NULL) goto end;
|
| }
|
| -#ifndef OPENSSL_NO_DSA
|
| - if (Upkey->type == EVP_PKEY_DSA)
|
| - digest=EVP_dss1();
|
| -#endif
|
| -#ifndef OPENSSL_NO_ECDSA
|
| - if (Upkey->type == EVP_PKEY_EC)
|
| - digest=EVP_ecdsa();
|
| -#endif
|
|
|
| assert(need_rand);
|
| if (!sign(x,Upkey,days,clrext,digest,
|
| @@ -943,14 +967,6 @@
|
| "CA Private Key");
|
| if (CApkey == NULL) goto end;
|
| }
|
| -#ifndef OPENSSL_NO_DSA
|
| - if (CApkey->type == EVP_PKEY_DSA)
|
| - digest=EVP_dss1();
|
| -#endif
|
| -#ifndef OPENSSL_NO_ECDSA
|
| - if (CApkey->type == EVP_PKEY_EC)
|
| - digest = EVP_ecdsa();
|
| -#endif
|
|
|
| assert(need_rand);
|
| if (!x509_certify(ctx,CAfile,digest,x,xca,
|
| @@ -971,22 +987,13 @@
|
| else
|
| {
|
| pk=load_key(bio_err,
|
| - keyfile, FORMAT_PEM, 0,
|
| + keyfile, keyformat, 0,
|
| passin, e, "request key");
|
| if (pk == NULL) goto end;
|
| }
|
|
|
| BIO_printf(bio_err,"Generating certificate request\n");
|
|
|
| -#ifndef OPENSSL_NO_DSA
|
| - if (pk->type == EVP_PKEY_DSA)
|
| - digest=EVP_dss1();
|
| -#endif
|
| -#ifndef OPENSSL_NO_ECDSA
|
| - if (pk->type == EVP_PKEY_EC)
|
| - digest=EVP_ecdsa();
|
| -#endif
|
| -
|
| rq=X509_to_X509_REQ(x,pk,digest);
|
| EVP_PKEY_free(pk);
|
| if (rq == NULL)
|
| @@ -1040,16 +1047,15 @@
|
| }
|
| else if (outformat == FORMAT_NETSCAPE)
|
| {
|
| - ASN1_HEADER ah;
|
| - ASN1_OCTET_STRING os;
|
| + NETSCAPE_X509 nx;
|
| + ASN1_OCTET_STRING hdr;
|
|
|
| - os.data=(unsigned char *)NETSCAPE_CERT_HDR;
|
| - os.length=strlen(NETSCAPE_CERT_HDR);
|
| - ah.header= &os;
|
| - ah.data=(char *)x;
|
| - ah.meth=X509_asn1_meth();
|
| + hdr.data=(unsigned char *)NETSCAPE_CERT_HDR;
|
| + hdr.length=strlen(NETSCAPE_CERT_HDR);
|
| + nx.header= &hdr;
|
| + nx.cert=x;
|
|
|
| - i=ASN1_i2d_bio_of(ASN1_HEADER,i2d_ASN1_HEADER,out,&ah);
|
| + i=ASN1_item_i2d_bio(ASN1_ITEM_rptr(NETSCAPE_X509),out,&nx);
|
| }
|
| else {
|
| BIO_printf(bio_err,"bad output format specified for outfile\n");
|
| @@ -1168,7 +1174,7 @@
|
| goto end;
|
|
|
| /* hardwired expired */
|
| - if (X509_gmtime_adj(X509_get_notAfter(x),(long)60*60*24*days) == NULL)
|
| + if (X509_time_adj_ex(X509_get_notAfter(x),days, 0, NULL) == NULL)
|
| goto end;
|
|
|
| if (clrext)
|
|
|