From 7e12e96ec6601dd5f20f498e38126499c99f8705 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se>
Date: Sun, 9 Sep 2001 00:26:37 +0200
Subject: [PATCH] * des.c (des_fix_parity): New function.

Rev: src/nettle/des.c:1.4
Rev: src/nettle/des.h:1.6
---
 des.c |  9 +++++++++
 des.h | 30 +++++++++++++++++++++++++++++-
 2 files changed, 38 insertions(+), 1 deletion(-)

diff --git a/des.c b/des.c
index c95f08b6..28f4f503 100644
--- a/des.c
+++ b/des.c
@@ -52,6 +52,15 @@ static char parity[] = {
 #include	"parity.h"
 };
 
+void
+des_fix_parity(unsigned length, uint8_t *dst,
+	       const uint8_t *src)
+{
+  unsigned i;
+  for (i = 0; i<length; i++)
+    dst[i] = src[i] ^ (parity[src[i]] == 8);
+}
+
 int
 des_set_key(struct des_ctx *ctx, const uint8_t *key)
 {
diff --git a/des.h b/des.h
index 51d65f02..9903f034 100644
--- a/des.h
+++ b/des.h
@@ -1,6 +1,6 @@
 /* des.h
  *
- * The des block cipher.
+ * The des block cipher. And triple des.
  */
 
 /* nettle, low-level cryptographics library
@@ -65,4 +65,32 @@ des_decrypt(struct des_ctx *ctx,
 	    unsigned length, uint8_t *dst,
 	    const uint8_t *src);
 
+void
+des_fix_parity(unsigned length, uint8_t *dst,
+	       const uint8_t *src);
+
+#define DES3_KEY_SIZE 24
+#define DES3_BLOCK_SIZE DES_BLOCK_SIZE
+
+struct des3_ctx
+{
+  struct des_ctx des[3];
+  enum des_error status;
+};
+
+
+/* On success, returns 1 and sets ctx->status to DES_OK (zero). On
+ * error, returns 0 and sets ctx->status accordingly. */
+int
+des3_set_key(struct des3_ctx *ctx, const uint8_t *key);
+
+void
+des3_encrypt(struct des3_ctx *ctx,
+	    unsigned length, uint8_t *dst,
+	    const uint8_t *src);
+void
+des3_decrypt(struct des3_ctx *ctx,
+	    unsigned length, uint8_t *dst,
+	    const uint8_t *src);
+
 #endif /* NETTLE_DES_H_INCLUDED */
-- 
GitLab