5c79b65
Author: complx-on-cpan [...] opsec.eu
5c79b65
5c79b65
libgcrypt 1.6.x reworked the assymmetric crypto API, but this wasn't
5c79b65
implemented in the perl module, anyway. So this just removes those stub parts
5c79b65
in the module.
5c79b65
5c79b65
CPAN RT#97201
5c79b65
5c79b65
--- GCrypt.xs.orig	2011-05-27 22:04:03.000000000 +0200
5c79b65
+++ GCrypt.xs	2014-07-27 16:14:05.000000000 +0200
5c79b65
@@ -56,9 +56,13 @@
5c79b65
     int type;
5c79b65
     int action;
5c79b65
     gcry_cipher_hd_t h;
5c79b65
+/*
5c79b65
     gcry_ac_handle_t h_ac;
5c79b65
+*/
5c79b65
     gcry_md_hd_t h_md;
5c79b65
+/*
5c79b65
     gcry_ac_key_t key_ac;
5c79b65
+*/
5c79b65
     gcry_error_t err;
5c79b65
     int mode;
5c79b65
     int padding;
5c79b65
@@ -203,7 +207,9 @@
5c79b65
         char *s, *algo_s, *mode_s, *key_s;
5c79b65
         int i, algo, mode;
5c79b65
         unsigned int c_flags, ac_flags, md_flags;
5c79b65
+/*
5c79b65
         gcry_ac_id_t ac_algo;
5c79b65
+*/
5c79b65
         bool have_mode;
5c79b65
     CODE:
5c79b65
         New(0, RETVAL, 1, struct Crypt_GCrypt_s);
5c79b65
@@ -322,25 +328,19 @@
5c79b65
             if (!(algo = gcry_md_map_name(algo_s)))
5c79b65
                 croak("Unknown digest algorithm %s", algo_s);
5c79b65
 
5c79b65
-        RETVAL->err = gcry_md_open(&RETVAL->h_md, algo, md_flags);
5c79b65
+            RETVAL->err = gcry_md_open(&RETVAL->h_md, algo, md_flags);
5c79b65
             if (RETVAL->h_md == NULL) XSRETURN_UNDEF;
5c79b65
 
5c79b65
-        if (md_flags & GCRY_MD_FLAG_HMAC) {
5c79b65
-            /* what if this overwrites the earlier error value? */
5c79b65
-            RETVAL->err = gcry_md_setkey(RETVAL->h_md, key_s, RETVAL->keylen);
5c79b65
+            if (md_flags & GCRY_MD_FLAG_HMAC) {
5c79b65
+                /* what if this overwrites the earlier error value? */
5c79b65
+                RETVAL->err = gcry_md_setkey(RETVAL->h_md, key_s, RETVAL->keylen);
5c79b65
+            }
5c79b65
         }
5c79b65
-    }
5c79b65
         if (RETVAL->type == CG_TYPE_ASYMM) {
5c79b65
         
5c79b65
             croak("Asymmetric cryptography is not yet supported by Crypt::GCrypt");
5c79b65
+	    XSRETURN_UNDEF;
5c79b65
             
5c79b65
-            RETVAL->err = gcry_ac_name_to_id(algo_s, &ac_algo);
5c79b65
-            if (RETVAL->err)
5c79b65
-                croak("Unknown algorithm %s", algo_s);
5c79b65
-            
5c79b65
-            /* Init ac */
5c79b65
-            RETVAL->err = gcry_ac_open(&RETVAL->h_ac, ac_algo, ac_flags);
5c79b65
-            if (RETVAL->h_ac == NULL) XSRETURN_UNDEF;
5c79b65
         }
5c79b65
         
5c79b65
 
5c79b65
@@ -532,39 +532,6 @@
5c79b65
     OUTPUT:
5c79b65
         RETVAL
5c79b65
 
5c79b65
-SV *
5c79b65
-cg_sign(gcr, in)
5c79b65
-    Crypt_GCrypt gcr;
5c79b65
-    SV *in;
5c79b65
-    PREINIT:
5c79b65
-        gcry_mpi_t in_mpi, out_mpi;
5c79b65
-        gcry_ac_data_t outdata;
5c79b65
-        size_t len;
5c79b65
-        const void *inbuf;
5c79b65
-        const char *label;
5c79b65
-        char* outbuf;
5c79b65
-    CODE:
5c79b65
-        /*
5c79b65
-        in_mpi = gcry_mpi_new(0);
5c79b65
-        out_mpi = gcry_mpi_new(0);
5c79b65
-        inbuf = SvPV(in, len);
5c79b65
-        printf("inbuf: %s\n", inbuf);
5c79b65
-        gcry_mpi_scan( &in_mpi, GCRYMPI_FMT_STD, inbuf, strlen(inbuf), NULL );
5c79b65
-        printf("Key: %s\n", gcr->key_ac);
5c79b65
-        gcr->err = gcry_ac_data_sign(gcr->h_ac, gcr->key_ac, in_mpi, &outdata);
5c79b65
-        if (gcr->err) {
5c79b65
-            croak( gcry_strerror(gcr->err) );
5c79b65
-        }
5c79b65
-        printf("Here\n");
5c79b65
-        gcr->err = gcry_ac_data_get_index (outdata, 0, 0, &label, &out_mpi);
5c79b65
-        printf("Before (%s)\n", label);
5c79b65
-        gcry_mpi_print(GCRYMPI_FMT_STD, outbuf, 1024, NULL, out_mpi);
5c79b65
-        printf("After\n");
5c79b65
-        RETVAL = newSVpv(outbuf, 0);
5c79b65
-        */
5c79b65
-    OUTPUT:
5c79b65
-        RETVAL
5c79b65
-
5c79b65
 void
5c79b65
 cg_start(gcr, act)
5c79b65
     Crypt_GCrypt gcr;
5c79b65
@@ -594,8 +561,10 @@
5c79b65
     PREINIT:
5c79b65
         char *k, *s;
5c79b65
         char *mykey, *buf;
5c79b65
+/*
5c79b65
         gcry_ac_key_type_t keytype;
5c79b65
         gcry_ac_data_t keydata;
5c79b65
+*/
5c79b65
         gcry_mpi_t mpi;
5c79b65
         size_t len;
5c79b65
     CODE:
5c79b65
@@ -617,22 +586,7 @@
5c79b65
         
5c79b65
         /* Set key for asymmetric criptography */
5c79b65
         if (gcr->type == CG_TYPE_ASYMM) {
5c79b65
-            k = SvPV(ST(2), len);
5c79b65
-            
5c79b65
-            /* Key type */
5c79b65
-            keytype = -1;
5c79b65
-            s = SvPV(ST(1), len);
5c79b65
-            if (strcmp(s, "private") == 0) keytype = GCRY_AC_KEY_SECRET;
5c79b65
-            if (strcmp(s, "public") == 0) keytype = GCRY_AC_KEY_PUBLIC;
5c79b65
-            if (keytype == -1)
5c79b65
-                croak("Key must be private or public");
5c79b65
-            
5c79b65
-            gcry_control(GCRYCTL_INIT_SECMEM, strlen(k));
5c79b65
-            mpi = gcry_mpi_snew(0);
5c79b65
-            /* gcry_mpi_scan( &mpi, GCRYMPI_FMT_STD, k, NULL, NULL ); */
5c79b65
-            gcr->err = gcry_ac_data_new(&keydata);
5c79b65
-            gcr->err = gcry_ac_data_set(keydata, GCRY_AC_FLAG_COPY, "s", mpi);
5c79b65
-            gcr->err = gcry_ac_key_init(&gcr->key_ac, gcr->h_ac, keytype, keydata);
5c79b65
+            croak("Asymmetric cryptography is not yet supported by Crypt::GCrypt");
5c79b65
         }
5c79b65
 
5c79b65
 void
5c79b65
@@ -796,7 +750,9 @@
5c79b65
     Crypt_GCrypt gcr;
5c79b65
     CODE:
5c79b65
         if (gcr->type == CG_TYPE_CIPHER) gcry_cipher_close(gcr->h);
5c79b65
+/*
5c79b65
         if (gcr->type == CG_TYPE_ASYMM)  gcry_ac_close(gcr->h_ac);
5c79b65
+*/
5c79b65
         if (gcr->type == CG_TYPE_DIGEST) gcry_md_close(gcr->h_md);
5c79b65
         
5c79b65
         if (gcr->need_to_call_finish == 1)