Samsung Internal API reference  2.0
tee_tlssocket.h
Go to the documentation of this file.
1 
9 #ifndef __TEE_ISOCKET_TLS__
10 #define __TEE_ISOCKET_TLS__
11 
12 #include "tee_isocket.h"
13 
17 enum {
19 };
20 
24 enum {
26 };
27 
31 enum {
38 };
39 
47 
52  TLS_NULL_WITH_NULL_NULL = 0x0000, /* LIST TERMINATION */
53  TLS_RSA_WITH_3DES_EDE_CBC_SHA = 0x000A, /* [RFC5246] */
54  TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA = 0x0013, /* [RFC5246] */
55  TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA = 0x0016, /* [RFC5246] */
56  TLS_RSA_WITH_AES_128_CBC_SHA = 0x002F, /* [RFC5246] */
57  TLS_DHE_DSS_WITH_AES_128_CBC_SHA = 0x0032, /* [RFC5246] */
58  TLS_DHE_RSA_WITH_AES_128_CBC_SHA = 0x0033, /* [RFC5246] */
59  TLS_RSA_WITH_AES_256_CBC_SHA = 0x0035, /* [RFC5246] */
60  TLS_DHE_DSS_WITH_AES_256_CBC_SHA = 0x0038, /* [RFC5246] */
61  TLS_DHE_RSA_WITH_AES_256_CBC_SHA = 0x0039, /* [RFC5246] */
62  TLS_RSA_WITH_AES_128_CBC_SHA256 = 0x003C, /* [RFC5246] */
63  TLS_RSA_WITH_AES_256_CBC_SHA256 = 0x003D, /* [RFC5246] */
64  TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 = 0x0040, /* [RFC5246] */
65  TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 = 0x0067, /* [RFC5246] */
66  TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 = 0x006A, /* [RFC5246] */
67  TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 = 0x006B, /* [RFC5246] */
68 
69  TLS_PSK_WITH_3DES_EDE_CBC_SHA = 0x008B, /* [RFC4279] */
70  TLS_PSK_WITH_AES_128_CBC_SHA = 0x008C, /* [RFC4279] */
71  TLS_PSK_WITH_AES_256_CBC_SHA = 0x008D, /* [RFC4279] */
72  TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA = 0x008F, /* [RFC4279] */
73  TLS_DHE_PSK_WITH_AES_128_CBC_SHA = 0x0090, /* [RFC4279] */
74  TLS_DHE_PSK_WITH_AES_256_CBC_SHA = 0x0091, /* [RFC4279] */
75  TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA = 0x0093, /* [RFC4279] */
76  TLS_RSA_PSK_WITH_AES_128_CBC_SHA = 0x0094, /* [RFC4279] */
77  TLS_RSA_PSK_WITH_AES_256_CBC_SHA = 0x0095, /* [RFC4279] */
78 
79  TLS_RSA_WITH_AES_128_GCM_SHA256 = 0x009C, /* [RFC5288] */
80  TLS_RSA_WITH_AES_256_GCM_SHA384 = 0x009D, /* [RFC5288] */
81  TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 = 0x009E, /* [RFC5288] */
82  TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 = 0x009F, /* [RFC5288] */
83  TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 = 0x00A2, /* [RFC5288] */
84  TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 = 0x00A3, /* [RFC5288] */
85 
86  TLS_PSK_WITH_AES_128_GCM_SHA256 = 0x00A8, /* [RFC5487] */
87  TLS_PSK_WITH_AES_256_GCM_SHA384 = 0x00A9, /* [RFC5487] */
88  TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 = 0x00AA, /* [RFC5487] */
89  TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 = 0x00AB, /* [RFC5487] */
90  TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 = 0x00AC, /* [RFC5487] */
91  TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 = 0x00AD, /* [RFC5487] */
92  TLS_PSK_WITH_AES_128_CBC_SHA256 = 0x00AE, /* [RFC5487] */
93  TLS_PSK_WITH_AES_256_CBC_SHA384 = 0x00AF, /* [RFC5487] */
94  TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 = 0x00B2, /* [RFC5487] */
95  TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 = 0x00B3, /* [RFC5487] */
96  TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 = 0x00B6, /* [RFC5487] */
97  TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 = 0x00B7, /* [RFC5487] */
98 
99  TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA = 0xC008, /* [RFC4492] */
100  TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA = 0xC009, /* [RFC4492] */
101  TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA = 0xC00A, /* [RFC4492] */
102  TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA = 0xC012, /* [RFC4492] */
103  TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA = 0xC013, /* [RFC4492] */
104  TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA = 0xC014, /* [RFC4492] */
105 
106  TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA = 0xC01A, /* [RFC5054] */
107  TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA = 0xC01B, /* [RFC5054] */
108  TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA = 0xC01C, /* [RFC5054] */
109  TLS_SRP_SHA_WITH_AES_128_CBC_SHA = 0xC01D, /* [RFC5054] */
110  TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA = 0xC01E, /* [RFC5054] */
111  TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA = 0xC01F, /* [RFC5054] */
112  TLS_SRP_SHA_WITH_AES_256_CBC_SHA = 0xC020, /* [RFC5054] */
113  TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA = 0xC021, /* [RFC5054] */
114  TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA = 0xC022, /* [RFC5054] */
115 
116  TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 = 0xC023, /* [RFC5289] */
117  TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 = 0xC024, /* [RFC5289] */
118  TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 = 0xC027, /* [RFC5289] */
119  TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 = 0xC028, /* [RFC5289] */
120  TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = 0xC02B, /* [RFC5289] */
121  TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = 0xC02C, /* [RFC5289] */
122  TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = 0xC02F, /* [RFC5289] */
123  TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = 0xC030, /* [RFC5289] */
124  TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA = 0xC034, /* [RFC5489] */
125  TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA = 0xC035, /* [RFC5489] */
126  TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA = 0xC036, /* [RFC5489] */
127  TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 = 0xC037, /* [RFC5489] */
128  TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 = 0xC038, /* [RFC5489] */
129 
130  TLS_RSA_WITH_AES_128_CCM = 0xC09C, /* [RFC6655] */
131  TLS_RSA_WITH_AES_256_CCM = 0xC09D, /* [RFC6655] */
132  TLS_DHE_RSA_WITH_AES_128_CCM = 0xC09E, /* [RFC6655] */
133  TLS_DHE_RSA_WITH_AES_256_CCM = 0xC09F, /* [RFC6655] */
134  TLS_PSK_WITH_AES_128_CCM = 0xC0A4, /* [RFC6655] */
135  TLS_PSK_WITH_AES_256_CCM = 0xC0A5, /* [RFC6655] */
136  TLS_DHE_PSK_WITH_AES_128_CCM = 0xC0A6, /* [RFC6655] */
137  TLS_DHE_PSK_WITH_AES_256_CCM = 0xC0A7, /* [RFC6655] */
139 
146 typedef struct TEE_tlsSocket_PSK_Info_s {
147  TEE_ObjectHandle pskKey;
148  char *pskIdentity;
150 
157 typedef struct TEE_tlsSocket_SRP_Info_s {
158  char *srpPassword;
159  char *srpIdentity;
161 
168  TEE_ObjectHandle privateKey;
169  char *bulkCertChain;
170  uint32_t bulkSize;
172 
180  TEE_ObjectHandle publicKey;
181  char *bulkCertChain;
182  uint32_t bulkSize;
184 
193 
202 
210 
216  union {
217  TEE_tlsSocket_ServerPDC *serverCred;
218  TEE_tlsSocket_CertStorageCred *rootCertStore;
219  };
221  union {
222  TEE_tlsSocket_ClientPDC *clientCred;
223  TEE_tlsSocket_CertStorageCred *clientCertStore;
224  };
226 
237 
243  TEE_Result result;
244  uint32_t protocolError;
246 
253 typedef TEE_Result (*TEE_tlsCallback)(
254  TEE_iSocketHandle ctx,
256  void *cbData,
257  uint32_t *cbDataLength);
258 
265  //TEE_ISOCKET_TLS_OCSP_STATUS_REQUEST_V2 = 17, // TODO: OCSP stapling V2 MULTIPLE certificate status request - RFC 6961
267 
279 
280 enum {
281  TEE_ISOCKET_TLS_MAX_ALPN_LIST_LENGTH = 16
282 };
283 
287 typedef struct TEE_tlsSocket_Setup_s {
288  uint32_t apiVersion;
299  union {
300  TEE_tlsSocket_PSK_Info *PSKInfo;
301  TEE_tlsSocket_SRP_Info *SRPInfo;
302  };
310  char *serverName;
332  char **alpnList;
351 
361 typedef struct TEE_tlsSocket_CB_Data_s {
362  uint32_t cb_data_size;
363  uint8_t cb_data[];
365 
369 enum {
370  /* Retrieve channel binding information for the current connection.
371  * The returned buffer can be interpreted as an instance of the structure TEE_tlsSocket_CB_Data.
372  * If no channel binding information is available, the output length is 0 */
373  TEE_TLS_BINDING_INFO = 0x67000001,
374 };
375 
379 extern const TEE_iSocket *const TEE_tlsSocket DSO_EXPORT;
380 
381 #endif /* !__TEE_ISOCKET_TLS__ */
382 
Definition: tee_tlssocket.h:275
Definition: tee_tlssocket.h:235
Definition: tee_tlssocket.h:232
struct TEE_tlsSocket_ServerPDC_s TEE_tlsSocket_ServerPDC
If the server Root public key has been pre-distributed to the TA, this structure holds the TEE_Object...
enum TEE_tlsSocket_StatusRequestType_e TEE_tlsSocket_StatusRequestType
OCSP stapling certificate status request type.
struct TEE_tlsSocket_PSK_Info_s TEE_tlsSocket_PSK_Info
Pre-Shared Key (PSK). When PSK is used, the TA needs to provide the key and a key identity to the TLS...
Definition: tee_tlssocket.h:233
TEE_iSocket * baseSocket
Definition: tee_tlssocket.h:306
Definition: tee_tlssocket.h:33
Definition: tee_tlssocket.h:199
Definition: tee_tlssocket.h:272
char ** alpnList
Definition: tee_tlssocket.h:332
TEE_tlsSocket_ClientCredentialType clientCredType
Definition: tee_tlssocket.h:220
Definition: tee_tlssocket.h:208
enum TEE_tlsSocket_ExtensionFlags_e TEE_tlsSocket_ExtensionFlags
Certificate/OCSP validation mode and callback control flags.
This structure holds the opaque client certificate for the TA as well as the corresponding private ke...
Definition: tee_tlssocket.h:167
Structure holding server and client credentials.
Definition: tee_tlssocket.h:214
Definition: tee_tlssocket.h:18
Secure Remote Password (SRP). When SRP is used, the TA needs to provide the password and the user ide...
Definition: tee_tlssocket.h:157
Definition: tee_tlssocket.h:45
Definition: tee_tlssocket.h:274
TEE_tlsSocket_CipherSuites_e
Cryptosuite ID definitions.
Definition: tee_tlssocket.h:51
TEE_tlsSocket_tlsVersion acceptServerVersion
Definition: tee_tlssocket.h:289
TEE_tlsSocket_StatusRequestType_e
OCSP stapling certificate status request type.
Definition: tee_tlssocket.h:262
Definition: tee_tlssocket.h:25
enum TEE_tlsSocket_ClientCredentialType_e TEE_tlsSocket_ClientCredentialType
This specifies what kind of client credentials the TA has.
struct TEE_tlsSocket_Setup_s TEE_tlsSocket_Setup
TLS Setup structure.
struct __TEE_iSocketHandle * TEE_iSocketHandle
iSocket context handle
Definition: tee_isocket.h:46
uint32_t apiVersion
Definition: tee_tlssocket.h:288
TLS Setup structure.
Definition: tee_tlssocket.h:287
Definition: tee_tlssocket.h:264
Definition: tee_tlssocket.h:277
enum TEE_tlsSocket_tlsVersion_e TEE_tlsSocket_tlsVersion
TLS protocol version to use.
Definition: tee_tlssocket.h:198
TEE_Result(* TEE_tlsCallback)(TEE_iSocketHandle ctx, TEE_tlsSocket_CallbackInfo *cbInfo, void *cbData, uint32_t *cbDataLength)
Callback function. This is specification extension. Used to allow client perform custom checks of cer...
Definition: tee_tlssocket.h:253
Void type for future usage. Applications SHALL pass a NULL pointer. The intention is to have this str...
Definition: tee_tlssocket.h:191
struct TEE_tlsSocket_SRP_Info_s TEE_tlsSocket_SRP_Info
Secure Remote Password (SRP). When SRP is used, the TA needs to provide the password and the user ide...
Definition: tee_tlssocket.h:37
TEE_tlsSocket_CipherSuites * allowedCipherSuites
Definition: tee_tlssocket.h:291
enum TEE_tlsSocket_ServerCredentialType_e TEE_tlsSocket_ServerCredentialType
This specifies what kind of server credentials a remote node has.
Definition: tee_tlssocket.h:207
TEE_tlsCallback tlsCallback
Definition: tee_tlssocket.h:322
enum TEE_tlsSocket_CipherSuites_e TEE_tlsSocket_CipherSuites
Cryptosuite ID definitions.
Definition: tee_tlssocket.h:35
TEE_tlsSocket_ServerCredentialType serverCredType
Definition: tee_tlssocket.h:215
Definition: tee_tlssocket.h:34
TEE_tlsSocket_StatusRequestType ocspStatusType
Definition: tee_tlssocket.h:338
GP iSockets interface (GPD_SPE_100)
TEE_tlsSocket_ExtensionFlags extFlags
Definition: tee_tlssocket.h:309
Definition: tee_tlssocket.h:231
struct TEE_tlsSocket_CertStorageCred_s TEE_tlsSocket_CertStorageCred
Void type for future usage. Applications SHALL pass a NULL pointer. The intention is to have this str...
const TEE_iSocket *const TEE_tlsSocket
Public TLS instance pointer.
Definition: tee_tlssocket.h:273
Definition: tee_tlssocket.h:32
char * serverName
Definition: tee_tlssocket.h:310
TEE_tlsSocket_CallbackReasonType_e
Callback types.
Definition: tee_tlssocket.h:230
Pre-Shared Key (PSK). When PSK is used, the TA needs to provide the key and a key identity to the TLS...
Definition: tee_tlssocket.h:146
TEE_tlsSocket_tlsVersion_e
TLS protocol version to use.
Definition: tee_tlssocket.h:43
TEE_tlsSocket_ClientCredentialType_e
This specifies what kind of client credentials the TA has.
Definition: tee_tlssocket.h:197
Definition: tee_tlssocket.h:36
struct TEE_tlsSocket_Credentials_s TEE_tlsSocket_Credentials
Structure holding server and client credentials.
Definition: tee_tlssocket.h:44
TEE_iSocketHandle * baseContext
Definition: tee_tlssocket.h:307
TEE_tlsSocket_Credentials * credentials
Definition: tee_tlssocket.h:304
iSocket instance Please refer to GPD_SPE_100 specification for detailed description. Basic rules are following:
Definition: tee_isocket.h:63
struct TEE_tlsSocket_ClientPDC_s TEE_tlsSocket_ClientPDC
This structure holds the opaque client certificate for the TA as well as the corresponding private ke...
Definition: tee_tlssocket.h:263
struct TEE_tlsSocket_CB_Data_s TEE_tlsSocket_CB_Data
IOCTL definitions.
enum TEE_tlsSocket_CallbackReasonType_e TEE_tlsSocket_CallbackReasonType
Callback types.
IOCTL definitions.
Definition: tee_tlssocket.h:361
struct TEE_tlsSocket_CallbackInfo_s TEE_tlsSocket_CallbackInfo
Callback description structure.
Definition: tee_tlssocket.h:200
Definition: tee_tlssocket.h:276
TEE_tlsSocket_ExtensionFlags_e
Certificate/OCSP validation mode and callback control flags.
Definition: tee_tlssocket.h:271
If the server Root public key has been pre-distributed to the TA, this structure holds the TEE_Object...
Definition: tee_tlssocket.h:179
Callback description structure.
Definition: tee_tlssocket.h:241
Definition: tee_tlssocket.h:234
TEE_tlsSocket_ServerCredentialType_e
This specifies what kind of server credentials a remote node has.
Definition: tee_tlssocket.h:206