From f47a446e87f9cd0d0314fe28aac4503eec98e06a Mon Sep 17 00:00:00 2001
From: neeserg <n.parajuli@student.unimelb.edu.au>
Date: Thu, 24 May 2018 13:39:54 +1000
Subject: [PATCH] done everything but csv

---
 .DS_Store        | Bin 8196 -> 0 bytes
 certexample      | Bin 15212 -> 14776 bytes
 certexample.c    | 226 ++----------------------------------
 headers.h        |  29 +++++
 helper_checker.c | 296 +++++++++++++++++++++++++++++++++++++++++++++--
 5 files changed, 329 insertions(+), 222 deletions(-)
 delete mode 100644 .DS_Store
 create mode 100644 headers.h

diff --git a/.DS_Store b/.DS_Store
deleted file mode 100644
index d5e0a6428dc8765cd85a6dbeeffa32ba01fd23f1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 8196
zcmZQzU|@7AO)+F(kYHe7;9!8z0^AH(0Z1N%F(jFwA}k>D7#IW?7;+d=8R8j|8B!UF
zpmL+sXb6mkz-S1JhQMeDjE2DA3IRrlb2xC+`w-btax?@+LtsRP0H}OWfVAxy9H4Xq
zga%15FfuTJy8w&~44^ImIE)y<{Qw4#97rpO25AM+Agv6HAQspRuvP{}s8&XBHw2_l
z0BR0cI|C!wW{@~oI|C!wW(EdEh;{}>sLhPf9ttBwI|Cy`I|C!wcCeA7#ApbNh5%X!
zfU*w{Loq`lLoP!BO8>otp*X3$xF9JfKZ${X;Z#yVPG)h5fx&e~CT12^Hg*mUE)FhU
zuGrv={PN(E#FEltr^KRY5HBFHBqIsR4$05YfwL2n!ZK6K;{`;V^Ycm)GxJi5K+1zN
zQ&N)>i(<kv^HTE5o$^cbQi{RmKqWXhI5{}u1thDhbq$RzbQFwCO=@)%s?98nbrejD
z&1!2oImA^BZ9NlmE32w&YU^e}d<ZKj82BN4I60evfdQwFbBfEHAwFiB1oQC?n2$NR
zxFtP2y}059gvv5g%l!*VGV}9_!%~ZiGxPJ}1^A0I^2<Gw^Ya3VQbF?J$@w{@xp~F$
z0)okjImx9ti6yCyIXS_ZRjI`hC8-r9AXZdyeo=`tSYbqFa(*62EM7pMv^X^=H7Bto
zvn<smu_U!vfRS@GkEpDYnzn(dm7VhyUOs*SE+H<F@UqO}%%q&u(DKZbl8ng2;^fr4
zl+3*JsLYhqypqhc%+w-IK}H?Uki5j))GK1*5(1J^k}|k-aR?}LM3g3F7M5m~R6^{K
zmsI2w*vb);l30@Jo1X$QF$F9mDKDwY!4VA-cP>gzEJ;ndBEZMbtF9r*6;hm8l`4?P
z!3h@8(dFU_$<EA65h&(_h!`4iNrvVmCZ*;Gq;PV86`7fHNrsm}LQ=pRDrhalB^i;N
zpPQSSS5nN$0kPIW(uqUh1V<dmVxPp~690nKJdoYu5@Ig$l9G`iamSRD)D#X54rK=o
zNVJ2!uk2s|;c+r>Fi0}!F*q=IFvKvVG88aWGW0O?G4wOcW>~_ohG7%K9){x#Cm2pM
zoME`gaEsv)!wZH_44)akGJIqB&&a{Z$;i#f!zjt9#Hh@u!f3!~$!N#u!05>6#OTc!
zz!=0B%oxHL%b3iV%9zHO&RD=$!C1vu%~-?O%Gk%)&p3f`CgUu|IgE1|*D!8n+|PJ`
z@gU<N#?y=!7;i$H#{{k77<?dn7|D2xK+1*YRi;R6DObwH)op-M?oA$0aupO377>+G
z*3dOFw{d_+D_T4vrzdbSf}|60`hlenaAcw;NHK8<NhxVASzHM_G&3(HwSohb69m|=
zNQz5{$ty@n34jt32bim(DkUYrB(Rl(1C&W5xwNEoI0X_p1en2GDSa+O4uKR-0ah@V
z%Y@5}Q=phrfCbEzvgESn5b)*{U;`UvE6v3vz`)4~=5VS?adB{xo)8x?tY+B7aE#$J
z!$pQ`4EGowGkjq9$;ima&M3$z&M3hs%_zet$EePz$*9e!!>G$>#%RH4#c0iF!|2NB
z#^}N5$>_}(!WhaJ&KSWM#hA>P0#1sVj75yajHQfaj1`QHjLnQK@FY2raTeoz#ubpH
z22X$<5I&4#T!}9MmIW8(<>cq3gBy1+Eu-`x4gqF}+ay5!e^&+uT;u-`Rior+2#kin
zunYl47MEZbCp_ggsILv`PbWaV4{D%*y5o$XemO)RNC~KG59&{VXlQpFtN^4HBnIw^
XGcquMv<}=rz-awHTK_}S@kpisyFu$L

diff --git a/certexample b/certexample
index 846f93a4a6f291f1bcb633c3917453db801a64b4..2ea29dbca7ad1eaeebd9e98a82c350f58bed7196 100755
GIT binary patch
literal 14776
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

literal 15212
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
SX$hXcj8ClqPi8{$Ap-y;KtTln

diff --git a/certexample.c b/certexample.c
index fdda0bf..c329938 100644
--- a/certexample.c
+++ b/certexample.c
@@ -2,234 +2,32 @@
     Example certifcate code
     gcc -o certexample certexample.c -lssl -lcrypto
 */
-#include <openssl/x509.h>
-#include <openssl/x509v3.h>
-#include <openssl/bio.h>
-#include <openssl/pem.h>
-#include <openssl/err.h>
-#include <openssl/rsa.h>
-#include <openssl/evp.h>
-#include <stdio.h>
-#include <string.h>
 
 
-int check_san_valid(X509* cert, char* URL, int in_host);
-int check_if_url_valid(char* URL, char* domain);
-int check_name_valid(X509* cert,  char* URL);
-void printTime(X509* cert);
-int check_public_key(X509 *cert);
+#include "headers.h"
+
 
 int main()
 {
+ char* filename = "./sample_certs/testseven.crt";
+ char* url = "www.example.com";
 
-    char* URL = "mega.google.com";
-
-    const char test_cert_example[] = "./sample_certs/testtwo.crt";
-    BIO *certificate_bio = NULL;
-    X509 *cert = NULL;
-    X509_CINF *cert_inf = NULL;
-    STACK_OF(X509_EXTENSION) * ext_list;
-
-    //initialise openSSL
-    OpenSSL_add_all_algorithms();
-    ERR_load_BIO_strings();
-    ERR_load_crypto_strings();
-
-    //create BIO object to read certificate
-    certificate_bio = BIO_new(BIO_s_file());
-
-    //Read certificate into BIO
-    if (!(BIO_read_filename(certificate_bio, test_cert_example)))
-    {
-        fprintf(stderr, "Error in reading cert BIO filename");
-        exit(EXIT_FAILURE);
-    }
-    if (!(cert = PEM_read_bio_X509(certificate_bio, NULL, 0, NULL)))
-    {
-        fprintf(stderr, "Error in loading certificate");
-        exit(EXIT_FAILURE);
-    }
-
-    //cert contains the x509 certificate and can be used to analyse the certificate
-    int in_host = check_name_valid(cert,  URL);
-
+ if (validate_certificate(filename, url))
+ {
+ 	printf("VALID\n");
+ }
 
-    //List of extensions available at https://www.openssl.org/docs/man1.1.0/crypto/X509_REVOKED_get0_extensions.html
-    //Need to check extension exists and is not null
-    if (check_san_valid(cert,URL, in_host))
-    {
-      printf("valid\n");
-    }
-
-    else{
-      printf("invalid\n");
-    }
-
-    printTime(cert);
-    check_public_key(cert);
-
-    //*********************
-    // End of Example code
-    //*********************
-
-    X509_free(cert);
-    BIO_free_all(certificate_bio);
-    exit(0);
+ else{
+ 	printf("INVALID\n");
+ }
+    
 
 }
 
 
-void printTime(X509* cert){
-  ASN1_TIME *after = X509_get_notBefore(cert);
-
-  int day;
-  int sec;
-
-  ASN1_TIME_diff(&day, &sec, after, NULL);
-
-  printf("%d -- %d\n", day, sec);
-
-  BUF_MEM *bptr = NULL;
-    char *buf = NULL;
-
-    BIO *bio = BIO_new(BIO_s_mem());
-    if (!ASN1_TIME_print(bio, after))
-    {
-        fprintf(stderr, "Error in reading extensions");
-    }
-    BIO_flush(bio);
-    BIO_get_mem_ptr(bio, &bptr);
-
-    //bptr->data is not NULL terminated - add null character
-    buf = (char *)malloc((bptr->length + 1) * sizeof(char));
-    memcpy(buf, bptr->data, bptr->length);
-    buf[bptr->length] = '\0';
-
-    printf("%s\n", buf);
-
-    BIO_free_all(bio);
-    free(buf);
-
-
-    ASN1_TIME *tm;
- time_t t;
- BIO *b;
- t = time(NULL);
- tm = ASN1_TIME_adj(NULL, t, 0, 0);
- b = BIO_new_fp(stdout, BIO_NOCLOSE);
- ASN1_TIME_print(b, tm);
- ASN1_STRING_free(tm);
- BIO_free(b);
-
-}
-
-int check_name_valid(X509* cert,  char* URL){
-    X509_NAME *cert_issuer = X509_get_subject_name(cert);
-    char subj_cn[256] = "Issuer CN NOT FOUND";
-    X509_NAME_get_text_by_NID(cert_issuer, NID_commonName, subj_cn, 256);
-    if (check_if_url_valid(URL, subj_cn))
-    {
-      return 1;
-    }
-
-    return 0;
-}
-
-int check_san_valid(X509* cert,  char* URL, int in_host){
-    if (in_host){
-      return 1;
-    }
-    X509_EXTENSION *ex = X509_get_ext(cert, X509_get_ext_by_NID(cert, NID_subject_alt_name, -1));
-    if (ex == NULL)
-    {
-        return 0;
-    }
-    ASN1_OBJECT *obj = X509_EXTENSION_get_object(ex);
-    char buff[2048];
-    OBJ_obj2txt(buff, 2048, obj, 0);
-    printf("Extension:%s\n", buff);
-
-    BUF_MEM *bptr = NULL;
-    char *buf = NULL;
-
-    BIO *bio = BIO_new(BIO_s_mem());
-    if (!X509V3_EXT_print(bio, ex, 0, 0))
-    {
-        fprintf(stderr, "Error in reading extensions");
-    }
-    BIO_flush(bio);
-    BIO_get_mem_ptr(bio, &bptr);
-
-    //bptr->data is not NULL terminated - add null character
-    buf = (char *)malloc((bptr->length + 1) * sizeof(char));
-    memcpy(buf, bptr->data, bptr->length);
-    buf[bptr->length] = '\0';
-
-    //Can print or parse value
-    char *tok = strtok(buf, ", ");
-    while (tok !=NULL){
-    printf("%s\n", tok);
-    if (check_if_url_valid(URL, tok+4)){
-      BIO_free_all(bio);
-      free(buf);
-      return 1;
-    }
-    tok = strtok(NULL, ", ");
-
-  }
-
-    BIO_free_all(bio);
-    free(buf);
-
-    return 0;
-}
-
-
-
-
-
-
-int check_if_url_valid(char* URL, char* domain){
-if (domain[0] == '*'){
-  char* domain_1 = domain+1;
-  char *sub_url = strstr(URL, domain_1);
-
-  if (sub_url == NULL)
-  {
-    return 0;
-  }
-
-  else{
-    return (strcmp(sub_url, domain_1) == 0);
-  }
-
-}
-else
-{
-  return (strcmp(URL, domain) == 0);
-
-
-}
-
-return 0;
-
-
-}
 
 
 
 
-int check_public_key(X509 *cert){
-  EVP_PKEY *key = X509_get_pubkey(cert);
-  RSA *rsa = NULL;
 
-  if ((rsa = EVP_PKEY_get1_RSA(key)) == NULL)
-  {
-      return 0;
-  }
-   if(8*RSA_size(rsa)==2048){
-    return 1;
-   }
 
-  return 1;
-}
\ No newline at end of file
diff --git a/headers.h b/headers.h
new file mode 100644
index 0000000..41777a0
--- /dev/null
+++ b/headers.h
@@ -0,0 +1,29 @@
+
+#ifndef HEADER
+#define HEADER
+
+
+#include <openssl/x509.h>
+#include <openssl/x509v3.h>
+#include <openssl/bio.h>
+#include <openssl/pem.h>
+#include <openssl/err.h>
+#include <openssl/rsa.h>
+#include <openssl/evp.h>
+#include <stdio.h>
+#include <string.h>
+
+
+
+X509 *load_cert(char * filename);
+int check_san_valid(X509* cert, char* URL, int in_host);
+int check_if_url_valid(char* URL, char* domain);
+int check_name_valid(X509* cert,  char* URL);
+int check_time(X509* cert);
+int check_public_key(X509 *cert);
+int check_constraint(X509 *cert);
+int check_ext_key(X509 *cert);
+int validate_certificate(char* filename, char* URL);
+
+
+#endif
\ No newline at end of file
diff --git a/helper_checker.c b/helper_checker.c
index a9d6b98..1e1d09f 100644
--- a/helper_checker.c
+++ b/helper_checker.c
@@ -1,14 +1,294 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
+#include "headers.h"
 
-int check_if_url_valid(char* URL, char* domain);
+int validate_certificate(char* filename, char* URL){
+     X509* cert = load_cert(filename);
 
+     int in_host = check_name_valid(cert,  URL);
+     if (!check_san_valid(cert, URL, in_host))
+     {
+        printf("SAN \n");
+        X509_free(cert);
+        return 0;
+     }
 
-int main(int argc, char const *argv[])
+     if (!check_time(cert))
+     {
+        printf("time\n");
+        X509_free(cert);
+        return 0;
+     }
+
+     if (!check_public_key(cert))
+     {
+        printf("PKEY\n");
+        X509_free(cert);
+        return 0;
+     }
+
+     if (!check_constraint(cert))
+     {
+        printf("CONSTRAINTS\n");
+        X509_free(cert);
+        return 0;
+     }
+
+     if (!check_ext_key(cert))
+     {
+        printf("ext key\n");
+        X509_free(cert);
+        return 0;
+     }
+
+     X509_free(cert);
+     return 1;
+
+}
+
+X509 *load_cert(char * filename){
+    BIO *certificate_bio = NULL;
+    X509 *cert = NULL;
+    X509_CINF *cert_inf = NULL;
+    STACK_OF(X509_EXTENSION) * ext_list;
+
+    //initialise openSSL
+    OpenSSL_add_all_algorithms();
+    ERR_load_BIO_strings();
+    ERR_load_crypto_strings();
+
+    //create BIO object to read certificate
+    certificate_bio = BIO_new(BIO_s_file());
+
+    //Read certificate into BIO
+    if (!(BIO_read_filename(certificate_bio, filename)))
+    {
+        fprintf(stderr, "Error in reading cert BIO filename");
+        return NULL;
+    }
+    if (!(cert = PEM_read_bio_X509(certificate_bio, NULL, 0, NULL)))
+    {
+        fprintf(stderr, "Error in loading certificate");
+        return NULL;
+    }
+
+   
+    BIO_free_all(certificate_bio);
+    return cert;
+}
+
+
+
+
+
+int check_name_valid(X509* cert,  char* URL){
+    X509_NAME *cert_issuer = X509_get_subject_name(cert);
+    char subj_cn[256] = "Issuer CN NOT FOUND";
+    X509_NAME_get_text_by_NID(cert_issuer, NID_commonName, subj_cn, 256);
+    if (check_if_url_valid(URL, subj_cn))
+    {
+      return 1;
+    }
+
+    return 0;
+}
+
+
+
+
+
+int check_san_valid(X509* cert,  char* URL, int in_host){
+    if (in_host){
+      return 1;
+    }
+    X509_EXTENSION *ex = X509_get_ext(cert, X509_get_ext_by_NID(cert, NID_subject_alt_name, -1));
+    if (ex == NULL)
+    {
+        return 0;
+    }
+    BUF_MEM *bptr = NULL;
+    char *buf = NULL;
+
+    BIO *bio = BIO_new(BIO_s_mem());
+    if (!X509V3_EXT_print(bio, ex, 0, 0))
+    {
+        fprintf(stderr, "Error in reading extensions");
+    }
+    BIO_flush(bio);
+    BIO_get_mem_ptr(bio, &bptr);
+
+    //bptr->data is not NULL terminated - add null character
+    buf = (char *)malloc((bptr->length + 1) * sizeof(char));
+    memcpy(buf, bptr->data, bptr->length);
+    buf[bptr->length] = '\0';
+    printf("%s\n", buf);
+
+    //Can print or parse value
+    char *tok = strtok(buf, ", ");
+    while (tok !=NULL){
+    if (check_if_url_valid(URL, tok+4)){
+      BIO_free_all(bio);
+      free(buf);
+      return 1;
+    }
+    tok = strtok(NULL, ", ");
+
+  }
+
+    BIO_free_all(bio);
+    free(buf);
+
+    return 0;
+}
+
+
+int check_if_url_valid(char* URL, char* domain){
+if (domain[0] == '*'){
+  char* domain_1 = domain+1;
+  char *sub_url = strstr(URL, domain_1);
+
+  if (sub_url == NULL)
+  {
+    return 0;
+  }
+
+  else{
+    return (strcmp(sub_url, domain_1) == 0);
+  }
+
+}
+else
 {
-	int m =  check_if_url_valid("www.google.com.au", "google.com");
-	printf("%d\n", m);
-	return 0;
+  return (strcmp(URL, domain) == 0);
+
+
+}
+
+return 0;
+
+
+}
+
+
+
+
+
+
+
+
+int check_time(X509* cert){
+  ASN1_TIME *after = X509_get_notAfter(cert);
+  if (after == NULL)
+  {
+   return 0;
+  }
+
+  int day;
+  int sec;
+
+  ASN1_TIME_diff(&day, &sec, NULL, after);
+
+  if (day < 0 || sec <0)
+  {
+   return 0;
+  }
+
+  ASN1_TIME *before = X509_get_notBefore(cert);
+  if (before == NULL)
+  {
+   return 0;
+  }
+
+
+  ASN1_TIME_diff(&day, &sec, before, NULL);
+
+  if (day < 0 || sec <0)
+  {
+   return 0;
+  }
+
+  return 1;
+
+
+}
+
+
+
+
+
+
+int check_public_key(X509 *cert){
+  EVP_PKEY *key = X509_get_pubkey(cert);
+  RSA *rsa = NULL;
+
+  if ((rsa = EVP_PKEY_get1_RSA(key)) == NULL)
+  {
+      return 0;
+  }
+   if(8*RSA_size(rsa)==2048){
+    return 1;
+   }
+
+  return 0;
+}
+
+
+int check_constraint(X509 *cert){
+ X509_EXTENSION *ex = X509_get_ext(cert, X509_get_ext_by_NID(cert, NID_basic_constraints, -1));
+    if (ex == NULL)
+    {
+        return 0;
+    }
+
+    BUF_MEM *bptr = NULL;
+    char *buf = NULL;
+
+    BIO *bio = BIO_new(BIO_s_mem());
+    if (!X509V3_EXT_print(bio, ex, 0, 0))
+    {
+        fprintf(stderr, "Error in reading extensions");
+    }
+    BIO_flush(bio);
+    BIO_get_mem_ptr(bio, &bptr);
+
+    //bptr->data is not NULL terminated - add null character
+    buf = (char *)malloc((bptr->length + 1) * sizeof(char));
+    memcpy(buf, bptr->data, bptr->length);
+    buf[bptr->length] = '\0';
+
+    int cond = strcmp(buf, "CA:FALSE");
+    BIO_free_all(bio);
+    free(buf);
+
+    return cond == 0;
+}
+
+
+int check_ext_key(X509 *cert){
+ X509_EXTENSION *ex = X509_get_ext(cert, X509_get_ext_by_NID(cert, NID_ext_key_usage, -1));
+    if (ex == NULL)
+    {
+        return 0;
+    }
+    BUF_MEM *bptr = NULL;
+    char *buf = NULL;
+
+    BIO *bio = BIO_new(BIO_s_mem());
+    if (!X509V3_EXT_print(bio, ex, 0, 0))
+    {
+        fprintf(stderr, "Error in reading extensions");
+    }
+    BIO_flush(bio);
+    BIO_get_mem_ptr(bio, &bptr);
+
+    //bptr->data is not NULL terminated - add null character
+    buf = (char *)malloc((bptr->length + 1) * sizeof(char));
+    memcpy(buf, bptr->data, bptr->length);
+    buf[bptr->length] = '\0';
+
+    int cond = strcmp(buf, "TLS Web Server Authentication");
+
+    BIO_free_all(bio);
+    free(buf);
+
+    return cond == 0;
 }
 
-- 
GitLab