derick          Tue Feb 18 15:31:20 2003 EDT

  Added files:                 
    /php4/ext/standard/tests/strings    md5.phpt md5raw.phpt sha1.phpt 
                                        sha1raw.phpt 

  Modified files:              
    /php4/ext/standard  md5.c sha1.c 
  Log:
  - Added new parameter to sha1() and md5() which return the digest as
    binary data. (Original patch by Michael Bretterklieber <[EMAIL PROTECTED]>)
  - Added test cases for sha1() and md5() based on the testvectors in RFC 1321 
    and RFC 3174.
  @- Added new parameter to sha1() and md5() which return the digest as
  @  binary data. (Michael Bretterklieber <[EMAIL PROTECTED]>, Derick)
  
  
Index: php4/ext/standard/md5.c
diff -u php4/ext/standard/md5.c:1.29 php4/ext/standard/md5.c:1.30
--- php4/ext/standard/md5.c:1.29        Tue Dec 31 11:07:47 2002
+++ php4/ext/standard/md5.c     Tue Feb 18 15:31:19 2003
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: md5.c,v 1.29 2002/12/31 16:07:47 sebastian Exp $ */
+/* $Id: md5.c,v 1.30 2003/02/18 20:31:19 derick Exp $ */
 
 /* 
  * md5.c - Copyright 1997 Lachlan Roche 
@@ -40,26 +40,33 @@
        *md5str = '\0';
 }
 
-/* {{{ proto string md5(string str)
+/* {{{ proto string md5(string str, [ bool raw_output])
    Calculate the md5 hash of a string */
 PHP_NAMED_FUNCTION(php_if_md5)
 {
-       zval **arg;
+       char *arg;
+       int arg_len;
+       zend_bool raw_output = 0;
        char md5str[33];
        PHP_MD5_CTX context;
-       unsigned char digest[16];
+       unsigned char digest[17];
        
-       if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
-               WRONG_PARAM_COUNT;
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", &arg, &arg_len, 
+&raw_output) == FAILURE) {
+               return;
        }
-       convert_to_string_ex(arg);
-
+       
        md5str[0] = '\0';
        PHP_MD5Init(&context);
-       PHP_MD5Update(&context, Z_STRVAL_PP(arg), Z_STRLEN_PP(arg));
+       PHP_MD5Update(&context, arg, arg_len);
        PHP_MD5Final(digest, &context);
-       make_digest(md5str, digest);
-       RETVAL_STRING(md5str, 1);
+       if (raw_output) {
+               digest[16] = '\0';
+               RETURN_STRINGL(digest, 16, 1);
+       } else {
+               make_digest(md5str, digest);
+               RETVAL_STRING(md5str, 1);
+       }
+
 }
 /* }}} */
 
Index: php4/ext/standard/sha1.c
diff -u php4/ext/standard/sha1.c:1.4 php4/ext/standard/sha1.c:1.5
--- php4/ext/standard/sha1.c:1.4        Tue Dec 31 11:07:55 2002
+++ php4/ext/standard/sha1.c    Tue Feb 18 15:31:19 2003
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: sha1.c,v 1.4 2002/12/31 16:07:55 sebastian Exp $ */
+/* $Id: sha1.c,v 1.5 2003/02/18 20:31:19 derick Exp $ */
 
 #include <stdio.h>
 #include "php.h"
@@ -37,26 +37,33 @@
        *sha1str = '\0';
 }
 
-/* {{{ proto string sha1(string str)
+/* {{{ proto string sha1(string str [, bool raw_output])
    Calculate the sha1 hash of a string */
 PHP_FUNCTION(sha1)
 {
-       zval **arg;
+       char *arg;
+       int arg_len;
+       zend_bool raw_output = 0;
        char sha1str[41];
        PHP_SHA1_CTX context;
-       unsigned char digest[20];
+       unsigned char digest[21];
        
-       if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
-               WRONG_PARAM_COUNT;
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", &arg, &arg_len, 
+&raw_output) == FAILURE) {
+               return;
        }
-       convert_to_string_ex(arg);
 
        sha1str[0] = '\0';
        PHP_SHA1Init(&context);
-       PHP_SHA1Update(&context, Z_STRVAL_PP(arg), Z_STRLEN_PP(arg));
+       PHP_SHA1Update(&context, arg, arg_len);
        PHP_SHA1Final(digest, &context);
-       make_sha1_digest(sha1str, digest);
-       RETVAL_STRING(sha1str, 1);
+       if (raw_output) {
+               digest[20] = '\0';
+               RETURN_STRINGL(digest, 20, 1);
+       } else {
+               make_sha1_digest(sha1str, digest);
+               RETVAL_STRING(sha1str, 1);
+       }
+
 }
 
 /* }}} */

Index: php4/ext/standard/tests/strings/md5.phpt
+++ php4/ext/standard/tests/strings/md5.phpt
--TEST--
md5() with ASCII output
--FILE--
<?php
echo md5("")."\n";
echo md5("a")."\n";
echo md5("abc")."\n";
echo md5("message digest")."\n";
echo md5("abcdefghijklmnopqrstuvwxyz")."\n";
echo md5("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")."\n";
echo 
md5("12345678901234567890123456789012345678901234567890123456789012345678901234567890")."\n";
?>
--EXPECT--
d41d8cd98f00b204e9800998ecf8427e
0cc175b9c0f1b6a831c399e269772661
900150983cd24fb0d6963f7d28e17f72
f96b697d7cb7938d525a2f31aaf161d0
c3fcd3d76192e4007dfb496cca67e13b
d174ab98d277d9f5a5611c2c9f419d9f
57edf4a22be3c955ac49da2e2107b67a

Index: php4/ext/standard/tests/strings/md5raw.phpt
+++ php4/ext/standard/tests/strings/md5raw.phpt
--TEST--
md5() with RAW output
--FILE--
<?php
echo bin2hex(md5("", TRUE))."\n";
echo bin2hex(md5("a", TRUE))."\n";
echo bin2hex(md5("abc", TRUE))."\n";
echo bin2hex(md5("message digest", TRUE))."\n";
echo bin2hex(md5("abcdefghijklmnopqrstuvwxyz", TRUE))."\n";
echo bin2hex(md5("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", 
TRUE))."\n";
echo 
bin2hex(md5("12345678901234567890123456789012345678901234567890123456789012345678901234567890",
 TRUE))."\n";
?>
--EXPECT--
d41d8cd98f00b204e9800998ecf8427e
0cc175b9c0f1b6a831c399e269772661
900150983cd24fb0d6963f7d28e17f72
f96b697d7cb7938d525a2f31aaf161d0
c3fcd3d76192e4007dfb496cca67e13b
d174ab98d277d9f5a5611c2c9f419d9f
57edf4a22be3c955ac49da2e2107b67a

Index: php4/ext/standard/tests/strings/sha1.phpt
+++ php4/ext/standard/tests/strings/sha1.phpt
--TEST--
sha1() with ASCII output
--FILE--
<?php
echo sha1("abc")."\n";
echo sha1("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq")."\n";
echo sha1("a")."\n";
echo sha1("0123456701234567012345670123456701234567012345670123456701234567")."\n";
?>
--EXPECT--
a9993e364706816aba3e25717850c26c9cd0d89d
84983e441c3bd26ebaae4aa1f95129e5e54670f1
34aa973cd4c4daa4f61eeb2bdbad27316534016f
dea356a2cddd90c7a7ecedc5ebb563934f460452

Index: php4/ext/standard/tests/strings/sha1raw.phpt
+++ php4/ext/standard/tests/strings/sha1raw.phpt
--TEST--
sha1() with RAW output
--FILE--
<?php
echo bin2hex(sha1("abc", TRUE))."\n";
echo bin2hex(sha1("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 
TRUE))."\n";
echo bin2hex(sha1("a", TRUE))."\n";
echo bin2hex(sha1("0123456701234567012345670123456701234567012345670123456701234567", 
TRUE))."\n";
?>
--EXPECT--
a9993e364706816aba3e25717850c26c9cd0d89d
84983e441c3bd26ebaae4aa1f95129e5e54670f1
34aa973cd4c4daa4f61eeb2bdbad27316534016f
dea356a2cddd90c7a7ecedc5ebb563934f460452



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to