Comment: | OFASN1*: Add designated initializer
This is in preparation for DER serialization support. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
c60933a59ba0fe8116a5fa4720784e43 |
User & Date: | js on 2019-02-09 17:44:00 |
Other Links: | manifest | tags |
2019-02-10
| ||
23:58 | OFWindowsRegistryKey: Support for binary values check-in: 65b31518fc user: js tags: trunk | |
2019-02-09
| ||
17:44 | OFASN1*: Add designated initializer check-in: c60933a59b user: js tags: trunk | |
2019-02-07
| ||
21:55 | More style improvements check-in: 239fbb269e user: js tags: trunk | |
Modified src/OFASN1BitString.h from [99a6012559] to [ec48849d8d].
︙ | ︙ | |||
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | @property (readonly, nonatomic) OFData *bitStringValue; /*! * @brief The length of the BitString in bits. */ @property (readonly, nonatomic) size_t bitStringLength; - (instancetype)init OF_UNAVAILABLE; /*! * @brief Initializes an already allocated ASN.1 BitString with the specified * arguments. * * @param tagClass The tag class of the value's type * @param tagNumber The tag number of the value's type * @param constructed Whether the value if of a constructed type * @param DEREncodedContents The DER-encoded contents octets of the value. | > > > > > > > > > > > > > > > > > > > > > > > | | 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | @property (readonly, nonatomic) OFData *bitStringValue; /*! * @brief The length of the BitString in bits. */ @property (readonly, nonatomic) size_t bitStringLength; /*! * @brief Creates an ASN.1 BitString with the specified BitString value and * length. * * @param bitStringValue The value of the BitString * @param bitStringLength The length of the BitString in bits * @return A new, autoreleased OFASN1BitString */ + (instancetype)bitStringWithBitStringValue: (OFData *)bitStringValue bitStringLength: (size_t)bitStringLength; - (instancetype)init OF_UNAVAILABLE; /*! * @brief Initializes an already allocated ASN.1 BitString with the specified * BitString value and length. * * @param bitStringValue The value of the BitString * @param bitStringLength The length of the BitString in bits * @return An initialized OFASN1BitString */ - (instancetype)initWithBitStringValue: (OFData *)bitStringValue bitStringLength: (size_t)bitStringLength OF_DESIGNATED_INITIALIZER; /*! * @brief Initializes an already allocated ASN.1 BitString with the specified * arguments. * * @param tagClass The tag class of the value's type * @param tagNumber The tag number of the value's type * @param constructed Whether the value if of a constructed type * @param DEREncodedContents The DER-encoded contents octets of the value. * @return An initialized OFASN1BitString */ - (instancetype)initWithTagClass: (of_asn1_tag_class_t)tagClass tagNumber: (of_asn1_tag_number_t)tagNumber constructed: (bool)constructed DEREncodedContents: (OFData *)DEREncodedContents; @end |
︙ | ︙ |
Modified src/OFASN1BitString.m from [0b76ffb19a] to [12624c872e].
︙ | ︙ | |||
25 26 27 28 29 30 31 | #import "OFInvalidFormatException.h" #import "OFOutOfRangeException.h" @implementation OFASN1BitString @synthesize bitStringValue = _bitStringValue; @synthesize bitStringLength = _bitStringLength; | > > > > > > > > | > > | > > > > > > > > > > > > > > | > < | | < < > > > > > > > > > > | 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | #import "OFInvalidFormatException.h" #import "OFOutOfRangeException.h" @implementation OFASN1BitString @synthesize bitStringValue = _bitStringValue; @synthesize bitStringLength = _bitStringLength; + (instancetype)bitStringWithBitStringValue: (OFData *)bitStringValue bitStringLength: (size_t)bitStringLength { return [[[self alloc] initWithBitStringValue: bitStringValue bitStringLength: bitStringLength] autorelease]; } - (instancetype)initWithBitStringValue: (OFData *)bitStringValue bitStringLength: (size_t)bitStringLength { self = [super init]; @try { if ([bitStringValue count] * [bitStringValue itemSize] != bitStringLength / 8) @throw [OFInvalidFormatException exception]; _bitStringValue = [bitStringValue copy]; _bitStringLength = bitStringLength; } @catch (id e) { [self release]; @throw e; } return self; } - (instancetype)initWithTagClass: (of_asn1_tag_class_t)tagClass tagNumber: (of_asn1_tag_number_t)tagNumber constructed: (bool)constructed DEREncodedContents: (OFData *)DEREncodedContents { void *pool = objc_autoreleasePoolPush(); OFData *bitStringValue; size_t bitStringLength; @try { unsigned char lastByteBits; size_t count = [DEREncodedContents count]; if (tagClass != OF_ASN1_TAG_CLASS_UNIVERSAL || tagNumber != OF_ASN1_TAG_NUMBER_BIT_STRING || constructed) @throw [OFInvalidArgumentException exception]; if ([DEREncodedContents itemSize] != 1 || count == 0) @throw [OFInvalidFormatException exception]; lastByteBits = *(unsigned char *)[DEREncodedContents itemAtIndex: 0]; if (count == 1 && lastByteBits != 0) @throw [OFInvalidFormatException exception]; if (SIZE_MAX / 8 < count - 1 || SIZE_MAX - (count - 1) * 8 < lastByteBits) @throw [OFOutOfRangeException exception]; bitStringLength = (count - 1) * 8 + lastByteBits; bitStringValue = [[DEREncodedContents subdataWithRange: of_range(1, count - 1)] copy]; } @catch (id e) { [self release]; @throw e; } self = [self initWithBitStringValue: bitStringValue bitStringLength: bitStringLength]; objc_autoreleasePoolPop(pool); return self; } - (instancetype)init { OF_INVALID_INIT_METHOD } - (void)dealloc { [_bitStringValue release]; [super dealloc]; } |
︙ | ︙ |
Modified src/OFASN1Boolean.h from [734dbf13db] to [a777458522].
︙ | ︙ | |||
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | } /*! * @brief The Boolean value. */ @property (readonly, nonatomic) bool booleanValue; - (instancetype)init OF_UNAVAILABLE; /*! * @brief Initializes an already allocated ASN.1 Boolean with the specified * arguments. * * @param tagClass The tag class of the value's type * @param tagNumber The tag number of the value's type * @param constructed Whether the value if of a constructed type * @param DEREncodedContents The DER-encoded contents octets of the value. | > > > > > > > > > > > > > > > > > > | | 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | } /*! * @brief The Boolean value. */ @property (readonly, nonatomic) bool booleanValue; /*! * @brief Creates an ASN.1 Boolean with the specified Boolean value. * * @param booleanValue The value of the Boolean * @return A new, autoreleased OFASN1Boolean */ + (instancetype)booleanWithBooleanValue: (bool)booleanValue; - (instancetype)init OF_UNAVAILABLE; /*! * @brief Initializes an already allocated ASN.1 Boolean with the specified * Boolean value. * * @param booleanValue The value of the Boolean * @return An initialized OFASN1Boolean */ - (instancetype)initWithBooleanValue: (bool)booleanValue OF_DESIGNATED_INITIALIZER; /*! * @brief Initializes an already allocated ASN.1 Boolean with the specified * arguments. * * @param tagClass The tag class of the value's type * @param tagNumber The tag number of the value's type * @param constructed Whether the value if of a constructed type * @param DEREncodedContents The DER-encoded contents octets of the value. * @return An initialized OFASN1Boolean */ - (instancetype)initWithTagClass: (of_asn1_tag_class_t)tagClass tagNumber: (of_asn1_tag_number_t)tagNumber constructed: (bool)constructed DEREncodedContents: (OFData *)DEREncodedContents; @end |
︙ | ︙ |
Modified src/OFASN1Boolean.m from [deb4a32733] to [d63a1fe7aa].
︙ | ︙ | |||
23 24 25 26 27 28 29 | #import "OFInvalidArgumentException.h" #import "OFInvalidFormatException.h" @implementation OFASN1Boolean @synthesize booleanValue = _booleanValue; | > > > > > | > | > > > | < < < < | > > > > > | 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | #import "OFInvalidArgumentException.h" #import "OFInvalidFormatException.h" @implementation OFASN1Boolean @synthesize booleanValue = _booleanValue; + (instancetype)booleanWithBooleanValue: (bool)booleanValue { return [[[self alloc] initWithBooleanValue: booleanValue] autorelease]; } - (instancetype)initWithBooleanValue: (bool)booleanValue { self = [super init]; _booleanValue = booleanValue; return self; } - (instancetype)initWithTagClass: (of_asn1_tag_class_t)tagClass tagNumber: (of_asn1_tag_number_t)tagNumber constructed: (bool)constructed DEREncodedContents: (OFData *)DEREncodedContents { unsigned char value; @try { if (tagClass != OF_ASN1_TAG_CLASS_UNIVERSAL || tagNumber != OF_ASN1_TAG_NUMBER_BOOLEAN || constructed) @throw [OFInvalidArgumentException exception]; if ([DEREncodedContents itemSize] != 1 || [DEREncodedContents count] != 1) @throw [OFInvalidFormatException exception]; value = *(unsigned char *)[DEREncodedContents itemAtIndex: 0]; if (value != 0 && value != 0xFF) @throw [OFInvalidFormatException exception]; } @catch (id e) { [self release]; @throw e; } return [self initWithBooleanValue: !!value]; } - (instancetype)init { OF_INVALID_INIT_METHOD } - (bool)isEqual: (id)object { OFASN1Boolean *boolean; if (![object isKindOfClass: [OFASN1Boolean class]]) |
︙ | ︙ |
Modified src/OFASN1Enumerated.h from [1986bc54c1] to [1bbc558259].
︙ | ︙ | |||
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | } /*! * @brief The integer value. */ @property (readonly, nonatomic) intmax_t integerValue; - (instancetype)init OF_UNAVAILABLE; /*! * @brief Initializes an already allocated ASN.1 Enumerated with the specified * arguments. * * @param tagClass The tag class of the value's type * @param tagNumber The tag number of the value's type * @param constructed Whether the value if of a constructed type * @param DEREncodedContents The DER-encoded contents octets of the value. | > > > > > > > > > > > > > > > > > > | | 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | } /*! * @brief The integer value. */ @property (readonly, nonatomic) intmax_t integerValue; /*! * @brief Creates an ASN.1 Enumerated with the specified integer value. * * @param integerValue The integer value of the Enumerated * @return A new, autoreleased OFASN1Enumerated */ + (instancetype)enumeratedWithIntegerValue: (intmax_t)integerValue; - (instancetype)init OF_UNAVAILABLE; /*! * @brief Initializes an already allocated ASN.1 Enumerated with the specified * integer value. * * @param integerValue The integer value of the Enumerated * @return An initialized OFASN1Enumerated */ - (instancetype)initWithIntegerValue: (intmax_t)integerValue OF_DESIGNATED_INITIALIZER; /*! * @brief Initializes an already allocated ASN.1 Enumerated with the specified * arguments. * * @param tagClass The tag class of the value's type * @param tagNumber The tag number of the value's type * @param constructed Whether the value if of a constructed type * @param DEREncodedContents The DER-encoded contents octets of the value. * @return An initialized OFASN1Enumerated */ - (instancetype)initWithTagClass: (of_asn1_tag_class_t)tagClass tagNumber: (of_asn1_tag_number_t)tagNumber constructed: (bool)constructed DEREncodedContents: (OFData *)DEREncodedContents; @end |
︙ | ︙ |
Modified src/OFASN1Enumerated.m from [a332767238] to [bfa277b108].
︙ | ︙ | |||
19 20 21 22 23 24 25 | #import "OFASN1Enumerated.h" #import "OFData.h" #import "OFString.h" #import "OFInvalidArgumentException.h" | | > > > > > | > | > > > | | | > > > > > | 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | #import "OFASN1Enumerated.h" #import "OFData.h" #import "OFString.h" #import "OFInvalidArgumentException.h" extern intmax_t of_asn1_der_integer_parse(const unsigned char *buffer, size_t length); @implementation OFASN1Enumerated @synthesize integerValue = _integerValue; + (instancetype)enumeratedWithIntegerValue: (intmax_t)integerValue { return [[[self alloc] initWithIntegerValue: integerValue] autorelease]; } - (instancetype)initWithIntegerValue: (intmax_t)integerValue { self = [super init]; _integerValue = integerValue; return self; } - (instancetype)initWithTagClass: (of_asn1_tag_class_t)tagClass tagNumber: (of_asn1_tag_number_t)tagNumber constructed: (bool)constructed DEREncodedContents: (OFData *)DEREncodedContents { intmax_t integerValue; @try { if (tagClass != OF_ASN1_TAG_CLASS_UNIVERSAL || tagNumber != OF_ASN1_TAG_NUMBER_ENUMERATED || constructed) @throw [OFInvalidArgumentException exception]; if ([DEREncodedContents itemSize] != 1) @throw [OFInvalidArgumentException exception]; integerValue = of_asn1_der_integer_parse( [DEREncodedContents items], [DEREncodedContents count]); } @catch (id e) { [self release]; @throw e; } return [self initWithIntegerValue: integerValue]; } - (instancetype)init { OF_INVALID_INIT_METHOD } - (bool)isEqual: (id)object { OFASN1Enumerated *enumerated; if (![object isKindOfClass: [OFASN1Enumerated class]]) |
︙ | ︙ |
Modified src/OFASN1IA5String.h from [462307112b] to [7f046db22f].
︙ | ︙ | |||
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | @property (readonly, nonatomic) OFString *IA5StringValue; /*! * @brief The string value. */ @property (readonly, nonatomic) OFString *stringValue; - (instancetype)init OF_UNAVAILABLE; /*! * @brief Initializes an already allocated ASN.1 IA5String with the specified * arguments. * * @param tagClass The tag class of the value's type * @param tagNumber The tag number of the value's type * @param constructed Whether the value if of a constructed type * @param DEREncodedContents The DER-encoded contents octets of the value. | > > > > > > > > > > > > > > > > > > | | 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | @property (readonly, nonatomic) OFString *IA5StringValue; /*! * @brief The string value. */ @property (readonly, nonatomic) OFString *stringValue; /*! * @brief Creates an IA5String with the specified string value. * * @param stringValue The string value of the IA5String * @return A new, autoreleased OFASN1IA5String */ + (instancetype)stringWithStringValue: (OFString *)stringValue; - (instancetype)init OF_UNAVAILABLE; /*! * @brief Initializes an already allocated IA5String with the specified string * value. * * @param stringValue The string value of the IA5String * @return An initialized OFASN1IA5String */ - (instancetype)initWithStringValue: (OFString *)stringValue OF_DESIGNATED_INITIALIZER; /*! * @brief Initializes an already allocated ASN.1 IA5String with the specified * arguments. * * @param tagClass The tag class of the value's type * @param tagNumber The tag number of the value's type * @param constructed Whether the value if of a constructed type * @param DEREncodedContents The DER-encoded contents octets of the value. * @return An initialized OFASN1IA5String */ - (instancetype)initWithTagClass: (of_asn1_tag_class_t)tagClass tagNumber: (of_asn1_tag_number_t)tagNumber constructed: (bool)constructed DEREncodedContents: (OFData *)DEREncodedContents; @end |
︙ | ︙ |
Modified src/OFASN1IA5String.m from [a1e8220ead] to [f26ab2e662].
︙ | ︙ | |||
22 23 24 25 26 27 28 | #import "OFString.h" #import "OFInvalidArgumentException.h" @implementation OFASN1IA5String @synthesize IA5StringValue = _IA5StringValue; | > > > > > | > | > > > > > > > > | > | | | | > > > > > > > > > | 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | #import "OFString.h" #import "OFInvalidArgumentException.h" @implementation OFASN1IA5String @synthesize IA5StringValue = _IA5StringValue; + (instancetype)stringWithStringValue: (OFString *)stringValue { return [[[self alloc] initWithStringValue: stringValue] autorelease]; } - (instancetype)initWithStringValue: (OFString *)stringValue { self = [super init]; @try { _IA5StringValue = [stringValue copy]; } @catch (id e) { [self release]; @throw e; } return self; } - (instancetype)initWithTagClass: (of_asn1_tag_class_t)tagClass tagNumber: (of_asn1_tag_number_t)tagNumber constructed: (bool)constructed DEREncodedContents: (OFData *)DEREncodedContents { void *pool = objc_autoreleasePoolPush(); OFString *IA5StringValue; @try { if (tagClass != OF_ASN1_TAG_CLASS_UNIVERSAL || tagNumber != OF_ASN1_TAG_NUMBER_IA5_STRING || constructed) @throw [OFInvalidArgumentException exception]; if ([DEREncodedContents itemSize] != 1) @throw [OFInvalidArgumentException exception]; IA5StringValue = [OFString stringWithCString: [DEREncodedContents items] encoding: OF_STRING_ENCODING_ASCII length: [DEREncodedContents count]]; } @catch (id e) { [self release]; @throw e; } self = [self initWithStringValue: IA5StringValue]; objc_autoreleasePoolPop(pool); return self; } - (instancetype)init { OF_INVALID_INIT_METHOD } - (void)dealloc { [_IA5StringValue release]; [super dealloc]; } |
︙ | ︙ |
Modified src/OFASN1Integer.h from [7b930c60f1] to [1787c0819c].
︙ | ︙ | |||
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | } /*! * @brief The Integer value. */ @property (readonly, nonatomic) intmax_t integerValue; - (instancetype)init OF_UNAVAILABLE; /*! * @brief Initializes an already allocated ASN.1 Integer with the specified * arguments. * * @param tagClass The tag class of the value's type * @param tagNumber The tag number of the value's type * @param constructed Whether the value if of a constructed type * @param DEREncodedContents The DER-encoded contents octets of the value. | > > > > > > > > > > > > > > > > > > | | 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | } /*! * @brief The Integer value. */ @property (readonly, nonatomic) intmax_t integerValue; /*! * @brief Creates an ASN.1 Integer with the specified integer value. * * @param integerValue The integer value of the Integer * @return A new, autoreleased OFASN1Integer */ + (instancetype)integerWithIntegerValue: (intmax_t)integerValue; - (instancetype)init OF_UNAVAILABLE; /*! * @brief Initializes an already allocated ASN.1 Integer with the specified * integer value. * * @param integerValue The integer value of the Integer * @return An initialized OFASN1Integer */ - (instancetype)initWithIntegerValue: (intmax_t)integerValue OF_DESIGNATED_INITIALIZER; /*! * @brief Initializes an already allocated ASN.1 Integer with the specified * arguments. * * @param tagClass The tag class of the value's type * @param tagNumber The tag number of the value's type * @param constructed Whether the value if of a constructed type * @param DEREncodedContents The DER-encoded contents octets of the value. * @return An initialized OFASN1Integer */ - (instancetype)initWithTagClass: (of_asn1_tag_class_t)tagClass tagNumber: (of_asn1_tag_number_t)tagNumber constructed: (bool)constructed DEREncodedContents: (OFData *)DEREncodedContents; @end |
︙ | ︙ |
Modified src/OFASN1Integer.m from [e578e94e63] to [508a881579].
︙ | ︙ | |||
22 23 24 25 26 27 28 | #import "OFString.h" #import "OFInvalidArgumentException.h" #import "OFInvalidFormatException.h" #import "OFOutOfRangeException.h" intmax_t | | | 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #import "OFString.h" #import "OFInvalidArgumentException.h" #import "OFInvalidFormatException.h" #import "OFOutOfRangeException.h" intmax_t of_asn1_der_integer_parse(const unsigned char *buffer, size_t length) { uintmax_t value = 0; /* TODO: Support for big numbers */ if (length > sizeof(uintmax_t) && (length != sizeof(uintmax_t) + 1 || buffer[0] != 0)) @throw [OFOutOfRangeException exception]; |
︙ | ︙ | |||
47 48 49 50 51 52 53 | return value; } @implementation OFASN1Integer @synthesize integerValue = _integerValue; | > > > > > | > | > > > | | | > > > > > | 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | return value; } @implementation OFASN1Integer @synthesize integerValue = _integerValue; + (instancetype)integerWithIntegerValue: (intmax_t)integerValue { return [[[self alloc] initWithIntegerValue: integerValue] autorelease]; } - (instancetype)initWithIntegerValue: (intmax_t)integerValue { self = [super init]; _integerValue = integerValue; return self; } - (instancetype)initWithTagClass: (of_asn1_tag_class_t)tagClass tagNumber: (of_asn1_tag_number_t)tagNumber constructed: (bool)constructed DEREncodedContents: (OFData *)DEREncodedContents { intmax_t integerValue; @try { if (tagClass != OF_ASN1_TAG_CLASS_UNIVERSAL || tagNumber != OF_ASN1_TAG_NUMBER_INTEGER || constructed) @throw [OFInvalidArgumentException exception]; if ([DEREncodedContents itemSize] != 1) @throw [OFInvalidArgumentException exception]; integerValue = of_asn1_der_integer_parse( [DEREncodedContents items], [DEREncodedContents count]); } @catch (id e) { [self release]; @throw e; } return [self initWithIntegerValue: integerValue]; } - (instancetype)init { OF_INVALID_INIT_METHOD } - (bool)isEqual: (id)object { OFASN1Integer *integer; if (![object isKindOfClass: [OFASN1Integer class]]) |
︙ | ︙ |
Modified src/OFASN1NumericString.h from [a83ce842c2] to [0728c17a9c].
︙ | ︙ | |||
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | @property (readonly, nonatomic) OFString *numericStringValue; /*! * @brief The string value. */ @property (readonly, nonatomic) OFString *stringValue; - (instancetype)init OF_UNAVAILABLE; /*! * @brief Initializes an already allocated ASN.1 NumericString with the * specified arguments. * * @param tagClass The tag class of the value's type * @param tagNumber The tag number of the value's type * @param constructed Whether the value if of a constructed type | > > > > > > > > > > > > > > > > > > | 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | @property (readonly, nonatomic) OFString *numericStringValue; /*! * @brief The string value. */ @property (readonly, nonatomic) OFString *stringValue; /*! * @brief Creates an NumericString with the specified string value. * * @param stringValue The string value of the NumericString * @return A new, autoreleased OFASN1NumericString */ + (instancetype)stringWithStringValue: (OFString *)stringValue; - (instancetype)init OF_UNAVAILABLE; /*! * @brief Initializes an already allocated NumericString with the specified * string value. * * @param stringValue The string value of the NumericString * @return An initialized OFASN1NumericString */ - (instancetype)initWithStringValue: (OFString *)stringValue OF_DESIGNATED_INITIALIZER; /*! * @brief Initializes an already allocated ASN.1 NumericString with the * specified arguments. * * @param tagClass The tag class of the value's type * @param tagNumber The tag number of the value's type * @param constructed Whether the value if of a constructed type |
︙ | ︙ |
Modified src/OFASN1NumericString.m from [c1a05c2318] to [5a551cb41a].
︙ | ︙ | |||
23 24 25 26 27 28 29 | #import "OFInvalidArgumentException.h" #import "OFInvalidEncodingException.h" @implementation OFASN1NumericString @synthesize numericStringValue = _numericStringValue; | > > > > > | > | > > > > > > > > > > > > > > > > > > | > < < < < < < < | | | | > > > > > > > > > | 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | #import "OFInvalidArgumentException.h" #import "OFInvalidEncodingException.h" @implementation OFASN1NumericString @synthesize numericStringValue = _numericStringValue; + (instancetype)stringWithStringValue: (OFString *)stringValue { return [[[self alloc] initWithStringValue: stringValue] autorelease]; } - (instancetype)initWithStringValue: (OFString *)stringValue { self = [super init]; @try { void *pool = objc_autoreleasePoolPush(); const char *cString = [stringValue UTF8String]; size_t length = [stringValue UTF8StringLength]; for (size_t i = 0; i < length; i++) if (!of_ascii_isdigit(cString[i]) && cString[i] != ' ') @throw [OFInvalidEncodingException exception]; _numericStringValue = [stringValue copy]; objc_autoreleasePoolPop(pool); } @catch (id e) { [self release]; @throw e; } return self; } - (instancetype)initWithTagClass: (of_asn1_tag_class_t)tagClass tagNumber: (of_asn1_tag_number_t)tagNumber constructed: (bool)constructed DEREncodedContents: (OFData *)DEREncodedContents { void *pool = objc_autoreleasePoolPush(); OFString *numericStringValue; @try { if (tagClass != OF_ASN1_TAG_CLASS_UNIVERSAL || tagNumber != OF_ASN1_TAG_NUMBER_NUMERIC_STRING || constructed) @throw [OFInvalidArgumentException exception]; if ([DEREncodedContents itemSize] != 1) @throw [OFInvalidArgumentException exception]; numericStringValue = [OFString stringWithCString: [DEREncodedContents items] encoding: OF_STRING_ENCODING_ASCII length: [DEREncodedContents count]]; } @catch (id e) { [self release]; @throw e; } self = [self initWithStringValue: numericStringValue]; objc_autoreleasePoolPop(pool); return self; } - (instancetype)init { OF_INVALID_INIT_METHOD } - (void)dealloc { [_numericStringValue release]; [super dealloc]; } |
︙ | ︙ |
Modified src/OFASN1ObjectIdentifier.h from [4872ee3025] to [2e8623fcd6].
︙ | ︙ | |||
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | } /*! * @brief The subidentifiers of the ObjectIdentifier. */ @property (readonly, nonatomic) OFArray OF_GENERIC(OFNumber *) *subidentifiers; - (instancetype)init OF_UNAVAILABLE; /*! * @brief Initializes an already allocated ASN.1 ObjectIdentifier with the * specified arguments. * * @param tagClass The tag class of the value's type * @param tagNumber The tag number of the value's type * @param constructed Whether the value if of a constructed type * @param DEREncodedContents The DER-encoded contents octets of the value. | > > > > > > > > > > > > > > > > > > > | | 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | } /*! * @brief The subidentifiers of the ObjectIdentifier. */ @property (readonly, nonatomic) OFArray OF_GENERIC(OFNumber *) *subidentifiers; /*! * @brief Creates an ASN.1 ObjectIdentifier with the specified subidentifiers. * * @param subidentifiers The subidentifiers of the ASN.1 ObjectIdentifier * @return A new, autoreleased OFASN1ObjectIdentifier */ + (instancetype)objectIdentifierWithSubidentifiers: (OFArray OF_GENERIC(OFNumber *) *)subidentifiers; - (instancetype)init OF_UNAVAILABLE; /*! * @brief Initializes an already allocated ASN.1 ObjectIdentifier with the * specified subidentifiers. * * @param subidentifiers The subidentifiers of the ASN.1 ObjectIdentifier * @return An initialized OFASN1ObjectIdentifier */ - (instancetype)initWithSubidentifiers: (OFArray OF_GENERIC(OFNumber *) *)subidentifiers OF_DESIGNATED_INITIALIZER; /*! * @brief Initializes an already allocated ASN.1 ObjectIdentifier with the * specified arguments. * * @param tagClass The tag class of the value's type * @param tagNumber The tag number of the value's type * @param constructed Whether the value if of a constructed type * @param DEREncodedContents The DER-encoded contents octets of the value. * @return An initialized OFASN1ObjectIdentifier */ - (instancetype)initWithTagClass: (of_asn1_tag_class_t)tagClass tagNumber: (of_asn1_tag_number_t)tagNumber constructed: (bool)constructed DEREncodedContents: (OFData *)DEREncodedContents; @end |
︙ | ︙ |
Modified src/OFASN1ObjectIdentifier.m from [7c0735cca3] to [1ad931a1cf].
︙ | ︙ | |||
26 27 28 29 30 31 32 | #import "OFInvalidArgumentException.h" #import "OFInvalidFormatException.h" #import "OFOutOfRangeException.h" @implementation OFASN1ObjectIdentifier @synthesize subidentifiers = _subidentifiers; | > > > > > > > | > > | > > > > > > > > > > > > > > > > > > > > | > < < > > | 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | #import "OFInvalidArgumentException.h" #import "OFInvalidFormatException.h" #import "OFOutOfRangeException.h" @implementation OFASN1ObjectIdentifier @synthesize subidentifiers = _subidentifiers; + (instancetype)objectIdentifierWithSubidentifiers: (OFArray OF_GENERIC(OFNumber *) *)subidentifiers { return [[[self alloc] initWithSubidentifiers: subidentifiers] autorelease]; } - (instancetype)initWithSubidentifiers: (OFArray OF_GENERIC(OFNumber *) *)subidentifiers { self = [super init]; @try { if ([subidentifiers count] < 1) @throw [OFInvalidFormatException exception]; switch ([[subidentifiers objectAtIndex: 0] intMaxValue]) { case 0: case 1: case 2: break; default: @throw [OFInvalidFormatException exception]; } _subidentifiers = [subidentifiers copy]; } @catch (id e) { [self release]; @throw e; } return self; } - (instancetype)initWithTagClass: (of_asn1_tag_class_t)tagClass tagNumber: (of_asn1_tag_number_t)tagNumber constructed: (bool)constructed DEREncodedContents: (OFData *)DEREncodedContents { void *pool = objc_autoreleasePoolPush(); OFMutableArray OF_GENERIC(OFNumber *) *subidentifiers; @try { const unsigned char *items = [DEREncodedContents items]; size_t count = [DEREncodedContents count]; uintmax_t value = 0; uint_fast8_t bits = 0; if (tagClass != OF_ASN1_TAG_CLASS_UNIVERSAL || tagNumber != OF_ASN1_TAG_NUMBER_OBJECT_IDENTIFIER || constructed) @throw [OFInvalidArgumentException exception]; if ([DEREncodedContents itemSize] != 1 || count == 0) @throw [OFInvalidArgumentException exception]; subidentifiers = [OFMutableArray array]; for (size_t i = 0; i < count; i++) { if (bits == 0 && items[i] == 0x80) @throw [OFInvalidFormatException exception]; value = (value << 7) | (items[i] & 0x7F); bits += 7; |
︙ | ︙ | |||
93 94 95 96 97 98 99 | bits = 0; } if (items[count - 1] & 0x80) @throw [OFInvalidFormatException exception]; [subidentifiers makeImmutable]; | < < < > > > > > > > > > | 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | bits = 0; } if (items[count - 1] & 0x80) @throw [OFInvalidFormatException exception]; [subidentifiers makeImmutable]; } @catch (id e) { [self release]; @throw e; } self = [self initWithSubidentifiers: subidentifiers]; objc_autoreleasePoolPop(pool); return self; } - (instancetype)init { OF_INVALID_INIT_METHOD } - (void)dealloc { [_subidentifiers release]; [super dealloc]; } |
︙ | ︙ |
Modified src/OFASN1OctetString.h from [429aa02716] to [c214a23949].
︙ | ︙ | |||
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | } /*! * @brief The OctetString value. */ @property (readonly, nonatomic) OFData *octetStringValue; - (instancetype)init OF_UNAVAILABLE; /*! * @brief Initializes an already allocated ASN.1 OctetString with the specified * arguments. * * @param tagClass The tag class of the value's type * @param tagNumber The tag number of the value's type * @param constructed Whether the value if of a constructed type | > > > > > > > > > > > > > > > > > > | 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | } /*! * @brief The OctetString value. */ @property (readonly, nonatomic) OFData *octetStringValue; /*! * @brief Creates an OctetString with the specified value. * * @param octetStringValue The OctetString value * @return A new, autoreleased OFASN1OctetString */ + (instancetype)octetStringWithOctetStringValue: (OFData *)octetStringValue; - (instancetype)init OF_UNAVAILABLE; /*! * @brief Initializes an already allocated OctetString with the specified * value. * * @param octetStringValue The OctetString value * @return An initialized OFASN1OctetString */ - (instancetype)initWithOctetStringValue: (OFData *)octetStringValue OF_DESIGNATED_INITIALIZER; /*! * @brief Initializes an already allocated ASN.1 OctetString with the specified * arguments. * * @param tagClass The tag class of the value's type * @param tagNumber The tag number of the value's type * @param constructed Whether the value if of a constructed type |
︙ | ︙ |
Modified src/OFASN1OctetString.m from [444f20be56] to [45195d9bbf].
︙ | ︙ | |||
22 23 24 25 26 27 28 | #import "OFString.h" #import "OFInvalidArgumentException.h" @implementation OFASN1OctetString @synthesize octetStringValue = _octetStringValue; | > > > > > > | > | > > > > > > > > < < < < > > | > > > | 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | #import "OFString.h" #import "OFInvalidArgumentException.h" @implementation OFASN1OctetString @synthesize octetStringValue = _octetStringValue; + (instancetype)octetStringWithOctetStringValue: (OFData *)octetStringValue { return [[[self alloc] initWithOctetStringValue: octetStringValue] autorelease]; } - (instancetype)initWithOctetStringValue: (OFData *)octetStringValue { self = [super init]; @try { _octetStringValue = [octetStringValue copy]; } @catch (id e) { [self release]; @throw e; } return self; } - (instancetype)initWithTagClass: (of_asn1_tag_class_t)tagClass tagNumber: (of_asn1_tag_number_t)tagNumber constructed: (bool)constructed DEREncodedContents: (OFData *)DEREncodedContents { @try { if (tagClass != OF_ASN1_TAG_CLASS_UNIVERSAL || tagNumber != OF_ASN1_TAG_NUMBER_OCTET_STRING || constructed) @throw [OFInvalidArgumentException exception]; if ([DEREncodedContents itemSize] != 1) @throw [OFInvalidArgumentException exception]; } @catch (id e) { [self release]; @throw e; } return [self initWithOctetStringValue: DEREncodedContents]; } - (instancetype)init { OF_INVALID_INIT_METHOD } - (void)dealloc { [_octetStringValue release]; [super dealloc]; |
︙ | ︙ |
Modified src/OFASN1PrintableString.h from [dd76d07fa2] to [95fd360121].
︙ | ︙ | |||
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | @property (readonly, nonatomic) OFString *printableStringValue; /*! * @brief The string value. */ @property (readonly, nonatomic) OFString *stringValue; - (instancetype)init OF_UNAVAILABLE; /*! * @brief Initializes an already allocated ASN.1 PrintableString with the * specified arguments. * * @param tagClass The tag class of the value's type * @param tagNumber The tag number of the value's type * @param constructed Whether the value if of a constructed type * @param DEREncodedContents The DER-encoded contents octets of the value. | > > > > > > > > > > > > > > > > > > | | 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | @property (readonly, nonatomic) OFString *printableStringValue; /*! * @brief The string value. */ @property (readonly, nonatomic) OFString *stringValue; /*! * @brief Creates a PrintableString with the specified string value. * * @param stringValue The string value of the PrintableString * @return A new, autoreleased OFASN1PrintableString */ + (instancetype)stringWithStringValue: (OFString *)stringValue; - (instancetype)init OF_UNAVAILABLE; /*! * @brief Initializes an already allocated PrintableString with the specified * string value. * * @param stringValue The string value of the PrintableString * @return An initialized OFASN1PrintableString */ - (instancetype)initWithStringValue: (OFString *)stringValue OF_DESIGNATED_INITIALIZER; /*! * @brief Initializes an already allocated ASN.1 PrintableString with the * specified arguments. * * @param tagClass The tag class of the value's type * @param tagNumber The tag number of the value's type * @param constructed Whether the value if of a constructed type * @param DEREncodedContents The DER-encoded contents octets of the value. * @return An initialized OFASN1PrintableString */ - (instancetype)initWithTagClass: (of_asn1_tag_class_t)tagClass tagNumber: (of_asn1_tag_number_t)tagNumber constructed: (bool)constructed DEREncodedContents: (OFData *)DEREncodedContents; @end |
︙ | ︙ |
Modified src/OFASN1PrintableString.m from [a15c0c65ce] to [4f4ed13270].
︙ | ︙ | |||
23 24 25 26 27 28 29 | #import "OFInvalidArgumentException.h" #import "OFInvalidEncodingException.h" @implementation OFASN1PrintableString @synthesize printableStringValue = _printableStringValue; | | | | < < < < < | < < | < | < < | | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | > > > > > > > > > | 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | #import "OFInvalidArgumentException.h" #import "OFInvalidEncodingException.h" @implementation OFASN1PrintableString @synthesize printableStringValue = _printableStringValue; + (instancetype)stringWithStringValue: (OFString *)stringValue { return [[[self alloc] initWithStringValue: stringValue] autorelease]; } - (instancetype)initWithStringValue: (OFString *)stringValue { self = [super init]; @try { void *pool = objc_autoreleasePoolPush(); const char *cString = [stringValue UTF8String]; size_t length = [stringValue UTF8StringLength]; for (size_t i = 0; i < length; i++) { if (of_ascii_isalnum(cString[i])) continue; switch (cString[i]) { case ' ': case '\'': case '(': case ')': case '+': case ',': case '-': case '.': case '/': case ':': case '=': case '?': continue; default: @throw [OFInvalidEncodingException exception]; } } _printableStringValue = [stringValue copy]; objc_autoreleasePoolPop(pool); } @catch (id e) { [self release]; @throw e; } return self; } - (instancetype)initWithTagClass: (of_asn1_tag_class_t)tagClass tagNumber: (of_asn1_tag_number_t)tagNumber constructed: (bool)constructed DEREncodedContents: (OFData *)DEREncodedContents { void *pool = objc_autoreleasePoolPush(); OFString *printableStringValue; @try { if (tagClass != OF_ASN1_TAG_CLASS_UNIVERSAL || tagNumber != OF_ASN1_TAG_NUMBER_PRINTABLE_STRING || constructed) @throw [OFInvalidArgumentException exception]; if ([DEREncodedContents itemSize] != 1) @throw [OFInvalidArgumentException exception]; printableStringValue = [OFString stringWithCString: [DEREncodedContents items] encoding: OF_STRING_ENCODING_ASCII length: [DEREncodedContents count]]; } @catch (id e) { [self release]; @throw e; } self = [self initWithStringValue: printableStringValue]; objc_autoreleasePoolPop(pool); return self; } - (instancetype)init { OF_INVALID_INIT_METHOD } - (void)dealloc { [_printableStringValue release]; [super dealloc]; } |
︙ | ︙ |
Modified src/OFASN1UTF8String.h from [9195167b52] to [8773fa600a].
︙ | ︙ | |||
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | @property (readonly, nonatomic) OFString *UTF8StringValue; /*! * @brief The string value. */ @property (readonly, nonatomic) OFString *stringValue; - (instancetype)init OF_UNAVAILABLE; /*! * @brief Initializes an already allocated ASN.1 UTF8String with the specified * arguments. * * @param tagClass The tag class of the value's type * @param tagNumber The tag number of the value's type * @param constructed Whether the value if of a constructed type * @param DEREncodedContents The DER-encoded contents octets of the value. | > > > > > > > > > > > > > > > > > > | | 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | @property (readonly, nonatomic) OFString *UTF8StringValue; /*! * @brief The string value. */ @property (readonly, nonatomic) OFString *stringValue; /*! * @brief Creates a UTF8String with the specified string value. * * @param stringValue The string value of the UTF8String * @return A new, autoreleased OFASN1UTF8String */ + (instancetype)stringWithStringValue: (OFString *)stringValue; - (instancetype)init OF_UNAVAILABLE; /*! * @brief Initializes an already allocated UTF8String with the specified * string value. * * @param stringValue The string value of the UTF8String * @return An initialized OFASN1UTF8String */ - (instancetype)initWithStringValue: (OFString *)stringValue OF_DESIGNATED_INITIALIZER; /*! * @brief Initializes an already allocated ASN.1 UTF8String with the specified * arguments. * * @param tagClass The tag class of the value's type * @param tagNumber The tag number of the value's type * @param constructed Whether the value if of a constructed type * @param DEREncodedContents The DER-encoded contents octets of the value. * @return An initialized OFASN1UTF8String */ - (instancetype)initWithTagClass: (of_asn1_tag_class_t)tagClass tagNumber: (of_asn1_tag_number_t)tagNumber constructed: (bool)constructed DEREncodedContents: (OFData *)DEREncodedContents; @end |
︙ | ︙ |
Modified src/OFASN1UTF8String.m from [bb40a919bb] to [2624d9034c].
︙ | ︙ | |||
22 23 24 25 26 27 28 | #import "OFString.h" #import "OFInvalidArgumentException.h" @implementation OFASN1UTF8String @synthesize UTF8StringValue = _UTF8StringValue; | > > > > > | > | > > > > > > > > | > | | | > > > > > > > > > | 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | #import "OFString.h" #import "OFInvalidArgumentException.h" @implementation OFASN1UTF8String @synthesize UTF8StringValue = _UTF8StringValue; + (instancetype)stringWithStringValue: (OFString *)stringValue { return [[[self alloc] initWithStringValue: stringValue] autorelease]; } - (instancetype)initWithStringValue: (OFString *)stringValue { self = [super init]; @try { _UTF8StringValue = [stringValue copy]; } @catch (id e) { [self release]; @throw e; } return self; } - (instancetype)initWithTagClass: (of_asn1_tag_class_t)tagClass tagNumber: (of_asn1_tag_number_t)tagNumber constructed: (bool)constructed DEREncodedContents: (OFData *)DEREncodedContents { void *pool = objc_autoreleasePoolPush(); OFString *UTF8StringValue; @try { if (tagClass != OF_ASN1_TAG_CLASS_UNIVERSAL || tagNumber != OF_ASN1_TAG_NUMBER_UTF8_STRING || constructed) @throw [OFInvalidArgumentException exception]; if ([DEREncodedContents itemSize] != 1) @throw [OFInvalidArgumentException exception]; UTF8StringValue = [OFString stringWithUTF8String: [DEREncodedContents items] length: [DEREncodedContents count]]; } @catch (id e) { [self release]; @throw e; } self = [self initWithStringValue: UTF8StringValue]; objc_autoreleasePoolPop(pool); return self; } - (instancetype)init { OF_INVALID_INIT_METHOD } - (void)dealloc { [_UTF8StringValue release]; [super dealloc]; } |
︙ | ︙ |
Modified src/OFASN1Value.m from [ac7cbae3e3] to [021fb1b137].
︙ | ︙ | |||
36 37 38 39 40 41 42 | return [[[self alloc] initWithTagClass: tagClass tagNumber: tagNumber constructed: constructed DEREncodedContents: DEREncodedContents] autorelease]; } | < < < < < | 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | return [[[self alloc] initWithTagClass: tagClass tagNumber: tagNumber constructed: constructed DEREncodedContents: DEREncodedContents] autorelease]; } - (instancetype)initWithTagClass: (of_asn1_tag_class_t)tagClass tagNumber: (of_asn1_tag_number_t)tagNumber constructed: (bool)constructed DEREncodedContents: (OFData *)DEREncodedContents { self = [super init]; |
︙ | ︙ | |||
63 64 65 66 67 68 69 70 71 72 73 74 75 76 | } @catch (id e) { [self release]; @throw e; } return self; } - (void)dealloc { [_DEREncodedContents release]; [super dealloc]; } | > > > > > | 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | } @catch (id e) { [self release]; @throw e; } return self; } - (instancetype)init { OF_INVALID_INIT_METHOD } - (void)dealloc { [_DEREncodedContents release]; [super dealloc]; } |
︙ | ︙ |