diff options
author | Sunil Nimmagadda <sunil@sunilnimmagadda.com> | 2013-10-24 21:09:56 +0530 |
---|---|---|
committer | Sunil Nimmagadda <sunil@sunilnimmagadda.com> | 2013-10-24 21:09:56 +0530 |
commit | ed159c336bae47c862324ff86dd7938c98dda8b7 (patch) | |
tree | 83059a6918711e3c2d7f178ac715dc1a2211b4aa /contrib | |
parent | Merge branch 'master' into portable (diff) | |
download | OpenSMTPD-ed159c336bae47c862324ff86dd7938c98dda8b7.tar.xz OpenSMTPD-ed159c336bae47c862324ff86dd7938c98dda8b7.zip |
Implement simple encrypt utility.
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/libexec/Makefile.am | 2 | ||||
-rw-r--r-- | contrib/libexec/encrypt/Makefile.am | 7 | ||||
-rw-r--r-- | contrib/libexec/encrypt/encrypt.c | 57 |
3 files changed, 65 insertions, 1 deletions
diff --git a/contrib/libexec/Makefile.am b/contrib/libexec/Makefile.am index 0ee645e2..6079ae6a 100644 --- a/contrib/libexec/Makefile.am +++ b/contrib/libexec/Makefile.am @@ -1 +1 @@ -SUBDIRS = mail.local +SUBDIRS = mail.local encrypt diff --git a/contrib/libexec/encrypt/Makefile.am b/contrib/libexec/encrypt/Makefile.am new file mode 100644 index 00000000..7d7062f4 --- /dev/null +++ b/contrib/libexec/encrypt/Makefile.am @@ -0,0 +1,7 @@ +pkglibexec_PROGRAMS = encrypt + +encrypt_SOURCES = encrypt.c + +CFLAGS += -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED +uninstall-hook: + rmdir $(DESTDIR)$(pkglibexecdir) 2> /dev/null || /bin/true diff --git a/contrib/libexec/encrypt/encrypt.c b/contrib/libexec/encrypt/encrypt.c new file mode 100644 index 00000000..743b4474 --- /dev/null +++ b/contrib/libexec/encrypt/encrypt.c @@ -0,0 +1,57 @@ + +/* + * Copyright (c) 2013 Sunil Nimmagadda <sunil@sunilnimmagadda.com> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +#define PASSWORD_LEN 128 + +static unsigned char itoa64[] = /* 0 ... 63 => ascii - 64 */ + "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + +static void to64(char *, long int, int); + +int +main(int argc, char *argv[]) +{ + char *c, salt[PASSWORD_LEN]; + + if (argc != 2) { + fprintf(stderr, "usage: encrypt string"); + return (1); + } + + to64(&salt[0], random(), 2); + salt[2] = '\0'; + if ((c = crypt(argv[1], salt)) == NULL) { + fprintf(stderr, "crypt failed"); + return (1); + } + + printf("%s\n", c); + return (0); +} + +void +to64(char *s, long int v, int n) +{ + while (--n >= 0) { + *s++ = itoa64[v&0x3f]; + v >>= 6; + } +} |