mirror of https://github.com/oxen-io/session-ios
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
3.7 KiB
Matlab
127 lines
3.7 KiB
Matlab
10 years ago
|
//
|
||
8 years ago
|
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||
10 years ago
|
//
|
||
|
|
||
|
#import <XCTest/XCTest.h>
|
||
|
#import "Cryptography.h"
|
||
|
#import "NSData+Base64.h"
|
||
|
|
||
8 years ago
|
NS_ASSUME_NONNULL_BEGIN
|
||
|
|
||
10 years ago
|
@interface CryptographyTests : XCTestCase
|
||
|
|
||
|
@end
|
||
|
|
||
|
@interface Cryptography (Test)
|
||
|
+ (NSData *)truncatedSHA256HMAC:(NSData *)dataToHMAC withHMACKey:(NSData *)HMACKey truncation:(int)bytes;
|
||
|
+ (NSData *)encryptCBCMode:(NSData *)dataToEncrypt
|
||
|
withKey:(NSData *)key
|
||
|
withIV:(NSData *)iv
|
||
|
withVersion:(NSData *)version
|
||
|
withHMACKey:(NSData *)hmacKey
|
||
|
withHMACType:(TSMACType)hmacType
|
||
|
computedHMAC:(NSData **)hmac;
|
||
|
|
||
|
+ (NSData *)decryptCBCMode:(NSData *)dataToDecrypt
|
||
|
key:(NSData *)key
|
||
|
IV:(NSData *)iv
|
||
|
version:(NSData *)version
|
||
|
HMACKey:(NSData *)hmacKey
|
||
|
HMACType:(TSMACType)hmacType
|
||
|
matchingHMAC:(NSData *)hmac;
|
||
|
@end
|
||
|
|
||
|
@implementation CryptographyTests
|
||
|
|
||
8 years ago
|
- (void)testEncryptAttachmentData
|
||
|
{
|
||
|
|
||
|
NSString *plainText = @"SGF3YWlpIGlzIEF3ZXNvbWUh";
|
||
|
NSData *plainTextData = [NSData dataFromBase64String:plainText];
|
||
|
|
||
|
// Sanity
|
||
|
XCTAssertNotNil(plainTextData);
|
||
|
|
||
|
NSData *generatedKey;
|
||
|
NSData *generatedDigest;
|
||
|
|
||
|
NSData *cipherText =
|
||
|
[Cryptography encryptAttachmentData:plainTextData outKey:&generatedKey outDigest:&generatedDigest];
|
||
|
|
||
|
NSData *decryptedData = [Cryptography decryptAttachment:cipherText withKey:generatedKey digest:generatedDigest];
|
||
|
|
||
|
XCTAssertEqualObjects(plainTextData, decryptedData);
|
||
|
}
|
||
|
|
||
|
- (void)testDecryptAttachmentWithBadKey
|
||
|
{
|
||
|
NSString *plainText = @"SGF3YWlpIGlzIEF3ZXNvbWUh";
|
||
|
NSData *plainTextData = [NSData dataFromBase64String:plainText];
|
||
|
|
||
|
// Sanity
|
||
|
XCTAssertNotNil(plainTextData);
|
||
|
|
||
|
NSData *generatedKey;
|
||
|
NSData *generatedDigest;
|
||
|
|
||
|
NSData *cipherText =
|
||
|
[Cryptography encryptAttachmentData:plainTextData outKey:&generatedKey outDigest:&generatedDigest];
|
||
10 years ago
|
|
||
8 years ago
|
NSData *badKey = [Cryptography generateRandomBytes:64];
|
||
|
|
||
|
NSData *decryptedData = [Cryptography decryptAttachment:cipherText withKey:badKey digest:generatedDigest];
|
||
|
|
||
|
XCTAssertNil(decryptedData);
|
||
|
}
|
||
|
|
||
|
- (void)testDecryptAttachmentWithBadDigest
|
||
|
{
|
||
|
NSString *plainText = @"SGF3YWlpIGlzIEF3ZXNvbWUh";
|
||
|
NSData *plainTextData = [NSData dataFromBase64String:plainText];
|
||
|
|
||
|
// Sanity
|
||
|
XCTAssertNotNil(plainTextData);
|
||
|
|
||
|
NSData *generatedKey;
|
||
|
NSData *generatedDigest;
|
||
|
|
||
|
NSData *cipherText =
|
||
|
[Cryptography encryptAttachmentData:plainTextData outKey:&generatedKey outDigest:&generatedDigest];
|
||
|
|
||
|
NSData *badDigest = [Cryptography generateRandomBytes:32];
|
||
|
|
||
|
NSData *decryptedData = [Cryptography decryptAttachment:cipherText withKey:generatedKey digest:badDigest];
|
||
|
|
||
|
XCTAssertNil(decryptedData);
|
||
10 years ago
|
}
|
||
|
|
||
8 years ago
|
- (void)testComputeSHA256Digest
|
||
|
{
|
||
|
NSString *plainText = @"SGF3YWlpIGlzIEF3ZXNvbWUh";
|
||
|
NSData *plainTextData = [NSData dataFromBase64String:plainText];
|
||
|
NSData *digest = [Cryptography computeSHA256Digest:plainTextData];
|
||
|
|
||
|
const uint8_t expectedBytes[] = {
|
||
|
0xba, 0x5f, 0xf1, 0x26,
|
||
|
0x82, 0xbb, 0xb2, 0x51,
|
||
|
0x8b, 0xe6, 0x06, 0x48,
|
||
|
0xc5, 0x53, 0xd0, 0xa2,
|
||
|
0xbf, 0x71, 0xf1, 0xec,
|
||
|
0xb4, 0xdb, 0x02, 0x12,
|
||
|
0x5f, 0x80, 0xea, 0x34,
|
||
|
0xc9, 0x8d, 0xee, 0x1f
|
||
|
};
|
||
|
|
||
|
NSData *expectedDigest = [NSData dataWithBytes:expectedBytes length:32];
|
||
|
XCTAssertEqualObjects(expectedDigest, digest);
|
||
|
|
||
|
NSData *expectedTruncatedDigest = [NSData dataWithBytes:expectedBytes length:10];
|
||
|
NSData *truncatedDigest = [Cryptography computeSHA256Digest:plainTextData truncatedToBytes:10];
|
||
|
XCTAssertEqualObjects(expectedTruncatedDigest, truncatedDigest);
|
||
|
}
|
||
|
|
||
|
|
||
10 years ago
|
@end
|
||
8 years ago
|
|
||
|
NS_ASSUME_NONNULL_END
|