1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef NET_ANDROID_LEGACY_OPENSSL_H
6#define NET_ANDROID_LEGACY_OPENSSL_H
7
8// This file contains a replica of the Android system OpenSSL ABI shipped in
9// Android 4.1.x (API level 16). The ABI may not necessarily be compatible with
10// the copy of OpenSSL shipped in Chromium. This is used to implement
11// RSA_private_encrypt in one of the legacy client auth codepaths.
12//
13// See https://android.googlesource.com/platform/external/openssl/+/android-4.1.2_r2.1
14
15namespace net {
16namespace android {
17
18enum {
19  ANDROID_EVP_PKEY_RSA = 6,
20};
21
22enum {
23  ANDROID_RSA_PKCS1_PADDING = 1,
24  ANDROID_RSA_SSLV23_PADDING = 2,
25  ANDROID_RSA_NO_PADDING = 3,
26  ANDROID_RSA_PKCS1_OAEP_PADDING = 4,
27  ANDROID_X931_PADDING = 5,
28  ANDROID_PKCS1_PSS_PADDING = 6,
29};
30
31struct AndroidEVP_PKEY_ASN1_METHOD;
32struct AndroidRSA_METHOD;
33struct AndroidSTACK;
34
35struct AndroidCRYPTO_EX_DATA {
36  AndroidSTACK* sk;
37  int dummy;
38};
39
40struct AndroidENGINE {
41  const char* id;
42  // Remaining fields intentionally omitted.
43};
44
45struct AndroidRSA {
46  int pad;
47  long version;
48  const AndroidRSA_METHOD* meth;
49  AndroidENGINE* engine;
50  // Remaining fields intentionally omitted.
51};
52
53struct AndroidRSA_METHOD {
54  const char* name;
55  int (*rsa_pub_enc)(int flen,
56                     const unsigned char* from,
57                     unsigned char* to,
58                     AndroidRSA* rsa,
59                     int padding);
60  int (*rsa_pub_dec)(int flen,
61                     const unsigned char* from,
62                     unsigned char* to,
63                     AndroidRSA* rsa,
64                     int padding);
65  int (*rsa_priv_enc)(int flen,
66                      const unsigned char* from,
67                      unsigned char* to,
68                      AndroidRSA* rsa,
69                      int padding);
70  int (*rsa_priv_dec)(int flen,
71                      const unsigned char* from,
72                      unsigned char* to,
73                      AndroidRSA* rsa,
74                      int padding);
75  // Remaining fields intentionally omitted.
76};
77
78struct AndroidEVP_PKEY {
79  int type;
80  int save_type;
81  // Note: this value must NOT be modified using Chromium's CRYPTO_add
82  // function. That may not necessarily use the same locking implementation as
83  // system OpenSSL.
84  int references;
85  const AndroidEVP_PKEY_ASN1_METHOD* ameth;
86  AndroidENGINE* engine;
87  union {
88    char* ptr;
89    AndroidRSA* rsa;
90  } pkey;
91  int save_parameters;
92  AndroidSTACK* attributes;
93};
94
95}  // namespace android
96}  // namespace net
97
98#endif  // NET_ANDROID_LEGACY_OPENSSL_H
99