main.m 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. //
  2. // main.m
  3. // RNCryptorVectors
  4. //
  5. // Test vectors to assist porting
  6. //
  7. //
  8. #import <Foundation/Foundation.h>
  9. #import "RNEncryptor.h"
  10. #import "RNDecryptor.h"
  11. #import "RNCryptorEngine.h"
  12. void Encrypt(NSString *string, NSString *password, NSData *encryptionSalt, NSData *HMACSalt, NSData *IV)
  13. {
  14. NSError *error = nil;
  15. NSData *plaintext = [string dataUsingEncoding:NSUTF8StringEncoding];
  16. NSData *encryptionKey = [RNCryptor keyForPassword:password
  17. salt:encryptionSalt
  18. settings:kRNCryptorAES256Settings.keySettings];
  19. NSData *HMACKey =[RNCryptor keyForPassword:password
  20. salt:HMACSalt
  21. settings:kRNCryptorAES256Settings.keySettings];
  22. RNCryptorEngine *engine = [[RNCryptorEngine alloc] initWithOperation:kCCEncrypt
  23. settings:kRNCryptorAES256Settings
  24. key:encryptionKey
  25. IV:IV
  26. error:&error];
  27. NSCAssert(engine && ! error, @"Failed engine:%@", error);
  28. NSMutableData *ciphertext = [NSMutableData new];
  29. [ciphertext appendData:[engine addData:plaintext error:&error]];
  30. [ciphertext appendData:[engine finishWithError:&error]];
  31. NSCAssert(ciphertext && ! error, @"Failed encryption:%@", error);
  32. printf("string=%s\n", [string UTF8String]);
  33. printf("plaintext=%s\n", [[plaintext description] UTF8String]);
  34. printf("password=%s\n", [password UTF8String]);
  35. printf("passwordData=%s\n", [[[password dataUsingEncoding:NSUTF8StringEncoding] description] UTF8String]);
  36. printf("encryptionSalt=%s\n", [[encryptionSalt description] UTF8String]);
  37. printf("HMACSalt=%s\n", [[HMACSalt description] UTF8String]);
  38. printf("encryptionKey=%s\n", [[encryptionKey description] UTF8String]);
  39. printf("HMACKey=%s\n", [[HMACKey description] UTF8String]);
  40. printf("ciphertext=%s\n", [[ciphertext description] UTF8String]);
  41. printf("---\n");
  42. }
  43. int main(int argc, const char * argv[])
  44. {
  45. @autoreleasepool {
  46. NSString *string = @"Short Vector";
  47. NSString *password = @"password";
  48. NSData *encryptionSalt = [@"12345678" dataUsingEncoding:NSUTF8StringEncoding];
  49. NSData *HMACSalt = [@"87654321" dataUsingEncoding:NSUTF8StringEncoding];
  50. NSData *IV = [@"0123456789abcdef" dataUsingEncoding:NSUTF8StringEncoding];
  51. Encrypt(string, password, encryptionSalt, HMACSalt, IV);
  52. string = @"This is a longer test vector intended to be longer than one block.";
  53. Encrypt(string, password, encryptionSalt, HMACSalt, IV);
  54. NSError *error;
  55. NSData *encryptedData = [RNEncryptor encryptData:[string dataUsingEncoding:NSUTF8StringEncoding]
  56. withSettings:kRNCryptorAES256Settings
  57. password:password
  58. error:&error];
  59. [encryptedData writeToFile:@"/tmp/RNCryptor.enc" atomically:NO];
  60. NSData *v1Data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"RNCryptorV1.enc" ofType:nil]];
  61. NSData *decryptedData = [RNDecryptor decryptData:v1Data withPassword:password error:&error];
  62. NSLog(@"decryptedData:%@", [[NSString alloc] initWithData:decryptedData encoding:NSUTF8StringEncoding]);
  63. NSLog(@"error:%@", error);
  64. }
  65. return 0;
  66. }