1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
3 * Copyright (C) 2000-2012 Jeffrey Stedfast
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public License
7 * as published by the Free Software Foundation; either version 2.1
8 * of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free
17 * Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
26 #include "md5-utils.h"
28 #include "gmime-filter-md5.h"
32 * SECTION: gmime-filter-md5
33 * @title: GMimeFilterMd5
34 * @short_description: Calculate an md5sum
35 * @see_also: #GMimeFilter
37 * Calculate an md5sum for a stream.
41 struct _GMimeFilterMd5Private {
45 static void g_mime_filter_md5_class_init (GMimeFilterMd5Class *klass);
46 static void g_mime_filter_md5_init (GMimeFilterMd5 *filter, GMimeFilterMd5Class *klass);
47 static void g_mime_filter_md5_finalize (GObject *object);
49 static GMimeFilter *filter_copy (GMimeFilter *filter);
50 static void filter_filter (GMimeFilter *filter, char *in, size_t len, size_t prespace,
51 char **out, size_t *outlen, size_t *outprespace);
52 static void filter_complete (GMimeFilter *filter, char *in, size_t len, size_t prespace,
53 char **out, size_t *outlen, size_t *outprespace);
54 static void filter_reset (GMimeFilter *filter);
57 static GMimeFilterClass *parent_class = NULL;
61 g_mime_filter_md5_get_type (void)
63 static GType type = 0;
66 static const GTypeInfo info = {
67 sizeof (GMimeFilterMd5Class),
68 NULL, /* base_class_init */
69 NULL, /* base_class_finalize */
70 (GClassInitFunc) g_mime_filter_md5_class_init,
71 NULL, /* class_finalize */
72 NULL, /* class_data */
73 sizeof (GMimeFilterMd5),
75 (GInstanceInitFunc) g_mime_filter_md5_init,
78 type = g_type_register_static (GMIME_TYPE_FILTER, "GMimeFilterMd5", &info, 0);
86 g_mime_filter_md5_class_init (GMimeFilterMd5Class *klass)
88 GObjectClass *object_class = G_OBJECT_CLASS (klass);
89 GMimeFilterClass *filter_class = GMIME_FILTER_CLASS (klass);
91 parent_class = g_type_class_ref (GMIME_TYPE_FILTER);
93 object_class->finalize = g_mime_filter_md5_finalize;
95 filter_class->copy = filter_copy;
96 filter_class->filter = filter_filter;
97 filter_class->complete = filter_complete;
98 filter_class->reset = filter_reset;
102 g_mime_filter_md5_init (GMimeFilterMd5 *filter, GMimeFilterMd5Class *klass)
104 filter->priv = g_new (struct _GMimeFilterMd5Private, 1);
105 md5_init (&filter->priv->md5);
109 g_mime_filter_md5_finalize (GObject *object)
111 GMimeFilterMd5 *filter = (GMimeFilterMd5 *) object;
113 g_free (filter->priv);
115 G_OBJECT_CLASS (parent_class)->finalize (object);
120 filter_copy (GMimeFilter *filter)
122 return g_mime_filter_md5_new ();
127 filter_filter (GMimeFilter *filter, char *in, size_t len, size_t prespace,
128 char **out, size_t *outlen, size_t *outprespace)
130 GMimeFilterMd5 *md5 = (GMimeFilterMd5 *) filter;
132 md5_update (&md5->priv->md5, (unsigned char *) in, len);
136 *outprespace = prespace;
140 filter_complete (GMimeFilter *filter, char *in, size_t len, size_t prespace,
141 char **out, size_t *outlen, size_t *outprespace)
143 filter_filter (filter, in, len, prespace, out, outlen, outprespace);
147 filter_reset (GMimeFilter *filter)
149 GMimeFilterMd5 *md5 = (GMimeFilterMd5 *) filter;
151 md5_init (&md5->priv->md5);
156 * g_mime_filter_md5_new:
158 * Creates a new Md5 filter.
160 * Returns: a new Md5 filter.
163 g_mime_filter_md5_new (void)
165 return g_object_newv (GMIME_TYPE_FILTER_MD5, 0, NULL);
170 * g_mime_filter_md5_get_digest:
171 * @md5: md5 filter object
172 * @digest: output buffer of at least 16 bytes
174 * Outputs the md5 digest into @digest.
177 g_mime_filter_md5_get_digest (GMimeFilterMd5 *md5, unsigned char digest[16])
179 g_return_if_fail (GMIME_IS_FILTER_MD5 (md5));
181 md5_final (&md5->priv->md5, digest);