tools: Fix compile error with older gcc versions.
[gnupg.git] / scd / app-nks.c
index c83217f..4442a10 100644 (file)
@@ -14,7 +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, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, see <https://www.gnu.org/licenses/>.
  */
 
 /* Notes:
@@ -56,6 +56,7 @@
 #include "app-common.h"
 #include "tlv.h"
 #include "apdu.h"
+#include "host2net.h"
 
 static char const aid_nks[]  = { 0xD2, 0x76, 0x00, 0x00, 0x03, 0x01, 0x02 };
 static char const aid_sigg[] = { 0xD2, 0x76, 0x00, 0x00, 0x66, 0x01 };
@@ -278,7 +279,7 @@ get_chv_status (app_t app, int sigg, int pwid)
     rc = -1; /* Error. */
   else
     {
-      unsigned int sw = ((result[resultlen-2] << 8) | result[resultlen-1]);
+      unsigned int sw = buf16_to_uint (result+resultlen-2);
 
       if (sw == 0x6a88)
         rc = -2; /* No such PIN.  */
@@ -617,13 +618,17 @@ do_readcert (app_t app, const char *certid,
    certificate parsing code in commands.c:cmd_readkey.  For internal
    use PK and PKLEN may be NULL to just check for an existing key.  */
 static gpg_error_t
-do_readkey (app_t app, const char *keyid, unsigned char **pk, size_t *pklen)
+do_readkey (app_t app, int advanced, const char *keyid,
+            unsigned char **pk, size_t *pklen)
 {
   gpg_error_t err;
   unsigned char *buffer[2];
   size_t buflen[2];
   unsigned short path[1] = { 0x4500 };
 
+  if (advanced)
+    return GPG_ERR_NOT_SUPPORTED;
+
   /* We use a generic name to retrieve PK.AUT.IFD-SPK.  */
   if (!strcmp (keyid, "$IFDAUTHKEY") && app->app_local->nks_version >= 3)
     ;
@@ -697,7 +702,7 @@ do_writekey (app_t app, ctrl_t ctrl,
   else
     return gpg_error (GPG_ERR_INV_ID);
 
-  if (!force && !do_readkey (app, keyid, NULL, NULL))
+  if (!force && !do_readkey (app, 0, keyid, NULL, NULL))
     return gpg_error (GPG_ERR_EEXIST);
 
   /* Parse the S-expression.  */
@@ -999,7 +1004,7 @@ do_decipher (app_t app, const char *keyidstr,
     return gpg_error (GPG_ERR_INV_VALUE);
 
   /* Check that the provided ID is valid.  This is not really needed
-     but we do it to to enforce correct usage by the caller. */
+     but we do it to enforce correct usage by the caller. */
   if (!strncmp (keyidstr, "NKS-NKS3.", 9) )
     ;
   else if (!strncmp (keyidstr, "NKS-DF01.", 9) )
@@ -1067,7 +1072,7 @@ do_decipher (app_t app, const char *keyidstr,
 
 
 /* Parse a password ID string.  Returns NULL on error or a string
-   suitable as passpahrse prompt on success.  On success stores the
+   suitable as passphrase prompt on success.  On success stores the
    reference value for the password at R_PWID and a flag indicating
    that the SigG application is to be used at R_SIGG.  If NEW_MODE is
    true, the returned description is suitable for a new Password.
@@ -1125,7 +1130,10 @@ parse_pwidstr (const char *pwidstr, int new_mode, int *r_sigg, int *r_pwid)
                   "for the key to create qualified signatures."));
     }
   else
-    desc = NULL;
+    {
+      *r_pwid = 0; /* Only to avoid gcc warning in calling function.  */
+      desc = NULL; /* Error.  */
+    }
 
   return desc;
 }