Small enhancements to AuthorizationSet, to support softkeymaster
Change-Id: I09105b52c3542c11d2333c7788402c707373b028
diff --git a/authorization_set.cpp b/authorization_set.cpp
index 74758cc..01e66a5 100644
--- a/authorization_set.cpp
+++ b/authorization_set.cpp
@@ -103,6 +103,27 @@
error_ = error;
}
+void AuthorizationSet::CopyToParamSet(keymaster_key_param_set_t* set) const {
+ assert(set);
+
+ set->length = size();
+ set->params =
+ reinterpret_cast<keymaster_key_param_t*>(malloc(sizeof(keymaster_key_param_t) * size()));
+
+ for (size_t i = 0; i < size(); ++i) {
+ const keymaster_key_param_t src = (*this)[i];
+ keymaster_key_param_t& dst(set->params[i]);
+
+ dst = src;
+ keymaster_tag_type_t type = keymaster_tag_get_type(src.tag);
+ if (type == KM_BIGNUM || type == KM_BYTES) {
+ void* tmp = malloc(src.blob.data_length);
+ memcpy(tmp, src.blob.data, src.blob.data_length);
+ dst.blob.data = reinterpret_cast<uint8_t*>(tmp);
+ }
+ }
+}
+
int AuthorizationSet::find(keymaster_tag_t tag, int begin) const {
if (is_valid() != OK)
return -1;