Release 4.0.0-preview1-00051
[platform/core/csapi/tizenfx.git] / src / Tizen.Security.SecureRepository / Tizen.Security.SecureRepository / SafeRawBufferHandle.cs
1 /*
2  *  Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  *  Licensed under the Apache License, Version 2.0 (the "License");
5  *  you may not use this file except in compliance with the License.
6  *  You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  *  Unless required by applicable law or agreed to in writing, software
11  *  distributed under the License is distributed on an "AS IS" BASIS,
12  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *  See the License for the specific language governing permissions and
14  *  limitations under the License
15  */
16
17 using System;
18 using System.Runtime.InteropServices;
19 using static Interop;
20
21 namespace Tizen.Security.SecureRepository
22 {
23     internal class SafeRawBufferHandle
24     {
25         public SafeRawBufferHandle(IntPtr ptr)
26         {
27             if (ptr == IntPtr.Zero)
28                 throw new ArgumentNullException("Returned ptr from CAPI cannot be null");
29
30             var ckmcBuf = Marshal.PtrToStructure<CkmcRawBuffer>(ptr);
31             byte[] data = new byte[(int)ckmcBuf.size];
32             Marshal.Copy(ckmcBuf.data, data, 0, data.Length);
33             this.Data = data;
34         }
35
36         internal IntPtr GetHandle()
37         {
38             IntPtr ptr = IntPtr.Zero;
39             try
40             {
41                 CheckNThrowException(
42                     Interop.CkmcTypes.BufferNew(
43                         this.Data, (UIntPtr)this.Data.Length, out ptr),
44                     "Failed to create buf");
45
46                 return ptr;
47             }
48             catch
49             {
50                 if (ptr != IntPtr.Zero)
51                     Interop.CkmcTypes.BufferFree(ptr);
52
53                 throw;
54             }
55         }
56
57         public byte[] Data
58         {
59             get; set;
60         }
61     }
62 }