@@ -129,7 +129,7 @@ def der_cert(der_data):
129129 """
130130 Load a DER encoded certificate
131131
132- @param der : DER-encoded certificate
132+ @param der_data : DER-encoded certificate
133133 @return: RSA instance
134134 """
135135 if isinstance (der_data , str ):
@@ -496,6 +496,16 @@ def add_kid(self):
496496 """
497497 self .kid = b64e (self .thumbprint ('SHA-256' )).decode ('utf8' )
498498
499+ def is_private_key (self ):
500+ for p in self .members :
501+ if p not in self .public_members :
502+ if getattr (self , p ):
503+ return True
504+ return False
505+
506+ def is_public_key (self ):
507+ return not self .is_private_key ()
508+
499509
500510def deser (val ):
501511 """
@@ -570,13 +580,13 @@ class RSAKey(Key):
570580
571581 Parameters according to https://tools.ietf.org/html/rfc7518#section-6.3
572582 """
573- members = Key .members
583+ members = Key .members [:]
574584 # These are the RSA key specific parameters, they are always supposed to
575585 # be strings or bytes
576586 members .extend (["n" , "e" , "d" , "p" , "q" ])
577587 # The parameters that represent long ints in the key instances
578588 longs = ["n" , "e" , "d" , "p" , "q" , "dp" , "dq" , "di" , "qi" ]
579- public_members = Key .public_members
589+ public_members = Key .public_members [:]
580590 # the public members of the key
581591 public_members .extend (["n" , "e" ])
582592 required = ['kty' , 'n' , 'e' ]
@@ -813,11 +823,12 @@ class ECKey(Key):
813823
814824 Parameters according to https://tools.ietf.org/html/rfc7518#section-6.2
815825 """
816- members = Key .members
826+ members = Key .members [:]
817827 # The elliptic curve specific attributes
818828 members .extend (["crv" , "x" , "y" , "d" ])
819829 longs = ['x' , 'y' , 'd' ]
820- public_members = ["kty" , "alg" , "use" , "kid" , "crv" , "x" , "y" ]
830+ public_members = Key .public_members [:]
831+ public_members .extend (["kty" , "alg" , "use" , "kid" , "crv" , "x" , "y" ])
821832 required = ['crv' , 'key' , 'x' , 'y' ]
822833
823834 def __init__ (self , kty = "EC" , alg = "" , use = "" , kid = "" , key = None ,
@@ -992,8 +1003,9 @@ class SYMKey(Key):
9921003 }
9931004
9941005 """
995- members = ["kty" , "alg" , "use" , "kid" , "k" ]
996- public_members = members [:]
1006+ members = Key .members [:]
1007+ members .extend (["kty" , "alg" , "use" , "kid" , "k" ])
1008+ public_members = Key .public_members [:]
9971009 required = ['k' , 'kty' ]
9981010
9991011 def __init__ (self , kty = "oct" , alg = "" , use = "" , kid = "" , key = None ,
@@ -1046,6 +1058,12 @@ def encryption_key(self, alg, **kwargs):
10461058
10471059 return _enc_key
10481060
1061+ def is_private_key (self ):
1062+ return True
1063+
1064+ def is_public_key (self ):
1065+ return True
1066+
10491067
10501068# -----------------------------------------------------------------------------
10511069
@@ -1181,7 +1199,7 @@ def __getitem__(self, item):
11811199 """
11821200 Get all keys of a specific key type
11831201
1184- :param kty : Key type
1202+ :param item : Key type
11851203 :return: list of keys
11861204 """
11871205 kty = item .lower ()
0 commit comments