--- /dev/null
+/*
+ * Copyright (c) 1999-2001,2005-2007,2010-2012 Apple Inc. All Rights Reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+/*
+ * appleCdsa.h - interface between SSL and CDSA
+ */
+
+#ifndef _APPLE_CDSA_H_
+#define _APPLE_CDSA_H_ 1
+
+#include "ssl.h"
+#include "sslPriv.h"
+#include "sslContext.h"
+#include <Security/cssmtype.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern OSStatus sslSetUpSymmKey(
+ CSSM_KEY_PTR symKey,
+ CSSM_ALGORITHMS alg,
+ CSSM_KEYUSE keyUse, // CSSM_KEYUSE_ENCRYPT, etc.
+ CSSM_BOOL copyKey, // true: copy keyData false: set by reference
+ uint8 *keyData,
+ size_t keyDataLen); // in bytes
+
+extern OSStatus sslFreeKey(CSSM_CSP_HANDLE cspHand,
+ CSSM_KEY_PTR *key,
+ #if ST_KC_KEYS_NEED_REF
+ SecKeychainRef *kcItem);
+ #else /* !ST_KC_KEYS_NEED_REF */
+ void *kcItem);
+ #endif /* ST_KC_KEYS_NEED_REF*/
+
+extern OSStatus attachToCsp(SSLContext *ctx);
+extern OSStatus attachToCl(SSLContext *ctx);
+extern OSStatus attachToTp(SSLContext *ctx);
+extern OSStatus attachToAll(SSLContext *ctx);
+extern OSStatus detachFromAll(SSLContext *ctx);
+
+extern CSSM_DATA_PTR stMallocCssmData(size_t size);
+extern void stFreeCssmData(CSSM_DATA_PTR data, CSSM_BOOL freeStruct);
+extern OSStatus stSetUpCssmData(CSSM_DATA_PTR data, size_t length);
+
+
+/*
+ * Given a DER-encoded cert, obtain its public key as a CSSM_KEY_PTR.
+ */
+extern OSStatus sslPubKeyFromCert(
+ SSLContext *ctx,
+ const SSLBuffer *derCert,
+ CSSM_KEY_PTR *pubKey, // RETURNED
+ CSSM_CSP_HANDLE *cspHand); // RETURNED
+
+/*
+ * Verify a cert chain.
+ */
+extern OSStatus sslVerifyCertChain(
+ SSLContext *ctx,
+ const SSLCertificate *certChain,
+ bool arePeerCerts);
+
+/*
+ * Raw RSA/DSA sign/verify.
+ */
+OSStatus sslRawSign(
+ SSLContext *ctx,
+ SecKeyRef privKeyRef,
+ const UInt8 *plainText,
+ size_t plainTextLen,
+ UInt8 *sig, // mallocd by caller; RETURNED
+ size_t sigLen, // available
+ size_t *actualBytes); // RETURNED
+
+OSStatus sslRawVerify(
+ SSLContext *ctx,
+ const CSSM_KEY *pubKey,
+ CSSM_CSP_HANDLE cspHand,
+ const UInt8 *plainText,
+ size_t plainTextLen,
+ const UInt8 *sig,
+ size_t sigLen); // available
+
+/*
+ * Encrypt/Decrypt
+ */
+OSStatus sslRsaEncrypt(
+ SSLContext *ctx,
+ const CSSM_KEY *pubKey,
+ CSSM_CSP_HANDLE cspHand,
+ CSSM_PADDING padding, // CSSM_PADDING_PKCS1, CSSM_PADDING_APPLE_SSLv2
+ const UInt8 *plainText,
+ size_t plainTextLen,
+ UInt8 *cipherText, // mallocd by caller; RETURNED
+ size_t cipherTextLen, // available
+ size_t *actualBytes); // RETURNED
+OSStatus sslRsaDecrypt(
+ SSLContext *ctx,
+ SecKeyRef privKeyRef,
+ CSSM_PADDING padding, // CSSM_PADDING_PKCS1, CSSM_PADDING_APPLE_SSLv2
+ const UInt8 *cipherText,
+ size_t cipherTextLen,
+ UInt8 *plainText, // mallocd by caller; RETURNED
+ size_t plainTextLen, // available
+ size_t *actualBytes); // RETURNED
+
+/*
+ * Obtain size of key in bytes.
+ */
+extern uint32 sslKeyLengthInBytes(
+ const CSSM_KEY *key);
+
+/* Obtain max signature size in bytes. */
+extern OSStatus sslGetMaxSigSize(
+ const CSSM_KEY *privKey,
+ uint32 *maxSigSize);
+
+/*
+ * Get raw key bits from an RSA public key.
+ */
+OSStatus sslGetPubKeyBits(
+ SSLContext *ctx,
+ const CSSM_KEY *pubKey,
+ CSSM_CSP_HANDLE cspHand,
+ SSLBuffer *modulus, // data mallocd and RETURNED
+ SSLBuffer *exponent); // data mallocd and RETURNED
+
+/*
+ * Given raw RSA key bits, cook up a CSSM_KEY_PTR. Used in
+ * Server-initiated key exchange.
+ */
+OSStatus sslGetPubKeyFromBits(
+ SSLContext *ctx,
+ const SSLBuffer *modulus,
+ const SSLBuffer *exponent,
+ CSSM_KEY_PTR *pubKey, // mallocd and RETURNED
+ CSSM_CSP_HANDLE *cspHand); // RETURNED
+
+/*
+ * Given a DER-encoded cert, obtain its DER-encoded subject name.
+ */
+CSSM_DATA_PTR sslGetCertSubjectName(
+ SSLContext *ctx,
+ const CSSM_DATA_PTR cert);
+
+#if SSL_DEBUG
+void verifyTrustedRoots(SSLContext *ctx,
+ CSSM_DATA_PTR certs,
+ unsigned numCerts);
+#endif
+
+void * stAppMalloc (size_t size, void *allocRef);
+void stAppFree (void *mem_ptr, void *allocRef);
+void * stAppRealloc (void *ptr, size_t size, void *allocRef);
+void * stAppCalloc (uint32 num, size_t size, void *allocRef);
+
+OSStatus sslDhGenKeyPairClient(
+ SSLContext *ctx,
+ const SSLBuffer *prime,
+ const SSLBuffer *generator,
+ CSSM_KEY_PTR publicKey, // RETURNED
+ CSSM_KEY_PTR privateKey); // RETURNED
+OSStatus sslDhGenerateKeyPair(
+ SSLContext *ctx,
+ const SSLBuffer *paramBlob,
+ uint32 keySizeInBits,
+ CSSM_KEY_PTR publicKey, // RETURNED
+ CSSM_KEY_PTR privateKey); // RETURNED
+OSStatus sslDhKeyExchange(
+ SSLContext *ctx,
+ uint32 deriveSizeInBits,
+ SSLBuffer *exchanged);
+OSStatus sslEcdhGenerateKeyPair(
+ SSLContext *ctx,
+ SSL_ECDSA_NamedCurve namedCurve);
+OSStatus sslEcdhKeyExchange(
+ SSLContext *ctx,
+ SSLBuffer *exchanged);
+OSStatus sslVerifySelectedCipher(
+ SSLContext *ctx,
+ const SSLCipherSpec *selectedCipherSpec);
+
+/*
+ * Convert between SSLBuffer and CSSM_DATA, which are after all identical.
+ * No mallocs, just copy the pointer and length.
+ */
+#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 /* _APPLE_CDSA_H_ */