Use bin2hex if possible.
[gnupg.git] / scd / card-p15.c
index 239e750..34a88f7 100644 (file)
@@ -5,7 +5,7 @@
  *
  * GnuPG is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation; either version 3 of the License, or
  * (at your option) any later version.
  *
  * GnuPG is distributed in the hope that it will be useful,
@@ -14,8 +14,7 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <config.h>
@@ -53,7 +52,7 @@ init_private_data (CARD card)
 
   priv = xtrycalloc (1, sizeof *priv);
   if (!priv)
-    return out_of_core ();
+    return gpg_error (gpg_err_code_from_errno (errno));
 
   /* OpenSC (0.7.0) is a bit strange in that the get_objects functions
      tries to be a bit too clever and implicitly does an enumeration
@@ -175,15 +174,12 @@ p15_enum_keypairs (CARD card, int idx,
   if (keyid)
     {
       char *p;
-      int i;
 
       *keyid = p = xtrymalloc (9+pinfo->id.len*2+1);
       if (!*keyid)
-        return out_of_core ();
+        return gpg_error (gpg_err_code_from_errno (errno));
       p = stpcpy (p, "P15-5015.");
-      for (i=0; i < pinfo->id.len; i++, p += 2)
-        sprintf (p, "%02X", pinfo->id.value[i]);
-      *p = 0;
+      bin2hex (pinfo->id.value, pinfo->id.len, p);
     }
   
   return rc;
@@ -217,11 +213,9 @@ p15_enum_certs (CARD card, int idx, char **certid, int *type)
 
       *certid = p = xtrymalloc (9+cinfo->id.len*2+1);
       if (!*certid)
-        return out_of_core ();
+        return gpg_error (gpg_err_code_from_errno (errno));
       p = stpcpy (p, "P15-5015.");
-      for (i=0; i < cinfo->id.len; i++, p += 2)
-        sprintf (p, "%02X", cinfo->id.value[i]);
-      *p = 0;
+      bin2hex (cinfo->id.value, cinfo->id.len, p);
     }
   if (type)
     {
@@ -304,7 +298,7 @@ p15_read_cert (CARD card, const char *certidstr,
   *cert = xtrymalloc (certder->data_len);
   if (!*cert)
     {
-      gpg_error_t tmperr = out_of_core ();
+      gpg_error_t tmperr = gpg_error (gpg_err_code_from_errno (errno));
       sc_pkcs15_free_certificate (certder);
       return tmperr;
     }
@@ -400,7 +394,7 @@ p15_sign (CARD card, const char *keyidstr, int hashalgo,
   outbuflen = 1024; 
   outbuf = xtrymalloc (outbuflen);
   if (!outbuf)
-    return out_of_core ();
+    return gpg_error (gpg_err_code_from_errno (errno));
   
   rc = sc_pkcs15_compute_signature (card->p15card, keyobj,
                                     cryptflags,
@@ -462,7 +456,7 @@ p15_decipher (CARD card, const char *keyidstr,
   outbuflen = indatalen < 256? 256 : indatalen; 
   outbuf = xtrymalloc (outbuflen);
   if (!outbuf)
-    return out_of_core ();
+    return gpg_error (gpg_err_code_from_errno (errno));
 
   rc = sc_pkcs15_decipher (card->p15card, keyobj, 
                            0,