/// <summary> /// Returns a new key ring with the secret key passed in either added or /// replacing an existing one with the same key ID. /// </summary> /// <param name="secRing">The secret key ring to be modified.</param> /// <param name="secKey">The secret key to be inserted.</param> /// <returns>A new <c>PgpSecretKeyRing</c></returns> public static PgpSecretKeyRing InsertSecretKey(IPgpSecretKeyRing secRing, IPgpSecretKey secKey) { var keys = Platform.CreateArrayList(secRing.GetSecretKeys()); var found = false; var masterFound = false; for (var i = 0; i != keys.Count; i++) { var key = keys[i]; if (key.KeyId == secKey.KeyId) { found = true; keys[i] = secKey; } if (key.IsMasterKey) { masterFound = true; } } if (!found) { if (secKey.IsMasterKey) { if (masterFound) { throw new ArgumentException("cannot add a master key to a ring that already has one"); } keys.Insert(0, secKey); } else { keys.Add(secKey); } } return(new PgpSecretKeyRing(keys, secRing.GetExtraPublicKeys())); }
/// <summary> /// Returns a new key ring with the secret key passed in either added or /// replacing an existing one with the same key ID. /// </summary> /// <param name="secRing">The secret key ring to be modified.</param> /// <param name="secKey">The secret key to be inserted.</param> /// <returns>A new <c>PgpSecretKeyRing</c></returns> public static PgpSecretKeyRing InsertSecretKey(IPgpSecretKeyRing secRing, IPgpSecretKey secKey) { var keys = Platform.CreateArrayList(secRing.GetSecretKeys()); var found = false; var masterFound = false; for (var i = 0; i != keys.Count; i++) { var key = keys[i]; if (key.KeyId == secKey.KeyId) { found = true; keys[i] = secKey; } if (key.IsMasterKey) { masterFound = true; } } if (!found) { if (secKey.IsMasterKey) { if (masterFound) throw new ArgumentException("cannot add a master key to a ring that already has one"); keys.Insert(0, secKey); } else { keys.Add(secKey); } } return new PgpSecretKeyRing(keys, secRing.GetExtraPublicKeys()); }
private void CheckEccKey(IPgpSecretKeyRing secretKeyRing) { var keyCount = 0; var bytes = secretKeyRing.GetEncoded(); var pgpSec2 = new PgpSecretKeyRing(bytes); foreach (PgpSecretKey k in pgpSec2.GetSecretKeys()) { keyCount++; var pk = k.PublicKey; pk.GetSignatures(); var pkBytes = pk.GetEncoded(); var pkR1 = new PgpPublicKeyRing(pkBytes); Assert.IsNotNull(pkR1); var pk1 = pkR1.GetPublicKey(); AreEqual(pk1.GetFingerprint(), pk.GetFingerprint()); var pkBytes1 = pkR1.GetEncoded(); var pkR2 = new PgpPublicKeyRing(pkBytes1); Assert.IsNotNull(pkR2); var pkBytes2 = pkR2.GetEncoded(); AreEqual(pkBytes1, pkBytes2); } if (keyCount != secretKeyRing.SecretKeyCount) { Fail("wrong number of secret keys"); } }