This file is indexed.

/usr/share/ada/adainclude/pcscada/pcsc-thin-reader.ads is in libpcscada3-dev 0.7.2-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
--
--  Copyright (c) 2008-2010,
--  Reto Buerki <reet@codelabs.ch>
--
--  This file is part of PCSC/Ada.
--
--  PCSC/Ada is free software; you can redistribute it and/or modify
--  it under the terms of the GNU Lesser General Public License as published
--  by the Free Software Foundation; either version 2.1 of the License, or
--  (at your option) any later version.
--
--  PCSC/Ada is distributed in the hope that it will be useful,
--  but WITHOUT ANY WARRANTY; without even the implied warranty of
--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--  GNU Lesser General Public License for more details.
--
--  You should have received a copy of the GNU Lesser General Public License
--  along with PCSC/Ada; if not, write to the Free Software
--  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
--  MA  02110-1301  USA
--
--  <PURPOSE>
--    This package keeps a list of attributes which can be requested directly
--    from the IFD handler. Use the @Init_Attribute_Set@ and @Get_Attribute@
--    functions to do so. It also provides the constants and types needed for
--    feature handling and PIN verification operations.
--  </PURPOSE>
--

with PCSC.Thin;
pragma Elaborate_All (PCSC.Thin);

package PCSC.Thin.Reader is

   SCARD_ATTR_VENDOR_NAME            : constant := 16#0001_0100#;
   --  Vendor name

   SCARD_ATTR_VENDOR_IFD_TYPE        : constant := 16#0001_0101#;
   --  Vendor-supplied interface device type (model designation of reader)

   SCARD_ATTR_VENDOR_IFD_VERSION     : constant := 16#0001_0102#;
   --  Vendor-supplied interface device version (DWORD in the form 0xMMmmbbbb
   --  where MM = major version, mm = minor version, and bbbb = build number).

   SCARD_ATTR_VENDOR_IFD_SERIAL_NO   : constant := 16#0001_0103#;
   --  Vendor-supplied interface device serial number

   SCARD_ATTR_CHANNEL_ID             : constant := 16#0002_0110#;
   --  DWORD encoded as 0xDDDDCCCC, where DDDD = data channel type and CCCC =
   --  channel number.

   SCARD_ATTR_DEFAULT_CLK            : constant := 16#0003_0121#;
   --  Default clock rate, in kHz

   SCARD_ATTR_MAX_CLK                : constant := 16#0003_0122#;
   --  Maximum clock rate, in kHz

   SCARD_ATTR_DEFAULT_DATA_RATE      : constant := 16#0003_0123#;
   --  Default data rate, in bps

   SCARD_ATTR_MAX_DATA_RATE          : constant := 16#0003_0124#;
   --  Maximum data rate, in bps

   SCARD_ATTR_MAX_IFSD               : constant := 16#0003_0125#;
   --  Maximum bytes for information file size device

   SCARD_ATTR_POWER_MGMT_SUPPORT     : constant := 16#0004_0131#;
   --  Zero if device does not support power down while smart card is inserted.
   --  Nonzero otherwise.

   SCARD_ATTR_CHARACTERISTICS        : constant := 16#0006_0150#;
   --  DWORD indicating which mechanical characteristics are supported. If
   --  zero, no special characteristics are supported. Note that multiple bits
   --  can be set.

   SCARD_ATTR_CURRENT_PROTOCOL_TYPE  : constant := 16#0008_0201#;
   --  Current protocol type in use

   SCARD_ATTR_CURRENT_CLK            : constant := 16#0008_0202#;
   --  Current clock rate, in kHz

   SCARD_ATTR_CURRENT_F              : constant := 16#0008_0203#;
   --  Clock conversion factor

   SCARD_ATTR_CURRENT_D              : constant := 16#0008_0204#;
   --  Bit rate conversion factor

   SCARD_ATTR_CURRENT_N              : constant := 16#0008_0205#;
   --  Current guard time

   SCARD_ATTR_CURRENT_W              : constant := 16#0008_0206#;
   --  Current work waiting time

   SCARD_ATTR_CURRENT_IFSC           : constant := 16#0008_0207#;
   --  Current byte size for information field size card

   SCARD_ATTR_CURRENT_IFSD           : constant := 16#0008_0208#;
   --  Current byte size for information field size device

   SCARD_ATTR_CURRENT_BWT            : constant := 16#0008_0209#;
   --  Current block waiting time

   SCARD_ATTR_CURRENT_CWT            : constant := 16#0008_020A#;
   --  Current character waiting time

   SCARD_ATTR_CURRENT_EBC_ENCODING   : constant := 16#0008_020B#;
   --  Current error block control encoding

   SCARD_ATTR_EXTENDED_BWT           : constant := 16#0008_020C#;
   --  Extended block waiting time

   SCARD_ATTR_ICC_PRESENCE           : constant := 16#0009_0300#;
   --  Single byte indicating smart card presence

   SCARD_ATTR_ICC_INTERFACE_STATUS   : constant := 16#0009_0301#;
   --  Single byte. Zero if smart card electrical contact is not active;
   --  nonzero if contact is active.

   SCARD_ATTR_CURRENT_IO_STATE       : constant := 16#0009_0302#;

   SCARD_ATTR_ATR_STRING             : constant := 16#0009_0303#;
   --  Answer to reset (ATR) string

   SCARD_ATTR_ICC_TYPE_PER_ATR       : constant := 16#0009_0304#;
   --  Single byte indicating smart card type

   SCARD_ATTR_ESC_RESET              : constant := 16#0007_A000#;

   SCARD_ATTR_ESC_CANCEL             : constant := 16#0007_A003#;

   SCARD_ATTR_ESC_AUTHREQUEST        : constant := 16#0007_A005#;

   SCARD_ATTR_MAXINPUT               : constant := 16#0007_A007#;

   SCARD_ATTR_DEVICE_UNIT            : constant := 16#7FFF_0001#;
   --  Instance of this vendor's reader attached to the computer. The first
   --  instance will be device unit 0, the next will be unit 1 (if it is the
   --  same brand of reader) and so on. Two different brands of readers will
   --  both have zero for this value.

   SCARD_ATTR_DEVICE_IN_USE          : constant := 16#7FFF_0002#;
   --  Reserved for future use

   SCARD_ATTR_DEVICE_FRIENDLY_NAME_A : constant := 16#7FFF_0003#;

   SCARD_ATTR_DEVICE_SYSTEM_NAME_A   : constant := 16#7FFF_0004#;

   SCARD_ATTR_DEVICE_FRIENDLY_NAME_W : constant := 16#7FFF_0005#;

   SCARD_ATTR_DEVICE_SYSTEM_NAME_W   : constant := 16#7FFF_0006#;

   SCARD_ATTR_SUPRESS_T1_IFS_REQUEST : constant := 16#7FFF_0007#;

   CM_IOCTL_GET_FEATURE_REQUEST      : constant DWORD := SCARD_CTL_CODE (3400);
   --  Control code used to get features from card / reader.

   FEATURE_VERIFY_PIN_START          : constant := 16#01#;
   --  OMNIKEY Proposal
   FEATURE_VERIFY_PIN_FINISH         : constant := 16#02#;
   --  OMNIKEY Proposal
   FEATURE_MODIFY_PIN_START          : constant := 16#03#;
   --  OMNIKEY Proposal
   FEATURE_MODIFY_PIN_FINISH         : constant := 16#04#;
   --  OMNIKEY Proposal
   FEATURE_GET_KEY_PRESSED           : constant := 16#05#;
   --  OMNIKEY Proposal
   FEATURE_VERIFY_PIN_DIRECT         : constant := 16#06#;
   --  USB CCID PIN Verify
   FEATURE_MODIFY_PIN_DIRECT         : constant := 16#07#;
   --  USB CCID PIN Modify
   FEATURE_MCT_READERDIRECT          : constant := 16#08#;
   --  KOBIL Proposal
   FEATURE_MCT_UNIVERSAL             : constant := 16#09#;
   --  KOBIL Proposal
   FEATURE_IFD_PIN_PROP              : constant := 16#0A#;
   --  Gemplus Proposal
   FEATURE_ABORT                     : constant := 16#0B#;
   --  SCM Proposal

   type PCSC_TLV_STRUCTURE is record
      tag    : Interfaces.Unsigned_8;
      length : Interfaces.Unsigned_8;
      value  : Interfaces.Unsigned_32;
      --  This value is always in BIG ENDIAN format as documented in PCSC v2
      --  part 10 ch 2.2 page 2.
   end record;
   --  PCSC Type-length-value data structure

   for PCSC_TLV_STRUCTURE use record
      tag    at 0 range 0  .. 7;
      length at 0 range 8  .. 15;
      value  at 0 range 16 .. 47;
   end record;
   --  Representation clause for PCSC_TLV_STRUCTURE type

   for PCSC_TLV_STRUCTURE'Size use 48;
   --  The PCSC_TLV_STRUCTURE must be exactly 6 bytes long

   type PIN_VERIFY_STRUCTURE is record
      bTimerOut                 : aliased Byte;
      --  Timeout is seconds (00 means use default timeout)
      bTimerOut2                : Byte;
      --  Timeout in seconds after first key stroke
      bmFormatString            : Byte;
      --  Formatting options
      bmPINBlockString          : Byte;
      --  Bits 7-4 bit size of PIN length in APDU, bits 3-0 PIN block size in
      --  bytes after justification and formatting
      bmPINLengthFormat         : Byte;
      --  Bits 7-5 RFU, bit 4 set if system units are bytes, clear if system
      --  units are bits, bits 3-0 PIN length position in system units
      wPINMaxExtraDigit         : Interfaces.Unsigned_16;
      --  0xXXYY where XX is minimum PIN size in digits, and YY is maximum PIN
      --  size in digits
      bEntryValidationCondition : Byte;
      --  Conditions under which PIN entry should be considered complete
      bNumberMessage            : Byte;
      --  Number of messages to display for PIN verification
      wLangId                   : Interfaces.Unsigned_16;
      --  Language for messages
      bMsgIndex                 : Byte := 0;
      --  Message index (should be 00)
      bTeoPrologue              : Byte_Array (1 .. 3)
        := (others => 0);
      --  T=1 block prologue field to use (filled with 00)
      ulDataLength              : Interfaces.Unsigned_32;
      --  Length of Data to be sent to the ICC
      abData                    : Byte_Array (1 .. MAX_BUFFER_SIZE)
        := (others => 0);
      --  Data to send to the ICC
   end record;

   for PIN_VERIFY_STRUCTURE use record
      bTimerOut                 at 0  range 0 .. 7;
      bTimerOut2                at 1  range 0 .. 7;
      bmFormatString            at 2  range 0 .. 7;
      bmPINBlockString          at 3  range 0 .. 7;
      bmPINLengthFormat         at 4  range 0 .. 7;
      wPINMaxExtraDigit         at 5  range 0 .. 15;
      bEntryValidationCondition at 7  range 0 .. 7;
      bNumberMessage            at 8  range 0 .. 7;
      wLangId                   at 9  range 0 .. 15;
      bMsgIndex                 at 11 range 0 .. 7;
      bTeoPrologue              at 12 range 0 .. 23;
      ulDataLength              at 15 range 0 .. 31;
      abData                    at 19 range 0 .. (MAX_BUFFER_SIZE * 8) - 1;
   end record;
   --  Representation clause for PIN_VERIFY_STRUCTURE type

end PCSC.Thin.Reader;