Changeset 776 in openpam
- Timestamp:
- Mar 9, 2014, 12:48:48 PM (7 years ago)
- Location:
- trunk/lib/liboath
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/lib/liboath/oath_base32.c
r772 r776 38 38 #include <errno.h> 39 39 #include <stdint.h> 40 #include <stdio.h>41 40 42 41 #include <security/oath.h> 42 43 #include "oath_impl.h" 43 44 44 45 static const char b32enc[] = … … 46 47 47 48 static const char b32dec[256] = { 48 ['A'] = 0, ['B'] = 1, ['C'] = 2, ['D'] = 3, 49 ['E'] = 4, ['F'] = 5, ['G'] = 6, ['H'] = 7, 50 ['I'] = 8, ['J'] = 9, ['K'] = 10, ['L'] = 11, 51 ['M'] = 12, ['N'] = 13, ['O'] = 14, ['P'] = 15, 52 ['Q'] = 16, ['R'] = 17, ['S'] = 18, ['T'] = 19, 53 ['U'] = 20, ['V'] = 21, ['W'] = 22, ['X'] = 23, 54 ['Y'] = 24, ['Z'] = 25, 55 56 ['a'] = 0, ['b'] = 1, ['c'] = 2, ['d'] = 3, 57 ['e'] = 4, ['f'] = 5, ['g'] = 6, ['h'] = 7, 58 ['i'] = 8, ['j'] = 9, ['k'] = 10, ['l'] = 11, 59 ['m'] = 12, ['n'] = 13, ['o'] = 14, ['p'] = 15, 60 ['q'] = 16, ['r'] = 17, ['s'] = 18, ['t'] = 19, 61 ['u'] = 20, ['v'] = 21, ['w'] = 22, ['x'] = 23, 62 ['y'] = 24, ['z'] = 25, 63 64 ['2'] = 26, ['3'] = 27, ['4'] = 28, ['5'] = 29, 65 ['6'] = 30, ['7'] = 31, 49 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 50 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 51 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 52 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 53 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 54 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 55 0xff, 0xff, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 56 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 57 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 58 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 59 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 60 0x17, 0x18, 0x19, 0xff, 0xff, 0xff, 0xff, 0xff, 61 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 62 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 63 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 64 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 65 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 66 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 67 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 68 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 69 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 70 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 71 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 72 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 73 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 74 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 75 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 76 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 77 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 78 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 79 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 80 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 66 81 }; 67 82 … … 76 91 77 92 if (*olen <= base32_enclen(ilen)) { 93 *olen = base32_enclen(ilen) + 1; 78 94 errno = ENOSPC; 79 95 return (-1); … … 111 127 case 1: 112 128 bits |= (uint64_t)in[0] << 32; 129 COVERAGE_NO_DEFAULT_CASE 113 130 } 114 131 out[0] = b32enc[bits >> 35 & 0x1f]; … … 154 171 /* consume */ 155 172 continue; 156 } else if (!padding && b32dec[(int)*in] ) {173 } else if (!padding && b32dec[(int)*in] >= 0) { 157 174 /* shift into accumulator */ 158 175 shift += 5; 159 176 bits = bits << 5 | b32dec[(int)*in]; 160 } else if (!padding && shift && *in == '=') {177 } else if (!padding && shift > 0 && shift < 5 && *in == '=') { 161 178 /* final byte */ 162 179 shift = 0; … … 176 193 } 177 194 /* report decoded length */ 178 *olen = len;179 195 if (len > *olen) { 180 196 /* overflow */ 197 *olen = len; 181 198 errno = ENOSPC; 182 199 return (-1); 183 200 } 201 *olen = len; 184 202 return (0); 185 203 } -
trunk/lib/liboath/oath_base64.c
r772 r776 41 41 #include <security/oath.h> 42 42 43 #include "oath_impl.h" 44 43 45 static const char b64enc[] = 44 46 "ABCDEFGHIJKLMNOPQRSTUVWXYZ" … … 47 49 48 50 static const char b64dec[256] = { 49 ['A'] = 0, ['B'] = 1, ['C'] = 2, ['D'] = 3, 50 ['E'] = 4, ['F'] = 5, ['G'] = 6, ['H'] = 7, 51 ['I'] = 8, ['J'] = 9, ['K'] = 10, ['L'] = 11, 52 ['M'] = 12, ['N'] = 13, ['O'] = 14, ['P'] = 15, 53 ['Q'] = 16, ['R'] = 17, ['S'] = 18, ['T'] = 19, 54 ['U'] = 20, ['V'] = 21, ['W'] = 22, ['X'] = 23, 55 ['Y'] = 24, ['Z'] = 25, ['a'] = 26, ['b'] = 27, 56 ['c'] = 28, ['d'] = 29, ['e'] = 30, ['f'] = 31, 57 ['g'] = 32, ['h'] = 33, ['i'] = 34, ['j'] = 35, 58 ['k'] = 36, ['l'] = 37, ['m'] = 38, ['n'] = 39, 59 ['o'] = 40, ['p'] = 41, ['q'] = 42, ['r'] = 43, 60 ['s'] = 44, ['t'] = 45, ['u'] = 46, ['v'] = 47, 61 ['w'] = 48, ['x'] = 49, ['y'] = 50, ['z'] = 51, 62 ['0'] = 52, ['1'] = 53, ['2'] = 54, ['3'] = 55, 63 ['4'] = 56, ['5'] = 57, ['6'] = 58, ['7'] = 59, 64 ['8'] = 60, ['9'] = 61, ['+'] = 62, ['/'] = 63, 51 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 52 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 53 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 54 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 55 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 56 0xff, 0xff, 0xff, 0x3e, 0xff, 0xff, 0xff, 0x3f, 57 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 58 0x3c, 0x3d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 59 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 60 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 61 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 62 0x17, 0x18, 0x19, 0xff, 0xff, 0xff, 0xff, 0xff, 63 0xff, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 64 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 65 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 66 0x31, 0x32, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 67 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 68 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 69 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 70 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 71 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 72 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 73 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 74 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 75 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 76 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 77 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 78 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 79 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 80 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 81 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 82 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 65 83 }; 66 84 … … 74 92 uint32_t bits; 75 93 76 if (*olen <= base64_enclen(ilen)) 94 if (*olen <= base64_enclen(ilen)) { 95 *olen = base64_enclen(ilen) + 1; 96 errno = ENOSPC; 77 97 return (-1); 98 } 78 99 *olen = 0; 79 100 while (ilen >= 3) { … … 98 119 case 1: 99 120 bits |= (uint32_t)in[0] << 16; 121 COVERAGE_NO_DEFAULT_CASE 100 122 } 101 123 out[0] = b64enc[bits >> 18 & 0x3f]; … … 137 159 /* consume */ 138 160 continue; 139 } else if (!padding && b64dec[(int)*in] ) {161 } else if (!padding && b64dec[(int)*in] >= 0) { 140 162 /* shift into accumulator */ 141 163 shift += 6; 142 164 bits = bits << 6 | b64dec[(int)*in]; 143 } else if (!padding && shift && *in == '=') {165 } else if (!padding && shift > 0 && shift != 6 && *in == '=') { 144 166 /* final byte */ 145 167 shift = 0; … … 159 181 } 160 182 /* report decoded length */ 161 *olen = len;162 183 if (len > *olen) { 163 184 /* overflow */ 185 *olen = len; 164 186 errno = ENOSPC; 165 187 return (-1); 166 188 } 189 *olen = len; 167 190 return (0); 168 191 }
Note: See TracChangeset
for help on using the changeset viewer.