1#include <android-base/logging.h> 2#include <binder/IServiceManager.h> 3#include <keystore/IKeystoreService.h> 4#include <private/android_filesystem_config.h> 5 6#include "include/wifikeystorehal/keystore.h" 7 8namespace android { 9namespace system { 10namespace wifi { 11namespace keystore { 12namespace V1_0 { 13namespace implementation { 14// Methods from ::android::hardware::wifi::keystore::V1_0::IKeystore follow. 15Return<void> Keystore::getBlob(const hidl_string& key, getBlob_cb _hidl_cb) { 16 sp<IKeystoreService> service = interface_cast<IKeystoreService>( 17 defaultServiceManager()->getService( 18 String16("android.security.keystore"))); 19 if (service == nullptr) { 20 _hidl_cb(KeystoreStatusCode::ERROR_UNKNOWN, {}); 21 return Void(); 22 } 23 hidl_vec<uint8_t> value; 24 // Retrieve the blob as wifi user. 25 auto ret = service->get(String16(key.c_str()), AID_WIFI, &value); 26 if (!ret.isOk()) { 27 _hidl_cb(KeystoreStatusCode::ERROR_UNKNOWN, {}); 28 return Void(); 29 } 30 _hidl_cb(KeystoreStatusCode::SUCCESS, value); 31 return Void(); 32} 33 34Return<void> Keystore::getPublicKey( 35 const hidl_string& keyId, getPublicKey_cb _hidl_cb) { 36 sp<IKeystoreService> service = interface_cast<IKeystoreService>( 37 defaultServiceManager()->getService( 38 String16("android.security.keystore"))); 39 if (service == nullptr) { 40 _hidl_cb(KeystoreStatusCode::ERROR_UNKNOWN, {}); 41 return Void(); 42 } 43 hidl_vec<uint8_t> pubkey; 44 auto ret = service->get_pubkey(String16(keyId.c_str()), &pubkey); 45 if (!ret.isOk()) { 46 _hidl_cb(KeystoreStatusCode::ERROR_UNKNOWN, {}); 47 return Void(); 48 } 49 _hidl_cb(KeystoreStatusCode::SUCCESS, pubkey); 50 return Void(); 51} 52 53Return<void> Keystore::sign( 54 const hidl_string& keyId, const hidl_vec<uint8_t>& dataToSign, 55 sign_cb _hidl_cb) { 56 sp<IKeystoreService> service = interface_cast<IKeystoreService>( 57 defaultServiceManager()->getService( 58 String16("android.security.keystore"))); 59 if (service == nullptr) { 60 _hidl_cb(KeystoreStatusCode::ERROR_UNKNOWN, {}); 61 return Void(); 62 } 63 hidl_vec<uint8_t> signedData; 64 auto ret = service->sign(String16(keyId.c_str()), dataToSign, &signedData); 65 if (!ret.isOk()) { 66 _hidl_cb(KeystoreStatusCode::ERROR_UNKNOWN, {}); 67 return Void(); 68 } 69 _hidl_cb(KeystoreStatusCode::SUCCESS, signedData); 70 return Void(); 71} 72 73IKeystore* HIDL_FETCH_IKeystore(const char* /* name */) { 74 return new Keystore(); 75} 76} // namespace implementation 77} // namespace V1_0 78} // namespace keystore 79} // namespace wifi 80} // namespace system 81} // namespace android 82