public virtual Option <string> EncryptData(KeyMaterial receivedKeyMaterial, AsymmetricCipherKeyPair senderKeyPair, string content, string randomKeySender) { var receiverKeyBytes = EncryptorHelper.GetByteFromBase64(receivedKeyMaterial.DhPublicKey.KeyValue); var sharedKey = EncryptorHelper.GetBase64FromByte(EncryptorHelper.GetDeriveKey((byte[])receiverKeyBytes, senderKeyPair, receivedKeyMaterial.Curve, receivedKeyMaterial.CryptoAlg)); var encryptedContent = Encrypt(sharedKey, content, randomKeySender, receivedKeyMaterial.Nonce); return(encryptedContent == string.Empty ? Option.None <string>() : Option.Some(encryptedContent)); }
private static string Encrypt(string sharedKey, string dataToEncrypt, string randomKeySender, string randomKeyReceiver) { var xorOfRandoms = EncryptorHelper.XorOfRandom(randomKeySender, randomKeyReceiver).ToArray(); var salt = xorOfRandoms.Take(20); var iv = xorOfRandoms.TakeLast(12); var aesKey = EncryptorHelper.GenerateAesKey(sharedKey, salt); try { return(EncryptDataUseAesGcm(dataToEncrypt, aesKey.ToArray(), iv.ToArray())); } catch (Exception e) { Log.Error("Error Occured while encryption {exception}: ", e); return(""); } }