aboutsummaryrefslogtreecommitdiffstats
path: root/common/rfb/obfuscate.cxx
diff options
context:
space:
mode:
authorPierre Ossman <ossman@cendio.se>2023-01-13 12:47:48 +0100
committerPierre Ossman <ossman@cendio.se>2023-02-04 14:03:13 +0100
commitb99daadb05e14e85da6c5e905057e10fc27c0fcf (patch)
tree752e6fea3900b604d44ef6a498539e9a785bf22f /common/rfb/obfuscate.cxx
parente6c5b29f12780303299506fe04f089bc98b80c91 (diff)
downloadtigervnc-b99daadb05e14e85da6c5e905057e10fc27c0fcf.tar.gz
tigervnc-b99daadb05e14e85da6c5e905057e10fc27c0fcf.zip
Use std::string instead of CharArray
Let's use a more common type instead of something homegrown. Should be more familiar to new developers.
Diffstat (limited to 'common/rfb/obfuscate.cxx')
-rw-r--r--common/rfb/obfuscate.cxx69
1 files changed, 69 insertions, 0 deletions
diff --git a/common/rfb/obfuscate.cxx b/common/rfb/obfuscate.cxx
new file mode 100644
index 00000000..1f785893
--- /dev/null
+++ b/common/rfb/obfuscate.cxx
@@ -0,0 +1,69 @@
+/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
+ * Copyright 2023 Pierre Ossman for Cendio AB
+ *
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This software 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ * USA.
+ */
+
+//
+// XXX not thread-safe, because d3des isn't - do we need to worry about this?
+//
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <assert.h>
+#include <string.h>
+
+extern "C" {
+#include <rfb/d3des.h>
+}
+
+#include <rdr/Exception.h>
+#include <rfb/obfuscate.h>
+
+static unsigned char d3desObfuscationKey[] = {23,82,107,6,35,78,88,7};
+
+std::vector<uint8_t> rfb::obfuscate(const char *str)
+{
+ std::vector<uint8_t> buf(8);
+
+ assert(str != NULL);
+
+ size_t l = strlen(str), i;
+ for (i=0; i<8; i++)
+ buf[i] = i<l ? str[i] : 0;
+ deskey(d3desObfuscationKey, EN0);
+ des(buf.data(), buf.data());
+
+ return buf;
+}
+
+std::string rfb::deobfuscate(const uint8_t *data, size_t len)
+{
+ char buf[9];
+
+ assert(data != NULL);
+
+ if (len != 8)
+ throw rdr::Exception("bad obfuscated password length");
+
+ deskey(d3desObfuscationKey, DE1);
+ des((uint8_t*)data, (uint8_t*)buf);
+ buf[8] = 0;
+
+ return buf;
+}