diff --git a/system/bta/dm/bta_dm_act.cc b/system/bta/dm/bta_dm_act.cc
index 6203c3bbc2b06c006598369c0eb2718c219a1bb4..2ddf9c608b7c644ff5d09bdf714e12fbac41a0d5 100644
--- a/system/bta/dm/bta_dm_act.cc
+++ b/system/bta/dm/bta_dm_act.cc
@@ -4007,9 +4007,9 @@ void bta_dm_proc_open_evt(tBTA_GATTC_OPEN* p_data) {
 
 /*******************************************************************************
  *
- * Function         bta_dm_proc_open_evt
+ * Function         bta_dm_clear_event_filter
  *
- * Description      process BTA_GATTC_OPEN_EVT in DM.
+ * Description      clears out the event filter.
  *
  * Parameters:
  *
@@ -4055,6 +4055,20 @@ void bta_dm_disconnect_all_acls(void) {
   bluetooth::shim::BTM_DisconnectAllAcls();
 }
 
+/*******************************************************************************
+ *
+ * Function         bta_dm_le_rand
+ *
+ * Description      Generates a random number from the controller.
+ *
+ * Parameters:      |cb| Callback to receive the random number.
+ *
+ ******************************************************************************/
+void bta_dm_le_rand(LeRandCallback cb) {
+  VLOG(1) << "bta_dm_le_rand in bta_dm_act";
+  bluetooth::shim::BTM_LeRand(cb);
+}
+
 /*******************************************************************************
  *
  * Function         bta_dm_gattc_callback
diff --git a/system/bta/dm/bta_dm_api.cc b/system/bta/dm/bta_dm_api.cc
index 5e1a8787f7807c704307861a7689895a29518bfe..8ff1257d23ac953b9d168ec84d49bb1386835810 100644
--- a/system/bta/dm/bta_dm_api.cc
+++ b/system/bta/dm/bta_dm_api.cc
@@ -684,3 +684,17 @@ void BTA_DmClearEventFilter(void) {
   APPL_TRACE_API("BTA_DmClearEventFilter");
   do_in_main_thread(FROM_HERE, base::Bind(bta_dm_clear_event_filter));
 }
+
+/*******************************************************************************
+ *
+ * Function         BTA_DmLeRand
+ *
+ * Description      This function clears the event filter
+ *
+ * Returns          cb: callback to receive the resulting random number
+ *
+ ******************************************************************************/
+void BTA_DmLeRand(LeRandCallback cb) {
+  APPL_TRACE_API("BTA_DmLeRand");
+  do_in_main_thread(FROM_HERE, base::Bind(bta_dm_le_rand, cb));
+}
diff --git a/system/bta/dm/bta_dm_int.h b/system/bta/dm/bta_dm_int.h
index b428a1c714cab75a8184a5237457dbd2883af256..6e69e3a1555e6d0dc6e045d1540d1dfd568b3526 100644
--- a/system/bta/dm/bta_dm_int.h
+++ b/system/bta/dm/bta_dm_int.h
@@ -548,6 +548,7 @@ extern void bta_dm_clear_event_filter(void);
 extern void bta_dm_clear_event_mask(void);
 extern void bta_dm_clear_filter_accept_list(void);
 extern void bta_dm_disconnect_all_acls(void);
+extern void bta_dm_le_rand(LeRandCallback cb);
 
 uint8_t bta_dm_search_get_state();
 void bta_dm_search_set_state(uint8_t state);
diff --git a/system/bta/include/bta_api.h b/system/bta/include/bta_api.h
index b98c8e4b5aa044692d77fbf00fb345d1fa0cc344..a73d4912c293989223d57dbcc5511adaeb0db8fa 100644
--- a/system/bta/include/bta_api.h
+++ b/system/bta/include/bta_api.h
@@ -30,6 +30,7 @@
 #include <cstdint>
 #include <vector>
 
+#include "base/callback.h"
 #include "bt_target.h"  // Must be first to define build configuration
 #include "osi/include/log.h"
 #include "stack/include/bt_octets.h"
@@ -1205,4 +1206,16 @@ extern void BTA_VendorInit(void);
  ******************************************************************************/
 extern void BTA_DmClearEventFilter(void);
 
+using LeRandCallback = base::Callback<void(uint64_t)>;
+/*******************************************************************************
+ *
+ * Function         BTA_DmLeRand
+ *
+ * Description      This function clears the event filter
+ *
+ * Returns          cb: callback to receive the resulting random number
+ *
+ ******************************************************************************/
+extern void BTA_DmLeRand(LeRandCallback cb);
+
 #endif /* BTA_API_H */
diff --git a/system/main/shim/btm_api.cc b/system/main/shim/btm_api.cc
index 5d513af2aa0cf1d4ace9ec6d096f007f9d02eff8..48550641a92dbca181abb61d54253912f7f8b015 100644
--- a/system/main/shim/btm_api.cc
+++ b/system/main/shim/btm_api.cc
@@ -1353,3 +1353,8 @@ tBTM_STATUS bluetooth::shim::BTM_DisconnectAllAcls() {
   }
   return BTM_SUCCESS;
 }
+
+tBTM_STATUS bluetooth::shim::BTM_LeRand(LeRandCallback cb) {
+  controller_get_interface()->le_rand(cb);
+  return BTM_SUCCESS;
+}
diff --git a/system/main/shim/btm_api.h b/system/main/shim/btm_api.h
index e8fd228edaa93ebd0a5129f9342e72ff339fbe05..bd55da0ac2f35e13c3a31802a1eddd97b4287407 100644
--- a/system/main/shim/btm_api.h
+++ b/system/main/shim/btm_api.h
@@ -16,6 +16,7 @@
 
 #pragma once
 
+#include "base/callback.h"
 #include "device/include/esco_parameters.h"
 #include "stack/btm/btm_sec.h"
 #include "stack/btm/neighbor_inquiry.h"
@@ -1854,6 +1855,20 @@ tBTM_STATUS BTM_ClearFilterAcceptList(void);
  ******************************************************************************/
 tBTM_STATUS BTM_DisconnectAllAcls(void);
 
+/*******************************************************************************
+ *
+ * Function         BTM_LeRand
+ *
+ * Description      Retrieves a random number from the controller
+ *
+ * Parameters       cb - The callback to receive the random number
+ *
+ * Returns          Return btm status
+ *
+ ******************************************************************************/
+using LeRandCallback = base::Callback<void(uint64_t)>;
+tBTM_STATUS BTM_LeRand(LeRandCallback);
+
 /**
  * Send remote name request to GD shim Name module
  */
diff --git a/system/test/mock/mock_main_shim_btm_api.cc b/system/test/mock/mock_main_shim_btm_api.cc
index 92f5d7759fbb8c9268adad2e3f1e2efb601b2a63..54efb90ec73dc9ef918d8af34f0b1ab0eacbe035 100644
--- a/system/test/mock/mock_main_shim_btm_api.cc
+++ b/system/test/mock/mock_main_shim_btm_api.cc
@@ -444,3 +444,8 @@ tBTM_STATUS bluetooth::shim::BTM_DisconnectAllAcls() {
   mock_function_count_map[__func__]++;
   return BTM_SUCCESS;
 }
+
+tBTM_STATUS bluetooth::shim::BTM_LeRand(LeRandCallback cb) {
+  mock_function_count_map[__func__]++;
+  return BTM_SUCCESS;
+}