From 1d94331a52df168fc8ef3680be6164e6e0dd62dd Mon Sep 17 00:00:00 2001 From: Cedrick Gout Date: Mon, 19 Sep 2016 11:01:14 +0200 Subject: [PATCH] Added SHA512 --- IGDigest.podspec | 4 +-- IGDigest.xcodeproj/project.pbxproj | 44 ++++++++++++++++++----- IGDigest/Digest/NSData+SHA512Digest.h | 19 ++++++++++ IGDigest/Digest/NSData+SHA512Digest.m | 46 +++++++++++++++++++++++++ IGDigest/Digest/NSString+SHA512Digest.h | 21 +++++++++++ IGDigest/Digest/NSString+SHA512Digest.m | 42 ++++++++++++++++++++++ IGDigest/HMAC/NSString+SHA512HMAC.h | 16 +++++++++ IGDigest/HMAC/NSString+SHA512HMAC.m | 28 +++++++++++++++ IGDigestTests/SHA512DigestSpec.m | 24 +++++++++++++ IGDigestTests/SHA512HMACSpec.m | 28 +++++++++++++++ Podfile.lock | 2 +- README.md | 4 +++ 12 files changed, 266 insertions(+), 12 deletions(-) create mode 100644 IGDigest/Digest/NSData+SHA512Digest.h create mode 100644 IGDigest/Digest/NSData+SHA512Digest.m create mode 100644 IGDigest/Digest/NSString+SHA512Digest.h create mode 100644 IGDigest/Digest/NSString+SHA512Digest.m create mode 100644 IGDigest/HMAC/NSString+SHA512HMAC.h create mode 100644 IGDigest/HMAC/NSString+SHA512HMAC.m create mode 100644 IGDigestTests/SHA512DigestSpec.m create mode 100644 IGDigestTests/SHA512HMACSpec.m diff --git a/IGDigest.podspec b/IGDigest.podspec index c467d25..ab6232d 100644 --- a/IGDigest.podspec +++ b/IGDigest.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = 'IGDigest' - s.version = '1.1.3' - s.summary = 'Provides convenient wrappers for popular message digest formats (MD5, SHA1 and SHA256) and HMAC (Hash-based message authentication code).' + s.version = '1.1.4' + s.summary = 'Provides convenient wrappers for popular message digest formats (MD5, SHA1, SHA256 and SHA512) and HMAC (Hash-based message authentication code).' s.homepage = 'https://github.com/siuying/IGWebLogger' s.author = { 'Francis Chong' => 'francis@ignition.hk' } diff --git a/IGDigest.xcodeproj/project.pbxproj b/IGDigest.xcodeproj/project.pbxproj index b1378c7..e571fdb 100644 --- a/IGDigest.xcodeproj/project.pbxproj +++ b/IGDigest.xcodeproj/project.pbxproj @@ -7,6 +7,11 @@ objects = { /* Begin PBXBuildFile section */ + 0062BF1A1D8FDF90009D2C32 /* NSString+SHA512HMAC.m in Sources */ = {isa = PBXBuildFile; fileRef = 0062BF191D8FDF90009D2C32 /* NSString+SHA512HMAC.m */; }; + 0062BF1F1D8FDF9E009D2C32 /* NSData+SHA512Digest.m in Sources */ = {isa = PBXBuildFile; fileRef = 0062BF1C1D8FDF9E009D2C32 /* NSData+SHA512Digest.m */; }; + 0062BF201D8FDF9E009D2C32 /* NSString+SHA512Digest.m in Sources */ = {isa = PBXBuildFile; fileRef = 0062BF1E1D8FDF9E009D2C32 /* NSString+SHA512Digest.m */; }; + 0062BF231D8FDFB1009D2C32 /* SHA512DigestSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 0062BF211D8FDFB1009D2C32 /* SHA512DigestSpec.m */; }; + 0062BF241D8FDFB1009D2C32 /* SHA512HMACSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 0062BF221D8FDFB1009D2C32 /* SHA512HMACSpec.m */; }; 0745F1E4D13FC4BBC2E37BE0 /* libPods-IGDigestTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AC4209EFE06C1094665A4D00 /* libPods-IGDigestTests.a */; }; 5435871417093E00006F6732 /* NSString+SHA1Digest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5435871317093E00006F6732 /* NSString+SHA1Digest.m */; }; 5435871617093E5F006F6732 /* SHA1DigestSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5435871517093E5F006F6732 /* SHA1DigestSpec.m */; }; @@ -51,6 +56,14 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 0062BF181D8FDF90009D2C32 /* NSString+SHA512HMAC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSString+SHA512HMAC.h"; path = "HMAC/NSString+SHA512HMAC.h"; sourceTree = ""; }; + 0062BF191D8FDF90009D2C32 /* NSString+SHA512HMAC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSString+SHA512HMAC.m"; path = "HMAC/NSString+SHA512HMAC.m"; sourceTree = ""; }; + 0062BF1B1D8FDF9E009D2C32 /* NSData+SHA512Digest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSData+SHA512Digest.h"; path = "Digest/NSData+SHA512Digest.h"; sourceTree = ""; }; + 0062BF1C1D8FDF9E009D2C32 /* NSData+SHA512Digest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSData+SHA512Digest.m"; path = "Digest/NSData+SHA512Digest.m"; sourceTree = ""; }; + 0062BF1D1D8FDF9E009D2C32 /* NSString+SHA512Digest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSString+SHA512Digest.h"; path = "Digest/NSString+SHA512Digest.h"; sourceTree = ""; }; + 0062BF1E1D8FDF9E009D2C32 /* NSString+SHA512Digest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSString+SHA512Digest.m"; path = "Digest/NSString+SHA512Digest.m"; sourceTree = ""; }; + 0062BF211D8FDFB1009D2C32 /* SHA512DigestSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SHA512DigestSpec.m; sourceTree = ""; }; + 0062BF221D8FDFB1009D2C32 /* SHA512HMACSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SHA512HMACSpec.m; sourceTree = ""; }; 5435871217093E00006F6732 /* NSString+SHA1Digest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSString+SHA1Digest.h"; path = "Digest/NSString+SHA1Digest.h"; sourceTree = ""; }; 5435871317093E00006F6732 /* NSString+SHA1Digest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSString+SHA1Digest.m"; path = "Digest/NSString+SHA1Digest.m"; sourceTree = ""; }; 5435871517093E5F006F6732 /* SHA1DigestSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SHA1DigestSpec.m; sourceTree = ""; }; @@ -141,6 +154,8 @@ 5435873117095799006F6732 /* IGHMAC.m */, 5435872C17094E33006F6732 /* NSString+SHA256HMAC.h */, 5435872D17094E33006F6732 /* NSString+SHA256HMAC.m */, + 0062BF181D8FDF90009D2C32 /* NSString+SHA512HMAC.h */, + 0062BF191D8FDF90009D2C32 /* NSString+SHA512HMAC.m */, 54358739170958D2006F6732 /* NSString+SHA1HMAC.h */, 5435873A170958D2006F6732 /* NSString+SHA1HMAC.m */, 5435873C17095900006F6732 /* NSString+MD5HMAC.h */, @@ -217,6 +232,8 @@ 5435871517093E5F006F6732 /* SHA1DigestSpec.m */, 5435871D17093FA3006F6732 /* SHA256DigestSpec.m */, 5435872617094D9F006F6732 /* SHA256HMACSpec.m */, + 0062BF211D8FDFB1009D2C32 /* SHA512DigestSpec.m */, + 0062BF221D8FDFB1009D2C32 /* SHA512HMACSpec.m */, 5435873F17095938006F6732 /* SHA1HMACSpec.m */, 5435874117095942006F6732 /* MD5HMACSpec.m */, ); @@ -247,6 +264,10 @@ 5435871817093EC6006F6732 /* NSData+SHA256Digest.m */, 5435871A17093F54006F6732 /* NSString+SHA256Digest.h */, 5435871B17093F54006F6732 /* NSString+SHA256Digest.m */, + 0062BF1B1D8FDF9E009D2C32 /* NSData+SHA512Digest.h */, + 0062BF1C1D8FDF9E009D2C32 /* NSData+SHA512Digest.m */, + 0062BF1D1D8FDF9E009D2C32 /* NSString+SHA512Digest.h */, + 0062BF1E1D8FDF9E009D2C32 /* NSString+SHA512Digest.m */, ); name = Digest; sourceTree = ""; @@ -275,13 +296,13 @@ isa = PBXNativeTarget; buildConfigurationList = 5463E4CD1709370E00932020 /* Build configuration list for PBXNativeTarget "IGDigestTests" */; buildPhases = ( - 1A95B3EDEF419D154C524282 /* Check Pods Manifest.lock */, + 1A95B3EDEF419D154C524282 /* [CP] Check Pods Manifest.lock */, 5463E4B31709370E00932020 /* Sources */, 5463E4B41709370E00932020 /* Frameworks */, 5463E4B51709370E00932020 /* Resources */, 5463E4B61709370E00932020 /* ShellScript */, - A6EE85D6761AF31934594BB1 /* Embed Pods Frameworks */, - 845002979BBBD22778E27895 /* Copy Pods Resources */, + A6EE85D6761AF31934594BB1 /* [CP] Embed Pods Frameworks */, + 845002979BBBD22778E27895 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -345,14 +366,14 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 1A95B3EDEF419D154C524282 /* Check Pods Manifest.lock */ = { + 1A95B3EDEF419D154C524282 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "Check Pods Manifest.lock"; + name = "[CP] Check Pods Manifest.lock"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; @@ -373,14 +394,14 @@ shellPath = /bin/sh; shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n"; }; - 845002979BBBD22778E27895 /* Copy Pods Resources */ = { + 845002979BBBD22778E27895 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "Copy Pods Resources"; + name = "[CP] Copy Pods Resources"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; @@ -388,14 +409,14 @@ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-IGDigestTests/Pods-IGDigestTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; - A6EE85D6761AF31934594BB1 /* Embed Pods Frameworks */ = { + A6EE85D6761AF31934594BB1 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "Embed Pods Frameworks"; + name = "[CP] Embed Pods Frameworks"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; @@ -412,12 +433,15 @@ files = ( 5463E4A21709370E00932020 /* main.m in Sources */, 5463E4A61709370E00932020 /* IGAppDelegate.m in Sources */, + 0062BF1A1D8FDF90009D2C32 /* NSString+SHA512HMAC.m in Sources */, 5463E4AF1709370E00932020 /* IGViewController.m in Sources */, 5463E4D31709386000932020 /* NSData+MD5Digest.m in Sources */, 5463E4D6170938AF00932020 /* NSData+SHA1Digest.m in Sources */, 5463E4DB17093A8E00932020 /* NSString+MD5Digest.m in Sources */, 5435871417093E00006F6732 /* NSString+SHA1Digest.m in Sources */, 5435871917093EC6006F6732 /* NSData+SHA256Digest.m in Sources */, + 0062BF201D8FDF9E009D2C32 /* NSString+SHA512Digest.m in Sources */, + 0062BF1F1D8FDF9E009D2C32 /* NSData+SHA512Digest.m in Sources */, 5435871C17093F54006F6732 /* NSString+SHA256Digest.m in Sources */, 5435872E17094E33006F6732 /* NSString+SHA256HMAC.m in Sources */, 5435873217095799006F6732 /* IGHMAC.m in Sources */, @@ -433,7 +457,9 @@ 5463E4D8170939E000932020 /* MD5DigestSpec.m in Sources */, 5435871617093E5F006F6732 /* SHA1DigestSpec.m in Sources */, 5435871E17093FA3006F6732 /* SHA256DigestSpec.m in Sources */, + 0062BF241D8FDFB1009D2C32 /* SHA512HMACSpec.m in Sources */, 5435872717094D9F006F6732 /* SHA256HMACSpec.m in Sources */, + 0062BF231D8FDFB1009D2C32 /* SHA512DigestSpec.m in Sources */, 5435874017095938006F6732 /* SHA1HMACSpec.m in Sources */, 5435874217095942006F6732 /* MD5HMACSpec.m in Sources */, ); diff --git a/IGDigest/Digest/NSData+SHA512Digest.h b/IGDigest/Digest/NSData+SHA512Digest.h new file mode 100644 index 0000000..5da546e --- /dev/null +++ b/IGDigest/Digest/NSData+SHA512Digest.h @@ -0,0 +1,19 @@ +// +// NSData+SHA512Digest.h +// IGDigest +// +// Created by Cedrick Gout on 19/09/16. +// Copyright © 2016 Ignition Soft. All rights reserved. +// + +#import + +@interface NSData (SHA512Digest) + ++(NSData *)SHA512Digest:(NSData *)input; +-(NSData *)SHA512Digest; + ++(NSString *)SHA512HexDigest:(NSData *)input; +-(NSString *)SHA512HexDigest; + +@end diff --git a/IGDigest/Digest/NSData+SHA512Digest.m b/IGDigest/Digest/NSData+SHA512Digest.m new file mode 100644 index 0000000..f45d17e --- /dev/null +++ b/IGDigest/Digest/NSData+SHA512Digest.m @@ -0,0 +1,46 @@ +// +// NSData+SHA512Digest.m +// IGDigest +// +// Created by Cedrick Gout on 19/09/16. +// Copyright © 2016 Ignition Soft. All rights reserved. +// + +#import "NSData+SHA512Digest.h" +#import + +@implementation NSData (SHA512Digest) + ++(NSData *)SHA512Digest:(NSData *)input { + unsigned char result[CC_SHA512_DIGEST_LENGTH]; + + if (CC_SHA512(input.bytes, (CC_LONG)input.length, result)) { + return [[NSData alloc] initWithBytes:result length:CC_SHA512_DIGEST_LENGTH]; + } else { + return nil; + } +} + +-(NSData *)SHA512Digest { + return [NSData SHA512Digest:self]; +} + ++(NSString *)SHA512HexDigest:(NSData *)input { + unsigned char result[CC_SHA512_DIGEST_LENGTH]; + + if (CC_SHA512(input.bytes, (CC_LONG)input.length, result)) { + NSMutableString *ret = [NSMutableString stringWithCapacity:CC_SHA512_DIGEST_LENGTH*2]; + for (int i = 0; i + +@interface NSString (SHA512Digest) + ++(NSData *)SHA512Digest:(NSString *)input encoding:(NSStringEncoding)encoding; +-(NSData *)SHA512DigestWithEncoding:(NSStringEncoding)encoding; +-(NSData *)SHA512Digest; + ++(NSString *)SHA512HexDigest:(NSString *)input encoding:(NSStringEncoding)encoding; +-(NSString *)SHA512HexDigestWithEncoding:(NSStringEncoding)encoding; +-(NSString *)SHA512HexDigest; + +@end diff --git a/IGDigest/Digest/NSString+SHA512Digest.m b/IGDigest/Digest/NSString+SHA512Digest.m new file mode 100644 index 0000000..98ae9f0 --- /dev/null +++ b/IGDigest/Digest/NSString+SHA512Digest.m @@ -0,0 +1,42 @@ +// +// NSString+SHA512Digest.m +// IGDigest +// +// Created by Cedrick Gout on 19/09/16. +// Copyright © 2016 Ignition Soft. All rights reserved. +// + +#import "NSString+SHA512Digest.h" +#import "NSData+SHA512Digest.h" + +@implementation NSString (SHA512Digest) + ++(NSData *)SHA512Digest:(NSString *)input encoding:(NSStringEncoding)encoding { + NSData* data = [input dataUsingEncoding:encoding]; + return [data SHA512Digest]; +} + +-(NSData *)SHA512DigestWithEncoding:(NSStringEncoding)encoding { + NSData* data = [self dataUsingEncoding:encoding]; + return [data SHA512Digest]; +} + +-(NSData *)SHA512Digest { + return [self SHA512DigestWithEncoding:NSUTF8StringEncoding]; +} + ++(NSString *)SHA512HexDigest:(NSString *)input encoding:(NSStringEncoding)encoding { + NSData* data = [input dataUsingEncoding:encoding]; + return [data SHA512HexDigest]; +} + +-(NSString *)SHA512HexDigestWithEncoding:(NSStringEncoding)encoding { + NSData* data = [self dataUsingEncoding:encoding]; + return [data SHA512HexDigest]; +} + +-(NSString *)SHA512HexDigest { + return [self SHA512HexDigestWithEncoding:NSUTF8StringEncoding]; +} + +@end diff --git a/IGDigest/HMAC/NSString+SHA512HMAC.h b/IGDigest/HMAC/NSString+SHA512HMAC.h new file mode 100644 index 0000000..122eb51 --- /dev/null +++ b/IGDigest/HMAC/NSString+SHA512HMAC.h @@ -0,0 +1,16 @@ +// +// NSString+SHA512HMAC.h +// IGDigest +// +// Created by Cedrick Gout on 19/09/16. +// Copyright © 2016 Ignition Soft. All rights reserved. +// + +#import + +@interface NSString (SHA512HMAC) + +-(NSString *)SHA512HMACWithKey:(NSString*)key encoding:(NSStringEncoding)encoding; +-(NSString *)SHA512HMACWithKey:(NSString*)key; + +@end diff --git a/IGDigest/HMAC/NSString+SHA512HMAC.m b/IGDigest/HMAC/NSString+SHA512HMAC.m new file mode 100644 index 0000000..d12c23b --- /dev/null +++ b/IGDigest/HMAC/NSString+SHA512HMAC.m @@ -0,0 +1,28 @@ +// +// NSString+SHA512HMAC.m +// IGDigest +// +// Created by Cedrick Gout on 19/09/16. +// Copyright © 2016 Ignition Soft. All rights reserved. +// + +#import "NSString+SHA512HMAC.h" +#import "IGHMAC.h" +#include + +@implementation NSString (SHA512HMAC) + +-(NSString *)SHA512HMACWithKey:(NSString*)key encoding:(NSStringEncoding)encoding { + return [IGHMAC HMACWithMessage:self + key:key + encoding:encoding + algorithm:kCCHmacAlgSHA512 + digestLength:CC_SHA512_DIGEST_LENGTH]; +} + +-(NSString *)SHA512HMACWithKey:(NSString*)key { + return [self SHA512HMACWithKey:key + encoding:NSUTF8StringEncoding]; +} + +@end diff --git a/IGDigestTests/SHA512DigestSpec.m b/IGDigestTests/SHA512DigestSpec.m new file mode 100644 index 0000000..17f7b36 --- /dev/null +++ b/IGDigestTests/SHA512DigestSpec.m @@ -0,0 +1,24 @@ +#import "Specta.h" +#define EXP_SHORTHAND +#import "Expecta.h" + +#import "NSString+SHA512Digest.h" + +SpecBegin(SHA512DigestSpec) + +describe(@"SHA512Digest", ^{ + __block NSString* source; + __block NSString* digest; + + it(@"should return the correct digest", ^{ + source = @"hello world"; + digest = @"309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee511a7c7a9bcd3ca86d4cd86f989dd35bc5ff499670da34255b45b0cfd830e81f605dcf7dc5542e93ae9cd76f"; + expect([source SHA512HexDigest]).to.equal(digest); + + source = @"アップル"; + digest = @"c20586badc313340ced37f3af8263e27156a44df842168730a9c693a515d1fb7d8f2bfd77eb82d55e39fd72aed41e55aaa4f08b09e70d96633aa2ca7b97caa38"; + expect([source SHA512HexDigest]).to.equal(digest); + }); +}); + +SpecEnd diff --git a/IGDigestTests/SHA512HMACSpec.m b/IGDigestTests/SHA512HMACSpec.m new file mode 100644 index 0000000..984a0e1 --- /dev/null +++ b/IGDigestTests/SHA512HMACSpec.m @@ -0,0 +1,28 @@ +#import "Specta.h" +#define EXP_SHORTHAND +#import "Expecta.h" + +#import "NSString+SHA512HMAC.h" + +SpecBegin(SHA512HMACSpec) + +describe(@"SHA512HMAC", ^{ + __block NSString* key; + __block NSString* message; + __block NSString* signature; + + it(@"should return the correct digest", ^{ + key = @""; + message = @""; + signature = @"b936cee86c9f87aa5d3c6f2e84cb5a4239a5fe50480a6ec66b70ab5b1f4ac6730c6c515421b327ec1d69402e53dfb49ad7381eb067b338fd7b0cb22247225d47"; + expect([message SHA512HMACWithKey:key]).to.equal(signature); + + key = @"key"; + message = @"The quick brown fox jumps over the lazy dog"; + signature = @"b42af09057bac1e2d41708e48a902e09b5ff7f12ab428a4fe86653c73dd248fb82f948a549f7b791a5b41915ee4d1ec3935357e4e2317250d0372afa2ebeeb3a"; + expect([message SHA512HMACWithKey:key]).to.equal(signature); + }); + +}); + +SpecEnd diff --git a/Podfile.lock b/Podfile.lock index a21077e..5c2ee34 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -15,4 +15,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: c3c8007bac65eb328de10a061fd3bd240f09f94f -COCOAPODS: 1.0.0.beta.2 +COCOAPODS: 1.0.1 diff --git a/README.md b/README.md index 9021233..5702d05 100644 --- a/README.md +++ b/README.md @@ -11,12 +11,14 @@ Provides convenient wrappers for popular message digest formats (MD5, SHA1 and S #import "NSString+MD5Digest.h" #import "NSString+SHA1Digest.h" #import "NSString+SHA256Digest.h" +#import "NSString+SHA512Digest.h" // use them NSString* source = @"hello world"; [source MD5HexDigest]; // => @"5eb63bbbe01eeed093cb22bb8f5acdc3" [source SHA1HexDigest]; // => @"2aae6c35c94fcfb415dbe95f408b9ce91ee846ed" [source SHA256HexDigest]; // => @"b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9" +[source SHA512HexDigest]; // => @"309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee511a7c7a9bcd3ca86d4cd86f989dd35bc5ff499670da34255b45b0cfd830e81f605dcf7dc5542e93ae9cd76f" ``` @@ -27,6 +29,7 @@ NSString* source = @"hello world"; #import "NSString+MD5HMAC.h" #import "NSString+SHA1HMAC.h" #import "NSString+SHA256HMAC.h" +#import "NSString+SHA512HMAC.h" // use them NSString* source = @"The quick brown fox jumps over the lazy dog"; @@ -35,6 +38,7 @@ NSString* key = @"key"; [source MD5HMACWithKey:key]; // => @"80070713463e7749b90c2dc24911e275" [source SHA1HMACWithKey:key]; // => @"de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9" [source SHA256HMACWithKey:key]; // => @"f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8" +[source SHA512HMACWithKey:key]; // => @"b42af09057bac1e2d41708e48a902e09b5ff7f12ab428a4fe86653c73dd248fb82f948a549f7b791a5b41915ee4d1ec3935357e4e2317250d0372afa2ebeeb3a" ```