hmac pad fix
[asdcplib.git] / src / AS_DCP_MXF.cpp
index 8bb084e268a100e783bde60c73f42a3b8b0b8144..95e219e1df331de0f392e3cd600f6ab8013ff45b 100755 (executable)
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2004-2007, John Hurst
+Copyright (c) 2004-2009, John Hurst
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
@@ -132,7 +132,7 @@ ASDCP::MD_to_WriterInfo(Identification* InfoObj, WriterInfo& Info)
 
 //
 Result_t
-ASDCP::MD_to_CryptoInfo(CryptographicContext* InfoObj, WriterInfo& Info)
+ASDCP::MD_to_CryptoInfo(CryptographicContext* InfoObj, WriterInfo& Info, const Dictionary& Dict)
 {
   ASDCP_TEST_NULL(InfoObj);
 
@@ -140,8 +140,8 @@ ASDCP::MD_to_CryptoInfo(CryptographicContext* InfoObj, WriterInfo& Info)
   memcpy(Info.ContextID, InfoObj->ContextID.Value(), UUIDlen);
   memcpy(Info.CryptographicKeyID, InfoObj->CryptographicKeyID.Value(), UUIDlen);
 
-  UL MIC_SHA1(Dict::ul(MDD_MICAlgorithm_HMAC_SHA1));
-  UL MIC_NONE(Dict::ul(MDD_MICAlgorithm_NONE));
+  UL MIC_SHA1(Dict.ul(MDD_MICAlgorithm_HMAC_SHA1));
+  UL MIC_NONE(Dict.ul(MDD_MICAlgorithm_NONE));
 
   if ( InfoObj->MICAlgorithm == MIC_SHA1 )
     Info.UsesHMAC = true;
@@ -163,9 +163,12 @@ ASDCP::MD_to_CryptoInfo(CryptographicContext* InfoObj, WriterInfo& Info)
 ASDCP::Result_t
 ASDCP::EssenceType(const char* filename, EssenceType_t& type)
 {
+  const Dictionary* m_Dict = &DefaultCompositeDict();
+  assert(m_Dict);
+
   ASDCP_TEST_NULL_STR(filename);
   Kumu::FileReader   Reader;
-  OPAtomHeader TestHeader;
+  OPAtomHeader TestHeader(m_Dict);
 
   Result_t result = Reader.OpenRead(filename);
 
@@ -231,7 +234,11 @@ ASDCP::RawEssenceType(const char* filename, EssenceType_t& type)
            {
              type = ESS_MPEG2_VES;
            }
-         else if ( ASDCP_SUCCESS(WavHeader.ReadFromBuffer(p, read_count, &data_offset)) )
+         else if ( memcmp(FB.RoData(), ASDCP::JP2K::Magic, sizeof(ASDCP::JP2K::Magic)) == 0 )
+           {
+             type = ESS_JPEG_2000;
+           }
+         else if ( ASDCP_SUCCESS(WavHeader.ReadFromBuffer(FB.RoData(), read_count, &data_offset)) )
            {
              switch ( WavHeader.samplespersec )
                {
@@ -241,11 +248,11 @@ ASDCP::RawEssenceType(const char* filename, EssenceType_t& type)
                  return RESULT_FORMAT;
                }
            }
-         else if ( ASDCP_SUCCESS(AIFFHeader.ReadFromBuffer(p, read_count, &data_offset)) )
+         else if ( ASDCP_SUCCESS(AIFFHeader.ReadFromBuffer(FB.RoData(), read_count, &data_offset)) )
            {
              type = ESS_PCM_24b_48k;
            }
-         else if ( Kumu::StringIsXML((const char*)p, FB.Size()) )
+         else if ( Kumu::StringIsXML((const char*)FB.RoData(), FB.Size()) )
            {
              type = ESS_TIMED_TEXT;
            }
@@ -278,10 +285,19 @@ ASDCP::RawEssenceType(const char* filename, EssenceType_t& type)
              if ( ASDCP_SUCCESS(result) )
                {
                  if ( memcmp(FB.RoData(), ASDCP::JP2K::Magic, sizeof(ASDCP::JP2K::Magic)) == 0 )
-                   type = ESS_JPEG_2000;
-
+                   {
+                     type = ESS_JPEG_2000;
+                   }
                  else if ( ASDCP_SUCCESS(WavHeader.ReadFromBuffer(FB.RoData(), read_count, &data_offset)) )
-                   type = ESS_PCM_24b_48k;
+                   {
+                     switch ( WavHeader.samplespersec )
+                       {
+                       case 48000: type = ESS_PCM_24b_48k; break;
+                       case 96000: type = ESS_PCM_24b_96k; break;
+                       default:
+                         return RESULT_FORMAT;
+                       }
+                   }
                }
 
              break;