---
name: "libfvde"
section: "3"
platform: "linux"
package: "libfvde-dev"
version: "20240502-1+b1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/libfvde"
---

# libfvde(3)

Library to access the FileVault Drive Encryption (FVDE) format

## NAME

**libfvde.h** – Library to access the FileVault Drive Encryption (FVDE) format

## SYNOPSIS

**#include \<libfvde.h\>**

Support functions

*const* *char* *\**\

**libfvde\_get\_version**(*void*);

*int*\

**libfvde\_get\_access\_flags\_read**(*void*);

*int*\

**libfvde\_get\_codepage**(*int \*codepage*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_set\_codepage**(*int codepage*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_check\_volume\_signature**(*const char \*filename*, *libfvde\_error\_t \*\*error*);

Available when compiled with wide character string support:

*int*\

**libfvde\_check\_volume\_signature\_wide**(*const wchar\_t \*filename*, *libfvde\_error\_t \*\*error*);

Available when compiled with libbfio support:

*int*\

**libfvde\_check\_volume\_signature\_file\_io\_handle**(*libbfio\_handle\_t \*file\_io\_handle*, *libfvde\_error\_t \*\*error*);

Notify functions

*void*\

**libfvde\_notify\_set\_verbose**(*int verbose*);

*int*\

**libfvde\_notify\_set\_stream**(*FILE \*stream*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_notify\_stream\_open**(*const char \*filename*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_notify\_stream\_close**(*libfvde\_error\_t \*\*error*);

Error functions

*void*\

**libfvde\_error\_free**(*libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_error\_fprint**(*libfvde\_error\_t \*error*, *FILE \*stream*);

*int*\

**libfvde\_error\_sprint**(*libfvde\_error\_t \*error*, *char \*string*, *size\_t size*);

*int*\

**libfvde\_error\_backtrace\_fprint**(*libfvde\_error\_t \*error*, *FILE \*stream*);

*int*\

**libfvde\_error\_backtrace\_sprint**(*libfvde\_error\_t \*error*, *char \*string*, *size\_t size*);

Volume functions

*int*\

**libfvde\_volume\_initialize**(*libfvde\_volume\_t \*\*volume*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_volume\_free**(*libfvde\_volume\_t \*\*volume*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_volume\_signal\_abort**(*libfvde\_volume\_t \*volume*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_volume\_open**(*libfvde\_volume\_t \*volume*, *const char \*filename*, *int access\_flags*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_volume\_open\_physical\_volume\_files**(*libfvde\_volume\_t \*volume*, *char \* const filenames\[\]*, *int number\_of\_filenames*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_volume\_close**(*libfvde\_volume\_t \*volume*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_volume\_read\_encrypted\_root\_plist**(*libfvde\_volume\_t \*volume*, *const char \*filename*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_volume\_get\_volume\_group**(*libfvde\_volume\_t \*volume*, *libfvde\_volume\_group\_t \*\*volume\_group*, *libfvde\_error\_t \*\*error*);

Available when compiled with wide character string support:

*int*\

**libfvde\_volume\_open\_wide**(*libfvde\_volume\_t \*volume*, *const wchar\_t \*filename*, *int access\_flags*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_volume\_open\_physical\_volume\_files\_wide**(*libfvde\_volume\_t \*volume*, *wchar\_t \* const filenames\[\]*, *int number\_of\_filenames*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_volume\_read\_encrypted\_root\_plist\_wide**(*libfvde\_volume\_t \*volume*, *const wchar\_t \*filename*, *libfvde\_error\_t \*\*error*);

Available when compiled with libbfio support:

*int*\

**libfvde\_volume\_open\_file\_io\_handle**(*libfvde\_volume\_t \*volume*, *libbfio\_handle\_t \*file\_io\_handle*, *int access\_flags*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_volume\_open\_physical\_volume\_files\_file\_io\_pool**(*libfvde\_volume\_t \*volume*, *libbfio\_pool\_t \*file\_io\_pool*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_volume\_read\_encrypted\_root\_plist\_file\_io\_handle**(*libfvde\_volume\_t \*volume*, *libbfio\_handle\_t \*file\_io\_handle*, *libfvde\_error\_t \*\*error*);

Volume group functions

*int*\

**libfvde\_volume\_group\_free**(*libfvde\_volume\_group\_t \*\*volume\_group*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_volume\_group\_get\_identifier**(*libfvde\_volume\_group\_t \*volume\_group*, *uint8\_t \*uuid\_data*, *size\_t uuid\_data\_size*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_volume\_group\_get\_utf8\_name\_size**(*libfvde\_volume\_group\_t \*volume\_group*, *size\_t \*utf8\_string\_size*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_volume\_group\_get\_utf8\_name**(*libfvde\_volume\_group\_t \*volume\_group*, *uint8\_t \*utf8\_string*, *size\_t utf8\_string\_size*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_volume\_group\_get\_utf16\_name\_size**(*libfvde\_volume\_group\_t \*volume\_group*, *size\_t \*utf16\_string\_size*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_volume\_group\_get\_utf16\_name**(*libfvde\_volume\_group\_t \*volume\_group*, *uint16\_t \*utf16\_string*, *size\_t utf16\_string\_size*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_volume\_group\_get\_number\_of\_physical\_volumes**(*libfvde\_volume\_group\_t \*volume\_group*, *int \*number\_of\_physical\_volumes*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_volume\_group\_get\_physical\_volume\_by\_index**(*libfvde\_volume\_group\_t \*volume\_group*, *int volume\_index*, *libfvde\_physical\_volume\_t \*\*physical\_volume*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_volume\_group\_get\_number\_of\_logical\_volumes**(*libfvde\_volume\_group\_t \*volume\_group*, *int \*number\_of\_logical\_volumes*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_volume\_group\_get\_logical\_volume\_by\_index**(*libfvde\_volume\_group\_t \*volume\_group*, *int volume\_index*, *libfvde\_logical\_volume\_t \*\*logical\_volume*, *libfvde\_error\_t \*\*error*);

Physical volume functions

*int*\

**libfvde\_physical\_volume\_free**(*libfvde\_physical\_volume\_t \*\*physical\_volume*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_physical\_volume\_get\_identifier**(*libfvde\_physical\_volume\_t \*physical\_volume*, *uint8\_t \*uuid\_data*, *size\_t uuid\_data\_size*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_physical\_volume\_get\_encryption\_method**(*libfvde\_physical\_volume\_t \*physical\_volume*, *uint32\_t \*encryption\_method*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_physical\_volume\_get\_size**(*libfvde\_physical\_volume\_t \*physical\_volume*, *size64\_t \*size*, *libfvde\_error\_t \*\*error*);

Logical volume functions

*int*\

**libfvde\_logical\_volume\_free**(*libfvde\_logical\_volume\_t \*\*logical\_volume*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_logical\_volume\_unlock**(*libfvde\_logical\_volume\_t \*logical\_volume*, *libfvde\_error\_t \*\*error*);

*ssize\_t*\

**libfvde\_logical\_volume\_read\_buffer**(*libfvde\_logical\_volume\_t \*logical\_volume*, *void \*buffer*, *size\_t buffer\_size*, *libfvde\_error\_t \*\*error*);

*ssize\_t*\

**libfvde\_logical\_volume\_read\_buffer\_at\_offset**(*libfvde\_logical\_volume\_t \*logical\_volume*, *void \*buffer*, *size\_t buffer\_size*, *off64\_t offset*, *libfvde\_error\_t \*\*error*);

*off64\_t*\

**libfvde\_logical\_volume\_seek\_offset**(*libfvde\_logical\_volume\_t \*logical\_volume*, *off64\_t offset*, *int whence*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_logical\_volume\_get\_offset**(*libfvde\_logical\_volume\_t \*logical\_volume*, *off64\_t \*offset*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_logical\_volume\_get\_identifier**(*libfvde\_logical\_volume\_t \*logical\_volume*, *uint8\_t \*uuid\_data*, *size\_t uuid\_data\_size*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_logical\_volume\_get\_utf8\_name\_size**(*libfvde\_logical\_volume\_t \*logical\_volume*, *size\_t \*utf8\_string\_size*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_logical\_volume\_get\_utf8\_name**(*libfvde\_logical\_volume\_t \*logical\_volume*, *uint8\_t \*utf8\_string*, *size\_t utf8\_string\_size*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_logical\_volume\_get\_utf16\_name\_size**(*libfvde\_logical\_volume\_t \*logical\_volume*, *size\_t \*utf16\_string\_size*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_logical\_volume\_get\_utf16\_name**(*libfvde\_logical\_volume\_t \*logical\_volume*, *uint16\_t \*utf16\_string*, *size\_t utf16\_string\_size*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_logical\_volume\_get\_size**(*libfvde\_logical\_volume\_t \*logical\_volume*, *size64\_t \*size*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_logical\_volume\_is\_locked**(*libfvde\_logical\_volume\_t \*logical\_volume*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_logical\_volume\_set\_key**(*libfvde\_logical\_volume\_t \*logical\_volume*, *const uint8\_t \*volume\_master\_key*, *size\_t volume\_master\_key\_size*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_logical\_volume\_set\_utf8\_password**(*libfvde\_logical\_volume\_t \*logical\_volume*, *const uint8\_t \*utf8\_string*, *size\_t utf8\_string\_length*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_logical\_volume\_set\_utf16\_password**(*libfvde\_logical\_volume\_t \*logical\_volume*, *const uint16\_t \*utf16\_string*, *size\_t utf16\_string\_length*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_logical\_volume\_set\_utf8\_recovery\_password**(*libfvde\_logical\_volume\_t \*logical\_volume*, *const uint8\_t \*utf8\_string*, *size\_t utf8\_string\_length*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_logical\_volume\_set\_utf16\_recovery\_password**(*libfvde\_logical\_volume\_t \*logical\_volume*, *const uint16\_t \*utf16\_string*, *size\_t utf16\_string\_length*, *libfvde\_error\_t \*\*error*);

LVF encryption context and EncryptedRoot.plist file functions

*int*\

**libfvde\_encryption\_context\_plist\_initialize**(*libfvde\_encryption\_context\_plist\_t \*\*plist*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_encryption\_context\_plist\_free**(*libfvde\_encryption\_context\_plist\_t \*\*plist*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_encryption\_context\_plist\_get\_data\_size**(*libfvde\_encryption\_context\_plist\_t \*plist*, *size64\_t \*data\_size*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_encryption\_context\_plist\_copy\_data**(*libfvde\_encryption\_context\_plist\_t \*plist*, *uint8\_t \*data*, *size\_t data\_size*, *libfvde\_error\_t \*\*error*);

*int*\

**libfvde\_encryption\_context\_plist\_decrypt**(*libfvde\_encryption\_context\_plist\_t \*plist*, *const uint8\_t \*key*, *size\_t key\_bit\_size*, *libfvde\_error\_t \*\*error*);

Available when compiled with libbfio support:

*int*\

**libfvde\_encryption\_context\_plist\_read\_file\_io\_handle**(*libfvde\_encryption\_context\_plist\_t \*plist*, *libbfio\_handle\_t \*file\_io\_handle*, *libfvde\_error\_t \*\*error*);

## DESCRIPTION

The **libfvde\_get\_version**() function is used to retrieve the library version.

## RETURN VALUES

Most of the functions return NULL or -1 on error, dependent on the return type. For the actual return values see "libfvde.h".

## ENVIRONMENT

None

## FILES

None

## NOTES

libfvde can be compiled with wide character support (wchar\_t).

To compile libfvde with wide character support use: *./configure* *--enable-wide-character-type=yes*\
  or define: *\_UNICODE*\
  or *UNICODE*\
  during compilation.

*LIBFVDE\_WIDE\_CHARACTER\_TYPE*\
  in libfvde/features.h can be used to determine if libfvde was compiled with wide character support.

## BUGS

Please report bugs of any kind on the project issue tracker: https://github.com/libyal/libfvde/issues

## AUTHOR

These man pages are generated from "libfvde.h".

## COPYRIGHT

Copyright (C) 2011-2024, Omar Choudary \<choudary.omar@gmail.com\>, Joachim Metz \<joachim.metz@gmail.com\>.

This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

## SEE ALSO

the libfvde.h include file
