SDK de Microsoft Information Protection: conceptos del controlador de protección
En el SDK de protección de MIP, el elemento mip::ProtectionHandler
expone las funciones para cifrar y descifrar secuencias y búferes protegidos, realizar comprobaciones de acceso, obtener la licencia de publicación y obtener atributos de la información protegida.
Requisitos
La creación de un ProtectionHandler
para trabajar con un archivo específico requiere lo siguiente:
- Una operación
mip::MipContext
- Una operación
mip::ProtectionProfile
- Agregar un
mip::ProtectionEngine
aProtectionProfile
- Una clase que herede
mip::ProtectionHandler::Observer
- Un
mip::ProtectionDescriptor
o licencia de publicación
Creación de un controlador de protección
Los objetos mip::ProtectionHandler
se crean para operaciones de protección o consumo. El controlador se crea mediante una de cuatro funciones, dependiendo del escenario.
mip::ProtectionEngine->CreateProtectionHandlerForConsumptionAsync()
mip::ProtectionEngine->CreateProtectionHandlerForConsumption()
mip::ProtectionEngine->CreateProtectionHandlerForPublishingAsync()
mip::ProtectionEngine->CreateProtectionHandlerForPublishing()
Estas funciones aceptan un objeto mip::ProtectionHandler::PublishingSettings
o mip::ProtectionHandler::ConsumptionSettings
.
Creación de un controlador de publicación
La creación de un controlador de consumo requiere tres pasos:
- Crear un objeto
mip::ProtectionDescriptor
. - Usar
mip::ProtectionDescriptor
para crear una instancia demip::ProtectionHandler::PublishingSettings
. - Llamar a
mip::ProtectionEngine::CreateProtectionHandlerForPublishingAsync()
incorporando el objetoPublishingSettings
, el observador y la promesa.
Creación a partir de un descriptor
Si aún no se ha protegido el contenido, o al aplicar una nueva protección al contenido, lo que implica que se ha descifrado, se debe construir un mip::ProtectionDescriptor
. Una vez construido, se usa para crear instancias del objeto mip::ProtectionHandler::PublishingSettings()
. El resultado se devuelve a través del mip::ProtectionHandler::Observer
.
// Create the protection descriptor, passing in a templateId.
auto descriptorBuilder = mip::ProtectionDescriptorBuilder::CreateFromTemplate(protectionOptions.templateId);
std::shared_ptr<mip::ProtectionDescriptor> descriptor = descriptorBuilder->Build();
// Define the handler promise, future, and observer.
auto handlerPromise = std::make_shared<std::promise<std::shared_ptr<ProtectionHandler>>>();
auto handlerFuture = handlerPromise->get_future();
auto handlerObserver = std::make_shared<ProtectionHandlerObserverImpl>();
// Create the PublishingSettings object using the previously-created descriptor as input.
mip::ProtectionHandler::PublishingSettings publishingSettings = mip::ProtectionHandler::PublishingSettings(descriptor);
// Create/get the publishing handler from the publishing settings, observer, and promise.
mEngine->CreateProtectionHandlerForPublishingAsync(publishingSettings, handlerObserver, handlerPromise);
auto handler = handlerFuture.get();
return handler;
Después de crear correctamente el objeto ProtectionHandler
, se podrán realizar operaciones de protección (cifrar o descifrar). La licencia de publicación debe capturarse desde el controlador y almacenarse con el contenido cifrado. La licencia de publicación se puede capturar mediante una llamada a: handler->GetSerializedPublishingLicense();
No se puede descifrar el contenido protegido sin la licencia de publicación correspondiente.
Creación del controlador de consumo
La creación de un controlador de consumo requiere tres pasos:
- Extraer una licencia de publicación serializada como
std::vector<uint8_t>
a partir del contenido protegido. - Usar la licencia de publicación serializada para crear una instancia de
mip::ProtectionHandler::ConsumptionSettings
. - Llamar a
mip::ProtectionEngine::CreateProtectionHandlerForConsumptionAsync()
incorporando el objetoConsumptionSettings
, el observador y la promesa.
En este ejemplo se presupone que la licencia de publicación ya se ha leído desde algún origen y se ha almacenado en std::vector<uint8_t> serializedPublishingLicense
.
//TODO: Implement GetPublishingLicense()
//Snip implies that function reads PL from source file, database, stream, etc.
std::vector<uint8_t> serializedPublishingLicense = GetPublishingLicense(filePath);
// Define the handler promise, future, and observer.
auto handlerPromise = std::make_shared<std::promise<std::shared_ptr<ProtectionHandler>>>();
auto handlerFuture = handlerPromise->get_future();
shared_ptr<ProtectionHandlerObserverImpl> handlerObserver = std::make_shared<ProtectionHandlerObserverImpl>();
// Create the consumption settings object from the publishing license.
mip::ProtectionHandler::ConsumptionSettings consumptionSettings = mip::ProtectionHandler::ConsumptionSettings(serializedPublishingLicense);
// Create/get the publishing handler from the publishing settings, observer, and promise.
mEngine->CreateProtectionHandlerForConsumptionAsync(consumptionSettings, handlerObserver, handlerPromise);
auto handler = handlerFuture.get();