#include "FileVaultSPI.h"
#include "SFFileVault.h"
#include <Security/SecBridge.h>
#include <Security/cfutilities.h>
#pragma mark -------------------- SecFileVault implementation --------------------
OSStatus SecFileVaultCreate (CFStringRef password, bool enableMasterPassword, CFURLRef dmgout, CFStringRef volumeName,
CFStringRef sizeSpec)
{
BEGIN_SECAPI
SFFileVault sffv;
CFURLRef certificate = NULL;
if (enableMasterPassword)
sffv.getCertificate(&certificate);
sffv.create(password, certificate, dmgout, volumeName, sizeSpec);
if (certificate) CFRelease(certificate);
END_SECAPI
}
OSStatus SecFileVaultUserMount (CFStringRef password, CFURLRef dmgin, CFURLRef mountpoint, CFStringRef *devicepath)
{
BEGIN_SECAPI
SFFileVault sffv;
sffv.mount(password, NULL, dmgin, mountpoint, devicepath);
END_SECAPI
}
OSStatus SecFileVaultMasterMount(CFURLRef dmgin, CFURLRef mountpoint, CFStringRef *devicepath)
{
BEGIN_SECAPI
SFFileVault sffv;
sffv.mastermount(dmgin,mountpoint,devicepath);
END_SECAPI
}
OSStatus SecFileVaultUnmount(CFURLRef mountpoint, CFStringRef devicepath)
{
BEGIN_SECAPI
SFFileVault sffv;
sffv.unmount(mountpoint,devicepath);
END_SECAPI
}
OSStatus SecFileVaultUserChangePassword(CFStringRef password, CFStringRef devicepath)
{
BEGIN_SECAPI
SFFileVault fv;
fv.userChangePassword(password, devicepath);
END_SECAPI
}
OSStatus SecFileVaultMakeMasterPassword(CFStringRef masterPasswordPassword)
{
BEGIN_SECAPI
SFFileVault fv;
SecKeychainRef keychainRef;
fv.makeMasterPassword(masterPasswordPassword,&keychainRef);
END_SECAPI
}
Boolean SecFileVaultMasterPasswordEnabled(SecKeychainRef *keychainRef)
{
BEGIN_SECAPI
SFFileVault fv;
return fv.masterPasswordEnabled(keychainRef);
END_SECAPI1(false)
}
OSStatus SecFileVaultChangeMasterPasswordPassword(CFStringRef oldPassword,CFStringRef newPassword)
{
BEGIN_SECAPI
SFFileVault fv;
fv.changeMasterPasswordPassword(oldPassword,newPassword);
END_SECAPI
}
#pragma mark -------------------- SecFileVault extended implementation --------------------
OSStatus SecFileVaultMount(CFStringRef password, CFURLRef certificate, CFURLRef dmgin, CFURLRef mountpoint,
CFStringRef *devicepath)
{
BEGIN_SECAPI
SFFileVault sffv;
sffv.mount(password, certificate, dmgin, mountpoint, devicepath);
END_SECAPI
}
OSStatus SecFileVaultCreateUsingCertificate (CFStringRef password, CFURLRef certificate, CFURLRef dmgout, CFStringRef volumeName,
CFStringRef sizeSpec)
{
BEGIN_SECAPI
SFFileVault sffv;
sffv.create(password, certificate, dmgout, volumeName, sizeSpec);
END_SECAPI
}