1 /*
2  * Copyright (C) 2017 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include <iostream>
18 
19 #include <android/hardware/keymaster/4.0/types.h>
20 
21 #include "keymaster_tags.h"
22 
23 namespace android {
24 namespace hardware {
25 namespace keymaster {
26 namespace V4_0 {
27 
28 inline ::std::ostream& operator<<(::std::ostream& os, Algorithm value) {
29     return os << toString(value);
30 }
31 
32 inline ::std::ostream& operator<<(::std::ostream& os, BlockMode value) {
33     return os << toString(value);
34 }
35 
36 inline ::std::ostream& operator<<(::std::ostream& os, Digest value) {
37     return os << toString(value);
38 }
39 
40 inline ::std::ostream& operator<<(::std::ostream& os, EcCurve value) {
41     return os << toString(value);
42 }
43 
44 inline ::std::ostream& operator<<(::std::ostream& os, ErrorCode value) {
45     return os << toString(value);
46 }
47 
48 inline ::std::ostream& operator<<(::std::ostream& os, KeyOrigin value) {
49     return os << toString(value);
50 }
51 
52 inline ::std::ostream& operator<<(::std::ostream& os, PaddingMode value) {
53     return os << toString(value);
54 }
55 
56 inline ::std::ostream& operator<<(::std::ostream& os, SecurityLevel value) {
57     return os << toString(value);
58 }
59 
60 template <typename ValueT>
61 ::std::ostream& operator<<(::std::ostream& os, const NullOr<ValueT>& value) {
62     if (!value.isOk()) {
63         os << "(value not present)";
64     } else {
65         os << value.value();
66     }
67     return os;
68 }
69 
70 ::std::ostream& operator<<(::std::ostream& os, const hidl_vec<KeyParameter>& set);
71 ::std::ostream& operator<<(::std::ostream& os, const KeyParameter& value);
72 
73 inline ::std::ostream& operator<<(::std::ostream& os, const KeyCharacteristics& value) {
74     return os << "SW: " << value.softwareEnforced << ::std::endl
75               << "HW: " << value.hardwareEnforced << ::std::endl;
76 }
77 
78 inline ::std::ostream& operator<<(::std::ostream& os, KeyPurpose value) {
79     return os << toString(value);
80 }
81 
82 inline ::std::ostream& operator<<(::std::ostream& os, Tag tag) {
83     return os << toString(tag);
84 }
85 
86 }  // namespace V4_0
87 }  // namespace keymaster
88 }  // namespace hardware
89 }  // namespace android
90