// This file was extracted from the TCG Published
// Trusted Platform Module Library
// Part 3: Commands
// Family "2.0"
// Level 00 Revision 01.16
// October 30, 2014

#include "InternalRoutines.h"
#include "EC_Ephemeral_fp.h"
#ifdef TPM_ALG_ECC
//
//
//     Error Returns                    Meaning
//
//     TPM_RC_NO_RESULT                 private key generation failed
//
TPM_RC
TPM2_EC_Ephemeral(
   EC_Ephemeral_In       *in,               // IN: input parameter list
   EC_Ephemeral_Out      *out               // OUT: output parameter list
   )
{
   TPM2B_ECC_PARAMETER          r;

   // Get the random value that will be used in the point multiplications
   // Note: this does not commit the count.
   if(!CryptGenerateR(&r,
                      NULL,
                      in->curveID,
                      NULL))
       return TPM_RC_NO_RESULT;

   CryptEccPointMultiply(&out->Q.t.point, in->curveID, &r, NULL);

   // commit the count value
   out->counter = CryptCommit();

   return TPM_RC_SUCCESS;
}
#endif
