示例#1
0
        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));
        }
示例#2
0
        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("");
            }
        }