Пакет 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
объект.
Создание обработчика публикации
Для создания обработчика публикации требуется три шага.
- Создание объекта
mip::ProtectionDescriptor
. mip::ProtectionDescriptor
Используйте экземплярmip::ProtectionHandler::PublishingSettings
.- Вызов
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();
Защищенное содержимое без соответствующей лицензии на публикацию не может быть расшифровывается.
Создание обработчика потребления
Для создания обработчика публикации требуется три шага.
- Извлеките сериализованную лицензию на публикацию из
std::vector<uint8_t>
защищенного содержимого. - Используйте сериализованную лицензию публикации для создания экземпляра
mip::ProtectionHandler::ConsumptionSettings
. - Вызов
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();