1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
Description: gcry_ac interfaces were dropped in libgcrypt 1.6
Asymmetric cryptography was never implemented in Crypt::GCrypt; this patch
just removes those stub.
Origin: https://rt.cpan.org/Public/Bug/Display.html?id=97201
Bug: https://rt.cpan.org/Public/Bug/Display.html?id=97201
Bug-Debian: https://bugs.debian.org/758993
https://bugs.debian.org/763254
Author: complx-on-cpan [...] opsec.eu
Reviewed-by: gregor herrmann <gregoa@debian.org>
Last-Update: 2014-09-28
--- a/GCrypt.xs
+++ b/GCrypt.xs
@@ -56,9 +56,13 @@
int type;
int action;
gcry_cipher_hd_t h;
+/*
gcry_ac_handle_t h_ac;
+*/
gcry_md_hd_t h_md;
+/*
gcry_ac_key_t key_ac;
+*/
gcry_error_t err;
int mode;
int padding;
@@ -203,7 +207,9 @@
char *s, *algo_s, *mode_s, *key_s;
int i, algo, mode;
unsigned int c_flags, ac_flags, md_flags;
+/*
gcry_ac_id_t ac_algo;
+*/
bool have_mode;
CODE:
New(0, RETVAL, 1, struct Crypt_GCrypt_s);
@@ -333,14 +339,7 @@
if (RETVAL->type == CG_TYPE_ASYMM) {
croak("Asymmetric cryptography is not yet supported by Crypt::GCrypt");
-
- RETVAL->err = gcry_ac_name_to_id(algo_s, &ac_algo);
- if (RETVAL->err)
- croak("Unknown algorithm %s", algo_s);
-
- /* Init ac */
- RETVAL->err = gcry_ac_open(&RETVAL->h_ac, ac_algo, ac_flags);
- if (RETVAL->h_ac == NULL) XSRETURN_UNDEF;
+ XSRETURN_UNDEF;
}
@@ -532,39 +531,6 @@
OUTPUT:
RETVAL
-SV *
-cg_sign(gcr, in)
- Crypt_GCrypt gcr;
- SV *in;
- PREINIT:
- gcry_mpi_t in_mpi, out_mpi;
- gcry_ac_data_t outdata;
- size_t len;
- const void *inbuf;
- const char *label;
- char* outbuf;
- CODE:
- /*
- in_mpi = gcry_mpi_new(0);
- out_mpi = gcry_mpi_new(0);
- inbuf = SvPV(in, len);
- printf("inbuf: %s\n", inbuf);
- gcry_mpi_scan( &in_mpi, GCRYMPI_FMT_STD, inbuf, strlen(inbuf), NULL );
- printf("Key: %s\n", gcr->key_ac);
- gcr->err = gcry_ac_data_sign(gcr->h_ac, gcr->key_ac, in_mpi, &outdata);
- if (gcr->err) {
- croak( gcry_strerror(gcr->err) );
- }
- printf("Here\n");
- gcr->err = gcry_ac_data_get_index (outdata, 0, 0, &label, &out_mpi);
- printf("Before (%s)\n", label);
- gcry_mpi_print(GCRYMPI_FMT_STD, outbuf, 1024, NULL, out_mpi);
- printf("After\n");
- RETVAL = newSVpv(outbuf, 0);
- */
- OUTPUT:
- RETVAL
-
void
cg_start(gcr, act)
Crypt_GCrypt gcr;
@@ -594,8 +560,10 @@
PREINIT:
char *k, *s;
char *mykey, *buf;
+/*
gcry_ac_key_type_t keytype;
gcry_ac_data_t keydata;
+*/
gcry_mpi_t mpi;
size_t len;
CODE:
@@ -617,22 +585,7 @@
/* Set key for asymmetric criptography */
if (gcr->type == CG_TYPE_ASYMM) {
- k = SvPV(ST(2), len);
-
- /* Key type */
- keytype = -1;
- s = SvPV(ST(1), len);
- if (strcmp(s, "private") == 0) keytype = GCRY_AC_KEY_SECRET;
- if (strcmp(s, "public") == 0) keytype = GCRY_AC_KEY_PUBLIC;
- if (keytype == -1)
- croak("Key must be private or public");
-
- gcry_control(GCRYCTL_INIT_SECMEM, strlen(k));
- mpi = gcry_mpi_snew(0);
- /* gcry_mpi_scan( &mpi, GCRYMPI_FMT_STD, k, NULL, NULL ); */
- gcr->err = gcry_ac_data_new(&keydata);
- gcr->err = gcry_ac_data_set(keydata, GCRY_AC_FLAG_COPY, "s", mpi);
- gcr->err = gcry_ac_key_init(&gcr->key_ac, gcr->h_ac, keytype, keydata);
+ croak("Asymmetric cryptography is not yet supported by Crypt::GCrypt");
}
void
@@ -796,7 +749,9 @@
Crypt_GCrypt gcr;
CODE:
if (gcr->type == CG_TYPE_CIPHER) gcry_cipher_close(gcr->h);
+/*
if (gcr->type == CG_TYPE_ASYMM) gcry_ac_close(gcr->h_ac);
+*/
if (gcr->type == CG_TYPE_DIGEST) gcry_md_close(gcr->h_md);
if (gcr->need_to_call_finish == 1)
|