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.
		
		
		
		
		
			
		
			
				
	
	
		
			67 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
			
		
		
	
	
			67 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
| //
 | |
| //  CryptographyTests.m
 | |
| //  TextSecureiOS
 | |
| //
 | |
| //  Created by Christine Corbett Moran on 12/19/13.
 | |
| //  Copyright (c) 2013 Open Whisper Systems. All rights reserved.
 | |
| //
 | |
| 
 | |
| #import <XCTest/XCTest.h>
 | |
| #include <stdlib.h>
 | |
| #import "Cryptography.h"
 | |
| #import "NSData+Base64.h"
 | |
| 
 | |
| @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
 | |
| 
 | |
| 
 | |
| -(void) testLocalDecryption {
 | |
|     NSString* originalMessage = @"Hawaii is awesome";
 | |
|     NSString* signalingKeyString = @"VJuRzZcwuY/6VjGw+QSPy5ROzHo8xE36mKwHNvkfyZ+mSPaDlSDcenUqavIX1Vwn\nRRIdrg==";
 | |
|     NSData* signalingKey = [NSData dataFromBase64String:signalingKeyString];
 | |
|     XCTAssertTrue([signalingKey length]==52, @"signaling key is not 52 bytes but %llu", (unsigned long long)[signalingKey length]);
 | |
|     NSData* signalingKeyAESKeyMaterial = [signalingKey subdataWithRange:NSMakeRange(0, 32)];
 | |
|     NSData* signalingKeyHMACKeyMaterial = [signalingKey subdataWithRange:NSMakeRange(32, 20)];
 | |
|     NSData* iv = [Cryptography generateRandomBytes:16];
 | |
|     NSData* version = [Cryptography generateRandomBytes:1];
 | |
|     NSData* mac;
 | |
|     
 | |
|     NSData* encryption = [Cryptography encryptCBCMode:[originalMessage dataUsingEncoding:NSUTF8StringEncoding] withKey:signalingKeyAESKeyMaterial withIV:iv withVersion:version withHMACKey:signalingKeyHMACKeyMaterial withHMACType:TSHMACSHA1Truncated10Bytes computedHMAC:&mac]; //Encrypt
 | |
|     
 | |
|     NSMutableData *dataToHmac = [NSMutableData data ];
 | |
|     [dataToHmac appendData:version];
 | |
|     [dataToHmac appendData:iv];
 | |
|     [dataToHmac appendData:encryption];
 | |
|     
 | |
|     
 | |
|     NSData* expectedHmac = [Cryptography truncatedSHA1HMAC:dataToHmac withHMACKey:signalingKeyHMACKeyMaterial truncation:10];
 | |
|     
 | |
|     XCTAssertTrue([mac isEqualToData:expectedHmac], @"Hmac of encrypted data %@,  not equal to expected hmac %@", [mac base64EncodedString], [expectedHmac base64EncodedString]);
 | |
|     
 | |
|     NSData* decryption=[Cryptography decryptCBCMode:encryption key:signalingKeyAESKeyMaterial IV:iv version:version HMACKey:signalingKeyHMACKeyMaterial HMACType:TSHMACSHA1Truncated10Bytes matchingHMAC:mac];
 | |
|                         
 | |
|     NSString* decryptedMessage = [[NSString alloc] initWithData:decryption encoding:NSUTF8StringEncoding];
 | |
|     XCTAssertTrue([decryptedMessage isEqualToString:originalMessage],  @"Decrypted message: %@ is not equal to original: %@",decryptedMessage,originalMessage);
 | |
|     
 | |
| }
 | |
| 
 | |
| @end
 | |
| 
 |