| | 501 | * Calculates and compares the MD5 of a file to it's expected value. |
| | 502 | * |
| | 503 | * @since 3.7.0 |
| | 504 | * |
| | 505 | * @param string $filename The filename to check the MD5 of. |
| | 506 | * @param string $expected_md5 The expected MD5 of the file, either a base64 encoded raw md5, or a hex-encoded md5 |
| | 507 | * @return mixed WP_Error on failure, true on success. |
| | 508 | */ |
| | 509 | function verify_file_md5( $filename, $expected_md5 ) { |
| | 510 | if ( 32 == strlen( $expected_md5 ) ) |
| | 511 | $expected_raw_md5 = pack( 'H*', $expected_md5 ); |
| | 512 | elseif ( 24 == strlen( $expected_md5 ) ) |
| | 513 | $expected_raw_md5 = base64_decode( $expected_md5 ); |
| | 514 | else |
| | 515 | return true; // unknown format |
| | 516 | |
| | 517 | $file_md5 = md5_file( $filename, true ); |
| | 518 | |
| | 519 | if ( $file_md5 === $expected_raw_md5 ) |
| | 520 | return true; |
| | 521 | |
| | 522 | return new WP_Error( 'md5_mismatch', sprintf( __( 'The checksum of the file (%1$s) does not match the expected checksum value (%2$s).' ), bin2hex( $file_md5 ), bin2hex( $expected_raw_md5 ) ) ); |
| | 523 | } |
| | 524 | |
| | 525 | /** |