summary refs log tree commit diff
path: root/bin/aes.c
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2019-02-05 02:07:53 -0500
committerJune McEnroe <june@causal.agency>2019-02-05 02:07:53 -0500
commit0f5e4230c306e6468e10283a25ad4e798ea11af5 (patch)
tree48bb53eb7da659b06919022b3d3ec191ae652aa6 /bin/aes.c
parentSet nvim Directory back to blue (diff)
downloadsrc-0f5e4230c306e6468e10283a25ad4e798ea11af5.tar.gz
src-0f5e4230c306e6468e10283a25ad4e798ea11af5.zip
Add aes
Okay this should really be aes(6) but I don't feel like adding back MAN6
in the Makefile.
Diffstat (limited to 'bin/aes.c')
-rw-r--r--bin/aes.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/bin/aes.c b/bin/aes.c
new file mode 100644
index 00000000..5c9dd68e
--- /dev/null
+++ b/bin/aes.c
@@ -0,0 +1,57 @@
+/* Copyright (C) 2019  C. McEnroe <june@causal.agency>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <wchar.h>
+
+typedef unsigned char byte;
+
+static const wchar_t Table[128] = {
+	L"\x00\x01\x02\x03\x04\x05\x06\x07"
+	L"\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F"
+	L"\x10\x11\x12\x13\x14\x15\x16\x17"
+	L"\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F"
+	L" !"#$%&'()*+,-./"
+	L"0123456789:;<=>?"
+	L"@ABCDEFGHIJKLMNO"
+	L"PQRSTUVWXYZ[\]^_"
+	L"`abcdefghijklmno"
+	L"pqrstuvwxyz{|}~\xFF"
+};
+
+static void enwiden(const char *ch) {
+	for (; *ch; ++ch) {
+		if ((byte)*ch < 128) printf("%lc", Table[(byte)*ch]);
+		else printf("%c", *ch);
+	}
+}
+
+int main(int argc, char *argv[]) {
+	setlocale(LC_CTYPE, "");
+	for (int i = 1; i < argc; ++i) {
+		enwiden(argv[i]);
+		if (i < argc - 1) printf("%lc", Table[' ']);
+		else printf("\n");
+	}
+	if (argc > 1) return EXIT_SUCCESS;
+	char *line = NULL;
+	size_t cap = 0;
+	while (0 < getline(&line, &cap, stdin)) {
+		enwiden(line);
+	}
+}