From 815fbb026f45a9c00de820afdc98bf8e1afb60cb Mon Sep 17 00:00:00 2001 From: lwvmobile Date: Thu, 4 May 2023 23:58:44 -0400 Subject: [PATCH] Various uint64_t/ul/ulli fixes for 32-bit; --- src/dmr_csbk.c | 2 +- src/dmr_data.c | 1 + src/dmr_pi.c | 11 ++++------- src/nxdn_element.c | 20 ++++++++++---------- 4 files changed, 16 insertions(+), 18 deletions(-) diff --git a/src/dmr_csbk.c b/src/dmr_csbk.c index c7f510c..57c05b2 100644 --- a/src/dmr_csbk.c +++ b/src/dmr_csbk.c @@ -116,7 +116,7 @@ void dmr_cspdu (dsd_opts * opts, dsd_state * state, uint8_t cs_pdu_bits[], uint8 uint8_t mbc_cc = (uint8_t)ConvertBitIntoBytes(&cs_pdu_bits[108], 4); uint8_t mbc_cdeftype = (uint8_t)ConvertBitIntoBytes(&cs_pdu_bits[112], 4); //see 7.2.19.7 = 0 for channel parms, 1 through FFFF reserved uint8_t mbc_res2 = (uint8_t)ConvertBitIntoBytes(&cs_pdu_bits[116], 2); - uint64_t mbc_cdefparms = (uint64_t)ConvertBitIntoBytes(&cs_pdu_bits[118], 58); //see 7.2.19.7.1 + unsigned long long int mbc_cdefparms = (unsigned long long int)ConvertBitIntoBytes(&cs_pdu_bits[118], 58); //see 7.2.19.7.1 //this is how you read the 58 parm bits according to the appendix 7.2.19.7.1 if (mbc_cdeftype == 0) //if 0, then absolute channel parms diff --git a/src/dmr_data.c b/src/dmr_data.c index b6509b6..287bb63 100644 --- a/src/dmr_data.c +++ b/src/dmr_data.c @@ -345,6 +345,7 @@ dmr_data_sync (dsd_opts * opts, dsd_state * state) //zero out vc frequencies state->p25_vc_freq[0] = 0; state->p25_vc_freq[1] = 0; + memset (state->active_channel, 0, sizeof(state->active_channel)); state->last_cc_sync_time = time(NULL); state->is_con_plus = 0; //con+ flag off } diff --git a/src/dmr_pi.c b/src/dmr_pi.c index ecece68..fd0a992 100644 --- a/src/dmr_pi.c +++ b/src/dmr_pi.c @@ -116,7 +116,7 @@ void LFSR(dsd_state * state) void LFSR64(dsd_state * state) { { - uint64_t lfsr = 0; + unsigned long long int lfsr = 0; if (state->currentslot == 0) { @@ -128,19 +128,16 @@ void LFSR64(dsd_state * state) for(cnt=0;cnt<32;cnt++) { - uint64_t bit = ( (lfsr >> 31) ^ (lfsr >> 21) ^ (lfsr >> 1) ^ (lfsr >> 0) ) & 0x1; + unsigned long long int bit = ( (lfsr >> 31) ^ (lfsr >> 21) ^ (lfsr >> 1) ^ (lfsr >> 0) ) & 0x1; lfsr = (lfsr << 1) | bit; } - // if (state->currentslot == 0) state->payload_miP = lfsr; - // else state->payload_miN = lfsr; - if (state->currentslot == 0) { fprintf (stderr, "%s", KYEL); fprintf (stderr, " Slot 1"); fprintf (stderr, " DMR PI C- ALG ID: 0x%02X KEY ID: 0x%02X", state->payload_algid, state->payload_keyid); - fprintf (stderr, " MI: 0x%016lX", lfsr); + fprintf (stderr, " MI: 0x%016llX", lfsr); fprintf (stderr, "%s", KNRM); state->payload_mi = lfsr & 0xFFFFFFFF; //truncate for next repitition and le verification } @@ -150,7 +147,7 @@ void LFSR64(dsd_state * state) fprintf (stderr, "%s", KYEL); fprintf (stderr, " Slot 2"); fprintf (stderr, " DMR PI C- ALG ID: 0x%02X KEY ID: 0x%02X", state->payload_algidR, state->payload_keyidR); - fprintf (stderr, " MI: 0x%016lX", lfsr); + fprintf (stderr, " MI: 0x%016llX", lfsr); fprintf (stderr, "%s", KNRM); state->payload_miR = lfsr & 0xFFFFFFFF; //truncate for next repitition and le verification } diff --git a/src/nxdn_element.c b/src/nxdn_element.c index 842adf0..e28e69e 100644 --- a/src/nxdn_element.c +++ b/src/nxdn_element.c @@ -1172,14 +1172,14 @@ void NXDN_decode_VCALL_IV(dsd_opts * opts, dsd_state * state, uint8_t * Message) { uint32_t i; state->payload_miN = 0; //zero out - uint64_t IV = 0; + unsigned long long int IV = 0; //NOTE: On Type-D systems, the FACCH1 version of message only carries a 4-octet payload and also only carries a 22-bit IV //which makes no sense since you still have the full 80-bits of FACCH1 to use uint8_t idas = 0; if (strcmp (state->nxdn_location_category, "Type-D") == 0) idas = 1; - if (!idas) IV = (uint64_t)ConvertBitIntoBytes(&Message[8], 64); - else IV = (uint64_t)ConvertBitIntoBytes(&Message[8], 22); + if (!idas) IV = (unsigned long long int)ConvertBitIntoBytes(&Message[8], 64); + else IV = (unsigned long long int)ConvertBitIntoBytes(&Message[8], 22); //At this point, I would assume an LFSR function is needed to expand the 22-bit IV collected here into a 64-bit IV, or 128-bit IV state->payload_miN = IV; @@ -1223,11 +1223,11 @@ void NXDN_decode_scch(dsd_opts * opts, dsd_state * state, uint8_t * Message, uin uint8_t gu = Message[24]; //group or unit bit //OSM 2 and 3 elements -- unique only - uint64_t iv_a = (uint64_t)ConvertBitIntoBytes(&Message[13], 12); //initialization vector (0-11) + unsigned long long int iv_a = (uint64_t)ConvertBitIntoBytes(&Message[13], 12); //initialization vector (0-11) //OSM 1 elements -- unique only -- DOUBLE CHECK ALL OF THESE! - uint64_t iv_b = (uint64_t)ConvertBitIntoBytes(&Message[18], 6); //initialization vector (b12-17) - uint64_t iv_c = (uint64_t)ConvertBitIntoBytes(&Message[8], 5); //initialization vector (b18-22) + unsigned long long int iv_b = (uint64_t)ConvertBitIntoBytes(&Message[18], 6); //initialization vector (b12-17) + unsigned long long int iv_c = (uint64_t)ConvertBitIntoBytes(&Message[8], 5); //initialization vector (b18-22) uint8_t iv_type = Message[24]; //0 or 1 tells us whether or not this is for IV, or for cipher/key uint8_t call_opt = (uint8_t)ConvertBitIntoBytes(&Message[13], 3); //Call Options uint8_t key_id = (uint8_t)ConvertBitIntoBytes(&Message[18], 6); //Key ID @@ -1429,7 +1429,7 @@ void NXDN_decode_scch(dsd_opts * opts, dsd_state * state, uint8_t * Message, uin if (id == 31) { fprintf (stderr, "\n%s ", KYEL); - fprintf (stderr, " Call IV A: %04lX", iv_a); + fprintf (stderr, " Call IV A: %04llX", iv_a); } else { @@ -1451,7 +1451,7 @@ void NXDN_decode_scch(dsd_opts * opts, dsd_state * state, uint8_t * Message, uin if (id == 31) { fprintf (stderr, "\n%s ", KYEL); - fprintf (stderr, " Call IV A: %04lX; ", iv_a); //MSB 0-11 + fprintf (stderr, " Call IV A: %04llX; ", iv_a); //MSB 0-11 //zero out IV storage and append this chunk to MSB position state->payload_miN = 0; state->payload_miN = state->payload_miN | (iv_a << 11); //MSB 11, so shift 11 (22 total bits). @@ -1491,8 +1491,8 @@ void NXDN_decode_scch(dsd_opts * opts, dsd_state * state, uint8_t * Message, uin else { fprintf (stderr, "\n%s ", KYEL); - fprintf (stderr, "Call IV B: %04lX; ", iv_b); - fprintf (stderr, "Call IV C: %04lX; ", iv_c); + fprintf (stderr, "Call IV B: %04llX; ", iv_b); + fprintf (stderr, "Call IV C: %04llX; ", iv_c); //Append to Call IV storage state->payload_miN = state->payload_miN | (iv_c << 6); //middle 5 bits..shifts 6 to accomodate last 6 bits below state->payload_miN = state->payload_miN | (iv_b << 0); //last 6 bits...no shift needed