Răsfoiți Sursa

added fmt_digest (sha1,md5,adler,crc)

ncannasse 8 ani în urmă
părinte
comite
3e3c1f0c1a
5 a modificat fișierele cu 855 adăugiri și 423 ștergeri
  1. 260 0
      libs/fmt/fmt.c
  2. 2 0
      libs/fmt/fmt.vcxproj
  3. 425 423
      libs/fmt/fmt.vcxproj.filters
  4. 128 0
      libs/fmt/sha1.c
  5. 40 0
      libs/fmt/sha1.h

+ 260 - 0
libs/fmt/fmt.c

@@ -393,3 +393,263 @@ DEFINE_PRIM(_I32, ogg_tell, _OGG);
 DEFINE_PRIM(_BOOL, ogg_seek, _OGG _I32);
 DEFINE_PRIM(_I32, ogg_read, _OGG _BYTES _I32 _I32);
 
+/* ------------------------------------------------- CRYPTO --------------------------------------------------- */
+
+typedef unsigned int uint32;
+typedef unsigned char uint8;
+
+typedef struct {
+    uint32 total[2];
+    uint32 state[4];
+    uint8 buffer[64];
+} md5_context;
+
+#define GET_UINT32(n,b,i)                       \
+{                                               \
+    (n) = ( (uint32) (b)[(i)    ]       )       \
+        | ( (uint32) (b)[(i) + 1] <<  8 )       \
+        | ( (uint32) (b)[(i) + 2] << 16 )       \
+        | ( (uint32) (b)[(i) + 3] << 24 );      \
+}
+
+#define PUT_UINT32(n,b,i)                       \
+{                                               \
+    (b)[(i)    ] = (uint8) ( (n)       );       \
+    (b)[(i) + 1] = (uint8) ( (n) >>  8 );       \
+    (b)[(i) + 2] = (uint8) ( (n) >> 16 );       \
+    (b)[(i) + 3] = (uint8) ( (n) >> 24 );       \
+}
+
+static void md5_starts( md5_context *ctx ) {
+    ctx->total[0] = 0;
+    ctx->total[1] = 0;
+    ctx->state[0] = 0x67452301;
+    ctx->state[1] = 0xEFCDAB89;
+    ctx->state[2] = 0x98BADCFE;
+    ctx->state[3] = 0x10325476;
+}
+
+static void md5_process( md5_context *ctx, uint8 data[64] ) {
+    uint32 X[16], A, B, C, D;
+    GET_UINT32( X[0],  data,  0 );
+    GET_UINT32( X[1],  data,  4 );
+    GET_UINT32( X[2],  data,  8 );
+    GET_UINT32( X[3],  data, 12 );
+    GET_UINT32( X[4],  data, 16 );
+    GET_UINT32( X[5],  data, 20 );
+    GET_UINT32( X[6],  data, 24 );
+    GET_UINT32( X[7],  data, 28 );
+    GET_UINT32( X[8],  data, 32 );
+    GET_UINT32( X[9],  data, 36 );
+    GET_UINT32( X[10], data, 40 );
+    GET_UINT32( X[11], data, 44 );
+    GET_UINT32( X[12], data, 48 );
+    GET_UINT32( X[13], data, 52 );
+    GET_UINT32( X[14], data, 56 );
+    GET_UINT32( X[15], data, 60 );
+
+#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n)))
+
+#define P(a,b,c,d,k,s,t)                                \
+{                                                       \
+    a += F(b,c,d) + X[k] + t; a = S(a,s) + b;           \
+}
+
+    A = ctx->state[0];
+    B = ctx->state[1];
+    C = ctx->state[2];
+    D = ctx->state[3];
+
+#define F(x,y,z) (z ^ (x & (y ^ z)))
+
+    P( A, B, C, D,  0,  7, 0xD76AA478 );
+    P( D, A, B, C,  1, 12, 0xE8C7B756 );
+    P( C, D, A, B,  2, 17, 0x242070DB );
+    P( B, C, D, A,  3, 22, 0xC1BDCEEE );
+    P( A, B, C, D,  4,  7, 0xF57C0FAF );
+    P( D, A, B, C,  5, 12, 0x4787C62A );
+    P( C, D, A, B,  6, 17, 0xA8304613 );
+    P( B, C, D, A,  7, 22, 0xFD469501 );
+    P( A, B, C, D,  8,  7, 0x698098D8 );
+    P( D, A, B, C,  9, 12, 0x8B44F7AF );
+    P( C, D, A, B, 10, 17, 0xFFFF5BB1 );
+    P( B, C, D, A, 11, 22, 0x895CD7BE );
+    P( A, B, C, D, 12,  7, 0x6B901122 );
+    P( D, A, B, C, 13, 12, 0xFD987193 );
+    P( C, D, A, B, 14, 17, 0xA679438E );
+    P( B, C, D, A, 15, 22, 0x49B40821 );
+
+#undef F
+
+#define F(x,y,z) (y ^ (z & (x ^ y)))
+
+    P( A, B, C, D,  1,  5, 0xF61E2562 );
+    P( D, A, B, C,  6,  9, 0xC040B340 );
+    P( C, D, A, B, 11, 14, 0x265E5A51 );
+    P( B, C, D, A,  0, 20, 0xE9B6C7AA );
+    P( A, B, C, D,  5,  5, 0xD62F105D );
+    P( D, A, B, C, 10,  9, 0x02441453 );
+    P( C, D, A, B, 15, 14, 0xD8A1E681 );
+    P( B, C, D, A,  4, 20, 0xE7D3FBC8 );
+    P( A, B, C, D,  9,  5, 0x21E1CDE6 );
+    P( D, A, B, C, 14,  9, 0xC33707D6 );
+    P( C, D, A, B,  3, 14, 0xF4D50D87 );
+    P( B, C, D, A,  8, 20, 0x455A14ED );
+    P( A, B, C, D, 13,  5, 0xA9E3E905 );
+    P( D, A, B, C,  2,  9, 0xFCEFA3F8 );
+    P( C, D, A, B,  7, 14, 0x676F02D9 );
+    P( B, C, D, A, 12, 20, 0x8D2A4C8A );
+
+#undef F
+    
+#define F(x,y,z) (x ^ y ^ z)
+
+    P( A, B, C, D,  5,  4, 0xFFFA3942 );
+    P( D, A, B, C,  8, 11, 0x8771F681 );
+    P( C, D, A, B, 11, 16, 0x6D9D6122 );
+    P( B, C, D, A, 14, 23, 0xFDE5380C );
+    P( A, B, C, D,  1,  4, 0xA4BEEA44 );
+    P( D, A, B, C,  4, 11, 0x4BDECFA9 );
+    P( C, D, A, B,  7, 16, 0xF6BB4B60 );
+    P( B, C, D, A, 10, 23, 0xBEBFBC70 );
+    P( A, B, C, D, 13,  4, 0x289B7EC6 );
+    P( D, A, B, C,  0, 11, 0xEAA127FA );
+    P( C, D, A, B,  3, 16, 0xD4EF3085 );
+    P( B, C, D, A,  6, 23, 0x04881D05 );
+    P( A, B, C, D,  9,  4, 0xD9D4D039 );
+    P( D, A, B, C, 12, 11, 0xE6DB99E5 );
+    P( C, D, A, B, 15, 16, 0x1FA27CF8 );
+    P( B, C, D, A,  2, 23, 0xC4AC5665 );
+
+#undef F
+
+#define F(x,y,z) (y ^ (x | ~z))
+
+    P( A, B, C, D,  0,  6, 0xF4292244 );
+    P( D, A, B, C,  7, 10, 0x432AFF97 );
+    P( C, D, A, B, 14, 15, 0xAB9423A7 );
+    P( B, C, D, A,  5, 21, 0xFC93A039 );
+    P( A, B, C, D, 12,  6, 0x655B59C3 );
+    P( D, A, B, C,  3, 10, 0x8F0CCC92 );
+    P( C, D, A, B, 10, 15, 0xFFEFF47D );
+    P( B, C, D, A,  1, 21, 0x85845DD1 );
+    P( A, B, C, D,  8,  6, 0x6FA87E4F );
+    P( D, A, B, C, 15, 10, 0xFE2CE6E0 );
+    P( C, D, A, B,  6, 15, 0xA3014314 );
+    P( B, C, D, A, 13, 21, 0x4E0811A1 );
+    P( A, B, C, D,  4,  6, 0xF7537E82 );
+    P( D, A, B, C, 11, 10, 0xBD3AF235 );
+    P( C, D, A, B,  2, 15, 0x2AD7D2BB );
+    P( B, C, D, A,  9, 21, 0xEB86D391 );
+
+#undef F
+
+    ctx->state[0] += A;
+    ctx->state[1] += B;
+    ctx->state[2] += C;
+    ctx->state[3] += D;
+}
+
+static void md5_update( md5_context *ctx, uint8 *input, uint32 length ) {
+    uint32 left, fill;
+    if( !length )
+		return;
+    left = ctx->total[0] & 0x3F;
+    fill = 64 - left;
+
+    ctx->total[0] += length;
+    ctx->total[0] &= 0xFFFFFFFF;
+
+    if( ctx->total[0] < length )
+        ctx->total[1]++;
+
+    if( left && length >= fill ) {
+        memcpy( (void *) (ctx->buffer + left),
+                (void *) input, fill );
+        md5_process( ctx, ctx->buffer );
+        length -= fill;
+        input  += fill;
+        left = 0;
+    }
+
+    while( length >= 64 ) {
+        md5_process( ctx, input );
+        length -= 64;
+        input  += 64;
+    }
+
+    if( length ) {
+        memcpy( (void *) (ctx->buffer + left),
+                (void *) input, length );
+    }
+}
+
+static uint8 md5_padding[64] =
+{
+ 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static void md5_finish( md5_context *ctx, uint8 digest[16] ) {
+    uint32 last, padn;
+    uint32 high, low;
+    uint8 msglen[8];
+
+    high = ( ctx->total[0] >> 29 )
+         | ( ctx->total[1] <<  3 );
+    low  = ( ctx->total[0] <<  3 );
+
+    PUT_UINT32( low,  msglen, 0 );
+    PUT_UINT32( high, msglen, 4 );
+
+    last = ctx->total[0] & 0x3F;
+    padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last );
+
+    md5_update( ctx, md5_padding, padn );
+    md5_update( ctx, msglen, 8 );
+
+    PUT_UINT32( ctx->state[0], digest,  0 );
+    PUT_UINT32( ctx->state[1], digest,  4 );
+    PUT_UINT32( ctx->state[2], digest,  8 );
+    PUT_UINT32( ctx->state[3], digest, 12 );
+}
+
+#include "sha1.h"
+
+HL_PRIM void HL_NAME(digest)( vbyte *out, vbyte *in, int length, int format ) {
+	if( format & 256 ) {
+		in = hl_to_utf8((uchar*)in);
+		length = hl_utf8_length(in, 0);
+	}
+	switch( format & 0xFF ) {
+	case 0:
+		{
+			md5_context ctx;
+			md5_starts(&ctx);
+			md5_update(&ctx,in,(uint32)length);
+			md5_finish(&ctx,out);
+		}
+		break;
+	case 1:
+		{
+			SHA1_CTX ctx;
+			sha1_init(&ctx);
+			sha1_update(&ctx,in,length);
+			sha1_final(&ctx,out);
+		}
+		break;
+	case 2:
+		*((int*)out) = crc32(*(int*)out, in, length);
+		break;
+	case 3:
+		*((int*)out) = adler32(*(int*)out, in, length);
+		break;
+	default:
+		hl_error_msg(USTR("Unknown digest format %d"),format&0xFF);
+		break;
+	}
+}
+
+DEFINE_PRIM(_VOID, digest, _BYTES _BYTES _I32 _I32);

+ 2 - 0
libs/fmt/fmt.vcxproj

@@ -127,6 +127,7 @@
     <ClCompile Include="..\..\include\zlib\trees.c" />
     <ClCompile Include="..\..\include\zlib\zutil.c" />
     <ClCompile Include="fmt.c" />
+    <ClCompile Include="sha1.c" />
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\include\png\png.h" />
@@ -164,6 +165,7 @@
     <ClInclude Include="..\..\include\zlib\trees.h" />
     <ClInclude Include="..\..\include\zlib\zconf.h" />
     <ClInclude Include="..\..\include\zlib\zlib.h" />
+    <ClInclude Include="sha1.h" />
   </ItemGroup>
   <PropertyGroup Label="Globals">
     <ProjectGuid>{7DDA1414-6675-45C7-8254-42057901F865}</ProjectGuid>

+ 425 - 423
libs/fmt/fmt.vcxproj.filters

@@ -1,424 +1,426 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <ClCompile Include="fmt.c" />
-    <ClCompile Include="..\..\include\turbojpeg\jaricom.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jcapimin.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jcapistd.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jcarith.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jccoefct.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jccolor.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jcdctmgr.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jchuff.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jcinit.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jcmainct.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jcmarker.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jcmaster.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jcomapi.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jcparam.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jcphuff.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jcprepct.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jcsample.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jctrans.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jdapimin.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jdapistd.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jdarith.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jdatadst.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jdatadst-tj.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jdatasrc.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jdatasrc-tj.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jdcoefct.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jdcolor.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jddctmgr.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jdhuff.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jdinput.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jdmainct.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jdmarker.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jdmaster.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jdmerge.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jdphuff.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jdpostct.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jdsample.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jdtrans.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jerror.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jfdctflt.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jfdctfst.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jfdctint.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jidctflt.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jidctfst.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jidctint.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jidctred.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jmemmgr.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jmemnobs.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jquant1.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jquant2.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jutils.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\transupp.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\jsimd.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\turbojpeg\turbojpeg.c">
-      <Filter>turbojpeg</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\zlib\inflate.c">
-      <Filter>zlib</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\zlib\adler32.c">
-      <Filter>zlib</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\zlib\crc32.c">
-      <Filter>zlib</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\zlib\inffast.c">
-      <Filter>zlib</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\zlib\inftrees.c">
-      <Filter>zlib</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\zlib\zutil.c">
-      <Filter>zlib</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\zlib\deflate.c">
-      <Filter>zlib</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\zlib\trees.c">
-      <Filter>zlib</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\png\png.c">
-      <Filter>png</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\png\pngerror.c">
-      <Filter>png</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\png\pngget.c">
-      <Filter>png</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\png\pngmem.c">
-      <Filter>png</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\png\pngpread.c">
-      <Filter>png</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\png\pngread.c">
-      <Filter>png</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\png\pngrio.c">
-      <Filter>png</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\png\pngrtran.c">
-      <Filter>png</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\png\pngrutil.c">
-      <Filter>png</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\png\pngset.c">
-      <Filter>png</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\png\pngtrans.c">
-      <Filter>png</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\png\pngwio.c">
-      <Filter>png</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\png\pngwrite.c">
-      <Filter>png</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\png\pngwtran.c">
-      <Filter>png</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\png\pngwutil.c">
-      <Filter>png</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\vorbis\bitrate.c">
-      <Filter>vorbis</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\vorbis\bitwise.c">
-      <Filter>vorbis</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\vorbis\block.c">
-      <Filter>vorbis</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\vorbis\codebook.c">
-      <Filter>vorbis</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\vorbis\envelope.c">
-      <Filter>vorbis</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\vorbis\floor0.c">
-      <Filter>vorbis</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\vorbis\floor1.c">
-      <Filter>vorbis</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\vorbis\framing.c">
-      <Filter>vorbis</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\vorbis\info.c">
-      <Filter>vorbis</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\vorbis\lookup.c">
-      <Filter>vorbis</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\vorbis\lpc.c">
-      <Filter>vorbis</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\vorbis\lsp.c">
-      <Filter>vorbis</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\vorbis\mapping0.c">
-      <Filter>vorbis</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\vorbis\mdct.c">
-      <Filter>vorbis</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\vorbis\psy.c">
-      <Filter>vorbis</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\vorbis\registry.c">
-      <Filter>vorbis</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\vorbis\res0.c">
-      <Filter>vorbis</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\vorbis\sharedbook.c">
-      <Filter>vorbis</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\vorbis\smallft.c">
-      <Filter>vorbis</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\vorbis\synthesis.c">
-      <Filter>vorbis</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\vorbis\vorbisfile.c">
-      <Filter>vorbis</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\include\vorbis\window.c">
-      <Filter>vorbis</Filter>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <Filter Include="turbojpeg">
-      <UniqueIdentifier>{7c911b77-37c7-4ceb-a8ff-e9b3f0c4b21c}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="zlib">
-      <UniqueIdentifier>{cc205701-f7b7-43f9-abac-942df6a44718}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="png">
-      <UniqueIdentifier>{4db0a874-5bbe-47bd-b1ec-e642ab7f5737}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="vorbis">
-      <UniqueIdentifier>{3f330839-1ff8-4160-8d74-6957d97e9e37}</UniqueIdentifier>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\..\include\zlib\zconf.h">
-      <Filter>zlib</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\zlib\zlib.h">
-      <Filter>zlib</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\zlib\inffast.h">
-      <Filter>zlib</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\zlib\inflate.h">
-      <Filter>zlib</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\zlib\inftrees.h">
-      <Filter>zlib</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\zlib\inffixed.h">
-      <Filter>zlib</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\zlib\crc32.h">
-      <Filter>zlib</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\zlib\deflate.h">
-      <Filter>zlib</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\zlib\trees.h">
-      <Filter>zlib</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\png\png.h">
-      <Filter>png</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\png\pngconf.h">
-      <Filter>png</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\png\pngdebug.h">
-      <Filter>png</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\png\pnginfo.h">
-      <Filter>png</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\png\pnglibconf.h">
-      <Filter>png</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\png\pngpriv.h">
-      <Filter>png</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\png\pngstruct.h">
-      <Filter>png</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\vorbis\backends.h">
-      <Filter>vorbis</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\vorbis\bitrate.h">
-      <Filter>vorbis</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\vorbis\codebook.h">
-      <Filter>vorbis</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\vorbis\codec_internal.h">
-      <Filter>vorbis</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\vorbis\envelope.h">
-      <Filter>vorbis</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\vorbis\highlevel.h">
-      <Filter>vorbis</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\vorbis\lookup.h">
-      <Filter>vorbis</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\vorbis\lookup_data.h">
-      <Filter>vorbis</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\vorbis\lpc.h">
-      <Filter>vorbis</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\vorbis\lsp.h">
-      <Filter>vorbis</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\vorbis\masking.h">
-      <Filter>vorbis</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\vorbis\mdct.h">
-      <Filter>vorbis</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\vorbis\misc.h">
-      <Filter>vorbis</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\vorbis\os.h">
-      <Filter>vorbis</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\vorbis\psy.h">
-      <Filter>vorbis</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\vorbis\registry.h">
-      <Filter>vorbis</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\vorbis\scales.h">
-      <Filter>vorbis</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\vorbis\smallft.h">
-      <Filter>vorbis</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\vorbis\window.h">
-      <Filter>vorbis</Filter>
-    </ClInclude>
-  </ItemGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <ClCompile Include="fmt.c" />
+    <ClCompile Include="..\..\include\turbojpeg\jaricom.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jcapimin.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jcapistd.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jcarith.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jccoefct.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jccolor.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jcdctmgr.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jchuff.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jcinit.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jcmainct.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jcmarker.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jcmaster.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jcomapi.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jcparam.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jcphuff.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jcprepct.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jcsample.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jctrans.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jdapimin.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jdapistd.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jdarith.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jdatadst.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jdatadst-tj.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jdatasrc.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jdatasrc-tj.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jdcoefct.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jdcolor.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jddctmgr.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jdhuff.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jdinput.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jdmainct.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jdmarker.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jdmaster.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jdmerge.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jdphuff.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jdpostct.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jdsample.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jdtrans.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jerror.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jfdctflt.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jfdctfst.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jfdctint.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jidctflt.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jidctfst.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jidctint.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jidctred.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jmemmgr.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jmemnobs.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jquant1.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jquant2.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jutils.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\transupp.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\jsimd.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\turbojpeg\turbojpeg.c">
+      <Filter>turbojpeg</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\zlib\inflate.c">
+      <Filter>zlib</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\zlib\adler32.c">
+      <Filter>zlib</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\zlib\crc32.c">
+      <Filter>zlib</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\zlib\inffast.c">
+      <Filter>zlib</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\zlib\inftrees.c">
+      <Filter>zlib</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\zlib\zutil.c">
+      <Filter>zlib</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\zlib\deflate.c">
+      <Filter>zlib</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\zlib\trees.c">
+      <Filter>zlib</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\png\png.c">
+      <Filter>png</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\png\pngerror.c">
+      <Filter>png</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\png\pngget.c">
+      <Filter>png</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\png\pngmem.c">
+      <Filter>png</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\png\pngpread.c">
+      <Filter>png</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\png\pngread.c">
+      <Filter>png</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\png\pngrio.c">
+      <Filter>png</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\png\pngrtran.c">
+      <Filter>png</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\png\pngrutil.c">
+      <Filter>png</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\png\pngset.c">
+      <Filter>png</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\png\pngtrans.c">
+      <Filter>png</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\png\pngwio.c">
+      <Filter>png</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\png\pngwrite.c">
+      <Filter>png</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\png\pngwtran.c">
+      <Filter>png</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\png\pngwutil.c">
+      <Filter>png</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\vorbis\bitrate.c">
+      <Filter>vorbis</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\vorbis\bitwise.c">
+      <Filter>vorbis</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\vorbis\block.c">
+      <Filter>vorbis</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\vorbis\codebook.c">
+      <Filter>vorbis</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\vorbis\envelope.c">
+      <Filter>vorbis</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\vorbis\floor0.c">
+      <Filter>vorbis</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\vorbis\floor1.c">
+      <Filter>vorbis</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\vorbis\framing.c">
+      <Filter>vorbis</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\vorbis\info.c">
+      <Filter>vorbis</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\vorbis\lookup.c">
+      <Filter>vorbis</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\vorbis\lpc.c">
+      <Filter>vorbis</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\vorbis\lsp.c">
+      <Filter>vorbis</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\vorbis\mapping0.c">
+      <Filter>vorbis</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\vorbis\mdct.c">
+      <Filter>vorbis</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\vorbis\psy.c">
+      <Filter>vorbis</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\vorbis\registry.c">
+      <Filter>vorbis</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\vorbis\res0.c">
+      <Filter>vorbis</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\vorbis\sharedbook.c">
+      <Filter>vorbis</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\vorbis\smallft.c">
+      <Filter>vorbis</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\vorbis\synthesis.c">
+      <Filter>vorbis</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\vorbis\vorbisfile.c">
+      <Filter>vorbis</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\include\vorbis\window.c">
+      <Filter>vorbis</Filter>
+    </ClCompile>
+    <ClCompile Include="sha1.c" />
+  </ItemGroup>
+  <ItemGroup>
+    <Filter Include="turbojpeg">
+      <UniqueIdentifier>{7c911b77-37c7-4ceb-a8ff-e9b3f0c4b21c}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="zlib">
+      <UniqueIdentifier>{cc205701-f7b7-43f9-abac-942df6a44718}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="png">
+      <UniqueIdentifier>{4db0a874-5bbe-47bd-b1ec-e642ab7f5737}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="vorbis">
+      <UniqueIdentifier>{3f330839-1ff8-4160-8d74-6957d97e9e37}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\include\zlib\zconf.h">
+      <Filter>zlib</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\zlib\zlib.h">
+      <Filter>zlib</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\zlib\inffast.h">
+      <Filter>zlib</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\zlib\inflate.h">
+      <Filter>zlib</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\zlib\inftrees.h">
+      <Filter>zlib</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\zlib\inffixed.h">
+      <Filter>zlib</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\zlib\crc32.h">
+      <Filter>zlib</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\zlib\deflate.h">
+      <Filter>zlib</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\zlib\trees.h">
+      <Filter>zlib</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\png\png.h">
+      <Filter>png</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\png\pngconf.h">
+      <Filter>png</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\png\pngdebug.h">
+      <Filter>png</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\png\pnginfo.h">
+      <Filter>png</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\png\pnglibconf.h">
+      <Filter>png</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\png\pngpriv.h">
+      <Filter>png</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\png\pngstruct.h">
+      <Filter>png</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\vorbis\backends.h">
+      <Filter>vorbis</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\vorbis\bitrate.h">
+      <Filter>vorbis</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\vorbis\codebook.h">
+      <Filter>vorbis</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\vorbis\codec_internal.h">
+      <Filter>vorbis</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\vorbis\envelope.h">
+      <Filter>vorbis</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\vorbis\highlevel.h">
+      <Filter>vorbis</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\vorbis\lookup.h">
+      <Filter>vorbis</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\vorbis\lookup_data.h">
+      <Filter>vorbis</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\vorbis\lpc.h">
+      <Filter>vorbis</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\vorbis\lsp.h">
+      <Filter>vorbis</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\vorbis\masking.h">
+      <Filter>vorbis</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\vorbis\mdct.h">
+      <Filter>vorbis</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\vorbis\misc.h">
+      <Filter>vorbis</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\vorbis\os.h">
+      <Filter>vorbis</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\vorbis\psy.h">
+      <Filter>vorbis</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\vorbis\registry.h">
+      <Filter>vorbis</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\vorbis\scales.h">
+      <Filter>vorbis</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\vorbis\smallft.h">
+      <Filter>vorbis</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\vorbis\window.h">
+      <Filter>vorbis</Filter>
+    </ClInclude>
+    <ClInclude Include="sha1.h" />
+  </ItemGroup>
 </Project>

+ 128 - 0
libs/fmt/sha1.c

@@ -0,0 +1,128 @@
+/*
+ * Copyright (C)2005-2016 Haxe Foundation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+#include <hl.h>
+#include "sha1.h"
+#include <stdio.h>
+#include <string.h>
+
+// original code by Steve Reid
+
+#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
+#ifdef HL_BIG_ENDIAN
+#	define blk0(i) block[i]
+#else
+#	define blk0(i) (block[i] = (rol(block[i],24)&0xFF00FF00) \
+		|(rol(block[i],8)&0x00FF00FF))
+#endif
+#define blk(i) (block[i&15] = rol(block[(i+13)&15]^block[(i+8)&15] \
+    ^block[(i+2)&15]^block[i&15],1))
+/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */
+#define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30);
+#define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30);
+#define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30);
+#define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30);
+#define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30);
+
+static void sha1_transform( unsigned int state[5], unsigned char buffer[64] ) {
+	unsigned int a, b, c, d, e;
+	unsigned int block[16];
+	memcpy(block, buffer, 64);
+	/* Copy context->state[] to working vars */
+	a = state[0];
+	b = state[1];
+	c = state[2];
+	d = state[3];
+	e = state[4];
+	/* 4 rounds of 20 operations each. Loop unrolled. */
+	R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3);
+	R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7);
+	R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11);
+	R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15);
+	R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19);
+	R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23);
+	R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27);
+	R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31);
+	R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35);
+	R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39);
+	R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43);
+	R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47);
+	R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51);
+	R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55);
+	R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59);
+	R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63);
+	R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67);
+	R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71);
+	R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75);
+	R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79);
+	/* Add the working vars back into context.state[] */
+	state[0] += a;
+	state[1] += b;
+	state[2] += c;
+	state[3] += d;
+	state[4] += e;
+}
+
+void sha1_init( SHA1_CTX *context ) {
+	/* SHA1 initialization constants */
+	context->state[0] = 0x67452301;
+	context->state[1] = 0xEFCDAB89;
+	context->state[2] = 0x98BADCFE;
+	context->state[3] = 0x10325476;
+	context->state[4] = 0xC3D2E1F0;
+	context->count[0] = context->count[1] = 0;
+}
+
+void sha1_update( SHA1_CTX *context, const unsigned char *data, unsigned int len ) {
+	unsigned int i, j;
+	j = (context->count[0] >> 3) & 63;
+	if ((context->count[0] += len << 3) < (len << 3)) context->count[1]++;
+	context->count[1] += (len >> 29);
+	if ((j + len) > 63) {
+		memcpy(&context->buffer[j], data, (i = 64-j));
+		sha1_transform(context->state, context->buffer);
+		for ( ; i + 63 < len; i += 64 )
+			sha1_transform(context->state, (unsigned char *)&data[i]);
+		j = 0;
+	} else
+		i = 0;
+	memcpy(&context->buffer[j], &data[i], len - i);
+}
+
+void sha1_final( SHA1_CTX *context, unsigned char digest[SHA1_SIZE] ) {
+	unsigned int i;
+	unsigned char finalcount[8];
+	for (i = 0; i < 8; i++) {
+		finalcount[i] = (unsigned char)((context->count[(i >= 4 ? 0 : 1)]
+			>> ((3-(i & 3)) * 8) ) & 255);  /* Endian independent */
+	}
+	sha1_update(context, (unsigned char *)"\200", 1);
+	while ((context->count[0] & 504) != 448) {
+		sha1_update(context, (unsigned char *)"\0", 1);
+	}
+	sha1_update(context, finalcount, 8);
+	for (i = 0; i < SHA1_SIZE; i++) {
+		digest[i] = (unsigned char)
+			((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255);
+	}
+	sha1_transform(context->state, context->buffer);
+}
+

+ 40 - 0
libs/fmt/sha1.h

@@ -0,0 +1,40 @@
+/*
+ * Copyright (C)2005-2016 Haxe Foundation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+#ifndef SHA1_H
+#define SHA1_H
+
+#define SHA1_SIZE 20
+
+typedef unsigned char SHA1_DIGEST[SHA1_SIZE];
+
+typedef struct {
+	unsigned int state[5];
+	unsigned int count[2];
+	unsigned char buffer[64];
+} SHA1_CTX;
+
+void sha1_init( SHA1_CTX *c );
+void sha1_update( SHA1_CTX *c, const unsigned char *data, unsigned int len );
+void sha1_final( SHA1_CTX *c, SHA1_DIGEST digest );
+
+#endif
+/* ************************************************************************ */