Поделиться через


Пакет SDK Для Microsoft Information Protection — основные понятия обработчика защиты

В пакете SDK для mip::ProtectionHandler защиты MIP предоставляются функции для шифрования и расшифровки защищенных потоков и буферов, выполнения проверка доступа, получения лицензии на публикацию и получения атрибутов из защищенной информации.

Требования

Для работы с определенным файлом ProtectionHandler требуется:

  • Выполнение команды mip::MipContext
  • Выполнение команды mip::ProtectionProfile
  • Добавлено mip::ProtectionEngine в ProtectionProfile
  • Класс, наследующий mip::ProtectionHandler::Observer.
  • Лицензия на mip::ProtectionDescriptor публикацию

Создание обработчика защиты

mip::ProtectionHandler объекты создаются для операций защиты или потребления . Обработчик создается с помощью одной из четырех функций в зависимости от сценария.

  • mip::ProtectionEngine->CreateProtectionHandlerForConsumptionAsync()
  • mip::ProtectionEngine->CreateProtectionHandlerForConsumption()
  • mip::ProtectionEngine->CreateProtectionHandlerForPublishingAsync()
  • mip::ProtectionEngine->CreateProtectionHandlerForPublishing()

Эти функции принимают либо объект, mip::ProtectionHandler::ConsumptionSettings либо mip::ProtectionHandler::PublishingSettings объект.

Создание обработчика публикации

Для создания обработчика публикации требуется три шага.

  1. Создание объекта mip::ProtectionDescriptor.
  2. mip::ProtectionDescriptor Используйте экземплярmip::ProtectionHandler::PublishingSettings.
  3. Вызов mip::ProtectionEngine::CreateProtectionHandlerForPublishingAsync() передачи PublishingSettings объекта, наблюдателя и обещания.

Создание из дескриптора

Если защита содержимого, которое еще не было защищено, или при применении новой защиты к содержимому, что означает, что оно расшифровывается, mip::ProtectionDescriptor необходимо создать. После создания он используется для создания экземпляра mip::ProtectionHandler::PublishingSettings() объекта. Результат возвращается через 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;

После успешного ProtectionHandler создания объекта можно выполнить операции защиты (шифрование и расшифровка). Лицензия на публикацию должна быть получена из обработчика и сохранена с зашифрованным содержимым. Лицензия на публикацию может быть возвращена путем вызова: handler->GetSerializedPublishingLicense();

Защищенное содержимое без соответствующей лицензии на публикацию не может быть расшифровывается.

Создание обработчика потребления

Для создания обработчика публикации требуется три шага.

  1. Извлеките сериализованную лицензию на публикацию из std::vector<uint8_t> защищенного содержимого.
  2. Используйте сериализованную лицензию публикации для создания экземпляра mip::ProtectionHandler::ConsumptionSettings.
  3. Вызов mip::ProtectionEngine::CreateProtectionHandlerForConsumptionAsync() передачи ConsumptionSettings объекта, наблюдателя и обещания.

В этом примере предполагается, что лицензия на публикацию уже считывается из некоторых источников и хранится в 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();