@@ -16,6 +16,14 @@ - (id)initWithAlgorithm:(SSYDigesterAlgorithm)algorithm {
16
16
m_algorithm = SSYDigesterAlgorithmSha1 ;
17
17
CC_SHA1_Init (&m_context_sha1) ;
18
18
break ;
19
+ case SSYDigesterAlgorithmSha256:;
20
+ m_algorithm = SSYDigesterAlgorithmSha256 ;
21
+ CC_SHA256_Init (&m_context_sha256) ;
22
+ break ;
23
+ case SSYDigesterAlgorithmSha512:;
24
+ m_algorithm = SSYDigesterAlgorithmSha512 ;
25
+ CC_SHA512_Init (&m_context_sha512) ;
26
+ break ;
19
27
}
20
28
}
21
29
@@ -30,6 +38,12 @@ - (void)updateWithData:(NSData*)data {
30
38
case SSYDigesterAlgorithmSha1:
31
39
CC_SHA1_Update (&m_context_sha1, [data bytes ], (CC_LONG)[data length ]) ;
32
40
break ;
41
+ case SSYDigesterAlgorithmSha256:
42
+ CC_SHA256_Update (&m_context_sha256, [data bytes ], (CC_LONG)[data length ]) ;
43
+ break ;
44
+ case SSYDigesterAlgorithmSha512:
45
+ CC_SHA512_Update (&m_context_sha512, [data bytes ], (CC_LONG)[data length ]) ;
46
+ break ;
33
47
}
34
48
}
35
49
@@ -40,14 +54,15 @@ - (void)updateWithString:(NSString*)string
40
54
return ;
41
55
}
42
56
43
- NSInteger length ;
44
- const char * cString = [string cStringUsingEncoding: encoding] ;
57
+ NSInteger length ;
58
+ const char * encodedString = [string cStringUsingEncoding: encoding];
59
+ /* Note: encodedString is not necessarily a null-terminated C string. */
45
60
if (
46
61
(encoding == NSASCIIStringEncoding) ||
47
62
(encoding == NSUTF8StringEncoding)
48
63
) {
49
- if (cString ) {
50
- length = (strlen (cString )) ;
64
+ if (encodedString ) {
65
+ length = (strlen (encodedString )) ;
51
66
}
52
67
else {
53
68
length = 0 ;
@@ -65,7 +80,7 @@ - (void)updateWithString:(NSString*)string
65
80
length = 0 ;
66
81
}
67
82
68
- NSData * data = [NSData dataWithBytes: cString
83
+ NSData * data = [NSData dataWithBytes: encodedString
69
84
length: length] ;
70
85
[self updateWithData: data] ;
71
86
}
@@ -81,10 +96,21 @@ - (NSData*)finalizeDigest {
81
96
hash = [[NSMutableData alloc ] initWithLength: CC_SHA1_DIGEST_LENGTH] ;
82
97
CC_SHA1_Final ([hash mutableBytes ], &m_context_sha1) ;
83
98
break ;
99
+ case SSYDigesterAlgorithmSha256:;
100
+ hash = [[NSMutableData alloc ] initWithLength: CC_SHA256_DIGEST_LENGTH] ;
101
+ CC_SHA256_Final ([hash mutableBytes ], &m_context_sha256) ;
102
+ break ;
103
+ case SSYDigesterAlgorithmSha512:;
104
+ hash = [[NSMutableData alloc ] initWithLength: CC_SHA512_DIGEST_LENGTH] ;
105
+ CC_SHA512_Final ([hash mutableBytes ], &m_context_sha512) ;
106
+ break ;
84
107
}
85
108
NSData * answer = [NSData dataWithData: hash] ;
109
+ #if !__has_feature(objc_arc)
86
110
[hash release ] ;
111
+ #endif
112
+
87
113
return answer ;
88
114
}
89
115
90
- @end
116
+ @end
0 commit comments