Commit eb64730b authored by Richard Levitte's avatar Richard Levitte
Browse files

The majority of the OCSP code from CertCo.

parent 34a14882
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -163,7 +163,7 @@ SDIRS= \
	des rc2 rc4 rc5 idea bf cast \
	bn rsa dsa dh dso engine rijndael \
	buffer bio stack lhash rand err objects \
	evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp
	evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp

MAKEFILE= Makefile.ssl
MAKE=     make -f Makefile.ssl
+8 −0
Original line number Diff line number Diff line
@@ -106,6 +106,7 @@ static char *x509_usage[]={
" -fingerprint    - print the certificate fingerprint\n",
" -alias          - output certificate alias\n",
" -noout          - no certificate output\n",
" -ocspid         - print OCSP hash values for the subject name and public key\n",
" -trustout       - output a \"trusted\" certificate\n",
" -clrtrust       - clear all trusted purposes\n",
" -clrreject      - clear all rejected purposes\n",
@@ -163,6 +164,7 @@ int MAIN(int argc, char **argv)
	char *CAkeyfile=NULL,*CAserial=NULL;
	char *alias=NULL;
	int text=0,serial=0,hash=0,subject=0,issuer=0,startdate=0,enddate=0;
	int ocspid=0;
	int noout=0,sign_flag=0,CA_flag=0,CA_createserial=0,email=0;
	int trustout=0,clrtrust=0,clrreject=0,aliasout=0,clrext=0;
	int C=0;
@@ -412,6 +414,8 @@ int MAIN(int argc, char **argv)
			clrext = 1;
			}
#endif
		else if (strcmp(*argv,"-ocspid") == 0)
			ocspid= ++num;
		else if ((md_alg=EVP_get_digestbyname(*argv + 1)))
			{
			/* ok */
@@ -917,6 +921,10 @@ bad:
					}
				noout=1;
				}
			else if (ocspid == i)
				{
				X509_ocspid_print(out, x);
				}
			}
		}

+30 −0
Original line number Diff line number Diff line
@@ -956,6 +956,21 @@ void ASN1_STRING_TABLE_cleanup(void);
#define ASN1_F_D2I_NETSCAPE_SPKAC			 143
#define ASN1_F_D2I_NETSCAPE_SPKI			 144
#define ASN1_F_D2I_NOTICEREF				 268
#define ASN1_F_D2I_OCSP_BASICRESP			 293
#define ASN1_F_D2I_OCSP_CERTID				 294
#define ASN1_F_D2I_OCSP_CERTSTATUS			 295
#define ASN1_F_D2I_OCSP_CRLID				 296
#define ASN1_F_D2I_OCSP_ONEREQ				 297
#define ASN1_F_D2I_OCSP_REQINFO				 298
#define ASN1_F_D2I_OCSP_REQUEST				 299
#define ASN1_F_D2I_OCSP_RESPBYTES			 300
#define ASN1_F_D2I_OCSP_RESPDATA			 301
#define ASN1_F_D2I_OCSP_RESPID				 302
#define ASN1_F_D2I_OCSP_RESPONSE			 303
#define ASN1_F_D2I_OCSP_REVOKEDINFO			 304
#define ASN1_F_D2I_OCSP_SERVICELOC			 305
#define ASN1_F_D2I_OCSP_SIGNATURE			 306
#define ASN1_F_D2I_OCSP_SINGLERESP			 307
#define ASN1_F_D2I_OTHERNAME				 287
#define ASN1_F_D2I_PBE2PARAM				 262
#define ASN1_F_D2I_PBEPARAM				 249
@@ -1027,6 +1042,21 @@ void ASN1_STRING_TABLE_cleanup(void);
#define ASN1_F_NETSCAPE_SPKAC_NEW			 190
#define ASN1_F_NETSCAPE_SPKI_NEW			 191
#define ASN1_F_NOTICEREF_NEW				 272
#define ASN1_F_OCSP_BASICRESP_NEW			 308
#define ASN1_F_OCSP_CERTID_NEW				 309
#define ASN1_F_OCSP_CERTSTATUS_NEW			 310
#define ASN1_F_OCSP_CRLID_NEW				 311
#define ASN1_F_OCSP_ONEREQ_NEW				 312
#define ASN1_F_OCSP_REQINFO_NEW				 313
#define ASN1_F_OCSP_REQUEST_NEW				 314
#define ASN1_F_OCSP_RESPBYTES_NEW			 315
#define ASN1_F_OCSP_RESPDATA_NEW			 316
#define ASN1_F_OCSP_RESPID_NEW				 317
#define ASN1_F_OCSP_RESPONSE_NEW			 318
#define ASN1_F_OCSP_REVOKEDINFO_NEW			 319
#define ASN1_F_OCSP_SERVICELOC_NEW			 320
#define ASN1_F_OCSP_SIGNATURE_NEW			 321
#define ASN1_F_OCSP_SINGLERESP_NEW			 322
#define ASN1_F_OTHERNAME_NEW				 288
#define ASN1_F_PBE2PARAM_NEW				 264
#define ASN1_F_PBEPARAM_NEW				 251
+30 −0
Original line number Diff line number Diff line
@@ -141,6 +141,21 @@ static ERR_STRING_DATA ASN1_str_functs[]=
{ERR_PACK(0,ASN1_F_D2I_NETSCAPE_SPKAC,0),	"d2i_NETSCAPE_SPKAC"},
{ERR_PACK(0,ASN1_F_D2I_NETSCAPE_SPKI,0),	"d2i_NETSCAPE_SPKI"},
{ERR_PACK(0,ASN1_F_D2I_NOTICEREF,0),	"d2i_NOTICEREF"},
{ERR_PACK(0,ASN1_F_D2I_OCSP_BASICRESP,0),	"d2i_OCSP_BASICRESP"},
{ERR_PACK(0,ASN1_F_D2I_OCSP_CERTID,0),	"d2i_OCSP_CERTID"},
{ERR_PACK(0,ASN1_F_D2I_OCSP_CERTSTATUS,0),	"d2i_OCSP_CERTSTATUS"},
{ERR_PACK(0,ASN1_F_D2I_OCSP_CRLID,0),	"d2i_OCSP_CRLID"},
{ERR_PACK(0,ASN1_F_D2I_OCSP_ONEREQ,0),	"d2i_OCSP_ONEREQ"},
{ERR_PACK(0,ASN1_F_D2I_OCSP_REQINFO,0),	"d2i_OCSP_REQINFO"},
{ERR_PACK(0,ASN1_F_D2I_OCSP_REQUEST,0),	"d2i_OCSP_REQUEST"},
{ERR_PACK(0,ASN1_F_D2I_OCSP_RESPBYTES,0),	"d2i_OCSP_RESPBYTES"},
{ERR_PACK(0,ASN1_F_D2I_OCSP_RESPDATA,0),	"d2i_OCSP_RESPDATA"},
{ERR_PACK(0,ASN1_F_D2I_OCSP_RESPID,0),	"d2i_OCSP_RESPID"},
{ERR_PACK(0,ASN1_F_D2I_OCSP_RESPONSE,0),	"d2i_OCSP_RESPONSE"},
{ERR_PACK(0,ASN1_F_D2I_OCSP_REVOKEDINFO,0),	"d2i_OCSP_REVOKEDINFO"},
{ERR_PACK(0,ASN1_F_D2I_OCSP_SERVICELOC,0),	"d2i_OCSP_SERVICELOC"},
{ERR_PACK(0,ASN1_F_D2I_OCSP_SIGNATURE,0),	"d2i_OCSP_SIGNATURE"},
{ERR_PACK(0,ASN1_F_D2I_OCSP_SINGLERESP,0),	"d2i_OCSP_SINGLERESP"},
{ERR_PACK(0,ASN1_F_D2I_OTHERNAME,0),	"d2i_OTHERNAME"},
{ERR_PACK(0,ASN1_F_D2I_PBE2PARAM,0),	"d2i_PBE2PARAM"},
{ERR_PACK(0,ASN1_F_D2I_PBEPARAM,0),	"d2i_PBEPARAM"},
@@ -212,6 +227,21 @@ static ERR_STRING_DATA ASN1_str_functs[]=
{ERR_PACK(0,ASN1_F_NETSCAPE_SPKAC_NEW,0),	"NETSCAPE_SPKAC_new"},
{ERR_PACK(0,ASN1_F_NETSCAPE_SPKI_NEW,0),	"NETSCAPE_SPKI_new"},
{ERR_PACK(0,ASN1_F_NOTICEREF_NEW,0),	"NOTICEREF_new"},
{ERR_PACK(0,ASN1_F_OCSP_BASICRESP_NEW,0),	"OCSP_BASICRESP_new"},
{ERR_PACK(0,ASN1_F_OCSP_CERTID_NEW,0),	"OCSP_CERTID_new"},
{ERR_PACK(0,ASN1_F_OCSP_CERTSTATUS_NEW,0),	"OCSP_CERTSTATUS_new"},
{ERR_PACK(0,ASN1_F_OCSP_CRLID_NEW,0),	"OCSP_CRLID_new"},
{ERR_PACK(0,ASN1_F_OCSP_ONEREQ_NEW,0),	"OCSP_ONEREQ_new"},
{ERR_PACK(0,ASN1_F_OCSP_REQINFO_NEW,0),	"OCSP_REQINFO_new"},
{ERR_PACK(0,ASN1_F_OCSP_REQUEST_NEW,0),	"OCSP_REQUEST_new"},
{ERR_PACK(0,ASN1_F_OCSP_RESPBYTES_NEW,0),	"OCSP_RESPBYTES_new"},
{ERR_PACK(0,ASN1_F_OCSP_RESPDATA_NEW,0),	"OCSP_RESPDATA_new"},
{ERR_PACK(0,ASN1_F_OCSP_RESPID_NEW,0),	"OCSP_RESPID_new"},
{ERR_PACK(0,ASN1_F_OCSP_RESPONSE_NEW,0),	"OCSP_RESPONSE_new"},
{ERR_PACK(0,ASN1_F_OCSP_REVOKEDINFO_NEW,0),	"OCSP_REVOKEDINFO_new"},
{ERR_PACK(0,ASN1_F_OCSP_SERVICELOC_NEW,0),	"OCSP_SERVICELOC_new"},
{ERR_PACK(0,ASN1_F_OCSP_SIGNATURE_NEW,0),	"OCSP_SIGNATURE_new"},
{ERR_PACK(0,ASN1_F_OCSP_SINGLERESP_NEW,0),	"OCSP_SINGLERESP_new"},
{ERR_PACK(0,ASN1_F_OTHERNAME_NEW,0),	"OTHERNAME_new"},
{ERR_PACK(0,ASN1_F_PBE2PARAM_NEW,0),	"PBE2PARAM_new"},
{ERR_PACK(0,ASN1_F_PBEPARAM_NEW,0),	"PBEPARAM_new"},
+50 −0
Original line number Diff line number Diff line
@@ -282,6 +282,56 @@ err:
	return(ret);
	}

int X509_ocspid_print (BIO *bp, X509 *x)
	{
	unsigned char *der=NULL ;
	unsigned char *dertmp;
	int derlen;
	int i;
	SHA_CTX SHA1buf ;
	unsigned char SHA1md[SHA_DIGEST_LENGTH];

	/* display the hash of the subject as it would appear
	   in OCSP requests */
	if (BIO_printf(bp,"        Subject OCSP hash: ") <= 0)
		goto err;
	derlen = i2d_X509_NAME(x->cert_info->subject, NULL);
	if ((der = dertmp = (unsigned char *)OPENSSL_malloc (derlen)) == NULL)
		goto err;
	i2d_X509_NAME(x->cert_info->subject, &dertmp);

	SHA1_Init(&SHA1buf);
	SHA1_Update(&SHA1buf, der, derlen);
	SHA1_Final(SHA1md,&SHA1buf);
	for (i=0; i < SHA_DIGEST_LENGTH; i++)
		{
		if (BIO_printf(bp,"%02X",SHA1md[i]) <= 0) goto err;
		}
	OPENSSL_free (der);
	der=NULL;

	/* display the hash of the public key as it would appear
	   in OCSP requests */
	if (BIO_printf(bp,"\n        Public key OCSP hash: ") <= 0)
		goto err;

	SHA1_Init(&SHA1buf);
	SHA1_Update(&SHA1buf, x->cert_info->key->public_key->data,
		x->cert_info->key->public_key->length);
	SHA1_Final(SHA1md,&SHA1buf);
	for (i=0; i < SHA_DIGEST_LENGTH; i++)
		{
		if (BIO_printf(bp,"%02X",SHA1md[i]) <= 0)
			goto err;
		}
	BIO_printf(bp,"\n");

	return (1);
err:
	if (der != NULL) OPENSSL_free(der);
	return(0);
	}

int ASN1_STRING_print(BIO *bp, ASN1_STRING *v)
	{
	int i,n;
Loading