diff --git a/analysis_options.yaml b/analysis_options.yaml
index 092773b..626868e 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -25,5 +25,6 @@
      - library_prefixes
      - non_constant_identifier_names
      - prefer_is_not_empty
+     - prefer_single_quotes
      - slash_for_doc_comments
      - type_init_formals
diff --git a/lib/src/hash_sink.dart b/lib/src/hash_sink.dart
index 369d3e3..ef38780 100644
--- a/lib/src/hash_sink.dart
+++ b/lib/src/hash_sink.dart
@@ -127,7 +127,7 @@
 
     if (_lengthInBytes > _maxMessageLengthInBytes) {
       throw new UnsupportedError(
-          "Hashing is unsupported for messages with more than 2^64 bits.");
+          'Hashing is unsupported for messages with more than 2^64 bits.');
     }
 
     var lengthInBits = _lengthInBytes * bitsPerByte;
diff --git a/lib/src/hmac.dart b/lib/src/hmac.dart
index 5caed75..b043a56 100644
--- a/lib/src/hmac.dart
+++ b/lib/src/hmac.dart
@@ -85,13 +85,13 @@
 
   @override
   void add(List<int> data) {
-    if (_isClosed) throw new StateError("HMAC is closed");
+    if (_isClosed) throw new StateError('HMAC is closed');
     _innerSink.add(data);
   }
 
   @override
   void addSlice(List<int> data, int start, int end, bool isLast) {
-    if (_isClosed) throw new StateError("HMAC is closed");
+    if (_isClosed) throw new StateError('HMAC is closed');
     _innerSink.addSlice(data, start, end, isLast);
   }
 
diff --git a/lib/src/md5.dart b/lib/src/md5.dart
index f666ef1..2729c5c 100644
--- a/lib/src/md5.dart
+++ b/lib/src/md5.dart
@@ -89,8 +89,8 @@
     var c = digest[2];
     var d = digest[3];
 
-    var e;
-    var f;
+    int e;
+    int f;
 
     for (var i = 0; i < 64; i++) {
       if (i < 16) {
diff --git a/test/hmac_md5_test.dart b/test/hmac_md5_test.dart
index 68fa473..49e60f7 100644
--- a/test/hmac_md5_test.dart
+++ b/test/hmac_md5_test.dart
@@ -2,13 +2,13 @@
 // 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:crypto/crypto.dart";
-import "package:test/test.dart";
+import 'package:crypto/crypto.dart';
+import 'package:test/test.dart';
 
 import 'utils.dart';
 
 void main() {
-  group("standard vector", () {
+  group('standard vector', () {
     for (var i = 0; i < _inputs.length; i++) {
       test(_macs[i], () {
         expectHmacEquals(md5, _inputs[i], _keys[i], _macs[i]);
diff --git a/test/hmac_sha1_test.dart b/test/hmac_sha1_test.dart
index 28eec21..c80b115 100644
--- a/test/hmac_sha1_test.dart
+++ b/test/hmac_sha1_test.dart
@@ -3,13 +3,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // Library tag to allow the test to run on Dartium.
-import "package:crypto/crypto.dart";
-import "package:test/test.dart";
+import 'package:crypto/crypto.dart';
+import 'package:test/test.dart';
 
 import 'utils.dart';
 
 void main() {
-  group("standard vector", () {
+  group('standard vector', () {
     for (var i = 0; i < _inputs.length; i++) {
       test(_macs[i], () {
         expectHmacEquals(sha1, _inputs[i], _keys[i], _macs[i]);
diff --git a/test/hmac_sha256_test.dart b/test/hmac_sha256_test.dart
index 6c63268..a707813 100644
--- a/test/hmac_sha256_test.dart
+++ b/test/hmac_sha256_test.dart
@@ -3,13 +3,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // Library tag to allow the test to run on Dartium.
-import "package:crypto/crypto.dart";
-import "package:test/test.dart";
+import 'package:crypto/crypto.dart';
+import 'package:test/test.dart';
 
 import 'utils.dart';
 
 void main() {
-  group("standard vector", () {
+  group('standard vector', () {
     for (var i = 0; i < _inputs.length; i++) {
       test(_macs[i], () {
         expectHmacEquals(sha256, _inputs[i], _keys[i], _macs[i]);
diff --git a/test/sha1_test.dart b/test/sha1_test.dart
index c0575e3..dffb400 100644
--- a/test/sha1_test.dart
+++ b/test/sha1_test.dart
@@ -2,14 +2,14 @@
 // 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 "dart:async";
-import "dart:convert";
+import 'dart:async';
+import 'dart:convert';
 
-import "package:crypto/crypto.dart";
-import "package:test/test.dart";
+import 'package:crypto/crypto.dart';
+import 'package:test/test.dart';
 
 void main() {
-  group("with a chunked converter", () {
+  group('with a chunked converter', () {
     test('add may not be called after close', () {
       var sink =
           sha1.startChunkedConversion(new StreamController<Digest>().sink);
@@ -31,7 +31,7 @@
           expectAsync1((accumulated) {
         expect(accumulated.length, equals(1));
         expect(accumulated.first.toString(),
-            equals("da39a3ee5e6b4b0d3255bfef95601890afd80709"));
+            equals('da39a3ee5e6b4b0d3255bfef95601890afd80709'));
       }));
 
       var outer = sha1.startChunkedConversion(inner);
@@ -39,7 +39,7 @@
     });
   });
 
-  group("standard vector", () {
+  group('standard vector', () {
     for (var i = 0; i < _inputs.length; i++) {
       test(_digests[i], () {
         expect(sha1.convert(_inputs[i]).toString(), equals(_digests[i]));
@@ -51,7 +51,7 @@
 // Standard test vectors from:
 //   http://csrc.nist.gov/groups/STM/cavp/documents/shs/shabytetestvectors.zip
 
-const _inputs = const [
+const _inputs = const <List<int>>[
   const [],
   const [0x36],
   const [0x19, 0x5a],
diff --git a/test/sha256_test.dart b/test/sha256_test.dart
index 50ae0b2..aa3f2b8 100644
--- a/test/sha256_test.dart
+++ b/test/sha256_test.dart
@@ -2,14 +2,14 @@
 // 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 "dart:async";
-import "dart:convert";
+import 'dart:async';
+import 'dart:convert';
 
-import "package:test/test.dart";
-import "package:crypto/crypto.dart";
+import 'package:test/test.dart';
+import 'package:crypto/crypto.dart';
 
 void main() {
-  group("with a chunked converter", () {
+  group('with a chunked converter', () {
     test('add may not be called after close', () {
       var sink =
           sha256.startChunkedConversion(new StreamController<Digest>().sink);
@@ -33,8 +33,8 @@
         expect(
             accumulated.first.toString(),
             equals(
-                "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b8"
-                "55"));
+                'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b8'
+                '55'));
       }));
 
       var outer = sha256.startChunkedConversion(inner);
@@ -42,7 +42,7 @@
     });
   });
 
-  group("standard vector", () {
+  group('standard vector', () {
     for (var i = 0; i < _inputs.length; i++) {
       test(_digests[i], () {
         expect(sha256.convert(_inputs[i]).toString(), equals(_digests[i]));
@@ -54,7 +54,7 @@
 // Standard test vectors from:
 //   http://csrc.nist.gov/groups/STM/cavp/documents/shs/shabytetestvectors.zip
 
-const _inputs = const [
+const _inputs = const <List<int>>[
   const [],
   const [0xd3],
   const [0x11, 0xaf],
