summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorJean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>2010-09-07 01:55:55 +0800
committerSascha Hauer <s.hauer@pengutronix.de>2010-09-20 08:57:21 +0200
commit77a57f4cb499972942b300498bee768f5b520625 (patch)
tree2a43da81db5874514e2b5cf09bcd7d5c15a595d2 /common
parent6186a855158afcd8d97002da973d88adc8637cdd (diff)
downloadbarebox-77a57f4cb499972942b300498bee768f5b520625.tar.gz
barebox-77a57f4cb499972942b300498bee768f5b520625.tar.xz
add digest framework
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Diffstat (limited to 'common')
-rw-r--r--common/Makefile1
-rw-r--r--common/digest.c77
2 files changed, 78 insertions, 0 deletions
diff --git a/common/Makefile b/common/Makefile
index fb06a2d847..f75e25ef9f 100644
--- a/common/Makefile
+++ b/common/Makefile
@@ -11,6 +11,7 @@ obj-y += clock.o
obj-y += command.o
obj-$(CONFIG_CONSOLE_FULL) += console.o
obj-$(CONFIG_CONSOLE_SIMPLE) += console_simple.o
+obj-$(CONFIG_DIGEST) += digest.o
obj-y += env.o
obj-y += startup.o
obj-y += misc.o
diff --git a/common/digest.c b/common/digest.c
new file mode 100644
index 0000000000..10ad06005e
--- /dev/null
+++ b/common/digest.c
@@ -0,0 +1,77 @@
+/*
+ * (C) Copyright 2008-2010 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; version 2 of
+ * the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <digest.h>
+#include <malloc.h>
+#include <errno.h>
+#include <module.h>
+#include <linux/err.h>
+
+static LIST_HEAD(digests);
+
+static int dummy_init(struct digest *d)
+{
+ return 0;
+}
+
+int digest_register(struct digest *d)
+{
+ if (!d || !d->name || !d->update || !d->final || d->length < 1)
+ return -EINVAL;
+
+ if (!d->init)
+ d->init = dummy_init;
+
+ if (digest_get_by_name(d->name))
+ return -EEXIST;
+
+ list_add_tail(&d->list, &digests);
+
+ return 0;
+}
+EXPORT_SYMBOL(digest_register);
+
+void digest_unregister(struct digest *d)
+{
+ if (!d)
+ return;
+
+ list_del(&d->list);
+}
+EXPORT_SYMBOL(digest_unregister);
+
+struct digest* digest_get_by_name(char* name)
+{
+ struct digest* d;
+
+ if (!name)
+ return NULL;
+
+ list_for_each_entry(d, &digests, list) {
+ if(strcmp(d->name, name) == 0)
+ return d;
+ }
+
+ return NULL;
+}
+EXPORT_SYMBOL_GPL(digest_get_by_name);