Skip to content

Commit

Permalink
fix rsa key im/export, en/decrypt, sign/verify
Browse files Browse the repository at this point in the history
Signed-off-by: cocosip <1185513330@qq.com>
  • Loading branch information
cocosip committed Feb 18, 2024
1 parent 02ec813 commit 8e973d6
Show file tree
Hide file tree
Showing 7 changed files with 133 additions and 75 deletions.
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<NetCoreFx>net8.0</NetCoreFx>

<!--Volo ABP packages-->
<VoloAbpPackageVersion>8.0.2</VoloAbpPackageVersion>
<VoloAbpPackageVersion>8.0.3</VoloAbpPackageVersion>

</PropertyGroup>
</Project>
10 changes: 5 additions & 5 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -108,8 +108,8 @@
<RuntimeHostConfigurationOption Include="System.Runtime.Loader.UseRidGraph" Value="true" />
<PackageVersion Include="aliyun-net-sdk-sts" Version="3.1.2" />
<PackageVersion Include="Aliyun.OSS.SDK.NetCore" Version="2.13.0" />
<PackageVersion Include="AWSSDK.S3" Version="3.7.305.22" />
<PackageVersion Include="AWSSDK.SecurityToken" Version="3.7.300.47" />
<PackageVersion Include="AWSSDK.S3" Version="3.7.305.28" />
<PackageVersion Include="AWSSDK.SecurityToken" Version="3.7.300.53" />
<PackageVersion Include="Azure.Messaging.ServiceBus" Version="7.17.0" />
<PackageVersion Include="Azure.Storage.Blobs" Version="12.19.1" />
<PackageVersion Include="AutoS3" Version="2.0.1" />
Expand Down Expand Up @@ -187,7 +187,7 @@
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
<PackageVersion Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="8.0.0" />
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="8.0.0" />
<PackageVersion Include="Minio" Version="6.0.1" />
<PackageVersion Include="Minio" Version="6.0.2" />
<PackageVersion Include="NSubstitute" Version="5.1.0" />
<PackageVersion Include="NuGet.Versioning" Version="6.7.0" />
<PackageVersion Include="NUglify" Version="1.21.0" />
Expand Down Expand Up @@ -227,9 +227,9 @@
<PackageVersion Include="System.Text.Encodings.Web" Version="8.0.0" />
<PackageVersion Include="System.Text.Json" Version="8.0.0" />
<PackageVersion Include="Moq" Version="4.20.70" />
<PackageVersion Include="xunit" Version="2.6.6" />
<PackageVersion Include="xunit" Version="2.7.0" />
<PackageVersion Include="xunit.extensibility.execution" Version="2.6.2" />
<PackageVersion Include="xunit.runner.visualstudio" Version="2.5.6" />
<PackageVersion Include="xunit.runner.visualstudio" Version="2.5.7" />
<PackageVersion Include="coverlet.collector" Version="6.0.0" />
<PackageVersion Include="ConfigureAwait.Fody" Version="3.3.2" />
<PackageVersion Include="Fody" Version="6.8.0" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public interface IRSAEncryptionService
/// </summary>
/// <param name="privateKeyPem"></param>
/// <returns></returns>
AsymmetricKeyParameter ImportPrivateKeyPemPkcs8(string privateKeyPem);
AsymmetricKeyParameter ImportPrivateKeyPkcs8Pem(string privateKeyPem);

/// <summary>
/// RSA加密
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,33 +62,24 @@ public virtual AsymmetricKeyParameter ImportPublicKeyPem(string publicKeyPem)
/// <returns></returns>
public virtual AsymmetricKeyParameter ImportPrivateKey(Stream stream)
{

//Asn1Object asn1Object = Asn1Object.FromStream(stream);

var pkcs1PrivateKeyStructure = RsaPrivateKeyStructure.GetInstance(stream);

// 创建一个Asn1Sequence对象
Asn1Sequence seq = (Asn1Sequence)Asn1Object.FromStream(stream);
// 创建一个RsaPrivateKeyStructure对象
var rsa = RsaPrivateKeyStructure.GetInstance(seq);
// 创建一个RsaPrivateCrtKeyParameters对象
var privateKeyParam = new RsaPrivateCrtKeyParameters(
pkcs1PrivateKeyStructure.Modulus,
pkcs1PrivateKeyStructure.PublicExponent,
pkcs1PrivateKeyStructure.PrivateExponent,
pkcs1PrivateKeyStructure.Prime1,
pkcs1PrivateKeyStructure.Prime2,
pkcs1PrivateKeyStructure.Exponent1,
pkcs1PrivateKeyStructure.Exponent2,
pkcs1PrivateKeyStructure.Coefficient);
return privateKeyParam;


//var publicKeyParam = PublicKeyFactory.CreateKey(privateKeyParam);

//var publicKeyParam = new Publick(pkcs1PrivateKeyStructure.Modulus, pkcs1PrivateKeyStructure.PublicExponent);
rsa.Modulus,
rsa.PublicExponent,
rsa.PrivateExponent,
rsa.Prime1,
rsa.Prime2,
rsa.Exponent1,
rsa.Exponent2,
rsa.Coefficient);

return privateKeyParam;
//var publicKeyParam = new RsaKeyParameters(false, privateKeyParam.Modulus, privateKeyParam.PublicExponent);
//return new AsymmetricCipherKeyPair(publicKeyParam, privateKeyParam);

//Asn1Object asn1Object = Asn1Object.FromStream(stream);
//var privateKeyInfo = PrivateKeyInfo.GetInstance(asn1Object);
//var privateKeyParam = PrivateKeyFactory.CreateKey(privateKeyInfo);
//return privateKeyParam;
}

/// <summary>
Expand All @@ -113,15 +104,16 @@ public virtual AsymmetricKeyParameter ImportPrivateKeyPem(string privateKeyPem)
{
using var stringReader = new StringReader(privateKeyPem);
using var pemReader = new PemReader(stringReader);
return (AsymmetricKeyParameter)pemReader.ReadObject();
var keyPair = (AsymmetricCipherKeyPair)pemReader.ReadObject();
return keyPair.Private;
}

/// <summary>
/// 从Pem中导入PKCS8格式RSA私钥
/// </summary>
/// <param name="privateKeyPem"></param>
/// <returns></returns>
public virtual AsymmetricKeyParameter ImportPrivateKeyPemPkcs8(string privateKeyPem)
public virtual AsymmetricKeyParameter ImportPrivateKeyPkcs8Pem(string privateKeyPem)
{
using var stringReader = new StringReader(privateKeyPem);
using var pemReader = new PemReader(stringReader);
Expand Down Expand Up @@ -203,7 +195,7 @@ public virtual bool VerifySign(AsymmetricKeyParameter privateKeyParam, byte[] da
}

ISigner signer = SignerUtilities.GetSigner(algorithm);
signer.Init(true, privateKeyParam);
signer.Init(false, privateKeyParam);
signer.BlockUpdate(data, 0, data.Length);
return signer.VerifySignature(signature);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -184,9 +184,9 @@ public static string DecryptFromPem(this IRSAEncryptionService rsaEncryptionServ
/// <param name="cipherText"></param>
/// <param name="encoding"></param>
/// <returns></returns>
public static string DecryptFromPemPkcs8(this IRSAEncryptionService rsaEncryptionService, string privateKeyPem, string cipherText, Encoding encoding = null)
public static string DecryptFromPkcs8Pem(this IRSAEncryptionService rsaEncryptionService, string privateKeyPem, string cipherText, Encoding encoding = null)
{
var privateKeyParam = rsaEncryptionService.ImportPrivateKeyPemPkcs8(privateKeyPem);
var privateKeyParam = rsaEncryptionService.ImportPrivateKeyPkcs8Pem(privateKeyPem);
return rsaEncryptionService.Decrypt(privateKeyParam, cipherText, encoding);
}

Expand Down Expand Up @@ -237,6 +237,21 @@ public static string SignFromPem(this IRSAEncryptionService rsaEncryptionService
return rsaEncryptionService.Sign(privateKeyParam, data, algorithm, encoding);
}

/// <summary>
/// RSA使用PKCS8格式私钥加签为Base64
/// </summary>
/// <param name="rsaEncryptionService"></param>
/// <param name="privateKey"></param>
/// <param name="data"></param>
/// <param name="algorithm"></param>
/// <param name="encoding"></param>
/// <returns></returns>
public static string SignFromPkcs8(this IRSAEncryptionService rsaEncryptionService, string privateKey, string data, string algorithm = "SHA256WITHRSA", Encoding encoding = null)
{
var privateKeyParam = rsaEncryptionService.ImportPrivateKeyPkcs8(privateKey);
return rsaEncryptionService.Sign(privateKeyParam, data, algorithm, encoding);
}

/// <summary>
/// RSA使用PKCS8格式Pem私钥加签为Base64
/// </summary>
Expand All @@ -246,9 +261,9 @@ public static string SignFromPem(this IRSAEncryptionService rsaEncryptionService
/// <param name="algorithm"></param>
/// <param name="encoding"></param>
/// <returns></returns>
public static string SignFromPemPkcs8(this IRSAEncryptionService rsaEncryptionService, string privateKeyPem, string data, string algorithm = "SHA256WITHRSA", Encoding encoding = null)
public static string SignFromPkcs8Pem(this IRSAEncryptionService rsaEncryptionService, string privateKeyPem, string data, string algorithm = "SHA256WITHRSA", Encoding encoding = null)
{
var privateKeyParam = rsaEncryptionService.ImportPrivateKeyPemPkcs8(privateKeyPem);
var privateKeyParam = rsaEncryptionService.ImportPrivateKeyPkcs8Pem(privateKeyPem);
return rsaEncryptionService.Sign(privateKeyParam, data, algorithm, encoding);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Asn1.Pkcs;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.OpenSsl;
using Org.BouncyCastle.Pkcs;
using Org.BouncyCastle.Utilities.Encoders;
Expand Down Expand Up @@ -57,8 +59,23 @@ public static string ExportPrivateKey(this AsymmetricKeyParameter privateKeyPara
{
throw new ArgumentException("AsymmetricKeyParameter is not private key");
}
var privateKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(privateKeyParam);
return Base64.ToBase64String(privateKeyInfo.GetDerEncoded());

//var privateKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(privateKeyParam);
//return Base64.ToBase64String(privateKeyInfo.GetEncoded());

// 创建PrivateKeyInfo对象
var rsaPrivateCrtKeyParameters = (RsaPrivateCrtKeyParameters)privateKeyParam;
var rsaPrivateKeyStructure = new RsaPrivateKeyStructure(
rsaPrivateCrtKeyParameters.Modulus,
rsaPrivateCrtKeyParameters.PublicExponent,
rsaPrivateCrtKeyParameters.Exponent,
rsaPrivateCrtKeyParameters.P,
rsaPrivateCrtKeyParameters.Q,
rsaPrivateCrtKeyParameters.DP,
rsaPrivateCrtKeyParameters.DQ,
rsaPrivateCrtKeyParameters.QInv);

return Convert.ToBase64String(rsaPrivateKeyStructure.GetDerEncoded());
}


Expand Down Expand Up @@ -89,9 +106,9 @@ public static string ExportPrivateKeyPkcs8(this AsymmetricKeyParameter privateKe
throw new ArgumentException("AsymmetricKeyParameter is not private key");
}
var privateKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(privateKeyParam);
return Base64.ToBase64String(privateKeyInfo.PrivateKey.GetDerEncoded());
return Base64.ToBase64String(privateKeyInfo.GetDerEncoded());
}

/// <summary>
/// 导出私钥的Pem格式 (PKCS8)
/// </summary>
Expand Down Expand Up @@ -167,5 +184,24 @@ public static string ExportPrivateKeyPkcs8ToPem(this AsymmetricCipherKeyPair key
{
return keyPair.Private.ExportPrivateKeyPkcs8ToPem();
}

/// <summary>
/// 从私钥参数中获取公钥参数
/// </summary>
/// <param name="privateKeyParam"></param>
/// <returns></returns>
/// <exception cref="ArgumentException"></exception>
public static AsymmetricKeyParameter GetPublic(this AsymmetricKeyParameter privateKeyParam)
{
if (!privateKeyParam.IsPrivate)
{
throw new ArgumentException("AsymmetricKeyParameter is not private");
}

var p = (RsaPrivateCrtKeyParameters)privateKeyParam;
var publicKeyParam = new RsaKeyParameters(false, p.Modulus, p.PublicExponent);
return publicKeyParam;
}

}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@

using Org.BouncyCastle.Utilities.Encoders;
using System.Text;
using System.Text;
using Xunit;

namespace SharpAbp.Abp.Crypto.RSA
Expand Down Expand Up @@ -35,8 +33,26 @@ public void Generate_Test()

_rsaEncryptionService.ImportPublicKey(pub1);
_rsaEncryptionService.ImportPrivateKey(priv1);
_rsaEncryptionService.ImportPublicKeyPem(pub1_pem);
_rsaEncryptionService.ImportPrivateKeyPem(priv1_pem);
_rsaEncryptionService.ImportPrivateKeyPkcs8(priv1_pkcs8);
_rsaEncryptionService.ImportPrivateKeyPkcs8Pem(priv1_pkcs8_pem);
}

[Fact]
public void Key_Import_Export_Test()
{
var pkcs8Key = @"MIICeQIBADANBgkqhkiG9w0BAQEFAASCAmMwggJfAgEAAoGBAMz0Czg6QUtTISa2pUkloeQB/TEpHdqrfyroWpKLW9B/LWFSOGH9nyTk1pPZaeadyEZQ6gay/C0pUAetLraq9bMA/Luxq68b87uG7WX7dKytEO2/87qGpGMRs97H+GlkzWil2QO2KK4cHnAcVicPsmi5aZ72U0BWJFyPhtd+qdmrAgMBAAECgYEAvW67iAbgHt0BASVD9C3iSjpEaVHVlC165o/IVzaTcEx8Bz3Ve0zN8W3JnvIO3ebsG4HiLLr2Nk++9rltOc0eNeGMv7F1e/OFot1wN0ON6s1g4bYh1z5Uz8FcYiMWcqHHICrx+oSFeK9x+I2Zge7enQXcsVnqEhm77ZE5YczSryECQQD9nB58e5efYchF+cYbmURioX18cUMuhQbB9Aq2N55cd689Lg35KZqT8JQTp/8tQSdCJG8d2nU8VKspUKTEAuaDAkEAzuKIIoc9PVJvy90LhIPA9c1S8BPCI7EMCaTZqJ5o3VaR2dqvUZDGX7kL3kYkQ+n7mq3KIECvkEFzA+FOP96XuQJBAJQTKHW0T/YeSKoayUHp/lS8R6F2HCy4PRbXn71+wfbpZqcJEd2OHhQM3tiPOV258esbjMlYeSUNppZL4LgVnXMCQQC7Lvs9Ql+GPDAqo7ToEM1lmICR906QPIBHuX+1sJ3wpYMROWumwPa7ZRH36j6ls+6R5OwcgmpWeuE1gYTrBNsBAkEAn2pEtAljX1foQff6CLozYg/J6J9RmVFcJ6qz0LX3052qNFBQYw8CMHB7VkVNzsDIDC8LX5uP2pzTrdPLew+pPA==";

var pkcs1Key = @"MIICXwIBAAKBgQDM9As4OkFLUyEmtqVJJaHkAf0xKR3aq38q6FqSi1vQfy1hUjhh/Z8k5NaT2WnmnchGUOoGsvwtKVAHrS62qvWzAPy7sauvG/O7hu1l+3SsrRDtv/O6hqRjEbPex/hpZM1opdkDtiiuHB5wHFYnD7JouWme9lNAViRcj4bXfqnZqwIDAQABAoGBAL1uu4gG4B7dAQElQ/Qt4ko6RGlR1ZQteuaPyFc2k3BMfAc91XtMzfFtyZ7yDt3m7BuB4iy69jZPvva5bTnNHjXhjL+xdXvzhaLdcDdDjerNYOG2Idc+VM/BXGIjFnKhxyAq8fqEhXivcfiNmYHu3p0F3LFZ6hIZu+2ROWHM0q8hAkEA/ZwefHuXn2HIRfnGG5lEYqF9fHFDLoUGwfQKtjeeXHevPS4N+Smak/CUE6f/LUEnQiRvHdp1PFSrKVCkxALmgwJBAM7iiCKHPT1Sb8vdC4SDwPXNUvATwiOxDAmk2aieaN1Wkdnar1GQxl+5C95GJEPp+5qtyiBAr5BBcwPhTj/el7kCQQCUEyh1tE/2HkiqGslB6f5UvEehdhwsuD0W15+9fsH26WanCRHdjh4UDN7YjzldufHrG4zJWHklDaaWS+C4FZ1zAkEAuy77PUJfhjwwKqO06BDNZZiAkfdOkDyAR7l/tbCd8KWDETlrpsD2u2UR9+o+pbPukeTsHIJqVnrhNYGE6wTbAQJBAJ9qRLQJY19X6EH3+gi6M2IPyeifUZlRXCeqs9C199OdqjRQUGMPAjBwe1ZFTc7AyAwvC1+bj9qc063Ty3sPqTw=";


var privateKey1 = _rsaEncryptionService.ImportPrivateKeyPkcs8(pkcs8Key);
var privateKey2 = _rsaEncryptionService.ImportPrivateKey(pkcs1Key);
}



[Fact]
public void Encrypt_Decrypt_Test()
{
Expand All @@ -45,17 +61,13 @@ public void Encrypt_Decrypt_Test()
var priv = keyPair.ExportPrivateKeyToPem();
var priv_pkcs8 = keyPair.ExportPrivateKeyPkcs8ToPem();

var pub1 = keyPair.ExportPublicKey();
var priv1 = keyPair.ExportPrivateKey();
var priv1_pkcs8 = keyPair.ExportPrivateKeyPkcs8();

var plainText = "这是中国!";

var encrypted = _rsaEncryptionService.EncryptFromPem(pub, plainText, Encoding.UTF8);
var decrypted = _rsaEncryptionService.DecryptFromPem(priv, encrypted, Encoding.UTF8);
Assert.Equal(plainText, decrypted);

var decrypted2 = _rsaEncryptionService.DecryptFromPemPkcs8(priv_pkcs8, encrypted, Encoding.UTF8);
var decrypted2 = _rsaEncryptionService.DecryptFromPkcs8Pem(priv_pkcs8, encrypted, Encoding.UTF8);
Assert.Equal(plainText, decrypted2);
}

Expand All @@ -77,41 +89,44 @@ public void Encrypt_Decrypt_1024_Test()
var decrypted = _rsaEncryptionService.DecryptFromPem(priv, encrypted, Encoding.UTF8);
Assert.Equal(plainText, decrypted);

var decrypted2 = _rsaEncryptionService.DecryptFromPemPkcs8(priv_pkcs8, encrypted, Encoding.UTF8);
var decrypted2 = _rsaEncryptionService.DecryptFromPkcs8Pem(priv_pkcs8, encrypted, Encoding.UTF8);
Assert.Equal(plainText, decrypted2);

var encrypted11 = _rsaEncryptionService.Encrypt(pub1, plainText, Encoding.UTF8);
var decrypted11 = _rsaEncryptionService.Decrypt(priv1, encrypted11, Encoding.UTF8);
// Assert.Equal(plainText, decrypted11);
//var decrypted12 = _rsaEncryptionService.DecryptFromPkcs8(priv1_pkcs8, encrypted11, Encoding.UTF8);

Assert.Equal(plainText, decrypted11);
var decrypted12 = _rsaEncryptionService.DecryptFromPkcs8(priv1_pkcs8, encrypted11, Encoding.UTF8);
Assert.Equal(plainText, decrypted12);
}


[Fact]
public void Sign_Verify_Test()
{
var keyPair = _rsaEncryptionService.GenerateRSAKeyPair(1024);
var pub = keyPair.ExportPublicKeyToPem();
var priv = keyPair.ExportPrivateKeyToPem();
var priv_pkcs8 = keyPair.ExportPrivateKeyPkcs8ToPem();
}

[Fact]
public void Test1()
{
var privateKeyPem = @"-----BEGIN PRIVATE KEY-----
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBANRK3ZsgQHcfhCJRxa7wks4ekOedHJOaDQbf1ROZQ/EvsbBSdgvfZDTY/i9Tv4owkb2+CnRUMi2L+YC/DQGMq9L/4N18wOLv9nQTOzwV9bDyacD9Dd8sSBRkiRfp/9578+nNVYGaPLzgiRd3TVRc4I1KUzeZOaw2358QxuhvmSgFAgMBAAECgYBgwdaLE4IOSTECK178Qu3GQCwvRG5336i8T1xgWGSdEu3bvVnMQ376j0Qa8gLEyypB3tII/y73j2qigXE+GY1eAwhagxgiqpqvBTf+MlfCytLfvH/DmsZATVjcaovzSXexYzwwXNfxAxuEhQdy1hdatBD9omCxcSyamnfSds6fAQJBAPjVwcP773da0z4EquYQ2Bl91pxYHV8YhnKdp4f6IaqfrLPOnaZ7QQaKzcR1YLSr84bC6bv3ol/43uyfgwVwx2UCQQDaZ73qAn01nAr4bdoIgSDivwTDV+AM9+xCBsfkep+C/I4vgVcYn5SK6ueYpwheBJCdmV/Q9xDD+jUaEkVAvGQhAkEA3LJJzxdOBqAJp4HgSXk7ETDo/XWxZzyLUnC9u/5/iaNhO4DPlm7O94x4f/xTLysrLKUHRW2XGGPU5C19uX+TeQJANiaMns2ZL8aNrcTGz178wVttGeXaxjxeFozJ2OtSS07FDiA6cP93++18GIwpde4Z0QlrCUuIm56Ytesbwo4zIQJBAMYi4Zf+0EcS3BPk+o/tCkyBvWBXfycUryEWOge5tL10IJoGFkNzItURsGcR3GqHlESMhvnVFhXq9RFBfsX+aNI=
-----END PRIVATE KEY-----";



var a = "YXJnZN4RiH7OjZjt3GnYBAOAdsqyKhToLIbm3JnzIwxlx1lhtUoA7hmTsiG839FAyy5B+mCSHgSZ+YZCs6QXxJFlZOXzDDhYZCbrUdFVoujJZnsg4SNC++vhdHPfxbA0U1ozTZGjIBcGOV0vqVQJci+Ds9mN352wui02toO0OcQ=";

var v = _rsaEncryptionService.DecryptFromPem(privateKeyPem, a, Encoding.UTF8);

Assert.NotEqual("", v);

var pub = keyPair.ExportPublicKey();
var priv = keyPair.ExportPrivateKey();
var priv_pkcs8 = keyPair.ExportPrivateKeyPkcs8();
var pub_pem = keyPair.ExportPublicKeyToPem();
var priv_pem = keyPair.ExportPrivateKeyToPem();
var priv_pkcs8_pem = keyPair.ExportPrivateKeyPkcs8ToPem();

var data = "This is ZHANGSAN";
var signature1 = _rsaEncryptionService.Sign(priv, data);
var r1 = _rsaEncryptionService.VerifySign(pub, data, signature1);
Assert.True(r1);

var signature2 = _rsaEncryptionService.SignFromPkcs8(priv_pkcs8, data);
var r2 = _rsaEncryptionService.VerifySign(pub, data, signature2);
Assert.True(r2);

var signature3 = _rsaEncryptionService.SignFromPem(priv_pem, data);
var r3 = _rsaEncryptionService.VerifySign(pub, data, signature3);
Assert.True(r3);

var signature4 = _rsaEncryptionService.SignFromPkcs8Pem(priv_pkcs8_pem, data);
var r4 = _rsaEncryptionService.VerifySign(pub, data, signature4);
Assert.True(r4);
}


Expand Down

0 comments on commit 8e973d6

Please sign in to comment.