Whamcloud - gitweb
libe2p: add support for printing and parsing the encryption mode
authorTheodore Ts'o <tytso@mit.edu>
Mon, 23 Feb 2015 23:05:21 +0000 (18:05 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Mon, 23 Feb 2015 23:05:21 +0000 (18:05 -0500)
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
lib/e2p/Makefile.in
lib/e2p/crypto_mode.c [new file with mode: 0644]

index 7286552..e9a6351 100644 (file)
@@ -19,7 +19,7 @@ all:: e2p.pc
 OBJS=          feature.o fgetflags.o fsetflags.o fgetversion.o fsetversion.o \
                getflags.o getversion.o hashstr.o iod.o ls.o mntopts.o \
                parse_num.o pe.o pf.o ps.o setflags.o setversion.o uuid.o \
-               ostype.o percent.o
+               ostype.o percent.o crypto_mode.o
 
 SRCS=          $(srcdir)/feature.c $(srcdir)/fgetflags.c \
                $(srcdir)/fsetflags.c $(srcdir)/fgetversion.c \
@@ -28,7 +28,7 @@ SRCS=         $(srcdir)/feature.c $(srcdir)/fgetflags.c \
                $(srcdir)/ls.c $(srcdir)/mntopts.c $(srcdir)/parse_num.c \
                $(srcdir)/pe.c $(srcdir)/pf.c $(srcdir)/ps.c \
                $(srcdir)/setflags.c $(srcdir)/setversion.c $(srcdir)/uuid.c \
-               $(srcdir)/ostype.c $(srcdir)/percent.c
+               $(srcdir)/ostype.c $(srcdir)/percent.c $(srcdir)/crypto_mode.c
 HFILES= e2p.h
 
 LIBRARY= libe2p
@@ -182,3 +182,6 @@ ostype.o: $(srcdir)/ostype.c $(top_builddir)/lib/config.h \
 percent.o: $(srcdir)/percent.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/e2p.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h
+crypto_mode.o: $(srcdir)/crypto_mode.c $(top_builddir)/lib/config.h \
+ $(top_builddir)/lib/dirpaths.h $(srcdir)/e2p.h \
+ $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h
diff --git a/lib/e2p/crypto_mode.c b/lib/e2p/crypto_mode.c
new file mode 100644 (file)
index 0000000..6146224
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * crypto_mode.c --- convert between encryption modes and strings
+ *
+ * Copyright (C) 1999  Theodore Ts'o <tytso@mit.edu>
+ *
+ * %Begin-Header%
+ * This file may be redistributed under the terms of the GNU Library
+ * General Public License, version 2.
+ * %End-Header%
+ */
+
+#include "config.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include "e2p.h"
+
+struct mode {
+       unsigned int    num;
+       const char      *string;
+};
+
+static struct mode mode_list[] = {
+       {       EXT4_ENCRYPTION_MODE_INVALID,           "Invalid"},
+       {       EXT4_ENCRYPTION_MODE_AES_256_XTS,       "AES-256-XTS"},
+       {       EXT4_ENCRYPTION_MODE_AES_256_GCM,       "AES-256-GCM"},
+       {       EXT4_ENCRYPTION_MODE_AES_256_CBC,       "AES-256-CBC"},
+       {       0, 0 },
+};
+
+const char *e2p_encmode2string(int num)
+{
+       struct mode  *p;
+       static char buf[20];
+
+       for (p = mode_list; p->string; p++) {
+               if (num == p->num)
+                       return p->string;
+       }
+       sprintf(buf, "ENC_MODE_%d", num);
+       return buf;
+}
+
+/*
+ * Returns the hash algorithm, or -1 on error
+ */
+int e2p_string2encmode(char *string)
+{
+       struct mode     *p;
+       char            *eptr;
+       int             num;
+
+       for (p = mode_list; p->string; p++) {
+               if (!strcasecmp(string, p->string)) {
+                       return p->num;
+               }
+       }
+       if (strncasecmp(string, "ENC_MODE_", 9))
+               return -1;
+
+       if (string[9] == 0)
+               return -1;
+       num = strtol(string+9, &eptr, 10);
+       if (num > 255 || num < 0)
+               return -1;
+       if (*eptr)
+               return -1;
+       return num;
+}
+