internal OpenPgpDigitalCertificate (PgpPublicKey pubkey) { var data = pubkey.GetFingerprint (); var builder = new StringBuilder (); for (int i = 0; i < data.Length; i++) builder.Append (data[i].ToString ("X")); // var trust = pubkey.GetTrustData (); // if (trust != null) { // TrustLevel = (TrustLevel) (trust[0] & 15); // } else { // TrustLevel = TrustLevel.None; // } Fingerprint = builder.ToString (); PublicKey = pubkey; foreach (string userId in pubkey.GetUserIds ()) { data = Encoding.UTF8.GetBytes (userId); MailboxAddress mailbox; int index = 0; if (!MailboxAddress.TryParse (ParserOptions.Default, data, ref index, data.Length, false, out mailbox)) continue; Email = mailbox.Address; Name = mailbox.Name; break; } }
static bool PgpPublicKeyMatches (PgpPublicKey key, MailboxAddress mailbox) { var secure = mailbox as SecureMailboxAddress; if (secure != null && !string.IsNullOrEmpty (secure.Fingerprint)) { if (secure.Fingerprint.Length > 16) { var fingerprint = HexEncode (key.GetFingerprint ()); return secure.Fingerprint.Equals (fingerprint, StringComparison.OrdinalIgnoreCase); } else { var id = ((int) key.KeyId).ToString ("X2"); return secure.Fingerprint.EndsWith (id, StringComparison.OrdinalIgnoreCase); } } foreach (string userId in key.GetUserIds ()) { MailboxAddress email; if (!MailboxAddress.TryParse (userId, out email)) continue; if (mailbox.Address.Equals (email.Address, StringComparison.OrdinalIgnoreCase)) return true; } return false; }