| Index: pkg/dev_compiler/tool/input_sdk/lib/io/security_context.dart
|
| diff --git a/pkg/dev_compiler/tool/input_sdk/lib/io/security_context.dart b/pkg/dev_compiler/tool/input_sdk/lib/io/security_context.dart
|
| deleted file mode 100644
|
| index d99b05b6f8d93be294b03c1c30326fe717f88020..0000000000000000000000000000000000000000
|
| --- a/pkg/dev_compiler/tool/input_sdk/lib/io/security_context.dart
|
| +++ /dev/null
|
| @@ -1,267 +0,0 @@
|
| -// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -part of dart.io;
|
| -
|
| -/**
|
| - * The object containing the certificates to trust when making
|
| - * a secure client connection, and the certificate chain and
|
| - * private key to serve from a secure server.
|
| - *
|
| - * The [SecureSocket] and [SecureServer] classes take a SecurityContext
|
| - * as an argument to their connect and bind methods.
|
| - *
|
| - * Certificates and keys can be added to a SecurityContext from either PEM
|
| - * or PKCS12 containers.
|
| - *
|
| - * iOS note: Some methods to add, remove, and inspect certificates are not yet
|
| - * implemented. However, the platform's built-in trusted certificates can
|
| - * be used, by way of [SecurityContext.defaultContext].
|
| - */
|
| -abstract class SecurityContext {
|
| - external factory SecurityContext();
|
| -
|
| - /**
|
| - * Secure networking classes with an optional `context` parameter
|
| - * use the [defaultContext] object if the parameter is omitted.
|
| - * This object can also be accessed, and modified, directly.
|
| - * Each isolate has a different [defaultContext] object.
|
| - * The [defaultContext] object uses a list of well-known trusted
|
| - * certificate authorities as its trusted roots. On Linux and Windows, this
|
| - * list is taken from Mozilla, who maintains it as part of Firefox. On,
|
| - * MacOS, iOS, and Android, this list comes from the trusted certificates
|
| - * stores built in to the platforms.
|
| - */
|
| - external static SecurityContext get defaultContext;
|
| -
|
| - /**
|
| - * Sets the private key for a server certificate or client certificate.
|
| - *
|
| - * A secure connection using this SecurityContext will use this key with
|
| - * the server or client certificate to sign and decrypt messages.
|
| - * [file] is the path to a PEM or PKCS12 file containing an encrypted
|
| - * private key, encrypted with [password]. Assuming it is well-formatted, all
|
| - * other contents of [file] are ignored. An unencrypted file can be used,
|
| - * but this is not usual.
|
| - *
|
| - * NB: This function calls [ReadFileAsBytesSync], and will block on file IO.
|
| - * Prefer using [usePrivateKeyBytes].
|
| - *
|
| - * iOS note: Only PKCS12 data is supported. It should contain both the private
|
| - * key and the certificate chain. On iOS one call to [usePrivateKey] with this
|
| - * data is used instead of two calls to [useCertificateChain] and
|
| - * [usePrivateKey].
|
| - */
|
| - void usePrivateKey(String file, {String password});
|
| -
|
| - /**
|
| - * Sets the private key for a server certificate or client certificate.
|
| - *
|
| - * Like [usePrivateKey], but takes the contents of the file as a list
|
| - * of bytes.
|
| - */
|
| - void usePrivateKeyBytes(List<int> keyBytes, {String password});
|
| -
|
| - /**
|
| - * Sets the set of trusted X509 certificates used by [SecureSocket]
|
| - * client connections, when connecting to a secure server.
|
| - *
|
| - * [file] is the path to a PEM or PKCS12 file containing X509 certificates,
|
| - * usually root certificates from certificate authorities. For PKCS12 files,
|
| - * [password] is the password for the file. For PEM files, [password] is
|
| - * ignored. Assuming it is well-formatted, all other contents of [file] are
|
| - * ignored.
|
| - *
|
| - * NB: This function calls [ReadFileAsBytesSync], and will block on file IO.
|
| - * Prefer using [setTrustedCertificatesBytes].
|
| - *
|
| - * iOS note: On iOS, this call takes only the bytes for a single DER
|
| - * encoded X509 certificate. It may be called multiple times to add
|
| - * multiple trusted certificates to the context. A DER encoded certificate
|
| - * can be obtained from a PEM encoded certificate by using the openssl tool:
|
| - *
|
| - * $ openssl x509 -outform der -in cert.pem -out cert.der
|
| - */
|
| - void setTrustedCertificates(String file, {String password});
|
| -
|
| - /**
|
| - * Sets the set of trusted X509 certificates used by [SecureSocket]
|
| - * client connections, when connecting to a secure server.
|
| - *
|
| - * Like [setTrustedCertificates] but takes the contents of the file.
|
| - */
|
| - void setTrustedCertificatesBytes(List<int> certBytes, {String password});
|
| -
|
| - /**
|
| - * Sets the chain of X509 certificates served by [SecureServer]
|
| - * when making secure connections, including the server certificate.
|
| - *
|
| - * [file] is a PEM or PKCS12 file containing X509 certificates, starting with
|
| - * the root authority and intermediate authorities forming the signed
|
| - * chain to the server certificate, and ending with the server certificate.
|
| - * The private key for the server certificate is set by [usePrivateKey]. For
|
| - * PKCS12 files, [password] is the password for the file. For PEM files,
|
| - * [password] is ignored. Assuming it is well-formatted, all
|
| - * other contents of [file] are ignored.
|
| - *
|
| - * NB: This function calls [ReadFileAsBytesSync], and will block on file IO.
|
| - * Prefer using [useCertificateChainBytes].
|
| - *
|
| - * iOS note: As noted above, [usePrivateKey] does the job of both
|
| - * that call and this one. On iOS, this call is a no-op.
|
| - */
|
| - void useCertificateChain(String file, {String password});
|
| -
|
| - /**
|
| - * Sets the chain of X509 certificates served by [SecureServer]
|
| - * when making secure connections, including the server certificate.
|
| - *
|
| - * Like [useCertificateChain] but takes the contents of the file.
|
| - */
|
| - void useCertificateChainBytes(List<int> chainBytes, {String password});
|
| -
|
| - /**
|
| - * Sets the list of authority names that a [SecureServer] will advertise
|
| - * as accepted when requesting a client certificate from a connecting
|
| - * client.
|
| - *
|
| - * [file] is a PEM or PKCS12 file containing the accepted signing
|
| - * authority certificates - the authority names are extracted from the
|
| - * certificates. For PKCS12 files, [password] is the password for the file.
|
| - * For PEM files, [password] is ignored. Assuming it is well-formatted, all
|
| - * other contents of [file] are ignored.
|
| - *
|
| - * NB: This function calls [ReadFileAsBytesSync], and will block on file IO.
|
| - * Prefer using [setClientAuthoritiesBytes].
|
| - *
|
| - * iOS note: This call is not supported.
|
| - */
|
| - void setClientAuthorities(String file, {String password});
|
| -
|
| - /**
|
| - * Sets the list of authority names that a [SecureServer] will advertise
|
| - * as accepted, when requesting a client certificate from a connecting
|
| - * client.
|
| - *
|
| - * Like [setClientAuthority] but takes the contents of the file.
|
| - */
|
| - void setClientAuthoritiesBytes(List<int> authCertBytes, {String password});
|
| -
|
| - /**
|
| - * Whether the platform supports ALPN.
|
| - */
|
| - external static bool get alpnSupported;
|
| -
|
| - /**
|
| - * Sets the list of application-level protocols supported by a client
|
| - * connection or server connection. The ALPN (application level protocol
|
| - * negotiation) extension to TLS allows a client to send a list of
|
| - * protocols in the TLS client hello message, and the server to pick
|
| - * one and send the selected one back in its server hello message.
|
| - *
|
| - * Separate lists of protocols can be sent for client connections and
|
| - * for server connections, using the same SecurityContext. The [isServer]
|
| - * boolean argument specifies whether to set the list for server connections
|
| - * or client connections.
|
| - */
|
| - void setAlpnProtocols(List<String> protocols, bool isServer);
|
| -
|
| - /// Encodes a set of supported protocols for ALPN/NPN usage.
|
| - ///
|
| - /// The `protocols` list is expected to contain protocols in descending order
|
| - /// of preference.
|
| - ///
|
| - /// See RFC 7301 (https://tools.ietf.org/html/rfc7301) for the encoding of
|
| - /// `List<String> protocols`:
|
| - /// opaque ProtocolName<1..2^8-1>;
|
| - ///
|
| - /// struct {
|
| - /// ProtocolName protocol_name_list<2..2^16-1>
|
| - /// } ProtocolNameList;
|
| - ///
|
| - /// The encoding of the opaque `ProtocolName<lower..upper>` vector is
|
| - /// described in RFC 2246: 4.3 Vectors.
|
| - ///
|
| - /// Note: Even though this encoding scheme would allow a total
|
| - /// `ProtocolNameList` length of 65535, this limit cannot be reached. Testing
|
| - /// showed that more than ~ 2^14 bytes will fail to negotiate a protocol.
|
| - /// We will be conservative and support only messages up to (1<<13)-1 bytes.
|
| - static Uint8List _protocolsToLengthEncoding(List<String> protocols) {
|
| - if (protocols == null || protocols.length == 0) {
|
| - return new Uint8List(0);
|
| - }
|
| - int protocolsLength = protocols.length;
|
| -
|
| - // Calculate the number of bytes we will need if it is ASCII.
|
| - int expectedLength = protocolsLength;
|
| - for (int i = 0; i < protocolsLength; i++) {
|
| - int length = protocols[i].length;
|
| - if (length > 0 && length <= 255) {
|
| - expectedLength += length;
|
| - } else {
|
| - throw new ArgumentError(
|
| - 'Length of protocol must be between 1 and 255 (was: $length).');
|
| - }
|
| - }
|
| -
|
| - if (expectedLength >= (1 << 13)) {
|
| - throw new ArgumentError(
|
| - 'The maximum message length supported is 2^13-1.');
|
| - }
|
| -
|
| - // Try encoding the `List<String> protocols` array using fast ASCII path.
|
| - var bytes = new Uint8List(expectedLength);
|
| - int bytesOffset = 0;
|
| - for (int i = 0; i < protocolsLength; i++) {
|
| - String proto = protocols[i];
|
| -
|
| - // Add length byte.
|
| - bytes[bytesOffset++] = proto.length;
|
| - int bits = 0;
|
| -
|
| - // Add protocol bytes.
|
| - for (int j = 0; j < proto.length; j++) {
|
| - var char = proto.codeUnitAt(j);
|
| - bits |= char;
|
| - bytes[bytesOffset++] = char & 0xff;
|
| - }
|
| -
|
| - // Go slow case if we have encountered anything non-ascii.
|
| - if (bits > 0x7f) {
|
| - return _protocolsToLengthEncodingNonAsciiBailout(protocols);
|
| - }
|
| - }
|
| - return bytes;
|
| - }
|
| -
|
| - static Uint8List _protocolsToLengthEncodingNonAsciiBailout(
|
| - List<String> protocols) {
|
| - void addProtocol(List<int> outBytes, String protocol) {
|
| - var protocolBytes = UTF8.encode(protocol);
|
| - var len = protocolBytes.length;
|
| -
|
| - if (len > 255) {
|
| - throw new ArgumentError(
|
| - 'Length of protocol must be between 1 and 255 (was: $len)');
|
| - }
|
| - // Add length byte.
|
| - outBytes.add(len);
|
| -
|
| - // Add protocol bytes.
|
| - outBytes.addAll(protocolBytes);
|
| - }
|
| -
|
| - List<int> bytes = [];
|
| - for (var i = 0; i < protocols.length; i++) {
|
| - addProtocol(bytes, protocols[i]);
|
| - }
|
| -
|
| - if (bytes.length >= (1 << 13)) {
|
| - throw new ArgumentError(
|
| - 'The maximum message length supported is 2^13-1.');
|
| - }
|
| -
|
| - return new Uint8List.fromList(bytes);
|
| - }
|
| -}
|
|
|