blob: ea562fda4b68173ab059647d6aae27a7c3972f4b [file] [log] [blame]
/*
* Copyright (c) 2013 TRUSTONIC LIMITED
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* 3. Neither the name of the TRUSTONIC LIMITED nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __TEE_UUID_ATTESTATION_H__
#define __TEE_UUID_ATTESTATION_H__
#include "tee_type.h"
// Sizes of the fields of attestation structure
#define AT_MAGIC_SIZE 8
#define AT_SIZE_SIZE sizeof(uint32_t)
#define AT_VERSION_SIZE sizeof(uint32_t)
#define AT_UUID_SIZE sizeof(TEE_UUID)
// Sizes of the fields used to generate signature
#define AT_TAG_SIZE 20
#define AT_SHA1_HASH_SIZE 20
// Max size of RSA modulus supported
#define AT_MODULUS_MAX_SIZE 256
// Max size of RSA public exponent supported
#define AT_PUBLIC_EXPO_MAX_SIZE 4
// Attestation version
#define AT_VERSION 1
// Name space ID (the UUID of the RSA OID)
const uint8_t RSA_OID_UUID[AT_UUID_SIZE] = {0x6b, 0x8e, 0x02, 0x6b, 0x63, 0xc1, 0x5d, 0x58, 0xb0, 0x64, 0x00, 0xd3, 0x51, 0x89, 0xce, 0x65};
// Magic word
const char MAGIC[AT_MAGIC_SIZE] = "TAUUID\0";
// Tag for signature generation
const char TAG[AT_TAG_SIZE]="Trusted Application";
// Public key structure
typedef struct uuid_public_key {
uint32_t type; // TEE TYPE RSA KEYPAIR: 0xa0000030
uint16_t modulus_bytes; // Length of the modulus in bytes
uint16_t exponent_bytes; // Length of the exponent in bytes
uint8_t data[]; // Key material
} uuid_public_key;
// Attestation structure
typedef struct uuid_attestation {
uint8_t magic[AT_MAGIC_SIZE]; // Magic word: "TAUUID\0\0"
uint32_t size; // Attestation size (4 bytes)
uint32_t version; // Version number: 1 (4 bytes)
uint8_t uuid[AT_UUID_SIZE]; // UUID
uuid_public_key key; // Public key
} uuid_attestation;
#endif /* __TEE_UUID_ATTESTATION_H__ */