Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c8a2ad4d48 | ||
|
|
d54a6cbdf5 | ||
|
|
e8f4c82f59 | ||
|
|
24eb2c2bee |
@@ -1,9 +1,9 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<phive xmlns="https://phar.io/phive">
|
<phive xmlns="https://phar.io/phive">
|
||||||
<phar name="phpunit" version="^9.6" installed="9.6.17" location="./tools/phpunit" copy="false"/>
|
<phar name="phpunit" version="^9.6" installed="9.6.19" location="./tools/phpunit" copy="false"/>
|
||||||
<phar name="phpcs" version="^3.7.2" installed="3.9.0" location="./tools/phpcs" copy="false"/>
|
<phar name="phpcs" version="^3.7.2" installed="3.9.1" location="./tools/phpcs" copy="false"/>
|
||||||
<phar name="phpcbf" version="^3.7.2" installed="3.9.0" location="./tools/phpcbf" copy="false"/>
|
<phar name="phpcbf" version="^3.7.2" installed="3.9.1" location="./tools/phpcbf" copy="false"/>
|
||||||
<phar name="psalm" version="^5.15.0" installed="5.23.1" location="./tools/psalm" copy="false"/>
|
<phar name="psalm" version="^5.15.0" installed="5.23.1" location="./tools/psalm" copy="false"/>
|
||||||
<phar name="phpstan" version="^1.10.37" installed="1.10.63" location="./tools/phpstan" copy="false"/>
|
<phar name="phpstan" version="^1.10.37" installed="1.10.67" location="./tools/phpstan" copy="false"/>
|
||||||
<phar name="phan" version="^5.4.2" installed="5.4.3" location="./tools/phan" copy="false"/>
|
<phar name="phan" version="^5.4.2" installed="5.4.3" location="./tools/phan" copy="false"/>
|
||||||
</phive>
|
</phive>
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
9.12.0
|
9.12.1
|
||||||
|
|||||||
@@ -56,10 +56,14 @@ if [ ! -z "${GITEA_UPLOAD_FILENAME}" ] &&
|
|||||||
curl -LJO \
|
curl -LJO \
|
||||||
--output-dir "${PACKAGE_DOWNLOAD}" \
|
--output-dir "${PACKAGE_DOWNLOAD}" \
|
||||||
${GITEA_URL_DL}/v${VERSION}.zip;
|
${GITEA_URL_DL}/v${VERSION}.zip;
|
||||||
curl --user ${GITEA_USER}:${GITEA_TOKEN} \
|
if [ -f "${PACKAGE_DOWNLOAD}${GITEA_UPLOAD_FILENAME}-v${VERSION}.zip" ]; then
|
||||||
--upload-file "${PACKAGE_DOWNLOAD}${GITEA_UPLOAD_FILENAME}-v${VERSION}.zip" \
|
print "Version file does not exist for ${VERSION}";
|
||||||
${GITEA_URL_PUSH}?version=${VERSION};
|
else
|
||||||
echo "${VERSION}" > "${file_last_published}";
|
curl --user ${GITEA_USER}:${GITEA_TOKEN} \
|
||||||
|
--upload-file "${PACKAGE_DOWNLOAD}${GITEA_UPLOAD_FILENAME}-v${VERSION}.zip" \
|
||||||
|
${GITEA_URL_PUSH}?version=${VERSION};
|
||||||
|
echo "${VERSION}" > "${file_last_published}";
|
||||||
|
fi;
|
||||||
else
|
else
|
||||||
echo "Missing either GITEA_UPLOAD_FILENAME, GITEA_URL_DL, GITEA_URL_PUSH, GITEA_USER or GITEA_TOKEN environment variable";
|
echo "Missing either GITEA_UPLOAD_FILENAME, GITEA_URL_DL, GITEA_URL_PUSH, GITEA_USER or GITEA_TOKEN environment variable";
|
||||||
fi;
|
fi;
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ class MimeEncode
|
|||||||
/**
|
/**
|
||||||
* wrapper function for mb mime convert
|
* wrapper function for mb mime convert
|
||||||
* for correct conversion with long strings
|
* for correct conversion with long strings
|
||||||
|
* NOTE: This is only a wrapper for mb_encode_mimeheader to stay compatible
|
||||||
*
|
*
|
||||||
* @param string $string string to encode
|
* @param string $string string to encode
|
||||||
* @param string $encoding target encoding
|
* @param string $encoding target encoding
|
||||||
@@ -29,38 +30,9 @@ class MimeEncode
|
|||||||
$current_internal_encoding = mb_internal_encoding();
|
$current_internal_encoding = mb_internal_encoding();
|
||||||
// set internal encoding, so the mimeheader encode works correctly
|
// set internal encoding, so the mimeheader encode works correctly
|
||||||
mb_internal_encoding($encoding);
|
mb_internal_encoding($encoding);
|
||||||
// if a subject, make a work around for the broken mb_mimencode
|
// use the internal convert to mime header
|
||||||
$pos = 0;
|
// it works from PHP 8.2 on
|
||||||
// after 36 single bytes characters,
|
$string = mb_encode_mimeheader($string, $encoding, 'B', $line_break);
|
||||||
// if then comes MB, it is broken
|
|
||||||
// has to 2 x 36 < 74 so the mb_encode_mimeheader
|
|
||||||
// 74 hardcoded split does not get triggered
|
|
||||||
$split = 36;
|
|
||||||
$_string = '';
|
|
||||||
while ($pos < mb_strlen($string, $encoding)) {
|
|
||||||
$output = mb_strimwidth($string, $pos, $split, "", $encoding);
|
|
||||||
$pos += mb_strlen($output, $encoding);
|
|
||||||
// if the strinlen is 0 here, get out of the loop
|
|
||||||
if (!mb_strlen($output, $encoding)) {
|
|
||||||
$pos += mb_strlen($string, $encoding);
|
|
||||||
}
|
|
||||||
$_string_encoded = mb_encode_mimeheader($output, $encoding);
|
|
||||||
// only make linebreaks if we have mime encoded code inside
|
|
||||||
// the space only belongs in the second line
|
|
||||||
if ($_string && preg_match("/^=\?/", $_string_encoded)) {
|
|
||||||
$_string .= $line_break . " ";
|
|
||||||
} elseif (
|
|
||||||
// hack for plain text with space at the end
|
|
||||||
mb_strlen($output, $encoding) == $split &&
|
|
||||||
mb_substr($output, -1, 1, $encoding) == " "
|
|
||||||
) {
|
|
||||||
// if output ends with space, add one more
|
|
||||||
$_string_encoded .= " ";
|
|
||||||
}
|
|
||||||
$_string .= $_string_encoded;
|
|
||||||
}
|
|
||||||
// strip out any spaces BEFORE a line break
|
|
||||||
$string = str_replace(" " . $line_break, $line_break, $_string);
|
|
||||||
// before we end, reset internal encoding
|
// before we end, reset internal encoding
|
||||||
mb_internal_encoding($current_internal_encoding);
|
mb_internal_encoding($current_internal_encoding);
|
||||||
// return mime encoded string
|
// return mime encoded string
|
||||||
|
|||||||
@@ -22,15 +22,12 @@ use SodiumException;
|
|||||||
class SymmetricEncryption
|
class SymmetricEncryption
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Encrypt a message
|
* create key and check validity
|
||||||
*
|
*
|
||||||
* @param string $message Message to encrypt
|
* @param string $key The key from which the binary key will be created
|
||||||
* @param string $key Encryption key (as hex string)
|
* @return string Binary key string
|
||||||
* @return string
|
|
||||||
* @throws \Exception
|
|
||||||
* @throws \RangeException
|
|
||||||
*/
|
*/
|
||||||
public static function encrypt(string $message, string $key): string
|
public static function createKey(string $key): string
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$key = CreateKey::hex2bin($key);
|
$key = CreateKey::hex2bin($key);
|
||||||
@@ -43,6 +40,21 @@ class SymmetricEncryption
|
|||||||
. 'SODIUM_CRYPTO_SECRETBOX_KEYBYTES bytes long).'
|
. 'SODIUM_CRYPTO_SECRETBOX_KEYBYTES bytes long).'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
return $key;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Encrypt a message
|
||||||
|
*
|
||||||
|
* @param string $message Message to encrypt
|
||||||
|
* @param string $key Encryption key (as hex string)
|
||||||
|
* @return string
|
||||||
|
* @throws \Exception
|
||||||
|
* @throws \RangeException
|
||||||
|
*/
|
||||||
|
public static function encrypt(string $message, string $key): string
|
||||||
|
{
|
||||||
|
$key = self::createKey($key);
|
||||||
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
|
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
|
||||||
|
|
||||||
$cipher = base64_encode(
|
$cipher = base64_encode(
|
||||||
@@ -68,11 +80,7 @@ class SymmetricEncryption
|
|||||||
*/
|
*/
|
||||||
public static function decrypt(string $encrypted, string $key): string
|
public static function decrypt(string $encrypted, string $key): string
|
||||||
{
|
{
|
||||||
try {
|
$key = self::createKey($key);
|
||||||
$key = CreateKey::hex2bin($key);
|
|
||||||
} catch (SodiumException $e) {
|
|
||||||
throw new \Exception('Invalid hex key');
|
|
||||||
}
|
|
||||||
$decoded = base64_decode($encrypted);
|
$decoded = base64_decode($encrypted);
|
||||||
$nonce = mb_substr($decoded, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, '8bit');
|
$nonce = mb_substr($decoded, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, '8bit');
|
||||||
$ciphertext = mb_substr($decoded, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, null, '8bit');
|
$ciphertext = mb_substr($decoded, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, null, '8bit');
|
||||||
|
|||||||
@@ -15,20 +15,22 @@ php_bin="";
|
|||||||
if [ ! -z "${1}" ]; then
|
if [ ! -z "${1}" ]; then
|
||||||
case "${1}" in
|
case "${1}" in
|
||||||
# "7.3") php_bin="/usr/bin/php7.3 "; ;;
|
# "7.3") php_bin="/usr/bin/php7.3 "; ;;
|
||||||
"7.4") php_bin="/usr/bin/php7.4 "; ;;
|
#"7.4") php_bin="/usr/bin/php7.4 "; ;;
|
||||||
"8.0") php_bin="/usr/bin/php8.0 "; ;;
|
#"8.0") php_bin="/usr/bin/php8.0 "; ;;
|
||||||
"8.1") php_bin="/usr/bin/php8.1 "; ;;
|
#"8.1") php_bin="/usr/bin/php8.1 "; ;;
|
||||||
"8.2") php_bin="/usr/bin/php8.2 "; ;;
|
"8.2") php_bin="/usr/bin/php8.2 "; ;;
|
||||||
|
"8.3") php_bin="/usr/bin/php8.3 "; ;;
|
||||||
*) echo "Not support PHP: ${1}"; exit; ;;
|
*) echo "Not support PHP: ${1}"; exit; ;;
|
||||||
esac;
|
esac;
|
||||||
fi;
|
fi;
|
||||||
if [ ! -z "${2}" ] && [ -z "${php_bin}" ]; then
|
if [ ! -z "${2}" ] && [ -z "${php_bin}" ]; then
|
||||||
case "${2}" in
|
case "${2}" in
|
||||||
# "7.3") php_bin="/usr/bin/php7.3 "; ;;
|
# "7.3") php_bin="/usr/bin/php7.3 "; ;;
|
||||||
"7.4") php_bin="/usr/bin/php7.4 "; ;;
|
#"7.4") php_bin="/usr/bin/php7.4 "; ;;
|
||||||
"8.0") php_bin="/usr/bin/php8.0 "; ;;
|
#"8.0") php_bin="/usr/bin/php8.0 "; ;;
|
||||||
"8.1") php_bin="/usr/bin/php8.1 "; ;;
|
#"8.1") php_bin="/usr/bin/php8.1 "; ;;
|
||||||
"8.2") php_bin="/usr/bin/php8.2 "; ;;
|
"8.2") php_bin="/usr/bin/php8.2 "; ;;
|
||||||
|
"8.3") php_bin="/usr/bin/php8.3 "; ;;
|
||||||
*) echo "Not support PHP: ${1}"; exit; ;;
|
*) echo "Not support PHP: ${1}"; exit; ;;
|
||||||
esac;
|
esac;
|
||||||
fi;
|
fi;
|
||||||
|
|||||||
@@ -33,15 +33,14 @@ final class CoreLibsConvertMimeEncodeTest extends TestCase
|
|||||||
'The quick brown fox jumps over the lazy sheep that sleeps in the ravine '
|
'The quick brown fox jumps over the lazy sheep that sleeps in the ravine '
|
||||||
. 'and has no idea what is going on here',
|
. 'and has no idea what is going on here',
|
||||||
'UTF-8',
|
'UTF-8',
|
||||||
'The quick brown fox jumps over the lazy sheep that sleeps in the ravine '
|
"The quick brown fox jumps over the lazy sheep that sleeps in the ravine and\r\n"
|
||||||
. 'and has no idea what is going on here'
|
. ' has no idea what is going on here'
|
||||||
],
|
],
|
||||||
'standard with special chars UTF-8' => [
|
'standard with special chars UTF-8' => [
|
||||||
'This is ümläßtと漢字もカタカナ!!^$%&',
|
'This is ümläßtと漢字もカタカナ!!^$%&',
|
||||||
'UTF-8',
|
'UTF-8',
|
||||||
'This is =?UTF-8?B?w7xtbMOkw59044Go5ryi5a2X44KC44Kr44K/44Kr44OK77yBIV4k?='
|
"This is =?UTF-8?B?w7xtbMOkw59044Go5ryi5a2X44KC44Kr44K/44Kr44OK77yBIV4k?=\r\n"
|
||||||
. "\r\n"
|
. ' =?UTF-8?B?JSY=?='
|
||||||
. ' =?UTF-8?B?JQ==?=&'
|
|
||||||
],
|
],
|
||||||
'35 chars and space at the end UTF-8' => [
|
'35 chars and space at the end UTF-8' => [
|
||||||
'12345678901234567890123456789012345 '
|
'12345678901234567890123456789012345 '
|
||||||
@@ -62,9 +61,8 @@ final class CoreLibsConvertMimeEncodeTest extends TestCase
|
|||||||
. 'is there a space?',
|
. 'is there a space?',
|
||||||
'UTF-8',
|
'UTF-8',
|
||||||
"=?UTF-8?B?44Kr44K/44Kr44OK44Kr44K/44Kr44OK44GL44Gq44Kr44K/44Kr44OK44Kr?=\r\n"
|
"=?UTF-8?B?44Kr44K/44Kr44OK44Kr44K/44Kr44OK44GL44Gq44Kr44K/44Kr44OK44Kr?=\r\n"
|
||||||
. " =?UTF-8?B?44K/44Kr44OK?=\r\n"
|
. " =?UTF-8?B?44K/44Kr44OK44GL44Gq44Kr44K/44Kr44OK44Kr44K/44Kr44OK44GL44Gq?=\r\n"
|
||||||
. " =?UTF-8?B?44GL44Gq44Kr44K/44Kr44OK44Kr44K/44Kr44OK44GL44Gq44Kr44K/44Kr?=\r\n"
|
. " =?UTF-8?B?44Kr44K/44Kr44OK44Kr44K/IGlzIHRoZXJlIGEgc3BhY2U/?="
|
||||||
. " =?UTF-8?B?44OK44Kr44K/?= is there a =?UTF-8?B?c3BhY2U/?="
|
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -85,16 +83,28 @@ final class CoreLibsConvertMimeEncodeTest extends TestCase
|
|||||||
// print "MIME: -" . $encoded . "-\n";
|
// print "MIME: -" . $encoded . "-\n";
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$expected,
|
$expected,
|
||||||
$encoded
|
$encoded,
|
||||||
|
"__mbMimeEncode"
|
||||||
);
|
);
|
||||||
$decoded = mb_decode_mimeheader($encoded);
|
$decoded = mb_decode_mimeheader($encoded);
|
||||||
// print "INPUT : " . $input . "\n";
|
// print "ENCODED: " . $encoded . "\n";
|
||||||
// print "DECODED: " . $decoded . "\n";
|
// print "INPUT : " . $input . " | " . mb_strlen($input) . "\n";
|
||||||
|
// print "DECODED: " . $decoded . " | " . mb_strlen($decoded) . "\n";
|
||||||
|
// $test_enc = mb_encode_mimeheader($input, $encoding);
|
||||||
|
// $test_dec = mb_decode_mimeheader($test_enc);
|
||||||
|
// print "TEST ENC: " . $test_enc . "\n";
|
||||||
// back compare decoded
|
// back compare decoded
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$input,
|
$input,
|
||||||
$decoded
|
$decoded,
|
||||||
|
"mb_decode_mimeheader"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// $this->assertEquals(
|
||||||
|
// $input,
|
||||||
|
// $test_dec,
|
||||||
|
// 'mb_encode_to_decode'
|
||||||
|
// );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
/home/clemens/.phive/phars/phpcbf-3.9.0.phar
|
/home/clemens/.phive/phars/phpcbf-3.9.1.phar
|
||||||
@@ -1 +1 @@
|
|||||||
/home/clemens/.phive/phars/phpcs-3.9.0.phar
|
/home/clemens/.phive/phars/phpcs-3.9.1.phar
|
||||||
@@ -1 +1 @@
|
|||||||
/home/clemens/.phive/phars/phpstan-1.10.63.phar
|
/home/clemens/.phive/phars/phpstan-1.10.67.phar
|
||||||
@@ -1 +1 @@
|
|||||||
/home/clemens/.phive/phars/phpunit-9.6.17.phar
|
/home/clemens/.phive/phars/phpunit-9.6.19.phar
|
||||||
Reference in New Issue
Block a user