Ephenodrom / Dart-Basic-Utils

A dart package for many helper methods fitting common situations
MIT License
364 stars 77 forks source link

'ASN1Sequence' is not a subtype of type 'ASN1Integer' in type cast #61

Closed psycura closed 2 years ago

psycura commented 2 years ago

Hello, and thank you for this library.

I have an issue with extracting RSA Public ket from the RSA Certificate. The given Certificate:

-----BEGIN CERTIFICATE-----
MIIDWzCCAkOgAwIBAgIQTX9LRo00ZpDIAvINyDRqpzANBgkqhkiG9w0BAQsFADA7
MRIwEAYDVQQKEwlNZWR0cm9uaWMxJTAjBgNVBAMMHFBpbGxjYW3ihKIgR2VuaXVz
IElzc3VpbmcgQ0EwHhcNMjExMjEyMTYxMDU3WhcNMjMxMjEyMTYxMDU2WjAeMRww
GgYDVQQDExNwYXRjaCBjZXJ0aWZpY2F0ZSAxMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEAm/97dBCFekttJrq5VwVlT/D3Qvs7wBhl776O+q5galKtg2gV
2mJVLSlC4w6jIVm31KpHug1TWoHHiwhTpp8deLSDI6uMj6zOZXTRhU0XavAugREZ
jFkxtp2IzmLhxaxAWE+xrX2YeuCsRVPVF3J/sLmAt6PUmuHYE+xnENfEfxM+Kksu
MA8vE1uHD/jmr36IiznAQ7z6aDiJrAG9VC0hppfRpGqO+jSYk3ReQMSI2PG8W+VC
mO+Um8HeGZ7F+NPWxbnnHm7y8TDdsTmfvsp38cbskGgK0/OT+GDkDO4tdIY15uRm
jM1azhNEvfFaaZvDh/RQ/9mWbEoPrhy9dGtt8wIDAQABo3gwdjAfBgNVHSMEGDAW
gBT4wEB5tLJ7Q/nmGlHMh9VIh9Dd0TAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/
BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDAjAdBgNVHQ4EFgQUJiFDXdiOpL9J
v6DIZLKfbOlnR3wwDQYJKoZIhvcNAQELBQADggEBAG/m8Zz5QD/Or1HY1v+j0hK9
j4x5EGeVUm3eRwCWxuBY/4+4SzloY09CuV6eVM4d8b7oCjvGvOw9r5YRtYVomsiR
+HljSaVevikCjSYGHk/FqAEBjKKukZ99uqVgBnKyHgoYHOurUM1D2+4313vWnHWg
WZttzq2wDd1YGE2xT3gxc5GL9KJBuEklTlF/Ve3Wq/1yrGuSaXM/Ig1eqBAc/fgV
ZpB8LNCbmJ9ierNLab78DVzNeoRd0vTZ9sUSghdpOmXL0RlMgniqdaeKwYDiRZb/
U0+vI6AZYMx15Es0eGGEYSPgjGBspB4Clbuw08RLYlbB4raA0TBAq8wR3pAK9dY=
-----END CERTIFICATE-----

And when i try to call: CryptoUtils.rsaPublicKeyFromPem(cert)

I receive an error: 'ASN1Sequence' is not a subtype of type 'ASN1Integer' in type cast What can be the reason?

Ephenodrom commented 2 years ago

I will take a look at this next week if possible. Do you have some more background information on the certificate ? Is this a self signed one and if "yes", how was it generated.

Regards

psycura commented 2 years ago

I think, i found the root of issue - its my misunderstood of what this method should do rsaPublicKeyFromPem I was sure that this method can extract public key from any valid pem file. But as i found out - he can convert pem file of public key to the RsaPublicKey object. So this issue can be closed.

However, thanks for you response )

avinashgoswami commented 5 months ago

Unhandled Exception: type 'ASN1Sequence' is not a subtype of type 'ASN1Integer' in type cast

@psycura i have same issue, could you help me to sort it out.

-----BEGIN PUBLIC KEY-----
MIIFpTCCBI2gAwIBAgITGgAQ0GaPACeBT7xh5QAAABDQZjANBgkqhkiG9w0BAQsF
ADBAMRMwEQYKCZImiZPyLGQBGRYDU0JJMRIwEAYKCZImiZPyLGQBGRYCQUQxFTAT
BgNVBAMTDFNCSS1QUk9ELVJDQTAeFw0yMzEyMDYxMzI3MTlaFw0yNTEyMDUxMzI3
MTlaMIGHMQswCQYDVQQGEwJJTjELMAkGA1UECBMCTUgxCzAJBgNVBAcTAk5NMQww
CgYDVQQKEwNTQkkxDDAKBgNVBAsTA1ZWTTEfMB0GA1UEAxMWSVRDT1JQU01FVlZN
VUFUTVpXRUIwMTEhMB8GCSqGSIb3DQEJARYSdWF0LnJsbXNAc2JpLmNvLmluMIIB
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0aGOmlfAtpYh5Q1WPZ81wjFi
EbkmtGqhq+1mTbn3zWOGlOat065qkaTBys0wfMASS06zEf35ycDzBaT1vbS56IJ3
ccTY1/oZsx5LzdHU5wuOlu0bPM8SogItQeY632f3TicfveVdZMUux5vusYVZ4Uaa
b4WTgJJZpBPuWcjzx+a3HqMJVtcl/TG37pd+ShcKFW0UJHN+/ZPp8XpPP3C4Ht2n
Zp+C1xqqvSIHkVezQoiamUlgPgv7mScjz1BwnWm45HNTNR388Wcr22ONovVf+2gy
c4bwSzjLO60RtcFG3BkTEs5l9pDna5yTrm19wjDuWH7704Up6z3TmWUF4NXWUQID
AQABo4ICTjCCAkowHQYDVR0OBBYEFCX8f/W0HHL9S76ftD5Lfm6U8zqeMB8GA1Ud
IwQYMBaAFDeaIHQwXiT9H+W/rv8A9GsVdZ+wMIHLBgNVHR8EgcMwgcAwgb2ggbqg
gbeGgbRsZGFwOi8vL0NOPVNCSS1QUk9ELVJDQSxDTj1TQklST09UQ0FQUk9ELENO
PUNEUCxDTj1QdWJsaWMlMjBLZXklMjBTZXJ2aWNlcyxDTj1TZXJ2aWNlcyxDTj1D
b25maWd1cmF0aW9uLERDPUFELERDPVNCST9jZXJ0aWZpY2F0ZVJldm9jYXRpb25M
aXN0P2Jhc2U/b2JqZWN0Q2xhc3M9Y1JMRGlzdHJpYnV0aW9uUG9pbnQwgbkGCCsG
AQUFBwEBBIGsMIGpMIGmBggrBgEFBQcwAoaBmWxkYXA6Ly8vQ049U0JJLVBST0Qt
UkNBLENOPUFJQSxDTj1QdWJsaWMlMjBLZXklMjBTZXJ2aWNlcyxDTj1TZXJ2aWNl
cyxDTj1Db25maWd1cmF0aW9uLERDPUFELERDPVNCST9jQUNlcnRpZmljYXRlP2Jh
c2U/b2JqZWN0Q2xhc3M9Y2VydGlmaWNhdGlvbkF1dGhvcml0eTAOBgNVHQ8BAf8E
BAMCBaAwPAYJKwYBBAGCNxUHBC8wLQYlKwYBBAGCNxUIhoGcXIPHgFuD9ZE3hOCB
ZrPqZGqFsJU3g5uAFwIBZQIBFDATBgNVHSUEDDAKBggrBgEFBQcDATAbBgkrBgEE
AYI3FQoEDjAMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBCwUAA4IBAQCbSHbZr+nf
1u4I+2RL3moBm8l/OdXxVSwpWWalITQIKy3x5sNPnaCh/XT+FoNcr/b0Qlzi9bBV
zbfmZIvf4gXcBMF13s/5dd5N5cL9es8SiopGzMpWcoyh90dRU+885z/UKOsGuh/M
LeWWzwfaD4UFFJvZjbCAFz8k1CF+Fw7dFvmup+aQIRpVsWe+mF1QiRm1G9v742sT
9Hv91QYJL6i7gvUdozlSNmI9h0BP6TSysdlfr9FTg+NnUf/zNT3XeK/gc/uEiXFq
jNucKfT9c9zpujMh16ogL4vM88ur0gB78pAKuA8ExVDb1YybzeUi08V6UIyOZH4D
73TIptTeVgRu
-----END PUBLIC KEY-----
  Future<RSAPublicKey> getServerPublicKey() async {
  var keyStr = await _readFileAsync('assets/raw/vvm_pub_01_10_22_2_uat') as String;
  return CryptoUtils.rsaPublicKeyFromPem(keyStr);
  }

  static Future<dynamic> _readFileAsync(String filePath) async {
    var res = await rootBundle.loadString(filePath);
    return res;
  }