Index: src/X509Certificate.h ================================================================== --- src/X509Certificate.h +++ src/X509Certificate.h @@ -65,7 +65,10 @@ - (OFDictionary*)X509_dictionaryFromX509Name: (X509_NAME*)name; - (OFString*)X509_stringFromASN1Object: (ASN1_OBJECT*)obj; - (OFString*)X509_stringFromASN1String: (ASN1_STRING*)str; @end -@interface X509OID: OFString {} +@interface X509OID: OFObject +{ + OFString *string; +} @end Index: src/X509Certificate.m ================================================================== --- src/X509Certificate.m +++ src/X509Certificate.m @@ -396,11 +396,12 @@ bufferLength = length; buffer = [self resizeMemory: buffer toSize: bufferLength]; } - ret = [X509OID stringWithUTF8String: buffer]; + ret = [[[X509OID alloc] + initWithUTF8String: buffer] autorelease]; } @finally { [self freeMemory: buffer]; } return ret; @@ -423,12 +424,51 @@ return ret; } @end @implementation X509OID +- initWithUTF8String: (const char*) str +{ + self = [self init]; + + @try { + string = [[OFString alloc] initWithUTF8String: str]; + } @catch (id e) { + [self release]; + @throw e; + } + + return self; +} + +- (void)dealloc +{ + [string release]; + [super dealloc]; +} + - (OFString*)description { char tmp[1024]; - OBJ_obj2txt(tmp, sizeof(tmp), OBJ_txt2obj(s->cString, 1), 0); + OBJ_obj2txt(tmp, sizeof(tmp), OBJ_txt2obj([string UTF8String], 1), 0); return [OFString stringWithUTF8String: tmp]; } + +- (BOOL)isEqual: (id)object +{ + if (([object isKindOfClass: [OFString class]]) || + ([object isKindOfClass: [X509OID class]])) + return [object isEqual: string]; + + return NO; +} + +- (uint32_t)hash +{ + return [string hash]; +} + +- copy +{ + return [self retain]; +} @end