194b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales/*
294b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales * Copyright 2015 The Android Open Source Project
394b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales *
494b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales * Licensed under the Apache License, Version 2.0 (the "License");
594b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales * you may not use this file except in compliance with the License.
694b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales * You may obtain a copy of the License at
794b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales *
894b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales *      http://www.apache.org/licenses/LICENSE-2.0
994b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales *
1094b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales * Unless required by applicable law or agreed to in writing, software
1194b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales * distributed under the License is distributed on an "AS IS" BASIS,
1294b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1394b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales * See the License for the specific language governing permissions and
1494b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales * limitations under the License.
1594b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales */
1694b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales
1794b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales#ifndef GATEKEEPER_PASSWORD_HANDLE_H_
1894b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales#define GATEKEEPER_PASSWORD_HANDLE_H_
1994b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales
2048a4f837d1a696f6edfd48270047b36a3d21086bAndres Morales#define HANDLE_FLAG_THROTTLE_SECURE 1
2148a4f837d1a696f6edfd48270047b36a3d21086bAndres Morales
2248a4f837d1a696f6edfd48270047b36a3d21086bAndres Morales#define HANDLE_VERSION_THROTTLE 2
2348a4f837d1a696f6edfd48270047b36a3d21086bAndres Morales
2494b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Moralesnamespace gatekeeper {
2594b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales
2694b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Moralestypedef uint64_t secure_id_t;
2794b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Moralestypedef uint64_t salt_t;
2894b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales/**
2994b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales * structure for easy serialization
3094b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales * and deserialization of password handles.
3194b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales */
3248a4f837d1a696f6edfd48270047b36a3d21086bAndres Moralesstatic const uint8_t HANDLE_VERSION = 2;
3394b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Moralesstruct __attribute__ ((__packed__)) password_handle_t {
3494b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales    // fields included in signature
3594b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales    uint8_t version;
3694b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales    secure_id_t user_id;
3748a4f837d1a696f6edfd48270047b36a3d21086bAndres Morales    uint64_t flags;
3894b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales
3994b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales    // fields not included in signature
4094b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales    salt_t salt;
4194b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales    uint8_t signature[32];
42aedf605d883b4ebade9c810eb39cbf5125a58c7dAndres Morales
43aedf605d883b4ebade9c810eb39cbf5125a58c7dAndres Morales    bool hardware_backed;
4494b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales};
4594b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales}
4694b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales
4794b201ee929de7ca8ee01c5b5aac5495ba749a30Andres Morales#endif // GATEKEEPER_PASSWORD_HANDLE_H_
48