Commit Diff


commit - c81c8bfa3cdcf805bce8a7fa5f3b24633a617edc
commit + 89a3585c7f3a1a5d10e036050111255e21856058
blob - d99342714d356f7522a5bbfa60dc07a705eae98d
blob + e3833e976756f9493549228401d6381208d33932
--- docs/crypto.md
+++ docs/crypto.md
@@ -92,8 +92,16 @@ const unsigned char *repeating_key_xor_s(const char* s
 
 ### hamming_distance
 
+Calculates the Hamming Distance (the number of differing bits) between two arrays of unsigned bytes
+
+```c
+unsigned int hamming_distance(unsigned char *a, unsigned char *b);
+```
+
+### hamming_distance_s
+
 Calculates the Hamming Distance (the number of differing bits) between two strings
 
 ```c
-unsigned int hamming_distance(const char *a, const char *b);
+unsigned int hamming_distance_s(const char *a, const char *b);
 ```
blob - 7492841f711f95664274e86ed0b5b09fdec228b2
blob + 29c64bdbce1d9efd5c8a3483d49bb07f307a2612
--- include/lfcrypto.h
+++ include/lfcrypto.h
@@ -13,6 +13,7 @@ const char *hex_to_str(const unsigned char *hex, size_
 const unsigned char* repeating_key_xor(const unsigned char* s, size_t s_sz, const unsigned char* key, size_t k_sz);
 const unsigned char *repeating_key_xor_s(const char* s, const char* key);
 
-unsigned int hamming_distance(const char *a, const char *b);
+unsigned int hamming_distance_s(const char *a, const char *b);
+unsigned int hamming_distance(unsigned char *a, unsigned char *b, size_t sz);
 
 #endif // LIBFLINT_CRYPTO_H
blob - ac04bdf6dd1f0e1aad801618db5d6ef3e5b87cae
blob + d0cfea920978a4bc0a5254e3bcb8d94bbd0dbc88
--- src/crypto.c
+++ src/crypto.c
@@ -272,12 +272,16 @@ const unsigned char *repeating_key_xor_s(const char* s
     return repeating_key_xor((unsigned char*)s, strlen(s), (unsigned char*)key, strlen(key));
 }
 
-unsigned int hamming_distance(const char *a, const char *b) {
+unsigned int hamming_distance_s(const char *a, const char *b) {
     size_t sz = strlen(a);
     if (sz != strlen(b)) {
         return -1;
     }
 
+    return hamming_distance((unsigned char *)a, (unsigned char *)b, sz);
+}
+
+unsigned int hamming_distance(unsigned char *a, unsigned char *b, size_t sz) {
     unsigned int hamming = 0;
     for (size_t i = 0; i < sz; ++i) {
         if (a[i] == b[i]) {
blob - e8d4ddfa9858cdc34b8946285ddd62caa2bd6f0f
blob + 541550ed203d975a79e17157c67a45991f80cbba
--- tests/tests.c
+++ tests/tests.c
@@ -374,7 +374,12 @@ void test_crypto() {
     free(enc);
     free(s);
 
-    unsigned int hamming = hamming_distance("this is a test", "wokka wokka!!!");
+    unsigned char ua[2] = { 0x2, 0xF };
+    unsigned char ub[2] = { 0x4, 0xE };
+    unsigned int hamming = hamming_distance(ua, ub, 2);
+    assert(hamming == 3);
+
+    hamming = hamming_distance_s("this is a test", "wokka wokka!!!");
     assert(hamming == 37);
 
     printf("Passes all crypto tests\n");