5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome/* -*- Mode: C; tab-width: 4 -*-
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome *
cda73f64f20b8a0afc4909f5ea1f055ec7913856Toomas Soome * Copyright (c) 2011-2012 Apple Inc. All rights reserved.
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome *
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome * Licensed under the Apache License, Version 2.0 (the "License");
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome * you may not use this file except in compliance with the License.
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome * You may obtain a copy of the License at
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome *
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome * http://www.apache.org/licenses/LICENSE-2.0
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome *
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome * Unless required by applicable law or agreed to in writing, software
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome * distributed under the License is distributed on an "AS IS" BASIS,
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome * See the License for the specific language governing permissions and
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome * limitations under the License.
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome */
cda73f64f20b8a0afc4909f5ea1f055ec7913856Toomas Soome
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome#ifndef __CRYPTO_ALG_H
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome#define __CRYPTO_ALG_H
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soometypedef enum
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome{
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome CRYPTO_ALG,
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome DIGEST_ALG,
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome ENC_ALG,
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome} AlgType;
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soometypedef struct
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome{
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome void *context;
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome AlgType type;
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome mDNSu8 alg;
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome} AlgContext;
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soometypedef struct
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome{
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome mStatus (*Create)(AlgContext *ctx);
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome mStatus (*Destroy)(AlgContext *ctx);
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome mDNSu32 (*Length)(AlgContext *ctx);
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome mStatus (*Add)(AlgContext *ctx, const void *data, mDNSu32 len);
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome // Verify the ctx using the key and compare it against signature/siglen
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome mStatus (*Verify)(AlgContext *ctx, mDNSu8 *key, mDNSu32 keylen, mDNSu8 *signature, mDNSu32 siglen);
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome // Encode the data and return the encoded data
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome mDNSu8* (*Encode)(AlgContext *ctx);
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome // Return the finalized data in data whose length is len (used by hash algorithms)
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome mStatus (*Final)(AlgContext *ctx, void *data, mDNSu32 len);
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome} AlgFuncs;
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas SoomemDNSexport mStatus DigestAlgInit(mDNSu8 digestType, AlgFuncs *func);
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas SoomemDNSexport mStatus CryptoAlgInit(mDNSu8 algType, AlgFuncs *func);
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas SoomemDNSexport mStatus EncAlgInit(mDNSu8 algType, AlgFuncs *func);
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soomeextern AlgContext *AlgCreate(AlgType type, mDNSu8 alg);
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soomeextern mStatus AlgDestroy(AlgContext *ctx);
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soomeextern mDNSu32 AlgLength(AlgContext *ctx);
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soomeextern mStatus AlgAdd(AlgContext *ctx, const void *data, mDNSu32 len);
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soomeextern mStatus AlgVerify(AlgContext *ctx, mDNSu8 *key, mDNSu32 keylen, mDNSu8 *signature, mDNSu32 siglen);
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soomeextern mDNSu8* AlgEncode(AlgContext *ctx);
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soomeextern mStatus AlgFinal(AlgContext *ctx, void *data, mDNSu32 len);
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome
5ffb0c9b03b5149ff4f5821a62be4a52408ada2aToomas Soome#endif // __CRYPTO_ALG_H