Loading Makefile.org +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading apps/x509.c +8 −0 Original line number Diff line number Diff line Loading @@ -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", Loading Loading @@ -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; Loading Loading @@ -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 */ Loading Loading @@ -917,6 +921,10 @@ bad: } noout=1; } else if (ocspid == i) { X509_ocspid_print(out, x); } } } Loading crypto/asn1/asn1.h +30 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading crypto/asn1/asn1_err.c +30 −0 Original line number Diff line number Diff line Loading @@ -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"}, Loading Loading @@ -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"}, Loading crypto/asn1/t_x509.c +50 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
Makefile.org +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
apps/x509.c +8 −0 Original line number Diff line number Diff line Loading @@ -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", Loading Loading @@ -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; Loading Loading @@ -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 */ Loading Loading @@ -917,6 +921,10 @@ bad: } noout=1; } else if (ocspid == i) { X509_ocspid_print(out, x); } } } Loading
crypto/asn1/asn1.h +30 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading
crypto/asn1/asn1_err.c +30 −0 Original line number Diff line number Diff line Loading @@ -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"}, Loading Loading @@ -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"}, Loading
crypto/asn1/t_x509.c +50 −0 Original line number Diff line number Diff line Loading @@ -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