ChatGPT code explanation
I threw this function:
protected function get_passphrase_list() {
// 2023-03-30 jj5 - we cache the generated passphrase list in a static variable so we don't
// have to constantly regenerate it and because we don't want to put this sensitive data
// into an instance field. If you don't want the passphrase list stored in a static variable
// override this method and implement differently.
static $result = null;
if ( $result !== null ) { return $result; }
$secret_list = $this->get_config_secret_list();
$result = [];
foreach ( $secret_list as $secret ) {
$result[] = $this->calc_passphrase( $secret );
}
return $result;
}
into ChatGPT and it said:
This is a protected function that returns a list of passphrases based on a list of secret values obtained from another function, get_config_secret_list(). The passphrases are generated using a method called calc_passphrase().
The function checks if the passphrase list has already been generated by looking at a static variable named $result. If $result is not null, the function returns it. Otherwise, the function generates the passphrase list and stores it in the $result variable.
The reason for caching the passphrase list in a static variable is to avoid having to regenerate it every time the function is called, which can be time-consuming. Additionally, it is considered a security best practice not to store sensitive data, such as passphrases, in instance fields.
If you want to change the way the passphrase list is stored, you can override this method and implement it differently.
PHP preg_match regex fail
So this happened. Basically the first regex causes preg_match to fail when it tries to process 128KiB ASCII zeros… and 128KiB isn’t really that many zeros. Fortunately the second regex performs much better, PHP runs out of memory before preg_match chokes on that one.
-------------------
Sat Apr 01 13:17:17 [bash:5.1.16 jobs:0 error:0 time:243]
jj5@charm:/home/jj5/desktop/experiment
$ cat base64-regex.php
<?php
test( '/^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=|[A-Za-z0-9+\/]{4})$/' );
test( '/^[a-zA-Z0-9\/+]{2,}={0,2}$/' );
function test( $regex ) {
echo "testing: $regex\n";
$n = 0;
for ( ;; ) {
$n++;
echo "n: $n\n";
$string = str_repeat( '0', pow( 2, $n ) );
$base64 = base64_encode( $string );
if ( preg_match( $regex, $base64 ) ) { continue; }
echo "error at N = $n.\n";
return;
}
}
-------------------
Sat Apr 01 13:17:21 [bash:5.1.16 jobs:0 error:0 time:247]
jj5@charm:/home/jj5/desktop/experiment
$ php base64-regex.php
testing: /^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=|[A-Za-z0-9+\/]{4})$/
n: 1
n: 2
n: 3
n: 4
n: 5
n: 6
n: 7
n: 8
n: 9
n: 10
n: 11
n: 12
n: 13
n: 14
n: 15
n: 16
n: 17
error at N = 17.
testing: /^[a-zA-Z0-9\/+]{2,}={0,2}$/
n: 1
n: 2
n: 3
n: 4
n: 5
n: 6
n: 7
n: 8
n: 9
n: 10
n: 11
n: 12
n: 13
n: 14
n: 15
n: 16
n: 17
n: 18
n: 19
n: 20
n: 21
n: 22
n: 23
n: 24
n: 25
n: 26
n: 27
n: 28
n: 29
n: 30
n: 31
n: 32
n: 33
n: 34
n: 35
Killed
-------------------
Sat Apr 01 13:18:21 [bash:5.1.16 jobs:0 error:137 time:307]
Announcing Kickass Crypto
I’m working on a PHP encryption library called Kickass Crypto.
Key management
Why Are Fluke Meters So EXPENSIVE?
This was interesting: eevBLAB 91 – Why Are Fluke Meters So EXPENSIVE?
The follow up, also good: EEVblog 1447 – EXPENSIVE Fluke vs CHEAPER Brymen – Teardown.
Silicon Chip books
The good people at Silicon Chip are clearing out their old library, and I have just arranged to buy 43 of their old electronics books for $2 each. Bargain! The gory details are here.
The Linux man-pages project
Today I discovered: The Linux man-pages project.
Forcing a partition table reload
I’m reading How Linux Works, 3rd Edition: What Every Superuser Should Know and I learned that you can force the kernel to reload a partition table with a command like this:
# blockdev --rereadpt /dev/sdX
Toilet light cover part 2
Just an update on my toilet light cover. My new screws arrived so I replaced the big (18mm) ones with some more appropriate smaller (10mm) ones. It’s now ready to go back in the roof, will do that soon.
