summary refs log tree commit diff
path: root/crypto/test/src/openssl/test/AllTests.cs
blob: 9212081795b4a027d927fabd544955115780708c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
using System;
using System.IO;
using System.Text;

using NUnit.Core;
using NUnit.Framework;

using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Generators;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.Utilities.Test;

namespace Org.BouncyCastle.OpenSsl.Tests
{
	[TestFixture]
	public class AllTests
	{
		private class Password
			: IPasswordFinder
		{
			private readonly char[] password;

			public Password(
				char[] word)
			{
				this.password = (char[]) word.Clone();
			}

			public char[] GetPassword()
			{
				return (char[]) password.Clone();
			}
		}
		
		[Suite]
		public static TestSuite Suite
		{
			get
			{
				TestSuite suite = new TestSuite("OpenSSL Tests");
				suite.Add(new AllTests());
				return suite;
			}
		}

		[Test]
		public void TestOpenSsl()
		{
			Org.BouncyCastle.Utilities.Test.ITest[] tests = new Org.BouncyCastle.Utilities.Test.ITest[]{
				new ReaderTest(),
				new WriterTest()
			};

			foreach (Org.BouncyCastle.Utilities.Test.ITest test in tests)
			{
				SimpleTestResult result = (SimpleTestResult)test.Perform();

				if (!result.IsSuccessful())
				{
					Assert.Fail(result.ToString());
				}
			}
		}

		[Test]
		public void TestPkcs8Encrypted()
		{
			IAsymmetricCipherKeyPairGenerator kpGen = GeneratorUtilities.GetKeyPairGenerator("RSA");
			kpGen.Init(new KeyGenerationParameters(new SecureRandom(), 1024));

			AsymmetricKeyParameter privKey = kpGen.GenerateKeyPair().Private;

			// FIXME see PbeUtilities and Pkcs8Generator
//			EncryptedTest(privKey, Pkcs8Generator.Aes256Cbc);
//			EncryptedTest(privKey, Pkcs8Generator.Des3Cbc);
			EncryptedTest(privKey, Pkcs8Generator.PbeSha1_3DES);
		}

		private void EncryptedTest(AsymmetricKeyParameter privKey, string algorithm)
		{
			StringWriter sw = new StringWriter();
			PemWriter pWrt = new PemWriter(sw);
			Pkcs8Generator pkcs8 = new Pkcs8Generator(privKey, algorithm);
			pkcs8.Password = "hello".ToCharArray();

			pWrt.WriteObject(pkcs8);
			pWrt.Writer.Close();

			String result = sw.ToString();

			PemReader pRd = new PemReader(new StringReader(result), new Password("hello".ToCharArray()));

			AsymmetricKeyParameter rdKey = (AsymmetricKeyParameter)pRd.ReadObject();
			pRd.Reader.Close();

			Assert.AreEqual(privKey, rdKey);
		}

		[Test]
		public void TestPkcs8Plain()
		{
			IAsymmetricCipherKeyPairGenerator kpGen = GeneratorUtilities.GetKeyPairGenerator("RSA");
			kpGen.Init(new KeyGenerationParameters(new SecureRandom(), 1024));

			AsymmetricKeyParameter privKey = kpGen.GenerateKeyPair().Private;

			StringWriter sw = new StringWriter();
			PemWriter pWrt = new PemWriter(sw);

			Pkcs8Generator pkcs8 = new Pkcs8Generator(privKey);
			pWrt.WriteObject(pkcs8);
			pWrt.Writer.Close();

			string result = sw.ToString();

			PemReader pRd = new PemReader(new StringReader(result), new Password("hello".ToCharArray()));

			AsymmetricKeyParameter rdKey = (AsymmetricKeyParameter)pRd.ReadObject();
			pRd.Reader.Close();

			Assert.AreEqual(privKey, rdKey);
		}

        public static void Main(
			string[] args)
        {
            //junit.textui.TestRunner.run(suite());
            EventListener el = new NullListener();
            Suite.Run(el);
        }
	}
}