00001 /* ***** BEGIN LICENSE BLOCK *****00002 * Version: MPL 1.1/GPL 2.0/LGPL 2.100003 *00004 * The contents of this file are subject to the Mozilla Public License Version00005 * 1.1 (the "License"); you may not use this file except in compliance with00006 * the License. You may obtain a copy of the License at00007 * http://www.mozilla.org/MPL/00008 *00009 * Software distributed under the License is distributed on an "AS IS" basis,00010 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License00011 * for the specific language governing rights and limitations under the00012 * License.00013 *00014 * The Original Code is the Netscape security libraries.00015 *00016 * The Initial Developer of the Original Code is00017 * Netscape Communications Corporation.00018 * Portions created by the Initial Developer are Copyright (C) 1994-200000019 * the Initial Developer. All Rights Reserved.00020 *00021 * Contributor(s):00022 *00023 * Alternatively, the contents of this file may be used under the terms of00024 * either the GNU General Public License Version 2 or later (the "GPL"), or00025 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),00026 * in which case the provisions of the GPL or the LGPL are applicable instead00027 * of those above. If you wish to allow use of your version of this file only00028 * under the terms of either the GPL or the LGPL, and not to allow others to00029 * use your version of this file under the terms of the MPL, indicate your00030 * decision by deleting the provisions above and replace them with the notice00031 * and other provisions required by the GPL or the LGPL. If you do not delete00032 * the provisions above, a recipient may use your version of this file under00033 * the terms of any one of the MPL, the GPL or the LGPL.00034 *00035 * ***** END LICENSE BLOCK ***** */00036 /* $Id: hasht.h,v 1.7 2005/11/07 18:44:20 wtchang%redhat.com Exp $ */00037
00038 #ifndef _HASHT_H_00039 #define _HASHT_H_00040 00041 /* Opaque objects */00042typedefstruct SECHashObjectStr SECHashObject;
00043typedefstruct HASHContextStr HASHContext;
00044
00045 /*00046 * The hash functions the security library supports00047 * NOTE the order must match the definition of SECHashObjects[]!00048 */00049typedefenum {
00050HASH_AlgNULL = 0,
00051HASH_AlgMD2 = 1,
00052HASH_AlgMD5 = 2,
00053HASH_AlgSHA1 = 3,
00054HASH_AlgSHA256 = 4,
00055HASH_AlgSHA384 = 5,
00056HASH_AlgSHA512 = 6,
00057HASH_AlgTOTAL00058 } HASH_HashType;
00059
00060 /*00061 * Number of bytes each hash algorithm produces00062 */00063#define MD2_LENGTH 1600064#define MD5_LENGTH 1600065#define SHA1_LENGTH 2000066#define SHA256_LENGTH 3200067#define SHA384_LENGTH 4800068#define SHA512_LENGTH 6400069#define HASH_LENGTH_MAX SHA512_LENGTH00070 00071 /*00072 * Structure to hold hash computation info and routines00073 */00074struct SECHashObjectStr {
00075unsignedintlength; /* hash output length (in bytes) */00076void * (*create)(void);
00077void * (*clone)(void *);
00078void (*destroy)(void *, PRBool);
00079void (*begin)(void *);
00080void (*update)(void *, constunsignedchar *, unsignedint);
00081void (*end)(void *, unsignedchar *, unsignedint *, unsignedint);
00082unsignedintblocklength; /* hash input block size (in bytes) */00083HASH_HashTypetype;
00084 };
00085
00086struct HASHContextStr {
00087conststruct SECHashObjectStr *hashobj;
00088void *hash_context;
00089 };
00090
00091 /* This symbol is NOT exported from the NSS DLL. Code that needs a 00092 * pointer to one of the SECHashObjects should call HASH_GetHashObject()00093 * instead. See "sechash.h".00094 */00095 externconst SECHashObject SECHashObjects[];
00096
00097 /* Only those functions below the PKCS #11 line should use SECRawHashObjects.00098 * This symbol is not exported from the NSS DLL.00099 */00100 externconst SECHashObject SECRawHashObjects[];
00101
00102 #endif /* _HASHT_H_ */