diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2021-02-26 06:03:17 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-02-26 06:03:17 +0000 |
commit | cede7527af654dcdfd9c2defa4024909dd18a712 (patch) | |
tree | 377eb22de2f093bcb6741192e8ac9d4eaa1a6cb8 | |
parent | b878d10fb49cda48a1a2d7059536a40430929efc (diff) | |
parent | 6925383544ffeb335a7aab1735634641bf5c44ce (diff) | |
download | cuttlefish-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.h | 26 | ||||
-rw-r--r-- | guest/hals/ril/reference-libril/ril_service.cpp | 39 |
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, |