Code Sample

Create a data vault for encrypted storage of application data.

SUPDataVault* dataVault = nil;
@try
{
  // If the dataVault already exists, call getVault and unlock it
  // If not, create the vault with necessary password
  // The password is chosen to make sure it satisfies password policy criteria given below
  if ( [SUPDataVault vaultExists:@"SampleVault"] ) {
    dataVault = [SUPDataVault getVault:@"SampleVault"];
    [dataVault unlock:@"password!1A" withSalt:@"saltD#ddg#k05%gnd[!1A"];
  }
  else {
    dataVault = [SUPDataVault createVault:@"SampleVault" withPassword:@"password!1A"  withSalt:@"saltD#ddg#k05%gnd[!1A"];
  }

  // Supply various criteria for password policy
  SUPDVPasswordPolicy *pwdPolicy = [[[SUPDVPasswordPolicy alloc] init] autorelease];
  pwdPolicy.defaultPasswordAllowed = YES;
  pwdPolicy.minLength = 4;
  pwdPolicy.hasDigits = YES;
  pwdPolicy.hasUpper = YES;
  pwdPolicy.hasLower = YES;
  pwdPolicy.hasSpecial = YES;
  pwdPolicy.expirationDays = 20;
  pwdPolicy.minUniqueChars = 3;
  pwdPolicy.lockTimeout = 1600;
  pwdPolicy.retryLimit = 20;

  // setPasswordPolicy will lock the vault to ensure old password conforms to new password policy settings
  [dataVault setPasswordPolicy:pwdPolicy];

  // You must unlock the vault after setting the password policy
  [dataVault unlock:@"password!1A" withSalt:@"saltD#ddg#k05%gnd[!1A"];

  // Use getPasswordPolicy to get the current policy set in the vault
  pwdPolicy = [dataVault getPasswordPolicy];
  NSLog(@" pwdPolicy %@ ",pwdPolicy.description);

  // Call setString by giving it a name:value pair to encrypt and persist
  // a string data type within your dataVault.
  [dataVault setString:@"stringName" withValue:@"stringValue"];

  // Call getString to retrieve the string we just stored in our data vault!
  NSString *storedStringValue = [dataVault getString:@"stringName"];
  NSLog(@" storedStringValue %@ ",storedStringValue.description);
  // Call setValue by giving it a name:value pair to encrypt and persist
  // a binary data type within your dataVault unsigned char acBinData[] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 };
  [dataVault setValue:@"binaryName" withValue:[NSData dataWithBytes:acBinData length:7]];

  // Call getValue to retrieve the binary we just stored in our data vault!
  NSData *storedBinaryValue = [dataVault getValue:@"binaryName"];

  NSLog(@" storedBinaryValue %@ ",storedBinaryValue );

  // Call getDataNames to retrieve all stored element names from our data vault
  //        NSArray * dataNames = [dataVault getDataNames];

  SUPObjectList * dataNames = [dataVault getDataNames];

  if ( dataNames != nil ) {
    SUPDVDataName *dataName;
    //            for ( NSInteger iIdx = 0; iIdx < [dataNames count]; iIdx++ ) {
    for ( NSInteger iIdx = 0; iIdx < [dataNames size]; iIdx ++) {
      dataName = [dataNames objectAtIndex:iIdx];
      if ( dataName.type == SUPDVDataTypeString ) {
        // Stored value is of string type
        NSString *thisStringValue = [dataVault getString:dataName.name];
        NSLog(@" thisStringValue %@ ",thisStringValue );
      }
      else if ( dataName.type == SUPDVDataTypeBinary ) {
        // Stored value is of binary type
        NSData *thisBinaryValue = [dataVault getValue:dataName.name];
        NSLog(@" thisBinaryValue %@ ",thisBinaryValue );
      }
      else {
        // Unknown type. Possibly stored using previous version of dataVault
        // Try as string first and then as binary
        NSString *thisStringValue = [dataVault getString:dataName.name];
        if ( thisStringValue == nil ) {
          NSData *thisBinaryValue = [dataVault getValue:dataName.name];
          NSLog(@" thisBinaryValue %@ ",thisBinaryValue );
        }
      }
    }
  }

  [dataVault changePassword:@"password!2A" withSalt:@"saltD#ddg#k05%gnd[!2A"];


  // Because this is a test example, we will delete our vault at the end.
  // This means we will forever lose all data we persisted in our data vault.
  [SUPDataVault deleteVault: @"SampleVault"];
}
@catch (DataVaultException *exception)
{
  NSLog(@"Datavault exception. Reason: %@", [exception reason]);
}