#pragma once

#ifndef GEODE_DHIMPL_DHIMPL_H_
#define GEODE_DHIMPL_DHIMPL_H_

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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.
 */

#include <openssl-compat.h>
#include <openssl/asn1t.h>
#include <openssl/x509.h>

#include <string>
#include <vector>

#include "dhimpl_export.h"

#define DH_ERR_NO_ERROR 0
#define DH_ERR_UNSUPPORTED_ALGO 1
#define DH_ERR_ILLEGAL_KEYSIZE 2
#define DH_ERR_SUBJECT_NOT_FOUND 3
#define DH_ERR_NO_CERTIFICATES 4
#define DH_ERR_INVALID_SIGN 5

#ifdef _DEBUG
#define LOGDH printf
#else
#define LOGDH(...)
#endif

//  We need to declare our own structures and macros for
// DH public key x509 encoding because it's not available in
// OpenSSL yet.
typedef struct DH_pubkey_st {
  X509_ALGOR* algor;
  ASN1_BIT_STRING* public_key;
  EVP_PKEY* pkey;
} DH_PUBKEY;

extern "C" {
DHIMPL_EXPORT int gf_initDhKeys(const char* dhAlgo, const char* ksPath);
DHIMPL_EXPORT void gf_clearDhKeys(void);
DHIMPL_EXPORT unsigned char* gf_getPublicKey(int* len);
DHIMPL_EXPORT void gf_setPublicKeyOther(const unsigned char* pubkey,
                                        int length);
DHIMPL_EXPORT void gf_computeSharedSecret(void);
DHIMPL_EXPORT unsigned char* gf_encryptDH(const unsigned char* cleartext,
                                          int len, int* retLen);
DHIMPL_EXPORT bool gf_verifyDH(const char* subject,
                               const unsigned char* challenge, int challengeLen,
                               const unsigned char* response, int responseLen,
                               int* reason);
}

#endif  // GEODE_DHIMPL_DHIMPL_H_
