1 /* Copyright (C) 2015 The Android Open Source Project
2  *
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *      http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License. */
14 
15 /* This program generates output that is expected to become
16  * NativeConstants.java. This reifies several OpenSSL constants into Java. */
17 
18 #include <stdio.h>
19 
20 #include <openssl/ec.h>
21 #include <openssl/rsa.h>
22 #include <openssl/ssl.h>
23 #include <openssl/x509v3.h>
24 #include <openssl/evp.h>
25 #if defined(OPENSSL_IS_BORINGSSL)
26 #include <openssl/aead.h>
27 #endif
28 
29 static const char kCopyright[] =
30     "/* Copyright (C) 2015 The Android Open Source Project\n"
31     " *\n"
32     " * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
33     " * you may not use this file except in compliance with the License.\n"
34     " * You may obtain a copy of the License at\n"
35     " *\n"
36     " *      http://www.apache.org/licenses/LICENSE-2.0\n"
37     " *\n"
38     " * Unless required by applicable law or agreed to in writing, software\n"
39     " * distributed under the License is distributed on an \"AS IS\" BASIS,\n"
40     " * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or "
41     "implied.\n"
42     " * See the License for the specific language governing permissions and\n"
43     " * limitations under the License. */\n";
44 
main(int,char **)45 int main(int /* argc */, char ** /* argv */) {
46   printf("%s\n", kCopyright);
47   printf("/* This file was generated by generate_constants.cc. */\n\n");
48   printf("package org.conscrypt;\n\n");
49   printf("public final class NativeConstants {\n");
50 
51   printf("    public static final boolean HAS_EVP_AEAD = %s;\n",
52 #if defined(EVP_AEAD_DEFAULT_TAG_LENGTH)
53          "true"
54 #else
55          "false"
56 #endif
57   );
58 
59 #define CONST(x) \
60   printf("    public static final int %s = %ld;\n", #x, (long int)x)
61 #define CONST_MINUS_1(x) printf("    public static final int %s = -1;\n", #x)
62   CONST(OPENSSL_EC_NAMED_CURVE);
63 
64   CONST(POINT_CONVERSION_COMPRESSED);
65   CONST(POINT_CONVERSION_UNCOMPRESSED);
66 
67   CONST(EXFLAG_CA);
68   CONST(EXFLAG_CRITICAL);
69 
70   CONST(EVP_PKEY_RSA);
71   CONST(EVP_PKEY_EC);
72 
73   CONST(RSA_PKCS1_PADDING);
74   CONST(RSA_NO_PADDING);
75   CONST(RSA_PKCS1_OAEP_PADDING);
76   CONST(RSA_PKCS1_PSS_PADDING);
77 
78   CONST(SSL_MODE_SEND_FALLBACK_SCSV);
79   CONST(SSL_MODE_CBC_RECORD_SPLITTING);
80   CONST(SSL_MODE_HANDSHAKE_CUTTHROUGH);
81 
82   CONST(SSL_OP_CIPHER_SERVER_PREFERENCE);
83   CONST(SSL_OP_NO_TICKET);
84   CONST(SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION);
85   CONST(SSL_OP_NO_SSLv3);
86   CONST(SSL_OP_NO_TLSv1);
87   CONST(SSL_OP_NO_TLSv1_1);
88   CONST(SSL_OP_NO_TLSv1_2);
89 
90   CONST(SSL_SENT_SHUTDOWN);
91   CONST(SSL_RECEIVED_SHUTDOWN);
92 
93   CONST(TLS_CT_RSA_SIGN);
94   CONST(TLS_CT_ECDSA_SIGN);
95 
96 #if defined(TLS_CT_RSA_FIXED_DH)
97   CONST(TLS_CT_RSA_FIXED_DH);
98 #else
99   CONST_MINUS_1(TLS_CT_RSA_FIXED_DH);
100 #endif
101 #if defined(TLS_CT_RSA_FIXED_ECDH)
102   CONST(TLS_CT_RSA_FIXED_ECDH);
103 #else
104   CONST_MINUS_1(TLS_CT_RSA_FIXED_ECDH);
105 #endif
106 #if defined(TLS_CT_ECDSA_FIXED_ECDH)
107   CONST(TLS_CT_ECDSA_FIXED_ECDH);
108 #else
109   CONST_MINUS_1(TLS_CT_ECDSA_FIXED_ECDH);
110 #endif
111 
112   CONST(SSL_VERIFY_NONE);
113   CONST(SSL_VERIFY_PEER);
114   CONST(SSL_VERIFY_FAIL_IF_NO_PEER_CERT);
115 
116   CONST(SSL_ST_CONNECT);
117   CONST(SSL_ST_ACCEPT);
118   CONST(SSL_ST_MASK);
119   CONST(SSL_ST_INIT);
120   CONST(SSL_ST_OK);
121   CONST(SSL_ST_RENEGOTIATE);
122   CONST(SSL_CB_LOOP);
123   CONST(SSL_CB_EXIT);
124   CONST(SSL_CB_READ);
125   CONST(SSL_CB_WRITE);
126   CONST(SSL_CB_ALERT);
127   CONST(SSL_CB_READ_ALERT);
128   CONST(SSL_CB_WRITE_ALERT);
129   CONST(SSL_CB_ACCEPT_LOOP);
130   CONST(SSL_CB_ACCEPT_EXIT);
131   CONST(SSL_CB_CONNECT_LOOP);
132   CONST(SSL_CB_CONNECT_EXIT);
133   CONST(SSL_CB_HANDSHAKE_START);
134   CONST(SSL_CB_HANDSHAKE_DONE);
135 
136   CONST(SSL3_RT_MAX_PACKET_SIZE);
137 #undef CONST
138 
139   printf("}\n");
140 
141   return 0;
142 }
143