#ifndef _APPLE_CDSA_H_
#define _APPLE_CDSA_H_ 1
#include "ssl.h"
#include "sslPriv.h"
#include "sslctx.h"
#include "sslerrs.h"
#include <Security/cssmtype.h>
#ifdef __cplusplus
extern "C" {
#endif
#if SSL_DEBUG
extern void stPrintCdsaError(const char *op, CSSM_RETURN crtn);
extern char *stCssmErrToStr(CSSM_RETURN err);
#else
#define stPrintCdsaError(o, cr)
#endif
extern SSLErr sslFreeKey(CSSM_CSP_HANDLE cspHand,
CSSM_KEY_PTR *key,
#if ST_KEYCHAIN_ENABLE
KCItemRef *kcItem);
#else
void *kcItem);
#endif
extern SSLErr attachToCsp(SSLContext *ctx);
extern SSLErr attachToCl(SSLContext *ctx);
extern SSLErr attachToTp(SSLContext *ctx);
extern SSLErr attachToAll(SSLContext *ctx);
extern SSLErr detachFromAll(SSLContext *ctx);
extern CSSM_DATA_PTR stMallocCssmData(uint32 size);
extern void stFreeCssmData(CSSM_DATA_PTR data, CSSM_BOOL freeStruct);
extern SSLErr stSetUpCssmData(CSSM_DATA_PTR data, uint32 length);
extern SSLErr sslRand(
SSLContext *ctx,
SSLBuffer *buf);
extern SSLErr sslPubKeyFromCert(
SSLContext *ctx,
const SSLBuffer *derCert,
CSSM_KEY_PTR *pubKey, CSSM_CSP_HANDLE *cspHand);
extern SSLErr sslVerifyCertChain(
SSLContext *ctx,
const SSLCertificate *certChain);
SSLErr sslRsaRawSign(
SSLContext *ctx,
const CSSM_KEY_PTR privKey,
CSSM_CSP_HANDLE cspHand,
const UInt8 *plainText,
UInt32 plainTextLen,
UInt8 *sig, UInt32 sigLen, UInt32 *actualBytes);
SSLErr sslRsaRawVerify(
SSLContext *ctx,
const CSSM_KEY_PTR pubKey,
CSSM_CSP_HANDLE cspHand,
const UInt8 *plainText,
UInt32 plainTextLen,
const UInt8 *sig,
UInt32 sigLen);
SSLErr sslRsaEncrypt(
SSLContext *ctx,
const CSSM_KEY_PTR pubKey,
CSSM_CSP_HANDLE cspHand,
const UInt8 *plainText,
UInt32 plainTextLen,
UInt8 *cipherText, UInt32 cipherTextLen, UInt32 *actualBytes); SSLErr sslRsaDecrypt(
SSLContext *ctx,
const CSSM_KEY_PTR privKey,
CSSM_CSP_HANDLE cspHand,
const UInt8 *cipherText,
UInt32 cipherTextLen,
UInt8 *plainText, UInt32 plainTextLen, UInt32 *actualBytes);
extern UInt32 sslKeyLengthInBytes(
const CSSM_KEY_PTR key);
SSLErr sslGetPubKeyBits(
SSLContext *ctx,
const CSSM_KEY_PTR pubKey,
CSSM_CSP_HANDLE cspHand,
SSLBuffer *modulus, SSLBuffer *exponent);
SSLErr sslGetPubKeyFromBits(
SSLContext *ctx,
const SSLBuffer *modulus,
const SSLBuffer *exponent,
CSSM_KEY_PTR *pubKey, CSSM_CSP_HANDLE *cspHand);
#if 0
CSSM_BOOL sslVerifyCert(
SSLContext *ctx,
const CSSM_DATA_PTR subjectCert,
const CSSM_DATA_PTR issuerCert,
CSSM_CSP_HANDLE cspHand, CSSM_BOOL *subjectExpired); #endif
#if ST_KEYCHAIN_ENABLE
CSSM_DATA_PTR sslGetCertSubjectName(
SSLContext *ctx,
const CSSM_DATA_PTR cert);
#endif ST_KEYCHAIN_ENABLE
#if (SSL_DEBUG && ST_KEYCHAIN_ENABLE)
void verifyTrustedRoots(SSLContext *ctx,
CSSM_DATA_PTR certs,
unsigned numCerts);
#endif
void * stAppMalloc (uint32 size, void *allocRef);
void stAppFree (void *mem_ptr, void *allocRef);
void * stAppRealloc (void *ptr, uint32 size, void *allocRef);
void * stAppCalloc (uint32 num, uint32 size, void *allocRef);
#define SSLBUF_TO_CSSM(sb, cd) { \
(cd)->Length = (sb)->length; \
(cd)->Data = (sb)->data; \
}
#define CSSM_TO_SSLBUF(cd, sb) { \
(sb)->length = (cd)->Length; \
(sb)->data = (cd)->Data; \
}
#ifdef __cplusplus
}
#endif
#endif