From a5b9984d78b30d05bd16db73028cef9999c02792 Mon Sep 17 00:00:00 2001 From: lwvmobile Date: Sun, 17 Aug 2025 15:24:22 -0400 Subject: [PATCH] TYT EP: Fix User Key to Input Register; #302 Bytes used as input register for TYT EP are loaded by byte reverse order, was undetected on some key patterns like all F's or all A's, but found out on 1234... patterns; --- src/dsd_main.c | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/src/dsd_main.c b/src/dsd_main.c index 7f4d4bb..6ca20ce 100644 --- a/src/dsd_main.c +++ b/src/dsd_main.c @@ -2011,31 +2011,42 @@ opts.szNumbers[1023] = '\0'; unsigned long long int K1 = strtoull (opts.szNumbers, &pEnd, 16); unsigned long long int K2 = strtoull (pEnd, &pEnd, 16); - uint8_t key[32]; - memset(key, 0, sizeof(key)); + uint8_t static_key[32]; + memset(static_key, 0, sizeof(static_key)); //static key value - key[0]=0x6e; key[1]=0x02; key[2]=0x8d; key[3]=0x8a; - key[4]=0xca; key[5]=0xeb; key[6]=0x9b; key[7]=0xbe; - key[8]=0x42; key[9]=0x72; key[10]=0xfb; key[11]=0x82; - key[12]=0x64; key[13]=0x56; key[14]=0x31; key[15]=0xfa; + static_key[0]=0x6e; static_key[1]=0x02; static_key[2]=0x8d; static_key[3]=0x8a; + static_key[4]=0xca; static_key[5]=0xeb; static_key[6]=0x9b; static_key[7]=0xbe; + static_key[8]=0x42; static_key[9]=0x72; static_key[10]=0xfb; static_key[11]=0x82; + static_key[12]=0x64; static_key[13]=0x56; static_key[14]=0x31; static_key[15]=0xfa; - //iv or input register is the key value provided by user - uint8_t iv[16]; - memset(iv, 0, sizeof(iv)); + //the key value provided by user + uint8_t user_key[16]; + memset(user_key, 0, sizeof(user_key)); - //Load user key into iv / input register + //Load user key into array to manipulate for (int i = 0; i < 8; i++) { - iv[i+0] = (K1 >> (56-(i*8))) & 0xFF; - iv[i+8] = (K2 >> (56-(i*8))) & 0xFF; + user_key[i+0] = (K1 >> (56-(i*8))) & 0xFF; + user_key[i+8] = (K2 >> (56-(i*8))) & 0xFF; } + uint8_t input_register[16]; + memset(input_register, 0, sizeof(input_register)); + + //manipulate user provided key by loading bytes in reverse order into the input_register + for (int i = 0; i < 16; i++) + input_register[15-i] = user_key[i]; + uint8_t ks_bytes[16]; memset(ks_bytes, 0, sizeof(ks_bytes)); + //NOTE: To clarify, TYT EP uses ECB mode with the user key as input_register and the static key in the + //forward (encryption) direction, but we are calling OFB mode because the first round is the + //same concept and we only need the first round output, OFB is easier to use anyways. + //create keystream - aes_ofb_keystream_output(iv, key, ks_bytes, 0, 1); + aes_ofb_keystream_output(input_register, static_key, ks_bytes, 0, 1); uint8_t ks_bits[128]; memset(ks_bits, 0, sizeof(ks_bits)); unpack_byte_array_into_bit_array(ks_bytes, ks_bits, 16);