| 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 | /** |