Add RSA signing support.

Change-Id: Icdcbd978d58c8764618b995571d1e8b649959ef0
diff --git a/key_blob.cpp b/key_blob.cpp
index e1a9c49..6c14e4a 100644
--- a/key_blob.cpp
+++ b/key_blob.cpp
@@ -53,6 +53,9 @@
         return;
     }
 
+    if (!ExtractKeyCharacteristics())
+        return;
+
     memcpy(nonce_, nonce, NONCE_LENGTH);
 
     key_material_length_ = key.key_material_size;
@@ -106,6 +109,9 @@
         return false;
     }
 
+    if (!ExtractKeyCharacteristics())
+        return false;
+
     encrypted_key_material_.reset(tmp_key_ptr);
     key_material_.reset(new uint8_t[key_material_length_]);
     return true;
@@ -213,4 +219,18 @@
     return derivation_data;
 }
 
+bool KeyBlob::ExtractKeyCharacteristics() {
+    if (!enforced_.GetTagValue(TAG_ALGORITHM, &algorithm_) &&
+        !unenforced_.GetTagValue(TAG_ALGORITHM, &algorithm_)) {
+        error_ = KM_ERROR_UNSUPPORTED_ALGORITHM;
+        return false;
+    }
+    if (!enforced_.GetTagValue(TAG_KEY_SIZE, &key_size_bits_) &&
+        !unenforced_.GetTagValue(TAG_KEY_SIZE, &key_size_bits_)) {
+        error_ = KM_ERROR_UNSUPPORTED_KEY_SIZE;
+        return false;
+    }
+    return true;
+}
+
 }  // namespace keymaster