Update
This is the data that you provided during the analysis using the @erickson link provided:
SEQUENCE (2 elem) SEQUENCE (2 elem) OBJECT IDENTIFIER 1.2.840.113549.1.1.1 NULL BIT STRING (1 elem) SEQUENCE (2 elem) INTEGER(1024 bit) INTEGER 65537
The reason the previous code throws an ASN1 bad tag value met.
exception ASN1 bad tag value met.
, is that aData
contains the wrong data (contains all the data above). From what I saw, this is how the 3 arguments break down into System.Security.Cryptography.X509Certificates.PublicKey
.
- The first parameter is the OID, which is the OBJECT identifier above.
- The second parameter is the public key parameters. In the parsing above, you can see that it is NULL.
- The third parameter is the actual value of the public key. It is made up of the third sequence above. The sequence has 2 integers, a module of 1024 bits, followed by a public indicator.
I tested it using the following code. I could not find a built-in method for analyzing data without writing a DER parser.
Oid oid = new Oid("1.2.840.113549.1.1.1"); AsnEncodedData keyValue = new AsnEncodedData(getBytes("30818902818100EB11E7B4462E09BB3F907E2598BA2FC4F541925DABBFD8FF0B8E74C3F15E149E7FB6140655184DE42F6DDBCDEA142D8BF83DE95E07781F98988324E294DCDB392F82890145078C5C0379BB7434FFAC04AD1529E4C04CBD98AFF4B76D3FF1872FB5C6D8F8464755EDF5714E7E7A2DBE2E7549F0BB12B85796F93DD38A8FFF97730203010001")); AsnEncodedData keyParam = new AsnEncodedData(new byte[] {05, 00}); PublicKey pubKeyRdr = new System.Security.Cryptography.X509Certificates.PublicKey(oid, keyParam, keyValue); System.Diagnostics.Debug.WriteLine(pubKeyRdr.Key.KeyExchangeAlgorithm); System.Diagnostics.Debug.WriteLine(pubKeyRdr.Key.KeySize);
"30818902818100EB11E7B4462E09BB3F907E2598BA2FC4F541925DABBFD8FF0B8E74C3F15E149E7FB6140655184DE42F6DDBCDEA142D8BF83DE95E07781F98988324E294DCDB392F82890145078C5C0379BB7434FFAC04AD1529E4C04CBD98AFF4B76D3FF1872FB5C6D8F8464755EDF5714E7E7A2DBE2E7549F0BB12B85796F93DD38A8FFF97730203010001")); Oid oid = new Oid("1.2.840.113549.1.1.1"); AsnEncodedData keyValue = new AsnEncodedData(getBytes("30818902818100EB11E7B4462E09BB3F907E2598BA2FC4F541925DABBFD8FF0B8E74C3F15E149E7FB6140655184DE42F6DDBCDEA142D8BF83DE95E07781F98988324E294DCDB392F82890145078C5C0379BB7434FFAC04AD1529E4C04CBD98AFF4B76D3FF1872FB5C6D8F8464755EDF5714E7E7A2DBE2E7549F0BB12B85796F93DD38A8FFF97730203010001")); AsnEncodedData keyParam = new AsnEncodedData(new byte[] {05, 00}); PublicKey pubKeyRdr = new System.Security.Cryptography.X509Certificates.PublicKey(oid, keyParam, keyValue); System.Diagnostics.Debug.WriteLine(pubKeyRdr.Key.KeyExchangeAlgorithm); System.Diagnostics.Debug.WriteLine(pubKeyRdr.Key.KeySize);
It outputs RSA-PKCS1-KeyEx
and 1024
.
source share