1 /******************************************************************
3 * Copyright 2015 Samsung Electronics All Rights Reserved.
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 ******************************************************************/
21 #include "gtest/gtest.h"
26 // Tests for base64 encode function
27 TEST(B64EncodeTest, ValidInputForEncoding)
30 uint32_t outputLength;
31 uint32_t expectedLength;
33 B64Result res = B64_OK;
35 const char* input = "IoTivity base64~!@#$%^&*()-=0123456789<>?;:'[]{},.\"\\|";
37 /**< expected output is generated from
38 "http://www.convertstring.com/EncodeDecode/Base64Encode" */
39 const char* expectedOutput[53] = {
52 "SW9UaXZpdHkgYmFzZQ==",
53 "SW9UaXZpdHkgYmFzZTY=",
54 "SW9UaXZpdHkgYmFzZTY0",
55 "SW9UaXZpdHkgYmFzZTY0fg==",
56 "SW9UaXZpdHkgYmFzZTY0fiE=",
57 "SW9UaXZpdHkgYmFzZTY0fiFA",
58 "SW9UaXZpdHkgYmFzZTY0fiFAIw==",
59 "SW9UaXZpdHkgYmFzZTY0fiFAIyQ=",
60 "SW9UaXZpdHkgYmFzZTY0fiFAIyQl",
61 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXg==",
62 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiY=",
63 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYq",
64 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKA==",
65 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCk=",
66 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCkt",
67 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPQ==",
68 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTA=",
69 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAx",
70 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMg==",
71 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM=",
72 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0",
73 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NQ==",
74 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY=",
75 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3",
76 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3OA==",
77 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk=",
78 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8",
79 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pg==",
80 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj8=",
81 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87",
82 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87Og==",
83 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87Oic=",
84 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87Oidb",
85 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87OidbXQ==",
86 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87OidbXXs=",
87 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87OidbXXt9",
88 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87OidbXXt9LA==",
89 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87OidbXXt9LC4=",
90 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87OidbXXt9LC4i",
91 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87OidbXXt9LC4iXA==",
92 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87OidbXXt9LC4iXHw="
95 for(i=0; i< strlen(input); i++)
97 memset(buf, 0, sizeof(buf));
99 expectedLength = strlen(expectedOutput[i]);
101 res = b64Encode((uint8_t*)input, i + 1, buf, 128, &outputLength);
103 EXPECT_EQ(B64_OK, res);
104 EXPECT_EQ(expectedLength, outputLength);
105 EXPECT_EQ(0, strcmp(expectedOutput[i], buf));
109 // Tests for base64 decode function
110 TEST(B64DeodeTest, ValidInputForDecoding)
113 uint32_t outputLength;
115 B64Result res = B64_OK;
117 const char* input[53] = {
130 "SW9UaXZpdHkgYmFzZQ==",
131 "SW9UaXZpdHkgYmFzZTY=",
132 "SW9UaXZpdHkgYmFzZTY0",
133 "SW9UaXZpdHkgYmFzZTY0fg==",
134 "SW9UaXZpdHkgYmFzZTY0fiE=",
135 "SW9UaXZpdHkgYmFzZTY0fiFA",
136 "SW9UaXZpdHkgYmFzZTY0fiFAIw==",
137 "SW9UaXZpdHkgYmFzZTY0fiFAIyQ=",
138 "SW9UaXZpdHkgYmFzZTY0fiFAIyQl",
139 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXg==",
140 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiY=",
141 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYq",
142 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKA==",
143 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCk=",
144 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCkt",
145 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPQ==",
146 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTA=",
147 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAx",
148 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMg==",
149 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM=",
150 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0",
151 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NQ==",
152 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY=",
153 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3",
154 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3OA==",
155 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk=",
156 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8",
157 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pg==",
158 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj8=",
159 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87",
160 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87Og==",
161 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87Oic=",
162 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87Oidb",
163 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87OidbXQ==",
164 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87OidbXXs=",
165 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87OidbXXt9",
166 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87OidbXXt9LA==",
167 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87OidbXXt9LC4=",
168 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87OidbXXt9LC4i",
169 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87OidbXXt9LC4iXA==",
170 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87OidbXXt9LC4iXHw="
172 const char* expectedOutput = "IoTivity base64~!@#$%^&*()-=0123456789<>?;:'[]{},.\"\\|";
174 for(i=0; i< (sizeof(input)/sizeof(char*)); i++)
176 memset(buf, 0, sizeof(buf));
178 res = b64Decode(input[i], strlen(input[i]), buf, 128, &outputLength);
180 EXPECT_EQ(B64_OK, res);
181 EXPECT_EQ(i + 1, outputLength);
182 EXPECT_EQ(0, memcmp(expectedOutput, buf, i + 1));
186 // Tests for base64 decode function
187 TEST(B64DeodeTest, InvalidInputForDecoding)
190 uint32_t outputLength;
193 const char* input[53] = {
206 "SW9UaXZpdHkgymFzZQ==",
207 "SW9UaXZpdHkgYmFzZTY==",
208 "SW9UaXZpdHkgYmFzZTY0=",
209 "SW9UaXZpdHkgYmFzZTY0fg=",
210 "SW9UaXZpdHkgYmFzZTY0fiE==",
211 "SW8UaXZpdHkgYmFzZTY0fiFA",
212 "SW9UaxzPDHkgYmFzZTY0fiFAIw==",
213 "SW9UaXZpdHKGYmFzZTY0fiFAIyQ=",
214 "SW9UaXZpdHkgYmFZztY0fiFAIyQl=",
215 "SW8UaXZpdHkgYmFzZTY0fiFAIyQlXg=",
216 "#SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiY=",
217 "SSW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYq",
218 "SW9UaXZpdHkgYmFzZTY0fiFAiyQlXiYqKA==",
219 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCk===",
220 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKckt",
221 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKcktpQ==",
222 "SW9UaXZpdHkgYmFzZTY0fiFAIyQiXiYqKCktPTA=",
223 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAx=",
224 "SW9UaXZpdHkgYmFzZTY0fifAIyQlXiYqKCktPTAxmg=",
225 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM#1=",
226 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM1",
227 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0Nq==",
228 "sw9uaxzpdhkgymfzzty0fifaiyqlxiyqKcktptaxmjm0nty=",
229 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0nTY3",
230 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3Ok==",
231 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3OA==",
232 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pg",
233 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pg=",
234 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjm0NTY3ODk8Pj9=",
235 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXqKCktPTAxMjM0NTY3ODk8Pj87=",
236 "SW9UaXZpdHkgYmFzZTY0fiFaIyiYqKCktPTAxMjM0NTY3ODk8Pj87Og==",
237 "W9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87Oic1=",
238 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCkTAxMjM0NTY3ODk8Pj87Oidb==",
239 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYCktPTAxMjM0NTY3ODk8Pj87Oidbxq==",
240 "SW9UaXZpdHkgYmzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87Oidbxxs=",
241 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCkPTAxMjM0NTY3ODk8Pj87OidbXXT9",
242 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87OidbXXt9la==",
243 "SW9UaXZpdHkgYzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87OidbXXt9Lc4=",
244 "SW9UaXZpdHkgYmFzZ0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87OidbXXt9lC4i",
245 "SW9UaXZpdHkgYmFzZTY0fiFAIyQlXiYqKCktPTAxMjM0NTY3ODk8Pj87OidbXXt9lc4iXA==",
246 "SW9UaXZpdHkgYmFzZTY0fiFqKCktPTAxMjM0NTY3ODk8Pj87OidbXXt9LC4ixHw="
248 const char* expectedOutput = "IoTivity base64~!@#$%^&*()-=0123456789<>?;:'[]{},.\"\\|";
250 for(i=0; i< (sizeof(input)/sizeof(char*)); i++)
252 memset(buf, 0, sizeof(buf));
254 if( B64_OK == b64Decode(input[i], strlen(input[i]), buf, 128, &outputLength) )
256 EXPECT_NE(0, memcmp(expectedOutput, buf, i + 1));