crypto: add test for ChaCha20 key derivation
diff --git a/src/crypto.rs b/src/crypto.rs
index 21873b8..52816a3 100644
--- a/src/crypto.rs
+++ b/src/crypto.rs
@@ -492,4 +492,42 @@
         ];
         assert_eq!(&hdr_key, &expected_server_hdr_key);
     }
+
+    #[test]
+    fn derive_chacha20_secrets() {
+        let secret = [
+            0x9a, 0xc3, 0x12, 0xa7, 0xf8, 0x77, 0x46, 0x8e, 0xbe, 0x69, 0x42,
+            0x27, 0x48, 0xad, 0x00, 0xa1, 0x54, 0x43, 0xf1, 0x82, 0x03, 0xa0,
+            0x7d, 0x60, 0x60, 0xf6, 0x88, 0xf3, 0x0f, 0x21, 0x63, 0x2b,
+        ];
+
+        let aead = Algorithm::ChaCha20_Poly1305;
+
+        let mut pkt_key = [0; 32];
+        let mut pkt_iv = [0; 12];
+        let mut hdr_key = [0; 32];
+
+        assert!(derive_pkt_key(aead, &secret, &mut pkt_key).is_ok());
+        let expected_pkt_key = [
+            0xc6, 0xd9, 0x8f, 0xf3, 0x44, 0x1c, 0x3f, 0xe1, 0xb2, 0x18, 0x20,
+            0x94, 0xf6, 0x9c, 0xaa, 0x2e, 0xd4, 0xb7, 0x16, 0xb6, 0x54, 0x88,
+            0x96, 0x0a, 0x7a, 0x98, 0x49, 0x79, 0xfb, 0x23, 0xe1, 0xc8,
+        ];
+        assert_eq!(&pkt_key, &expected_pkt_key);
+
+        assert!(derive_pkt_iv(aead, &secret, &mut pkt_iv).is_ok());
+        let expected_pkt_iv = [
+            0xe0, 0x45, 0x9b, 0x34, 0x74, 0xbd, 0xd0, 0xe4, 0x4a, 0x41, 0xc1,
+            0x44,
+        ];
+        assert_eq!(&pkt_iv, &expected_pkt_iv);
+
+        assert!(derive_hdr_key(aead, &secret, &mut hdr_key).is_ok());
+        let expected_hdr_key = [
+            0x25, 0xa2, 0x82, 0xb9, 0xe8, 0x2f, 0x06, 0xf2, 0x1f, 0x48, 0x89,
+            0x17, 0xa4, 0xfc, 0x8f, 0x1b, 0x73, 0x57, 0x36, 0x85, 0x60, 0x85,
+            0x97, 0xd0, 0xef, 0xcb, 0x07, 0x6b, 0x0a, 0xb7, 0xa7, 0xa4,
+        ];
+        assert_eq!(&hdr_key, &expected_hdr_key);
+    }
 }