aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2021-02-26 06:03:17 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-02-26 06:03:17 +0000
commitcede7527af654dcdfd9c2defa4024909dd18a712 (patch)
tree377eb22de2f093bcb6741192e8ac9d4eaa1a6cb8
parentb878d10fb49cda48a1a2d7059536a40430929efc (diff)
parent6925383544ffeb335a7aab1735634641bf5c44ce (diff)
downloadcuttlefish-cede7527af654dcdfd9c2defa4024909dd18a712.tar.gz
Merge "Add cuttlefish implementation for setCarrierInfoForImsiEncryption_1_6" am: 6925383544
Original change: https://android-review.googlesource.com/c/device/google/cuttlefish/+/1585023 MUST ONLY BE SUBMITTED BY AUTOMERGER Change-Id: I3a1670e54f97fbc8f5dadbd892e4a6c609602079
-rw-r--r--guest/hals/ril/reference-libril/ril.h26
-rw-r--r--guest/hals/ril/reference-libril/ril_service.cpp39
2 files changed, 65 insertions, 0 deletions
diff --git a/guest/hals/ril/reference-libril/ril.h b/guest/hals/ril/reference-libril/ril.h
index 32b29bbc5..15730a6c9 100644
--- a/guest/hals/ril/reference-libril/ril.h
+++ b/guest/hals/ril/reference-libril/ril.h
@@ -112,6 +112,8 @@ extern "C" {
* RIL_REQUEST_SET_DATA_THROTTLING
* RIL_REQUEST_GET_SYSTEM_SELECTION_CHANNELS
* RIL_REQUEST_GET_ALLOWED_NETWORK_TYPE_BITMAP
+ * Updated data structures: RIL_CarrierInfoForImsiEncryption_v16
+ * New data structure: RIL_PublicKeyType
*/
#define RIL_VERSION 12
#define LAST_IMPRECISE_RIL_VERSION 12 // Better self-documented name
@@ -853,6 +855,30 @@ typedef struct {
} RIL_CarrierInfoForImsiEncryption;
+/**
+ * Public key type from carrier certificate.
+ */
+typedef enum {
+ EPDG = 1, /* Key type to be used for ePDG */
+ WLAN = 2, /* Key type to be used for WLAN */
+} RIL_PublicKeyType;
+
+typedef struct {
+ char* mcc; /* MCC of the Carrier. */
+ char* mnc; /* MNC of the Carrier. */
+ uint8_t* carrierKey; /* Public Key from the Carrier used to encrypt the
+ * IMSI/IMPI.
+ */
+ int32_t carrierKeyLength; /* Length of the Public Key. */
+ char* keyIdentifier; /* The keyIdentifier Attribute value pair that helps
+ * a server locate the private key to decrypt the
+ * permanent identity.
+ */
+ int64_t expirationTime; /* Date-Time (in UTC) when the key will expire. */
+ RIL_PublicKeyType keyType; /* Public key type */
+
+} RIL_CarrierInfoForImsiEncryption_v16;
+
/* See RIL_REQUEST_LAST_CALL_FAIL_CAUSE */
typedef enum {
CALL_FAIL_UNOBTAINABLE_NUMBER = 1,
diff --git a/guest/hals/ril/reference-libril/ril_service.cpp b/guest/hals/ril/reference-libril/ril_service.cpp
index d8c5b3bbd..2141bb954 100644
--- a/guest/hals/ril/reference-libril/ril_service.cpp
+++ b/guest/hals/ril/reference-libril/ril_service.cpp
@@ -636,6 +636,9 @@ struct RadioImpl_1_6 : public V1_6::IRadio {
Return<void> getVoiceRegistrationState_1_6(int32_t serial);
Return<void> getDataRegistrationState_1_6(int32_t serial);
Return<void> getAllowedNetworkTypeBitmap(uint32_t serial);
+ Return<void> setCarrierInfoForImsiEncryption_1_6(
+ int32_t serial,
+ const ::android::hardware::radio::V1_6::ImsiEncryptionInfo& imsiEncryptionInfo);
};
struct OemHookImpl : public IOemHook {
@@ -4639,6 +4642,42 @@ Return<void> RadioImpl_1_6::getSystemSelectionChannels(int32_t serial) {
return Void();
}
+Return<void> RadioImpl_1_6::setCarrierInfoForImsiEncryption_1_6(
+ int32_t serial, const V1_6::ImsiEncryptionInfo& data) {
+#if VDBG
+ RLOGD("setCarrierInfoForImsiEncryption_1_6: serial %d", serial);
+#endif
+ RequestInfo* pRI = android::addRequestToList(serial, mSlotId,
+ RIL_REQUEST_SET_CARRIER_INFO_IMSI_ENCRYPTION);
+ if (pRI == NULL) {
+ return Void();
+ }
+
+ RIL_CarrierInfoForImsiEncryption_v16 imsiEncryption = {};
+
+ if (!copyHidlStringToRil(&imsiEncryption.mnc, data.base.mnc, pRI)) {
+ return Void();
+ }
+ if (!copyHidlStringToRil(&imsiEncryption.mcc, data.base.mcc, pRI)) {
+ memsetAndFreeStrings(1, imsiEncryption.mnc);
+ return Void();
+ }
+ if (!copyHidlStringToRil(&imsiEncryption.keyIdentifier, data.base.keyIdentifier, pRI)) {
+ memsetAndFreeStrings(2, imsiEncryption.mnc, imsiEncryption.mcc);
+ return Void();
+ }
+ imsiEncryption.carrierKeyLength = data.base.carrierKey.size();
+ imsiEncryption.carrierKey = new uint8_t[imsiEncryption.carrierKeyLength];
+ memcpy(imsiEncryption.carrierKey, data.base.carrierKey.data(), imsiEncryption.carrierKeyLength);
+ imsiEncryption.expirationTime = data.base.expirationTime;
+ imsiEncryption.keyType = (RIL_PublicKeyType)data.keyType;
+
+ CALL_ONREQUEST(pRI->pCI->requestNumber, &imsiEncryption,
+ sizeof(RIL_CarrierInfoForImsiEncryption_v16), pRI, mSlotId);
+ delete (imsiEncryption.carrierKey);
+ return Void();
+}
+
// OEM hook methods:
Return<void> OemHookImpl::setResponseFunctions(
const ::android::sp<IOemHookResponse>& oemHookResponseParam,