The interface is defined in hardware/interfaces/drm/aidl(http://go/ag/15329852). Test: build m android.hardware.drm-service.widevine -j128 Test: build_and_run_all_unit_tests.sh for hidl tests Test: atest VtsAidlHalDrmTargetTest Test: atest vts_treble_vintf_vendor_test:vts_treble_vintf_vendor_test.DeviceManifest/SingleManifestTest#ManifestAidlHalsServed/0 -- --abi x86_64 Bug: 200055138 Bug: 170964303 Change-Id: I5654d90d8a4b0bae4b4a78e79b27c1cafec36be7
51 lines
1.9 KiB
C++
51 lines
1.9 KiB
C++
//
|
|
// Copyright 2021 Google LLC. All Rights Reserved. This file and proprietary
|
|
// source code may only be used and distributed under the Widevine License
|
|
// Agreement.
|
|
//
|
|
|
|
//#define LOG_NDEBUG 0
|
|
#define LOG_TAG "WVCdm"
|
|
#include <log/log.h>
|
|
|
|
#include "WVGenericCryptoInterface.h"
|
|
|
|
#include "wv_cdm_constants.h"
|
|
|
|
namespace wvdrm {
|
|
|
|
using namespace std;
|
|
using namespace wvcdm;
|
|
|
|
OEMCryptoResult WVGenericCryptoInterface::signRSA(const uint8_t* wrapped_rsa_key,
|
|
size_t wrapped_rsa_key_length,
|
|
const uint8_t* message,
|
|
size_t message_length,
|
|
std::vector<uint8_t>& signature,
|
|
RSA_Padding_Scheme padding_scheme) {
|
|
OEMCrypto_SESSION session;
|
|
OEMCryptoResult sts = OEMCrypto_OpenSession(&session);
|
|
if (sts != OEMCrypto_SUCCESS) return sts;
|
|
sts = OEMCrypto_LoadDRMPrivateKey(session, OEMCrypto_RSA_Private_Key,
|
|
wrapped_rsa_key, wrapped_rsa_key_length);
|
|
if (sts == OEMCrypto_SUCCESS) {
|
|
size_t signatureSize = 0;
|
|
sts = OEMCrypto_GenerateRSASignature(session, message, message_length,
|
|
NULL, &signatureSize,
|
|
padding_scheme);
|
|
if (sts == OEMCrypto_SUCCESS) {
|
|
// Should be short buffer.
|
|
sts = OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
|
} else if (sts == OEMCrypto_ERROR_SHORT_BUFFER) {
|
|
signature.resize(signatureSize);
|
|
sts = OEMCrypto_GenerateRSASignature(session, message, message_length,
|
|
signature.data(), &signatureSize,
|
|
padding_scheme);
|
|
}
|
|
}
|
|
OEMCrypto_CloseSession(session);
|
|
return sts;
|
|
}
|
|
|
|
} // namespace wvdrm
|