101 lines
3.5 KiB
C
101 lines
3.5 KiB
C
/* Copyright 2020 Google LLC. All Rights Reserved. This file and proprietary
|
|
source code may only be used and distributed under the Widevine Master
|
|
License Agreement. */
|
|
|
|
#include "oemcrypto_serialized_usage_table.h"
|
|
|
|
#include "stddef.h"
|
|
#include "string.h"
|
|
|
|
#include "assert_interface.h"
|
|
#include "oemcrypto_usage_table.h"
|
|
|
|
/* Porting layer includes: */
|
|
#include "assert_interface.h"
|
|
|
|
/* The buffer size we need to reserve for a signed header with the given number
|
|
of entries.
|
|
TODO(b/158720996): use serialization and allow variable sized headers. This
|
|
code currently uses memcpy to serialize data. That works as long as we do not
|
|
try to change message format or want to change the header size.
|
|
*/
|
|
size_t SignedHeaderSize(int table_size) {
|
|
return sizeof(SignedSavedUsageHeader);
|
|
}
|
|
|
|
size_t SignedEntrySize() { return sizeof(SignedSavedUsageEntry); }
|
|
|
|
OEMCryptoResult PackSignedUsageHeader(uint8_t* buffer, size_t buffer_size,
|
|
const SignedSavedUsageHeader* header) {
|
|
if (buffer_size < sizeof(SignedSavedUsageHeader)) {
|
|
return OEMCrypto_ERROR_SHORT_BUFFER;
|
|
}
|
|
memcpy(buffer, header, sizeof(SignedSavedUsageHeader));
|
|
return OEMCrypto_SUCCESS;
|
|
}
|
|
|
|
OEMCryptoResult PackUsageHeader(uint8_t* buffer, size_t buffer_size,
|
|
const SavedUsageHeader* header) {
|
|
if (buffer_size < sizeof(SavedUsageHeader)) {
|
|
return OEMCrypto_ERROR_SHORT_BUFFER;
|
|
}
|
|
memcpy(buffer, header, sizeof(SavedUsageHeader));
|
|
return OEMCrypto_SUCCESS;
|
|
}
|
|
|
|
OEMCryptoResult PackSignedUsageEntry(uint8_t* buffer, size_t buffer_size,
|
|
const SignedSavedUsageEntry* entry) {
|
|
if (buffer_size < sizeof(SignedSavedUsageEntry)) {
|
|
return OEMCrypto_ERROR_SHORT_BUFFER;
|
|
}
|
|
memcpy(buffer, entry, sizeof(SignedSavedUsageEntry));
|
|
return OEMCrypto_SUCCESS;
|
|
}
|
|
|
|
OEMCryptoResult PackUsageEntry(uint8_t* buffer, size_t buffer_size,
|
|
const SavedUsageEntry* entry) {
|
|
if (buffer_size < sizeof(SavedUsageEntry)) {
|
|
return OEMCrypto_ERROR_SHORT_BUFFER;
|
|
}
|
|
memcpy(buffer, entry, sizeof(SavedUsageEntry));
|
|
return OEMCrypto_SUCCESS;
|
|
}
|
|
|
|
OEMCryptoResult UnpackSignedUsageHeader(const uint8_t* buffer,
|
|
size_t buffer_size,
|
|
SignedSavedUsageHeader* header) {
|
|
if (buffer_size < sizeof(SignedSavedUsageHeader)) {
|
|
return OEMCrypto_ERROR_SHORT_BUFFER;
|
|
}
|
|
memcpy(header, buffer, sizeof(SignedSavedUsageHeader));
|
|
return OEMCrypto_SUCCESS;
|
|
}
|
|
|
|
OEMCryptoResult UnpackUsageHeader(const uint8_t* buffer, size_t buffer_size,
|
|
SavedUsageHeader* header) {
|
|
if (buffer_size < sizeof(SavedUsageHeader)) {
|
|
return OEMCrypto_ERROR_SHORT_BUFFER;
|
|
}
|
|
memcpy(header, buffer, sizeof(SavedUsageHeader));
|
|
return OEMCrypto_SUCCESS;
|
|
}
|
|
|
|
OEMCryptoResult UnpackSignedUsageEntry(const uint8_t* buffer,
|
|
size_t buffer_size,
|
|
SignedSavedUsageEntry* entry) {
|
|
if (buffer_size < sizeof(SignedSavedUsageEntry)) {
|
|
return OEMCrypto_ERROR_SHORT_BUFFER;
|
|
}
|
|
memcpy(entry, buffer, sizeof(SignedSavedUsageEntry));
|
|
return OEMCrypto_SUCCESS;
|
|
}
|
|
|
|
OEMCryptoResult UnpackUsageEntry(const uint8_t* buffer, size_t buffer_size,
|
|
SavedUsageEntry* entry) {
|
|
if (buffer_size < sizeof(SavedUsageEntry)) {
|
|
return OEMCrypto_ERROR_SHORT_BUFFER;
|
|
}
|
|
memcpy(entry, buffer, sizeof(SavedUsageEntry));
|
|
return OEMCrypto_SUCCESS;
|
|
}
|