blob: e87413570ee58d6cf6038c1e18da46def8c374ab [file] [log] [blame]
Ben Murdoch116680a2014-07-20 18:25:52 -07001// 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