123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- //
- // YYFileHash.h
- // YYKit <https://github.com/ibireme/YYKit>
- //
- // Created by ibireme on 14/11/2.
- // Copyright (c) 2015 ibireme.
- //
- // This source code is licensed under the MIT-style license found in the
- // LICENSE file in the root directory of this source tree.
- //
- #import <Foundation/Foundation.h>
- NS_ASSUME_NONNULL_BEGIN
- /// File hash algorithm type
- typedef NS_OPTIONS (NSUInteger, YYFileHashType) {
- YYFileHashTypeMD2 = 1 << 0, ///< MD2 hash
- YYFileHashTypeMD4 = 1 << 1, ///< MD4 hash
- YYFileHashTypeMD5 = 1 << 2, ///< MD5 hash
- YYFileHashTypeSHA1 = 1 << 3, ///< SHA1 hash
- YYFileHashTypeSHA224 = 1 << 4, ///< SHA224 hash
- YYFileHashTypeSHA256 = 1 << 5, ///< SHA256 hash
- YYFileHashTypeSHA384 = 1 << 6, ///< SHA384 hash
- YYFileHashTypeSHA512 = 1 << 7, ///< SHA512 hash
- YYFileHashTypeCRC32 = 1 << 8, ///< crc32 checksum
- YYFileHashTypeAdler32 = 1 << 9, ///< adler32 checksum
- };
- /**
- Utility for computing hashes of file with high performance and low memory usage.
- See `YYFileHashType` for all supported hash (checksum) type.
-
- Sample Code:
-
- YYFileHash *hash = [YYFileHash hashForFile:@"/tmp/Xcode6.dmg" types:YYFileHashTypeMD5 | YYFileHashTypeSHA1];
- NSLog(@"md5:%@ sha1:%@", hash.md5String, hash.sha1String);
-
- */
- @interface YYFileHash : NSObject
- /**
- Start calculate file hash and return the result.
-
- @discussion The calling thread is blocked until the asynchronous hash progress
- finished.
-
- @param filePath The path to the file to access.
-
- @param types File hash algorithm types.
-
- @return File hash result, or nil when an error occurs.
- */
- + (nullable YYFileHash *)hashForFile:(NSString *)filePath types:(YYFileHashType)types;
- /**
- Start calculate file hash and return the result.
-
- @discussion The calling thread is blocked until the asynchronous hash progress
- finished or cancelled.
-
- @param filePath The path to the file to access.
-
- @param types File hash algorithm types.
-
- @param block A block which is called in progress. The block takes 3 arguments:
- `totalSize` is the total file size in bytes;
- `processedSize` is the processed file size in bytes;
- `stop` is a reference to a Boolean value, which can be set to YES to stop
- further processing. If the block stop the processing, it just returns nil.
-
- @return File hash result, or nil when an error occurs.
- */
- + (nullable YYFileHash *)hashForFile:(NSString *)filePath
- types:(YYFileHashType)types
- usingBlock:(nullable void (^)(UInt64 totalSize, UInt64 processedSize, BOOL *stop))block;
- @property (nonatomic, readonly) YYFileHashType types; ///< hash type
- @property (nullable, nonatomic, strong, readonly) NSString *md2String; ///< md2 hash string in lowercase
- @property (nullable, nonatomic, strong, readonly) NSString *md4String; ///< md4 hash string in lowercase
- @property (nullable, nonatomic, strong, readonly) NSString *md5String; ///< md5 hash string in lowercase
- @property (nullable, nonatomic, strong, readonly) NSString *sha1String; ///< sha1 hash string in lowercase
- @property (nullable, nonatomic, strong, readonly) NSString *sha224String; ///< sha224 hash string in lowercase
- @property (nullable, nonatomic, strong, readonly) NSString *sha256String; ///< sha256 hash string in lowercase
- @property (nullable, nonatomic, strong, readonly) NSString *sha384String; ///< sha384 hash string in lowercase
- @property (nullable, nonatomic, strong, readonly) NSString *sha512String; ///< sha512 hash string in lowercase
- @property (nullable, nonatomic, strong, readonly) NSString *crc32String; ///< crc32 checksum string in lowercase
- @property (nullable, nonatomic, strong, readonly) NSString *adler32String; ///< adler32 checksum string in lowercase
- @property (nullable, nonatomic, strong, readonly) NSData *md2Data; ///< md2 hash
- @property (nullable, nonatomic, strong, readonly) NSData *md4Data; ///< md4 hash
- @property (nullable, nonatomic, strong, readonly) NSData *md5Data; ///< md5 hash
- @property (nullable, nonatomic, strong, readonly) NSData *sha1Data; ///< sha1 hash
- @property (nullable, nonatomic, strong, readonly) NSData *sha224Data; ///< sha224 hash
- @property (nullable, nonatomic, strong, readonly) NSData *sha256Data; ///< sha256 hash
- @property (nullable, nonatomic, strong, readonly) NSData *sha384Data; ///< sha384 hash
- @property (nullable, nonatomic, strong, readonly) NSData *sha512Data; ///< sha512 hash
- @property (nonatomic, readonly) uint32_t crc32; ///< crc32 checksum
- @property (nonatomic, readonly) uint32_t adler32; ///< adler32 checksum
- @end
- NS_ASSUME_NONNULL_END
|