#ifndef _SSLCRYPTO_H_
#define _SSLCRYPTO_H_ 1
#include "tls_handshake_priv.h"
#ifdef __cplusplus
extern "C" {
#endif
#include <corecrypto/ccdh.h>
#include <corecrypto/ccec.h>
int sslDhCreateKey(ccdh_const_gp_t params, ccdh_full_ctx_t *dhKey);
int sslDhExportPub(ccdh_full_ctx_t dhKey, tls_buffer *pubKey);
int sslDhKeyExchange(ccdh_full_ctx_t dhKey, const tls_buffer *dhPeerPublic, tls_buffer *preMasterSecret);
int sslDecodeDhParams(
ccdh_const_gp_t params,
tls_buffer *prime,
tls_buffer *generator);
int sslEncodeDhParams(
ccdh_gp_t *params,
const tls_buffer *prime,
const tls_buffer *generator);
int sslEcdhCreateKey(ccec_const_cp_t cp, ccec_full_ctx_t *ecdhKey);
int sslEcdhExportPub(ccec_full_ctx_t ecdhKey, tls_buffer *pubKey);
int sslEcdhKeyExchange(ccec_full_ctx_t ecdhKey, ccec_pub_ctx_t ecdhPeerPublic, tls_buffer *preMasterSecret);
int sslRand(tls_buffer *buf);
#include <corecrypto/ccrsa.h>
#include <corecrypto/ccec.h>
int sslFreePubKey(SSLPubKey *pubKey);
int sslFreePrivKey(tls_private_key_t *privKey);
int sslRawSign(
tls_private_key_t privKey,
const uint8_t *plainText,
size_t plainTextLen,
uint8_t *sig, size_t sigLen, size_t *actualBytes);
int sslRawVerify(
SSLPubKey *pubKey,
const uint8_t *plainText,
size_t plainTextLen,
const uint8_t *sig,
size_t sigLen);
int sslRsaSign(
tls_private_key_t privKey,
tls_hash_algorithm algId,
const uint8_t *plainText,
size_t plainTextLen,
uint8_t *sig, size_t sigLen, size_t *actualBytes);
int sslEcdsaSign(
tls_private_key_t privKey,
const uint8_t *plainText,
size_t plainTextLen,
uint8_t *sig, size_t sigLen, size_t *actualBytes);
int sslRsaVerify(
SSLPubKey *pubKey,
tls_hash_algorithm algId,
const uint8_t *plainText,
size_t plainTextLen,
const uint8_t *sig,
size_t sigLen);
int sslRsaEncrypt(
SSLPubKey *pubKey,
const uint8_t *plainText,
size_t plainTextLen,
uint8_t *cipherText, size_t cipherTextLen, size_t *actualBytes);
int sslRsaDecrypt(
tls_private_key_t privKey,
const uint8_t *cipherText,
size_t cipherTextLen,
uint8_t *plainText, size_t plainTextLen, size_t *actualBytes);
extern size_t sslPrivKeyLengthInBytes(
tls_private_key_t sslKey);
extern size_t sslPubKeyLengthInBytes(
SSLPubKey *sslKey);
extern int sslGetMaxSigSize(
tls_private_key_t privKey,
size_t *maxSigSize);
int sslGetPubKeyFromBits(
const tls_buffer *modulus,
const tls_buffer *exponent,
SSLPubKey *pubKey);
int sslGetEcPubKeyFromBits(
tls_named_curve namedCurve,
const tls_buffer *pubKeyBits,
SSLPubKey *pubKey);
#ifdef __cplusplus
}
#endif
#endif