forked from pubnub/pubnub-api
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Common.m
132 lines (98 loc) · 3.86 KB
/
Common.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
//
// Common.m
// PubNub_NewAlt
//
// Created by itshastra on 11/04/12.
// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//
#import "Common.h"
#import "Base64.h"
#import "Cipher.h"
#import "JSON.h"
@implementation NSString (Extensions)
- (NSString*) urlEscapedString {
return (__bridge_transfer id)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)self, NULL, CFSTR(":@/?&=+"),kCFStringEncodingUTF8) ;
}
- (NSString*) unescapeURLString {
return (__bridge_transfer id)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault, (__bridge CFStringRef)self, CFSTR(""),
kCFStringEncodingUTF8) ;
}
- (BOOL) containsString:(NSString*)string {
NSRange range = [self rangeOfString:string];
return range.location != NSNotFound;
}
@end
@implementation CommonFunction
+(NSString*) HMAC_SHA256withKey:(NSString*)key Input:(NSString*) input {
const char *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding];
const char *cData = [input cStringUsingEncoding:NSUTF8StringEncoding];
unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
NSData *HMAC = [NSData dataWithBytesNoCopy: cHMAC length: sizeof(cHMAC) freeWhenDone: false];
NSString *hash = [HMAC description]; //This line doesn´t make sense
hash = [hash stringByReplacingOccurrencesOfString:@" " withString:@""];
hash = [hash stringByReplacingOccurrencesOfString:@"<" withString:@""];
hash = [hash stringByReplacingOccurrencesOfString:@">" withString:@""];
return hash;
}
// return a new autoreleased UUID string
+ (NSString *)generateUuidString
{
// create a new UUID which you own
CFUUIDRef uuid = CFUUIDCreate(kCFAllocatorDefault);
// create a new CFStringRef (toll-free bridged to NSString)
// that you own
NSString *uuidString = (__bridge_transfer NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuid);
// release the UUID
CFRelease(uuid);
return uuidString;
}
+ (NSString *)AES128EncryptWithKey:(NSString *)key Data:(NSString *)val
{
Cipher *ci = [[Cipher alloc] initWithKey: key];
NSData *data =[val dataUsingEncoding: NSUTF8StringEncoding];
NSData* enc = [ci encrypt: data];
[Base64 initialize];
return [Base64 encode:enc];
}
+ (NSString *)AES128EncryptWithKeyAndData:(NSString *)key Data:(NSData *)val
{
//return [self AES128Operation:kCCEncrypt key:key Data:data iv:iv];
Cipher *ci = [[Cipher alloc] initWithKey:key];
NSData *data = val ;
NSData* enc = [ci encrypt: data];
[Base64 initialize];
return [Base64 encode: enc];
}
+ (NSString *)AES128DecryptWithKey:(NSString *)key Data:(NSString *)data
{
Cipher *ci= [[Cipher alloc]initWithKey:key] ;
[Base64 initialize];
NSData * dat= [Base64 decode:data];
NSData *decData = [ci decrypt:dat] ;
if(decData == nil)
{
NSLog(@"Error: Failed to decrypt. Please validate symmetric (cipher) key.");
}
NSString *dec= [[NSString alloc]initWithData:decData encoding:NSUTF8StringEncoding] ;
return dec ;
}
+(NSString*)JSONToString:(id)object
{
NSString * jsonString= nil;
if ([NSJSONSerialization class]) {
if ([object isKindOfClass:[NSString class]]) {
object = [NSString stringWithFormat:@"\"%@\"", object];
return object;
} else {
NSError* error = nil;
id result = [NSJSONSerialization dataWithJSONObject:object options:kNilOptions error:&error];
if (error != nil) return nil;
jsonString =[[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];
}
}else{
jsonString = JSONWriteString(object);
}
return jsonString;
}
@end