I have to keep on working on this beast.
authorWerner Koch <wk@gnupg.org>
Tue, 13 Nov 2001 12:45:11 +0000 (12:45 +0000)
committerWerner Koch <wk@gnupg.org>
Tue, 13 Nov 2001 12:45:11 +0000 (12:45 +0000)
src/cert.c
src/keyinfo.c
src/ksba.h
src/util.c

index 7a159dc..e1d55be 100644 (file)
@@ -92,7 +92,7 @@ ksba_cert_read_der (KsbaCert cert, KsbaReader reader)
 
   /* fixme: Allow to configure the used syntax and read it from a static
      structure generated by asn-gentables */
-  err = ksba_asn_parse_file ("../src/tmttv2.asn", &cert->asn_tree);
+  err = ksba_asn_parse_file ("/home/wk/work/libksba/src/tmttv2.asn", &cert->asn_tree);
   if (err)
     goto leave;
 
@@ -123,8 +123,35 @@ ksba_cert_read_der (KsbaCert cert, KsbaReader reader)
 }
 
 
+const unsigned char *
+ksba_cert_get_image (KsbaCert cert, size_t *r_length )
+{
+  AsnNode n;
+
+  if (!cert)
+    return NULL;
+  if (!cert->initialized)
+    return NULL;
+
+  n = _ksba_asn_find_node (cert->root, "TMTTv2.Certificate");
+  if (!n) 
+    return NULL;
+
+  if (n->off == -1)
+    {
+      fputs ("ksba_cert_get_image problem at node:\n", stderr);
+      _ksba_asn_node_dump_all (n, stderr);
+      return NULL;
+    }
+
+  if (r_length)
+    *r_length = cert->imagelen;
+  return cert->image;
+}
+
+
 KsbaError
-ksba_cert_hash (KsbaCert cert,
+ksba_cert_hash (KsbaCert cert, int what,
                 void (*hasher)(void *, const unsigned char *, size_t length), 
                 void *hasher_arg)
 {
@@ -136,7 +163,8 @@ ksba_cert_hash (KsbaCert cert,
     return KSBA_No_Data;
 
   n = _ksba_asn_find_node (cert->root,
-                           "TMTTv2.Certificate.signatureAlgorithm");
+                           what == 1? "TMTTv2.Certificate.tbsCertificate"
+                                    : "TMTTv2.Certificate");
   if (!n)
     return KSBA_No_Value; /* oops - should be there */
   if (n->off == -1)
@@ -146,27 +174,8 @@ ksba_cert_hash (KsbaCert cert,
       return KSBA_No_Value;
     }
 
-  {  
-    KsbaError err;
-    char *string;
-    AsnNode n2;
-#if 0
-    err = _ksba_keyinfo_to_sexp (cert->image + n->off, n->nhdr + n->len,
-                                 &string);
-    if (err)
-      return err;
-    printf ("KEY = `%s'\n", string);
-#endif
-    n2 = n->right;
-    
-    err = _ksba_sigval_to_sexp (cert->image + n->off,
-                                n->nhdr + n->len
-                                + ((!n2||n2->off == -1)? 0:(n2->nhdr+n2->len)),
-                                &string);
-    if (err)
-      return err;
-    printf ("SIG = `%s'\n", string);
-  }
+  hasher (hasher_arg, cert->image + n->off,  n->nhdr + n->len);
+
 
   return 0;
 }
@@ -218,8 +227,8 @@ ksba_cert_get_digest_algo (KsbaCert cert)
  * @cert: certificate object 
  * 
  * This function returnes the serial number of the certificate.  The
- * serial number is an integer returned in a buffer formatte in a
- * format like the one ised bey SSH: The first 4 bytes are to be
+ * serial number is an integer returned in a buffer formatted in a
+ * format like the one used by SSH: The first 4 bytes are to be
  * considered the length of the following integer bytes in network
  * byte order, the integer itself is in 2's complement.  This format
  * can be passed to gcry_mpi_scan() when a length of 0 is given.  The
@@ -433,12 +442,19 @@ ksba_cert_get_sig_val (KsbaCert cert)
     return NULL;
 
   n = _ksba_asn_find_node (cert->root,
-                           "TMTTv2.Certificate.algorithmIdentifier");
+                           "TMTTv2.Certificate.signatureAlgorithm");
   if (!n)
     {
       cert->last_error = KSBA_No_Value;
       return NULL;
     }
+  if (n->off == -1)
+    {
+      fputs ("ksba_cert_get_sig_val problem at node:\n", stderr);
+      _ksba_asn_node_dump_all (n, stderr);
+      cert->last_error = KSBA_No_Value;
+      return NULL;
+    }
 
   n2 = n->right;
   err = _ksba_sigval_to_sexp (cert->image + n->off,
@@ -456,3 +472,5 @@ ksba_cert_get_sig_val (KsbaCert cert)
 
 
 
+
+
index 322ca8e..b07b51c 100644 (file)
@@ -159,11 +159,11 @@ get_algorithm (const unsigned char *der, size_t derlen,
   /* der does now point to an oid of length LEN */
   *r_pos = der - start;
   *r_len = len;
-  {
-    char *p = ksba_oid_to_str (der, len);
-    printf ("algorithm: %s\n", p);
-    xfree (p);
-  }
+/*    { */
+/*      char *p = ksba_oid_to_str (der, len); */
+/*      printf ("algorithm: %s\n", p); */
+/*      xfree (p); */
+/*    } */
   der += len;
   derlen -= len;
   seqlen -= der - startseq;;
@@ -171,7 +171,7 @@ get_algorithm (const unsigned char *der, size_t derlen,
   /* check that the parameter is NULL or not there */
   if (!seqlen)
     {
-      printf ("parameter: none\n");
+/*        printf ("parameter: none\n"); */
     }
   else
     {
@@ -182,7 +182,7 @@ get_algorithm (const unsigned char *der, size_t derlen,
       c = *der++; derlen--;
       if ( c == 0x05 ) 
         {
-          printf ("parameter: NULL \n"); /* the only correct thing */
+          /*printf ("parameter: NULL \n");*/ /* the only correct thing */
           if (!derlen)
             return KSBA_Invalid_Keyinfo;
           c = *der++; derlen--;
@@ -214,9 +214,6 @@ get_algorithm (const unsigned char *der, size_t derlen,
     return KSBA_Unexpected_Tag; /* not a BIT STRING */
   TLV_LENGTH();
 
-  /* we are now inside the BIT STRING */
-  printf ("bit string of %lu bytes\n", len);
-
   *r_nread = der - start;
 
   return 0;
index 96a93ff..ecb8efb 100644 (file)
@@ -86,7 +86,8 @@ typedef struct ksba_asn_tree_s *KsbaAsnTree;
 KsbaCert ksba_cert_new (void);
 void     ksba_cert_release (KsbaCert cert);
 KsbaError ksba_cert_read_der (KsbaCert cert, KsbaReader reader);
-KsbaError ksba_cert_hash (KsbaCert cert,
+const unsigned char *ksba_cert_get_image (KsbaCert cert, size_t *r_length);
+KsbaError ksba_cert_hash (KsbaCert cert, int what,
                           void (*hasher)(void *,
                                          const unsigned char *,
                                          size_t length), 
@@ -132,6 +133,9 @@ int ksba_oid_from_str (const char *string, char **rbuf, size_t *rlength);
 
 
 /*-- util.c --*/
+void ksba_set_malloc_hooks ( void *(*new_alloc_func)(size_t n),
+                             void *(*new_realloc_func)(void *p, size_t n),
+                             void (*new_free_func)(void*) );
 void *ksba_malloc (size_t n );
 void *ksba_calloc (size_t n, size_t m );
 void *ksba_realloc (void *p, size_t n);
index 292c0f3..4446c0a 100644 (file)
 
 #include "util.h"
 
+static void *(*alloc_func)(size_t n) = malloc;
+static void *(*realloc_func)(void *p, size_t n) = realloc;
+static void (*free_func)(void*) = free;
+
+
+void
+ksba_set_malloc_hooks ( void *(*new_alloc_func)(size_t n),
+                        void *(*new_realloc_func)(void *p, size_t n),
+                        void (*new_free_func)(void*) )
+{
+  alloc_func       = new_alloc_func;
+  realloc_func      = new_realloc_func;
+  free_func        = new_free_func;
+}
+
+
+
 /* Wrapper for the common memory allocation functions.  These are here
    so that we can add hooks.  The corresponding macros should be used.
    These macros are not named xfoo() because this name is commonly
 void *
 ksba_malloc (size_t n )
 {
-  return malloc (n);
+  return alloc_func (n);
 }
 
 void *
 ksba_calloc (size_t n, size_t m )
 {
-  return calloc (n, m);
+  void *p = ksba_malloc (n*m);
+  if (p)
+    memset (p, 0, n*m);
+  return p;
 }
 
 void *
 ksba_realloc (void *mem, size_t n)
 {
-  return realloc (mem, n );
+  return realloc_func (mem, n );
 }
 
 
 char *
 ksba_strdup (const char *str)
 {
-  return strdup (str);
+  char *p = ksba_malloc (strlen(str)+1);
+  if (p)
+    strcpy (p, str);
+  return p;
 }
 
 
 void 
 ksba_free ( void *a )
 {
-  free (a);
+  if (a)
+    free_func (a);
 }