Kaidul

asdssadadsad

Dec 21st, 2014
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.74 KB | None | 0 0
  1. #include <jni.h>
  2. #include <android/log.h>
  3. #include <android/asset_manager.h>
  4. #include <android/asset_manager_jni.h>
  5. #include <openssl/ssl.h>
  6. #include <openssl/asn1.h>
  7. #include <openssl/bio.h>
  8. #include <openssl/x509.h>
  9. #include <openssl/x509_vfy.h>
  10. #include <openssl/pem.h>
  11. #include <openssl/x509v3.h>
  12. #include <openssl/err.h>
  13. #include <openssl/conf.h>
  14. #include <string.h>
  15. static int verify_certificate_hostname(X509 *cert, char *hostname) {
  16.   int                   extcount;
  17.   int           success = 0;
  18.   char                  name[256];
  19.   X509_NAME             *subj;
  20.   const char            *extstr;
  21.   CONF_VALUE            *nval;
  22.   X509_EXTENSION        *ext;
  23.   X509V3_EXT_METHOD     *meth;
  24.   STACK_OF(CONF_VALUE)  *val;
  25.   void          *ext_internal;
  26.  
  27.   if ((extcount = X509_get_ext_count(cert)) > 0) {
  28.     for (int i = 0; !success && i < extcount;  i++) {
  29.       ext = X509_get_ext(cert, i);
  30.       extstr = OBJ_nid2sn(OBJ_obj2nid(X509_EXTENSION_get_object(ext)));
  31.       if (!strcasecmp(extstr, "subjectAltName")) {
  32.         if (!(meth = X509V3_EXT_get(ext))) break;
  33.         const unsigned char *data = ext->value->data;
  34.     ext_internal = X509V3_EXT_d2i(ext);
  35.        
  36.     val = meth->i2v(meth, ext_internal, 0);
  37.         for (int j = 0;  j < sk_CONF_VALUE_num(val);  j++) {
  38.           nval = sk_CONF_VALUE_value(val, j);
  39.           if (!strcasecmp(nval->name, "DNS") && !strcasecmp(nval->value, hostname)) {
  40.             success = 1;
  41.             break;
  42.           }
  43.         }
  44.       }
  45.     }
  46.   }
  47.    
  48.   if (!success && (subj = X509_get_subject_name(cert)) && X509_NAME_get_text_by_NID(subj, NID_commonName, name, sizeof(name)) > 0) {
  49.     name[sizeof(name) - 1] = '\0';
  50.     if (!strcasecmp(name, hostname)) success = 1;
  51.   }
  52.    
  53.   return success;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment