1cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden/* 2cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden * Copyright (C) 2016 The Android Open Source Project 3cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden * 4cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden * Licensed under the Apache License, Version 2.0 (the "License"); 5cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden * you may not use this file except in compliance with the License. 6cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden * You may obtain a copy of the License at 7cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden * 8cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden * http://www.apache.org/licenses/LICENSE-2.0 9cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden * 10cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden * Unless required by applicable law or agreed to in writing, software 11cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden * distributed under the License is distributed on an "AS IS" BASIS, 12cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden * See the License for the specific language governing permissions and 14cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden * limitations under the License. 15cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden */ 16cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden 17cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden#ifndef SYSTEM_KEYMASTER_KEYMASTER_CONFIGURATION_H_ 18cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden#define SYSTEM_KEYMASTER_KEYMASTER_CONFIGURATION_H_ 19cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden 20cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden#include <string> 21cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden 22cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden#include <stdint.h> 23cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden 24cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden#include <hardware/keymaster2.h> 25cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden#include <hardware/keymaster_defs.h> 26cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden 27cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willdennamespace keymaster { 28cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden 29cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden/** 30cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden * Retrieves OS version information from system build properties and configures the provided 31cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden * keymaster device. 32cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden */ 33cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willdenkeymaster_error_t ConfigureDevice(keymaster2_device_t* dev); 34cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden 35cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden/** 36cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden * Parses OS version string, returning in integer form. For example, "6.1.2" will be returned as 37cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden * 60102. Ignores any non-numeric suffix, and allows short build numbers, e.g. "6" -> 60000 and 38cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden * "6.1" -> 60100. Returns 0 if the string doesn't contain a numeric version number. 39cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden */ 40cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willdenuint32_t GetOsVersion(const char* version_string); 41cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden 42cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden/** 4323fe27baf78f53a44281f6f0f4169413e8770a72Shawn Willden * Retrieves and parses OS version information from build properties. Returns 0 if the string 4423fe27baf78f53a44281f6f0f4169413e8770a72Shawn Willden * doesn't contain a numeric version number. 4523fe27baf78f53a44281f6f0f4169413e8770a72Shawn Willden */ 4623fe27baf78f53a44281f6f0f4169413e8770a72Shawn Willdenuint32_t GetOsVersion(); 4723fe27baf78f53a44281f6f0f4169413e8770a72Shawn Willden 4823fe27baf78f53a44281f6f0f4169413e8770a72Shawn Willden/** 49cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden * Parses OS patch level string, returning year and month in integer form. For example, "2016-03-25" 50cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden * will be returned as 201603. Returns 0 if the string doesn't contain a date in the form 51cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden * YYYY-MM-DD. 52cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden */ 53cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willdenuint32_t GetOsPatchlevel(const char* patchlevel_string); 54cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden 5523fe27baf78f53a44281f6f0f4169413e8770a72Shawn Willden/** 5623fe27baf78f53a44281f6f0f4169413e8770a72Shawn Willden * Retrieves and parses OS patch level from build properties. Returns 0 if the string doesn't 5723fe27baf78f53a44281f6f0f4169413e8770a72Shawn Willden * contain a date in the form YYYY-MM-DD. 5823fe27baf78f53a44281f6f0f4169413e8770a72Shawn Willden */ 5923fe27baf78f53a44281f6f0f4169413e8770a72Shawn Willdenuint32_t GetOsPatchlevel(); 6023fe27baf78f53a44281f6f0f4169413e8770a72Shawn Willden 61cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden} // namespace keymaster 62cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden 63cddf3a443abf64f3d77c48886693179c0b8a35bbShawn Willden#endif // SYSTEM_KEYMASTER_KEYMASTER_CONFIGURATION_H_ 64