scottmac Mon Jun 2 12:24:23 2008 UTC
Added files: (Branch: PHP_5_3)
/php-src/ext/hash/tests sha224.phpt
Modified files:
/php-src/ext/hash hash.c hash_sha.c php_hash.h php_hash_sha.h
Log:
Add sha224 support.
http://cvs.php.net/viewvc.cgi/php-src/ext/hash/hash.c?r1=1.18.2.5.2.7.2.4&r2=1.18.2.5.2.7.2.5&diff_format=u
Index: php-src/ext/hash/hash.c
diff -u php-src/ext/hash/hash.c:1.18.2.5.2.7.2.4
php-src/ext/hash/hash.c:1.18.2.5.2.7.2.5
--- php-src/ext/hash/hash.c:1.18.2.5.2.7.2.4 Mon Apr 21 15:37:45 2008
+++ php-src/ext/hash/hash.c Mon Jun 2 12:24:22 2008
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: hash.c,v 1.18.2.5.2.7.2.4 2008/04/21 15:37:45 tony2001 Exp $ */
+/* $Id: hash.c,v 1.18.2.5.2.7.2.5 2008/06/02 12:24:22 scottmac Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -574,6 +574,7 @@
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);
+ php_hash_register_algo("sha224", &php_hash_sha224_ops);
php_hash_register_algo("sha256", &php_hash_sha256_ops);
php_hash_register_algo("sha384", &php_hash_sha384_ops);
php_hash_register_algo("sha512", &php_hash_sha512_ops);
http://cvs.php.net/viewvc.cgi/php-src/ext/hash/hash_sha.c?r1=1.10.2.3.2.2.2.2&r2=1.10.2.3.2.2.2.3&diff_format=u
Index: php-src/ext/hash/hash_sha.c
diff -u php-src/ext/hash/hash_sha.c:1.10.2.3.2.2.2.2
php-src/ext/hash/hash_sha.c:1.10.2.3.2.2.2.3
--- php-src/ext/hash/hash_sha.c:1.10.2.3.2.2.2.2 Mon Apr 21 15:37:46 2008
+++ php-src/ext/hash/hash_sha.c Mon Jun 2 12:24:22 2008
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: hash_sha.c,v 1.10.2.3.2.2.2.2 2008/04/21 15:37:46 tony2001 Exp $ */
+/* $Id: hash_sha.c,v 1.10.2.3.2.2.2.3 2008/06/02 12:24:22 scottmac Exp $ */
#include "php_hash.h"
#include "php_hash_sha.h"
@@ -406,7 +406,7 @@
#endif /* PHP_HASH_SHA1_NOT_IN_CORE */
-/* sha256 */
+/* sha224/sha256 */
const php_hash_ops php_hash_sha256_ops = {
(php_hash_init_func_t) PHP_SHA256Init,
@@ -418,6 +418,16 @@
sizeof(PHP_SHA256_CTX)
};
+const php_hash_ops php_hash_sha224_ops = {
+ (php_hash_init_func_t) PHP_SHA224Init,
+ (php_hash_update_func_t) PHP_SHA224Update,
+ (php_hash_final_func_t) PHP_SHA224Final,
+ (php_hash_copy_func_t) php_hash_copy,
+ 28,
+ 64,
+ sizeof(PHP_SHA224_CTX)
+};
+
#define ROTR32(b,x) ((x >> b) | (x << (32 - b)))
#define ROTR64(b,x) ((x >> b) | (x << (64 - b)))
#define SHR(b, x) (x >> b)
@@ -505,6 +515,102 @@
}
/* }}} */
+/* {{{ PHP_SHA224Init
+ * SHA224 initialization. Begins an SHA224 operation, writing a new context.
+ */
+PHP_HASH_API void PHP_SHA224Init(PHP_SHA224_CTX * context)
+{
+ context->count[0] = context->count[1] = 0;
+ /* Load magic initialization constants.
+ */
+ context->state[0] = 0xc1059ed8;
+ context->state[1] = 0x367cd507;
+ context->state[2] = 0x3070dd17;
+ context->state[3] = 0xf70e5939;
+ context->state[4] = 0xffc00b31;
+ context->state[5] = 0x68581511;
+ context->state[6] = 0x64f98fa7;
+ context->state[7] = 0xbefa4fa4;
+}
+/* }}} */
+
+/* {{{ PHP_SHA224Update
+ SHA224 block update operation. Continues an SHA224 message-digest
+ operation, processing another message block, and updating the
+ context.
+ */
+PHP_HASH_API void PHP_SHA224Update(PHP_SHA224_CTX * context, const unsigned
char *input, unsigned int inputLen)
+{
+ unsigned int i, index, partLen;
+
+ /* Compute number of bytes mod 64 */
+ index = (unsigned int) ((context->count[0] >> 3) & 0x3F);
+
+ /* Update number of bits */
+ if ((context->count[0] += ((php_hash_uint32) inputLen << 3)) <
((php_hash_uint32) inputLen << 3)) {
+ context->count[1]++;
+ }
+ context->count[1] += ((php_hash_uint32) inputLen >> 29);
+
+ partLen = 64 - index;
+
+ /* Transform as many times as possible.
+ */
+ if (inputLen >= partLen) {
+ memcpy((unsigned char*) & context->buffer[index], (unsigned
char*) input, partLen);
+ SHA256Transform(context->state, context->buffer);
+
+ for (i = partLen; i + 63 < inputLen; i += 64) {
+ SHA256Transform(context->state, &input[i]);
+ }
+
+ index = 0;
+ } else {
+ i = 0;
+ }
+
+ /* Buffer remaining input */
+ memcpy((unsigned char*) & context->buffer[index], (unsigned char*) &
input[i], inputLen - i);
+}
+/* }}} */
+
+/* {{{ PHP_SHA224Final
+ SHA224 finalization. Ends an SHA224 message-digest operation, writing the
+ the message digest and zeroizing the context.
+ */
+PHP_HASH_API void PHP_SHA224Final(unsigned char digest[28], PHP_SHA224_CTX *
context)
+{
+ unsigned char bits[8];
+ unsigned int index, padLen;
+
+ /* Save number of bits */
+ bits[7] = (unsigned char) (context->count[0] & 0xFF);
+ bits[6] = (unsigned char) ((context->count[0] >> 8) & 0xFF);
+ bits[5] = (unsigned char) ((context->count[0] >> 16) & 0xFF);
+ bits[4] = (unsigned char) ((context->count[0] >> 24) & 0xFF);
+ bits[3] = (unsigned char) (context->count[1] & 0xFF);
+ bits[2] = (unsigned char) ((context->count[1] >> 8) & 0xFF);
+ bits[1] = (unsigned char) ((context->count[1] >> 16) & 0xFF);
+ bits[0] = (unsigned char) ((context->count[1] >> 24) & 0xFF);
+
+ /* Pad out to 56 mod 64.
+ */
+ index = (unsigned int) ((context->count[0] >> 3) & 0x3f);
+ padLen = (index < 56) ? (56 - index) : (120 - index);
+ PHP_SHA224Update(context, PADDING, padLen);
+
+ /* Append length (before padding) */
+ PHP_SHA224Update(context, bits, 8);
+
+ /* Store state in digest */
+ SHAEncode32(digest, context->state, 28);
+
+ /* Zeroize sensitive information.
+ */
+ memset((unsigned char*) context, 0, sizeof(*context));
+}
+/* }}} */
+
/* {{{ PHP_SHA256Update
SHA256 block update operation. Continues an SHA256 message-digest
operation, processing another message block, and updating the
@@ -874,10 +980,10 @@
/* }}} */
/* {{{ PHP_SHA512Final
- SHA512 finalization. Ends an SHA384 message-digest operation, writing the
+ SHA512 finalization. Ends an SHA512 message-digest operation, writing the
the message digest and zeroizing the context.
*/
-PHP_HASH_API void PHP_SHA512Final(unsigned char digest[48], PHP_SHA512_CTX *
context)
+PHP_HASH_API void PHP_SHA512Final(unsigned char digest[64], PHP_SHA512_CTX *
context)
{
unsigned char bits[16];
unsigned int index, padLen;
http://cvs.php.net/viewvc.cgi/php-src/ext/hash/php_hash.h?r1=1.13.2.7.2.3.2.3&r2=1.13.2.7.2.3.2.4&diff_format=u
Index: php-src/ext/hash/php_hash.h
diff -u php-src/ext/hash/php_hash.h:1.13.2.7.2.3.2.3
php-src/ext/hash/php_hash.h:1.13.2.7.2.3.2.4
--- php-src/ext/hash/php_hash.h:1.13.2.7.2.3.2.3 Mon Apr 21 15:37:46 2008
+++ php-src/ext/hash/php_hash.h Mon Jun 2 12:24:22 2008
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_hash.h,v 1.13.2.7.2.3.2.3 2008/04/21 15:37:46 tony2001 Exp $ */
+/* $Id: php_hash.h,v 1.13.2.7.2.3.2.4 2008/06/02 12:24:22 scottmac Exp $ */
#ifndef PHP_HASH_H
#define PHP_HASH_H
@@ -58,6 +58,7 @@
extern const php_hash_ops php_hash_md4_ops;
extern const php_hash_ops php_hash_md5_ops;
extern const php_hash_ops php_hash_sha1_ops;
+extern const php_hash_ops php_hash_sha224_ops;
extern const php_hash_ops php_hash_sha256_ops;
extern const php_hash_ops php_hash_sha384_ops;
extern const php_hash_ops php_hash_sha512_ops;
http://cvs.php.net/viewvc.cgi/php-src/ext/hash/php_hash_sha.h?r1=1.3.2.3.2.1.2.1&r2=1.3.2.3.2.1.2.2&diff_format=u
Index: php-src/ext/hash/php_hash_sha.h
diff -u php-src/ext/hash/php_hash_sha.h:1.3.2.3.2.1.2.1
php-src/ext/hash/php_hash_sha.h:1.3.2.3.2.1.2.2
--- php-src/ext/hash/php_hash_sha.h:1.3.2.3.2.1.2.1 Mon Dec 31 07:17:08 2007
+++ php-src/ext/hash/php_hash_sha.h Mon Jun 2 12:24:22 2008
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_hash_sha.h,v 1.3.2.3.2.1.2.1 2007/12/31 07:17:08 sebastian Exp $ */
+/* $Id: php_hash_sha.h,v 1.3.2.3.2.1.2.2 2008/06/02 12:24:22 scottmac Exp $ */
#ifndef PHP_HASH_SHA_H
#define PHP_HASH_SHA_H
@@ -50,6 +50,17 @@
#endif /* PHP_HASH_SHA1_NOT_IN_CORE */
+/* SHA224 context. */
+typedef struct {
+ php_hash_uint32 state[8]; /* state */
+ php_hash_uint32 count[2]; /* number of bits, modulo 2^64
*/
+ unsigned char buffer[64]; /* input buffer */
+} PHP_SHA224_CTX;
+
+PHP_HASH_API void PHP_SHA224Init(PHP_SHA224_CTX *);
+PHP_HASH_API void PHP_SHA224Update(PHP_SHA224_CTX *, const unsigned char *,
unsigned int);
+PHP_HASH_API void PHP_SHA224Final(unsigned char[28], PHP_SHA224_CTX *);
+
/* SHA256 context. */
typedef struct {
php_hash_uint32 state[8]; /* state */
http://cvs.php.net/viewvc.cgi/php-src/ext/hash/tests/sha224.phpt?view=markup&rev=1.1
Index: php-src/ext/hash/tests/sha224.phpt
+++ php-src/ext/hash/tests/sha224.phpt
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php