blob: e5332ac0e70c6c14ef9785aa21d899aefa248f6f [file] [log] [blame]
// 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.
import "package:expect/expect.dart";
import "dart:io";
String localFile(path) => Platform.script.resolve(path).toFilePath();
bool printException(e) { print(e); return true; }
bool argumentError(e) => e is ArgumentError;
bool argumentOrTypeError(e) => e is ArgumentError || e is TypeError;
bool fileSystemException(e) => e is FileSystemException;
bool tlsException(e) => e is TlsException;
void testUsePrivateKeyArguments() {
var c = new SecurityContext();
c.useCertificateChain(localFile('certificates/server_chain.pem'));
// Wrong password.
Expect.throws(() => c.usePrivateKey(
localFile('certificates/server_key.pem')),
tlsException);
Expect.throws(() => c.usePrivateKey(
localFile('certificates/server_key.pem'), password: "iHackSites"),
tlsException);
Expect.throws(() => c.usePrivateKey(
localFile('certificates/server_key.p12')),
tlsException);
Expect.throws(() => c.usePrivateKey(
localFile('certificates/server_key.p12'), password: "iHackSites"),
tlsException);
Expect.throws(() => c.setTrustedCertificates(
localFile('certificates/server_key.p12')),
tlsException);
Expect.throws(() => c.setTrustedCertificates(
localFile('certificates/server_key.p12'), password: "iHackSites"),
tlsException);
Expect.throws(() => c.useCertificateChain(
localFile('certificates/server_key.p12')),
tlsException);
Expect.throws(() => c.useCertificateChain(
localFile('certificates/server_key.p12'), password: "iHackSites"),
tlsException);
Expect.throws(() => c.setClientAuthorities(
localFile('certificates/server_key.p12')),
argumentError);
Expect.throws(() => c.setClientAuthorities(
localFile('certificates/server_key.p12'), password: "iHackSites"),
argumentError);
// File does not exist
Expect.throws(() => c.usePrivateKey(
localFile('certificates/server_key_oops.pem'),
password: "dartdart"),
fileSystemException);
// Wrong type for file name or data
Expect.throws(() => c.usePrivateKey(1), argumentOrTypeError);
Expect.throws(() => c.usePrivateKey(null), argumentError);
Expect.throws(() => c.usePrivateKeyBytes(1), argumentOrTypeError);
Expect.throws(() => c.usePrivateKeyBytes(null), argumentError);
// Too-long passwords.
Expect.throws(() => c.usePrivateKey(
localFile('certificates/server_key.pem'), password: "dart" * 1000),
argumentError);
Expect.throws(() => c.usePrivateKey(
localFile('certificates/server_key.p12'), password: "dart" * 1000),
argumentOrTypeError);
Expect.throws(() => c.setTrustedCertificates(
localFile('certificates/server_key.p12'), password: "dart" * 1000),
argumentOrTypeError);
Expect.throws(() => c.useCertificateChain(
localFile('certificates/server_key.p12'), password: "dart" * 1000),
argumentOrTypeError);
Expect.throws(() => c.setClientAuthorities(
localFile('certificates/server_key.p12'), password: "dart" * 1000),
argumentOrTypeError);
// Bad password type.
Expect.throws(() => c.usePrivateKey(
localFile('certificates/server_key.pem'), password: 3),
argumentOrTypeError);
Expect.throws(() => c.setTrustedCertificatesBytes(
localFile('certificates/server_key.pem'), password: 3),
argumentOrTypeError);
Expect.throws(() => c.useCertificateChainBytes(
localFile('certificates/server_key.pem'), password: 3),
argumentOrTypeError);
Expect.throws(() => c.setClientAuthoritiesBytes(
localFile('certificates/server_key.pem'), password: 3),
argumentOrTypeError);
// Empty data.
Expect.throws(() => c.usePrivateKeyBytes([], password: 'dartdart'),
tlsException);
Expect.throws(() => c.setTrustedCertificatesBytes([]), tlsException);
Expect.throws(() => c.useCertificateChainBytes([]), tlsException);
Expect.throws(() => c.setClientAuthoritiesBytes([]), argumentError);
// Malformed PEM certs.
Expect.throws(() => c.usePrivateKey(
localFile('certificates/client1_key_malformed.pem'),
password: "dartdart"),
tlsException);
Expect.throws(() => c.setTrustedCertificates(
localFile('certificates/trusted_certs_malformed.pem')),
tlsException);
Expect.throws(() => c.useCertificateChain(
localFile('certificates/server_chain_malformed1.pem')),
tlsException);
Expect.throws(() => c.useCertificateChain(
localFile('certificates/server_chain_malformed2.pem')),
tlsException);
Expect.throws(() => c.setClientAuthorities(
localFile('certificates/client_authority_malformed.pem')),
argumentError);
c.usePrivateKey(
localFile('certificates/server_key.pem'), password: "dartdart");
}
void main() {
testUsePrivateKeyArguments();
}