summaryrefslogtreecommitdiffstats
path: root/install/include/private/asn1_decoder.h
diff options
context:
space:
mode:
authorTianjie Xu <xunchang@google.com>2019-03-29 23:04:04 +0100
committerandroid-build-merger <android-build-merger@google.com>2019-03-29 23:04:04 +0100
commit8e39f3d54e0cb403be80c248286be14a5a427814 (patch)
treeb31bd3f84794bbbea30d04e2e7465d0957fee209 /install/include/private/asn1_decoder.h
parentMerge "Use flags = 0 to avoid fd closing for child updater process" am: 50bda24f1e am: 111663d893 (diff)
parentMerge "Move install to separate module" am: a232d9dccb (diff)
downloadandroid_bootable_recovery-8e39f3d54e0cb403be80c248286be14a5a427814.tar
android_bootable_recovery-8e39f3d54e0cb403be80c248286be14a5a427814.tar.gz
android_bootable_recovery-8e39f3d54e0cb403be80c248286be14a5a427814.tar.bz2
android_bootable_recovery-8e39f3d54e0cb403be80c248286be14a5a427814.tar.lz
android_bootable_recovery-8e39f3d54e0cb403be80c248286be14a5a427814.tar.xz
android_bootable_recovery-8e39f3d54e0cb403be80c248286be14a5a427814.tar.zst
android_bootable_recovery-8e39f3d54e0cb403be80c248286be14a5a427814.zip
Diffstat (limited to 'install/include/private/asn1_decoder.h')
-rw-r--r--install/include/private/asn1_decoder.h56
1 files changed, 56 insertions, 0 deletions
diff --git a/install/include/private/asn1_decoder.h b/install/include/private/asn1_decoder.h
new file mode 100644
index 000000000..e5337d9c4
--- /dev/null
+++ b/install/include/private/asn1_decoder.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ASN1_DECODER_H_
+#define ASN1_DECODER_H_
+
+#include <stddef.h>
+#include <stdint.h>
+
+class asn1_context {
+ public:
+ asn1_context(const uint8_t* buffer, size_t length) : p_(buffer), length_(length), app_type_(0) {}
+ int asn1_constructed_type() const;
+ asn1_context* asn1_constructed_get();
+ bool asn1_constructed_skip_all();
+ asn1_context* asn1_sequence_get();
+ asn1_context* asn1_set_get();
+ bool asn1_sequence_next();
+ bool asn1_oid_get(const uint8_t** oid, size_t* length);
+ bool asn1_octet_string_get(const uint8_t** octet_string, size_t* length);
+
+ private:
+ static constexpr int kMaskConstructed = 0xE0;
+ static constexpr int kMaskTag = 0x7F;
+ static constexpr int kMaskAppType = 0x1F;
+
+ static constexpr int kTagOctetString = 0x04;
+ static constexpr int kTagOid = 0x06;
+ static constexpr int kTagSequence = 0x30;
+ static constexpr int kTagSet = 0x31;
+ static constexpr int kTagConstructed = 0xA0;
+
+ int peek_byte() const;
+ int get_byte();
+ bool skip_bytes(size_t num_skip);
+ bool decode_length(size_t* out_len);
+
+ const uint8_t* p_;
+ size_t length_;
+ int app_type_;
+};
+
+#endif /* ASN1_DECODER_H_ */