38 lines
1.5 KiB
C#
38 lines
1.5 KiB
C#
using System;
|
|
using System.Management.Automation.Internal;
|
|
using System.Text;
|
|
using Xunit;
|
|
|
|
namespace PSTests.Parallel
|
|
{
|
|
public static class CryptoUntilsTests
|
|
{
|
|
[Fact]
|
|
public static void TestSessionKeyExchange()
|
|
{
|
|
using (var cryptoClient = PSRSACryptoServiceProvider.GetRSACryptoServiceProviderForClient())
|
|
using (var cryptoServer = PSRSACryptoServiceProvider.GetRSACryptoServiceProviderForServer())
|
|
{
|
|
// generate, export, import public key
|
|
cryptoClient.GenerateKeyPair();
|
|
// public key generated by client
|
|
string publicKey = cryptoClient.GetPublicKeyAsBase64EncodedString();
|
|
cryptoServer.ImportPublicKeyFromBase64EncodedString(publicKey); // sent to and imported by server
|
|
|
|
// generate, export, import session key
|
|
cryptoServer.GenerateSessionKey(); // server provides the session key?
|
|
string sessionKey = cryptoServer.SafeExportSessionKey();
|
|
cryptoClient.ImportSessionKeyFromBase64EncodedString(sessionKey);
|
|
|
|
// encrypt
|
|
byte[] plainText = Encoding.UTF8.GetBytes("here is a message");
|
|
byte[] cipherText = cryptoClient.EncryptWithSessionKey(plainText);
|
|
|
|
// decrypt
|
|
byte[] decrypt = cryptoServer.DecryptWithSessionKey(cipherText);
|
|
|
|
Assert.Equal(plainText, decrypt);
|
|
}
|
|
}
|
|
}
|
|
}
|