Przeglądaj źródła

* Use bd::String
* Move String.(encrypt|decrypt) to (encrypt|decrypt)_string in crypt.c

svn: 3760

Bryan Drewery 18 lat temu
rodzic
commit
5b3669edae
2 zmienionych plików z 38 dodań i 1 usunięć
  1. 32 1
      src/crypt.c
  2. 6 0
      src/crypt.h

+ 32 - 1
src/crypt.c

@@ -13,6 +13,7 @@
 #include "base64.h"
 #include "base64.h"
 #include "src/crypto/crypto.h"
 #include "src/crypto/crypto.h"
 #include <stdarg.h>
 #include <stdarg.h>
+#include <bdlib/src/String.h>
 
 
 char *encrypt_string(const char *keydata, char *in)
 char *encrypt_string(const char *keydata, char *in)
 {
 {
@@ -24,7 +25,7 @@ char *encrypt_string(const char *keydata, char *in)
   bdata = encrypt_binary(keydata, (unsigned char *) in, &len);
   bdata = encrypt_binary(keydata, (unsigned char *) in, &len);
   if (keydata && *keydata) {
   if (keydata && *keydata) {
     res = b64enc(bdata, &len);
     res = b64enc(bdata, &len);
-    OPENSSL_cleanse(bdata, *len);
+    OPENSSL_cleanse(bdata, len);
     free(bdata);
     free(bdata);
     return res;
     return res;
   } else {
   } else {
@@ -32,6 +33,21 @@ char *encrypt_string(const char *keydata, char *in)
   }
   }
 }
 }
 
 
+/**
+ * @brief Encrypt a string
+ * @param key The key to encrypt with
+ * @param data The string to encrypt
+ * @return A new, encrypted string
+ */
+bd::String encrypt_string(const bd::String& key, const bd::String& data) {
+  if (!key) return data;
+  size_t len = data.length();
+  char *bdata = (char*) encrypt_binary(key.c_str(), (unsigned char*) data.c_str(), &len);
+  bd::String encrypted(bdata, len);
+  free(bdata);
+  return encrypted;
+}
+
 char *decrypt_string(const char *keydata, char *in)
 char *decrypt_string(const char *keydata, char *in)
 {
 {
   size_t len = strlen(in);
   size_t len = strlen(in);
@@ -50,6 +66,21 @@ char *decrypt_string(const char *keydata, char *in)
   }
   }
 }
 }
 
 
+/**
+ * @brief Decrypt a string
+ * @param key The key to decrypt with
+ * @param data The string to decrypt
+ * @return A new, decrypted string
+ */
+bd::String decrypt_string(const bd::String& key, const bd::String& data) {
+  if (!key) return data;
+  size_t len = data.length();
+  char *bdata = (char*) decrypt_binary(key.c_str(), (unsigned char*) data.c_str(), &len);
+  bd::String decrypted(bdata, len);
+  free(bdata);
+  return decrypted;
+}
+
 char *salted_sha1(const char *in, const char* saltin)
 char *salted_sha1(const char *in, const char* saltin)
 {
 {
   char *tmp = NULL, buf[101] = "", *ret = NULL;
   char *tmp = NULL, buf[101] = "", *ret = NULL;

+ 6 - 0
src/crypt.h

@@ -11,6 +11,10 @@
 #include "src/crypto/crypto.h"
 #include "src/crypto/crypto.h"
 #include "users.h"
 #include "users.h"
 
 
+namespace bd {
+  class String;
+};
+
 #define SHA_HASH_LENGTH (SHA_DIGEST_LENGTH << 1)
 #define SHA_HASH_LENGTH (SHA_DIGEST_LENGTH << 1)
 #define MD5_HASH_LENGTH (MD5_DIGEST_LENGTH << 1)
 #define MD5_HASH_LENGTH (MD5_DIGEST_LENGTH << 1)
 
 
@@ -24,8 +28,10 @@ char *SHA1(const char *);
 int sha1cmp(const char *, const char*);
 int sha1cmp(const char *, const char*);
 
 
 char *encrypt_string(const char *, char *);
 char *encrypt_string(const char *, char *);
+bd::String encrypt_string(const bd::String&, const bd::String&);
 char *decrypt_string(const char *, char *);
 char *decrypt_string(const char *, char *);
 char *salted_sha1(const char *, const char* = NULL);
 char *salted_sha1(const char *, const char* = NULL);
+bd::String decrypt_string(const bd::String&, const bd::String&);
 char *cryptit (char *);
 char *cryptit (char *);
 char *decryptit (char *);
 char *decryptit (char *);
 int lfprintf (FILE *, const char *, ...) __attribute__((format(printf, 2, 3)));
 int lfprintf (FILE *, const char *, ...) __attribute__((format(printf, 2, 3)));