Fix SCRAM auth
This commit is contained in:
parent
1061c08262
commit
3c10a522cd
1 changed files with 17 additions and 18 deletions
|
@ -266,8 +266,7 @@ OF_ASSUME_NONNULL_END
|
|||
@throw [OFInvalidServerReplyException exception];
|
||||
|
||||
// Add c=<base64(GS2Header+channelBindingData)>
|
||||
tmpArray = [OFMutableData data];
|
||||
[tmpArray addItems: [_GS2Header UTF8String]
|
||||
tmpArray = [OFMutableData dataWithItems: [_GS2Header UTF8String]
|
||||
count: [_GS2Header UTF8StringLength]];
|
||||
if (_plusAvailable && [_connection encrypted]) {
|
||||
OFData *channelBinding = [((SSLSocket *)[_connection socket])
|
||||
|
@ -318,7 +317,7 @@ OF_ASSUME_NONNULL_END
|
|||
* ClientKey := HMAC(SaltedPassword, "Client Key")
|
||||
*/
|
||||
clientKey = [self XMPP_HMACWithKey: saltedPassword
|
||||
data: [OFData dataWithItems: @"Client key"
|
||||
data: [OFData dataWithItems: "Client Key"
|
||||
count: 10]];
|
||||
|
||||
/*
|
||||
|
@ -327,24 +326,23 @@ OF_ASSUME_NONNULL_END
|
|||
*/
|
||||
[hash updateWithBuffer: (void *)clientKey
|
||||
length: [_hashType digestSize]];
|
||||
tmpArray = [OFMutableData dataWithItems: [hash digest]
|
||||
count: [_hashType digestSize]];
|
||||
|
||||
/*
|
||||
* IETF RFC 5802:
|
||||
* ClientSignature := HMAC(StoredKey, AuthMessage)
|
||||
*/
|
||||
clientSignature = [self XMPP_HMACWithKey: tmpArray
|
||||
clientSignature = [self
|
||||
XMPP_HMACWithKey: [OFData dataWithItems: [hash digest]
|
||||
count: [_hashType digestSize]]
|
||||
data: authMessage];
|
||||
|
||||
/*
|
||||
* IETF RFC 5802:
|
||||
* ServerKey := HMAC(SaltedPassword, "Server Key")
|
||||
*/
|
||||
tmpArray = [OFMutableData dataWithItems: "Server Key"
|
||||
count: 10];
|
||||
serverKey = [self XMPP_HMACWithKey: saltedPassword
|
||||
data: tmpArray];
|
||||
data: [OFData dataWithItems: "Server Key"
|
||||
count: 10]];
|
||||
|
||||
/*
|
||||
* IETF RFC 5802:
|
||||
|
@ -354,7 +352,7 @@ OF_ASSUME_NONNULL_END
|
|||
count: [_hashType digestSize]];
|
||||
|
||||
[_serverSignature release];
|
||||
_serverSignature = [[OFMutableData alloc]
|
||||
_serverSignature = [[OFData alloc]
|
||||
initWithItems: [self XMPP_HMACWithKey: tmpArray
|
||||
data: authMessage]
|
||||
count: [_hashType digestSize]];
|
||||
|
@ -363,7 +361,7 @@ OF_ASSUME_NONNULL_END
|
|||
* IETF RFC 5802:
|
||||
* ClientProof := ClientKey XOR ClientSignature
|
||||
*/
|
||||
tmpArray = [OFMutableData data];
|
||||
tmpArray = [OFMutableData dataWithCapacity: [_hashType digestSize]];
|
||||
for (i = 0; i < [_hashType digestSize]; i++) {
|
||||
uint8_t c = clientKey[i] ^ clientSignature[i];
|
||||
[tmpArray addItem: &c];
|
||||
|
@ -495,14 +493,15 @@ OF_ASSUME_NONNULL_END
|
|||
uint8_t *result = NULL;
|
||||
const uint8_t *u, *uOld;
|
||||
intmax_t j, k;
|
||||
OFMutableData *salty, *tmp, *ret;
|
||||
OFMutableData *salty, *tmp;
|
||||
OFData *ret;
|
||||
|
||||
result = [self allocMemoryWithSize: digestSize];
|
||||
|
||||
@try {
|
||||
memset(result, 0, digestSize);
|
||||
|
||||
salty = [[salt copy] autorelease];
|
||||
salty = [[salt mutableCopy] autorelease];
|
||||
[salty addItems: "\0\0\0\1"
|
||||
count: 4];
|
||||
|
||||
|
@ -531,7 +530,7 @@ OF_ASSUME_NONNULL_END
|
|||
uOld = u;
|
||||
}
|
||||
|
||||
ret = [OFMutableData dataWithItems: result
|
||||
ret = [OFData dataWithItems: result
|
||||
count: digestSize];
|
||||
} @finally {
|
||||
[self freeMemory: result];
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue