Ejemplo n.º 1
0
int zuluCryptCreateVolume( const char * dev,const char * fs,const char * type,const char * pass,size_t pass_size,const char * rng )
{
	string_t st ;
	int fd ;
	int r ;
	if( StringPrefixMatch( dev,"/dev/",5 ) ){
		return _create_volume( dev,fs,type,pass,pass_size,rng ) ;
	}else{
		/*
		 * zuluCryptAttachLoopDeviceToFile() is defined in ./create_loop.c
		 */
		if( zuluCryptAttachLoopDeviceToFile( dev,O_RDWR,&fd,&st ) ){
			r = _create_volume( StringContent( st ),fs,type,pass,pass_size,rng ) ;
			StringDelete( &st ) ;
			close( fd ) ;
			return r ;
		}else{
			return 3 ;
		}
	}
}
Ejemplo n.º 2
0
static int _create_tcrypt_volume( const char * device,const char * file_system,
				  const char * rng,const char * key,size_t key_len,
				  int key_source,u_int64_t hidden_volume_size,
				  const char * file_system_h,const char * key_h,size_t key_len_h,int key_source_h )
{
	string_t st = StringVoid ;
	string_t xt = StringVoid ;

	tcrypt_t info ;

	int r = 3 ;

	if( zuluCryptPathIsNotValid( device ) ){
		return 1 ;
	}

	memset( &info,'\0',sizeof( tcrypt_t ) ) ;

	info.device = device ;
	info.key_source = key_source ;
	info.key_source_h = key_source_h ;
	info.hidden_volume_size = hidden_volume_size ;

	if( StringPrefixMatch( rng,"/dev/urandom",12 ) ){
		info.weak_keys_and_salt = 1 ;
	}

	if( info.key_source == TCRYPT_PASSPHRASE ){
		info.key = key ;
		info.key_source_1 = "passphrase" ;
	}else{
		/*
		 * zuluCryptCreateKeyFile() is defined in open_tcrypt.c
		 */
		st = zuluCryptCreateKeyFile( key,key_len,"create_tcrypt-1-" ) ;
		info.key = StringContent( st ) ;
		info.key_source = TCRYPT_KEYFILE_FILE ;
		info.key_source_1 = "keyfiles" ;
	}

	if( info.hidden_volume_size > 0 ){

		if( info.key_source_h == TCRYPT_PASSPHRASE ){
			info.key_h = key_h ;
			info.key_source_h_1 = "h_passphrase" ;
		}else{
			xt = zuluCryptCreateKeyFile( key_h,key_len_h,"create_tcrypt-2-" ) ;
			info.key_h = StringContent( xt ) ;
			info.key_source_h = TCRYPT_KEYFILE_FILE ;
			info.key_source_h_1 = "h_keyfiles" ;
		}
	}

	if( _create_volume( &info ) == TC_OK ){
		r = _create_file_system( device,file_system,info.key_source,info.key,key_len,TCRYPT_NORMAL ) ;
		if( info.hidden_volume_size > 0 && r == 0 ){
			r = _create_file_system( device,file_system_h,info.key_source_h,info.key_h,key_len_h,TCRYPT_HIDDEN ) ;
		}
	}

	/*
	 * zuluCryptDeleteFile() is defined in file_path_security.c
	 */
	if( st != StringVoid ){
		zuluCryptDeleteFile( StringContent( st ) ) ;
		StringDelete( &st ) ;
	}
	if( xt != StringVoid ){
		zuluCryptDeleteFile( StringContent( xt ) ) ;
		StringDelete( &xt ) ;
	}

	return r ;
}