private void Dump(SaveType dumpType) { SaveFileDialog fileDialog = new SaveFileDialog(); if (DialogResult.OK == fileDialog.ShowDialog()) { switch (dumpType) { case SaveType.Node: Asn1.Encode(fileDialog.FileName, this.Asn1Node); break; case SaveType.Data: Asn1.EncodeData(fileDialog.FileName, this.Asn1Node); break; case SaveType.Text: Asn1.ExportText(fileDialog.FileName, this.Asn1Node); break; default: break; } } }
private void UpdateHexViewerData() { byte[] data; if (rootNode != null) { using (MemoryStream ms = new MemoryStream()) { Asn1.Encode(ms, rootNode); data = ms.ToArray(); } } else { data = new byte[0]; } hexViewer.View(data); Asn1TreeNode selectedNode = treeView1.SelectedNode as Asn1TreeNode; if (selectedNode != null) { // TODO: length is incorrect for indefinite length nodes hexViewer.Highlight((int)selectedNode.Asn1Node.StartByte, (int)(Asn1.GetTotalByteCount(selectedNode.Asn1Node))); } }
public void Should_serialize_integer_from_bytes() { // Arrange var byteArrays = new byte[][] { new byte[] { 0 }, new byte[] { 127 }, new byte[] { 0, 127 }, new byte[] { 128 }, new byte[] { 1, 0, 0 }, new byte[0], new byte[] { 0, 165, 163, 214, 2, 169, 62 } }.Select(data => new DerInteger(data)); var expectedSerializedValues = new[] { new byte[] { 2, 1, 0 }, new byte[] { 2, 1, 127 }, new byte[] { 2, 2, 0, 127 }, new byte[] { 2, 2, 0, 128 }, // da das 1. Bit zur Vorzeichenerkennung genutzt wird, wird bei >= 128 ein 0-Byte voran gestellt new byte[] { 2, 3, 1, 0, 0 }, new byte[] { 2, 0 }, new byte[] { 2, 7, 0, 165, 163, 214, 2, 169, 62 } }; // Act var result = byteArrays.Select(i => Asn1.Encode(i)).ToArray(); // Assert result.Length.Should().Be(expectedSerializedValues.Length); for (int i = 0; i < expectedSerializedValues.Length; i++) { result[i].Should().Equal(expectedSerializedValues[i]); } }
public void Should_serialize_a_sequence() { // Arrange var sequence = new Sequence(new ObjectIdentifier(new Oid("2.5.4.8")), new UTF8String("NRW")); var bytes = Asn1.Encode(sequence); // Assert bytes.Should().Equal(0x30, 0x0A, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0C, 0x03, 0x4E, 0x52, 0x57); }
public void Should_serialize_integer_from_int() { var ints = new int[] { 0, 127, 128, 256 * 256 }; var asn1ints = ints.Select(i => new DerInteger(i)); var bytes = asn1ints.Select(i => Asn1.Encode(i)).ToArray(); bytes[0].Should().Equal(0x02, 1, 0); bytes[1].Should().Equal(0x02, 1, 127); bytes[2].Should().Equal(0x02, 2, 0, 128); // da das 1. Bit zur Vorzeichenerkennung genutzt wird, wird bei >= 128 ein 0-Byte voran gestellt bytes[3].Should().Equal(0x02, 3, 1, 0, 0); }
public void Should_serialize_a_certificate_signing_request() { /* * var keyManager = new FileKeyStore(Environment.CurrentDirectory); * var rsa = keyManager.GetOrCreateKey("test.startliste.info"); * var key = rsa.ExportParameters(true); */ var key = RSAPrivateKey.ParsePem(@" -----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAq57sJKTDY5K3w9Gf40xDhpHwyOshO2EXEg4doP4tX6+eAHUP h04Kb3/X2jfgdQHGjTYMyv9Q0AZ5msMOUjxnxbt1GvhVih/yaDOqjysWbBXbRWFZ 5eBk6PHbYmPTVcfE9RyyNS8bp9ykZgJoU0Q1V2UxjQX5JkMJLnFxegKkw/fSZizj IlUSjnDCP13Gs/cmualyqxlZipsSzaAuasoeIT/qanick3UL+tATIJJ8Zytacntj Gca9ZMs6xtmvSkumEd2d6pBsIItEwRIG0+9MFb7q7yTySiewFs/+5duEpIL+K83k IX0nB+15TsjZFnJ+6rLY+YRifjc8vVZHeFD8iwIDAQABAoIBAERetQuqGe7mqc/Y iH5YSQRoyoh4Z45M0RCP0Azthaz7fRIIkI2iMPUXdKoKHaDveqaR9EnAqfSdx784 WtG3H849rlr2uLkkngEWKCoOC8o2cNq0fEhge0Lz6ybIxw4C3juZ2YLnh/h5JYNA DUiywR9WgIWCbi3ogdVfO0pUmEg7IG6Q0KLPicabLwcrBKDAloBdS/q7aeFrSEIG 0Hu+CJCKPterdYbFmJ5zHFmOYvToIkX5AYT+G1EfaGx4FHly0wC1eSZIaU/krNd/ U9vdMA2gd8alcG/GwOih5RunIJoGad20hh6gLsw8KHX0s2GDlRvk2Q71cH2YEdo4 SXe7Tw0CgYEA3epZNvO/gZj/YM5ljcn6Hxf2/RscqreH2K4GM0yTp6OEOvm6Dg4t 9JOA+6YxT3Dbf8aEcWDleDcJJY4EfkL4Lqq2dn4vbF+AevVAH1Ml6/ZJwvFuqcMk 9g8FJQqO/Ul/MrFHhi4oXzg3dZPeMKZTN2ACZHiKTwzC0GtCzXdRGVUCgYEAxfsA 1CCUpgsjKvhBxLvpVqIEi5gzMarO7UvgVprvZ/0NFGkgrQC5c3Hhs5mrsf8pB1Gf EJvTaFGGgr9o2+JzVXs9PJ1njEoelS35PUrHZ8raW2TWJQVAToCfzbylPTY0sJEl iX++fJJa7AjgYPcriOiZbtBTZHBiqpdAKsC+Pl8CgYEAh25J3BuNuE3jLPVJTOsC 1o8NkRJGwHkZUseByTTmt9w3Crb1MTa+HREYGnwmg9DgZG6GzZrQ8DjGQEEXxOai B/jvOglwb7co9eFOrM9VyVeZVHt7iecqW3B3N0/mS/XaxtkiSWVKBjKMxhjj9NTM 3HKfgyl9Xxjum7uaHULAH7ECgYATPwJmnMA2oBCMJdQm7umRHXD5rRMU+fjhwqWN ZcRuRIBYApxFlTNyEJkTX5X8WMTBTGL9N1jG5F4CKd9kuM/jeHaMhPTDA5WThQOc vL9DzMmLZvMWaDtHJmPimTsrBzD6FTIj+sIm1Ad4uKgvZPfbeFkqF6BzvCUrVkbL oS8dWwKBgGevHLbGPIeNjrAN3YK3T0VaeB60aigK1PRb+qHL4TDngK2wG6Xy6XVd iQoWlyFgiNQ/qJcD8dcVwT83KvogfIGb/PLZ9LLRkt4g4ZEKj76gaQIr/U/DVB2I yXgq378FifWsRemLckRjOC+T0brxqxzqPflbe+c2AHZgMSjuRplC -----END RSA PRIVATE KEY-----").Key; var data = new CertificateRequestData("test.startliste.info", key) { C = "DE", S = "NRW", L = "Werther", O = "Aero Club Bünde", OU = "" }; var csr = Pkcs10.Encode(data); var der = Pkcs10.EncodeAsDer(data); var base64 = Pkcs10.EncodeAsBase64(data); var bytes = Asn1.Encode(csr); Assert.Equal( @"-----BEGIN NEW CERTIFICATE REQUEST----- MIICZDCCAUwCAQAwHzEdMBsGA1UEAwwUdGVzdC5zdGFydGxpc3RlLmluZm8wggEi MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrnuwkpMNjkrfD0Z/jTEOGkfDI 6yE7YRcSDh2g/i1fr54AdQ+HTgpvf9faN+B1AcaNNgzK/1DQBnmaww5SPGfFu3Ua +FWKH/JoM6qPKxZsFdtFYVnl4GTo8dtiY9NVx8T1HLI1Lxun3KRmAmhTRDVXZTGN BfkmQwkucXF6AqTD99JmLOMiVRKOcMI/Xcaz9ya5qXKrGVmKmxLNoC5qyh4hP+pq eJyTdQv60BMgknxnK1pye2MZxr1kyzrG2a9KS6YR3Z3qkGwgi0TBEgbT70wVvurv JPJKJ7AWz/7l24Skgv4rzeQhfScH7XlOyNkWcn7qstj5hGJ+Nzy9Vkd4UPyLAgMB AAGgADANBgkqhkiG9w0BAQsFAAOCAQEALuD1Xha1+qUH1eiXlMO6xiFUtKPMnwR1 XgYf7OILUnFvG4gdE80clIKR8smLOg59nURhIzHhPRacT5jRmcbl4zruZhL8yCuV JOacbdoV69iElZ4BODJwHmJPGajcAw89bUFLezPwRflDlVuiw8/ldAQWsyWtnKVI n9IgTWDEDboUIrUgv+sRwEue+fOCEtVOj1X4Yi0jOCsnihzn0pQNvvU/w9Vpe5Jr Gm1FyD6z3pdGktxJKW3ns+xYcova+2nQeSbuVFHA/OTmIckrDa87EUJNbNVWLtwo FXTQmRtze3w5yKOadkSEyr6FG3qq+3IukRgiuxK12SsN7dE0sIO7ow== -----END NEW CERTIFICATE REQUEST-----".Replace("\r\n", "\n"), base64); File.WriteAllBytes(@"request.der", der); File.WriteAllText(@"request.txt", base64); // openssl req -in r:\request.txt -noout -text }