Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: GnuPG: gcrypt
[PATCH] Add ability to save/load an md5 checkpoint file
 

Index | Next | Previous | View Flat


ben.guthro at virtualcomputer

Nov 30, 2011, 1:59 PM


Views: 587
Permalink
[PATCH] Add ability to save/load an md5 checkpoint file

For large encryption streams - it can be convenient to write a checkpoint file,
to be able to be able to resume later.

This implements save/load of md5 checkpoints

Signed-off-by: Ben Guthro <ben.guthro [at] virtualcomputer>

diff --git a/cipher/md.c b/cipher/md.c
index 5ae9aee..7f3115f 100644
--- a/cipher/md.c
+++ b/cipher/md.c
@@ -1315,6 +1315,46 @@ gcry_md_is_enabled (gcry_md_hd_t a, int algo)
return value;
}

+int
+gcry_save_md5_checkpoint(FILE *f, gcry_md_hd_t *hd)
+{
+ GcryDigestEntry *entry;
+ int n;
+
+ n = (*hd)->ctx->actual_handle_size - sizeof (struct gcry_md_context);
+ if (fwrite(*hd, n, 1, f) != 1)
+ return (-1);
+ entry = (*hd)->ctx->list;
+ if (fwrite(entry->context.c, entry->digest->contextsize, 1, f) != 1)
+ return (-1);
+
+ return (0);
+}
+
+int
+gcry_load_md5_checkpoint(FILE *f, gcry_md_hd_t *hd)
+{
+ GcryDigestEntry *entry;
+ void *ctx;
+ int n;
+
+ gcry_md_open(hd, GCRY_MD_MD5, 0);
+ /* see comment above in md_open() for description of layout */
+ ctx = (*hd)->ctx;
+ n = (*hd)->ctx->actual_handle_size - sizeof (struct gcry_md_context);
+ if (fread(*hd, n, 1, f) != 1)
+ goto fail;
+ (*hd)->ctx = ctx;
+ entry = (*hd)->ctx->list;
+ if (fread(entry->context.c, entry->digest->contextsize, 1, f) != 1)
+ goto fail;
+
+ return (0);
+fail:
+ gcry_md_close(*hd);
+ return (-1);
+}
+

/* Run the selftests for digest algorithm ALGO with optional reporting
function REPORT. */
diff --git a/src/gcrypt.h.in b/src/gcrypt.h.in
index b34ff08..565b5d3 100644
--- a/src/gcrypt.h.in
+++ b/src/gcrypt.h.in
@@ -22,6 +22,7 @@
#ifndef _GCRYPT_H
#define _GCRYPT_H

+#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
@@ -1444,6 +1445,8 @@ int gcry_is_secure (const void *a) _GCRY_GCC_ATTR_PURE;
/* Return true if Libgcrypt is in FIPS mode. */
#define gcry_fips_mode_active() !!gcry_control (GCRYCTL_FIPS_MODE_P, 0)

+int gcry_save_md5_checkpoint(FILE *f, gcry_md_hd_t *hd);
+int gcry_load_md5_checkpoint(FILE *f, gcry_md_hd_t *hd);

#if 0 /* (Keep Emacsens' auto-indent happy.) */
{
diff --git a/src/libgcrypt.def b/src/libgcrypt.def
index 9bf0167..93a3ba1 100644
--- a/src/libgcrypt.def
+++ b/src/libgcrypt.def
@@ -211,3 +211,6 @@ EXPORTS
gcry_pk_get_param @193

gcry_kdf_derive @194
+
+ gcry_save_md5_checkpoint @195
+ gcry_load_md5_checkpoint @196
diff --git a/src/libgcrypt.vers b/src/libgcrypt.vers
index dcb3749..7f32a7d 100644
--- a/src/libgcrypt.vers
+++ b/src/libgcrypt.vers
@@ -88,6 +88,8 @@ GCRYPT_1.6 {
gcry_mpi_subm; gcry_mpi_swap; gcry_mpi_test_bit;
gcry_mpi_lshift;

+ gcry_save_md5_checkpoint; gcry_load_md5_checkpoint;
+
local:
*;

diff --git a/src/visibility.c b/src/visibility.c
index 2d3edbc..3ec73c3 100644
--- a/src/visibility.c
+++ b/src/visibility.c
@@ -1144,3 +1144,15 @@ gcry_is_secure (const void *a)
{
return _gcry_is_secure (a);
}
+
+int
+gcry_save_md5_checkpoint(FILE *f, gcry_md_hd_t *hd)
+{
+ _gcry_save_md5_checkpoint(f, hd);
+}
+
+int
+gcry_load_md5_checkpoint(FILE *f, gcry_md_hd_t *hd)
+{
+ _gcry_load_md5_checkpoint(f, hd);
+}
diff --git a/src/visibility.h b/src/visibility.h
index 4606a20..dc7ec77 100644
--- a/src/visibility.h
+++ b/src/visibility.h
@@ -185,6 +185,8 @@
#define gcry_mpi_swap _gcry_mpi_swap
#define gcry_mpi_test_bit _gcry_mpi_test_bit

+#define gcry_save_md5_checkpoint _gcry_save_md5_checkpoint
+#define gcry_load_md5_checkpoint _gcry_load_md5_checkpoint

/* Include the main header here so that public symbols are mapped to
the internal underscored ones. */
@@ -390,7 +392,8 @@ gcry_err_code_t gcry_md_get (gcry_md_hd_t hd, int algo,
#undef gcry_mpi_subm
#undef gcry_mpi_swap
#undef gcry_mpi_test_bit
-
+#undef gcry_save_md5_checkpoint
+#undef gcry_load_md5_checkpoint

/* Now mark all symbols. */

@@ -557,7 +560,8 @@ MARK_VISIBLE (gcry_mpi_subm)
MARK_VISIBLE (gcry_mpi_swap)
MARK_VISIBLE (gcry_mpi_test_bit)

-
+MARK_VISIBLE (gcry_save_md5_checkpoint)
+MARK_VISIBLE (gcry_load_md5_checkpoint)

#undef MARK_VISIBLE
#endif /*_GCRY_INCLUDED_BY_VISIBILITY_C*/

_______________________________________________
Gcrypt-devel mailing list
Gcrypt-devel [at] gnupg
http://lists.gnupg.org/mailman/listinfo/gcrypt-devel

Subject User Time
[PATCH] Add ability to save/load an md5 checkpoint file ben.guthro at virtualcomputer Nov 30, 2011, 1:59 PM
    Re: [PATCH] Add ability to save/load an md5 checkpoint file wk at gnupg Dec 1, 2011, 4:28 AM
        Re: [PATCH] Add ability to save/load an md5 checkpoint file ben.guthro at virtualcomputer Dec 1, 2011, 4:49 AM
    Re: [PATCH] Add ability to save/load an md5 checkpoint file wk at gnupg Dec 1, 2011, 6:59 AM
        Re: [PATCH] Add ability to save/load an md5 checkpoint file ben.guthro at virtualcomputer Dec 1, 2011, 7:32 AM
    Re: [PATCH] Add ability to save/load an md5 checkpoint file wk at gnupg Dec 2, 2011, 1:46 AM
        Re: [PATCH] Add ability to save/load an md5 checkpoint file andre at amorim Dec 2, 2011, 1:58 AM
        Re: [PATCH] Add ability to save/load an md5 checkpoint file bradh at frogmouth Dec 2, 2011, 4:44 PM
            Re: [PATCH] Add ability to save/load an md5 checkpoint file wk at gnupg Dec 3, 2011, 7:38 AM
    Re: [PATCH] Add ability to save/load an md5 checkpoint file wk at gnupg Dec 2, 2011, 12:04 PM
        Re: [PATCH] Add ability to save/load an md5 checkpoint file andre at amorim Dec 2, 2011, 9:38 PM

  Index | Next | Previous | View Flat
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.