/*
 * Copyright (C) 2015 The Android Open Source Project
 *
 * 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.
 */

#pragma once

#define HWRNG_PORT "com.android.trusty.hwrng"

/*
 * The hwrng protocol works as follows:
 * 1) Client opens channel to the server, then sends one or more
 *    requests and receives replies.
 *
 *    Client is allowed to keep the channel opened for the duration
 *    of the session.
 *
 *    Client is allowed to open multiple channels, all such channels
 *    should be treated independently.
 *
 *    Client is allowed to issue multiple requests over the same channel.
 *
 * 2) Server queues requests, and may reply with data as it
 *    is retrieved.
 *
 *    The response is comprised of only bytes of random data. No
 *    protocol header is provided.
 *
 *    Server is allowed to combine such requests together and return all
 *    results in a single message.
 *
 *    Server is allowed to return requested RNG data as a series of smaller
 *    chunks at it finds fit.
 */

/**
 * struct hwrng_req - Request structure for communicating with the hardware RNG
 * @len: the length in bytes of random data requested
 *
 */
struct hwrng_req {
    uint32_t len;
};
