OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 part of dart.io; | 5 part of dart.io; |
6 | 6 |
7 /** | 7 /** |
8 * A high-level class for communicating securely over a TCP socket, using | 8 * A high-level class for communicating securely over a TCP socket, using |
9 * TLS and SSL. The [SecureSocket] exposes both a [Stream] and an | 9 * TLS and SSL. The [SecureSocket] exposes both a [Stream] and an |
10 * [IOSink] interface, making it ideal for using together with | 10 * [IOSink] interface, making it ideal for using together with |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 * | 68 * |
69 * See [connect] for more information on the arguments. | 69 * See [connect] for more information on the arguments. |
70 * | 70 * |
71 */ | 71 */ |
72 static Future<SecureSocket> secure( | 72 static Future<SecureSocket> secure( |
73 Socket socket, | 73 Socket socket, |
74 {host, | 74 {host, |
75 SecurityContext context, | 75 SecurityContext context, |
76 bool onBadCertificate(X509Certificate certificate)}) { | 76 bool onBadCertificate(X509Certificate certificate)}) { |
77 return ((socket as dynamic/*_Socket*/)._detachRaw() as Future) | 77 return ((socket as dynamic/*_Socket*/)._detachRaw() as Future) |
78 .then/*<RawSecureSocket>*/((detachedRaw) { | 78 .then<RawSecureSocket>((detachedRaw) { |
79 return RawSecureSocket.secure( | 79 return RawSecureSocket.secure( |
80 detachedRaw[0] as RawSocket, | 80 detachedRaw[0] as RawSocket, |
81 subscription: detachedRaw[1] as StreamSubscription<RawSocketEvent>, | 81 subscription: detachedRaw[1] as StreamSubscription<RawSocketEvent>, |
82 host: host, | 82 host: host, |
83 context: context, | 83 context: context, |
84 onBadCertificate: onBadCertificate); | 84 onBadCertificate: onBadCertificate); |
85 }) | 85 }) |
86 .then/*<SecureSocket>*/((raw) => new SecureSocket._(raw)); | 86 .then<SecureSocket>((raw) => new SecureSocket._(raw)); |
87 } | 87 } |
88 | 88 |
89 /** | 89 /** |
90 * Takes an already connected [socket] and starts server side TLS | 90 * Takes an already connected [socket] and starts server side TLS |
91 * handshake to make the communication secure. When the returned | 91 * handshake to make the communication secure. When the returned |
92 * future completes the [SecureSocket] has completed the TLS | 92 * future completes the [SecureSocket] has completed the TLS |
93 * handshake. Using this function requires that the other end of the | 93 * handshake. Using this function requires that the other end of the |
94 * connection is going to start the TLS handshake. | 94 * connection is going to start the TLS handshake. |
95 * | 95 * |
96 * If the [socket] already has a subscription, this subscription | 96 * If the [socket] already has a subscription, this subscription |
(...skipping 11 matching lines...) Expand all Loading... |
108 * | 108 * |
109 */ | 109 */ |
110 static Future<SecureSocket> secureServer( | 110 static Future<SecureSocket> secureServer( |
111 Socket socket, | 111 Socket socket, |
112 SecurityContext context, | 112 SecurityContext context, |
113 {List<int> bufferedData, | 113 {List<int> bufferedData, |
114 bool requestClientCertificate: false, | 114 bool requestClientCertificate: false, |
115 bool requireClientCertificate: false, | 115 bool requireClientCertificate: false, |
116 List<String> supportedProtocols}) { | 116 List<String> supportedProtocols}) { |
117 return ((socket as dynamic/*_Socket*/)._detachRaw() as Future) | 117 return ((socket as dynamic/*_Socket*/)._detachRaw() as Future) |
118 .then/*<RawSecureSocket>*/((detachedRaw) { | 118 .then<RawSecureSocket>((detachedRaw) { |
119 return RawSecureSocket.secureServer( | 119 return RawSecureSocket.secureServer( |
120 detachedRaw[0] as RawSocket, | 120 detachedRaw[0] as RawSocket, |
121 context, | 121 context, |
122 subscription: detachedRaw[1] as StreamSubscription<RawSocketEvent>, | 122 subscription: detachedRaw[1] as StreamSubscription<RawSocketEvent>, |
123 bufferedData: bufferedData, | 123 bufferedData: bufferedData, |
124 requestClientCertificate: requestClientCertificate, | 124 requestClientCertificate: requestClientCertificate, |
125 requireClientCertificate: requireClientCertificate, | 125 requireClientCertificate: requireClientCertificate, |
126 supportedProtocols: supportedProtocols); | 126 supportedProtocols: supportedProtocols); |
127 }) | 127 }) |
128 .then/*<SecureSocket>*/((raw) => new SecureSocket._(raw)); | 128 .then<SecureSocket>((raw) => new SecureSocket._(raw)); |
129 } | 129 } |
130 | 130 |
131 /** | 131 /** |
132 * Get the peer certificate for a connected SecureSocket. If this | 132 * Get the peer certificate for a connected SecureSocket. If this |
133 * SecureSocket is the server end of a secure socket connection, | 133 * SecureSocket is the server end of a secure socket connection, |
134 * [peerCertificate] will return the client certificate, or null, if no | 134 * [peerCertificate] will return the client certificate, or null, if no |
135 * client certificate was received. If it is the client end, | 135 * client certificate was received. If it is the client end, |
136 * [peerCertificate] will return the server's certificate. | 136 * [peerCertificate] will return the server's certificate. |
137 */ | 137 */ |
138 X509Certificate get peerCertificate; | 138 X509Certificate get peerCertificate; |
(...skipping 1109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1248 /** | 1248 /** |
1249 * An exception that happens in the handshake phase of establishing | 1249 * An exception that happens in the handshake phase of establishing |
1250 * a secure network connection, when looking up or verifying a | 1250 * a secure network connection, when looking up or verifying a |
1251 * certificate. | 1251 * certificate. |
1252 */ | 1252 */ |
1253 class CertificateException extends TlsException { | 1253 class CertificateException extends TlsException { |
1254 const CertificateException([String message = "", | 1254 const CertificateException([String message = "", |
1255 OSError osError = null]) | 1255 OSError osError = null]) |
1256 : super._("CertificateException", message, osError); | 1256 : super._("CertificateException", message, osError); |
1257 } | 1257 } |
OLD | NEW |