コード例 #1
0
        // Gets the data from the database
        public RetrievePgpKeys(List <string> publicKeyEmails, string privateKeyEmail, char[] passPhrase, bool toEncrypt, KeyStoreDB keyStoreDb)
        {
            if (publicKeyEmails == null || publicKeyEmails.Count <= 0)
            {
                throw new ArgumentNullException("publicKeyName");
            }
            if (string.IsNullOrEmpty(privateKeyEmail))
            {
                throw new ArgumentNullException("privateKeyName");
            }
            if (passPhrase == null || passPhrase.Count() <= 0)
            {
                throw new ArgumentNullException("passPhrase");
            }

            PublicKeys = new List <PgpPublicKey>();

            foreach (string publicKeyEmail in publicKeyEmails)
            {
                KeyUsers keyUser = keyStoreDb.KeyUsers.Where(u => u.Email == publicKeyEmail).FirstOrDefault();
                if (keyUser != null)
                {
                    PublicKeys.Add(ReadPublicKey(keyUser.KeyStoreID, keyStoreDb));
                }
            }
            KeyUsers keySecUser = keyStoreDb.KeyUsers.Where(u => u.Email == privateKeyEmail).FirstOrDefault();

            SecretKey  = ReadSecretKey(keySecUser.KeyStoreID, keyStoreDb, toEncrypt);
            PrivateKey = ReadPrivateKey(passPhrase);
        }
コード例 #2
0
        public RetrievePgpKeys(string privateKeyEmail, bool toEncrypt, KeyStoreDB keyStoreDb)
        {
            if (string.IsNullOrEmpty(privateKeyEmail))
            {
                throw new ArgumentNullException("privateKeyName");
            }

            KeyUsers keySecUser = keyStoreDb.KeyUsers.Where(u => u.Email == privateKeyEmail).FirstOrDefault();

            SecretKey = ReadSecretKey(keySecUser.KeyStoreID, keyStoreDb, toEncrypt);
        }
コード例 #3
0
        private bool RemovePublicKeyForSecretKey(long keyId, KeyStoreDB keyStoreDB)
        {
            KeyStores pubKeyDelete = keyStoreDB.KeyStores.Find(keyId);

            if (pubKeyDelete != null)
            {
                KeyUsers pubUserDelete = keyStoreDB.KeyUsers.Find(keyId);
                if (pubUserDelete != null)
                {
                    keyStoreDB.KeyUsers.Remove(pubUserDelete);
                }
                keyStoreDB.KeyStores.Remove(pubKeyDelete);
                keyStoreDB.SaveChanges();
            }
            return(true);
        }
コード例 #4
0
        public KeyView(KeyStores keyData, long userId)
        {
            this.KeyType    = keyData.KeyType;
            this.OwnerTrust = keyData.OwnerTrust;
            StringBuilder buildFingerprint = new StringBuilder();

            for (int x = 0; x < keyData.Fingerprint.Length; x++)
            {
                buildFingerprint.Append(string.Format("{0} ", keyData.Fingerprint[x].ToString("X2")));
            }
            this.Fingerprint     = buildFingerprint.ToString().TrimEnd();;
            this.IsEncryptionKey = keyData.IsEncryptionKey;
            this.IsSigningKey    = keyData.IsSigningKey;
            this.IsMasterKey     = keyData.IsMasterKey;
            this.ValidDays       = keyData.ValidDays;
            this.CreationTime    = keyData.CreationTime;
            this.KeyStoreId      = keyData.KeyStoreID;
            KeyUsers userData = keyData.KeyUsers.Where(u => u.KeyUserID == userId).FirstOrDefault();

            if (userData != null)
            {
                this.KeyUserId = userData.KeyUserID;
                if (userData.UserName != null)
                {
                    this.UserName = userData.UserName;
                }
                if (userData.Email != null)
                {
                    this.Email = userData.Email;
                }
                if (userData.EncryptionType != null)
                {
                    this.EncryptionType = userData.EncryptionType;
                }
                this.KeySize = userData.KeySize;
            }
        }
コード例 #5
0
        public int ImportSecretKey(string fileName, string filePath, KeyStoreDB keyStoreDB)
        {
            int cntImport = 0;

            string       keyPath           = Path.Combine(filePath, fileName);
            string       stringFileContent = File.ReadAllText(keyPath);
            PgpSecretKey secKey            = ReadSecretKey(keyPath, true);

            //bool removed = RemovePublicKeyForSecretKey(secKey.KeyId, keyStoreDB);

            try {
                keyStoreDB.KeyStores.Add(new KeyStores()
                {
                    KeyStoreID      = secKey.KeyId,
                    ArmouredKeyFile = stringFileContent,
                    Fingerprint     = secKey.PublicKey.GetFingerprint(),
                    CreationTime    = secKey.PublicKey.CreationTime,
                    ValidDays       = secKey.PublicKey.ValidDays,
                    IsEncryptionKey = false,
                    IsMasterKey     = secKey.IsMasterKey,
                    IsSigningKey    = secKey.IsSigningKey,
                    IsRevoked       = secKey.PublicKey.IsRevoked(),
                    KeyType         = "Secret"
                });
                IEnumerable userIDs = secKey.UserIds;
                foreach (string userId in userIDs)
                {
                    Match match = Regex.Match(userId, strRegex, RegexOptions.Compiled);
                    if (match != null)
                    {
                        string comment1 = match.Groups["comment1"] != null ? match.Groups["comment1"].Value : string.Empty;
                        string comment2 = match.Groups["comment2"] != null ? match.Groups["comment2"].Value : string.Empty;
                        if (!string.IsNullOrEmpty(comment2))
                        {
                            comment1 += " " + comment2;
                        }
                        KeyUsers userExists = keyStoreDB.KeyUsers.Find(secKey.KeyId);
                        if (userExists != null)
                        {
                            keyStoreDB.KeyUsers.Remove(userExists);
                            keyStoreDB.SaveChanges();
                        }
                        keyStoreDB.KeyUsers.Add(new KeyUsers()
                        {
                            KeyStoreID     = secKey.KeyId,
                            UserName       = match.Groups["user"] != null ? match.Groups["user"].Value : string.Empty,
                            Email          = match.Groups["email"] != null ? match.Groups["email"].Value : string.Empty,
                            Comment        = comment1,
                            EncryptionType = ((PublicKeyAlgorithmTag)secKey.PublicKey.Algorithm).ToString(),
                            KeySize        = secKey.PublicKey.BitStrength
                        });
                    }
                }
                keyStoreDB.SaveChanges();
            }
            catch (DbUpdateConcurrencyException dbConEx) {
                throw new DbUpdateConcurrencyException(dbConEx.Message);
            }
            catch (DbUpdateException dbEx) {
                throw new DbUpdateException(dbEx.Message);
            }
            catch (Exception ex) {
                throw new Exception(ex.Message);
            }
            return(++cntImport);
        }