/*############################################################################
# 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_BITSUPPLIER_H_
#define EPID_COMMON_BITSUPPLIER_H_
/*!
* \file
* \brief Random data supplier interface.
*/
#if defined(_WIN32) || defined(_WIN64)
#define __STDCALL __stdcall
#else
#define __STDCALL
#endif
/// Generates random data.
/*!
The SDK provides the ::BitSupplier as a function
prototype so that you will know the requirements for your
own implementation of a random number generator.
You need to pass a pointer to your
implementation of the random number generator into
methods that require it.
For an example of how a BitSupplier is created, see
the `signmsg` example.
\param[out] rand_data destination buffer for random data
generated by BitSupplier. The buffer will receive
`num_bits` of random data.
\param[in] num_bits specifies the size of the random
data, in bits, to be generated.
\param[in] user_data user data that will be passed to the
random number generator. The usage of this data is specific
to the implementation of the BitSupplier. For example, this
could be used to pass a pointer to a data structure
that maintains state across calls to your BitSupplier.
\returns zero on success and non-zero value on error.
\ingroup EpidCommon
*/
typedef int(__STDCALL* BitSupplier)(unsigned int* rand_data, int num_bits,
void* user_data);
#endif // EPID_COMMON_BITSUPPLIER_H_