From cf44f338e109308a022a4320245f40d0c51a57ca Mon Sep 17 00:00:00 2001 From: Kelp Date: Sat, 18 Aug 2012 11:35:45 +0800 Subject: [PATCH] add method: sharedInstance --- .../UserInterfaceState.xcuserstate | Bin 47466 -> 47969 bytes CocoaSecurity/CocoaSecurity.h | 3 +++ CocoaSecurity/CocoaSecurity.m | 11 +++++++++++ CocoaSecurityTests/CocoaSecurityTests.h | 2 +- CocoaSecurityTests/CocoaSecurityTests.m | 8 ++++---- 5 files changed, 19 insertions(+), 5 deletions(-) diff --git a/CocoaSecurity.xcodeproj/project.xcworkspace/xcuserdata/Kelp.xcuserdatad/UserInterfaceState.xcuserstate b/CocoaSecurity.xcodeproj/project.xcworkspace/xcuserdata/Kelp.xcuserdatad/UserInterfaceState.xcuserstate index ab4b992e57a6b674b222d373c1e71935971787cf..f32879dd58c5303c5674af917216393588c23189 100644 GIT binary patch delta 23854 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 Z{Il~f&A$Pe9%W*J&^$XJG>n{o3jhfSE#v?I diff --git a/CocoaSecurity/CocoaSecurity.h b/CocoaSecurity/CocoaSecurity.h index b7ba4d1..3df0847 100644 --- a/CocoaSecurity/CocoaSecurity.h +++ b/CocoaSecurity/CocoaSecurity.h @@ -42,6 +42,9 @@ #pragma mark - CocoaSecurity @interface CocoaSecurity : NSObject +#pragma mark - Init ++ (id)sharedInstance; + #pragma mark - AES Encrypt - (CocoaSecurityResult *)aesEncrypt:(NSString *)data key:(NSString *)key; - (CocoaSecurityResult *)aesEncrypt:(NSString *)data hexKey:(NSString *)key hexIv:(NSString *)iv; diff --git a/CocoaSecurity/CocoaSecurity.m b/CocoaSecurity/CocoaSecurity.m index ebfc0a1..5fd6f46 100644 --- a/CocoaSecurity/CocoaSecurity.m +++ b/CocoaSecurity/CocoaSecurity.m @@ -11,6 +11,17 @@ #pragma mark - CocoaSecurity @implementation CocoaSecurity +static CocoaSecurity *_instance = nil; + +#pragma mark - Init ++ (id)sharedInstance +{ + if (_instance == nil) { + _instance = [self new]; + } + return _instance; +} + #pragma mark - AES Encrypt // default AES Encrypt, key -> SHA384(key).sub(0, 32), iv -> SHA384(key).sub(32, 16) - (CocoaSecurityResult *)aesEncrypt:(NSString *)data key:(NSString *)key diff --git a/CocoaSecurityTests/CocoaSecurityTests.h b/CocoaSecurityTests/CocoaSecurityTests.h index 00fd3dc..e14b071 100644 --- a/CocoaSecurityTests/CocoaSecurityTests.h +++ b/CocoaSecurityTests/CocoaSecurityTests.h @@ -3,7 +3,7 @@ // CocoaSecurityTests // // Created by Kelp on 12/5/13. -// Copyright (c) 2012年 __MyCompanyName__. All rights reserved. +// Copyright (c) 2012 Phate. All rights reserved. // #import diff --git a/CocoaSecurityTests/CocoaSecurityTests.m b/CocoaSecurityTests/CocoaSecurityTests.m index 1150da0..afdcb42 100644 --- a/CocoaSecurityTests/CocoaSecurityTests.m +++ b/CocoaSecurityTests/CocoaSecurityTests.m @@ -3,7 +3,7 @@ // CocoaSecurityTests // // Created by Kelp on 12/5/13. -// Copyright (c) 2012年 __MyCompanyName__. All rights reserved. +// Copyright (c) 2012 Phate. All rights reserved. // #import "CocoaSecurityTests.h" @@ -39,7 +39,7 @@ - (void)testAES { - CocoaSecurity *cs = [[CocoaSecurity alloc] init]; + CocoaSecurity *cs = [CocoaSecurity sharedInstance]; CocoaSecurityDecoder *decoder = [[CocoaSecurityDecoder alloc] init]; // AES128 @@ -78,7 +78,7 @@ - (void)testMD5 { - CocoaSecurity *cs = [[CocoaSecurity alloc] init]; + CocoaSecurity *cs = [CocoaSecurity sharedInstance]; CocoaSecurityResult *md5Result = [cs md5:@"kelp"]; CocoaSecurityResult *hmacMd5Result = [cs hmacMd5:@"kelp" hmacKey:@"key"]; @@ -93,7 +93,7 @@ - (void)testSHA { - CocoaSecurity *cs = [[CocoaSecurity alloc] init]; + CocoaSecurity *cs = [CocoaSecurity sharedInstance]; CocoaSecurityResult *sha1Result = [cs sha1:@"kelp"]; CocoaSecurityResult *sha224Result = [cs sha224:@"kelp"]; CocoaSecurityResult *sha256Result = [cs sha256:@"kelp"];