예제 #1
0
        private UserKeys GenerateNewKeyPair()
        {
            var rsa = new Chilkat.Rsa();

            rsa.GenerateKey(RsaKeySize);

            var publicKey  = rsa.ExportPublicKey();
            var privateKey = rsa.ExportPrivateKey();

            var symetricKey = EncryptionManager.GenerateSymmetricKey();

            var rsaEncryptor = new Chilkat.Rsa {
                EncodingMode = EncodingMode
            };

            rsaEncryptor.ImportPrivateKey(privateKey);

            // Encrypted with private so that public key can get access to symmetric key
            var encryptedSymetricKey = rsaEncryptor.EncryptStringENC(symetricKey, true);

            // Encrypted with application key so that the application can manage access to private keys
            var encryptedPrivateKey = EncryptionManager.Encrypt(privateKey, string.Empty);

            return(UserKeys.Create(encryptedPrivateKey, publicKey, encryptedSymetricKey));
        }
예제 #2
0
파일: Form1.cs 프로젝트: iqman/MACMSC
        private void ReadUserKeys(string filename)
        {
            UserKeys userKeys = XmlFile.ReadFile <UserKeys>(filename);

            this.masterPublicKey          = Convert.FromBase64String(userKeys.MasterKeyPublicKey);
            this.userPrivateKey           = Convert.FromBase64String(userKeys.UserPrivateKey);
            this.userSignKeys             = Convert.FromBase64String(userKeys.UserSignKeys);
            this.userkeysLoaded           = true;
            this.labelPickKeysStatus.Text = "OK";
        }
예제 #3
0
        public static UserKeys Create(string encryptedPrivateKey, string publicKey, string encryptedSymetricKey)
        {
            var keyPair = new UserKeys
            {
                EncryptedPrivateKey  = encryptedPrivateKey,
                PublicKey            = publicKey,
                EncryptedSymetricKey = encryptedSymetricKey
            };

            return(keyPair);
        }
예제 #4
0
파일: MainForm.cs 프로젝트: iqman/MACMSC
        private void buttonGenerateKeypairsForUser_Click(object sender, EventArgs e)
        {
            try
            {
                if (string.IsNullOrEmpty(this.textBoxNewUserId.Text))
                {
                    MessageBox.Show("You must enter a username");
                    return;
                }
                this.newUserId = GuidCreator.CreateGuidFromString(this.textBoxNewUserId.Text);

                if (this.masterKeypair == null)
                {
                    MessageBox.Show("You must load master key pair first");
                    return;
                }

                string filename = FileDialogs.AskUserForFileNameToSaveIn();
                if (!string.IsNullOrEmpty(filename))
                {
                    if (!Path.HasExtension(filename))
                    {
                        filename = filename + ".xml";
                    }


                    this.signKeyPair = DataSigner.GenerateSignKeyPair();

                    IPreService proxy = GetPreProxy();
                    this.userKeypair = proxy.GenerateKeyPair();

                    proxy = GetPreProxy();
                    this.delegationToken.ToUser = proxy.GenerateDelegationKey(this.masterKeypair.Private, this.userKeypair.Public);

                    IGatewayService gateWayproxy = GetServiceProxy();
                    gateWayproxy.RegisterUser(this.myId, this.newUserId, this.delegationToken, this.signKeyPair.PublicOnly);


                    UserKeys uk = new UserKeys();
                    uk.MasterKeyPublicKey = Convert.ToBase64String(this.masterKeypair.Public);
                    uk.UserPrivateKey     = Convert.ToBase64String(this.userKeypair.Private);
                    uk.UserSignKeys       = Convert.ToBase64String(this.signKeyPair.PublicAndPrivate);

                    XmlFile.WriteFile(uk, filename);

                    MessageBox.Show("Done");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: " + ex.Message);
                Logger.LogError("Error generating user keypair", ex);
            }
        }
예제 #5
0
 private RSAParameters ConvetToRsaParameters(UserKeys userKeys)
 {
     return(new RSAParameters
     {
         D = userKeys.D,
         DP = userKeys.DP,
         DQ = userKeys.DQ,
         P = userKeys.P,
         Q = userKeys.Q,
         InverseQ = userKeys.InverseQ,
         Exponent = userKeys.Exponent,
         Modulus = userKeys.Modulus
     });
 }
예제 #6
0
    public void GenerateKeys()
    {
        if (ownKeys != null)
        {
            oldOwnKeys = ownKeys;
        }
        ownKeys          = new UserKeys();
        ownKeys.preKey   = Encrypt.NewKeypair();
        ownKeys.identKey = Encrypt.NewSingKeypair();
        for (int i = 0; i < 64; i++)
        {
            ownKeys.oneTimeKeys[i] = Encrypt.NewKeypair();
        }

        SaveOwnKeys(true);
        Encrypt.SetOwnKeys(ownKeys, null);
    }
예제 #7
0
        public UserKeys GetUserKeyPair(string userReference)
        {
            var userKeys = KeyStoreRepo.GetKeyPairByUserReference(userReference);

            if (userKeys != null)
            {
                return(UserKeys.Create(userKeys.PrivateKeyEncrypted, userKeys.PublicKey, userKeys.SymmetricKeyEncrypted));
            }

            // TODO: Ensure this is locked for race conditions
            var keyCombo = GenerateNewKeyPair();

            KeyStoreRepo.Add(new UserKeyEntity(userReference, keyCombo.EncryptedPrivateKey, keyCombo.PublicKey, keyCombo.EncryptedSymetricKey));

            KeyStoreRepo.Save();

            return(keyCombo);
        }
예제 #8
0
        ////////////////////////////////////////////////////////////////////////////////
        //
        ////////////////////////////////////////////////////////////////////////////////
        internal UserKeys[] GetUserHashes(Byte[] hBootKey)
        {
            int     size = 0;
            UIntPtr hKey = new UIntPtr();
            Int32   type = 0;
            Dictionary <Int32, String> ridMapping = new Dictionary <Int32, String>();

            String[] namesSubKeys = Registry.LocalMachine.OpenSubKey(@"SAM\SAM\Domains\Account\Users\Names").GetSubKeyNames();
            foreach (String name in namesSubKeys)
            {
                if (advapi32.RegOpenKeyEx(Reg.HKEY_LOCAL_MACHINE, @"SAM\SAM\Domains\Account\Users\Names\" + name, 0, Reg.KEY_QUERY_VALUE, out hKey) != 0)
                {
                    Console.WriteLine("[-] Error opening key '{0}\\{1}", @"SAM\SAM\Domains\Account\Users\Names\" + name, "");
                    return(null);
                }
                if (advapi32.RegQueryValueEx(hKey, "", 0, ref type, IntPtr.Zero, ref size) != 0)
                {
                    Console.WriteLine("[-] [-] Error querying value '{0}\\{1}", @"SAM\SAM\Domains\Account\Users\Names\" + name, "");
                    return(null);
                }
                ridMapping[type] = name;
            }

            String[]   secretSubKeys = Registry.LocalMachine.OpenSubKey(@"SAM\SAM\Domains\Account\Users").GetSubKeyNames();
            UserKeys[] userKeys      = new UserKeys[secretSubKeys.Length - 1];
            for (Int32 i = 0; i < secretSubKeys.Length; i++)
            {
                if (secretSubKeys[i] != "Names")
                {
                    userKeys[i].rid              = Int32.Parse(secretSubKeys[i], System.Globalization.NumberStyles.HexNumber);
                    userKeys[i].userName         = ridMapping[userKeys[i].rid];
                    userKeys[i].f                = (Byte[])Reg.ReadRegKey(Reg.HKEY_LOCAL_MACHINE, @"SAM\SAM\Domains\Account\Users\" + secretSubKeys[i], "F");
                    userKeys[i].v                = (Byte[])Reg.ReadRegKey(Reg.HKEY_LOCAL_MACHINE, @"SAM\SAM\Domains\Account\Users\" + secretSubKeys[i], "V");
                    userKeys[i].userPasswordHint = (Byte[])Registry.LocalMachine.OpenSubKey(@"SAM\SAM\Domains\Account\Users\" + secretSubKeys[i]).GetValue("UserPasswordHint");
                    //userKeys[i].userPasswordHint = (Byte[])Reg.ReadRegKey(Reg.HKEY_LOCAL_MACHINE, @"SAM\SAM\Domains\Account\Users\" + secretSubKeys[i], "UserPasswordHint");
                }
            }
            return(userKeys);
        }
예제 #9
0
파일: Program.cs 프로젝트: tamsky/duplicati
            public RootFolderInfo(Options opt, IEnumerable <string> paths = null)
                : base("", "", Guid.NewGuid())
            {
                GeneratedKeys = ReadKeyDatabase(opt.dbfilename);
                UserKeys      = ReadKeyDatabase(opt.userfilename);
                ComponentID   = opt.componentid;
                m_opt         = opt;

                string id;

                if (!GeneratedKeys.TryGetValue(DIR_SEP, out id))
                {
                    id = Guid.NewGuid().ToString();
                }

                if (UserKeys.ContainsKey(DIR_SEP))
                {
                    id = UserKeys[DIR_SEP];
                }

                this.ID = id;

                Add(paths);
            }
예제 #10
0
 public void SetEncInstance(UserKeys enc)
 {
     ownKeys = enc;
 }
예제 #11
0
파일: Program.cs 프로젝트: tamsky/duplicati
            public void Add(string path)
            {
                if (string.IsNullOrEmpty(path))
                {
                    return;
                }

                bool isDir = false;

                if (path.EndsWith(DIR_SEP))
                {
                    isDir = true;
                    path  = path.Substring(0, path.Length - 1);
                }

                List <string> folders  = new List <string>();
                string        filename = null;

                while (!string.IsNullOrEmpty(path))
                {
                    string sourcepath = System.IO.Path.GetDirectoryName(path);
                    string elname     = System.IO.Path.GetFileName(path);
                    folders.Add(elname);

                    path = sourcepath;
                    if (path.EndsWith(DIR_SEP))
                    {
                        path = path.Substring(0, path.Length - 1);
                    }
                }

                if (!isDir)
                {
                    filename = folders[0];
                    folders.RemoveAt(0);
                }

                IFolder cur = this;

                folders.Reverse();

                StringBuilder sbp = new StringBuilder();

                foreach (var f in folders)
                {
                    sbp.Append(f);
                    sbp.Append(DIR_SEP);

                    FolderInfo next;
                    if (!cur.Folders.TryGetValue(f, out next))
                    {
                        //We have a new folder
                        string id;
                        if (!GeneratedKeys.TryGetValue(sbp.ToString(), out id))
                        {
                            id = Guid.NewGuid().ToString();
                            GeneratedKeys.Add(sbp.ToString(), id);
                        }

                        Guid g;
                        try { g = new Guid(id); }
                        catch
                        {
                            g = Guid.NewGuid();
                            GeneratedKeys[sbp.ToString()] = g.ToString();
                            Console.Error.WriteLine("Unable to parse {0} into a GUID, I told you not to edit the file!!!{1}A new GUID will be used: {2}", id, Environment.NewLine, g);
                        }

                        string userkey;
                        if (!UserKeys.TryGetValue(sbp.ToString(), out userkey))
                        {
                            userkey = g.ToString();
                        }

                        next = new FolderInfo(f, userkey, g);
                        cur.Folders.Add(f, next);
                    }

                    cur = next;
                }

                if (!string.IsNullOrEmpty(filename))
                {
                    sbp.Append(filename);

                    string id;
                    if (!GeneratedKeys.TryGetValue(sbp.ToString(), out id))
                    {
                        GeneratedKeys.Add(sbp.ToString(), id = Guid.NewGuid().ToString());
                    }
                    if (UserKeys.ContainsKey(sbp.ToString()))
                    {
                        id = UserKeys[sbp.ToString()];
                    }

                    string fullpath = System.IO.Path.Combine(m_opt.fileprefix, sbp.ToString()).Replace(DIR_SEP, "\\");

                    cur.Files.Add(filename, new FileInfo(filename, id, fullpath));
                }
            }
예제 #12
0
    /*public float age {
     *      get {
     *              return Mathf.Clamp((float)(BoltNetwork.serverFrame - ServerFrame) * BoltNetwork.frameDeltaTime, 0f, 0.5f);
     *      }
     * }*/

    public UserCommand()
    {
        Down    = new UserKeys();
        Pressed = new UserKeys();
        Last    = new UserKeys();
    }