/* Microsoft Reference Implementation for TPM 2.0
 *
 *  The copyright in this software is being made available under the BSD License,
 *  included below. This software may be subject to other third party and
 *  contributor rights, including patent rights, and no such rights are granted
 *  under this license.
 *
 *  Copyright (c) Microsoft Corporation
 *
 *  All rights reserved.
 *
 *  BSD License
 *
 *  Redistribution and use in source and binary forms, with or without modification,
 *  are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice, this list
 *  of conditions and the following disclaimer.
 *
 *  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.
 *
 *  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 _TABLE_MARSHAL_H_
#define _TABLE_MARSHAL_H_

// These are the basic unmarshaling types. This is in the first byte of
// each structure descriptor that is passed to Marshal()/Unmarshal() for processing.
#define UINT_MTYPE          0                          
#define VALUES_MTYPE        (UINT_MTYPE + 1)
#define TABLE_MTYPE         (VALUES_MTYPE + 1)
#define MIN_MAX_MTYPE       (TABLE_MTYPE + 1)
#define ATTRIBUTES_MTYPE    (MIN_MAX_MTYPE + 1)
#define STRUCTURE_MTYPE     (ATTRIBUTES_MTYPE + 1)
#define TPM2B_MTYPE         (STRUCTURE_MTYPE + 1)
#define TPM2BS_MTYPE        (TPM2B_MTYPE + 1)
#define LIST_MTYPE          (TPM2BS_MTYPE + 1) // TPML
#define ERROR_MTYPE         (LIST_MTYPE + 1)
#define NULL_MTYPE          (ERROR_MTYPE + 1)
#define COMPOSITE_MTYPE     (NULL_MTYPE + 1)   

//*** The Marshal Index 
// A structure is used to hold the values that guide the marshaling/unmarshaling of
// each of the types. Each structure has a name and an address. For a structure to 
// define a TPMS_name, the structure is a TPMS_name_MARSHAL_STRUCT and its
// index is TPMS_name_MARSHAL_INDEX. So, to get the proper structure, use the 
// associated marshal index. The marshal index is passed to Marshal() or Unmarshal()
// and those functions look up the proper structure.
// 
// To handle structures that allow a null value, the upper bit of each marshal
// index indicates if the null value is allowed. This is the NULL_FLAG. It is defined
// in TableMarshalIndex.h because it is needed by code outside of the marshaling
// code.

// A structure will have a list of marshal indexes to indicate what to unmarshal. When
// that index appears in a structure/union, the value will contain a flag to indicate
// that the NULL_FLAG should be SET on the call to Unmarshal() to unmarshal the type.
// The caller simply takes the entry and passes it to Unmarshal() to indicate that the
// NULL_FLAG is SET. There is also the opportunity to SET the NULL_FLAG in the called
// structure if the NULL_FLAG was set in the call to the calling structure. This is
// indicated by:
#define NULL_MASK       ~(NULL_FLAG)

// When looking up the value to marshal, the upper bit of the marshal index is
// masked to yield the actual index. The MSb is the flag bit that indicates if a
// null flag is set. Code does not verify that the bit is clear when the called object
// does not take a flag as this is a benign error.

// the modifier byte as used by each MTYPE shown as a structure. They are expressed
// as a bit maps below. However, the code uses masking and not bit fields. The types
// show below are just to help in understanding.
// NOTE: LSb0 bit numbering is assumed in these typedefs.
//
// When used in an UINT_MTYPE
typedef struct integerModifier {
    unsigned            size : 2;
    unsigned            sign : 1;
    unsigned            unused : 7;
} integerModifier;

// When used in a VALUES_MTYPE
typedef struct valuesModifier {
    unsigned            size : 2;
    unsigned            sign : 1;
    unsigned            unused : 5;
    unsigned            takesNull : 1;
} valuesModifier;

// When used in a TABLE_MTYPE
typedef struct tableModifier {
    unsigned            size : 2;
    unsigned            sign : 1;
    unsigned            unused : 3;
    unsigned            hasBits : 1;
    unsigned            takesNull : 1;
} tableModifier;

// the modifier byte for MIN_MAX_MTYPE
typedef struct minMaxModifier {
    unsigned            size : 2;
    unsigned            sign : 1;
    unsigned            unused : 3;
    unsigned            hasBits : 1;
    unsigned            takesNull : 1;
} minMaxModifier;

// the modifier byte for ATTRIBUTES_MTYPE
typedef struct attributesModifier {
    unsigned            size : 2;
    unsigned            sign : 1;
    unsigned            unused : 5;
} attributesModifier;

// the modifier byte is not present in a STRUCTURE_MTYPE or an TPM2B_MTYPE

// the modifier byte for a TPM2BS_MTYPE
typedef struct tpm2bsModifier {
    unsigned            offset : 4;
    unsigned            unused : 2;
    unsigned            sizeEqual : 1;
    unsigned            propigateNull : 1;
} tpm2bsModifier;

// the modifier byte for a LIST_MTYPE
typedef struct listModifier {
    unsigned            offset : 4;
    unsigned            unused : 2;
    unsigned            sizeEqual : 1;
    unsigned            propigateNull : 1;
} listModifier;


//*** Modifier Octet Values
// These are in used in anything that is an integer value. Theses would not be in
// structure modifier bytes (they would be used in values in structures but not the
// STRUCTURE_MTYPE header.
#define ONE_BYTES           (0)
#define TWO_BYTES           (1)
#define FOUR_BYTES          (2)
#define EIGHT_BYTES         (3)
#define SIZE_MASK           (0x3)
#define IS_SIGNED           (1 << 2)    // when the unmarshaled type is a signed value
#define SIGNED_MASK         (SIZE_MASK | IS_SIGNED)

// This may be used for any type except a UINT_MTYPE
#define TAKES_NULL          (1 << 7)    // when the type takes a null

// When referencing a structure, this flag indicates if a null is to be propagated
// to the referenced structure or type.
#define PROPAGATE_NULL      (TAKES_NULL)

// Can be used in min-max or table structures.
#define HAS_BITS            (1 << 6)    // when bit mask is present 

// In a union, we need to know if this is a union of constant arrays.
#define IS_ARRAY_UNION      (1 << 6)

// In a TPM2BS_MTYPE
#define SIZE_EQUAL          (1 << 6)
#define OFFSET_MASK         (0xF)

// Right now, there are three spare bits in the modifiers field.

// Within the descriptor word of each entry in a StructMarsh_mst, there is a selector
// field to determine which of the sub-types the entry represents and a field that is
// used to reference another structure entry. This is a 6-bit field allowing a
// structure to have 64 entries. This should be more than enough as the structures are
// not that long. As of now, only 10-bits of the descriptor word leaving room for
// expansion.

// These are the values used in a STRUCTURE_MTYPE to identify the sub-type of the 
// thing being processed
#define SIMPLE_STYPE                0
#define UNION_STYPE                 1
#define ARRAY_STYPE                 2

// The code used GET_ to get the element type and the compiler uses SET_ to initialize
// the value. The element type is the three bits (2:0).
#define GET_ELEMENT_TYPE(val)       (val & 7)
#define SET_ELEMENT_TYPE(val)       (val & 7)

// When an entry is an array or union, this references the structure entry that
// contains the dimension or selector value. The code then uses this number to look up
// the structure entry for that element to find out what it and where is it in memory.
// When this is not a reference, it is a simple type and it could be used as an array
// value or a union selector. When a simple value, this field contains the size
// of the associated value (ONE_BYTES, TWO_BYTES ...)
//
// The entry size/number is 6 bits (13:8).
#define GET_ELEMENT_NUMBER(val)     (((val) >> 8) & 0x3F)
#define SET_ELEMENT_NUMBER(val)     (((val) & 0x3F) << 8)
#define GET_ELEMENT_SIZE(val)       GET_ELEMENT_NUMBER(val)
#define SET_ELEMENT_SIZE(val)       SET_ELEMENT_NUMBER(val)
// This determines if the null flag is propagated to this type. If generate, the
// NULL_FLAG is SET in the index value. This flag is one bit (7)
#define ELEMENT_PROPAGATE           (PROPAGATE_NULL)

#define INDEX_MASK                  ((UINT16)NULL_MASK)

// This is used in all bit-field checks. These are used when a value that is checked
// is conditional (dependent on the compilation). For example, if AES_128 is (NO),
// then the bit associated with AES_128 will be 0. In some cases, the bit value is
// found by checking that the input is within the range of the table, and then using
// the (val - min) value to index the bit. This would be used when verifying that
// a particular algorithm is implemented. In other cases, there is a bit for each
// value in a table. For example, if checking the key sizes, there is a list of
// possible key sizes allowed by the algorithm registry and a bit field to indicate 
// if that key size is allowed in the implementation. The smallest bit field has 
// 32-bits because it is implemented as part of the 'values' array in structures 
// that allow bit fields.
#define IS_BIT_SET32(bit, bits)                                                     \
                        ((((UINT32 *)bits)[bit >> 5] & (1 << (bit & 0x1F))) != 0)

// For a COMPOSITE_MTYPE, the qualifiers byte has an element size and count.
#define SET_ELEMENT_COUNT(count)    ((count & 0x1F) << 3)
#define GET_ELEMENT_COUNT(val)      ((val  >> 3) & 0x1F)

#endif // _TABLE_MARSHAL_H_
