From: Janusz Dziemidowicz <rrapt...@nails.eu.org>

There seems to be a slight change in S-expressions (fortunately
backward compatible). There is also additional flag needed in rather
strange place (data section instead of key section), most probably a
bug in gcrypt.

Decrypting a 350MB file with gcrypt 1.5 takes around 4 seconds on Core
Quad Q9450 2.66GHz while with gcrypt 1.6 around 2.8s (the processor
does not support AES-NI).
---
 src/libaacs/crypto.c | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/src/libaacs/crypto.c b/src/libaacs/crypto.c
index f1b54f8..0738f31 100644
--- a/src/libaacs/crypto.c
+++ b/src/libaacs/crypto.c
@@ -127,6 +127,9 @@ int crypto_init()
         if (!gcry_check_version(GCRYPT_VERSION)) {
             crypto_init_check = 0;
         }
+        if(GCRYPT_DEBUG) {
+            gcry_control(GCRYCTL_SET_DEBUG_FLAGS, 3);
+        }
     }
 
     return crypto_init_check;
@@ -297,14 +300,14 @@ static gcry_error_t _aacs_sexp_key(gcry_sexp_t 
*p_sexp_key,
     char *strfmt = str_printf(
       "(%s"
       "(ecdsa"
-      "(p #"AACS_EC_p"#)"
-      "(a #"AACS_EC_a"#)"
-      "(b #"AACS_EC_b"#)"
+      "(p #00"AACS_EC_p"#)"
+      "(a #00"AACS_EC_a"#)"
+      "(b #00"AACS_EC_b"#)"
       "(g #04"
           AACS_EC_G_x
           AACS_EC_G_y
           "#)"
-      "(n #"AACS_EC_n"#)"
+      "(n #00"AACS_EC_n"#)"
       "(q #%s#)"
       "%s))",
       mpi_d ? "private-key" : "public-key",
@@ -352,7 +355,16 @@ static gcry_error_t _aacs_sexp_sha1(gcry_sexp_t 
*p_sexp_data,
     GCRY_VERIFY("gcry_sexp_build",
                 gcry_sexp_build(p_sexp_data, NULL,
                                 "(data"
+#if defined(GCRYPT_VERSION_NUMBER) && GCRYPT_VERSION_NUMBER >= 0x010600
+                                /*
+                                 * For some reason gcrypt 1.6.0
+                                 * requires 'param' flag here and not
+                                 * in key, probably a bug.
+                                 */
+                                "  (flags raw param)"
+#else
                                 "  (flags raw)"
+#endif
                                 "  (value %m))",
                                 mpi_md
                                 ));
-- 
1.8.4

_______________________________________________
libaacs-devel mailing list
libaacs-devel@videolan.org
https://mailman.videolan.org/listinfo/libaacs-devel

Reply via email to