FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
node-krb5/src/base64.cc at master · feenst/node-krb5 · GitHub
feenst
/
node-krb5
Public
forked from
adaltas/node-krb5
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
node-krb5
/
src
/
base64.cc
Copy path
More file actions
More file actions
Latest commit
History
History
History
97 lines (90 loc) · 3.4 KB
Breadcrumbs
node-krb5
/
src
/
base64.cc
Copy path
File metadata and controls
97 lines (90 loc) · 3.4 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#
include
"
base64.h
"
/*
encode base64 nbcar caractères mémorisés
dans orig et met le résultat dans dest
*/
void
encode64
(
char
*orig,
char
*dest,
int
nbcar){
//
groupe de 3 octets à convertir en base 64
unsigned
char
octet1, octet2, octet3;
//
tableau d'encodage
//
ce tableau est statique pour éviter une allocation
//
mémoire + initialisation à chaque appel de la fonction
static
char
valcar [] =
"
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
"
;
//
tant qu'il reste au moins 3 caractères à encoder
while
(nbcar >=
3
){
//
extraire 3 caractères de la chaine et les
//
mémoriser sous la forme d'octets (non signés)
octet1 = *(orig++);
octet2 = *(orig++);
octet3 = *(orig++);
//
décomposer les 3 octets en tranches de 6 bits et les
//
remplacer par les caractères correspondants dans valcar
*(dest++) = valcar [octet1 >>
2
];
*(dest++) = valcar [((octet1 &
3
) <<
4
) | (octet2 >>
4
)];
*(dest++) = valcar [((octet2 &
0x0F
) <<
2
) | (octet3 >>
6
)];
*(dest++) = valcar [octet3 &
0x3F
];
//
3 caractères de moins à traiter
nbcar -=
3
;
}
//
s'il reste des caractères à encoder
if
(nbcar) {
//
encodage des 6 bits de poids fort du premier caractère
octet1 = *(orig++);
*(dest++) = valcar [octet1 >>
2
];
//
s'il ne reste que ce caractère à encoder
if
(nbcar ==
1
){
//
encodage des 2 bits de poids faible de ce ce caractère
*(dest++) = valcar [(octet1 &
3
) <<
4
];
//
indique qu'aucun autre caractère n'est encodé
*(dest++) =
'
=
'
;
}
//
sinon (il reste 2 caractères à encoder)
else
{
//
2 bits de poids faible du 1er caractère + encodage de l'autre
octet2 = *orig;
*(dest++) = valcar [((octet1 &
3
) <<
4
) | (octet2 >>
4
)];
*(dest++) = valcar [(octet2 &
0x0F
) <<
2
];
}
//
indique qu'aucun autre caractère n'est encodé
*(dest++) =
'
=
'
;
}
//
fin de l'encodage
*dest =
'
\0
'
;
}
/*
décode le contenu de buffer encodé base64, met le résultat
dans buffer et retourne le nombre de caractères convertis
*/
int
decode64
(
char
*buffer) {
int
car;
//
caractère du fichier
char
valcar [
4
];
//
valeur après conversion des caractères
int
i;
//
compteur
int
posorig;
//
position dans la ligne passée en paramètre
int
posdest;
//
position dans la nouvelle ligne générée
//
initialisations
posorig =
0
;
posdest =
0
;
//
tant que non fin de ligne
while
(buffer[posorig]>
'
'
&& buffer[posorig]!=
'
=
'
) {
//
décoder la valeur de 4 caractères
for
(i=
0
; i<
4
&& buffer[posorig]!=
'
=
'
; i++) {
//
récupérer un caractère dans la ligne
car=buffer[posorig++];
//
décoder ce caractère
if
(
'
A
'
<= car && car <=
'
Z
'
) valcar[i]=car-
'
A
'
;
else
if
(
'
a
'
<= car && car <=
'
z
'
) valcar[i]=car+
26
-
'
a
'
;
else
if
(
'
0
'
<= car && car <=
'
9
'
) valcar[i]=car+
52
-
'
0
'
;
else
if
(car ==
'
+
'
) valcar[i]=
62
;
else
if
(car ==
'
/
'
) valcar[i]=
63
;
}
//
recopier les caractères correspondants dans le buffer
buffer[posdest++]=(valcar [
0
] <<
2
) | (valcar [
1
] >>
4
);
//
sauf si indicateur de fin de message
if
(i >
2
) {
buffer[posdest++]=(valcar[
1
] <<
4
) | (valcar[
2
] >>
2
);
if
(i >
3
) {
buffer[posdest++]=(valcar[
2
] <<
6
) | (valcar[
3
]);
}
}
}
//
terminer le buffer
buffer[posdest]=
'
\0
'
;
//
et retourner le nombre de caractères obtenus
return
(posdest);
}
Back
|
FazBrowse Home
|
New Git URL