aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/cryptography/_cffi_src/openssl/src/osrandom_engine.h
blob: 29fb9f6f9fba17f9d8d8bff2563216ab7d9fcc10 (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
#ifndef OPENSSL_NO_ENGINE 
/* OpenSSL has ENGINE support so include all of this. */ 
#ifdef _WIN32 
  #include <Wincrypt.h> 
#else 
  #include <fcntl.h> 
  #include <unistd.h> 
   /* for defined(BSD) */ 
  #ifndef __MVS__ 
    #include <sys/param.h> 
  #endif 
 
  #ifdef BSD 
    /* for SYS_getentropy */ 
    #include <sys/syscall.h> 
  #endif 
 
  #ifdef __APPLE__ 
    #include <sys/random.h> 
    /* To support weak linking we need to declare this as a weak import even if 
     * it's not present in sys/random (e.g. macOS < 10.12). */ 
    extern int getentropy(void *buffer, size_t size) __attribute((weak_import)); 
  #endif 
 
  #ifdef __linux__ 
    /* for SYS_getrandom */ 
    #include <sys/syscall.h> 
    #ifndef GRND_NONBLOCK 
      #define GRND_NONBLOCK 0x0001 
    #endif /* GRND_NONBLOCK */ 
 
    #ifndef SYS_getrandom 
      /* We only bother to define the constants for platforms where we ship 
       * wheels, since that's the predominant way you get a situation where 
       * you don't have SYS_getrandom at compile time but do have the syscall 
       * at runtime */ 
      #if defined(__x86_64__) 
        #define SYS_getrandom 318 
      #elif defined(__i386__) 
        #define SYS_getrandom 355 
      #elif defined(__aarch64__) 
        #define SYS_getrandom 278 
      #endif 
    #endif 
  #endif /* __linux__ */ 
#endif /* _WIN32 */ 
 
#define CRYPTOGRAPHY_OSRANDOM_ENGINE_CRYPTGENRANDOM 1 
#define CRYPTOGRAPHY_OSRANDOM_ENGINE_GETENTROPY 2 
#define CRYPTOGRAPHY_OSRANDOM_ENGINE_GETRANDOM 3 
#define CRYPTOGRAPHY_OSRANDOM_ENGINE_DEV_URANDOM 4 
 
#ifndef CRYPTOGRAPHY_OSRANDOM_ENGINE 
  #if defined(_WIN32) 
    /* Windows */ 
    #define CRYPTOGRAPHY_OSRANDOM_ENGINE CRYPTOGRAPHY_OSRANDOM_ENGINE_CRYPTGENRANDOM 
  #elif defined(BSD) && defined(SYS_getentropy) 
    /* OpenBSD 5.6+ & macOS with SYS_getentropy defined, although < 10.12 will fallback 
     * to urandom */ 
    #define CRYPTOGRAPHY_OSRANDOM_ENGINE CRYPTOGRAPHY_OSRANDOM_ENGINE_GETENTROPY 
  #elif defined(__linux__) && defined(SYS_getrandom) 
    /* Linux 3.17+ */ 
    #define CRYPTOGRAPHY_OSRANDOM_ENGINE CRYPTOGRAPHY_OSRANDOM_ENGINE_GETRANDOM 
  #else 
    /* Keep this as last entry, fall back to /dev/urandom */ 
    #define CRYPTOGRAPHY_OSRANDOM_ENGINE CRYPTOGRAPHY_OSRANDOM_ENGINE_DEV_URANDOM 
  #endif 
#endif /* CRYPTOGRAPHY_OSRANDOM_ENGINE */ 
 
/* Fallbacks need /dev/urandom helper functions. */ 
#if CRYPTOGRAPHY_OSRANDOM_ENGINE == CRYPTOGRAPHY_OSRANDOM_ENGINE_GETRANDOM || \ 
     CRYPTOGRAPHY_OSRANDOM_ENGINE == CRYPTOGRAPHY_OSRANDOM_ENGINE_DEV_URANDOM || \ 
     (CRYPTOGRAPHY_OSRANDOM_ENGINE == CRYPTOGRAPHY_OSRANDOM_ENGINE_GETENTROPY && \ 
     defined(__APPLE__)) 
  #define CRYPTOGRAPHY_OSRANDOM_NEEDS_DEV_URANDOM 1 
#endif 
 
enum { 
    CRYPTOGRAPHY_OSRANDOM_GETRANDOM_INIT_FAILED = -2, 
    CRYPTOGRAPHY_OSRANDOM_GETRANDOM_NOT_INIT, 
    CRYPTOGRAPHY_OSRANDOM_GETRANDOM_FALLBACK, 
    CRYPTOGRAPHY_OSRANDOM_GETRANDOM_WORKS 
}; 
 
enum { 
    CRYPTOGRAPHY_OSRANDOM_GETENTROPY_NOT_INIT, 
    CRYPTOGRAPHY_OSRANDOM_GETENTROPY_FALLBACK, 
    CRYPTOGRAPHY_OSRANDOM_GETENTROPY_WORKS 
}; 
 
/* engine ctrl */ 
#define CRYPTOGRAPHY_OSRANDOM_GET_IMPLEMENTATION ENGINE_CMD_BASE 
 
/* error reporting */ 
static void ERR_load_Cryptography_OSRandom_strings(void); 
static void ERR_Cryptography_OSRandom_error(int function, int reason, 
                                            char *file, int line); 
 
#define CRYPTOGRAPHY_OSRANDOM_F_INIT 100 
#define CRYPTOGRAPHY_OSRANDOM_F_RAND_BYTES 101 
#define CRYPTOGRAPHY_OSRANDOM_F_FINISH 102 
#define CRYPTOGRAPHY_OSRANDOM_F_DEV_URANDOM_FD 300 
#define CRYPTOGRAPHY_OSRANDOM_F_DEV_URANDOM_READ 301 
 
#define CRYPTOGRAPHY_OSRANDOM_R_CRYPTACQUIRECONTEXT 100 
#define CRYPTOGRAPHY_OSRANDOM_R_CRYPTGENRANDOM 101 
#define CRYPTOGRAPHY_OSRANDOM_R_CRYPTRELEASECONTEXT 102 
 
#define CRYPTOGRAPHY_OSRANDOM_R_GETENTROPY_FAILED 200 
 
#define CRYPTOGRAPHY_OSRANDOM_R_DEV_URANDOM_OPEN_FAILED 300 
#define CRYPTOGRAPHY_OSRANDOM_R_DEV_URANDOM_READ_FAILED 301 
 
#define CRYPTOGRAPHY_OSRANDOM_R_GETRANDOM_INIT_FAILED 400 
#define CRYPTOGRAPHY_OSRANDOM_R_GETRANDOM_INIT_FAILED_UNEXPECTED 402 
#define CRYPTOGRAPHY_OSRANDOM_R_GETRANDOM_FAILED 403 
#define CRYPTOGRAPHY_OSRANDOM_R_GETRANDOM_NOT_INIT 404 
#endif