public static void VerifyDuplicateKey_ValidHandle() { byte[] data = ByteUtils.RepeatByte(0x71, 11); using (RSAOpenSsl first = new RSAOpenSsl()) using (SafeEvpPKeyHandle firstHandle = first.DuplicateKeyHandle()) { using (RSA second = new RSAOpenSsl(firstHandle)) { byte[] signed = second.SignData(data, HashAlgorithmName.SHA512, RSASignaturePadding.Pkcs1); Assert.True(first.VerifyData(data, signed, HashAlgorithmName.SHA512, RSASignaturePadding.Pkcs1)); } } }
public static void VerifyDuplicateKey_RefCounts() { byte[] data = ByteUtils.RepeatByte(0x74, 11); byte[] signature; RSA second; using (RSAOpenSsl first = new RSAOpenSsl()) using (SafeEvpPKeyHandle firstHandle = first.DuplicateKeyHandle()) { signature = first.SignData(data, HashAlgorithmName.SHA384, RSASignaturePadding.Pkcs1); second = new RSAOpenSsl(firstHandle); } // Now show that second still works, despite first and firstHandle being Disposed. using (second) { Assert.True(second.VerifyData(data, signature, HashAlgorithmName.SHA384, RSASignaturePadding.Pkcs1)); } }
public string SignWithRsa( JwsAlg algorithm, string serializedKeys, string combinedJwsNotSigned) { if (!_supportedAlgs.Contains(algorithm)) { return(null); } if (string.IsNullOrWhiteSpace(serializedKeys)) { throw new ArgumentNullException("serializedKeys"); } if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { using (var rsa = new RSACryptoServiceProvider()) { var hashMethod = _mappingWinJwsAlgorithmToRsaHashingAlgorithms[algorithm]; var bytesToBeSigned = ASCIIEncoding.ASCII.GetBytes(combinedJwsNotSigned); rsa.FromXmlStringNetCore(serializedKeys); var byteToBeConverted = rsa.SignData(bytesToBeSigned, hashMethod); return(byteToBeConverted.Base64EncodeBytes()); } } else { using (var rsa = new RSAOpenSsl()) { var hashMethod = _mappingLinuxJwsAlgorithmToRsaHashingAlgorithms[algorithm]; var bytesToBeSigned = ASCIIEncoding.ASCII.GetBytes(combinedJwsNotSigned); rsa.FromXmlStringNetCore(serializedKeys); var byteToBeConverted = rsa.SignData(bytesToBeSigned, 0, bytesToBeSigned.Length, hashMethod, RSASignaturePadding.Pkcs1); return(byteToBeConverted.Base64EncodeBytes()); } } }
public string SignWithRsa( JwsAlg algorithm, string serializedKeys, string combinedJwsNotSigned) { if (!_mappingJwsAlgorithmToRsaHashingAlgorithms.ContainsKey(algorithm)) { return(null); } if (string.IsNullOrWhiteSpace(serializedKeys)) { throw new ArgumentNullException("serializedKeys"); } var hashMethod = _mappingJwsAlgorithmToRsaHashingAlgorithms[algorithm]; #if UAP // TODO : Implement return(null); #elif NET46 || NET45 using (var rsa = new RSACryptoServiceProvider()) { var bytesToBeSigned = ASCIIEncoding.ASCII.GetBytes(combinedJwsNotSigned); rsa.FromXmlString(serializedKeys); var byteToBeConverted = rsa.SignData(bytesToBeSigned, hashMethod); return(byteToBeConverted.Base64EncodeBytes()); } #elif NETSTANDARD using (var rsa = new RSAOpenSsl()) { var bytesToBeSigned = ASCIIEncoding.ASCII.GetBytes(combinedJwsNotSigned); rsa.FromXmlString(serializedKeys); var byteToBeConverted = rsa.SignData(bytesToBeSigned, 0, bytesToBeSigned.Length, hashMethod, RSASignaturePadding.Pkcs1); return(byteToBeConverted.Base64EncodeBytes()); } #endif }
public string SignHash(byte[] data) { return(Convert.ToBase64String(_signAlgorithm.SignData(data, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1))); }