summaryrefslogtreecommitdiffstats
path: root/mDNSResponder/mDNSCore/CryptoAlg.h
diff options
context:
space:
mode:
Diffstat (limited to 'mDNSResponder/mDNSCore/CryptoAlg.h')
-rw-r--r--mDNSResponder/mDNSCore/CryptoAlg.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/mDNSResponder/mDNSCore/CryptoAlg.h b/mDNSResponder/mDNSCore/CryptoAlg.h
new file mode 100644
index 00000000..6cb3dc9d
--- /dev/null
+++ b/mDNSResponder/mDNSCore/CryptoAlg.h
@@ -0,0 +1,61 @@
+/* -*- Mode: C; tab-width: 4 -*-
+ *
+ * Copyright (c) 2011 Apple Computer, Inc. All rights reserved.
+ *
+ * Licensed 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.
+ */
+#ifndef __CRYPTO_ALG_H
+#define __CRYPTO_ALG_H
+
+typedef enum
+{
+ CRYPTO_ALG,
+ DIGEST_ALG,
+ ENC_ALG,
+} AlgType;
+
+typedef struct
+{
+ void *context;
+ AlgType type;
+ mDNSu8 alg;
+} AlgContext;
+
+typedef struct
+{
+ mStatus (*Create)(AlgContext *ctx);
+ mStatus (*Destroy)(AlgContext *ctx);
+ mDNSu32 (*Length)(AlgContext *ctx);
+ mStatus (*Add)(AlgContext *ctx, const void *data, mDNSu32 len);
+ // Verify the ctx using the key and compare it against signature/siglen
+ mStatus (*Verify)(AlgContext *ctx, mDNSu8 *key, mDNSu32 keylen, mDNSu8 *signature, mDNSu32 siglen);
+ // Encode the data and return the encoded data
+ mDNSu8* (*Encode)(AlgContext *ctx);
+ // Return the finalized data in data whose length is len (used by hash algorithms)
+ mStatus (*Final)(AlgContext *ctx, void *data, mDNSu32 len);
+} AlgFuncs;
+
+mDNSexport mStatus DigestAlgInit(mDNSu8 digestType, AlgFuncs *func);
+mDNSexport mStatus CryptoAlgInit(mDNSu8 algType, AlgFuncs *func);
+mDNSexport mStatus EncAlgInit(mDNSu8 algType, AlgFuncs *func);
+
+
+extern AlgContext *AlgCreate(AlgType type, mDNSu8 alg);
+extern mStatus AlgDestroy(AlgContext *ctx);
+extern mDNSu32 AlgLength(AlgContext *ctx);
+extern mStatus AlgAdd(AlgContext *ctx, const void *data, mDNSu32 len);
+extern mStatus AlgVerify(AlgContext *ctx, mDNSu8 *key, mDNSu32 keylen, mDNSu8 *signature, mDNSu32 siglen);
+extern mDNSu8* AlgEncode(AlgContext *ctx);
+extern mStatus AlgFinal(AlgContext *ctx, void *data, mDNSu32 len);
+
+#endif // __CRYPTO_ALG_H