diff options
Diffstat (limited to 'mDNSResponder/mDNSCore/CryptoAlg.h')
-rw-r--r-- | mDNSResponder/mDNSCore/CryptoAlg.h | 61 |
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 |