components/krb5/Solaris/ucrypto/hash_provider/hash_md4.c
changeset 7950 50d75ee82dad
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/krb5/Solaris/ucrypto/hash_provider/hash_md4.c	Fri Mar 24 12:29:03 2017 -0500
@@ -0,0 +1,59 @@
+/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/*
+ * Copyright (C) 1998 by the FundsXpress, INC.
+ *
+ * All rights reserved.
+ *
+ * Export of this software from the United States of America may require
+ * a specific license from the United States Government.  It is the
+ * responsibility of any person or organization contemplating export to
+ * obtain such a license before exporting.
+ *
+ * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
+ * distribute this software and its documentation for any purpose and
+ * without fee is hereby granted, provided that the above copyright
+ * notice appear in all copies and that both that copyright notice and
+ * this permission notice appear in supporting documentation, and that
+ * the name of FundsXpress. not be used in advertising or publicity pertaining
+ * to distribution of the software without specific, written prior
+ * permission.  FundsXpress makes no representations about the suitability of
+ * this software for any purpose.  It is provided "as is" without express
+ * or implied warranty.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ */
+
+#include "crypto_int.h"
+#include <md4.h>
+
+static krb5_error_code
+k5_md4_hash(const krb5_crypto_iov *data, size_t num_data, krb5_data *output)
+{
+    MD4_CTX md4ctx;
+    size_t i;
+
+    if (output->length != MD4_DIGEST_LENGTH)
+        return KRB5_CRYPTO_INTERNAL;
+
+    MD4Init(&md4ctx);
+    for (i = 0; i < num_data; i++) {
+        const krb5_data *d = &data[i].data;
+
+        if (SIGN_IOV(&data[i]))
+            MD4Update(&md4ctx, d->data, (size_t)d->length);
+    }
+    MD4Final(output->data, &md4ctx);
+    return 0;
+}
+
+const struct krb5_hash_provider krb5int_hash_md4 = {
+    "MD4",
+    MD4_DIGEST_LENGTH,
+    MD4_HMAC_BLOCK_SIZE,
+    k5_md4_hash
+};