Merge branch '1.0' of git.carlh.net:git/libdcp into 1.0
[libdcp.git] / src / util.cc
index 3d37454f58a8b0061d7c69972ae06fef4ac4c450..ac067a7670233f32581c178d6cf896b553a58dc7 100644 (file)
@@ -26,8 +26,8 @@
 #include "types.h"
 #include "argb_frame.h"
 #include "certificates.h"
-#include "gamma_lut.h"
 #include "xyz_frame.h"
+#include "dcp_assert.h"
 #include "compose.hpp"
 #include "KM_util.h"
 #include "KM_fileio.h"
@@ -155,7 +155,7 @@ dcp::content_kind_to_string (ContentKind kind)
                return "advertisement";
        }
 
-       assert (false);
+       DCP_ASSERT (false);
 }
 
 /** Convert a string from a <ContentKind> node to a libdcp ContentKind.
@@ -190,7 +190,7 @@ dcp::content_kind_from_string (string kind)
                return ADVERTISEMENT;
        }
 
-       assert (false);
+       DCP_ASSERT (false);
 }
 
 /** Decompress a JPEG2000 image to a bitmap.
@@ -368,3 +368,50 @@ dcp::ids_equal (string a, string b)
        trim (b);
        return a == b;
 }
+
+string
+dcp::file_to_string (boost::filesystem::path p, uintmax_t max_length)
+{
+       uintmax_t len = boost::filesystem::file_size (p);
+       if (len > max_length) {
+               throw MiscError ("Unexpectedly long file");
+       }
+       
+       char* c = new char[len + 1];
+                          
+       FILE* f = fopen_boost (p, "r");
+       if (!f) {
+               return "";
+       }
+
+       fread (c, 1, len, f);
+       fclose (f);
+       c[len] = '\0';
+
+       string s (c);
+       delete[] c;
+
+       return s;
+}
+
+/** @param key RSA private key in PEM format (optionally with -----BEGIN... / -----END...)
+ *  @return SHA1 fingerprint of key
+ */
+string
+dcp::private_key_fingerprint (string key)
+{
+       boost::replace_all (key, "-----BEGIN RSA PRIVATE KEY-----\n", "");
+       boost::replace_all (key, "\n-----END RSA PRIVATE KEY-----\n", "");
+
+       unsigned char buffer[4096];
+       int const N = base64_decode (key, buffer, sizeof (buffer));
+
+       SHA_CTX sha;
+       SHA1_Init (&sha);
+       SHA1_Update (&sha, buffer, N);
+       uint8_t digest[20];
+       SHA1_Final (digest, &sha);
+
+       char digest_base64[64];
+       return Kumu::base64encode (digest, 20, digest_base64, 64);
+}