aboutsummaryrefslogtreecommitdiffhomepage
path: root/zxcvbn.h
diff options
context:
space:
mode:
authortony <tsyrogit@users.noreply.github.com>2015-01-03 00:16:04 +0000
committertony <tsyrogit@users.noreply.github.com>2015-01-03 00:16:04 +0000
commit38a981df53d53cc96ef47e15d62b7c9f0151315f (patch)
tree7059c14f2e43d7c5d3cbb48ce5ec4004c6a752ca /zxcvbn.h
parent572ce633e134e53bd6a72220613feb82a5ef0a16 (diff)
downloadzxcvbn-c-38a981df53d53cc96ef47e15d62b7c9f0151315f.tar.gz
Initial commit.
Diffstat (limited to 'zxcvbn.h')
-rw-r--r--zxcvbn.h137
1 files changed, 137 insertions, 0 deletions
diff --git a/zxcvbn.h b/zxcvbn.h
new file mode 100644
index 0000000..d7a0c17
--- /dev/null
+++ b/zxcvbn.h
@@ -0,0 +1,137 @@
+#ifndef ZXCVBN_H_F98183CE2A01_INCLUDED
+#define ZXCVBN_H_F98183CE2A01_INCLUDED
+/**********************************************************************************
+ * C implementation of the zxcvbn password strength estimation method.
+ * Copyright (c) 2015, Tony Evans
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list
+ * of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this
+ * list of conditions and the following disclaimer in the documentation and/or other
+ * materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its contributors may be
+ * used to endorse or promote products derived from this software without specific
+ * prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ **********************************************************************************/
+
+/* If this is defined, the dictiononary data is read from file. When undefined */
+/* dictionary data is included in the source code. */
+/*#define USE_DICT_FILE */
+
+/* If this is defined, C++ builds which read dictionary data from file will use */
+/* stdio FILE streams (and fopen,fread,fclose). When undefined, C++ builds will */
+/* use std::ifstream to read dictionary data. Ignored for C builds (stdio FILE */
+/* streams are always used). */
+/*#define USE_FILE_IO */
+
+#ifndef __cplusplus
+/* C build. Use the standard malloc/free for heap memory */
+#include <stdlib.h>
+#define MallocFn(T,N) ((T *)malloc((N) * sizeof(T)))
+#define FreeFn(P) free(P)
+
+#else
+
+/* C++ build. Use the new/delete operators for heap memory */
+#define MallocFn(T,N) (new T[N])
+#define FreeFn(P) (delete [] P)
+
+#endif
+
+/* Enum for the types of match returned in the Info arg to ZxcvbnMatch */
+typedef enum
+{
+ NON_MATCH, /* 0 */
+ BRUTE_MATCH, /* 1 */
+ DICTIONARY_MATCH, /* 2 */
+ DICT_LEET_MATCH, /* 3 */
+ USER_MATCH, /* 4 */
+ USER_LEET_MATCH, /* 5 */
+ REPEATS_MATCH, /* 6 */
+ SEQUENCE_MATCH, /* 7 */
+ SPATIAL_MATCH, /* 8 */
+ DATE_MATCH, /* 9 */
+ YEAR_MATCH /* 10 */
+} ZxcTypeMatch_t;
+
+/* Linked list of information returned in the Info arg to ZxcvbnMatch */
+struct ZxcMatch
+{
+ int Begin; /* Char position of begining of match */
+ int Length; /* Number of chars in the match */
+ double Entrpy; /* The entropy of the match */
+ ZxcTypeMatch_t Type; /* Type of match (Spatial/Dictionary/Order/Repeat) */
+ struct ZxcMatch *Next;
+};
+typedef struct ZxcMatch ZxcMatch_t;
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef USE_DICT_FILE
+
+/**********************************************************************************
+ * Read the dictionnary data from the given file. Returns 1 if OK, 0 if error.
+ * Called once at program startup.
+ */
+int ZxcvbnInit(const char *);
+
+/**********************************************************************************
+ * Free the dictionnary data after use. Called once at program shutdown.
+ */
+void ZxcvbnUnInit();
+
+#else
+
+/* As the dictionary data is included in the source, define these functions to do nothing. */
+#define ZxcvbnInit(s) 1
+#define ZxcvbnUnInit() do {} while(0)
+
+#endif
+
+/**********************************************************************************
+ * The main password matching function. May be called multiple times.
+ * The parameters are:
+ * Passwd The password to be tested. Null terminated string.
+ * UserDict User supplied dictionary words to be considered particulary bad. Passed
+ * as a pointer to array of string pointers, with null last entry (like
+ * the argv parameter to main()). May be null or point to empty array when
+ * there are no user dictionary words.
+ * Info The address of a pointer variable to receive information on the parts
+ * of the password. This parameter can be null if no information is wanted.
+ * The data should be freed by calling ZxcvbnFreeInfo().
+ *
+ * Returns the entropy of the password (in bits).
+ */
+double ZxcvbnMatch(const char *Passwd, const char *UserDict[], ZxcMatch_t **Info);
+
+/**********************************************************************************
+ * Free the data returned in the Info parameter to ZxcvbnMatch().
+ */
+void ZxcvbnFreeInfo(ZxcMatch_t *Info);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif