Upgrade pub to work with crypto 1.0.0 or later.

This is necessary since the SDK's repo requires that.

R=kevmoo@google.com

Review URL: https://codereview.chromium.org//1902993003 .
diff --git a/lib/src/barback/barback_server.dart b/lib/src/barback/barback_server.dart
index 2e89284..19082c9 100644
--- a/lib/src/barback/barback_server.dart
+++ b/lib/src/barback/barback_server.dart
@@ -3,11 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:async';
-import 'dart:convert';
 import 'dart:io';
 
 import 'package:barback/barback.dart';
-import "package:crypto/crypto.dart";
 import 'package:mime/mime.dart';
 import 'package:path/path.dart' as path;
 import 'package:shelf/shelf.dart' as shelf;
@@ -163,12 +161,7 @@
       var hashStream = pair.last;
 
       // Allow the asset to be cached based on its content hash.
-      var sha = new SHA1();
-      await hashStream.forEach((chunk) {
-        sha.add(chunk);
-      });
-
-      var assetSha = BASE64.encode(sha.close());
+      var assetSha = await sha1Stream(hashStream);
       var previousSha = request.headers["if-none-match"];
 
       var headers = {
diff --git a/lib/src/utils.dart b/lib/src/utils.dart
index 569a04f..9683223 100644
--- a/lib/src/utils.dart
+++ b/lib/src/utils.dart
@@ -8,7 +8,8 @@
 import 'dart:io';
 import 'dart:math' as math;
 
-import "package:crypto/crypto.dart";
+import "package:convert/convert.dart";
+import "package:crypto/crypto.dart" as crypto;
 import 'package:path/path.dart' as path;
 import "package:stack_trace/stack_trace.dart";
 
@@ -486,10 +487,33 @@
 }
 
 /// Returns the hex-encoded sha1 hash of [source].
-String sha1(String source) {
-  var sha = new SHA1();
-  sha.add(source.codeUnits);
-  return CryptoUtils.bytesToHex(sha.close());
+String sha1(String source) =>
+    hex.encode(crypto.sha1.convert(source.codeUnits).bytes);
+
+/// Returns the base64-encoded sha1 hash of [stream].
+Future<String> sha1Stream(Stream<List<int>> stream) async {
+  crypto.Digest digest;
+
+  var digestSink = new ChunkedConversionSink<crypto.Digest>.withCallback(
+      (digests) {
+    digest = digests.single;
+  });
+
+  var byteSink = crypto.sha1.startChunkedConversion(digestSink);
+
+  await stream.forEach((chunk) {
+    byteSink.add(chunk);
+  });
+
+  byteSink.close();
+
+  // TODO(rnystrom): this call to `close` should not be needed. Remove when
+  //   https://github.com/dart-lang/crypto/issues/33
+  // is fixed.
+  // Does not cause any problems in the mean time.
+  digestSink.close();
+
+  return BASE64.encode(digest.bytes);
 }
 
 /// Configures [future] so that its result (success or exception) is passed on
diff --git a/pubspec.yaml b/pubspec.yaml
index aedae65..e49c490 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -10,7 +10,8 @@
   args: "^0.13.0"
   barback: "^0.15.2"
   compiler_unsupported: "^1.13.0-dev"
-  crypto: "^0.9.0"
+  convert: "^1.0.0"
+  crypto: "^1.0.0"
   glob: "^1.0.0"
   http: "^0.11.0"
   http_multi_server: ">=1.0.0 <3.0.0"
diff --git a/test/global/activate/activate_hosted_after_git_test.dart b/test/global/activate/activate_hosted_after_git_test.dart
index 50e1c8d..000f041 100644
--- a/test/global/activate/activate_hosted_after_git_test.dart
+++ b/test/global/activate/activate_hosted_after_git_test.dart
@@ -2,8 +2,6 @@
 // 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:pub/src/io.dart';
-
 import '../../descriptor.dart' as d;
 import '../../test_pub.dart';
 
diff --git a/test/transformer/gets_and_upgrades_a_package_with_a_dev_transformer_test.dart b/test/transformer/gets_and_upgrades_a_package_with_a_dev_transformer_test.dart
index c47a226..d64303b 100644
--- a/test/transformer/gets_and_upgrades_a_package_with_a_dev_transformer_test.dart
+++ b/test/transformer/gets_and_upgrades_a_package_with_a_dev_transformer_test.dart
@@ -6,7 +6,6 @@
 
 import '../descriptor.dart' as d;
 import '../test_pub.dart';
-import '../serve/utils.dart';
 
 // Regression test for #1369.
 main() {