summaryrefslogtreecommitdiff
path: root/Tizen.Smartcard/Interop/Interop.Smartcard.cs
blob: 234de80a7fd763130f1fc9337d2937c3ffd813ef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/*
 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
 *
 * Licensed under the Apache License, Version 2.0 (the License);
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an AS IS BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

using System;
using System.Runtime.InteropServices;

internal static partial class Interop
{
    internal static partial class Smartcard
    {
        //capi-network-smartcard-0.0.6-2.1.armv7l.rpm
        //Smartcard Manager
        [DllImport(Libraries.Smartcard, EntryPoint = "smartcard_initialize")]
        internal static extern int Initialize();
        [DllImport(Libraries.Smartcard, EntryPoint = "smartcard_deinitialize")]
        internal static extern int Deinitialize();
        [DllImport(Libraries.Smartcard, EntryPoint = "smartcard_get_readers")]
        internal static extern int GetReaders(out IntPtr readers, out int len);

        internal static class Reader
        {
            [DllImport(Libraries.Smartcard, EntryPoint = "smartcard_reader_get_name")]
            internal static extern int ReaderGetName(int reader, out IntPtr readerName);
            [DllImport(Libraries.Smartcard, EntryPoint = "smartcard_reader_is_secure_element_present")]
            internal static extern int ReaderIsSecureElementPresent(int reader, out bool present);
            [DllImport(Libraries.Smartcard, EntryPoint = "smartcard_reader_open_session")]
            internal static extern int ReaderOpenSession(int reader, out int session);
            [DllImport(Libraries.Smartcard, EntryPoint = "smartcard_reader_close_sessions")]
            internal static extern int ReaderCloseSessions(int reader);
        }

        internal static class Session
        {
            [DllImport(Libraries.Smartcard, EntryPoint = "smartcard_session_get_reader")]
            internal static extern int SessionGetReader(int session, out int reader);
            [DllImport(Libraries.Smartcard, EntryPoint = "smartcard_session_get_atr")]
            internal static extern int SessionGetAtr(int session, out IntPtr atr, out int len);
            [DllImport(Libraries.Smartcard, EntryPoint = "smartcard_session_close")]
            internal static extern int SessionClose(int session);
            [DllImport(Libraries.Smartcard, EntryPoint = "smartcard_session_is_closed")]
            internal static extern int SessionIsClosed(int session, out bool closed);
            [DllImport(Libraries.Smartcard, EntryPoint = "smartcard_session_close_channels")]
            internal static extern int SessionCloseChannels(int session);
            [DllImport(Libraries.Smartcard, EntryPoint = "smartcard_session_open_basic_channel")]
            internal static extern int SessionOpenBasicChannel(int session, byte[] aid, int aidLen, byte p2, out int channel);
            [DllImport(Libraries.Smartcard, EntryPoint = "smartcard_session_open_logical_channel")]
            internal static extern int SessionOpenLogicalChannel(int session, byte[] aid, int aidLen, byte p2, out int channel);
        }

        internal static class Channel
        {
            [DllImport(Libraries.Smartcard, EntryPoint = "smartcard_channel_close")]
            internal static extern int ChannelClose(int channel);
            [DllImport(Libraries.Smartcard, EntryPoint = "smartcard_channel_is_basic_channel")]
            internal static extern int ChannelIsBasicChannel(int channel, out bool basicChannel);
            [DllImport(Libraries.Smartcard, EntryPoint = "smartcard_channel_is_closed")]
            internal static extern int ChannelIsClosed(int channel, out bool closed);
            [DllImport(Libraries.Smartcard, EntryPoint = "smartcard_channel_get_select_response")]
            internal static extern int ChannelGetSelectResponse(int channel, out IntPtr selectResp, out int len);
            [DllImport(Libraries.Smartcard, EntryPoint = "smartcard_channel_get_session")]
            internal static extern int ChannelGetSession(int channel, out int session);
            [DllImport(Libraries.Smartcard, EntryPoint = "smartcard_channel_transmit")]
            internal static extern int ChannelTransmit(int channel, byte[] cmd, int cmdLen, out IntPtr resp, out int len);
            [DllImport(Libraries.Smartcard, EntryPoint = "smartcard_channel_transmit_retrieve_response")]
            internal static extern int ChannelTransmitRetrieveResponse(int channel, out IntPtr name, out int len);
            [DllImport(Libraries.Smartcard, EntryPoint = "smartcard_channel_select_next")]
            internal static extern int ChannelSelectNext(int channel, out bool success);
        }
    }
}