pwm period is now 200us instead of the default 20ms veml6040 config is now AF_BIT | TRIG_BIT
Dependencies: mbed MMA8451Q USBDevice WakeUp vt100
Fork of afero_node_suntory_2017_06_15 by
base64.cpp
00001 /* 00002 * RFC 1521 base64 encoding/decoding 00003 * 00004 * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved 00005 * SPDX-License-Identifier: Apache-2.0 00006 * 00007 * Licensed under the Apache License, Version 2.0 (the "License"); you may 00008 * not use this file except in compliance with the License. 00009 * You may obtain a copy of the License at 00010 * 00011 * http://www.apache.org/licenses/LICENSE-2.0 00012 * 00013 * Unless required by applicable law or agreed to in writing, software 00014 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 00015 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00016 * See the License for the specific language governing permissions and 00017 * limitations under the License. 00018 * 00019 * This file is part of mbed TLS (https://tls.mbed.org) 00020 */ 00021 #include "base64.h" //wsugi 00022 #if !defined(MBEDTLS_CONFIG_FILE) 00023 //wsugi #include "mbedtls/config.h" 00024 #else 00025 #include MBEDTLS_CONFIG_FILE 00026 #endif 00027 00028 //wsugi #if defined(MBEDTLS_BASE64_C) 00029 00030 //wsugi #include "mbedtls/base64.h" 00031 00032 //wsugi #include <stdint.h> 00033 00034 #if defined(MBEDTLS_SELF_TEST) 00035 #include <string.h> 00036 #if defined(MBEDTLS_PLATFORM_C) 00037 #include "mbedtls/platform.h" 00038 #else 00039 #include <stdio.h> 00040 #define mbedtls_printf printf 00041 #endif /* MBEDTLS_PLATFORM_C */ 00042 #endif /* MBEDTLS_SELF_TEST */ 00043 00044 static const unsigned char base64_enc_map[64] = 00045 { 00046 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 00047 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 00048 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 00049 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 00050 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 00051 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', 00052 '8', '9', '+', '/' 00053 }; 00054 00055 static const unsigned char base64_dec_map[128] = 00056 { 00057 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 00058 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 00059 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 00060 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 00061 127, 127, 127, 62, 127, 127, 127, 63, 52, 53, 00062 54, 55, 56, 57, 58, 59, 60, 61, 127, 127, 00063 127, 64, 127, 127, 127, 0, 1, 2, 3, 4, 00064 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 00065 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 00066 25, 127, 127, 127, 127, 127, 127, 26, 27, 28, 00067 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 00068 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 00069 49, 50, 51, 127, 127, 127, 127, 127 00070 }; 00071 00072 #define BASE64_SIZE_T_MAX ( (size_t) -1 ) /* SIZE_T_MAX is not standard */ 00073 00074 /* 00075 * Encode a buffer into base64 format 00076 */ 00077 int mbedtls_base64_encode( unsigned char *dst, size_t dlen, size_t *olen, 00078 const unsigned char *src, size_t slen ) 00079 { 00080 size_t i, n; 00081 int C1, C2, C3; 00082 unsigned char *p; 00083 00084 if( slen == 0 ) 00085 { 00086 *olen = 0; 00087 return( 0 ); 00088 } 00089 00090 n = slen / 3 + ( slen % 3 != 0 ); 00091 00092 if( n > ( BASE64_SIZE_T_MAX - 1 ) / 4 ) 00093 { 00094 *olen = BASE64_SIZE_T_MAX; 00095 return( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ); 00096 } 00097 00098 n *= 4; 00099 00100 if( ( dlen < n + 1 ) || ( NULL == dst ) ) 00101 { 00102 *olen = n + 1; 00103 return( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ); 00104 } 00105 00106 n = ( slen / 3 ) * 3; 00107 00108 for( i = 0, p = dst; i < n; i += 3 ) 00109 { 00110 C1 = *src++; 00111 C2 = *src++; 00112 C3 = *src++; 00113 00114 *p++ = base64_enc_map[(C1 >> 2) & 0x3F]; 00115 *p++ = base64_enc_map[(((C1 & 3) << 4) + (C2 >> 4)) & 0x3F]; 00116 *p++ = base64_enc_map[(((C2 & 15) << 2) + (C3 >> 6)) & 0x3F]; 00117 *p++ = base64_enc_map[C3 & 0x3F]; 00118 } 00119 00120 if( i < slen ) 00121 { 00122 C1 = *src++; 00123 C2 = ( ( i + 1 ) < slen ) ? *src++ : 0; 00124 00125 *p++ = base64_enc_map[(C1 >> 2) & 0x3F]; 00126 *p++ = base64_enc_map[(((C1 & 3) << 4) + (C2 >> 4)) & 0x3F]; 00127 00128 if( ( i + 1 ) < slen ) 00129 *p++ = base64_enc_map[((C2 & 15) << 2) & 0x3F]; 00130 else *p++ = '='; 00131 00132 *p++ = '='; 00133 } 00134 00135 *olen = p - dst; 00136 *p = 0; 00137 00138 return( 0 ); 00139 } 00140 00141 /* 00142 * Decode a base64-formatted buffer 00143 */ 00144 int mbedtls_base64_decode( unsigned char *dst, size_t dlen, size_t *olen, 00145 const unsigned char *src, size_t slen ) 00146 { 00147 size_t i, n; 00148 uint32_t j, x; 00149 unsigned char *p; 00150 00151 /* First pass: check for validity and get output length */ 00152 for( i = n = j = 0; i < slen; i++ ) 00153 { 00154 /* Skip spaces before checking for EOL */ 00155 x = 0; 00156 while( i < slen && src[i] == ' ' ) 00157 { 00158 ++i; 00159 ++x; 00160 } 00161 00162 /* Spaces at end of buffer are OK */ 00163 if( i == slen ) 00164 break; 00165 00166 if( ( slen - i ) >= 2 && 00167 src[i] == '\r' && src[i + 1] == '\n' ) 00168 continue; 00169 00170 if( src[i] == '\n' ) 00171 continue; 00172 00173 /* Space inside a line is an error */ 00174 if( x != 0 ) 00175 return( MBEDTLS_ERR_BASE64_INVALID_CHARACTER ); 00176 00177 if( src[i] == '=' && ++j > 2 ) 00178 return( MBEDTLS_ERR_BASE64_INVALID_CHARACTER ); 00179 00180 if( src[i] > 127 || base64_dec_map[src[i]] == 127 ) 00181 return( MBEDTLS_ERR_BASE64_INVALID_CHARACTER ); 00182 00183 if( base64_dec_map[src[i]] < 64 && j != 0 ) 00184 return( MBEDTLS_ERR_BASE64_INVALID_CHARACTER ); 00185 00186 n++; 00187 } 00188 00189 if( n == 0 ) 00190 { 00191 *olen = 0; 00192 return( 0 ); 00193 } 00194 00195 n = ( ( n * 6 ) + 7 ) >> 3; 00196 n -= j; 00197 00198 if( dst == NULL || dlen < n ) 00199 { 00200 *olen = n; 00201 return( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ); 00202 } 00203 00204 for( j = 3, n = x = 0, p = dst; i > 0; i--, src++ ) 00205 { 00206 if( *src == '\r' || *src == '\n' || *src == ' ' ) 00207 continue; 00208 00209 j -= ( base64_dec_map[*src] == 64 ); 00210 x = ( x << 6 ) | ( base64_dec_map[*src] & 0x3F ); 00211 00212 if( ++n == 4 ) 00213 { 00214 n = 0; 00215 if( j > 0 ) *p++ = (unsigned char)( x >> 16 ); 00216 if( j > 1 ) *p++ = (unsigned char)( x >> 8 ); 00217 if( j > 2 ) *p++ = (unsigned char)( x ); 00218 } 00219 } 00220 00221 *olen = p - dst; 00222 00223 return( 0 ); 00224 } 00225 00226 #if defined(MBEDTLS_SELF_TEST) 00227 00228 static const unsigned char base64_test_dec[64] = 00229 { 00230 0x24, 0x48, 0x6E, 0x56, 0x87, 0x62, 0x5A, 0xBD, 00231 0xBF, 0x17, 0xD9, 0xA2, 0xC4, 0x17, 0x1A, 0x01, 00232 0x94, 0xED, 0x8F, 0x1E, 0x11, 0xB3, 0xD7, 0x09, 00233 0x0C, 0xB6, 0xE9, 0x10, 0x6F, 0x22, 0xEE, 0x13, 00234 0xCA, 0xB3, 0x07, 0x05, 0x76, 0xC9, 0xFA, 0x31, 00235 0x6C, 0x08, 0x34, 0xFF, 0x8D, 0xC2, 0x6C, 0x38, 00236 0x00, 0x43, 0xE9, 0x54, 0x97, 0xAF, 0x50, 0x4B, 00237 0xD1, 0x41, 0xBA, 0x95, 0x31, 0x5A, 0x0B, 0x97 00238 }; 00239 00240 static const unsigned char base64_test_enc[] = 00241 "JEhuVodiWr2/F9mixBcaAZTtjx4Rs9cJDLbpEG8i7hPK" 00242 "swcFdsn6MWwINP+Nwmw4AEPpVJevUEvRQbqVMVoLlw=="; 00243 00244 /* 00245 * Checkup routine 00246 */ 00247 int mbedtls_base64_self_test( int verbose ) 00248 { 00249 size_t len; 00250 const unsigned char *src; 00251 unsigned char buffer[128]; 00252 00253 if( verbose != 0 ) 00254 mbedtls_printf( " Base64 encoding test: " ); 00255 00256 src = base64_test_dec; 00257 00258 if( mbedtls_base64_encode( buffer, sizeof( buffer ), &len, src, 64 ) != 0 || 00259 memcmp( base64_test_enc, buffer, 88 ) != 0 ) 00260 { 00261 if( verbose != 0 ) 00262 mbedtls_printf( "failed\n" ); 00263 00264 return( 1 ); 00265 } 00266 00267 if( verbose != 0 ) 00268 mbedtls_printf( "passed\n Base64 decoding test: " ); 00269 00270 src = base64_test_enc; 00271 00272 if( mbedtls_base64_decode( buffer, sizeof( buffer ), &len, src, 88 ) != 0 || 00273 memcmp( base64_test_dec, buffer, 64 ) != 0 ) 00274 { 00275 if( verbose != 0 ) 00276 mbedtls_printf( "failed\n" ); 00277 00278 return( 1 ); 00279 } 00280 00281 if( verbose != 0 ) 00282 mbedtls_printf( "passed\n\n" ); 00283 00284 return( 0 ); 00285 } 00286 00287 #endif /* MBEDTLS_SELF_TEST */ 00288 00289 //wsugi #endif /* MBEDTLS_BASE64_C */
Generated on Thu Jul 14 2022 06:24:36 by 1.7.2