]> err.no Git - yubikey-personalization/commitdiff
add functions to set AES and HMAC key from raw bytes
authorKlas Lindfors <klas@yubico.com>
Thu, 9 Jan 2014 08:43:43 +0000 (09:43 +0100)
committerKlas Lindfors <klas@yubico.com>
Thu, 9 Jan 2014 08:48:39 +0000 (09:48 +0100)
libykpers-1.map
ykpers.c
ykpers.h

index d92dbb841285aa79eb7c96661e5939bbebd2ad4d..e49d81b861310f7d8b0501def80c95992e170d4f 100644 (file)
@@ -247,5 +247,7 @@ LIBYKPERS_1.15 {
   global:
 # Functions:
   ykp_get_supported_key_length;
+  ykp_AES_key_from_raw;
+  ykp_HMAC_key_from_raw;
 # Variables:
 } LIBYKPERS_1.14;
index 6e8fee52a3d645a6db86d1e190fb4c894d6fcc68..c46c9e80dabbff6d48563ac5c6399139761012a8 100644 (file)
--- a/ykpers.c
+++ b/ykpers.c
@@ -268,6 +268,27 @@ int ykp_AES_key_from_hex(YKP_CONFIG *cfg, const char *hexkey) {
        return 0;
 }
 
+/* Store a 16 byte AES key.
+ *
+ * copy 16 bytes from key to cfg->ykcore_config.key
+ */
+int ykp_AES_key_from_raw(YKP_CONFIG *cfg, const char *key) {
+       memcpy(cfg->ykcore_config.key, key, sizeof(cfg->ykcore_config.key));
+       return 0;
+}
+
+/* Store a 20 byte HMAC key.
+ *
+ * store the first 16 bytes of key in cfg->ykcore_config.key
+ * and the remaining 4 bytes in cfg->ykcore_config.uid
+ */
+int ykp_HMAC_key_from_raw(YKP_CONFIG *cfg, const char *key) {
+       size_t size = sizeof(cfg->ykcore_config.key);
+       memcpy(cfg->ykcore_config.key, key, size);
+       memcpy(cfg->ykcore_config.uid, key + size, 20 - size);
+       return 0;
+}
+
 /* Decode 160 bits HMAC key, used with OATH and HMAC challenge-response.
  *
  * The first 128 bits of the HMAC go key into cfg->ykcore_config.key,
index 50234bb31b03837043bb179f5716c85c22d84e1b..8b1eabe4a61312245c5ec0a5a810e83b51219731 100644 (file)
--- a/ykpers.h
+++ b/ykpers.h
@@ -62,9 +62,11 @@ int ykp_configure_command(YKP_CONFIG *cfg, uint8_t command);
 int ykp_configure_for(YKP_CONFIG *cfg, int confnum, YK_STATUS *st);
 
 int ykp_AES_key_from_hex(YKP_CONFIG *cfg, const char *hexkey);
+int ykp_AES_key_from_raw(YKP_CONFIG *cfg, const char *key);
 int ykp_AES_key_from_passphrase(YKP_CONFIG *cfg, const char *passphrase,
                                const char *salt);
 int ykp_HMAC_key_from_hex(YKP_CONFIG *cfg, const char *hexkey);
+int ykp_HMAC_key_from_raw(YKP_CONFIG *cfg, const char *key);
 
 /* Functions for constructing the YK_NDEF struct before writing it to a neo */
 YK_NDEF *ykp_alloc_ndef(void);