mirror of
				https://github.com/gnss-sdr/gnss-sdr
				synced 2025-10-31 15:23:04 +00:00 
			
		
		
		
	[TAS-203] bug osnma_test_vector_config_1
adkd dependence on key selection
This commit is contained in:
		| @@ -570,7 +570,7 @@ void osnma_msg_receiver::read_and_process_mack_block(const std::shared_ptr<OSNMA | ||||
|  | ||||
|     // update the structure with newly coming NavData | ||||
|     d_osnma_data.d_nav_data.init(osnma_msg); // TODO refactor it | ||||
|     add_satellite_data(d_osnma_data.d_nav_data.PRNa,d_osnma_data.d_nav_data.TOW_sf0,d_osnma_data.d_nav_data); // TODO change place | ||||
|     add_satellite_data(osnma_msg->PRN,osnma_msg->TOW_sf0,d_osnma_data.d_nav_data); // TODO change place | ||||
| // DEBUG PARSING MACK MESSAGES WHEN DSM-KROOT NOT YET AVAILABLE | ||||
| //    d_osnma_data.d_dsm_kroot_message.ts = 9; | ||||
| //    d_osnma_data.d_dsm_kroot_message.ks = 4; | ||||
| @@ -860,6 +860,7 @@ void osnma_msg_receiver::process_mack_message() | ||||
|                 LOG(WARNING) << "But it will be processed for debugging purposes."; | ||||
|         } | ||||
|     // verify tesla key and add it to the container of verified keys if successful | ||||
|     // TODO not verify tesla key for each satellite if already verified. | ||||
|     bool retV = verify_tesla_key(d_osnma_data.d_mack_message.key, d_osnma_data.d_nav_data.TOW_sf0); | ||||
|     if(retV){ | ||||
|             d_tesla_keys.insert(std::pair(d_osnma_data.d_nav_data.TOW_sf0, d_osnma_data.d_mack_message.key)); | ||||
| @@ -1004,13 +1005,19 @@ bool osnma_msg_receiver::verify_tag(Tag& tag) | ||||
|     std::vector<uint8_t> m = build_message(tag); | ||||
|  | ||||
|     std::vector<uint8_t> mac; | ||||
|     if (d_osnma_data.d_dsm_kroot_message.mf == 0) // C: HMAC-SHA-256 | ||||
|     std::vector<uint8_t> applicable_key; | ||||
|     if (tag.ADKD == 0 || tag.ADKD == 4) | ||||
|         applicable_key = d_tesla_keys[tag.TOW + 30]; | ||||
|     else // ADKD 12 | ||||
|         applicable_key = d_tesla_keys[tag.TOW + 300]; | ||||
|  | ||||
|      if (d_osnma_data.d_dsm_kroot_message.mf == 0) // C: HMAC-SHA-256 | ||||
|         { | ||||
|             mac = d_crypto->computeHMAC_SHA_256(d_tesla_keys[tag.TOW+30], m); | ||||
|             mac = d_crypto->computeHMAC_SHA_256(applicable_key, m); | ||||
|         } | ||||
|     else if (d_osnma_data.d_dsm_kroot_message.mf == 1) // C: CMAC-AES | ||||
|         { | ||||
|             mac = d_crypto->computeCMAC_AES(d_tesla_keys[tag.TOW+30], m); | ||||
|             mac = d_crypto->computeCMAC_AES(applicable_key, m); | ||||
|         } | ||||
|  | ||||
|     // truncate the computed mac: trunc(l_t, mac(K,m)) Eq. 23 ICD | ||||
| @@ -1073,7 +1080,7 @@ std::vector<uint8_t> osnma_msg_receiver::build_message(const Tag& tag) | ||||
|     m.push_back(two_bits_nmas); | ||||
|  | ||||
|     // convert std::string to vector<uint8_t> | ||||
|     std::string ephemeris_iono_vector_2 = d_satellite_nav_data[tag.PRNa][tag.TOW-30].ephemeris_iono_vector_2; | ||||
|      std::string ephemeris_iono_vector_2 = d_satellite_nav_data[tag.PRNa][tag.TOW - 30].ephemeris_iono_vector_2; | ||||
|     std::vector<uint8_t> ephemeris_iono_vector_2_bytes = d_helper->bytes(ephemeris_iono_vector_2); | ||||
|  | ||||
|     // Convert and add ephemeris_iono_vector_2 into the vector | ||||
|   | ||||
| @@ -44,9 +44,6 @@ protected: | ||||
|         std::string merkleFilePath = "/home/cgm/CLionProjects/osnma/data/OSNMA_MerkleTree_20230803105953_newPKID_1.xml"; | ||||
|         osnma = osnma_msg_receiver_make(pemFilePath, merkleFilePath); | ||||
|     } | ||||
|     void TearDown() override{ | ||||
|         google::ShutdownGoogleLogging(); | ||||
|     } | ||||
|  | ||||
| public: | ||||
|     static std::vector<uint8_t> parseNavBits(const std::string& hex); | ||||
| @@ -122,6 +119,7 @@ TEST_F(OsnmaMsgReceiverTest, OsnmaTestVectorsSimulation) | ||||
|                     std::array<uint32_t, 15> mack{}; | ||||
|                     byte_index = offset_byte; // reset byte_index to the offset position for the next test vector. Offset is updated at the end of each Subframe (every 30 s or 450 Bytes) | ||||
|                     std::map<uint8_t, std::bitset<128>> words; | ||||
|  | ||||
|                     for (int idx = 0; idx < SIZE_SUBFRAME_PAGES; ++idx)    // extract all pages of a subframe | ||||
|                         { | ||||
|                             // extract bytes of complete page (odd+even) -- extract SIZE_PAGE from tv.navBits, starting from byte_index | ||||
| @@ -225,8 +223,6 @@ TEST_F(OsnmaMsgReceiverTest, OsnmaTestVectorsSimulation) | ||||
|                                     uint8_t length = param.second.second; | ||||
|  | ||||
|                                     // Extract the required bits | ||||
|                                     std::bitset<128> word = words[wordKey]; | ||||
|  | ||||
|                                     osnmaMsg_sptr->EphemerisClockAndStatusData_2 += words[wordKey]. | ||||
|                                                                                     to_string().substr( | ||||
|                                                                                             start, length); | ||||
| @@ -333,6 +329,19 @@ std::string OsnmaMsgReceiverTest::bytes_to_str(const std::vector<uint8_t>& bytes | ||||
|         } | ||||
|     return bit_string; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * @brief Extracts a range of bytes from a TestVector's navBits vector. | ||||
|  * | ||||
|  * This function extracts a extracts the bytes of complete page (odd+even) | ||||
|  * from the navBits vector of a TestVector object. | ||||
|  * | ||||
|  * | ||||
|  * @param tv The TestVector object from which to extract bytes. | ||||
|  * @param byte_index The index of the first byte to extract. | ||||
|  * @param num_bytes The number of bytes to extract. | ||||
|  * @return A vector containing the extracted bytes, or an empty vector if extraction is not possible. | ||||
|  */ | ||||
| std::vector<uint8_t> OsnmaMsgReceiverTest::extract_page_bytes(const TestVector& tv, const int byte_index, const int num_bytes) | ||||
| { | ||||
|     // Ensure we don't go beyond the end of tv.navBits | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 cesaaargm
					cesaaargm