Readme improvements (#36)

diff --git a/README.md b/README.md
index 5f8fad8..e8d1009 100644
--- a/README.md
+++ b/README.md
@@ -1,24 +1,96 @@
-# Library of cryptographic functions for Dart
+# Cryptographic hashing functions for Dart
 
-A set of cryptographic functions implemented in pure Dart.
+A set of cryptographic hashing functions implemented in pure Dart
 
+The following hashing algorithms are supported:
+
+* SHA-1
+* SHA-256
 * MD5
-* SHA1
-* SHA265
-* HMAC
-* Converting a list of bytes into a hex string
-* Converting a list of bytes into a base64-encoded string.
-* Converting a Base 64 encoded String into list of bytes.
+* HMAC (i.e. HMAC-MD5, HMAC-SHA1, HMAC-SHA256)
 
-## Test status
+## Usage
 
-See http://build.chromium.org/p/client.dart.packages/console
+### Digest on a single input
 
-The individual builders are at:
+To hash a list of bytes, invoke the [`convert`][convert] method on the
+[`sha1`][sha1-obj], [`sha256`][sha256-obj] or [`md5`][md5-obj]
+objects.
 
-http://build.chromium.org/p/client.dart.packages/builders/packages-windows-crypto
-http://build.chromium.org/p/client.dart.packages/builders/packages-linux-crypto
-http://build.chromium.org/p/client.dart.packages/builders/packages-mac-crypto
+```dart
+import 'package:crypto/crypto.dart';
+import 'dart:convert'; // for the UTF8.encode method
+
+void main() {
+  var bytes = UTF8.encode("foobar"); // data being hashed
+
+  var digest = sha1.convert(bytes);
+
+  print("Digest as bytes: ${digest.bytes}");
+  print("Digest as hex string: $digest");
+}
+```
+
+### Digest on chunked input
+
+If the input data is not available as a _single_ list of bytes, use
+the chunked conversion approach.
+
+Invoke the [`startChunkedConversion`][startChunkedConversion] method
+to create a sink for the input data. On the sink, invoke the `add`
+method for each chunk of input data, and invoke the `close` method
+when all the chunks have been added. The digest can then be retrieved
+from the `Sink<Digest>` used to create the input data sink.
+
+```dart
+import 'dart:convert';
+import 'package:crypto/crypto.dart';
+import 'package:crypto/src/digest_sink.dart';
+
+void main() {
+  var firstChunk = UTF8.encode("foo");
+  var secondChunk = UTF8.encode("bar");
+
+  var ds = new DigestSink();
+  var s = sha1.startChunkedConversion(ds);
+  s.add(firstChunk);
+  s.add(secondChunk); // call `add` for every chunk of input data
+  s.close();
+  var digest = ds.value;
+
+  print("Digest as bytes: ${digest.bytes}");
+  print("Digest as hex string: $digest");
+}
+```
+
+The above example uses the `DigestSink` class that comes with the
+_crypto_ package. Its `value` property retrieves the last `Digest`
+that was added to it, which is fine for this purpose since only one
+`Digest` is added to it when the data sink's `close` method was
+invoked.
+
+### HMAC
+
+Create an instance of the [`Hmac`][Hmac] class with the hash function
+and secret key being used.  The object can then be used like the other
+hash calculating objects.
+
+```dart
+import 'dart:convert';
+import 'package:crypto/crypto.dart';
+import 'package:crypto/src/digest_sink.dart';
+
+void main() {
+  var key = UTF8.encode('p@ssw0rd');
+  var bytes = UTF8.encode("foobar");
+
+  var hmacSha256 = new Hmac(sha256, key); // HMAC-SHA256
+  var digest = hmacSha256.convert(bytes);
+  
+  print("HMAC digest as bytes: ${digest.bytes}");
+  print("HMAC digest as hex string: $digest");
+}
+```
 
 ## Disclaimer
 
@@ -30,4 +102,14 @@
 
 Please file feature requests and bugs at the [issue tracker][tracker].
 
-[tracker]: https://github.com/dart-lang/crypto/issues
+[convert]: https://www.dartdocs.org/documentation/crypto/latest/crypto/Hash/convert.html
+[Digest]: https://www.dartdocs.org/documentation/crypto/latest/crypto/Digest-class.html
+[Hmac]: https://www.dartdocs.org/documentation/crypto/latest/crypto/Hmac-class.html
+[MD5]: https://www.dartdocs.org/documentation/crypto/latest/crypto/MD5-class.html
+[Sha1]: https://www.dartdocs.org/documentation/crypto/latest/crypto/Sha1-class.html
+[Sha256]: https://www.dartdocs.org/documentation/crypto/latest/crypto/Sha256-class.html
+[md5-obj]: https://www.dartdocs.org/documentation/crypto/latest/crypto/md5.html
+[sha1-obj]: https://www.dartdocs.org/documentation/crypto/latest/crypto/sha1.html
+[sha256-obj]: https://www.dartdocs.org/documentation/crypto/latest/crypto/sha256.html
+[startChunkedConversion]: https://www.dartdocs.org/documentation/crypto/latest/crypto/Hash/startChunkedConversion.html
+[tracker]: https://github.com/dart-lang/crypto/issues
\ No newline at end of file