// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef TRUNKS_OPENSSL_UTILITY_H_
#define TRUNKS_OPENSSL_UTILITY_H_

#include <openssl/ec.h>

#include "trunks/tpm_generated.h"
#include "trunks/trunks_export.h"

namespace trunks {

// Converts the ECC |point| in the TPMS_ECC_POINT format to the OpenSSL EC_POINT
// format with the given curve group |ec_group|. If succeeded, stores the result
// in |ec_point| and returns true; otherwise, returns false.
//
// |ec_group| and |ec_point| should already be initialized (e.g., by calling
// EC_GROUP_new() and EC_POINT_new()).
TRUNKS_EXPORT bool TpmToOpensslEccPoint(const TPMS_ECC_POINT& point,
                                        const EC_GROUP& ec_group,
                                        EC_POINT* ec_point);

// Converts the ECC |point| in the OpenSSL EC_POINT format to the TPMS_ECC_POINT
// format with the given curve group |ec_group|. If succeeded, stores the result
// in |ecc_point| and returns true; otherwise, returns false.
//
// The coordinates in |ecc_point| will be zero-padded to |coord_size| bytes if
// the original result is smaller. However, |coord_size| shouldn't be larger
// than MAX_ECC_KEY_BYTES.
//
// |ec_group| and |point| should already be initialized (e.g., by calling
// EC_GROUP_new() and EC_POINT_new()). |ecc_point| shouldn't be nullptr.
TRUNKS_EXPORT bool OpensslToTpmEccPoint(const EC_GROUP& ec_group,
                                        const EC_POINT& point,
                                        size_t coord_size,
                                        TPMS_ECC_POINT* ecc_point);

}  // namespace trunks

#endif  // TRUNKS_OPENSSL_UTILITY_H_
