--- /dev/null
+/*
+ * Copyright (c) 2000-2001 Apple Computer, Inc. All Rights Reserved.
+ *
+ * The contents of this file constitute Original Code as defined in and are
+ * subject to the Apple Public Source License Version 1.2 (the 'License').
+ * You may not use this file except in compliance with the License. Please obtain
+ * a copy of the License at http://www.apple.com/publicsource and read it before
+ * using this file.
+ *
+ * This 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.
+ */
+
+/*
+ * MacContext.h - AppleCSPContext for HMAC{SHA1,MD5}
+ */
+
+#ifndef _MAC_CONTEXT_H_
+#define _MAC_CONTEXT_H_
+
+#include <AppleCSPContext.h>
+#include <CommonCrypto/CommonHMAC.h>
+
+/*
+ * TLS Export Ciphers require HMAC calculation with a secret key
+ * size of 0 bytes. We'd really like to enforce a minimum key size equal
+ * the digest size, per RFC 2104, but TLS precludes that.
+ */
+#define HMAC_MIN_KEY_SIZE 0
+#define HMAC_SHA_MIN_KEY_SIZE HMAC_MIN_KEY_SIZE
+#define HMAC_MD5_MIN_KEY_SIZE HMAC_MIN_KEY_SIZE
+#define HMAC_MAX_KEY_SIZE 2048
+
+class MacContext : public AppleCSPContext {
+public:
+ MacContext(
+ AppleCSPSession &session,
+ CSSM_ALGORITHMS alg) :
+ AppleCSPContext(session),
+ mAlg(alg),
+ mDigestSize(0) { }
+ ~MacContext();
+
+ /* called out from CSPFullPluginSession....
+ * both generate and verify: */
+ void init(const Context &context, bool isSigning);
+ void update(const CssmData &data);
+
+ /* generate only */
+ void final(CssmData &out);
+
+ /* verify only */
+ void final(const CssmData &in);
+
+ size_t outputSize(bool final, size_t inSize);
+
+private:
+ CCHmacContext hmacCtx;
+ CSSM_ALGORITHMS mAlg;
+ uint32 mDigestSize;
+};
+
+#ifdef CRYPTKIT_CSP_ENABLE
+#include <security_cryptkit/HmacSha1Legacy.h>
+
+/* This version is bug-for-bug compatible with a legacy implementation */
+
+class MacLegacyContext : public AppleCSPContext {
+public:
+ MacLegacyContext(
+ AppleCSPSession &session,
+ CSSM_ALGORITHMS alg) :
+ AppleCSPContext(session), mHmac(NULL) { }
+ ~MacLegacyContext();
+
+ /* called out from CSPFullPluginSession....
+ * both generate and verify: */
+ void init(const Context &context, bool isSigning);
+ void update(const CssmData &data);
+
+ /* generate only */
+ void final(CssmData &out);
+
+ /* verify only */
+ void final(const CssmData &in);
+
+ size_t outputSize(bool final, size_t inSize);
+
+private:
+ hmacLegacyContextRef mHmac;
+};
+
+#endif /* CRYPTKIT_CSP_ENABLE */
+
+#endif /* _MAC_CONTEXT_H_ */