#include "DirScanner.h"
#include "JP2K.h"
#include "Wav.h"
-#include "MDD.h"
//------------------------------------------------------------------------------------------
memcpy(Info.ContextID, InfoObj->ContextID.Value(), UUIDlen);
memcpy(Info.CryptographicKeyID, InfoObj->CryptographicKeyID.Value(), UUIDlen);
- UL MIC_SHA1(MICAlgorithm_HMAC_SHA1);
- UL MIC_NONE(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;
return RESULT_OK;
}
-#if 0
-
-
-//
-// add DMS CryptographicFramework entry to source package
-void
-ASDCP::AddDMScrypt(PackagePtr SourcePackage, WriterInfo& Descr, const byte_t* SourceEssenceContainerLabel)
-{
- assert(SourceEssenceContainerLabel);
-
- TrackPtr MPDMTrack = SourcePackage->AddDMTrack(); // zero parameters = static
- DMSegmentPtr MPDMSegment = MPDMTrack->AddDMSegment();
-
- MDObject* Crypto_DMS_Ptr = new MDObject("CryptographicFramework");
- MPDMSegment->AddChild("DMFramework")->MakeLink(*Crypto_DMS_Ptr);
-
- MDObject* Crypto_DMS_BasicPtr = new MDObject("CryptographicContext");
- Crypto_DMS_Ptr->AddChild("ContextSR")->MakeLink(*Crypto_DMS_BasicPtr);
-
- UUID ContextID(Descr.ContextID);
- Crypto_DMS_BasicPtr->SetValue("ContextID", DataChunk(UUIDlen, ContextID.GetValue())); // UUID
- Crypto_DMS_BasicPtr->SetValue("SourceEssenceContainer",
- DataChunk(klv_key_size, SourceEssenceContainerLabel)); // Label
- Crypto_DMS_BasicPtr->SetValue("CipherAlgorithm", DataChunk(klv_key_size, CipherAlgorithm_AES)); // UL Key
-
- Crypto_DMS_BasicPtr->SetValue("MICAlgorithm",
- DataChunk(KeyLen,
- (Descr.UsesHMAC ?
- MICAlgorithm_HMAC_SHA1
- : MICAlgorithm_NONE))); // UL Key
-
- UUID CryptographicKeyID(Descr.CryptographicKeyID);
-
- Crypto_DMS_BasicPtr->SetValue("CryptographicKeyID", DataChunk(UUIDlen, CryptographicKeyID.GetValue())); // UUID
-}
-
-
-//
-//
-ASDCP::Result_t
-ASDCP::FindObject(const char* filename, const char* objname, FILE* stream)
-{
- ASDCP_TEST_NULL_STR(filename);
- ASDCP_TEST_NULL_STR(objname);
-
- if ( stream == 0 )
- stream = stderr;
-
- ASDCP::h__Reader Reader;
- Result_t result = Reader.OpenMXFRead(filename);
-
- if ( ASDCP_FAILURE(result) )
- return result;
-
- MDObject* DescObj = Reader.GetMDObjectByType(objname);
-
- if ( DescObj )
- {
- DumpMDObject(*DescObj, " ", stream);
- return RESULT_OK;
- }
-
- return RESULT_FAIL;
-}
-#endif
-
//
//
ASDCP::Result_t
if ( ASDCP_SUCCESS(result) )
{
type = ESS_UNKNOWN;
- if ( ASDCP_SUCCESS(TestHeader.GetMDObjectByType(OBJ_TYPE_ARGS(JPEG2000PictureSubDescriptor))) )
+ if ( ASDCP_SUCCESS(TestHeader.GetMDObjectByType(OBJ_TYPE_ARGS(RGBAEssenceDescriptor))) )
type = ESS_JPEG_2000;
else
{
if ( ASDCP_SUCCESS(result) )
{
ASDCP::Wav::SimpleWaveHeader WavHeader;
+ ASDCP::AIFF::SimpleAIFFHeader AIFFHeader;
ui32_t data_offset;
const byte_t* p = FB.RoData();
else if ( ASDCP_SUCCESS(WavHeader.ReadFromBuffer(p, read_count, &data_offset)) )
type = ESS_PCM_24b_48k;
+
+ else if ( ASDCP_SUCCESS(AIFFHeader.ReadFromBuffer(p, read_count, &data_offset)) )
+ type = ESS_PCM_24b_48k;
}
}
else if ( ASDCP::PathIsDirectory(filename) )
byte_t* p = Data;
HMAC->Reset();
- static byte_t ber_4[klv_length_size] = {0x83, 0};
+ static byte_t ber_4[MXF_BER_LENGTH] = {0x83, 0};
// update HMAC with essence data
HMAC->Update(FB.RoData(), FB.Size());
// track file ID length
- memcpy(p, ber_4, klv_length_size);
+ memcpy(p, ber_4, MXF_BER_LENGTH);
*(p+3) = UUIDlen;;
- p += klv_length_size;
+ p += MXF_BER_LENGTH;
// track file ID
memcpy(p, AssetID, UUIDlen);
p += UUIDlen;
// sequence length
- memcpy(p, ber_4, klv_length_size);
+ memcpy(p, ber_4, MXF_BER_LENGTH);
*(p+3) = sizeof(ui64_t);
- p += klv_length_size;
+ p += MXF_BER_LENGTH;
// sequence number
i2p<ui64_t>(ASDCP_i64_BE(sequence), p);
p += sizeof(ui64_t);
// HMAC length
- memcpy(p, ber_4, klv_length_size);
+ memcpy(p, ber_4, MXF_BER_LENGTH);
*(p+3) = HMAC_SIZE;
- p += klv_length_size;
+ p += MXF_BER_LENGTH;
// update HMAC with intpack values
HMAC->Update(Data, klv_intpack_size - HMAC_SIZE);
ASDCP::KLVReader::ReadKLFromFile(ASDCP::FileReader& Reader)
{
ui32_t read_count;
- m_HeaderLength = klv_key_size + klv_length_size;
+ m_HeaderLength = SMPTE_UL_LENGTH + MXF_BER_LENGTH;
Result_t result = Reader.Read(m_Key, m_HeaderLength, &read_count);
assert(read_count == m_HeaderLength);
if ( ASDCP_SUCCESS(result) )
{
- m_BERLength = BER_length(m_Key + klv_key_size);
+ m_BERLength = BER_length(m_Key + SMPTE_UL_LENGTH);
- if ( m_BERLength != klv_length_size )
+ if ( m_BERLength == 0 )
{
+ char intbuf[IntBufferLen];
+ ASDCP::DefaultLogSink().Error("KLV format error, zero BER length not allowed at file position %s\n",
+ i64szx((Reader.Tell() - (fpos_t)SMPTE_UL_LENGTH), 8, intbuf));
+ return RESULT_FAIL;
+ }
+
+ if ( m_BERLength != MXF_BER_LENGTH )
+ {
+
ASDCP::DefaultLogSink().Error("Found packet with BER length %lu; being less efficient...\n",
m_BERLength);
// TODO: recover the correct BER value
// and reposition the file pointer
+ ASDCP::DefaultLogSink().Error("please finish me\n");
assert(0);
}
- if ( ! read_BER(m_Key + klv_key_size, &m_Length) )
+ if ( ! read_BER(m_Key + SMPTE_UL_LENGTH, &m_Length) )
return RESULT_FAIL;
}