/// <summary> /// Decrypts the CipherText using the SecurityPolicyUri and returns the PlainTetx. /// </summary> public static byte[] Decrypt(X509Certificate2 certificate, string securityPolicyUri, EncryptedData dataToDecrypt) { // check if nothing to do. if (dataToDecrypt == null) { return null; } // nothing more to do if no encryption. if (String.IsNullOrEmpty(securityPolicyUri)) { return dataToDecrypt.Data; } // decrypt data. switch (securityPolicyUri) { case SecurityPolicies.Basic128: case SecurityPolicies.Basic192: case SecurityPolicies.Basic256: { if (dataToDecrypt.Algorithm == SecurityAlgorithms.RsaOaep) { return RsaUtils.Decrypt(new ArraySegment<byte>(dataToDecrypt.Data), certificate, true); } break; } case SecurityPolicies.Basic128Rsa15: case SecurityPolicies.Basic192Rsa15: case SecurityPolicies.Basic256Rsa15: { if (dataToDecrypt.Algorithm == SecurityAlgorithms.Rsa15) { return RsaUtils.Decrypt(new ArraySegment<byte>(dataToDecrypt.Data), certificate, false); } break; } case SecurityPolicies.None: { if (String.IsNullOrEmpty(dataToDecrypt.Algorithm)) { return dataToDecrypt.Data; } break; } default: { throw new ApplicationException(String.Format( "Unsupported security policy: {0}", securityPolicyUri)); } } throw new ApplicationException(String.Format( "Unexpected encryption algorithm : {0}", dataToDecrypt.Data)); }
/// <summary> /// Encrypts the text using the SecurityPolicyUri and returns the result. /// </summary> public static EncryptedData Encrypt(X509Certificate2 certificate, string securityPolicyUri, byte[] plainText) { EncryptedData encryptedData = new EncryptedData(); encryptedData.Algorithm = null; encryptedData.Data = plainText; // check if nothing to do. if (plainText == null) { return encryptedData; } // nothing more to do if no encryption. if (String.IsNullOrEmpty(securityPolicyUri)) { return encryptedData; } // encrypt data. switch (securityPolicyUri) { case SecurityPolicies.Basic128: case SecurityPolicies.Basic192: case SecurityPolicies.Basic256: { encryptedData.Algorithm = SecurityAlgorithms.RsaOaep; encryptedData.Data = RsaUtils.Encrypt(plainText, certificate, true); break; } case SecurityPolicies.Basic128Rsa15: case SecurityPolicies.Basic192Rsa15: case SecurityPolicies.Basic256Rsa15: { encryptedData.Algorithm = SecurityAlgorithms.Rsa15; encryptedData.Data = RsaUtils.Encrypt(plainText, certificate, false); break; } case SecurityPolicies.None: { break; } default: { throw new ApplicationException(String.Format( "Unsupported security policy: {0}", securityPolicyUri)); } } return encryptedData; }