public static void ImportFromPem_SpkiAlgorithmMismatch_Throws() { using (DSA dsa = DSAFactory.Create()) { string pem = @" The below key is for an RSA SPKI -----BEGIN PUBLIC KEY----- MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALc/WfXui9VeJLf/AprRaoVDyW0lPlQx m5NTLEHDwUd7idstLzPXuah0WEjgao5oO1BEUR4byjYlJ+F89Cs4BhUCAwEAAQ== -----END PUBLIC KEY-----"; Assert.Throws <CryptographicException>(() => dsa.ImportFromPem(pem)); } }
public static void CreateFromSubjectPublicKeyInfo_Roundtrip_DSA() { using DSA dsa = DSA.Create(); dsa.ImportFromPem(TestData.DsaPkcs8PublicKey); byte[] spki = dsa.ExportSubjectPublicKeyInfo(); PublicKey key = PublicKey.CreateFromSubjectPublicKeyInfo(spki, out int read); Assert.IsAssignableFrom <DSA>(key.Key); Assert.Equal("1.2.840.10040.4.1", key.Oid.Value); Assert.Equal(spki, key.ExportSubjectPublicKeyInfo()); Assert.Equal(spki.Length, read); }
public static void ImportFromPem_Pkcs8UnEncrypted_Simple() { using (DSA dsa = DSAFactory.Create()) { string pem = @" -----BEGIN PRIVATE KEY----- MIHGAgEAMIGoBgcqhkjOOAQBMIGcAkEA1qi38cr3ppZNB2Y/xpHSL2q81Vw3rvWN IHRnQNgv4U4UY2NifZGSUULc3uOEvgoeBO1b9fRxSG9NmG1CoufflQIVAPq19iXV 1eFkMKHvYw6+M4l8wiT5AkAIRMSQ5S71jgWQLGNtZNHV6yxggqDU87/RzgeOh7Q6 fve77OGaTv4qbZwinTYAg86p9yHzmwW6+XBS3vxnpYorBBYCFC49eoTIW2Z4Xh9v 55aYKyKwy5i8 -----END PRIVATE KEY-----"; dsa.ImportFromPem(pem); DSAParameters dsaParameters = dsa.ExportParameters(true); DSAImportExport.AssertKeyEquals(DSATestData.Dsa512Parameters, dsaParameters); } }
public static void ExportSubjectPublicKeyInfo_DSA() { using DSA dsa = DSA.Create(); dsa.ImportFromPem(TestData.DsaPkcs8PublicKey); PublicKey key = new PublicKey(dsa); Span <byte> algSpki = dsa.ExportSubjectPublicKeyInfo(); Assert.True(algSpki.SequenceEqual(key.ExportSubjectPublicKeyInfo()), "SequenceEquals(ExportSubjectPublicKeyInfo)"); // Just right Assert.True(key.TryExportSubjectPublicKeyInfo(algSpki, out int written), nameof(key.TryExportSubjectPublicKeyInfo)); Assert.Equal(algSpki.Length, written); // Too small Assert.False(key.TryExportSubjectPublicKeyInfo(algSpki.Slice(1), out written), nameof(key.TryExportSubjectPublicKeyInfo)); Assert.Equal(0, written); }
public static void ImportFromPem_SubjectPublicKeyInfo_Simple() { using (DSA dsa = DSAFactory.Create()) { string pem = @" -----BEGIN PUBLIC KEY----- MIHxMIGoBgcqhkjOOAQBMIGcAkEA1qi38cr3ppZNB2Y/xpHSL2q81Vw3rvWNIHRn QNgv4U4UY2NifZGSUULc3uOEvgoeBO1b9fRxSG9NmG1CoufflQIVAPq19iXV1eFk MKHvYw6+M4l8wiT5AkAIRMSQ5S71jgWQLGNtZNHV6yxggqDU87/RzgeOh7Q6fve7 7OGaTv4qbZwinTYAg86p9yHzmwW6+XBS3vxnpYorA0QAAkEAwwDg5n2HfmztOf7q qsHywr1WjmoyRnIn4Stq5FqNlHhUGkgKyAA4qshjgn1uOYQGGiWQXBi9JJmoOWY8 PKRWBQ== -----END PUBLIC KEY-----"; dsa.ImportFromPem(pem); DSAParameters dsaParameters = dsa.ExportParameters(false); DSAImportExport.AssertKeyEquals(DSATestData.Dsa512Parameters.ToPublic(), dsaParameters); } }
public static void ImportFromPem_Pkcs8UnEncrypted_IgnoresUnrelatedAlgorithm() { using (DSA dsa = DSAFactory.Create()) { string pem = @" -----BEGIN EC PRIVATE KEY----- MHcCAQEEIHChLC2xaEXtVv9oz8IaRys/BNfWhRv2NJ8tfVs0UrOKoAoGCCqGSM49 AwEHoUQDQgAEgQHs5HRkpurXDPaabivT2IaRoyYtIsuk92Ner/JmgKjYoSumHVmS NfZ9nLTVjxeD08pD548KWrqmJAeZNsDDqQ== -----END EC PRIVATE KEY----- -----BEGIN PRIVATE KEY----- MIHGAgEAMIGoBgcqhkjOOAQBMIGcAkEA1qi38cr3ppZNB2Y/xpHSL2q81Vw3rvWN IHRnQNgv4U4UY2NifZGSUULc3uOEvgoeBO1b9fRxSG9NmG1CoufflQIVAPq19iXV 1eFkMKHvYw6+M4l8wiT5AkAIRMSQ5S71jgWQLGNtZNHV6yxggqDU87/RzgeOh7Q6 fve77OGaTv4qbZwinTYAg86p9yHzmwW6+XBS3vxnpYorBBYCFC49eoTIW2Z4Xh9v 55aYKyKwy5i8 -----END PRIVATE KEY-----"; dsa.ImportFromPem(pem); DSAParameters dsaParameters = dsa.ExportParameters(true); DSAImportExport.AssertKeyEquals(DSATestData.Dsa512Parameters, dsaParameters); } }
public static void ImportFromPem_EncryptedPrivateKeyFails() { using (DSA dsa = DSAFactory.Create()) { string pem = @" -----BEGIN ENCRYPTED PRIVATE KEY----- MIIBIDBLBgkqhkiG9w0BBQ0wPjApBgkqhkiG9w0BBQwwHAQIkM/kCKe6rYsCAggA MAwGCCqGSIb3DQIJBQAwEQYFKw4DAgcECBOccveL65bDBIHQiCcCqwxJs93g1+16 7Gx1D5lL4/nZ94fRa+Hl4nGEX4gmjuxH6pOHKyywwflAyXNTfVhOCP9zBedwENx9 MGHbpaaShD6iJfoGMRX0frr0mMCtuOOZkkjBF9pSpkhaH0TDSq1PrVLxcM0/S4Vs +//2uPrP8U+CTW9W7CXCZw698BAuevZRuD0koT2Bn9ErhTiuVZZMcOjtLmN2oXHG dVYwfovccu8ktEAwk5XAOo0r+5CCw2lDDw/hbDeO87BToC5Cc5nu3F5LxAUj8Flc v8pi3w== -----END ENCRYPTED PRIVATE KEY-----"; ArgumentException ae = AssertExtensions.Throws <ArgumentException>("input", () => dsa.ImportFromPem(pem)); Assert.Contains(EncryptedExceptionMarker, ae.Message); } }
public static void ImportFromPem_Pkcs8_AmbiguousKey_EncryptedPkcs8() { using (DSA dsa = DSAFactory.Create()) { string pem = @" -----BEGIN ENCRYPTED PRIVATE KEY----- MIIBIDBLBgkqhkiG9w0BBQ0wPjApBgkqhkiG9w0BBQwwHAQIkM/kCKe6rYsCAggA MAwGCCqGSIb3DQIJBQAwEQYFKw4DAgcECBOccveL65bDBIHQiCcCqwxJs93g1+16 7Gx1D5lL4/nZ94fRa+Hl4nGEX4gmjuxH6pOHKyywwflAyXNTfVhOCP9zBedwENx9 MGHbpaaShD6iJfoGMRX0frr0mMCtuOOZkkjBF9pSpkhaH0TDSq1PrVLxcM0/S4Vs +//2uPrP8U+CTW9W7CXCZw698BAuevZRuD0koT2Bn9ErhTiuVZZMcOjtLmN2oXHG dVYwfovccu8ktEAwk5XAOo0r+5CCw2lDDw/hbDeO87BToC5Cc5nu3F5LxAUj8Flc v8pi3w== -----END ENCRYPTED PRIVATE KEY----- -----BEGIN PRIVATE KEY----- MIHGAgEAMIGoBgcqhkjOOAQBMIGcAkEA1qi38cr3ppZNB2Y/xpHSL2q81Vw3rvWN IHRnQNgv4U4UY2NifZGSUULc3uOEvgoeBO1b9fRxSG9NmG1CoufflQIVAPq19iXV 1eFkMKHvYw6+M4l8wiT5AkAIRMSQ5S71jgWQLGNtZNHV6yxggqDU87/RzgeOh7Q6 fve77OGaTv4qbZwinTYAg86p9yHzmwW6+XBS3vxnpYorBBYCFC49eoTIW2Z4Xh9v 55aYKyKwy5i8 -----END PRIVATE KEY-----"; ArgumentException ae = AssertExtensions.Throws <ArgumentException>("input", () => dsa.ImportFromPem(pem)); Assert.Contains(AmbiguousExceptionMarker, ae.Message); } }
public static void ImportFromPem_Pkcs8_AmbiguousKey_Spki() { using (DSA dsa = DSAFactory.Create()) { string pem = @" -----BEGIN PUBLIC KEY----- MIHxMIGoBgcqhkjOOAQBMIGcAkEA1qi38cr3ppZNB2Y/xpHSL2q81Vw3rvWNIHRn QNgv4U4UY2NifZGSUULc3uOEvgoeBO1b9fRxSG9NmG1CoufflQIVAPq19iXV1eFk MKHvYw6+M4l8wiT5AkAIRMSQ5S71jgWQLGNtZNHV6yxggqDU87/RzgeOh7Q6fve7 7OGaTv4qbZwinTYAg86p9yHzmwW6+XBS3vxnpYorA0QAAkEAwwDg5n2HfmztOf7q qsHywr1WjmoyRnIn4Stq5FqNlHhUGkgKyAA4qshjgn1uOYQGGiWQXBi9JJmoOWY8 PKRWBQ== -----END PUBLIC KEY----- -----BEGIN PRIVATE KEY----- MIHGAgEAMIGoBgcqhkjOOAQBMIGcAkEA1qi38cr3ppZNB2Y/xpHSL2q81Vw3rvWN IHRnQNgv4U4UY2NifZGSUULc3uOEvgoeBO1b9fRxSG9NmG1CoufflQIVAPq19iXV 1eFkMKHvYw6+M4l8wiT5AkAIRMSQ5S71jgWQLGNtZNHV6yxggqDU87/RzgeOh7Q6 fve77OGaTv4qbZwinTYAg86p9yHzmwW6+XBS3vxnpYorBBYCFC49eoTIW2Z4Xh9v 55aYKyKwy5i8 -----END PRIVATE KEY-----"; ArgumentException ae = AssertExtensions.Throws <ArgumentException>("input", () => dsa.ImportFromPem(pem)); Assert.Contains(AmbiguousExceptionMarker, ae.Message); } }
public static void ImportFromPem_NoPem() { using (DSA dsa = DSAFactory.Create()) { string pem = "pem? what pem? there is no pem here."; ArgumentException ae = AssertExtensions.Throws <ArgumentException>("input", () => dsa.ImportFromPem(pem)); Assert.Contains(NoPemExceptionMarker, ae.Message); } }