]> err.no Git - yubikey-personalization/commitdiff
change around to work with device_config instead of raw mode
authorKlas Lindfors <klas@yubico.com>
Mon, 3 Dec 2012 09:54:27 +0000 (10:54 +0100)
committerKlas Lindfors <klas@yubico.com>
Mon, 3 Dec 2012 09:54:27 +0000 (10:54 +0100)
libykpers-1.map
ykcore/ykcore.c
ykcore/ykcore.h

index 56dab3699b650f82c14e508acb34ce6267a4749a..66034904dcc086f66f8642f24ccdf0a58bf00899 100644 (file)
@@ -168,7 +168,7 @@ LIBYKPERS_1.10 {
   yk_write_ndef2;
   ykp_ndef_as_text;
   yk_check_firmware_version2;
-  yk_set_usb_mode;
+  yk_set_device_config;
   ykp_alloc_device_config;
   ykp_free_device_config;
   ykp_set_device_mode;
index 5b1ed4d7e0d1d5041ba287b62391044ba89a1361..7a245d2bf3f3eda222e2fdd1cccaf4bac9aafe5c 100644 (file)
@@ -312,27 +312,23 @@ int yk_write_ndef2(YK_KEY *yk, YK_NDEF *ndef, int confnum)
        return stat.pgmSeq != seq;
 }
 
-int yk_set_usb_mode(YK_KEY *yk, int usb_mode)
+int yk_write_device_config(YK_KEY *yk, YK_DEVICE_CONFIG *device_config)
 {
-       if(!(usb_mode >= 0 && usb_mode < 4)) {
-               yk_errno = YK_EINVALIDCMD;
-               return 1;
-       }
-
-       unsigned char buf[sizeof(YK_NDEF)];
+       unsigned char buf[sizeof(YK_DEVICE_CONFIG)];
        YK_STATUS stat;
        int seq;
 
+       memset(buf, 0, sizeof(buf));
+       memcpy(buf, device_config, sizeof(YK_DEVICE_CONFIG));
+
        /* Get current sequence # from status block */
        if (!yk_get_status(yk, &stat))
                return 0;
 
        seq = stat.pgmSeq;
 
-       fprintf(stderr, "Pretending to set the USB mode to: %d\n", usb_mode);
-
        /* Write to Yubikey */
-       if(/*TODO: !yk_write_to_key(yk, SLOT_USB_MODE, buf, sizeof(buf)) */ 1 == 2)
+       if(!yk_write_to_key(yk, SLOT_DEVICE_CONFIG, buf, sizeof(buf)))
                return 0;
 
        /* When the Yubikey clears the SLOT_WRITE_FLAG, it has processed the last write.
@@ -340,7 +336,7 @@ int yk_set_usb_mode(YK_KEY *yk, int usb_mode)
         * want to get the bytes in the status message, but when writing configuration
         * we don't expect any data back.
         */
-       yk_wait_for_key_status(yk, SLOT_USB_MODE, 0, WAIT_FOR_WRITE_FLAG, false, SLOT_WRITE_FLAG, NULL);
+       yk_wait_for_key_status(yk, SLOT_DEVICE_CONFIG, 0, WAIT_FOR_WRITE_FLAG, false, SLOT_WRITE_FLAG, NULL);
 
        /* Verify update */
 
index f7acaf0d9e5eaccc3974196877ce519f5bd56002..ea2fccb50c2a146325a918c3e54390c2b0745f4e 100644 (file)
@@ -121,6 +121,8 @@ extern int yk_write_config(YK_KEY *k, YK_CONFIG *cfg, int confnum,
 extern int yk_write_ndef(YK_KEY *yk, YK_NDEF *ndef);
 /* writes the given ndef to the key. */
 extern int yk_write_ndef2(YK_KEY *yk, YK_NDEF *ndef, int confnum);
+/* writes a device config block to the key. */
+extern int yk_write_device_config(YK_KEY *yk, YK_DEVICE_CONFIG *device_config);
 /* Write something to the YubiKey (a command that is). */
 extern int yk_write_to_key(YK_KEY *yk, uint8_t slot, const void *buf, int bufcount);
 /* Do a challenge-response round with the key. */