summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/des/qud_cksm.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/des/qud_cksm.c')
-rw-r--r--src/lib/libcrypto/des/qud_cksm.c53
1 files changed, 24 insertions, 29 deletions
diff --git a/src/lib/libcrypto/des/qud_cksm.c b/src/lib/libcrypto/des/qud_cksm.c
index 8526abf334..dac201227e 100644
--- a/src/lib/libcrypto/des/qud_cksm.c
+++ b/src/lib/libcrypto/des/qud_cksm.c
@@ -73,28 +73,32 @@
73/* Got the value MIT uses via brute force :-) 2/10/90 eay */ 73/* Got the value MIT uses via brute force :-) 2/10/90 eay */
74#define NOISE ((DES_LONG)83653421L) 74#define NOISE ((DES_LONG)83653421L)
75 75
76DES_LONG des_quad_cksum(input, output, length, out_count, seed) 76DES_LONG DES_quad_cksum(const unsigned char *input, DES_cblock output[],
77des_cblock (*input); 77 long length, int out_count, DES_cblock *seed)
78des_cblock (*output);
79long length;
80int out_count;
81des_cblock (*seed);
82 { 78 {
83 DES_LONG z0,z1,t0,t1; 79 DES_LONG z0,z1,t0,t1;
84 int i; 80 int i;
85 long l; 81 long l;
86 unsigned char *cp; 82 const unsigned char *cp;
87 unsigned char *lp; 83#ifdef _CRAY
84 struct lp_st { int a:32; int b:32; } *lp;
85#else
86 DES_LONG *lp;
87#endif
88 88
89 if (out_count < 1) out_count=1; 89 if (out_count < 1) out_count=1;
90 lp=(unsigned char *)output; 90#ifdef _CRAY
91 lp = (struct lp_st *) &(output[0])[0];
92#else
93 lp = (DES_LONG *) &(output[0])[0];
94#endif
91 95
92 z0=Q_B0((*seed)[0])|Q_B1((*seed)[1])|Q_B2((*seed)[2])|Q_B3((*seed)[3]); 96 z0=Q_B0((*seed)[0])|Q_B1((*seed)[1])|Q_B2((*seed)[2])|Q_B3((*seed)[3]);
93 z1=Q_B0((*seed)[4])|Q_B1((*seed)[5])|Q_B2((*seed)[6])|Q_B3((*seed)[7]); 97 z1=Q_B0((*seed)[4])|Q_B1((*seed)[5])|Q_B2((*seed)[6])|Q_B3((*seed)[7]);
94 98
95 for (i=0; ((i<4)&&(i<out_count)); i++) 99 for (i=0; ((i<4)&&(i<out_count)); i++)
96 { 100 {
97 cp=(unsigned char *)input; 101 cp=input;
98 l=length; 102 l=length;
99 while (l > 0) 103 while (l > 0)
100 { 104 {
@@ -118,25 +122,16 @@ des_cblock (*seed);
118 } 122 }
119 if (lp != NULL) 123 if (lp != NULL)
120 { 124 {
121 /* I believe I finally have things worked out. 125 /* The MIT library assumes that the checksum is
122 * The MIT library assumes that the checksum 126 * composed of 2*out_count 32 bit ints */
123 * is one huge number and it is returned in a 127#ifdef _CRAY
124 * host dependant byte order. 128 (*lp).a = z0;
125 */ 129 (*lp).b = z1;
126 static DES_LONG ltmp=1; 130 lp++;
127 static unsigned char *c=(unsigned char *)&ltmp; 131#else
128 132 *lp++ = z0;
129 if (c[0]) 133 *lp++ = z1;
130 { 134#endif
131 l2c(z0,lp);
132 l2c(z1,lp);
133 }
134 else
135 {
136 lp=output[out_count-i-1];
137 l2n(z1,lp);
138 l2n(z0,lp);
139 }
140 } 135 }
141 } 136 }
142 return(z0); 137 return(z0);