32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
unsigned char *key, size_t keyLength)
{
size_t blocks, digestSize = [HMAC digestSize];
unsigned char *extendedSalt;
unsigned char buffer[digestSize];
unsigned char digest[digestSize];
if (HMAC == nil || iterations == 0 || salt == NULL || saltLength == 0 ||
password == NULL || key == NULL || keyLength == 0)
@throw [OFInvalidArgumentException exception];
blocks = keyLength / digestSize;
if (keyLength % digestSize != 0)
blocks++;
|
|
|
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
unsigned char *key, size_t keyLength)
{
size_t blocks, digestSize = [HMAC digestSize];
unsigned char *extendedSalt;
unsigned char buffer[digestSize];
unsigned char digest[digestSize];
if (HMAC == nil || iterations == 0 || salt == NULL ||
password == NULL || key == NULL || keyLength == 0)
@throw [OFInvalidArgumentException exception];
blocks = keyLength / digestSize;
if (keyLength % digestSize != 0)
blocks++;
|
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
memcpy(key, buffer, length);
key += length;
keyLength -= length;
i = OF_BSWAP32_IF_LE(OF_BSWAP32_IF_LE(i) + 1);
}
} @finally {
memset(extendedSalt, 0, saltLength + 4);
memset(buffer, 0, digestSize);
memset(digest, 0, digestSize);
[HMAC zero];
free(extendedSalt);
}
}
|
|
|
|
|
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
memcpy(key, buffer, length);
key += length;
keyLength -= length;
i = OF_BSWAP32_IF_LE(OF_BSWAP32_IF_LE(i) + 1);
}
} @finally {
of_explicit_memset(extendedSalt, 0, saltLength + 4);
of_explicit_memset(buffer, 0, digestSize);
of_explicit_memset(digest, 0, digestSize);
[HMAC zero];
free(extendedSalt);
}
}
|