public void HashMode() { var url = "https://gist.github.com/nixberg/49e0389945c217fe535954597fe4a1a1/raw/74c5405e15a11bab4396d1472c78ae1b4d223f3e/hashkat.json"; var json = string.Empty; using (var webClient = new System.Net.WebClient()) { json = webClient.DownloadString(url); } var kats = JsonConvert.DeserializeObject <List <HashKAT> >(json); foreach (var kat in kats) { var msg = ParseHex(kat.msg); var md = ParseHex(kat.md); var msgStream = new MemoryStream(msg); var newMDStream = new MemoryStream((int)md.Length); var xooyak = new Xoodyak(); xooyak.Absorb(msgStream, msg.Length); xooyak.Squeeze(newMDStream, md.Length); Assert.Equal(md.Length, newMDStream.Length); Assert.Equal(md, newMDStream.ToArray()); } }
public void KeyedMode() { var url = "https://gist.github.com/nixberg/d14efa8c34dd4e88cbd85aeb18cb0777/raw/45715afd6a923d2ab3a4d60c90516de0540f757c/aeadkat.json"; var json = string.Empty; using (var webClient = new System.Net.WebClient()) { json = webClient.DownloadString(url); } var kats = JsonConvert.DeserializeObject <List <AeadKAT> >(json); foreach (var kat in kats) { var key = ParseHex(kat.key); var nonce = ParseHex(kat.nonce); var pt = ParseHex(kat.pt); var ad = ParseHex(kat.ad); var ct = ParseHex(kat.ct); var tag = new List <byte>(ct).GetRange((int)pt.Length, ct.Length - pt.Length).ToArray(); // Encrypt: var nonceStream = new MemoryStream(ParseHex(kat.nonce)); var ptStream = new MemoryStream(pt); var adStream = new MemoryStream(ad); var ctStream = new MemoryStream(ct); var newCTStream = new MemoryStream((int)ct.Length); var xooyak = new Xoodyak(key, null, null); xooyak.Absorb(nonceStream, nonce.Length); xooyak.Absorb(adStream, ad.Length); xooyak.Encrypt(ptStream, newCTStream, pt.Length); xooyak.Squeeze(newCTStream, tag.Length); Assert.Equal(ct.Length, newCTStream.Length); Assert.Equal(ct, newCTStream.ToArray()); // Decrypt: nonceStream.Position = 0; ptStream.Position = 0; adStream.Position = 0; ctStream.Position = 0; var newPTStream = new MemoryStream((int)pt.Length); var newTagStream = new MemoryStream((int)tag.Length); xooyak = new Xoodyak(key, null, null); xooyak.Absorb(nonceStream, nonce.Length); xooyak.Absorb(adStream, ad.Length); xooyak.Decrypt(ctStream, newPTStream, pt.Length); xooyak.Squeeze(newTagStream, tag.Length); Assert.Equal(pt.Length, newPTStream.Length); Assert.Equal(pt, newPTStream.ToArray()); Assert.Equal(tag.Length, newTagStream.Length); Assert.Equal(tag, newTagStream.ToArray()); } }