public SaleToPoiMessageSecured Encrypt(string saleToPoiMessage, MessageHeader messageHeader,
                                               EncryptionCredentialDetails encryptionCredentialDetails)
        {
            var encryptionDerivedKey      = _encryptionDerivedKeyGenerator.Generate(encryptionCredentialDetails);
            var saleToPoiMessageJson      = saleToPoiMessage;
            var saleToPoiMessageByteArray = Encoding.ASCII.GetBytes(saleToPoiMessageJson);
            var ivMod = _ivModGenerator.GenerateRandomMod();
            var saleToPoiMessageAesEncrypted = _aesEncryptor.Encrypt(saleToPoiMessageByteArray,
                                                                     encryptionDerivedKey,
                                                                     ivMod);
            var saleToPoiMessageAesEncryptedHmac = _hmacSha256Wrapper.HMac(saleToPoiMessageByteArray,
                                                                           encryptionDerivedKey.HmacKey);


            var saleToPoiMessageSecured = new SaleToPoiRequestSecured
            {
                MessageHeader   = messageHeader,
                NexoBlob        = Convert.ToBase64String(saleToPoiMessageAesEncrypted),
                SecurityTrailer = new SecurityTrailer
                {
                    KeyVersion         = encryptionCredentialDetails.KeyVersion,
                    KeyIdentifier      = encryptionCredentialDetails.KeyIdentifier,
                    Hmac               = saleToPoiMessageAesEncryptedHmac,
                    Nonce              = ivMod,
                    AdyenCryptoVersion = encryptionCredentialDetails.AdyenCryptoVersion
                }
            };

            return(saleToPoiMessageSecured);
        }
        public string Decrypt(SaleToPoiMessageSecured saleToPoiMessageSecured, EncryptionCredentialDetails encryptionCredentialDetails)
        {
            var encryptedSaleToPoiMessageByteArray = Convert.FromBase64String(saleToPoiMessageSecured.NexoBlob);
            var encryptionDerivedKey = _encryptionDerivedKeyGenerator.Generate(encryptionCredentialDetails);

            var decryptedSaleToPoiMessageByteArray = _aesEncryptor.Decrypt(encryptedSaleToPoiMessageByteArray,
                                                                           encryptionDerivedKey,
                                                                           saleToPoiMessageSecured.SecurityTrailer.Nonce);

            return(System.Text.Encoding.UTF8.GetString(decryptedSaleToPoiMessageByteArray));
        }
Пример #3
0
        internal EncryptionDerivedKey Generate(EncryptionCredentialDetails encryptionCredentialDetails)
        {
            byte[] salt = Encoding.ASCII.GetBytes(Salt);

            var rfc2898 = new Rfc2898DeriveBytes(encryptionCredentialDetails.Password, salt, Iterations);

            byte[] key = rfc2898.GetBytes(80);

            return(new EncryptionDerivedKey()
            {
                HmacKey = key.Slice(0, EncryptionDerivedKey.HmacKeyLength),
                CipherKey = key.Slice(EncryptionDerivedKey.HmacKeyLength, EncryptionDerivedKey.HmacKeyLength + EncryptionDerivedKey.CipherKeyLength),
                IV = key.Slice(EncryptionDerivedKey.HmacKeyLength + EncryptionDerivedKey.CipherKeyLength, EncryptionDerivedKey.HmacKeyLength + EncryptionDerivedKey.CipherKeyLength + EncryptionDerivedKey.IVLength)
            });
        }