~ubuntu-branches/ubuntu/trusty/gnutls26/trusty-security

« back to all changes in this revision

Viewing changes to tests/chainverify.c

  • Committer: Bazaar Package Importer
  • Author(s): Andreas Metzler
  • Date: 2010-04-22 19:29:52 UTC
  • mto: (12.4.3 experimental) (1.5.1)
  • mto: This revision was merged to the branch mainline in revision 26.
  • Revision ID: james.westby@ubuntu.com-20100422192952-gbj6cvaan8e4ejck
Tags: upstream-2.9.10
ImportĀ upstreamĀ versionĀ 2.9.10

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
 
 * Copyright (C) 2008, 2009 Free Software Foundation
 
2
 * Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
3
3
 *
4
4
 * Author: Simon Josefsson
5
5
 *
32
32
#include <gnutls/gnutls.h>
33
33
#include <gnutls/x509.h>
34
34
 
 
35
#include "utils.h"
 
36
 
35
37
/* GnuTLS internally calls time() to find out the current time when
36
38
   verifying certificates.  To avoid a time bomb, we hard code the
37
39
   current time.  This should work fine on systems where the library
754
756
  fprintf (stderr, "|<%d>| %s", level, str);
755
757
}
756
758
 
757
 
int
758
 
main (int argc, char *argv[])
 
759
void
 
760
doit (void)
759
761
{
760
762
  int exit_val = 0;
761
763
  size_t i;
764
766
  ret = gnutls_global_init ();
765
767
  if (ret != 0)
766
768
    {
767
 
      printf ("%d: %s\n", ret, gnutls_strerror (ret));
768
 
      return EXIT_FAILURE;
 
769
      fail ("%d: %s\n", ret, gnutls_strerror (ret));
 
770
      exit (EXIT_FAILURE);
769
771
    }
770
772
 
771
773
  gnutls_global_set_log_function (tls_log_func);
772
 
  gnutls_global_set_log_level (4711);
 
774
  if (debug)
 
775
    gnutls_global_set_log_level (4711);
773
776
 
774
777
  for (i = 0; chains[i].chain; i++)
775
778
    {
779
782
      gnutls_datum_t tmp;
780
783
      size_t j;
781
784
 
782
 
      printf ("Chain '%s' (%d)...\n", chains[i].name, (int) i);
 
785
      if (debug)
 
786
        printf ("Chain '%s' (%d)...\n", chains[i].name, (int) i);
783
787
 
784
788
      for (j = 0; chains[i].chain[j]; j++)
785
789
        {
786
 
          printf ("\tAdding certificate %d...", (int) j);
 
790
          if (debug)
 
791
            printf ("\tAdding certificate %d...", (int) j);
787
792
 
788
793
          ret = gnutls_x509_crt_init (&certs[j]);
789
794
          if (ret < 0)
794
799
          tmp.size = strlen (chains[i].chain[j]);
795
800
 
796
801
          ret = gnutls_x509_crt_import (certs[j], &tmp, GNUTLS_X509_FMT_PEM);
797
 
          printf ("done\n");
 
802
          if (debug)
 
803
            printf ("done\n");
798
804
          if (ret < 0)
799
805
            error (EXIT_FAILURE, 0, "gnutls_x509_crt_import[%d,%d]: %s",
800
806
                   (int) i, (int) j, gnutls_strerror (ret));
801
807
 
802
808
          gnutls_x509_crt_print (certs[j], GNUTLS_CRT_PRINT_ONELINE, &tmp);
803
 
          printf ("\tCertificate %d: %.*s\n", (int) j, tmp.size, tmp.data);
 
809
          if (debug)
 
810
            printf ("\tCertificate %d: %.*s\n", (int) j, tmp.size, tmp.data);
804
811
          gnutls_free (tmp.data);
805
812
        }
806
813
 
807
 
      printf ("\tAdding CA certificate...");
 
814
      if (debug)
 
815
        printf ("\tAdding CA certificate...");
808
816
 
809
817
      ret = gnutls_x509_crt_init (&ca);
810
818
      if (ret < 0)
819
827
        error (EXIT_FAILURE, 0, "gnutls_x509_crt_import: %s",
820
828
               gnutls_strerror (ret));
821
829
 
822
 
      printf ("done\n");
 
830
      if (debug)
 
831
        printf ("done\n");
823
832
 
824
833
      gnutls_x509_crt_print (ca, GNUTLS_CRT_PRINT_ONELINE, &tmp);
825
 
      printf ("\tCA Certificate: %.*s\n", tmp.size, tmp.data);
 
834
      if (debug)
 
835
        printf ("\tCA Certificate: %.*s\n", tmp.size, tmp.data);
826
836
      gnutls_free (tmp.data);
827
837
 
828
 
      printf ("\tVerifying...");
 
838
      if (debug)
 
839
        printf ("\tVerifying...");
829
840
 
830
841
      ret = gnutls_x509_crt_list_verify (certs, j,
831
842
                                         &ca, 1, NULL, 0,
833
844
                                         &verify_status);
834
845
      if (ret < 0)
835
846
        error (EXIT_FAILURE, 0, "gnutls_x509_crt_list_verify[%d,%d]: %s",
836
 
               i, j, gnutls_strerror (ret));
 
847
               (int) i, (int) j, gnutls_strerror (ret));
837
848
 
838
849
      if (verify_status != chains[i].expected_verify_result)
839
850
        {
840
 
          error (0, 0, "verify_status: %d expected: %d",
841
 
                 verify_status, chains[i].expected_verify_result);
842
 
          exit_val = 1;
843
 
          if (argc > 1)
844
 
            {
845
 
              printf ("Exiting early with status...%d\n", exit_val);
846
 
              return exit_val;
847
 
            }
 
851
          fail ("verify_status: %d expected: %d",
 
852
                verify_status, chains[i].expected_verify_result);
 
853
 
 
854
          if (debug)
 
855
            exit (1);
848
856
        }
849
 
      else
 
857
      else if (debug)
850
858
        printf ("done\n");
851
 
      printf ("\tCleanup...");
 
859
      if (debug)
 
860
        printf ("\tCleanup...");
852
861
 
853
862
      gnutls_x509_crt_deinit (ca);
854
863
      for (j = 0; chains[i].chain[j]; j++)
855
864
        gnutls_x509_crt_deinit (certs[j]);
856
865
 
857
 
      printf ("done\n");
 
866
      if (debug)
 
867
        printf ("done\n");
858
868
    }
859
869
 
860
870
  gnutls_global_deinit ();
861
871
 
862
 
  printf ("Exit status...%d\n", exit_val);
 
872
  if (debug)
 
873
    printf ("Exit status...%d\n", exit_val);
863
874
 
864
 
  return exit_val;
 
875
  exit (exit_val);
865
876
}