X-Git-Url: http://wagner.pp.ru/gitweb/?a=blobdiff_plain;f=ctypescrypto%2Fx509.py;h=04addada19460549d89982b9f1ae3134d858a791;hb=d2917cb2131b9b08fa6457b195606fcc0220eef1;hp=9005fc29f788111f7f64d3c60c2e0a7c49a6158a;hpb=828210758e4e99f2db8aba9d7f0750b7626b0f1f;p=oss%2Fctypescrypto.git diff --git a/ctypescrypto/x509.py b/ctypescrypto/x509.py index 9005fc2..04addad 100644 --- a/ctypescrypto/x509.py +++ b/ctypescrypto/x509.py @@ -1,8 +1,9 @@ from ctypes import c_void_p from ctypescrypto.bio import Membio -from ctypescrypto.pkey import Pkey +from ctypescrypto.pkey import PKey +from ctypescrypto.oid import Oid from ctypescrypto.exception import LibCryptoError -from crypescrypto import libcrypto +from ctypescrypto import libcrypto class X509Error(LibCryptoError): pass @@ -22,23 +23,31 @@ class X509Name: return libcrypto.X509_NAME_entry_count(self.ptr) def __getattr__(self,key): - - def __setattr__(self,key,val): + if isinstance(key,Oid): + # Return list of strings + raise NotImpemented + elif isinstance(key,int): + # Return OID, sting tuple + raise NotImplemented + else: + raise TypeError("X509 name can be indexed with oids and numbers only") + def __setattr__(self,key,val): + pass class X509_extlist: def __init__(self,ptr): self.ptr=ptr def __del__(self): libcrypto.X509_NAME_free(self.ptr) def __str__(self): - + raise NotImplemented def __len__(self): return libcrypto.X509_NAME_entry_count(self.ptr) def __getattr__(self,key): - + raise NotImplemented def __setattr__(self,key,val): - + raise NotImplemented @@ -50,7 +59,8 @@ class X509: raise TypeError("Cannot use data and ptr simultaneously") self.cert = ptr elif data is None: - raise TypeError("data argument is required") + raise TypeError("data argument is required") + else: b=Membio(data) if format == "PEM": self.cert=libcrypto.PEM_read_bio_X509(b.bio,None,None,None) @@ -65,21 +75,31 @@ class X509: b=Membio() if libcrypto.i2d_X509_bio(b.bio,self.cert)==0: raise X509Error("error serializing certificate") + @property def pubkey(self): - """ Returns EVP PKEy object of certificate public key""" + """EVP PKEy object of certificate public key""" return PKey(ptr=libcrypto.X509_get_pubkey(self.cert,False)) def verify(self,key): """ Verify self on given issuer key """ - + @property def subject(self): + """ X509Name for certificate subject name """ return X509Name(libcrypto.X509_get_subject_name(self.cert)) + @property def issuer(self): + """ X509Name for certificate issuer name """ return X509Name(libcrypto.X509_get_issuer_name(self.cert)) + @property def serial(self): + """ Serial number of certificate as integer """ return - + @property def startDate(self): - - def endDate(self); - + """ Certificate validity period start date """ + raise NotImplemented + @property + def endDate(self): + """ Certificate validity period end date """ + raise NotImplemented def extensions(self): + raise NotImplemented