// 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); }
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); }
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); }
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; } }
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); }