Don’t encrypt/decrypt avatar URL or digest.

// FREEBIE
pull/1/head
Matthew Chen 8 years ago
parent cc789c7df5
commit 83d01eed76

@ -62,8 +62,8 @@ extern NSString *const kNSNotificationName_OtherUsersProfileDidChange;
- (void)updateProfileForRecipientId:(NSString *)recipientId
profileNameEncrypted:(NSData *_Nullable)profileNameEncrypted
avatarUrlEncrypted:(NSData *_Nullable)avatarUrlEncrypted
avatarDigestEncrypted:(NSData *_Nullable)avatarDigestEncrypted;
avatarUrlData:(NSData *_Nullable)avatarUrlData
avatarDigest:(NSData *_Nullable)avatarDigest;
@end

@ -424,10 +424,9 @@ static const NSInteger kProfileKeyLength = 16;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// TODO: Do we need to use NSDataBase64EncodingOptions?
NSString *_Nullable localProfileNameEncrypted =
[[self encryptProfileString:localProfileName] base64EncodedString];
NSString *_Nullable avatarUrlEncrypted = [[self encryptProfileString:avatarUrl] base64EncodedString];
NSString *_Nullable avatarDigestEncrypted = [[self encryptProfileData:avatarDigest] base64EncodedString];
NSString *_Nullable localProfileNameBase64 = [[self encryptProfileString:localProfileName] base64EncodedString];
NSString *_Nullable avatarUrlBase64 = [[avatarUrl dataUsingEncoding:NSUTF8StringEncoding] base64EncodedString];
NSString *_Nullable avatarDigestBase64 = [avatarDigest base64EncodedString];
// TODO:
if (YES) {
@ -669,8 +668,8 @@ static const NSInteger kProfileKeyLength = 16;
- (void)updateProfileForRecipientId:(NSString *)recipientId
profileNameEncrypted:(NSData *_Nullable)profileNameEncrypted
avatarUrlEncrypted:(NSData *_Nullable)avatarUrlEncrypted
avatarDigestEncrypted:(NSData *_Nullable)avatarDigestEncrypted
avatarUrlData:(NSData *_Nullable)avatarUrlData
avatarDigest:(NSData *_Nullable)avatarDigest
{
OWSAssert(recipientId.length > 0);
@ -681,8 +680,8 @@ static const NSInteger kProfileKeyLength = 16;
NSString *_Nullable profileName =
[self decryptProfileString:profileNameEncrypted profileKey:userProfile.profileKey];
NSString *_Nullable avatarUrl = [self decryptProfileString:avatarUrlEncrypted profileKey:userProfile.profileKey];
NSData *_Nullable avatarDigest = [self decryptProfileData:avatarDigestEncrypted profileKey:userProfile.profileKey];
NSString *_Nullable avatarUrl
= (avatarUrlData ? [[NSString alloc] initWithData:avatarUrlData encoding:NSUTF8StringEncoding] : nil);
if (!avatarUrl || !avatarDigest) {
// If either avatar url or digest is missing, skip both.
@ -745,8 +744,8 @@ static const NSInteger kProfileKeyLength = 16;
return nil;
}
// TODO: Decrypt.
return nil;
// TODO: Decrypt. For now, return the input.
return encryptedData;
}
+ (NSString *_Nullable)decryptProfileString:(NSData *_Nullable)encryptedData profileKey:(NSData *)profileKey
@ -770,8 +769,8 @@ static const NSInteger kProfileKeyLength = 16;
return nil;
}
// TODO: Encrypt.
return nil;
// TODO: Encrypt. For now, return the input.
return data;
}
+ (NSData *_Nullable)encryptProfileString:(NSString *_Nullable)value profileKey:(NSData *)profileKey

@ -116,8 +116,8 @@ class ProfileFetcherJob: NSObject {
OWSProfileManager.shared().updateProfile(forRecipientId : signalServiceProfile.recipientId,
profileNameEncrypted : signalServiceProfile.profileNameEncrypted,
avatarUrlEncrypted : signalServiceProfile.avatarUrlEncrypted,
avatarDigestEncrypted : signalServiceProfile.avatarDigestEncrypted)
avatarUrlData : signalServiceProfile.avatarUrlData,
avatarDigest : signalServiceProfile.avatarDigest)
}
private func verifyIdentityUpToDateAsync(recipientId: String, latestIdentityKey: Data) {
@ -146,14 +146,12 @@ struct SignalServiceProfile {
public let recipientId: String
public let identityKey: Data
public let profileNameEncrypted: Data?
public let avatarUrlEncrypted: Data?
public let avatarDigestEncrypted: Data?
public let avatarUrlData: Data?
public let avatarDigest: Data?
init(recipientId: String, rawResponse: Any?) throws {
self.recipientId = recipientId
Logger.info("rawResponse: \(rawResponse)")
guard let responseDict = rawResponse as? [String: Any?] else {
throw ValidationError.invalid(description: "\(TAG) unexpected type: \(String(describing: rawResponse))")
}
@ -177,26 +175,26 @@ struct SignalServiceProfile {
profileNameEncrypted = data
}
var avatarUrlEncrypted: Data? = nil
var avatarUrlData: Data? = nil
if let avatarUrlString = responseDict["avatar"] as? String {
guard let data = Data(base64Encoded: avatarUrlString) else {
throw ValidationError.invalidAvatarUrl(description: "\(TAG) unable to parse avatar URL: \(avatarUrlString)")
}
avatarUrlEncrypted = data
avatarUrlData = data
}
var avatarDigestEncrypted: Data? = nil
var avatarDigest: Data? = nil
if let avatarDigestString = responseDict["avatarDigest"] as? String {
guard let data = Data(base64Encoded: avatarDigestString) else {
throw ValidationError.invalidAvatarDigest(description: "\(TAG) unable to parse avatar digest: \(avatarDigestString)")
}
avatarDigestEncrypted = data
avatarDigest = data
}
// `removeKeyType` is an objc category method only on NSData, so temporarily cast.
self.identityKey = (identityKeyWithType as NSData).removeKeyType() as Data
self.profileNameEncrypted = profileNameEncrypted
self.avatarUrlEncrypted = avatarUrlEncrypted
self.avatarDigestEncrypted = avatarDigestEncrypted
self.avatarUrlData = avatarUrlData
self.avatarDigest = avatarDigest
}
}

Loading…
Cancel
Save