base32.c revision 5a49430dbff6b14e3a05db71328bad4597f7ec62
// Base32 implementation
//
// Copyright 2010 Google Inc.
// Author: Markus Gutschke
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
/*
Decode a base32 encoded string into the provided buffer.
Uses the algorithm described in RFC 4648
(http://tools.ietf.org/html/rfc4648#page-8)
Includes parsing the padding symbol '='.
Params:
encoded - A null terminated char* containing the encoded base32
result - An initialised buffer to contain the decoded result
bufSize - The size of the initialised buffer
Return:
A count of length of the decoded string
*/
int
{
int buffer = 0;
int bitsLeft = 0;
int count = 0;
continue;
buffer <<= 5;
// Deal with commonly mistyped characters
if (ch == '0')
ch = 'O';
else if (ch == '1')
ch = 'L';
else if (ch == '8')
ch = 'B';
// Look up one base32 digit
else
return -1;
bitsLeft += 5;
if (bitsLeft >= 8) {
bitsLeft -= 8;
}
}
return count;
}
/*
Encode a string with base32 encoding into the provided buffer.
Uses the algorithm described in RFC 4648
(http://tools.ietf.org/html/rfc4648#page-8)
Includes inserting padding symbols as required.
Params:
data - A possibly null terminated buffer containing the characters to encode
length - The number of characters in 'data'
result - A pre-initialised buffer to store the encoded characters in
bufSize - The size of the 'result' buffer
Return:
A count of length of the encoded string
*/
int
{
int count = 0;
int quantum = 8;
return -1;
if (length > 0) {
int next = 1;
int bitsLeft = 8;
if (bitsLeft < 5) {
buffer <<= 8;
bitsLeft += 8;
} else {
}
}
bitsLeft -= 5;
// Track the characters which make up a single quantum of 8 characters
quantum--;
if (quantum == 0) {
quantum = 8;
}
}
}
// If the number of encoded characters does not make a full quantum, insert padding
if (quantum != 8) {
while (quantum > 0) {
quantum--;
}
}
return count;
}