1*e7c364b6SAndroid Build Coastguard Worker /* 2*e7c364b6SAndroid Build Coastguard Worker * Copyright (C) 2013 The Android Open Source Project 3*e7c364b6SAndroid Build Coastguard Worker * 4*e7c364b6SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*e7c364b6SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*e7c364b6SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*e7c364b6SAndroid Build Coastguard Worker * 8*e7c364b6SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*e7c364b6SAndroid Build Coastguard Worker * 10*e7c364b6SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*e7c364b6SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*e7c364b6SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*e7c364b6SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*e7c364b6SAndroid Build Coastguard Worker * limitations under the License. 15*e7c364b6SAndroid Build Coastguard Worker */ 16*e7c364b6SAndroid Build Coastguard Worker 17*e7c364b6SAndroid Build Coastguard Worker #ifndef ASN1_DECODER_H_ 18*e7c364b6SAndroid Build Coastguard Worker #define ASN1_DECODER_H_ 19*e7c364b6SAndroid Build Coastguard Worker 20*e7c364b6SAndroid Build Coastguard Worker #include <stddef.h> 21*e7c364b6SAndroid Build Coastguard Worker #include <stdint.h> 22*e7c364b6SAndroid Build Coastguard Worker 23*e7c364b6SAndroid Build Coastguard Worker class asn1_context { 24*e7c364b6SAndroid Build Coastguard Worker public: asn1_context(const uint8_t * buffer,size_t length)25*e7c364b6SAndroid Build Coastguard Worker asn1_context(const uint8_t* buffer, size_t length) : p_(buffer), length_(length), app_type_(0) {} 26*e7c364b6SAndroid Build Coastguard Worker int asn1_constructed_type() const; 27*e7c364b6SAndroid Build Coastguard Worker asn1_context* asn1_constructed_get(); 28*e7c364b6SAndroid Build Coastguard Worker bool asn1_constructed_skip_all(); 29*e7c364b6SAndroid Build Coastguard Worker asn1_context* asn1_sequence_get(); 30*e7c364b6SAndroid Build Coastguard Worker asn1_context* asn1_set_get(); 31*e7c364b6SAndroid Build Coastguard Worker bool asn1_sequence_next(); 32*e7c364b6SAndroid Build Coastguard Worker bool asn1_oid_get(const uint8_t** oid, size_t* length); 33*e7c364b6SAndroid Build Coastguard Worker bool asn1_octet_string_get(const uint8_t** octet_string, size_t* length); 34*e7c364b6SAndroid Build Coastguard Worker 35*e7c364b6SAndroid Build Coastguard Worker private: 36*e7c364b6SAndroid Build Coastguard Worker static constexpr int kMaskConstructed = 0xE0; 37*e7c364b6SAndroid Build Coastguard Worker static constexpr int kMaskTag = 0x7F; 38*e7c364b6SAndroid Build Coastguard Worker static constexpr int kMaskAppType = 0x1F; 39*e7c364b6SAndroid Build Coastguard Worker 40*e7c364b6SAndroid Build Coastguard Worker static constexpr int kTagOctetString = 0x04; 41*e7c364b6SAndroid Build Coastguard Worker static constexpr int kTagOid = 0x06; 42*e7c364b6SAndroid Build Coastguard Worker static constexpr int kTagSequence = 0x30; 43*e7c364b6SAndroid Build Coastguard Worker static constexpr int kTagSet = 0x31; 44*e7c364b6SAndroid Build Coastguard Worker static constexpr int kTagConstructed = 0xA0; 45*e7c364b6SAndroid Build Coastguard Worker 46*e7c364b6SAndroid Build Coastguard Worker int peek_byte() const; 47*e7c364b6SAndroid Build Coastguard Worker int get_byte(); 48*e7c364b6SAndroid Build Coastguard Worker bool skip_bytes(size_t num_skip); 49*e7c364b6SAndroid Build Coastguard Worker bool decode_length(size_t* out_len); 50*e7c364b6SAndroid Build Coastguard Worker 51*e7c364b6SAndroid Build Coastguard Worker const uint8_t* p_; 52*e7c364b6SAndroid Build Coastguard Worker size_t length_; 53*e7c364b6SAndroid Build Coastguard Worker int app_type_; 54*e7c364b6SAndroid Build Coastguard Worker }; 55*e7c364b6SAndroid Build Coastguard Worker 56*e7c364b6SAndroid Build Coastguard Worker #endif /* ASN1_DECODER_H_ */ 57