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