Imported Upstream version 0.9.2
[platform/upstream/iotivity.git] / resource / csdk / security / unittest / base64tests.cpp
1  /******************************************************************
2   *
3   * Copyright 2015 Samsung Electronics All Rights Reserved.
4   *
5   *
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 #include "gtest/gtest.h"
22 #include "base64.h"
23 #include <stdlib.h>
24 #include <stdint.h>
25
26 // Tests for base64 encode function
27 TEST(B64EncodeTest, ValidInputForEncoding)
28 {
29     char buf[128];
30     uint32_t outputLength;
31     uint32_t expectedLength;
32     uint32_t i=0;
33     B64Result res = B64_OK;
34
35     const char* input = "IoTivity base64~!@#$%^&*()-=0123456789<>?;:'[]{},.\"\\|";
36
37     /**< expected output is generated from
38              "http://www.convertstring.com/EncodeDecode/Base64Encode" */
39     const char* expectedOutput[53] = {
40         "SQ==",
41         "SW8=",
42         "SW9U",
43         "SW9UaQ==",
44         "SW9UaXY=",
45         "SW9UaXZp",
46         "SW9UaXZpdA==",
47         "SW9UaXZpdHk=",
48         "SW9UaXZpdHkg",
49         "SW9UaXZpdHkgYg==",
50         "SW9UaXZpdHkgYmE=",
51         "SW9UaXZpdHkgYmFz",
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="
93     };
94
95     for(i=0; i< strlen(input); i++)
96     {
97         memset(buf, 0, sizeof(buf));
98
99         expectedLength = strlen(expectedOutput[i]);
100
101         res = b64Encode((uint8_t*)input, i + 1, buf, 128, &outputLength);
102
103         EXPECT_EQ(B64_OK, res);
104         EXPECT_EQ(expectedLength, outputLength);
105         EXPECT_EQ(0, strcmp(expectedOutput[i], buf));
106     }
107 }
108
109 // Tests for base64 decode function
110 TEST(B64DeodeTest, ValidInputForDecoding)
111 {
112     uint8_t buf[128];
113     uint32_t outputLength;
114     uint32_t i=0;
115     B64Result res = B64_OK;
116
117     const char* input[53] = {
118         "SQ==",
119         "SW8=",
120         "SW9U",
121         "SW9UaQ==",
122         "SW9UaXY=",
123         "SW9UaXZp",
124         "SW9UaXZpdA==",
125         "SW9UaXZpdHk=",
126         "SW9UaXZpdHkg",
127         "SW9UaXZpdHkgYg==",
128         "SW9UaXZpdHkgYmE=",
129         "SW9UaXZpdHkgYmFz",
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="
171     };
172     const char* expectedOutput = "IoTivity base64~!@#$%^&*()-=0123456789<>?;:'[]{},.\"\\|";
173
174     for(i=0; i< (sizeof(input)/sizeof(char*)); i++)
175     {
176         memset(buf, 0, sizeof(buf));
177
178         res = b64Decode(input[i], strlen(input[i]), buf, 128, &outputLength);
179
180         EXPECT_EQ(B64_OK, res);
181         EXPECT_EQ(i + 1, outputLength);
182         EXPECT_EQ(0, memcmp(expectedOutput, buf, i + 1));
183     }
184 }
185
186 // Tests for base64 decode function
187 TEST(B64DeodeTest, InvalidInputForDecoding)
188 {
189     uint8_t buf[128];
190     uint32_t outputLength;
191     uint32_t i=0;
192
193     const char* input[53] = {
194         "SQ=",
195         "Sw8=",
196         "SW1U",
197         "SW9Uaq==",
198         "SW9uaXY=",
199         "SW91UaXZp",
200         "SW9UaXZpdA.==",
201         "Sw9UAXZpdHk=",
202         "SW9UAXZpdHkg",
203         "SW9UaXZpdhkgYg==",
204         "SW9UaXZpd5kgYmE=",
205         "SW9UaXZ1dHkgYmFz",
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="
247     };
248     const char* expectedOutput = "IoTivity base64~!@#$%^&*()-=0123456789<>?;:'[]{},.\"\\|";
249
250     for(i=0; i< (sizeof(input)/sizeof(char*)); i++)
251     {
252         memset(buf, 0, sizeof(buf));
253
254         if( B64_OK == b64Decode(input[i], strlen(input[i]), buf, 128, &outputLength) )
255         {
256             EXPECT_NE(0, memcmp(expectedOutput, buf, i + 1));
257         }
258     }
259 }
260