Line data Source code
1 : /*
2 : *
3 : * Copyright (c) 2020 Project CHIP Authors
4 : * Copyright (c) 2019 Google LLC.
5 : * All rights reserved.
6 : *
7 : * Licensed under the Apache License, Version 2.0 (the "License");
8 : * you may not use this file except in compliance with the License.
9 : * You may obtain a copy of the License at
10 : *
11 : * http://www.apache.org/licenses/LICENSE-2.0
12 : *
13 : * Unless required by applicable law or agreed to in writing, software
14 : * distributed under the License is distributed on an "AS IS" BASIS,
15 : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 : * See the License for the specific language governing permissions and
17 : * limitations under the License.
18 : */
19 :
20 : /**
21 : * @file
22 : * This file contains functions for working with ASN1 errors.
23 : */
24 :
25 : #include <stdlib.h>
26 :
27 : #include <lib/asn1/ASN1.h>
28 :
29 : namespace chip {
30 : namespace ASN1 {
31 :
32 : /**
33 : * Given an ASN1 error, returns a human-readable NULL-terminated C string
34 : * describing the error.
35 : *
36 : * @param[in] buf Buffer into which the error string will be placed.
37 : * @param[in] bufSize Size of the supplied buffer in bytes.
38 : * @param[in] err The error to be described.
39 : *
40 : * @return true If a description string was written into the supplied buffer.
41 : * @return false If the supplied error was not an ASN1 error.
42 : *
43 : */
44 0 : bool FormatASN1Error(char * buf, uint16_t bufSize, CHIP_ERROR err)
45 : {
46 0 : const char * desc = nullptr;
47 :
48 0 : if (!err.IsPart(ChipError::SdkPart::kASN1))
49 : {
50 0 : return false;
51 : }
52 :
53 : #if !CHIP_CONFIG_SHORT_ERROR_STR
54 0 : switch (err.AsInteger())
55 : {
56 0 : case ASN1_END.AsInteger():
57 0 : desc = "End of input";
58 0 : break;
59 0 : case ASN1_ERROR_UNDERRUN.AsInteger():
60 0 : desc = "Reader underrun";
61 0 : break;
62 0 : case ASN1_ERROR_OVERFLOW.AsInteger():
63 0 : desc = "Writer overflow";
64 0 : break;
65 0 : case ASN1_ERROR_INVALID_STATE.AsInteger():
66 0 : desc = "Invalid state";
67 0 : break;
68 0 : case ASN1_ERROR_MAX_DEPTH_EXCEEDED.AsInteger():
69 0 : desc = "Max depth exceeded";
70 0 : break;
71 0 : case ASN1_ERROR_INVALID_ENCODING.AsInteger():
72 0 : desc = "Invalid encoding";
73 0 : break;
74 0 : case ASN1_ERROR_UNSUPPORTED_ENCODING.AsInteger():
75 0 : desc = "Unsupported encoding";
76 0 : break;
77 0 : case ASN1_ERROR_TAG_OVERFLOW.AsInteger():
78 0 : desc = "Tag overflow";
79 0 : break;
80 0 : case ASN1_ERROR_LENGTH_OVERFLOW.AsInteger():
81 0 : desc = "Length overflow";
82 0 : break;
83 0 : case ASN1_ERROR_VALUE_OVERFLOW.AsInteger():
84 0 : desc = "Value overflow";
85 0 : break;
86 0 : case ASN1_ERROR_UNKNOWN_OBJECT_ID.AsInteger():
87 0 : desc = "Unknown object id";
88 0 : break;
89 : }
90 : #endif // !CHIP_CONFIG_SHORT_ERROR_STR
91 :
92 0 : FormatError(buf, bufSize, "ASN1", err, desc);
93 :
94 0 : return true;
95 : }
96 :
97 : } // namespace ASN1
98 : } // namespace chip
|