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 })); }
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)); }
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)); }
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 })); }
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); }
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)); }
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); }
public static bool ParseMessage(string hashAndMessage, byte[] hiddenMessageBinary, out DateTime timeStamp, out byte[] message) { return(CryptoMessage.ParseMessage(hashAndMessage, hiddenMessageBinary, false, out timeStamp, out message)); }
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); }