]> gitweb.ps.run Git - matrix_esp_thesis/blobdiff - ext/olm/lib/crypto-algorithms/rot-13.c
add dependencies to repo
[matrix_esp_thesis] / ext / olm / lib / crypto-algorithms / rot-13.c
diff --git a/ext/olm/lib/crypto-algorithms/rot-13.c b/ext/olm/lib/crypto-algorithms/rot-13.c
new file mode 100644 (file)
index 0000000..0ab8497
--- /dev/null
@@ -0,0 +1,35 @@
+/*********************************************************************
+* Filename:   rot-13.c
+* Author:     Brad Conte (brad AT bradconte.com)
+* Copyright:
+* Disclaimer: This code is presented "as is" without any guarantees.
+* Details:    Implementation of the ROT-13 encryption algorithm.
+                                 Algorithm specification can be found here:
+                                  *
+                                 This implementation uses little endian byte order.
+*********************************************************************/
+
+/*************************** HEADER FILES ***************************/
+#include <string.h>
+#include "rot-13.h"
+
+/*********************** FUNCTION DEFINITIONS ***********************/
+void rot13(char str[])
+{
+   int case_type, idx, len;
+
+   for (idx = 0, len = strlen(str); idx < len; idx++) {
+      // Only process alphabetic characters.
+      if (str[idx] < 'A' || (str[idx] > 'Z' && str[idx] < 'a') || str[idx] > 'z')
+         continue;
+      // Determine if the char is upper or lower case.
+      if (str[idx] >= 'a')
+         case_type = 'a';
+      else
+         case_type = 'A';
+      // Rotate the char's value, ensuring it doesn't accidentally "fall off" the end.
+      str[idx] = (str[idx] + 13) % (case_type + 26);
+      if (str[idx] < 26)
+         str[idx] += case_type;
+   }
+}