diff options
author | Orion Hodson <oth@google.com> | 2020-12-11 12:29:46 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2020-12-11 12:29:46 +0000 |
commit | 495ceb90fd2662ff1e060eb3ac8f33e3413c9507 (patch) | |
tree | 4f9e7667e236905c0d79bbdcba9ca5815fb6070a /security/keymint/support/keymint_utils.cpp | |
parent | f3ff53da1a1213c378e4a7a0ec9f5b71da76b31a (diff) | |
parent | 1ffcdebadd7229af65c575dc1271084b17fe42d7 (diff) |
Merge "Revert "Move keymint to android.hardware.security.""
Diffstat (limited to 'security/keymint/support/keymint_utils.cpp')
-rw-r--r-- | security/keymint/support/keymint_utils.cpp | 114 |
1 files changed, 0 insertions, 114 deletions
diff --git a/security/keymint/support/keymint_utils.cpp b/security/keymint/support/keymint_utils.cpp deleted file mode 100644 index cd4cca222a..0000000000 --- a/security/keymint/support/keymint_utils.cpp +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <regex.h> - -#include <android-base/properties.h> -#include <hardware/hw_auth_token.h> -#include <keymint_support/keymint_utils.h> - -#include <arpa/inet.h> - -namespace android::hardware::security::keymint { - -namespace { - -constexpr char kPlatformVersionProp[] = "ro.build.version.release"; -constexpr char kPlatformVersionRegex[] = "^([0-9]{1,2})(\\.([0-9]{1,2}))?(\\.([0-9]{1,2}))?"; -constexpr size_t kMajorVersionMatch = 1; -constexpr size_t kMinorVersionMatch = 3; -constexpr size_t kSubminorVersionMatch = 5; -constexpr size_t kPlatformVersionMatchCount = kSubminorVersionMatch + 1; - -constexpr char kPlatformPatchlevelProp[] = "ro.build.version.security_patch"; -constexpr char kPlatformPatchlevelRegex[] = "^([0-9]{4})-([0-9]{2})-[0-9]{2}$"; -constexpr size_t kYearMatch = 1; -constexpr size_t kMonthMatch = 2; -constexpr size_t kPlatformPatchlevelMatchCount = kMonthMatch + 1; - -uint32_t match_to_uint32(const char* expression, const regmatch_t& match) { - if (match.rm_so == -1) return 0; - - size_t len = match.rm_eo - match.rm_so; - std::string s(expression + match.rm_so, len); - return std::stoul(s); -} - -std::string wait_and_get_property(const char* prop) { - std::string prop_value; - while (!::android::base::WaitForPropertyCreation(prop)) - ; - prop_value = ::android::base::GetProperty(prop, "" /* default */); - return prop_value; -} - -} // anonymous namespace - -uint32_t getOsVersion(const char* version_str) { - regex_t regex; - if (regcomp(®ex, kPlatformVersionRegex, REG_EXTENDED)) { - return 0; - } - - regmatch_t matches[kPlatformVersionMatchCount]; - int not_match = - regexec(®ex, version_str, kPlatformVersionMatchCount, matches, 0 /* flags */); - regfree(®ex); - if (not_match) { - return 0; - } - - uint32_t major = match_to_uint32(version_str, matches[kMajorVersionMatch]); - uint32_t minor = match_to_uint32(version_str, matches[kMinorVersionMatch]); - uint32_t subminor = match_to_uint32(version_str, matches[kSubminorVersionMatch]); - - return (major * 100 + minor) * 100 + subminor; -} - -uint32_t getOsVersion() { - std::string version = wait_and_get_property(kPlatformVersionProp); - return getOsVersion(version.c_str()); -} - -uint32_t getOsPatchlevel(const char* patchlevel_str) { - regex_t regex; - if (regcomp(®ex, kPlatformPatchlevelRegex, REG_EXTENDED) != 0) { - return 0; - } - - regmatch_t matches[kPlatformPatchlevelMatchCount]; - int not_match = - regexec(®ex, patchlevel_str, kPlatformPatchlevelMatchCount, matches, 0 /* flags */); - regfree(®ex); - if (not_match) { - return 0; - } - - uint32_t year = match_to_uint32(patchlevel_str, matches[kYearMatch]); - uint32_t month = match_to_uint32(patchlevel_str, matches[kMonthMatch]); - - if (month < 1 || month > 12) { - return 0; - } - return year * 100 + month; -} - -uint32_t getOsPatchlevel() { - std::string patchlevel = wait_and_get_property(kPlatformPatchlevelProp); - return getOsPatchlevel(patchlevel.c_str()); -} - -} // namespace android::hardware::security::keymint |