@@ -120,44 +120,55 @@ static void wifi_init_sta()
120120 ESP_ERROR_CHECK (esp_wifi_start ());
121121}
122122
123- static void get_device_service_name (char * service_name , size_t max )
124- {
125- uint8_t eth_mac [6 ];
126- const char * ssid_prefix = "PROV_" ;
127- esp_wifi_get_mac (WIFI_IF_STA , eth_mac );
128- snprintf (service_name , max , "%s%02X%02X%02X" ,
129- ssid_prefix , eth_mac [3 ], eth_mac [4 ], eth_mac [5 ]);
130- }
131-
132123/* free the return value after use. */
133- static char * read_random_bytes_from_nvs ()
124+ static esp_err_t read_random_bytes_from_nvs (uint8_t * * random_bytes , size_t * len )
134125{
135126 nvs_handle handle ;
136127 esp_err_t err ;
137- size_t required_size = 0 ;
138- void * value ;
128+ * len = 0 ;
139129
140130 if ((err = nvs_open_from_partition (CONFIG_ESP_RMAKER_FACTORY_PARTITION_NAME , CREDENTIALS_NAMESPACE ,
141131 NVS_READONLY , & handle )) != ESP_OK ) {
142132 ESP_LOGD (TAG , "NVS open for %s %s %s failed with error %d" , CONFIG_ESP_RMAKER_FACTORY_PARTITION_NAME , CREDENTIALS_NAMESPACE , RANDOM_NVS_KEY , err );
143- return NULL ;
133+ return ESP_FAIL ;
144134 }
145135
146- if ((err = nvs_get_blob (handle , RANDOM_NVS_KEY , NULL , & required_size )) != ESP_OK ) {
147- ESP_LOGD (TAG , "Failed to read key %s with error %d size %d " , RANDOM_NVS_KEY , err , required_size );
136+ if ((err = nvs_get_blob (handle , RANDOM_NVS_KEY , NULL , len )) != ESP_OK ) {
137+ ESP_LOGD (TAG , "Error %d. Failed to read key %s. " , err , RANDOM_NVS_KEY );
148138 nvs_close (handle );
149- return NULL ;
139+ return ESP_ERR_NOT_FOUND ;
150140 }
151141
152- value = calloc (required_size + 1 , 1 ); /* + 1 for NULL termination */
153- if (value ) {
154- nvs_get_blob (handle , RANDOM_NVS_KEY , value , & required_size );
142+ * random_bytes = calloc (* len , 1 );
143+ if (* random_bytes ) {
144+ nvs_get_blob (handle , RANDOM_NVS_KEY , * random_bytes , len );
145+ nvs_close (handle );
146+ return ESP_OK ;
155147 }
156-
157148 nvs_close (handle );
158- return value ;
149+ return ESP_ERR_NO_MEM ;
150+ }
151+
152+ static esp_err_t get_device_service_name (char * service_name , size_t max )
153+ {
154+ uint8_t * nvs_random ;
155+ const char * ssid_prefix = "PROV_" ;
156+ size_t nvs_random_size = 0 ;
157+ if ((read_random_bytes_from_nvs (& nvs_random , & nvs_random_size ) != ESP_OK ) || nvs_random_size < 3 ) {
158+ uint8_t eth_mac [6 ];
159+ esp_wifi_get_mac (WIFI_IF_STA , eth_mac );
160+ snprintf (service_name , max , "%s%02x%02x%02x" , ssid_prefix , eth_mac [3 ], eth_mac [4 ], eth_mac [5 ]);
161+ } else {
162+ snprintf (service_name , max , "%s%02x%02x%02x" , ssid_prefix , nvs_random [nvs_random_size - 3 ],
163+ nvs_random [nvs_random_size - 2 ], nvs_random [nvs_random_size - 1 ]);
164+ }
165+ if (nvs_random ) {
166+ free (nvs_random );
167+ }
168+ return ESP_OK ;
159169}
160170
171+
161172static esp_err_t get_device_pop (char * pop , size_t max , app_wifi_pop_type_t pop_type )
162173{
163174 if (!pop || !max ) {
@@ -174,14 +185,13 @@ static esp_err_t get_device_pop(char *pop, size_t max, app_wifi_pop_type_t pop_t
174185 return err ;
175186 }
176187 } else if (pop_type == POP_TYPE_RANDOM ) {
177- char * nvs_pop = read_random_bytes_from_nvs ();
178- if (!nvs_pop ) {
188+ uint8_t * nvs_random ;
189+ size_t nvs_random_size = 0 ;
190+ if ((read_random_bytes_from_nvs (& nvs_random , & nvs_random_size ) != ESP_OK ) || nvs_random_size < 4 ) {
179191 return ESP_ERR_NOT_FOUND ;
180192 } else {
181- strncpy (pop , nvs_pop , max - 1 );
182- pop [max - 1 ] = 0 ;
183- free (nvs_pop );
184- nvs_pop = NULL ;
193+ snprintf (pop , max , "%02x%02x%02x%02x" , nvs_random [0 ], nvs_random [1 ], nvs_random [2 ], nvs_random [3 ]);
194+ free (nvs_random );
185195 return ESP_OK ;
186196 }
187197 } else {
0 commit comments