Exemplo n.º 1
0
        protected byte[] DecryptOrderData(XPathHelper xph)
        {
            using (new MethodLogger(s_logger))
            {
                var encryptedOd = Convert.FromBase64String(xph.GetOrderData()?.Value);

                if (!Enum.TryParse <CryptVersion>(xph.GetEncryptionPubKeyDigestVersion()?.Value,
                                                  out var transKeyEncVersion))
                {
                    throw new DeserializationException(
                              string.Format("Encryption version {0} not supported",
                                            xph.GetEncryptionPubKeyDigestVersion()?.Value), xph.Xml);
                }

                var encryptionPubKeyDigest = Convert.FromBase64String(xph.GetEncryptionPubKeyDigest()?.Value);
                var encryptedTransKey      = Convert.FromBase64String(xph.GetTransactionKey()?.Value);

                var transKey    = DecryptRsa(encryptedTransKey);
                var decryptedOd = DecryptAES(encryptedOd, transKey);

                if (!StructuralComparisons.StructuralEqualityComparer.Equals(Config.User.CryptKeys.Digest,
                                                                             encryptionPubKeyDigest))
                {
                    throw new DeserializationException("Wrong digest in xml", xph.Xml);
                }

                return(decryptedOd);
            }
        }