KeyCharacteristics implement Parcelable interface

Simplify the code and prepare for the switch to cpp-aidl generated
interface, proxy and stub file.

Change-Id: If4cd831b2bbeaa305393a4732b72231ce596f5ef
Signed-off-by: Bin Chen <pierr.chen@gmail.com>
diff --git a/keystore/IKeystoreService.cpp b/keystore/IKeystoreService.cpp
index 2996659..78e36a8 100644
--- a/keystore/IKeystoreService.cpp
+++ b/keystore/IKeystoreService.cpp
@@ -182,7 +182,8 @@
     keymaster_free_characteristics(&characteristics);
 }
 
-void KeyCharacteristics::readFromParcel(const Parcel& in) {
+status_t KeyCharacteristics::readFromParcel(const Parcel* inn) {
+    const Parcel& in = *inn;
     size_t length = 0;
     keymaster_key_param_t* params = readParamList(in, &length);
     characteristics.sw_enforced.params = params;
@@ -191,9 +192,10 @@
     params = readParamList(in, &length);
     characteristics.hw_enforced.params = params;
     characteristics.hw_enforced.length = length;
+    return OK;
 }
 
-void KeyCharacteristics::writeToParcel(Parcel* out) const {
+status_t KeyCharacteristics::writeToParcel(Parcel* out) const {
     if (characteristics.sw_enforced.params) {
         out->writeInt32(characteristics.sw_enforced.length);
         for (size_t i = 0; i < characteristics.sw_enforced.length; i++) {
@@ -212,6 +214,7 @@
     } else {
         out->writeInt32(0);
     }
+    return OK;
 }
 
 KeymasterCertificateChain::KeymasterCertificateChain() {
@@ -1024,8 +1027,8 @@
             ALOGD("generateKey() caught exception %d\n", err);
             return KM_ERROR_UNKNOWN_ERROR;
         }
-        if (reply.readInt32() != 0 && outCharacteristics) {
-            outCharacteristics->readFromParcel(reply);
+        if (outCharacteristics) {
+            reply.readParcelable(outCharacteristics);
         }
         return ret;
     }
@@ -1059,8 +1062,8 @@
             ALOGD("getKeyCharacteristics() caught exception %d\n", err);
             return KM_ERROR_UNKNOWN_ERROR;
         }
-        if (reply.readInt32() != 0 && outCharacteristics) {
-            outCharacteristics->readFromParcel(reply);
+        if (outCharacteristics) {
+            reply.readParcelable(outCharacteristics);
         }
         return ret;
     }
@@ -1089,8 +1092,8 @@
             ALOGD("importKey() caught exception %d\n", err);
             return KM_ERROR_UNKNOWN_ERROR;
         }
-        if (reply.readInt32() != 0 && outCharacteristics) {
-            outCharacteristics->readFromParcel(reply);
+        if (outCharacteristics) {
+            reply.readParcelable(outCharacteristics);
         }
         return ret;
     }
@@ -1676,8 +1679,7 @@
                                       &outCharacteristics);
             reply->writeNoException();
             reply->writeInt32(ret);
-            reply->writeInt32(1);
-            outCharacteristics.writeToParcel(reply);
+            reply->writeParcelable(outCharacteristics);
             return NO_ERROR;
         }
         case GET_KEY_CHARACTERISTICS: {
@@ -1690,8 +1692,7 @@
                                             &outCharacteristics);
             reply->writeNoException();
             reply->writeInt32(ret);
-            reply->writeInt32(1);
-            outCharacteristics.writeToParcel(reply);
+            reply->writeParcelable(outCharacteristics);
             return NO_ERROR;
         }
         case IMPORT_KEY: {
@@ -1712,9 +1713,7 @@
                                     &outCharacteristics);
             reply->writeNoException();
             reply->writeInt32(ret);
-            reply->writeInt32(1);
-            outCharacteristics.writeToParcel(reply);
-
+            reply->writeParcelable(outCharacteristics);
             return NO_ERROR;
         }
         case EXPORT_KEY: {