From: Derick Rethans Date: Tue, 18 Feb 2003 20:31:19 +0000 (+0000) Subject: - Added new parameter to sha1() and md5() which return the digest as X-Git-Tag: RELEASE_0_5~897 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d95c41eddb2db3ebbbec863cd9ed29299575ac85;p=php - Added new parameter to sha1() and md5() which return the digest as binary data. (Original patch by Michael Bretterklieber ) - 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 , Derick) --- diff --git a/ext/standard/md5.c b/ext/standard/md5.c index 07e44bf151..594a6e2303 100644 --- a/ext/standard/md5.c +++ b/ext/standard/md5.c @@ -40,26 +40,33 @@ PHPAPI void make_digest(char *md5str, unsigned char *digest) *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); + } + } /* }}} */ diff --git a/ext/standard/sha1.c b/ext/standard/sha1.c index 420c349414..765f9d46f2 100644 --- a/ext/standard/sha1.c +++ b/ext/standard/sha1.c @@ -37,26 +37,33 @@ PHPAPI void make_sha1_digest(char *sha1str, unsigned char *digest) *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); + } + } /* }}} */ diff --git a/ext/standard/tests/strings/md5.phpt b/ext/standard/tests/strings/md5.phpt new file mode 100644 index 0000000000..32dba03609 --- /dev/null +++ b/ext/standard/tests/strings/md5.phpt @@ -0,0 +1,20 @@ +--TEST-- +md5() with ASCII output +--FILE-- + +--EXPECT-- +d41d8cd98f00b204e9800998ecf8427e +0cc175b9c0f1b6a831c399e269772661 +900150983cd24fb0d6963f7d28e17f72 +f96b697d7cb7938d525a2f31aaf161d0 +c3fcd3d76192e4007dfb496cca67e13b +d174ab98d277d9f5a5611c2c9f419d9f +57edf4a22be3c955ac49da2e2107b67a diff --git a/ext/standard/tests/strings/md5raw.phpt b/ext/standard/tests/strings/md5raw.phpt new file mode 100644 index 0000000000..8f71ea6d0e --- /dev/null +++ b/ext/standard/tests/strings/md5raw.phpt @@ -0,0 +1,20 @@ +--TEST-- +md5() with RAW output +--FILE-- + +--EXPECT-- +d41d8cd98f00b204e9800998ecf8427e +0cc175b9c0f1b6a831c399e269772661 +900150983cd24fb0d6963f7d28e17f72 +f96b697d7cb7938d525a2f31aaf161d0 +c3fcd3d76192e4007dfb496cca67e13b +d174ab98d277d9f5a5611c2c9f419d9f +57edf4a22be3c955ac49da2e2107b67a diff --git a/ext/standard/tests/strings/sha1.phpt b/ext/standard/tests/strings/sha1.phpt new file mode 100644 index 0000000000..096fd05064 --- /dev/null +++ b/ext/standard/tests/strings/sha1.phpt @@ -0,0 +1,14 @@ +--TEST-- +sha1() with ASCII output +--FILE-- + +--EXPECT-- +a9993e364706816aba3e25717850c26c9cd0d89d +84983e441c3bd26ebaae4aa1f95129e5e54670f1 +34aa973cd4c4daa4f61eeb2bdbad27316534016f +dea356a2cddd90c7a7ecedc5ebb563934f460452 diff --git a/ext/standard/tests/strings/sha1raw.phpt b/ext/standard/tests/strings/sha1raw.phpt new file mode 100644 index 0000000000..9a7c6560af --- /dev/null +++ b/ext/standard/tests/strings/sha1raw.phpt @@ -0,0 +1,14 @@ +--TEST-- +sha1() with RAW output +--FILE-- + +--EXPECT-- +a9993e364706816aba3e25717850c26c9cd0d89d +84983e441c3bd26ebaae4aa1f95129e5e54670f1 +34aa973cd4c4daa4f61eeb2bdbad27316534016f +dea356a2cddd90c7a7ecedc5ebb563934f460452