14811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim/*
24811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim * Copyright 2016, The Android Open Source Project
34811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim *
44811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim * Licensed under the Apache License, Version 2.0 (the "License");
54811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim * you may not use this file except in compliance with the License.
64811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim * You may obtain a copy of the License at
74811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim *
84811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim *      http://www.apache.org/licenses/LICENSE-2.0
94811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim *
104811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim * Unless required by applicable law or agreed to in writing, software
114811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim * distributed under the License is distributed on an "AS IS" BASIS,
124811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim * See the License for the specific language governing permissions and
144811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim * limitations under the License.
154811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim */
164811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim
174811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim#ifndef SECURE_BUFFER_H_
184811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim
194811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim#define SECURE_BUFFER_H_
204811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim
214811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim#include <media/ICrypto.h>
224811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim#include <media/MediaCodecBuffer.h>
234811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim
244811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kimnamespace android {
254811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim
264811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kimclass NativeHandle;
274811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim
284811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim/**
294811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim * Secure MediaCodecBuffer implementation.
304811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim *
314811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim * For classes outside of MediaCodec, this buffer is an opaque buffer only with
324811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim * the size information. For decryption, it exposes underlying handle/pointer
334811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim * and its type, which can be fed to ICrypto::decrypt().
344811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim */
354811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kimclass SecureBuffer : public MediaCodecBuffer {
364811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kimpublic:
37fd44d8e2f2d37184f7add67125657f3fbfb5a085Wonsik Kim    SecureBuffer(const sp<AMessage> &format, const void *ptr, size_t size);
384811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim    SecureBuffer(const sp<AMessage> &format, const sp<NativeHandle> &handle, size_t size);
394811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim
404811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim    virtual ~SecureBuffer() = default;
414811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim
424811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim    void *getDestinationPointer();
434811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim    ICrypto::DestinationType getDestinationType();
444811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim
454811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kimprivate:
464811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim    SecureBuffer() = delete;
474811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim
484811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim    const void *mPointer;
494811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim    const sp<NativeHandle> mHandle;
504811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim};
514811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim
524811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim}  // namespace android
534811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim
544811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim#endif  // SECURE_BUFFER_H_
55