Beispiel #1
0
        public static byte[] EncodeToByteArray(string message, CryptoMessage.EncodingKind encodingKind)
        {
            if (message == null)
            {
                message = string.Empty;
            }
            byte[] array = new byte[]
            {
                (byte)encodingKind
            };
            byte[] bytes;
            switch (encodingKind)
            {
            case CryptoMessage.EncodingKind.UTF8:
                bytes = new UTF8Encoding().GetBytes(message);
                goto IL_43;
            }
            bytes = new UnicodeEncoding().GetBytes(message);
IL_43:
            return(CryptoMessage.MergeArrays(new byte[][]
            {
                array,
                bytes
            }));
        }
Beispiel #2
0
        public static string ExtractUrl(string hashAndMessage, bool legacyFormat)
        {
            DateTime dateTime;

            byte[] message;
            CryptoMessage.ParseMessage(hashAndMessage, null, true, out dateTime, out message);
            return(CryptoMessage.DecodeToString(message, legacyFormat));
        }
Beispiel #3
0
 public CryptoMessage(DateTime timeStamp, string message, Guid userContextId, string logonUniqueKey)
 {
     byte[] bytes = BitConverter.GetBytes(timeStamp.Ticks);
     byte[] array = CryptoMessage.EncodeToByteArray(message, CryptoMessage.EncodingKind.UTF8);
     this.CreateSignedMessage(CryptoMessage.MergeArrays(new byte[][]
     {
         bytes,
         array
     }), CryptoMessage.GetHiddenMessage(userContextId, logonUniqueKey));
 }
Beispiel #4
0
 public static byte[] GetHiddenMessage(Guid userContextId, string logonUniqueKey)
 {
     byte[] array = userContextId.ToByteArray();
     byte[] bytes = new UnicodeEncoding().GetBytes(logonUniqueKey ?? string.Empty);
     return(CryptoMessage.MergeArrays(new byte[][]
     {
         array,
         bytes
     }));
 }
Beispiel #5
0
 private void CreateSignedMessage(byte[] message, byte[] hiddenMessage)
 {
     this.messageBinary       = CryptoMessage.Clone(message);
     this.hiddenMessageBinary = CryptoMessage.Clone(hiddenMessage);
     this.privateKeyBinary    = CryptoMessage.MergeArrays(new byte[][]
     {
         CryptoMessage.adObjectIdsBinary,
         this.hiddenMessageBinary
     });
     this.hashBinary           = CryptoMessage.ComputeHash(this.messageBinary, this.privateKeyBinary);
     this.hashAndMessageBinary = CryptoMessage.MergeArrays(new byte[][]
     {
         this.hashBinary,
         this.messageBinary
     });
     this.hashAndMessageString = CryptoMessage.Encode(this.hashAndMessageBinary);
 }
Beispiel #6
0
        public static bool ParseMessage(byte[] hashAndMessageBinary, byte[] hiddenMessageBinary, out byte[] messageBinary)
        {
            hashAndMessageBinary = (hashAndMessageBinary ?? CryptoMessage.zeroArray);
            hiddenMessageBinary  = (hiddenMessageBinary ?? CryptoMessage.zeroArray);
            int num = hashAndMessageBinary.Length - 32;

            if (num < 0)
            {
                messageBinary = CryptoMessage.zeroArray;
                return(false);
            }
            messageBinary = new byte[num];
            Array.Copy(hashAndMessageBinary, 32, messageBinary, 0, num);
            CryptoMessage cryptoMessage = new CryptoMessage(messageBinary, hiddenMessageBinary);

            return(CryptoMessage.AreEqualTimeSafe(cryptoMessage.hashAndMessageBinary, hashAndMessageBinary));
        }
Beispiel #7
0
        public static bool ParseMessage(string hashAndMessage, byte[] hiddenMessageBinary, bool ignoreHmac, out DateTime timeStamp, out byte[] message)
        {
            timeStamp = DateTime.MinValue;
            bool flag = false;

            message = null;
            try
            {
                byte[] array = CryptoMessage.Decode(hashAndMessage ?? string.Empty);
                byte[] array2;
                flag = CryptoMessage.ParseMessage(array, hiddenMessageBinary, out array2);
                if (flag || ignoreHmac)
                {
                    long ticks = BitConverter.ToInt64(array2, 0);
                    timeStamp = new DateTime(ticks, DateTimeKind.Utc);
                    int num = array2.Length - 8;
                    message = new byte[num];
                    Array.Copy(array2, 8, message, 0, num);
                }
                else
                {
                    ExTraceGlobals.CryptoTracer.TraceDebug(2L, "{0}.{1}: failed: messageString={2}, hiddenMessage={3}", new object[]
                    {
                        "Clients.Common.CryptoMessage",
                        "ParseMessage",
                        hashAndMessage,
                        CryptoMessage.GetHexString(hiddenMessageBinary)
                    });
                }
            }
            catch (Exception ex)
            {
                flag = false;
                ExTraceGlobals.CryptoTracer.TraceDebug(3L, "{0}.{1}: Exception: messageString={2}, hiddenMessage={3}, exception={3}", new object[]
                {
                    "Clients.Common.CryptoMessage",
                    "ParseMessage",
                    hashAndMessage,
                    CryptoMessage.GetHexString(hiddenMessageBinary),
                    ex
                });
            }
            return(flag);
        }
Beispiel #8
0
 public static bool ParseMessage(string hashAndMessage, byte[] hiddenMessageBinary, out DateTime timeStamp, out byte[] message)
 {
     return(CryptoMessage.ParseMessage(hashAndMessage, hiddenMessageBinary, false, out timeStamp, out message));
 }
Beispiel #9
0
        private static byte[] Init()
        {
            ITopologyConfigurationSession topologyConfigurationSession = DirectorySessionFactory.Default.CreateTopologyConfigurationSession(true, ConsistencyMode.IgnoreInvalid, ADSessionSettings.FromRootOrgScopeSet(), 112, "Init", "f:\\15.00.1497\\sources\\dev\\clients\\src\\common\\CryptoMessage.cs");

            byte[] array  = ADSystemConfigurationSession.GetRootOrgContainerIdForLocalForest().ObjectGuid.ToByteArray();
            byte[] array2 = topologyConfigurationSession.GetDatabasesContainerId().ObjectGuid.ToByteArray();
            byte[] array3 = new byte[array.Length + array2.Length];
            array.CopyTo(array3, 0);
            array2.CopyTo(array3, array.Length);
            if (ExTraceGlobals.CryptoTracer.IsTraceEnabled(TraceType.DebugTrace))
            {
                using (SHA256Cng sha256Cng = new SHA256Cng())
                {
                    byte[] bytes = sha256Cng.ComputeHash(array3);
                    ExTraceGlobals.CryptoTracer.TraceDebug <string, string, string>(0L, "{0}.{1}: adObjectIdsBinaryHash={2}", "Clients.Common.CryptoMessage", "CryptoMessage()", CryptoMessage.GetHexString(bytes));
                    sha256Cng.Clear();
                }
            }
            return(array3);
        }