aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/cryptography/build/temp.linux-x86_64-2.7/_padding.c
blob: 0c2c65a34e18e98ac060092b40ce17f509dffc79 (plain) (blame)
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
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
#define _CFFI_ 
 
/* We try to define Py_LIMITED_API before including Python.h. 
 
   Mess: we can only define it if Py_DEBUG, Py_TRACE_REFS and 
   Py_REF_DEBUG are not defined.  This is a best-effort approximation: 
   we can learn about Py_DEBUG from pyconfig.h, but it is unclear if 
   the same works for the other two macros.  Py_DEBUG implies them, 
   but not the other way around. 
*/ 
#ifndef _CFFI_USE_EMBEDDING 
#  include <pyconfig.h> 
#  if !defined(Py_DEBUG) && !defined(Py_TRACE_REFS) && !defined(Py_REF_DEBUG) 
#    define Py_LIMITED_API 
#  endif 
#endif 
 
#include <Python.h> 
#ifdef __cplusplus 
extern "C" { 
#endif 
#include <stddef.h> 
 
/* This part is from file 'cffi/parse_c_type.h'.  It is copied at the 
   beginning of C sources generated by CFFI's ffi.set_source(). */ 
 
typedef void *_cffi_opcode_t; 
 
#define _CFFI_OP(opcode, arg)   (_cffi_opcode_t)(opcode | (((uintptr_t)(arg)) << 8)) 
#define _CFFI_GETOP(cffi_opcode)    ((unsigned char)(uintptr_t)cffi_opcode) 
#define _CFFI_GETARG(cffi_opcode)   (((intptr_t)cffi_opcode) >> 8) 
 
#define _CFFI_OP_PRIMITIVE       1 
#define _CFFI_OP_POINTER         3 
#define _CFFI_OP_ARRAY           5 
#define _CFFI_OP_OPEN_ARRAY      7 
#define _CFFI_OP_STRUCT_UNION    9 
#define _CFFI_OP_ENUM           11 
#define _CFFI_OP_FUNCTION       13 
#define _CFFI_OP_FUNCTION_END   15 
#define _CFFI_OP_NOOP           17 
#define _CFFI_OP_BITFIELD       19 
#define _CFFI_OP_TYPENAME       21 
#define _CFFI_OP_CPYTHON_BLTN_V 23   // varargs 
#define _CFFI_OP_CPYTHON_BLTN_N 25   // noargs 
#define _CFFI_OP_CPYTHON_BLTN_O 27   // O  (i.e. a single arg) 
#define _CFFI_OP_CONSTANT       29 
#define _CFFI_OP_CONSTANT_INT   31 
#define _CFFI_OP_GLOBAL_VAR     33 
#define _CFFI_OP_DLOPEN_FUNC    35 
#define _CFFI_OP_DLOPEN_CONST   37 
#define _CFFI_OP_GLOBAL_VAR_F   39 
#define _CFFI_OP_EXTERN_PYTHON  41 
 
#define _CFFI_PRIM_VOID          0 
#define _CFFI_PRIM_BOOL          1 
#define _CFFI_PRIM_CHAR          2 
#define _CFFI_PRIM_SCHAR         3 
#define _CFFI_PRIM_UCHAR         4 
#define _CFFI_PRIM_SHORT         5 
#define _CFFI_PRIM_USHORT        6 
#define _CFFI_PRIM_INT           7 
#define _CFFI_PRIM_UINT          8 
#define _CFFI_PRIM_LONG          9 
#define _CFFI_PRIM_ULONG        10 
#define _CFFI_PRIM_LONGLONG     11 
#define _CFFI_PRIM_ULONGLONG    12 
#define _CFFI_PRIM_FLOAT        13 
#define _CFFI_PRIM_DOUBLE       14 
#define _CFFI_PRIM_LONGDOUBLE   15 
 
#define _CFFI_PRIM_WCHAR        16 
#define _CFFI_PRIM_INT8         17 
#define _CFFI_PRIM_UINT8        18 
#define _CFFI_PRIM_INT16        19 
#define _CFFI_PRIM_UINT16       20 
#define _CFFI_PRIM_INT32        21 
#define _CFFI_PRIM_UINT32       22 
#define _CFFI_PRIM_INT64        23 
#define _CFFI_PRIM_UINT64       24 
#define _CFFI_PRIM_INTPTR       25 
#define _CFFI_PRIM_UINTPTR      26 
#define _CFFI_PRIM_PTRDIFF      27 
#define _CFFI_PRIM_SIZE         28 
#define _CFFI_PRIM_SSIZE        29 
#define _CFFI_PRIM_INT_LEAST8   30 
#define _CFFI_PRIM_UINT_LEAST8  31 
#define _CFFI_PRIM_INT_LEAST16  32 
#define _CFFI_PRIM_UINT_LEAST16 33 
#define _CFFI_PRIM_INT_LEAST32  34 
#define _CFFI_PRIM_UINT_LEAST32 35 
#define _CFFI_PRIM_INT_LEAST64  36 
#define _CFFI_PRIM_UINT_LEAST64 37 
#define _CFFI_PRIM_INT_FAST8    38 
#define _CFFI_PRIM_UINT_FAST8   39 
#define _CFFI_PRIM_INT_FAST16   40 
#define _CFFI_PRIM_UINT_FAST16  41 
#define _CFFI_PRIM_INT_FAST32   42 
#define _CFFI_PRIM_UINT_FAST32  43 
#define _CFFI_PRIM_INT_FAST64   44 
#define _CFFI_PRIM_UINT_FAST64  45 
#define _CFFI_PRIM_INTMAX       46 
#define _CFFI_PRIM_UINTMAX      47 
 
#define _CFFI__NUM_PRIM         48 
#define _CFFI__UNKNOWN_PRIM           (-1) 
#define _CFFI__UNKNOWN_FLOAT_PRIM     (-2) 
#define _CFFI__UNKNOWN_LONG_DOUBLE    (-3) 
 
#define _CFFI__IO_FILE_STRUCT         (-1) 
 
 
struct _cffi_global_s { 
    const char *name; 
    void *address; 
    _cffi_opcode_t type_op; 
    void *size_or_direct_fn;  // OP_GLOBAL_VAR: size, or 0 if unknown 
                              // OP_CPYTHON_BLTN_*: addr of direct function 
}; 
 
struct _cffi_getconst_s { 
    unsigned long long value; 
    const struct _cffi_type_context_s *ctx; 
    int gindex; 
}; 
 
struct _cffi_struct_union_s { 
    const char *name; 
    int type_index;          // -> _cffi_types, on a OP_STRUCT_UNION 
    int flags;               // _CFFI_F_* flags below 
    size_t size; 
    int alignment; 
    int first_field_index;   // -> _cffi_fields array 
    int num_fields; 
}; 
#define _CFFI_F_UNION         0x01   // is a union, not a struct 
#define _CFFI_F_CHECK_FIELDS  0x02   // complain if fields are not in the 
                                     // "standard layout" or if some are missing 
#define _CFFI_F_PACKED        0x04   // for CHECK_FIELDS, assume a packed struct 
#define _CFFI_F_EXTERNAL      0x08   // in some other ffi.include() 
#define _CFFI_F_OPAQUE        0x10   // opaque 
 
struct _cffi_field_s { 
    const char *name; 
    size_t field_offset; 
    size_t field_size; 
    _cffi_opcode_t field_type_op; 
}; 
 
struct _cffi_enum_s { 
    const char *name; 
    int type_index;          // -> _cffi_types, on a OP_ENUM 
    int type_prim;           // _CFFI_PRIM_xxx 
    const char *enumerators; // comma-delimited string 
}; 
 
struct _cffi_typename_s { 
    const char *name; 
    int type_index;   /* if opaque, points to a possibly artificial 
                         OP_STRUCT which is itself opaque */ 
}; 
 
struct _cffi_type_context_s { 
    _cffi_opcode_t *types; 
    const struct _cffi_global_s *globals; 
    const struct _cffi_field_s *fields; 
    const struct _cffi_struct_union_s *struct_unions; 
    const struct _cffi_enum_s *enums; 
    const struct _cffi_typename_s *typenames; 
    int num_globals; 
    int num_struct_unions; 
    int num_enums; 
    int num_typenames; 
    const char *const *includes; 
    int num_types; 
    int flags;      /* future extension */ 
}; 
 
struct _cffi_parse_info_s { 
    const struct _cffi_type_context_s *ctx; 
    _cffi_opcode_t *output; 
    unsigned int output_size; 
    size_t error_location; 
    const char *error_message; 
}; 
 
struct _cffi_externpy_s { 
    const char *name; 
    size_t size_of_result; 
    void *reserved1, *reserved2; 
}; 
 
#ifdef _CFFI_INTERNAL 
static int parse_c_type(struct _cffi_parse_info_s *info, const char *input); 
static int search_in_globals(const struct _cffi_type_context_s *ctx, 
                             const char *search, size_t search_len); 
static int search_in_struct_unions(const struct _cffi_type_context_s *ctx, 
                                   const char *search, size_t search_len); 
#endif 
 
/* this block of #ifs should be kept exactly identical between 
   c/_cffi_backend.c, cffi/vengine_cpy.py, cffi/vengine_gen.py 
   and cffi/_cffi_include.h */ 
#if defined(_MSC_VER) 
# include <malloc.h>   /* for alloca() */ 
# if _MSC_VER < 1600   /* MSVC < 2010 */ 
   typedef __int8 int8_t; 
   typedef __int16 int16_t; 
   typedef __int32 int32_t; 
   typedef __int64 int64_t; 
   typedef unsigned __int8 uint8_t; 
   typedef unsigned __int16 uint16_t; 
   typedef unsigned __int32 uint32_t; 
   typedef unsigned __int64 uint64_t; 
   typedef __int8 int_least8_t; 
   typedef __int16 int_least16_t; 
   typedef __int32 int_least32_t; 
   typedef __int64 int_least64_t; 
   typedef unsigned __int8 uint_least8_t; 
   typedef unsigned __int16 uint_least16_t; 
   typedef unsigned __int32 uint_least32_t; 
   typedef unsigned __int64 uint_least64_t; 
   typedef __int8 int_fast8_t; 
   typedef __int16 int_fast16_t; 
   typedef __int32 int_fast32_t; 
   typedef __int64 int_fast64_t; 
   typedef unsigned __int8 uint_fast8_t; 
   typedef unsigned __int16 uint_fast16_t; 
   typedef unsigned __int32 uint_fast32_t; 
   typedef unsigned __int64 uint_fast64_t; 
   typedef __int64 intmax_t; 
   typedef unsigned __int64 uintmax_t; 
# else 
#  include <stdint.h> 
# endif 
# if _MSC_VER < 1800   /* MSVC < 2013 */ 
#  ifndef __cplusplus 
    typedef unsigned char _Bool; 
#  endif 
# endif 
#else 
# include <stdint.h> 
# if (defined (__SVR4) && defined (__sun)) || defined(_AIX) || defined(__hpux) 
#  include <alloca.h> 
# endif 
#endif 
 
#ifdef __GNUC__ 
# define _CFFI_UNUSED_FN  __attribute__((unused)) 
#else 
# define _CFFI_UNUSED_FN  /* nothing */ 
#endif 
 
#ifdef __cplusplus 
# ifndef _Bool 
   typedef bool _Bool;   /* semi-hackish: C++ has no _Bool; bool is builtin */ 
# endif 
#endif 
 
/**********  CPython-specific section  **********/ 
#ifndef PYPY_VERSION 
 
 
#if PY_MAJOR_VERSION >= 3 
# define PyInt_FromLong PyLong_FromLong 
#endif 
 
#define _cffi_from_c_double PyFloat_FromDouble 
#define _cffi_from_c_float PyFloat_FromDouble 
#define _cffi_from_c_long PyInt_FromLong 
#define _cffi_from_c_ulong PyLong_FromUnsignedLong 
#define _cffi_from_c_longlong PyLong_FromLongLong 
#define _cffi_from_c_ulonglong PyLong_FromUnsignedLongLong 
 
#define _cffi_to_c_double PyFloat_AsDouble 
#define _cffi_to_c_float PyFloat_AsDouble 
 
#define _cffi_from_c_int(x, type)                                        \ 
    (((type)-1) > 0 ? /* unsigned */                                     \ 
        (sizeof(type) < sizeof(long) ?                                   \ 
            PyInt_FromLong((long)x) :                                    \ 
         sizeof(type) == sizeof(long) ?                                  \ 
            PyLong_FromUnsignedLong((unsigned long)x) :                  \ 
            PyLong_FromUnsignedLongLong((unsigned long long)x)) :        \ 
        (sizeof(type) <= sizeof(long) ?                                  \ 
            PyInt_FromLong((long)x) :                                    \ 
            PyLong_FromLongLong((long long)x))) 
 
#define _cffi_to_c_int(o, type)                                          \ 
    ((type)(                                                             \ 
     sizeof(type) == 1 ? (((type)-1) > 0 ? (type)_cffi_to_c_u8(o)        \ 
                                         : (type)_cffi_to_c_i8(o)) :     \ 
     sizeof(type) == 2 ? (((type)-1) > 0 ? (type)_cffi_to_c_u16(o)       \ 
                                         : (type)_cffi_to_c_i16(o)) :    \ 
     sizeof(type) == 4 ? (((type)-1) > 0 ? (type)_cffi_to_c_u32(o)       \ 
                                         : (type)_cffi_to_c_i32(o)) :    \ 
     sizeof(type) == 8 ? (((type)-1) > 0 ? (type)_cffi_to_c_u64(o)       \ 
                                         : (type)_cffi_to_c_i64(o)) :    \ 
     (Py_FatalError("unsupported size for type " #type), (type)0))) 
 
#define _cffi_to_c_i8                                                    \ 
                 ((int(*)(PyObject *))_cffi_exports[1]) 
#define _cffi_to_c_u8                                                    \ 
                 ((int(*)(PyObject *))_cffi_exports[2]) 
#define _cffi_to_c_i16                                                   \ 
                 ((int(*)(PyObject *))_cffi_exports[3]) 
#define _cffi_to_c_u16                                                   \ 
                 ((int(*)(PyObject *))_cffi_exports[4]) 
#define _cffi_to_c_i32                                                   \ 
                 ((int(*)(PyObject *))_cffi_exports[5]) 
#define _cffi_to_c_u32                                                   \ 
                 ((unsigned int(*)(PyObject *))_cffi_exports[6]) 
#define _cffi_to_c_i64                                                   \ 
                 ((long long(*)(PyObject *))_cffi_exports[7]) 
#define _cffi_to_c_u64                                                   \ 
                 ((unsigned long long(*)(PyObject *))_cffi_exports[8]) 
#define _cffi_to_c_char                                                  \ 
                 ((int(*)(PyObject *))_cffi_exports[9]) 
#define _cffi_from_c_pointer                                             \ 
    ((PyObject *(*)(char *, struct _cffi_ctypedescr *))_cffi_exports[10]) 
#define _cffi_to_c_pointer                                               \ 
    ((char *(*)(PyObject *, struct _cffi_ctypedescr *))_cffi_exports[11]) 
#define _cffi_get_struct_layout                                          \ 
    not used any more 
#define _cffi_restore_errno                                              \ 
    ((void(*)(void))_cffi_exports[13]) 
#define _cffi_save_errno                                                 \ 
    ((void(*)(void))_cffi_exports[14]) 
#define _cffi_from_c_char                                                \ 
    ((PyObject *(*)(char))_cffi_exports[15]) 
#define _cffi_from_c_deref                                               \ 
    ((PyObject *(*)(char *, struct _cffi_ctypedescr *))_cffi_exports[16]) 
#define _cffi_to_c                                                       \ 
    ((int(*)(char *, struct _cffi_ctypedescr *, PyObject *))_cffi_exports[17]) 
#define _cffi_from_c_struct                                              \ 
    ((PyObject *(*)(char *, struct _cffi_ctypedescr *))_cffi_exports[18]) 
#define _cffi_to_c_wchar_t                                               \ 
    ((wchar_t(*)(PyObject *))_cffi_exports[19]) 
#define _cffi_from_c_wchar_t                                             \ 
    ((PyObject *(*)(wchar_t))_cffi_exports[20]) 
#define _cffi_to_c_long_double                                           \ 
    ((long double(*)(PyObject *))_cffi_exports[21]) 
#define _cffi_to_c__Bool                                                 \ 
    ((_Bool(*)(PyObject *))_cffi_exports[22]) 
#define _cffi_prepare_pointer_call_argument                              \ 
    ((Py_ssize_t(*)(struct _cffi_ctypedescr *,                           \ 
                    PyObject *, char **))_cffi_exports[23]) 
#define _cffi_convert_array_from_object                                  \ 
    ((int(*)(char *, struct _cffi_ctypedescr *, PyObject *))_cffi_exports[24]) 
#define _CFFI_CPIDX  25 
#define _cffi_call_python                                                \ 
    ((void(*)(struct _cffi_externpy_s *, char *))_cffi_exports[_CFFI_CPIDX]) 
#define _CFFI_NUM_EXPORTS 26 
 
struct _cffi_ctypedescr; 
 
static void *_cffi_exports[_CFFI_NUM_EXPORTS]; 
 
#define _cffi_type(index)   (                           \ 
    assert((((uintptr_t)_cffi_types[index]) & 1) == 0), \ 
    (struct _cffi_ctypedescr *)_cffi_types[index]) 
 
static PyObject *_cffi_init(const char *module_name, Py_ssize_t version, 
                            const struct _cffi_type_context_s *ctx) 
{ 
    PyObject *module, *o_arg, *new_module; 
    void *raw[] = { 
        (void *)module_name, 
        (void *)version, 
        (void *)_cffi_exports, 
        (void *)ctx, 
    }; 
 
    module = PyImport_ImportModule("_cffi_backend"); 
    if (module == NULL) 
        goto failure; 
 
    o_arg = PyLong_FromVoidPtr((void *)raw); 
    if (o_arg == NULL) 
        goto failure; 
 
    new_module = PyObject_CallMethod( 
        module, (char *)"_init_cffi_1_0_external_module", (char *)"O", o_arg); 
 
    Py_DECREF(o_arg); 
    Py_DECREF(module); 
    return new_module; 
 
  failure: 
    Py_XDECREF(module); 
    return NULL; 
} 
 
/**********  end CPython-specific section  **********/ 
#else 
_CFFI_UNUSED_FN 
static void (*_cffi_call_python_org)(struct _cffi_externpy_s *, char *); 
# define _cffi_call_python  _cffi_call_python_org 
#endif 
 
 
#define _cffi_array_len(array)   (sizeof(array) / sizeof((array)[0])) 
 
#define _cffi_prim_int(size, sign)                                      \ 
    ((size) == 1 ? ((sign) ? _CFFI_PRIM_INT8  : _CFFI_PRIM_UINT8)  :    \ 
     (size) == 2 ? ((sign) ? _CFFI_PRIM_INT16 : _CFFI_PRIM_UINT16) :    \ 
     (size) == 4 ? ((sign) ? _CFFI_PRIM_INT32 : _CFFI_PRIM_UINT32) :    \ 
     (size) == 8 ? ((sign) ? _CFFI_PRIM_INT64 : _CFFI_PRIM_UINT64) :    \ 
     _CFFI__UNKNOWN_PRIM) 
 
#define _cffi_prim_float(size)                                          \ 
    ((size) == sizeof(float) ? _CFFI_PRIM_FLOAT :                       \ 
     (size) == sizeof(double) ? _CFFI_PRIM_DOUBLE :                     \ 
     (size) == sizeof(long double) ? _CFFI__UNKNOWN_LONG_DOUBLE :       \ 
     _CFFI__UNKNOWN_FLOAT_PRIM) 
 
#define _cffi_check_int(got, got_nonpos, expected)      \ 
    ((got_nonpos) == (expected <= 0) &&                 \ 
     (got) == (unsigned long long)expected) 
 
#ifdef MS_WIN32 
# define _cffi_stdcall  __stdcall 
#else 
# define _cffi_stdcall  /* nothing */ 
#endif 
 
#ifdef __cplusplus 
} 
#endif 
 
/************************************************************/ 
 
// This file is dual licensed under the terms of the Apache License, Version 
// 2.0, and the BSD License. See the LICENSE file in the root of this 
// repository for complete details. 
 
/* Returns the value of the input with the most-significant-bit copied to all 
   of the bits. */ 
static uint16_t Cryptography_DUPLICATE_MSB_TO_ALL(uint16_t a) { 
    return (1 - (a >> (sizeof(uint16_t) * 8 - 1))) - 1; 
} 
 
/* This returns 0xFFFF if a < b else 0x0000, but does so in a constant time 
   fashion */ 
static uint16_t Cryptography_constant_time_lt(uint16_t a, uint16_t b) { 
    a -= b; 
    return Cryptography_DUPLICATE_MSB_TO_ALL(a); 
} 
 
uint8_t Cryptography_check_pkcs7_padding(const uint8_t *data, 
                                         uint16_t block_len) { 
    uint16_t i; 
    uint16_t pad_size = data[block_len - 1]; 
    uint16_t mismatch = 0; 
    for (i = 0; i < block_len; i++) { 
        unsigned int mask = Cryptography_constant_time_lt(i, pad_size); 
        uint16_t b = data[block_len - 1 - i]; 
        mismatch |= (mask & (pad_size ^ b)); 
    } 
 
    /* Check to make sure the pad_size was within the valid range. */ 
    mismatch |= ~Cryptography_constant_time_lt(0, pad_size); 
    mismatch |= Cryptography_constant_time_lt(block_len, pad_size); 
 
    /* Make sure any bits set are copied to the lowest bit */ 
    mismatch |= mismatch >> 8; 
    mismatch |= mismatch >> 4; 
    mismatch |= mismatch >> 2; 
    mismatch |= mismatch >> 1; 
    /* Now check the low bit to see if it's set */ 
    return (mismatch & 1) == 0; 
} 
 
uint8_t Cryptography_check_ansix923_padding(const uint8_t *data, 
                                            uint16_t block_len) { 
    uint16_t i; 
    uint16_t pad_size = data[block_len - 1]; 
    uint16_t mismatch = 0; 
    /* Skip the first one with the pad size */ 
    for (i = 1; i < block_len; i++) { 
        unsigned int mask = Cryptography_constant_time_lt(i, pad_size); 
        uint16_t b = data[block_len - 1 - i]; 
        mismatch |= (mask & b); 
    } 
 
    /* Check to make sure the pad_size was within the valid range. */ 
    mismatch |= ~Cryptography_constant_time_lt(0, pad_size); 
    mismatch |= Cryptography_constant_time_lt(block_len, pad_size); 
 
    /* Make sure any bits set are copied to the lowest bit */ 
    mismatch |= mismatch >> 8; 
    mismatch |= mismatch >> 4; 
    mismatch |= mismatch >> 2; 
    mismatch |= mismatch >> 1; 
    /* Now check the low bit to see if it's set */ 
    return (mismatch & 1) == 0; 
} 
 
#define CRYPTOGRAPHY_PACKAGE_VERSION "3.3.2"
 
/************************************************************/ 
 
static void *_cffi_types[] = { 
/*  0 */ _CFFI_OP(_CFFI_OP_FUNCTION, 2), // uint8_t()(uint8_t const *, uint8_t) 
/*  1 */ _CFFI_OP(_CFFI_OP_POINTER, 2), // uint8_t const * 
/*  2 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 18), // uint8_t 
/*  3 */ _CFFI_OP(_CFFI_OP_FUNCTION_END, 0), 
/*  4 */ _CFFI_OP(_CFFI_OP_POINTER, 5), // char const *
/*  5 */ _CFFI_OP(_CFFI_OP_PRIMITIVE, 2), // char
}; 
 
static void _cffi_const_CRYPTOGRAPHY_PACKAGE_VERSION(char *o)
{
  *(char const * *)o = CRYPTOGRAPHY_PACKAGE_VERSION;
}

static uint8_t _cffi_d_Cryptography_check_ansix923_padding(uint8_t const * x0, uint8_t x1) 
{ 
  return Cryptography_check_ansix923_padding(x0, x1); 
} 
#ifndef PYPY_VERSION 
static PyObject * 
_cffi_f_Cryptography_check_ansix923_padding(PyObject *self, PyObject *args) 
{ 
  uint8_t const * x0; 
  uint8_t x1; 
  Py_ssize_t datasize; 
  uint8_t result; 
  PyObject *arg0; 
  PyObject *arg1; 
 
  if (!PyArg_UnpackTuple(args, "Cryptography_check_ansix923_padding", 2, 2, &arg0, &arg1)) 
    return NULL; 
 
  datasize = _cffi_prepare_pointer_call_argument( 
      _cffi_type(1), arg0, (char **)&x0); 
  if (datasize != 0) { 
    if (datasize < 0) 
      return NULL; 
    x0 = (uint8_t const *)alloca((size_t)datasize); 
    memset((void *)x0, 0, (size_t)datasize); 
    if (_cffi_convert_array_from_object((char *)x0, _cffi_type(1), arg0) < 0) 
      return NULL; 
  } 
 
  x1 = _cffi_to_c_int(arg1, uint8_t); 
  if (x1 == (uint8_t)-1 && PyErr_Occurred()) 
    return NULL; 
 
  Py_BEGIN_ALLOW_THREADS 
  _cffi_restore_errno(); 
  { result = Cryptography_check_ansix923_padding(x0, x1); } 
  _cffi_save_errno(); 
  Py_END_ALLOW_THREADS 
 
  (void)self; /* unused */ 
  return _cffi_from_c_int(result, uint8_t); 
} 
#else 
#  define _cffi_f_Cryptography_check_ansix923_padding _cffi_d_Cryptography_check_ansix923_padding 
#endif 
 
static uint8_t _cffi_d_Cryptography_check_pkcs7_padding(uint8_t const * x0, uint8_t x1) 
{ 
  return Cryptography_check_pkcs7_padding(x0, x1); 
} 
#ifndef PYPY_VERSION 
static PyObject * 
_cffi_f_Cryptography_check_pkcs7_padding(PyObject *self, PyObject *args) 
{ 
  uint8_t const * x0; 
  uint8_t x1; 
  Py_ssize_t datasize; 
  uint8_t result; 
  PyObject *arg0; 
  PyObject *arg1; 
 
  if (!PyArg_UnpackTuple(args, "Cryptography_check_pkcs7_padding", 2, 2, &arg0, &arg1)) 
    return NULL; 
 
  datasize = _cffi_prepare_pointer_call_argument( 
      _cffi_type(1), arg0, (char **)&x0); 
  if (datasize != 0) { 
    if (datasize < 0) 
      return NULL; 
    x0 = (uint8_t const *)alloca((size_t)datasize); 
    memset((void *)x0, 0, (size_t)datasize); 
    if (_cffi_convert_array_from_object((char *)x0, _cffi_type(1), arg0) < 0) 
      return NULL; 
  } 
 
  x1 = _cffi_to_c_int(arg1, uint8_t); 
  if (x1 == (uint8_t)-1 && PyErr_Occurred()) 
    return NULL; 
 
  Py_BEGIN_ALLOW_THREADS 
  _cffi_restore_errno(); 
  { result = Cryptography_check_pkcs7_padding(x0, x1); } 
  _cffi_save_errno(); 
  Py_END_ALLOW_THREADS 
 
  (void)self; /* unused */ 
  return _cffi_from_c_int(result, uint8_t); 
} 
#else 
#  define _cffi_f_Cryptography_check_pkcs7_padding _cffi_d_Cryptography_check_pkcs7_padding 
#endif 
 
static const struct _cffi_global_s _cffi_globals[] = { 
  { "CRYPTOGRAPHY_PACKAGE_VERSION", (void *)_cffi_const_CRYPTOGRAPHY_PACKAGE_VERSION, _CFFI_OP(_CFFI_OP_CONSTANT, 4), (void *)0 },
  { "Cryptography_check_ansix923_padding", (void *)_cffi_f_Cryptography_check_ansix923_padding, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 0), (void *)_cffi_d_Cryptography_check_ansix923_padding }, 
  { "Cryptography_check_pkcs7_padding", (void *)_cffi_f_Cryptography_check_pkcs7_padding, _CFFI_OP(_CFFI_OP_CPYTHON_BLTN_V, 0), (void *)_cffi_d_Cryptography_check_pkcs7_padding }, 
}; 
 
static const struct _cffi_type_context_s _cffi_type_context = { 
  _cffi_types, 
  _cffi_globals, 
  NULL,  /* no fields */ 
  NULL,  /* no struct_unions */ 
  NULL,  /* no enums */ 
  NULL,  /* no typenames */ 
  3,  /* num_globals */
  0,  /* num_struct_unions */ 
  0,  /* num_enums */ 
  0,  /* num_typenames */ 
  NULL,  /* no includes */ 
  6,  /* num_types */
  0,  /* flags */ 
}; 
 
#ifdef PYPY_VERSION 
PyMODINIT_FUNC 
_cffi_pypyinit__padding(const void *p[]) 
{ 
    p[0] = (const void *)0x2601; 
    p[1] = &_cffi_type_context; 
} 
#  ifdef _MSC_VER 
     PyMODINIT_FUNC 
#  if PY_MAJOR_VERSION >= 3 
     PyInit__padding(void) { return NULL; } 
#  else 
     init_padding(void) { } 
#  endif 
#  endif 
#elif PY_MAJOR_VERSION >= 3 
PyMODINIT_FUNC 
PyInit__padding(void) 
{ 
  return _cffi_init("_padding", 0x2601, &_cffi_type_context); 
} 
#else 
PyMODINIT_FUNC 
init_padding(void) 
{ 
  _cffi_init("_padding", 0x2601, &_cffi_type_context);
} 
#endif