1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* crypto/des/qud_cksm.c */ 2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * All rights reserved. 4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This package is an SSL implementation written 6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * by Eric Young (eay@cryptsoft.com). 7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The implementation was written so as to conform with Netscapes SSL. 8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This library is free for commercial and non-commercial use as long as 10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the following conditions are aheared to. The following conditions 11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * apply to all code found in this distribution, be it the RC4, RSA, 12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * lhash, DES, etc., code; not just the SSL code. The SSL documentation 13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * included with this distribution is covered by the same copyright terms 14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * except that the holder is Tim Hudson (tjh@cryptsoft.com). 15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Copyright remains Eric Young's, and as such any Copyright notices in 17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the code are not to be removed. 18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * If this package is used in a product, Eric Young should be given attribution 19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * as the author of the parts of the library used. 20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This can be in the form of a textual message at program startup or 21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * in documentation (online or textual) provided with the package. 22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Redistribution and use in source and binary forms, with or without 24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * modification, are permitted provided that the following conditions 25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * are met: 26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 1. Redistributions of source code must retain the copyright 27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * notice, this list of conditions and the following disclaimer. 28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * notice, this list of conditions and the following disclaimer in the 30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * documentation and/or other materials provided with the distribution. 31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 3. All advertising materials mentioning features or use of this software 32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * must display the following acknowledgement: 33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * "This product includes cryptographic software written by 34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Eric Young (eay@cryptsoft.com)" 35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The word 'cryptographic' can be left out if the rouines from the library 36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * being used are not cryptographic related :-). 37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 4. If you include any Windows specific code (or a derivative thereof) from 38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the apps directory (application code) you must include an acknowledgement: 39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * SUCH DAMAGE. 52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The licence and distribution terms for any publically available version or 54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * derivative of this code cannot be changed. i.e. this code cannot simply be 55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * copied and put under another distribution licence 56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * [including the GNU Public Licence.] 57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* From "Message Authentication" R.R. Jueneman, S.M. Matyas, C.H. Meyer 60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * IEEE Communications Magazine Sept 1985 Vol. 23 No. 9 p 29-40 61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This module in only based on the code in this paper and is 62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * almost definitely not the same as the MIT implementation. 63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "des_locl.h" 65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* bug fix for dos - 7/6/91 - Larry hughes@logos.ucs.indiana.edu */ 67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define Q_B0(a) (((DES_LONG)(a))) 68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define Q_B1(a) (((DES_LONG)(a))<<8) 69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define Q_B2(a) (((DES_LONG)(a))<<16) 70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define Q_B3(a) (((DES_LONG)(a))<<24) 71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* used to scramble things a bit */ 73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Got the value MIT uses via brute force :-) 2/10/90 eay */ 74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define NOISE ((DES_LONG)83653421L) 75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDES_LONG DES_quad_cksum(const unsigned char *input, DES_cblock output[], 77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project long length, int out_count, DES_cblock *seed) 78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DES_LONG z0,z1,t0,t1; 80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int i; 81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project long l; 82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const unsigned char *cp; 83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef _CRAY 84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project struct lp_st { int a:32; int b:32; } *lp; 85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else 86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DES_LONG *lp; 87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (out_count < 1) out_count=1; 90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef _CRAY 91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project lp = (struct lp_st *) &(output[0])[0]; 92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else 93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project lp = (DES_LONG *) &(output[0])[0]; 94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project z0=Q_B0((*seed)[0])|Q_B1((*seed)[1])|Q_B2((*seed)[2])|Q_B3((*seed)[3]); 97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project z1=Q_B0((*seed)[4])|Q_B1((*seed)[5])|Q_B2((*seed)[6])|Q_B3((*seed)[7]); 98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project for (i=0; ((i<4)&&(i<out_count)); i++) 100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cp=input; 102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project l=length; 103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project while (l > 0) 104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (l > 1) 106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t0= (DES_LONG)(*(cp++)); 108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t0|=(DES_LONG)Q_B1(*(cp++)); 109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project l--; 110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else 112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t0= (DES_LONG)(*(cp++)); 113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project l--; 114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* add */ 115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t0+=z0; 116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t0&=0xffffffffL; 117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t1=z1; 118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* square, well sort of square */ 119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project z0=((((t0*t0)&0xffffffffL)+((t1*t1)&0xffffffffL)) 120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &0xffffffffL)%0x7fffffffL; 121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project z1=((t0*((t1+NOISE)&0xffffffffL))&0xffffffffL)%0x7fffffffL; 122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (lp != NULL) 124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* The MIT library assumes that the checksum is 126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * composed of 2*out_count 32 bit ints */ 127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef _CRAY 128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (*lp).a = z0; 129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (*lp).b = z1; 130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project lp++; 131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else 132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *lp++ = z0; 133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *lp++ = z1; 134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return(z0); 138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 140