benoitperrin 1abb470819 Fix adept_remove -O placing result in a nested sub-directory
With -O <dir>, the output path was built from the full input path
instead of its base name:

    filename = std::string(inputFile);
    if (outputDir)
        filename = std::string(outputDir) + "/" + filename;

So `adept_remove -O /out /tmp/x/book.epub` wrote the result to
/out/tmp/x/book.epub (createPath() silently creating the intermediate
directories) instead of /out/book.epub.

-O is documented as the directory "were to put result", so only the
input's base name should be appended. acsmdownloader is unaffected
because it derives its output name from the title metadata, not from
the input path.

Reduce the input to its base name before prefixing it with -O.
2026-07-01 11:14:30 +02:00
2026-04-12 19:42:11 +02:00
2026-04-03 14:38:34 +02:00
2026-01-25 10:15:35 +01:00

Introduction

libgourou is a free implementation of Adobe's ADEPT protocol used to add DRM on ePub/PDF files. It overcomes the lack of Adobe support for Linux platforms.

Architecture

Like RMSDK, libgourou has a client/server scheme. All platform specific functions (crypto, network...) have to be implemented in a client class (that derives from DRMProcessorClient) while server implements ADEPT protocol. A reference implementation using cURL, OpenSSL and libzip is provided (in utils directory).

Main functions to use from gourou::DRMProcessor are:

  • Get an ePub from an ACSM file : fulfill() and download()
  • Create a new device : createDRMProcessor()
  • Register a new device : signIn() and activateDevice()
  • Remove DRM : removeDRM()
  • Return loaned book : returnLoan()

You can import configuration from (at least):

  • Kobo device : .adept/device.xml, .adept/devicesalt and .adept/activation.xml
  • Bookeen device : .adobe-digital-editions/device.xml, root/devkey.bin and .adobe-digital-editions/activation.xml

Or create a new one. Be careful: there is a limited number of devices that can be created by one account.

ePub are encrypted using a shared key: one account / multiple devices, so you can create and register a device into your computer and read downloaded (and encrypted) ePub file with your eReader configured using the same AdobeID account.

For those who want to remove DRM without adept_remove, you can export your private key and import it within Calibre an its DeDRM plugin.

Dependencies

For libgourou:

externals :

  • libpugixml

internals:

  • uPDFParser

For utils:

  • libcurl
  • openssl
  • libzip
  • libpugixml

External & utils dependencies has to be installed by your package manager (apt for example). Use -dev flavours to get needed headers. Internal libraries are automatically fetched and statically compiled during the first compilation. When you update libgourou's repository, don't forget to update internal libraries with:

make update_lib

Compilation

Use make command

make [CROSS=XXX] [DEBUG=(0*|1)] [STATIC_UTILS=(0*|1)] [BUILD_UTILS=(0|1*)] [BUILD_STATIC=(0*|1)] [BUILD_SHARED=(0|1*)] [all*|clean|ultraclean|build_utils|install|uninstall]

CROSS can define a cross compiler prefix (ie arm-linux-gnueabihf-)

DEBUG can be set to compile in DEBUG mode

BUILD_UTILS to build utils or not

STATIC_UTILS to build utils with static library (libgourou.a) instead of default dynamic one (libgourou.so)

BUILD_STATIC build libgourou.a if 1, nothing if 0, can be combined with BUILD_SHARED

BUILD_SHARED build libgourou.so if 1, nothing if 0, can be combined with BUILD_STATIC

other variables are DESTDIR and PREFIX to handle destination install directory

  • Default value

Utils

First, add libgourou.so to your LD_LIBRARY_PATH

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD

You can optionaly specify your .adept directory

export ADEPT_DIR=/home/XXX

Then, use utils as following:

You can import configuration from your eReader or create a new one with utils/adept_activate:

./utils/adept_activate -u <AdobeID USERNAME>

Then a /home//.config/adept directory is created with all configuration file

To download an ePub/PDF:

./utils/acsmdownloader <ACSM_FILE>

To export your private key (for DeDRM software):

./utils/acsmdownloader --export-private-key [-o adobekey_1.der]

To remove ADEPT DRM:

./utils/adept_remove <encryptedFile>

To list loaned books:

./utils/adept_loan_mgt [-l]

To return a loaned book:

./utils/adept_loan_mgt -r <id>

You can get utils full options description with -h or --help switch

Binary packages

Compiled version (and AppImage) of libgourou and utils are available in Release page

Docker

A docker image (by bcliang) is available at https://github.com/bcliang/docker-libgourou/

Grégory Soutadé

License

libgourou : LGPL v3 or later

utils : BSD

Special thanks

  • Jens for all test samples and utils testing
  • Milian for debug & code
  • Berwyn H for all test samples, feedbacks, patches and kind donation

Donation

https://www.paypal.com/donate/?hosted_button_id=JD3U6XMZCPHKN

Donators

  • Berwyn H
  • bwitt
  • Ismail
  • Radon
S
Description
No description provided
Readme 2.1 MiB
2026-04-12 19:44:11 +02:00
Languages
C++ 94.8%
Roff 2.4%
Makefile 1.7%
C 0.9%
Shell 0.2%