14
14
C library (https://github.com/italiangrid/voms) instead...
15
15
16
16
"""
17
+ from functools import lru_cache
18
+
17
19
from pyasn1 .codec .der .decoder import decode as der_decode
18
20
from pyasn1 .error import PyAsn1Error
19
21
from pyasn1 .type import namedtype , univ , char as asn1char
@@ -93,6 +95,11 @@ def decodeDIRACGroup(m2cert):
93
95
"""
94
96
95
97
diracGroupOctetString = retrieveExtension (m2cert , DIRAC_GROUP_OID )
98
+ return _decodeDIRACGroup (diracGroupOctetString )
99
+
100
+
101
+ @lru_cache
102
+ def _decodeDIRACGroup (diracGroupOctetString ):
96
103
diracGroupUTF8Str , _rest = der_decode (diracGroupOctetString , asn1Spec = asn1char .IA5String ())
97
104
98
105
return diracGroupUTF8Str .asOctets ().decode ()
@@ -336,11 +343,7 @@ def retrieveExtension(m2Cert, extensionOID):
336
343
337
344
:raises: LookupError if it does not have the extension
338
345
"""
339
-
340
- # Decode the certificate as a RFC2459 Certificate object.It is compatible
341
- # with the RFC proxy definition
342
- cert , _rest = der_decode (m2Cert .as_der (), asn1Spec = rfc2459 .Certificate ())
343
- extensions = cert ["tbsCertificate" ]["extensions" ]
346
+ extensions = _extensionsFromCertDER (m2Cert .as_der ())
344
347
345
348
# Construct an OID object for comparison purpose
346
349
extensionOIDObj = univ .ObjectIdentifier (extensionOID )
@@ -354,3 +357,12 @@ def retrieveExtension(m2Cert, extensionOID):
354
357
355
358
# If we are here, it means that we could not find the expected extension.
356
359
raise LookupError (f"Could not find extension with OID { extensionOID } " )
360
+
361
+
362
+ @lru_cache (maxsize = 1024 )
363
+ def _extensionsFromCertDER (der ):
364
+ # Decode the certificate as a RFC2459 Certificate object.It is compatible
365
+ # with the RFC proxy definition
366
+ cert , _rest = der_decode (der , asn1Spec = rfc2459 .Certificate ())
367
+ extensions = cert ["tbsCertificate" ]["extensions" ]
368
+ return extensions
0 commit comments