~ubuntu-branches/ubuntu/trusty/travis/trusty-proposed

« back to all changes in this revision

Viewing changes to src/base64.cpp

  • Committer: Package Import Robot
  • Author(s): Daniel Leidert
  • Date: 2014-01-18 20:07:16 UTC
  • mfrom: (1.1.8)
  • Revision ID: package-import@ubuntu.com-20140118200716-whsmcg7fa1eyqecq
Tags: 140117-1
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*****************************************************************************
2
 
    TRAVIS - Trajectory Analyzer and Visualizer
3
 
    http://www.travis-analyzer.de/
4
 
 
5
 
    Copyright (c) 2009-2013 Martin Brehm
6
 
                  2012-2013 Martin Thomas
7
 
 
8
 
    This file written by Martin Brehm.
9
 
 
10
 
    This program is free software: you can redistribute it and/or modify
11
 
    it under the terms of the GNU General Public License as published by
12
 
    the Free Software Foundation, either version 3 of the License, or
13
 
    (at your option) any later version.
14
 
 
15
 
    This program is distributed in the hope that it will be useful,
16
 
    but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 
    GNU General Public License for more details.
19
 
 
20
 
    You should have received a copy of the GNU General Public License
21
 
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
22
 
*****************************************************************************/
23
 
 
24
 
#include "base64.h"
25
 
#include "string.h"
26
 
 
27
 
static const char  BASE64_table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
28
 
static const int   BASE64_INPUT_SIZE = 57;
29
 
 
30
 
bool isbase64(char c)
31
 
{
32
 
   return c && strchr(BASE64_table, c) != NULL;
33
 
}
34
 
 
35
 
inline char BASE64_value(char c)
36
 
{
37
 
   const char *p = strchr(BASE64_table, c);
38
 
   if(p) {
39
 
      return p-BASE64_table;
40
 
   } else {
41
 
      return 0;
42
 
   }
43
 
}
44
 
 
45
 
int UnBase64(unsigned char *dest, const unsigned char *src, int srclen)
46
 
{
47
 
   *dest = 0;
48
 
   if(*src == 0) 
49
 
   {
50
 
      return 0;
51
 
   }
52
 
   unsigned char *p = dest;
53
 
   do
54
 
   {
55
 
 
56
 
      char a = BASE64_value(src[0]);
57
 
      char b = BASE64_value(src[1]);
58
 
      char c = BASE64_value(src[2]);
59
 
      char d = BASE64_value(src[3]);
60
 
      *p++ = (a << 2) | (b >> 4);
61
 
      *p++ = (b << 4) | (c >> 2);
62
 
      *p++ = (c << 6) | d;
63
 
      if(!isbase64(src[1])) 
64
 
      {
65
 
         p -= 2;
66
 
         break;
67
 
      } 
68
 
      else if(!isbase64(src[2])) 
69
 
      {
70
 
         p -= 2;
71
 
         break;
72
 
      } 
73
 
      else if(!isbase64(src[3])) 
74
 
      {
75
 
         p--;
76
 
         break;
77
 
      }
78
 
      src += 4;
79
 
      while(*src && (*src == 13 || *src == 10)) src++;
80
 
   }
81
 
   while(srclen-= 4);
82
 
   *p = 0;
83
 
   return p-dest;
84
 
}
85
 
 
86
 
 
 
1
/*****************************************************************************
 
2
    TRAVIS - Trajectory Analyzer and Visualizer
 
3
    http://www.travis-analyzer.de/
 
4
 
 
5
    Copyright (c) 2009-2014 Martin Brehm
 
6
                  2012-2014 Martin Thomas
 
7
 
 
8
    This file written by Martin Brehm.
 
9
 
 
10
    This program is free software: you can redistribute it and/or modify
 
11
    it under the terms of the GNU General Public License as published by
 
12
    the Free Software Foundation, either version 3 of the License, or
 
13
    (at your option) any later version.
 
14
 
 
15
    This program is distributed in the hope that it will be useful,
 
16
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 
17
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
18
    GNU General Public License for more details.
 
19
 
 
20
    You should have received a copy of the GNU General Public License
 
21
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
22
*****************************************************************************/
 
23
 
 
24
#include "base64.h"
 
25
#include "string.h"
 
26
 
 
27
static const char  BASE64_table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
 
28
static const int   BASE64_INPUT_SIZE = 57;
 
29
 
 
30
bool isbase64(char c)
 
31
{
 
32
   return c && strchr(BASE64_table, c) != NULL;
 
33
}
 
34
 
 
35
inline char BASE64_value(char c)
 
36
{
 
37
   const char *p = strchr(BASE64_table, c);
 
38
   if(p) {
 
39
      return p-BASE64_table;
 
40
   } else {
 
41
      return 0;
 
42
   }
 
43
}
 
44
 
 
45
int UnBase64(unsigned char *dest, const unsigned char *src, int srclen)
 
46
{
 
47
   *dest = 0;
 
48
   if(*src == 0) 
 
49
   {
 
50
      return 0;
 
51
   }
 
52
   unsigned char *p = dest;
 
53
   do
 
54
   {
 
55
 
 
56
      char a = BASE64_value(src[0]);
 
57
      char b = BASE64_value(src[1]);
 
58
      char c = BASE64_value(src[2]);
 
59
      char d = BASE64_value(src[3]);
 
60
      *p++ = (a << 2) | (b >> 4);
 
61
      *p++ = (b << 4) | (c >> 2);
 
62
      *p++ = (c << 6) | d;
 
63
      if(!isbase64(src[1])) 
 
64
      {
 
65
         p -= 2;
 
66
         break;
 
67
      } 
 
68
      else if(!isbase64(src[2])) 
 
69
      {
 
70
         p -= 2;
 
71
         break;
 
72
      } 
 
73
      else if(!isbase64(src[3])) 
 
74
      {
 
75
         p--;
 
76
         break;
 
77
      }
 
78
      src += 4;
 
79
      while(*src && (*src == 13 || *src == 10)) src++;
 
80
   }
 
81
   while(srclen-= 4);
 
82
   *p = 0;
 
83
   return p-dest;
 
84
}
 
85
 
 
86