MyNixOS website logo
Description

Windows DPAPI bindings.

Bindings for Windows DPAPI, for protecting data on one device using Windows logon or machine credentials. These functions return cipertext for you to store in a file or some other place. If you want the plaintext to be stored in the OS, you may be looking for the keyring package, which is also more portable. This is only bindings to the two most used functions CryptProtectData and CryptUnprotectData, as Microsoft no longer recommends its use in .NET (with SecureString).

Haskell bindings for Windows DPAPI

This project is to provide Haskell access to Windows's Data Protection API.

Usage

If you have some data that needs protecting such that only your user account can access it, say the location of your buried treasure, you could protect it with the following, then save it to a file or somewhere else.

saveEncrypted :: ByteString -> FilePath -> IO ()
saveEncrypted data filepath = cryptProtectData data Nothing CurrentUser *> writeFile filePath

Then you can get back easily, returning Nothing instead of catching an exception if you can't decrypt it.

readEncrypted :: FilePath -> IO (Maybe ByteString)
readEncrypted filepath = do
	data <- readFile filepath
	cryptUnprotectDataCheck data Nothing CurrentUser

You may want to covert the ciphertext to base64 or some other similar encoding before saving it, such as when you are saving it to a text file.

Tests

The tests rely on using PowerShell to protect and unprotect the data, to provide a half that works. However, this may trip your antimalware service when you run cabal test.

Metadata

Version

0.1.0.0

License

Platforms (76)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-freebsd
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64-windows
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-linux
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows