pollita Tue Feb 21 20:37:12 2006 UTC
Added files:
/php-src/ext/hash/tests md2.phpt
Modified files:
/php-src/ext/hash hash.c hash_md.c php_hash.h php_hash_md.h
package.xml
Log:
Add md2 algo support
http://cvs.php.net/viewcvs.cgi/php-src/ext/hash/hash.c?r1=1.23&r2=1.24&diff_format=u
Index: php-src/ext/hash/hash.c
diff -u php-src/ext/hash/hash.c:1.23 php-src/ext/hash/hash.c:1.24
--- php-src/ext/hash/hash.c:1.23 Tue Feb 21 20:12:42 2006
+++ php-src/ext/hash/hash.c Tue Feb 21 20:37:12 2006
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: hash.c,v 1.23 2006/02/21 20:12:42 dmitry Exp $ */
+/* $Id: hash.c,v 1.24 2006/02/21 20:37:12 pollita Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -516,6 +516,7 @@
zend_hash_init(&php_hash_hashtable, 35, NULL, NULL, 1);
+ php_hash_register_algo("md2", &php_hash_md2_ops);
php_hash_register_algo("md4", &php_hash_md4_ops);
php_hash_register_algo("md5", &php_hash_md5_ops);
php_hash_register_algo("sha1", &php_hash_sha1_ops);
http://cvs.php.net/viewcvs.cgi/php-src/ext/hash/hash_md.c?r1=1.9&r2=1.10&diff_format=u
Index: php-src/ext/hash/hash_md.c
diff -u php-src/ext/hash/hash_md.c:1.9 php-src/ext/hash/hash_md.c:1.10
--- php-src/ext/hash/hash_md.c:1.9 Sun Feb 19 04:29:40 2006
+++ php-src/ext/hash/hash_md.c Tue Feb 21 20:37:12 2006
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: hash_md.c,v 1.9 2006/02/19 04:29:40 andi Exp $ */
+/* $Id: hash_md.c,v 1.10 2006/02/21 20:37:12 pollita Exp $ */
#include "php_hash.h"
#include "php_hash_md.h"
@@ -39,6 +39,15 @@
sizeof(PHP_MD4_CTX)
};
+php_hash_ops php_hash_md2_ops = {
+ (php_hash_init_func_t) PHP_MD2Init,
+ (php_hash_update_func_t) PHP_MD2Update,
+ (php_hash_final_func_t) PHP_MD2Final,
+ 16,
+ 16,
+ sizeof(PHP_MD2_CTX)
+};
+
/* MD common stuff */
static unsigned char PADDING[64] =
@@ -579,6 +588,95 @@
}
/* }}} */
+/* MD2 */
+
+static unsigned char MD2_S[256] = {
+ 41, 46, 67, 201, 162, 216, 124, 1, 61, 54, 84, 161, 236, 240,
6, 19,
+ 98, 167, 5, 243, 192, 199, 115, 140, 152, 147, 43, 217, 188, 76,
130, 202,
+ 30, 155, 87, 60, 253, 212, 224, 22, 103, 66, 111, 24, 138, 23,
229, 18,
+ 190, 78, 196, 214, 218, 158, 222, 73, 160, 251, 245, 142, 187, 47,
238, 122,
+ 169, 104, 121, 145, 21, 178, 7, 63, 148, 194, 16, 137, 11, 34,
95, 33,
+ 128, 127, 93, 154, 90, 144, 50, 39, 53, 62, 204, 231, 191, 247,
151, 3,
+ 255, 25, 48, 179, 72, 165, 181, 209, 215, 94, 146, 42, 172, 86,
170, 198,
+ 79, 184, 56, 210, 150, 164, 125, 182, 118, 252, 107, 226, 156, 116,
4, 241,
+ 69, 157, 112, 89, 100, 113, 135, 32, 134, 91, 207, 101, 230, 45,
168, 2,
+ 27, 96, 37, 173, 174, 176, 185, 246, 28, 70, 97, 105, 52, 64,
126, 15,
+ 85, 71, 163, 35, 221, 81, 175, 58, 195, 92, 249, 206, 186, 197,
234, 38,
+ 44, 83, 13, 110, 133, 40, 132, 9, 211, 223, 205, 244, 65, 129,
77, 82,
+ 106, 220, 55, 200, 108, 193, 171, 250, 36, 225, 123, 8, 12, 189,
177, 74,
+ 120, 136, 149, 139, 227, 99, 232, 109, 233, 203, 213, 254, 59, 0,
29, 57,
+ 242, 239, 183, 14, 102, 88, 208, 228, 166, 119, 114, 248, 235, 117,
75, 10,
+ 49, 68, 80, 180, 143, 237, 31, 26, 219, 153, 141, 51, 159, 17,
131, 20 };
+
+PHP_HASH_API void PHP_MD2Init(PHP_MD2_CTX *context)
+{
+ memset(context, 0, sizeof(PHP_MD2_CTX));
+}
+
+static void MD2_Transform(PHP_MD2_CTX *context, const unsigned char *block)
+{
+ unsigned char i,j,t = 0;
+
+ for(i = 0; i < 16; i++) {
+ context->state[16+i] = block[i];
+ context->state[32+i] = (context->state[16+i] ^
context->state[i]);
+ }
+
+ for(i = 0; i < 18; i++) {
+ for(j = 0; j < 48; j++) {
+ t = context->state[j] = context->state[j] ^ MD2_S[t];
+ }
+ t += i;
+ }
+
+ /* Update checksum -- must be after transform to avoid fouling up last
message block */
+ t = context->checksum[15];
+ for(i = 0; i < 16; i++) {
+ t = context->checksum[i] ^= MD2_S[block[i] ^ t];
+ }
+}
+
+PHP_HASH_API void PHP_MD2Update(PHP_MD2_CTX *context, const unsigned char
*buf, unsigned int len)
+{
+ const unsigned char *p = buf, *e = buf + len;
+
+ if (context->in_buffer) {
+ if (context->in_buffer + len < 16) {
+ /* Not enough for block, just pass into buffer */
+ memcpy(context->buffer + context->in_buffer, p, len);
+ context->in_buffer += len;
+ return;
+ }
+ /* Put buffered data together with inbound for a single block */
+ memcpy(context->buffer + context->in_buffer, p, 16 -
context->in_buffer);
+ MD2_Transform(context, context->buffer);
+ p += 16 - context->in_buffer;
+ context->in_buffer = 0;
+ }
+
+ /* Process as many whole blocks as remain */
+ while ((p + 16) <= e) {
+ MD2_Transform(context, p);
+ p += 16;
+ }
+
+ /* Copy remaining data to buffer */
+ if (p < e) {
+ memcpy(context->buffer, p, e - p);
+ context->in_buffer = e - p;
+ }
+}
+
+PHP_HASH_API void PHP_MD2Final(unsigned char output[16], PHP_MD2_CTX *context)
+{
+ memset(context->buffer + context->in_buffer, 16 - context->in_buffer,
16 - context->in_buffer);
+ MD2_Transform(context, context->buffer);
+ MD2_Transform(context, context->checksum);
+
+ memcpy(output, context->state, 16);
+}
+
+
/*
* Local variables:
* tab-width: 4
http://cvs.php.net/viewcvs.cgi/php-src/ext/hash/php_hash.h?r1=1.18&r2=1.19&diff_format=u
Index: php-src/ext/hash/php_hash.h
diff -u php-src/ext/hash/php_hash.h:1.18 php-src/ext/hash/php_hash.h:1.19
--- php-src/ext/hash/php_hash.h:1.18 Mon Jan 16 23:03:41 2006
+++ php-src/ext/hash/php_hash.h Tue Feb 21 20:37:12 2006
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_hash.h,v 1.18 2006/01/16 23:03:41 tony2001 Exp $ */
+/* $Id: php_hash.h,v 1.19 2006/02/21 20:37:12 pollita Exp $ */
#ifndef PHP_HASH_H
#define PHP_HASH_H
@@ -52,6 +52,7 @@
unsigned char *key;
} php_hash_data;
+extern php_hash_ops php_hash_md2_ops;
extern php_hash_ops php_hash_md4_ops;
extern php_hash_ops php_hash_md5_ops;
extern php_hash_ops php_hash_sha1_ops;
http://cvs.php.net/viewcvs.cgi/php-src/ext/hash/php_hash_md.h?r1=1.4&r2=1.5&diff_format=u
Index: php-src/ext/hash/php_hash_md.h
diff -u php-src/ext/hash/php_hash_md.h:1.4 php-src/ext/hash/php_hash_md.h:1.5
--- php-src/ext/hash/php_hash_md.h:1.4 Sun Jan 1 13:09:50 2006
+++ php-src/ext/hash/php_hash_md.h Tue Feb 21 20:37:12 2006
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_hash_md.h,v 1.4 2006/01/01 13:09:50 sniper Exp $ */
+/* $Id: php_hash_md.h,v 1.5 2006/02/21 20:37:12 pollita Exp $ */
#ifndef PHP_HASH_MD_H
#define PHP_HASH_MD_H
@@ -85,4 +85,16 @@
PHP_HASH_API void PHP_MD4Update(PHP_MD4_CTX *context, const unsigned char *,
unsigned int);
PHP_HASH_API void PHP_MD4Final(unsigned char[16], PHP_MD4_CTX *);
+/* MD2 context */
+typedef struct {
+ unsigned char state[48];
+ unsigned char checksum[16];
+ unsigned char buffer[16];
+ char in_buffer;
+} PHP_MD2_CTX;
+
+PHP_HASH_API void PHP_MD2Init(PHP_MD2_CTX *context);
+PHP_HASH_API void PHP_MD2Update(PHP_MD2_CTX *context, const unsigned char *,
unsigned int);
+PHP_HASH_API void PHP_MD2Final(unsigned char[16], PHP_MD2_CTX *);
+
#endif
http://cvs.php.net/viewcvs.cgi/php-src/ext/hash/package.xml?r1=1.19&r2=1.20&diff_format=u
Index: php-src/ext/hash/package.xml
diff -u php-src/ext/hash/package.xml:1.19 php-src/ext/hash/package.xml:1.20
--- php-src/ext/hash/package.xml:1.19 Tue Feb 21 20:35:38 2006
+++ php-src/ext/hash/package.xml Tue Feb 21 20:37:12 2006
@@ -26,6 +26,7 @@
<date>2006-02-00</date>
<notes>
Fixed tiger algorithm generating wrong results on big endian platforms.
+Add md2 support
</notes>
</release>
@@ -82,6 +83,7 @@
<file role="doc" name="README"/>
<dir role="test" name="tests">
<file role="test" name="hmac-md5.phpt"/>
+ <file role="test" name="md2.phpt"/>
<file role="test" name="md4.phpt"/>
<file role="test" name="md5.phpt"/>
<file role="test" name="sha1.phpt"/>
http://cvs.php.net/viewcvs.cgi/php-src/ext/hash/tests/md2.phpt?view=markup&rev=1.1
Index: php-src/ext/hash/tests/md2.phpt
+++ php-src/ext/hash/tests/md2.phpt
--TEST--
md2 algorithm
--SKIPIF--
<?php if(!extension_loaded("hash")) print "skip"; ?>
--FILE--
<?php
echo hash('md2', '') . "\n";
echo hash('md2', 'a') . "\n";
echo hash('md2', 'abc') . "\n";
echo hash('md2', 'message digest') . "\n";
echo hash('md2', 'abcdefghijklmnopqrstuvwxyz') . "\n";
echo hash('md2',
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789') . "\n";
echo hash('md2',
'12345678901234567890123456789012345678901234567890123456789012345678901234567890')
. "\n";
--EXPECT--
8350e5a3e24c153df2275c9f80692773
32ec01ec4a6dac72c0ab96fb34c0b5d1
da853b0d3f88d99b30283a69e6ded6bb
ab4f496bfb2a530b219ff33031fe06b0
4e8ddff3650292ab5a4108c3aa47940b
da33def2a42df13975352846c30338cd
d5976f79d83d3a0dc9806c3c66f3efd8
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php