Differences From Artifact [7c0735cca3]:
- File src/OFASN1ObjectIdentifier.m — part of check-in [0509d7a844] at 2019-01-03 19:13:03 on branch trunk — Update copyright (user: js, size: 3399) [annotate] [blame] [check-ins using]
To Artifact [1ad931a1cf]:
- File
src/OFASN1ObjectIdentifier.m
— part of check-in
[c60933a59b]
at
2019-02-09 17:44:00
on branch trunk
— OFASN1*: Add designated initializer
This is in preparation for DER serialization support. (user: js, size: 4108) [annotate] [blame] [check-ins using]
︙ | ︙ | |||
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]; } |
︙ | ︙ |