示例#1
0
 public async Task HandleDecryptedData(DecryptedData data)
 {
     foreach (var handler in DataHandlers)
     {
         await handler.Execute(data);
     }
 }
        protected virtual ClaimsIdentity ConvertTicket(DecryptedData data)
        {
            var ticket = data.Ticket;

            var claims = new List <Claim>();

            foreach (var authData in ticket.AuthorizationData)
            {
                foreach (var authz in authData.Authorizations)
                {
                    if (authz.Type == AuthorizationDataValueType.AD_WIN2K_PAC)
                    {
                        var pac = (PacElement)authz;

                        if (validator.ValidateAfterDecrypt.HasFlag(ValidationActions.Pac))
                        {
                            validator.Validate(pac, data.SName);
                        }

                        MergeAttributes(ticket, pac.Certificate, claims);
                    }
                }
            }

            claims.Add(new Claim("Validated", validator.ValidateAfterDecrypt.ToString().Replace(", ", " ")));

            return(new ClaimsIdentity(claims, "Kerberos", ClaimTypes.NameIdentifier, ClaimTypes.Role));
        }
示例#3
0
            protected override ClaimsIdentity ConvertTicket(DecryptedData data)
            {
                if (data == null || data.Ticket == null)
                {
                    return(null);
                }

                return(base.ConvertTicket(data));
            }
示例#4
0
        public void Decrypt()
        {
            byte[] data = new byte[1024];
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

            try
            {
                if (privatexml.Length == 0)
                {
                    _ispriv_xml = false;
                    MessageBox.Show("Файл с закрытым ключем пуст...");
                    return;
                }
                else
                {
                    rsa.FromXmlString(privatexml);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Проблема с RSA... \n" + ex.Message.ToString());
            }
            try
            {
                data = Convert.FromBase64String(s3);
            }
            catch (FileNotFoundException)
            {
                MessageBox.Show("Data file does not exist...");
                return;
            }
            try
            {
                DecryptedData = rsa.Decrypt(data, false);
            }
            catch (CryptographicException ex)
            {
                MessageBox.Show("Ошибка расшифровки... \n" + ex.Message.ToString());
                return;
            }
            text = Encoding.UTF8.GetString(DecryptedData);
            s1.Substring(0, 18);
            txtChat.Text = s1 + temp2 + text + "\r\n";
            for (int i = 0; i < data.Length - 1; i++)
            {
                data.SetValue((byte)0, i);
            }
            for (int i = 0; i < DecryptedData.Length - 1; i++)
            {
                DecryptedData.SetValue((byte)0, i);
            }
        }
        protected virtual ClaimsIdentity ConvertTicket(DecryptedData data)
        {
            var ticket = data.Ticket;

            var claims = new List <Claim>();

            foreach (var authz in ticket.AuthorizationData.Authorizations)
            {
                if (authz.PrivilegedAttributeCertificate != null)
                {
                    MergeAttributes(ticket, authz.PrivilegedAttributeCertificate, claims);
                }
            }

            return(new ClaimsIdentity(claims, "Kerberos", ClaimTypes.NameIdentifier, ClaimTypes.Role));
        }
示例#6
0
        protected virtual void Validate(DecryptedData decryptedToken)
        {
            decryptedToken.Validate();

            var ctime  = decryptedToken.Authenticator.CTime.ToFileTime();
            var cusec  = decryptedToken.Authenticator.CuSec;
            var cname  = decryptedToken.Authenticator.CName.GetHashCode();
            var crealm = decryptedToken.Authenticator.Realm;

            var ticketIdentifier = $"{ctime}${cusec}${cname}${crealm}";

            if (!TokenCache.Add(ticketIdentifier))
            {
                throw new SecurityException($"Tickets can only be used once. This ticket has already been used: {ticketIdentifier}");
            }
        }
        private object DecodeBase64Data(DecryptedData data)
        {
            if (data.DataType == DataType.Number)
            {
                var number = BitConverter.ToDouble(Convert.FromBase64String(data.Base64Data));

                if (data.DataSource == DataSourceType.Battery)
                {
                    number *= 100;
                }

                return(number);
            }

            if (data.DataType == DataType.Json)
            {
                return(Encoding.UTF8.GetString(Convert.FromBase64String(data.Base64Data)));
            }

            return(JsonConvert.DeserializeObject(Encoding.UTF8.GetString(Convert.FromBase64String(data.Base64Data))));
        }
示例#8
0
        private static DecryptedData Decrypt(KrbApReq token, KeyTable keytab)
        {
            if (token?.Ticket?.EncPart == null)
            {
                return(null);
            }

            DecryptedData decryptor = null;

            if (Decryptors.TryGetValue(token.Ticket.EncPart.EType, out Func <KrbApReq, DecryptedData> func) && func != null)
            {
                decryptor = func(token);
            }

            if (decryptor != null)
            {
                decryptor.Decrypt(keytab);
            }

            return(decryptor);
        }
示例#9
0
        public DecryptedData DecryptWithBaseKey(byte[] basekey)
        {
            DecryptedData decryptor = null;

            switch (NegotiationToken.MechToken.InnerContextToken.Ticket.EncPart.EType)
            {
            case EncryptionType.RC4_HMAC_NT:
            case EncryptionType.RC4_HMAC_NT_EXP:
                decryptor = new RC4DecryptedData(NegotiationToken.MechToken.InnerContextToken, null, basekey);
                break;

            case EncryptionType.AES128_CTS_HMAC_SHA1_96:
            case EncryptionType.AES256_CTS_HMAC_SHA1_96:
                break;
            }

            if (decryptor != null)
            {
                decryptor.Decrypt();
            }

            return(decryptor);
        }
        private bool TryDecrypt(DataContract message, out DecryptedData decryptedData, string passwordHash)
        {
            decryptedData = null;
            var keyPaths = this.GetAllPgpKeysForUserId(message.UserId);

            var directory      = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
            var inputFilePath  = Path.Combine(directory, "message.pgp");
            var outputFilePath = Path.Combine(directory, "message__decrypted");

            foreach (var path in keyPaths)
            {
                File.WriteAllBytes(inputFilePath, Convert.FromBase64String(message.EncryptedData));

                var isSuccessful = DataProtector.DecryptFile(inputFilePath, outputFilePath, path, passwordHash);
                if (isSuccessful)
                {
                    decryptedData = JsonConvert.DeserializeObject <DecryptedData>(File.ReadAllText(outputFilePath));

                    File.Delete(inputFilePath);
                    File.Delete(outputFilePath);

                    return(true);
                }
            }

            if (File.Exists(inputFilePath))
            {
                File.Delete(inputFilePath);
            }

            if (File.Exists(outputFilePath))
            {
                File.Delete(outputFilePath);
            }

            return(false);
        }
示例#11
0
        public bool TryDecrypt(DataContract message, out DecryptedData decryptedData)
        {
            decryptedData = null;
            var keyPaths = this.GetAllPgpKeyPaths();

            foreach (var path in keyPaths)
            {
                var firstFileName = Path.GetFileNameWithoutExtension(path);
                var file          = this.Configuration.GetSection("KeyCredentials")
                                    .Get <PrivateKeyCredentials[]>()
                                    .FirstOrDefault(k => k.Purpose == Path.GetFileNameWithoutExtension(firstFileName));

                if (file == null)
                {
                    continue;
                }

                var directory      = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
                var inputFilePath  = Path.Combine(directory, "message.pgp");
                var outputFilePath = Path.Combine(directory, "message__decrypted");
                File.WriteAllBytes(inputFilePath, Convert.FromBase64String(message.EncryptedData));

                var isSuccessful = DataProtector.DecryptFile(inputFilePath, outputFilePath, path, file.Password);

                if (isSuccessful)
                {
                    decryptedData = JsonConvert.DeserializeObject <DecryptedData>(File.ReadAllText(outputFilePath));

                    File.Delete(inputFilePath);
                    File.Delete(outputFilePath);

                    return(true);
                }
            }

            return(false);
        }
示例#12
0
        protected virtual async Task Validate(DecryptedData decryptedToken)
        {
            var sequence  = ObscureSequence(decryptedToken.Authenticator.SequenceNumber);
            var container = ObscureContainer(decryptedToken.Ticket.CRealm);

            var entry = new TicketCacheEntry
            {
                Key       = sequence,
                Container = container,
                Expires   = decryptedToken.Ticket.EndTime
            };

            var replayDetected = true;

            var detectReplay = ValidateAfterDecrypt.HasFlag(ValidationActions.Replay);

            if (!detectReplay)
            {
                decryptedToken.Validate(ValidateAfterDecrypt);
                replayDetected = false;
            }
            else if (!(await TokenCache.Contains(entry)))
            {
                decryptedToken.Validate(ValidateAfterDecrypt);

                if (await TokenCache.Add(entry))
                {
                    replayDetected = false;
                }
            }

            if (replayDetected)
            {
                throw new ReplayException($"Replay detected in container '{entry.Container}' with key {entry.Key}.");
            }
        }
示例#13
0
        public Task Execute(DecryptedData data)
        {
            if (data.DataSource != DataSourceType.Battery)
            {
                return(Task.CompletedTask);
            }

            if (data.DataType != DataType.Number)
            {
                return(Task.CompletedTask);
            }

            var actualData    = BitConverter.ToDouble(Convert.FromBase64String(data.Base64Data));
            var directory     = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
            var inputFilePath = Path.Combine(directory, "battery_data.csv");
            var delimitator   = File.Exists(inputFilePath) ? ";" : "";

            using (var stream = File.AppendText(inputFilePath))
            {
                stream.Write($"{delimitator}{(int)(actualData * 100)}");
            }

            return(Task.CompletedTask);
        }
示例#14
0
            protected override Task Validate(DecryptedData decryptedToken)
            {
                Data = decryptedToken;

                return(base.Validate(decryptedToken));
            }