monotone

monotone Mtn Source Tree

Root/botan/charset.cpp

1/*************************************************
2* Character Set Handling Source File *
3* (C) 1999-2006 The Botan Project *
4*************************************************/
5
6#include <botan/charset.h>
7#include <botan/hex.h>
8#include <botan/base64.h>
9#include <botan/libstate.h>
10#include <cctype>
11
12namespace Botan {
13
14namespace Charset {
15
16/*************************************************
17* Perform character set transcoding *
18*************************************************/
19std::string transcode(const std::string& str,
20 Character_Set to, Character_Set from)
21 {
22 return global_state().transcode(str, to, from);
23 }
24
25/*************************************************
26* Check if a character represents a digit *
27*************************************************/
28bool is_digit(char c)
29 {
30 if(c == '0' || c == '1' || c == '2' || c == '3' || c == '4' ||
31 c == '5' || c == '6' || c == '7' || c == '8' || c == '9')
32 return true;
33 return false;
34 }
35
36/*************************************************
37* Check if a character represents whitespace *
38*************************************************/
39bool is_space(char c)
40 {
41 if(c == ' ' || c == '\t' || c == '\n' || c == '\r')
42 return true;
43 return false;
44 }
45
46/*************************************************
47* Convert a character to a digit *
48*************************************************/
49byte char2digit(char c)
50 {
51 switch(c)
52 {
53 case '0': return 0;
54 case '1': return 1;
55 case '2': return 2;
56 case '3': return 3;
57 case '4': return 4;
58 case '5': return 5;
59 case '6': return 6;
60 case '7': return 7;
61 case '8': return 8;
62 case '9': return 9;
63 }
64
65 throw Invalid_Argument("char2digit: Input is not a digit character");
66 }
67
68/*************************************************
69* Convert a digit to a character *
70*************************************************/
71char digit2char(byte b)
72 {
73 switch(b)
74 {
75 case 0: return '0';
76 case 1: return '1';
77 case 2: return '2';
78 case 3: return '3';
79 case 4: return '4';
80 case 5: return '5';
81 case 6: return '6';
82 case 7: return '7';
83 case 8: return '8';
84 case 9: return '9';
85 }
86
87 throw Invalid_Argument("digit2char: Input is not a digit");
88 }
89
90/*************************************************
91* Case-insensitive character comparison *
92*************************************************/
93bool caseless_cmp(char a, char b)
94 {
95 return (std::tolower((unsigned char)a) == std::tolower((unsigned char)b));
96 }
97
98}
99
100/*************************************************
101* Hex Encoder Lookup Tables *
102*************************************************/
103const byte Hex_Encoder::BIN_TO_HEX_UPPER[16] = {
1040x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43,
1050x44, 0x45, 0x46 };
106
107const byte Hex_Encoder::BIN_TO_HEX_LOWER[16] = {
1080x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63,
1090x64, 0x65, 0x66 };
110
111/*************************************************
112* Base64 Encoder Lookup Table *
113*************************************************/
114const byte Base64_Encoder::BIN_TO_BASE64[64] = {
1150x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D,
1160x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A,
1170x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D,
1180x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A,
1190x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x2B, 0x2F };
120
121/*************************************************
122* Hex Decoder Lookup Table *
123*************************************************/
124const byte Hex_Decoder::HEX_TO_BIN[256] = {
1250x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1260x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1270x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1280x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x01, 0x02, 0x03,
1290x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1300x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1310x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1320x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x80,
1330x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1340x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1350x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1360x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1370x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1380x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1390x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1400x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1410x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1420x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1430x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1440x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 };
145
146/*************************************************
147* Base64 Decoder Lookup Table *
148*************************************************/
149const byte Base64_Decoder::BASE64_TO_BIN[256] = {
1500x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1510x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1520x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1530x80, 0x80, 0x80, 0x80, 0x3E, 0x80, 0x80, 0x80, 0x3F, 0x34, 0x35, 0x36, 0x37,
1540x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1550x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
1560x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
1570x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20,
1580x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D,
1590x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1600x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1610x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1620x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1630x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1640x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1650x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1660x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1670x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1680x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1690x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 };
170
171}

Archive Download this file

Branches

Tags

Quick Links:     www.monotone.ca    -     Downloads    -     Documentation    -     Wiki    -     Code Forge    -     Build Status