cellog Mon Mar 26 00:00:55 2007 UTC
Modified files:
/pecl/phar TODO phar.c phar_internal.h phar_object.c
Log:
[DOC]
implement setSignatureAlgorithm() and add class constants Phar::MD5,
Phar::SHA1, Phar::SHA256, Phar::SHA512, Phar::PGP
http://cvs.php.net/viewvc.cgi/pecl/phar/TODO?r1=1.31&r2=1.32&diff_format=u
Index: pecl/phar/TODO
diff -u pecl/phar/TODO:1.31 pecl/phar/TODO:1.32
--- pecl/phar/TODO:1.31 Sun Mar 25 21:43:48 2007
+++ pecl/phar/TODO Mon Mar 26 00:00:55 2007
@@ -40,6 +40,8 @@
* [optional] Phar->rollback() to abort a write transaction
* implement GPG signing
X add SHA-2 (256, 512) support [Marcus]
+ X setSignatureAlgorithm() and Phar::MD5 Phar::SHA1 Phar::SHA256 Phar::SHA512
Phar::PGP to
+ choose the kind of signature to use (PGP falls back to SHA1) [Greg]
* ability to match files containing a metadata key
opendir('phar://a.phar/?mime-type=image/jpeg')
or foreach ($p->match('mime-type', 'image/jpeg') as $file)
* Phar::copy($from, $to);
http://cvs.php.net/viewvc.cgi/pecl/phar/phar.c?r1=1.185&r2=1.186&diff_format=u
Index: pecl/phar/phar.c
diff -u pecl/phar/phar.c:1.185 pecl/phar/phar.c:1.186
--- pecl/phar/phar.c:1.185 Sun Mar 25 23:42:48 2007
+++ pecl/phar/phar.c Mon Mar 26 00:00:55 2007
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: phar.c,v 1.185 2007/03/25 23:42:48 cellog Exp $ */
+/* $Id: phar.c,v 1.186 2007/03/26 00:00:55 cellog Exp $ */
#define PHAR_MAIN
#include "phar_internal.h"
@@ -2522,9 +2522,7 @@
efree(archive->signature);
}
- switch(PHAR_SIG_USE) {
- case PHAR_SIG_PGP:
- /* TODO: currently fall back to sha1,later do both */
+ switch(archive->sig_flags) {
#if HAVE_HASH_EXT
case PHAR_SIG_SHA512: {
unsigned char digest[64];
@@ -2566,6 +2564,8 @@
}
return EOF;
#endif
+ case PHAR_SIG_PGP:
+ /* TODO: currently fall back to sha1,later do both */
default:
case PHAR_SIG_SHA1: {
unsigned char digest[20];
@@ -3376,7 +3376,7 @@
php_info_print_table_header(2, "Phar: PHP Archive support", "enabled");
php_info_print_table_row(2, "Phar EXT version", PHAR_EXT_VERSION_STR);
php_info_print_table_row(2, "Phar API version", PHAR_API_VERSION_STR);
- php_info_print_table_row(2, "CVS revision", "$Revision: 1.185 $");
+ php_info_print_table_row(2, "CVS revision", "$Revision: 1.186 $");
php_info_print_table_row(2, "gzip compression",
#if HAVE_ZLIB
"enabled");
http://cvs.php.net/viewvc.cgi/pecl/phar/phar_internal.h?r1=1.26&r2=1.27&diff_format=u
Index: pecl/phar/phar_internal.h
diff -u pecl/phar/phar_internal.h:1.26 pecl/phar/phar_internal.h:1.27
--- pecl/phar/phar_internal.h:1.26 Sun Mar 25 21:43:48 2007
+++ pecl/phar/phar_internal.h Mon Mar 26 00:00:55 2007
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: phar_internal.h,v 1.26 2007/03/25 21:43:48 helly Exp $ */
+/* $Id: phar_internal.h,v 1.27 2007/03/26 00:00:55 cellog Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -83,8 +83,6 @@
#define PHAR_SIG_SHA512 0x0004
#define PHAR_SIG_PGP 0x0010
-#define PHAR_SIG_USE PHAR_SIG_SHA1
-
/* flags byte for each file adheres to these bitmasks.
All unused values are reserved */
#define PHAR_ENT_COMPRESSION_MASK 0x0000F000
http://cvs.php.net/viewvc.cgi/pecl/phar/phar_object.c?r1=1.43&r2=1.44&diff_format=u
Index: pecl/phar/phar_object.c
diff -u pecl/phar/phar_object.c:1.43 pecl/phar/phar_object.c:1.44
--- pecl/phar/phar_object.c:1.43 Sun Mar 25 21:43:48 2007
+++ pecl/phar/phar_object.c Mon Mar 26 00:00:55 2007
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: phar_object.c,v 1.43 2007/03/25 21:43:48 helly Exp $ */
+/* $Id: phar_object.c,v 1.44 2007/03/26 00:00:55 cellog Exp $ */
#include "phar_internal.h"
@@ -350,6 +350,51 @@
}
/* }}} */
+/* {{{ proto array Phar::setSignatureAlgorithm(int sigtype)
+ * set the signature algorithm for a phar and apply it. The
+ * signature algorithm must be one of Phar::MD5, Phar::SHA1,
+ * Phar::SHA256 or Phar::SHA512
+ */
+PHP_METHOD(Phar, setSignatureAlgorithm)
+{
+ long algo;
+ char *error;
+ PHAR_ARCHIVE_OBJECT();
+
+ if (PHAR_G(readonly)) {
+ zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0
TSRMLS_CC,
+ "Cannot change stub, phar is read-only");
+ }
+
+ if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS()
TSRMLS_CC, "l", &algo) != SUCCESS) {
+ return;
+ }
+
+ switch (algo) {
+ case PHAR_SIG_SHA256 :
+ case PHAR_SIG_SHA512 :
+#if !HAVE_HASH_EXT
+
zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC,
+ "SHA-256 and SHA-512 signatures are only
supported if the hash extension is enabled");
+#endif
+ case PHAR_SIG_MD5 :
+ case PHAR_SIG_SHA1 :
+ case PHAR_SIG_PGP :
+ phar_obj->arc.archive->sig_flags = algo;
+ phar_obj->arc.archive->is_modified = 1;
+
+ phar_flush(phar_obj->arc.archive, 0, 0, &error
TSRMLS_CC);
+ if (error) {
+
zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, error);
+ efree(error);
+ }
+ default :
+
zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC,
+ "Unknown signature algorithm specified");
+ }
+}
+/* }}} */
+
/* {{{ proto array Phar::getSupportedSignatures()
* Return array of supported signature types
*/
@@ -1208,6 +1253,7 @@
PHP_ME(Phar, isBuffering, NULL,
ZEND_ACC_PUBLIC)
PHP_ME(Phar, setMetadata, arginfo_entry_setMetadata,
ZEND_ACC_PUBLIC)
PHP_ME(Phar, setStub, arginfo_phar_setStub,
ZEND_ACC_PUBLIC)
+ PHP_ME(Phar, setSignatureAlgorithm, arginfo_entry_setMetadata,
ZEND_ACC_PUBLIC)
PHP_ME(Phar, offsetExists, arginfo_phar_offsetExists,
ZEND_ACC_PUBLIC)
PHP_ME(Phar, offsetGet, arginfo_phar_offsetExists,
ZEND_ACC_PUBLIC)
PHP_ME(Phar, offsetSet, arginfo_phar_offsetSet,
ZEND_ACC_PUBLIC)
@@ -1289,6 +1335,11 @@
REGISTER_PHAR_CLASS_CONST_LONG(phar_ce_archive, "COMPRESSED",
PHAR_ENT_COMPRESSION_MASK)
REGISTER_PHAR_CLASS_CONST_LONG(phar_ce_archive, "GZ",
PHAR_ENT_COMPRESSED_GZ)
REGISTER_PHAR_CLASS_CONST_LONG(phar_ce_archive, "BZ2",
PHAR_ENT_COMPRESSED_BZ2)
+ REGISTER_PHAR_CLASS_CONST_LONG(phar_ce_archive, "MD5", PHAR_SIG_MD5)
+ REGISTER_PHAR_CLASS_CONST_LONG(phar_ce_archive, "SHA1", PHAR_SIG_SHA1)
+ REGISTER_PHAR_CLASS_CONST_LONG(phar_ce_archive, "SHA256",
PHAR_SIG_SHA256)
+ REGISTER_PHAR_CLASS_CONST_LONG(phar_ce_archive, "SHA512",
PHAR_SIG_SHA512)
+ REGISTER_PHAR_CLASS_CONST_LONG(phar_ce_archive, "PGP", PHAR_SIG_PGP)
}
/* }}} */