Kit de développement logiciel (SDK) Microsoft Information Protection - Concepts du gestionnaire de protection
Dans le kit de développement logiciel (SDK) MIP Protection, le mip::ProtectionHandler
expose les fonctions de chiffrement et de déchiffrement des flux protégés et des mémoires tampons, en effectuant des vérifications d’accès , en obtenant la licence de publication ainsi que des attributs à partir des informations protégées.
Spécifications
La création d’un ProtectionHandler
pour travailler avec un fichier spécifique nécessite :
- Un
mip::MipContext
- Un
mip::ProtectionProfile
- Un
mip::ProtectionEngine
ajouté à l’élémentProtectionProfile
- Classe qui hérite
mip::ProtectionHandler::Observer
. - Un
mip::ProtectionDescriptor
ou une licence de publication
Créer un gestionnaire de protection
Les objets mip::ProtectionHandler
sont construits pour les opérations de protection ou de consommation. Le gestionnaire est créé à l’aide de l’une des quatre fonctions, selon le scénario.
mip::ProtectionEngine->CreateProtectionHandlerForConsumptionAsync()
mip::ProtectionEngine->CreateProtectionHandlerForConsumption()
mip::ProtectionEngine->CreateProtectionHandlerForPublishingAsync()
mip::ProtectionEngine->CreateProtectionHandlerForPublishing()
Ces fonctions acceptent un objet mip::ProtectionHandler::PublishingSettings
ou mip::ProtectionHandler::ConsumptionSettings
.
Créer un gestionnaire de publication
La création d’un gestionnaire de publication nécessite trois étapes :
- Créez un objet
mip::ProtectionDescriptor
. - Utilisez le
mip::ProtectionDescriptor
pour instanciermip::ProtectionHandler::PublishingSettings
. - Appelez le passage
mip::ProtectionEngine::CreateProtectionHandlerForPublishingAsync()
de l’objet, de l’observateur et de la promessePublishingSettings
.
Créer à partir du descripteur
Si vous protégez le contenu qui n’a pas encore été protégé ou que vous appliquez une nouvelle protection au contenu, ce qui implique qu’il a été déchiffré, un mip::ProtectionDescriptor
doit être construit. Une fois construit, il est utilisé pour instancier l’objet mip::ProtectionHandler::PublishingSettings()
. Le résultat est retourné sous la forme d’un 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;
Une fois que vous avez créé l’objet ProtectionHandler
, les opérations de protection (chiffrement/déchiffrement) peuvent être effectuées. La licence de publication doit être extraite du gestionnaire et stockée avec le contenu chiffré. La licence de publication peut être récupérée en appelant : handler->GetSerializedPublishingLicense();
Le contenu protégé sans la licence de publication correspondante ne peut pas être déchiffré.
Créer le gestionnaire de consommation
La création d’un gestionnaire de publication nécessite trois étapes :
- Extrayez une licence de publication sérialisée en tant que
std::vector<uint8_t>
à partir du contenu protégé. - Utilisez la licence de publication sérialisée pour instancier
mip::ProtectionHandler::ConsumptionSettings
. - Appelez le passage
mip::ProtectionEngine::CreateProtectionHandlerForConsumptionAsync()
de l’objet, de l’observateur et de la promesseConsumptionSettings
.
Cet exemple suppose que la licence de publication a déjà été lue à partir d’une source et stockée dans 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();