blob: ee3d9b1e8eb760e47926790fb09b02ed004d4630 [file] [log] [blame]
/*############################################################################
# Copyright 2016-2017 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################*/
#ifndef EPID_COMMON_1_1_SRC_COMMITMENT_H_
#define EPID_COMMON_1_1_SRC_COMMITMENT_H_
/*!
* \file
* \brief Commitment hash interface.
* \addtogroup EpidCommon
* @{
*/
#include "epid/common/1.1/types.h"
#include "epid/common/errors.h"
#include "epid/common/math/ecgroup.h"
#include "epid/common/math/finitefield.h"
#include "epid/common/math/hash.h"
#pragma pack(1)
/// Storage for values to create Intel(R) EPID 1.1 commitment in Sign and Verify
/// algorithms
typedef struct Epid11CommitValues {
BigNumStr p; ///< Intel(R) EPID 1.1 parameter p
Epid11G1ElemStr g1; ///< Intel(R) EPID 1.1 parameter g1
Epid11G2ElemStr g2; ///< Intel(R) EPID 1.1 parameter g2
Epid11G1ElemStr g3; ///< Intel(R) EPID 1.1 parameter g3
Epid11G1ElemStr h1; ///< Group public key value h1
Epid11G1ElemStr h2; ///< Group public key value h2
Epid11G2ElemStr w; ///< Group public key value w
Epid11G3ElemStr B; ///< Variable B computed in algorithm
Epid11G3ElemStr K; ///< Variable K computed in algorithm
Epid11G1ElemStr T1; ///< Variable T1 computed in algorithm
Epid11G1ElemStr T2; ///< Variable T2 computed in algorithm
Epid11G1ElemStr R1; ///< Variable R1 computed in algorithm
Epid11G1ElemStr R2; ///< Variable R2 computed in algorithm
Epid11G3ElemStr R3; ///< Variable R3 computed in algorithm
Epid11GtElemStr R4; ///< Variable R4 computed in algorithm
} Epid11CommitValues;
#pragma pack()
/// Set Intel(R) EPID 1.1 group public key related fields to Epid11CommitValues
/// structure
/*!
Set p, g1, g2, g3, h1, h2 and w fields of values argument.
\param[in] pub_key
Intel(R) EPID 1.1 Group public key
\param[out] values
Pointer to Epid11CommitValues structure to fill.
\returns ::EpidStatus
\see CalculateCommitmentHash
*/
EpidStatus SetKeySpecificEpid11CommitValues(Epid11GroupPubKey const* pub_key,
Epid11CommitValues* values);
/// Set Epid11CommitValues structure fields calculated in Intel(R) EPID 1.1 Sign
/// or Verify algorithm
/*!
Set B, K, T1, T2, R1, R2, R3 and R4 fields of values argument.
\param[in] B
Value of B to set
\param[in] K
Value of K to set
\param[in] T1
Value of T1 to set
\param[in] T2
Value of T2 to set
\param[in] R1
Value of R1 to set
\param[in] R2
Value of R2 to set
\param[in] R3
Value of R3 to set
\param[in] R4
Value of R4 to set
\param[in] G1
EcGroup containing element R1, R2
\param[in] G3
EcGroup containing element R3
\param[in] GT
FiniteField containing element R4
\param[out] values
Pointer to CommitValues structure to fill.
\returns ::EpidStatus
\see CalculateCommitmentHash
*/
EpidStatus SetCalculatedEpid11CommitValues(
Epid11G3ElemStr const* B, Epid11G3ElemStr const* K,
Epid11G1ElemStr const* T1, Epid11G1ElemStr const* T2, EcPoint const* R1,
EcPoint const* R2, EcPoint const* R3, FfElement const* R4, EcGroup* G1,
EcGroup* G3, FiniteField* GT, Epid11CommitValues* values);
/// Calculate Hash(t4 || nd || mSize || m) for Intel(R) EPID 1.1 Sign and Verfiy
/// algorithms
/*!
Calculate c = Hash(t4 || nd || mSize || m) where t4 is
Hash(p || g1 || g2 || g3 || h1 || h2 || w || B || K || T1 || T2 || R1 || R2 ||
R3 || R4).
\param[in] values
Commit values to hash
\param[in] msg
Message to hash
\param[in] msg_len
Size of msg buffer in bytes
\param[in] nd
80-bit big integer
\param[out] c
Result of calculation
\returns ::EpidStatus
\see SetKeySpecificCommitValues
\see SetCalculatedCommitValues
*/
EpidStatus CalculateEpid11CommitmentHash(Epid11CommitValues const* values,
void const* msg, uint32_t msg_len,
OctStr80 const* nd, Sha256Digest* c);
/*! @} */
#endif // EPID_COMMON_1_1_SRC_COMMITMENT_H_