3v4l.org

run code in 500+ PHP versions simultaneously
<?php declare(strict_types = 1); /** * Bitbucket Webhook Signature * * @link https://stackoverflow.com/a/79425616/367456 */ enum BitbucketSignature { case sha256; case sha384; case sha512; public static function authContents( ?string $signature, string $payload, #[SensitiveParameter] string $secret ) : ?string { if (null === $signature) return null; $algo = array_intersect_key( array_column(BitbucketSignature::cases(), null, 'name'), array_flip(hash_hmac_algos()), )[substr($signature, 0, 6)] ?? null; return ($algo instanceof self) && hash_equals($signature, "$algo->name=".hash_hmac($algo->name, $payload, $secret), ) ? $payload : null; } } $secret = "It's a Secret to Everybody"; $contents = BitbucketSignature::authContents( signature: @$_SERVER['HTTP_X_HUB_SIGNATURE'], payload: file_get_contents(filename: 'php://input'), secret: $secret, ); var_dump($contents); $signature = 'sha256=a4771c39fbe90f317c7824e83ddef3caae9cb3d976c214ace1f2937e133263c9'; $payload = 'Hello World!'; $contents = BitbucketSignature::authContents( signature: $signature, payload: $payload, secret: $secret, ); var_dump($contents);
Output for 8.1.32 - 8.1.34, 8.2.0 - 8.2.30, 8.3.0 - 8.3.31, 8.4.1 - 8.4.22, 8.5.0 - 8.5.7
NULL string(12) "Hello World!"

preferences:
61.03 ms | 864 KiB | 4 Q