54 lines
1.7 KiB
C
54 lines
1.7 KiB
C
// This file was extracted from the TCG Published
|
|
// Trusted Platform Module Library
|
|
// Part 4: Supporting Routines
|
|
// Family "2.0"
|
|
// Level 00 Revision 01.16
|
|
// October 30, 2014
|
|
|
|
#include "stdint.h"
|
|
#include "TpmBuildSwitches.h"
|
|
const char notReallyUnique[] =
|
|
"This is not really a unique value. A real unique value should"
|
|
" be generated by the platform.";
|
|
//
|
|
//
|
|
// _plat__GetUnique()
|
|
//
|
|
// This function is used to access the platform-specific unique value. This function places the unique value
|
|
// in the provided buffer (b) and returns the number of bytes transferred. The function will not copy more
|
|
// data than bSize.
|
|
//
|
|
// NOTE: If a platform unique value has unequal distribution of uniqueness and bSize is smaller than the size of the
|
|
// unique value, the bSize portion with the most uniqueness should be returned.
|
|
//
|
|
LIB_EXPORT uint32_t
|
|
_plat__GetUnique(
|
|
uint32_t which, // authorities (0) or details
|
|
uint32_t bSize, // size of the buffer
|
|
unsigned char *b // output buffer
|
|
)
|
|
{
|
|
const char *from = notReallyUnique;
|
|
uint32_t retVal = 0;
|
|
if(which == 0) // the authorities value
|
|
{
|
|
for(retVal = 0;
|
|
*from != 0 && retVal < bSize;
|
|
retVal++)
|
|
{
|
|
*b++ = *from++;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
#define uSize sizeof(notReallyUnique)
|
|
b = &b[((bSize < uSize) ? bSize : uSize) - 1];
|
|
for(retVal = 0;
|
|
*from != 0 && retVal < bSize;
|
|
retVal++)
|
|
{
|
|
*b-- = *from++;
|
|
}
|
|
}
|
|
return retVal;
|
|
}
|