/*############################################################################
# Copyright 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.
############################################################################*/
/// Validate native types
/*! \file */
#ifndef EPID_MEMBER_TINY_SRC_VALIDATE_H_
#define EPID_MEMBER_TINY_SRC_VALIDATE_H_
/// \cond
typedef struct FpElem FpElem;
typedef struct GroupPubKey GroupPubKey;
typedef struct NativeGroupPubKey NativeGroupPubKey;
typedef struct PrivKey PrivKey;
typedef struct NativePrivKey NativePrivKey;
typedef struct MembershipCredential MembershipCredential;
typedef struct NativeMembershipCredential NativeMembershipCredential;
typedef struct PairingState PairingState;
/// \endcond
/// Test if the elements of a Group Public Key are in appropriate ranges.
/*!
\param[in] input the value to test.
\returns A value different from zero (i.e., true) if indeed
all elements are in range. Zero (i.e., false) otherwise.
*/
int GroupPubKeyIsInRange(NativeGroupPubKey const* input);
/// Test if the elements of a Membership Credential are in appropriate ranges.
/*!
\param[in] input the value to test.
\returns A value different from zero (i.e., true) if indeed
all elements are in range. Zero (i.e., false) otherwise.
*/
int MembershipCredentialIsInRange(NativeMembershipCredential const* input);
/// Test if a Membership Credential is in fact in the specified group.
/*!
\param[in] input the value to test.
\param[in] f the f value.
\param[in] pubkey the group key.
\param[in] pairing_state previously computed pairing state.
\returns A value different from zero (i.e., true) if indeed
it is in the group. Zero (i.e., false) otherwise.
*/
int MembershipCredentialIsInGroup(NativeMembershipCredential const* input,
FpElem const* f,
NativeGroupPubKey const* pubkey,
PairingState const* pairing_state);
/// Test if the elements of a Private Key are in appropriate ranges.
/*!
\param[in] input the value to test.
\returns A value different from zero (i.e., true) if indeed
all elements are in range. Zero (i.e., false) otherwise.
*/
int PrivKeyIsInRange(NativePrivKey const* input);
/// Test if a Private Key is in fact in the specified group.
/*!
\param[in] input the value to test.
\param[in] pubkey the group key.
\param[in] pairing_state previously computed pairing state.
\returns A value different from zero (i.e., true) if indeed
it is in the group. Zero (i.e., false) otherwise.
*/
int PrivKeyIsInGroup(NativePrivKey const* input,
NativeGroupPubKey const* pubkey,
PairingState const* pairing_state);
#endif // EPID_MEMBER_TINY_SRC_VALIDATE_H_