101 lines
4.7 KiB
Markdown
101 lines
4.7 KiB
Markdown
|
|
#### Aperçu
|
||
|
|
|
||
|
|
Pendant la traduction de libjourou du C++ vers Java, j'ai réalisé que j'avais
|
||
|
|
besoin d'un ou de plusieurs fichiers ePub chiffrés pour mes tests. J'ai donc
|
||
|
|
écrit EncryptEPub pour accomplir cette tâche. EncryptEPub.jar prend un
|
||
|
|
fichier ePub non chiffré et le transforme en un fichier ePub chiffré.
|
||
|
|
|
||
|
|
Il commence par créer une clé symétrique AES de 128 bits (16 octets). Ensuite,
|
||
|
|
en utilisant soit un fichier "activation.xml" compatible avec libgourou, soit
|
||
|
|
les données du registre Windows, il chiffre cette clé symétrique avec la clé
|
||
|
|
publique provenant du certificat de licence X509 de l'utilisateur
|
||
|
|
("adept:licenseCertificate"). Il encode ensuite cette clé en base64 et, avec
|
||
|
|
l'UUID de l'utilisateur et une UUID constante, il crée un document XML minimal
|
||
|
|
"rights".
|
||
|
|
|
||
|
|
Il lit ensuite l'entrée '.opf' du fichier ePub original, telle qu'enregistrée
|
||
|
|
dans l'entrée ZIP "META-INF/container.xml", et analyse son nœud XML <spine>.
|
||
|
|
Il parcourt ensuite l'intégralité du fichier ePub original, copiant les entrées
|
||
|
|
du fichier d'origine vers un nouveau fichier d'archive ZIP de sortie. Il
|
||
|
|
commence par extraire chaque entrée et la décompresse en utilisant la méthode
|
||
|
|
'Inflate'. Si l'entrée n'est pas référencée dans le nœud <spine> du fichier
|
||
|
|
'.opf', il l'ajoute à la nouvelle archive en utilisant la méthode 'Deflate'
|
||
|
|
(compression). Si elle est référencée, il la compresse en utilisant la méthode
|
||
|
|
'Deflate' sans l'ajouter, chiffre les données compressées avec la clé symétrique
|
||
|
|
AES, puis ajoute les données chiffrées à la nouvelle archive ePub en utilisant
|
||
|
|
la méthode 'Store' (sans compression). Pour chaque fichier chiffré, il crée
|
||
|
|
également un élément <EncryptedData> dans un document XML d'encryption,
|
||
|
|
référençant le nom de l'entrée et spécifiant l'algorithme de chiffrement
|
||
|
|
(AES-128-CBC).
|
||
|
|
|
||
|
|
#### Par example:
|
||
|
|
|
||
|
|
`<EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#">`
|
||
|
|
 `<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/>`
|
||
|
|
 `<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">`
|
||
|
|
  `<resource xmlns="http://ns.adobe.com/adept">urn:uuid:82919621-81bd-419a-880b-c52eabc22bf1</resource>`
|
||
|
|
 `</KeyInfo>`
|
||
|
|
 `<CipherData>`
|
||
|
|
  `<CipherReference URI="toc.html"/>`
|
||
|
|
 `</CipherData>`
|
||
|
|
`</EncryptedData>`
|
||
|
|
|
||
|
|
Enfin, les documents XML "rights" et "encryption" sont convertis en fichiers
|
||
|
|
XML et ajoutés à l'ePub de sortie. Cette archive obtenue est le fichier ePub
|
||
|
|
fortement chiffré, complet avec les métadonnées TPM nécessaire, le rendant
|
||
|
|
prêt pour les tests.
|
||
|
|
|
||
|
|
#### Format d'utilisation:
|
||
|
|
|
||
|
|
> java -jar EncryptEPub.jar \[-hV\] \[--win\] \[-a=<nomFichierActivation>\]
|
||
|
|
> \[-D=<dossierAdept>\] <fichierEPub>
|
||
|
|
|
||
|
|
#### Options de Ligne de Commande
|
||
|
|
|
||
|
|
> ##### "-h" ou "--help"
|
||
|
|
>
|
||
|
|
> Affiche l'aide du programme (instructions d'utilisation) puis se termine.
|
||
|
|
>
|
||
|
|
> ##### "-V" ou "--version"
|
||
|
|
>
|
||
|
|
> Affiche les informations de version puis se termine.
|
||
|
|
>
|
||
|
|
> ##### "<fichierEPub>"
|
||
|
|
>
|
||
|
|
> Le nom et le chemin du fichier ePub à traiter. S'il n'est pas spécifié, ou
|
||
|
|
> s'il n'existe pas, le programme affichera un message d'erreur et se terminera.
|
||
|
|
>
|
||
|
|
> ##### "-a" ou "--activation-file" \[<nomFichierActivation>\]
|
||
|
|
>
|
||
|
|
> Spécifie le nom du fichier XML contenant l'UUID de l'utilisateur et son
|
||
|
|
> certificat de clé publique, dans le même format que celui utilisé par le
|
||
|
|
> fichier activation.xml de libgourou. Seuls les éléments <adept:user> et
|
||
|
|
> <adept:privateLicenseKey> sont requis. Si ce paramètre n'est pas fourni,
|
||
|
|
> le nom "activation.xml" sera utilisé par défaut.
|
||
|
|
>
|
||
|
|
> ##### "-D" ou "--adept-directory" \[<cheminDossier>\]
|
||
|
|
>
|
||
|
|
> Spécifie le répertoire qui contient le fichier d'activation. S'il n'est pas
|
||
|
|
> spécifié, le répertoire de travail actuel sera utilisé.
|
||
|
|
>
|
||
|
|
> ##### "--win"
|
||
|
|
>
|
||
|
|
> Lit le certificat de licence et l'UUID de l'utilisateur directement du
|
||
|
|
> Registre Windows au lieu d'utiliser le fichier d'activation. Si cette option
|
||
|
|
> est spécifiée _et_ que le programme est exécuté sur Windows, il tentera de
|
||
|
|
> lire l'UUID de l'utilisateur et le certificat de clé publique X509 à partir
|
||
|
|
> des clés de Registre :
|
||
|
|
>
|
||
|
|
> HKEY_CURRENT_USER\Software\Adobe\Adept\Activation\0001\0000, et
|
||
|
|
> HKEY_CURRENT_USER\Software\Adobe\Adept\Activation\0001\0002
|
||
|
|
>
|
||
|
|
> Ces clés doivent exister si Adobe Digital Editions a été installé et activé
|
||
|
|
> sur la même machine que celle où EncryptEPub est exécuté.
|
||
|
|
> ##### Gestion des erreurs
|
||
|
|
>
|
||
|
|
> Si l'option "--win" est spécifiée, et que les clés de Registre ne peuvent
|
||
|
|
> être trouvées, le programme affichera un message d'erreur et se terminera.
|
||
|
|
>
|
||
|
|
> Si l'option "--win" n'est pas spécifiée, et que le fichier d'activation ne
|
||
|
|
> peut être trouvé, le programme affichera un message d'erreur et se
|
||
|
|
> terminera.
|