tests/gpgscm: Verbatim import of latest TinySCHEME.
[gnupg.git] / scd / app-help.c
index 7b9ce99..2576d5c 100644 (file)
@@ -1,5 +1,5 @@
 /* app-help.c - Application helper functions
- *     Copyright (C) 2004 Free Software Foundation, Inc.
+ * Copyright (C) 2004, 2009 Free Software Foundation, Inc.
  *
  * This file is part of GnuPG.
  *
 #include "iso7816.h"
 #include "tlv.h"
 
+
+/* Count the number of bits, assuming the A represents an unsigned big
+   integer of length LEN bytes.  If A is NULL a length of 0 is
+   returned. */
+unsigned int
+app_help_count_bits (const unsigned char *a, size_t len)
+{
+  unsigned int n = len * 8;
+  int i;
+
+  if (!a)
+    return 0;
+
+  for (; len && !*a; len--, a++, n -=8)
+    ;
+  if (len)
+    {
+      for (i=7; i && !(*a & (1<<i)); i--)
+        n--;
+    }
+  return n;
+}
+
+
 /* Return the KEYGRIP for the certificate CERT as an hex encoded
    string in the user provided buffer HEXKEYGRIP which must be of at
    least 41 bytes. */
@@ -96,7 +120,7 @@ app_help_read_length_of_cert (int slot, int fid, size_t *r_certoff)
                  fid, gpg_strerror (err));
       return 0;
     }
-  
+
   if (!buflen || *buffer == 0xff)
     {
       log_info ("no certificate contained in FID 0x%04X\n", fid);
@@ -121,8 +145,7 @@ app_help_read_length_of_cert (int slot, int fid, size_t *r_certoff)
   if ( !(class == CLASS_UNIVERSAL &&  constructed
          && (tag == TAG_SEQUENCE || tag == TAG_SET)))
     {
-      log_info ("contents of FID 0x%04X does not look like a certificate\n",
-                fid);
+      log_info ("data at FID 0x%04X does not look like a certificate\n", fid);
       return 0;
     }
 
@@ -155,5 +178,3 @@ app_help_read_length_of_cert (int slot, int fid, size_t *r_certoff)
 
   return resultlen;
 }
-
-