14e3d78c64
- Changed build libgb. - Added memory.h for compatibility. git-svn-id: svn://kolibrios.org@8367 a494cfbc-eb01-0410-851d-a64ba20cac60
36 lines
1.2 KiB
C
36 lines
1.2 KiB
C
/*********************************************************************
|
|
* Filename: rot-13.c
|
|
* Author: Brad Conte (brad AT bradconte.com)
|
|
* Copyright:
|
|
* Disclaimer: This code is presented "as is" without any guarantees.
|
|
* Details: Implementation of the ROT-13 encryption algorithm.
|
|
Algorithm specification can be found here:
|
|
*
|
|
This implementation uses little endian byte order.
|
|
*********************************************************************/
|
|
|
|
/*************************** HEADER FILES ***************************/
|
|
#include <string.h>
|
|
#include <cryptal/rot-13.h>
|
|
|
|
/*********************** FUNCTION DEFINITIONS ***********************/
|
|
void rot13(char str[])
|
|
{
|
|
int case_type, idx, len;
|
|
|
|
for (idx = 0, len = strlen(str); idx < len; idx++) {
|
|
// Only process alphabetic characters.
|
|
if (str[idx] < 'A' || (str[idx] > 'Z' && str[idx] < 'a') || str[idx] > 'z')
|
|
continue;
|
|
// Determine if the char is upper or lower case.
|
|
if (str[idx] >= 'a')
|
|
case_type = 'a';
|
|
else
|
|
case_type = 'A';
|
|
// Rotate the char's value, ensuring it doesn't accidentally "fall off" the end.
|
|
str[idx] = (str[idx] + 13) % (case_type + 26);
|
|
if (str[idx] < 26)
|
|
str[idx] += case_type;
|
|
}
|
|
}
|