mirror of https://github.com/dirtbags/moth.git
add playfair live category
This commit is contained in:
parent
dbcb895640
commit
6668588501
|
@ -0,0 +1,19 @@
|
||||||
|
PLAYFAIR_PKGDIR = $(TARGET)/playfair
|
||||||
|
PLAYFAIR_BUILDDIR = $(BUILD)/playfair
|
||||||
|
|
||||||
|
playfair-install: playfair-build
|
||||||
|
mkdir -p $(PLAYFAIR_PKGDIR)/bin/
|
||||||
|
|
||||||
|
$(call COPYTREE, packages/playfair/service, $(PLAYFAIR_PKGDIR)/service)
|
||||||
|
|
||||||
|
cp packages/playfair/tokens.txt $(PLAYFAIR_PKGDIR)/
|
||||||
|
cp packages/playfair/src/playfair $(PLAYFAIR_PKGDIR)/bin/
|
||||||
|
|
||||||
|
playfair-clean:
|
||||||
|
rm -rf $(PLAYFAIR_PKGDIR) $(PLAYFAIR_BUILDDIR)
|
||||||
|
$(MAKE) -C packages/playfair/src clean
|
||||||
|
|
||||||
|
playfair-build:
|
||||||
|
$(MAKE) -C packages/playfair/src build
|
||||||
|
|
||||||
|
PACKAGES += playfair
|
|
@ -0,0 +1 @@
|
||||||
|
fd84:b410:3441::529/64
|
|
@ -0,0 +1,3 @@
|
||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
exec svlogd -tt $PWD
|
|
@ -0,0 +1,9 @@
|
||||||
|
#! /bin/sh -e
|
||||||
|
|
||||||
|
exec 2>&1
|
||||||
|
|
||||||
|
IP=$(cat ip.txt)
|
||||||
|
ip addr add $IP dev eth0 || true
|
||||||
|
|
||||||
|
exec tcpsvd -u nobody ${IP%/*} 1013 /opt/playfair/bin/playfair
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
build: playfair
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f playfair
|
|
@ -0,0 +1,196 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#define TRUE 1
|
||||||
|
#define FALSE 0
|
||||||
|
|
||||||
|
// finds the index of a character in the index
|
||||||
|
// returns index or -1
|
||||||
|
int
|
||||||
|
indexkey(char* key, char c) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for(i=0; i < 25; i++) {
|
||||||
|
if (key[i] == c) {
|
||||||
|
//printf("'%d' -> %d\n", c, i);
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// makes sure everything is lowercase or a space
|
||||||
|
void
|
||||||
|
strtolower(char* s, int len) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for(i = 0; i < len; i++) {
|
||||||
|
s[i] = tolower(s[i]);
|
||||||
|
if (s[i] < 'a' || s[i] > 'z') {
|
||||||
|
s[i] = ' ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// makes a key
|
||||||
|
char *
|
||||||
|
make_key(char* s, int len) {
|
||||||
|
strtolower(s, len);
|
||||||
|
char alph[] = "abcdefghijklmnopqrstuvwxyz";
|
||||||
|
char* key = (char *) malloc(26 * sizeof(char));
|
||||||
|
key[26] = '\0';
|
||||||
|
int keylen = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
// initial dump
|
||||||
|
for(i=0; i< len; i++) {
|
||||||
|
if( s[i] != ' ' && alph[s[i]-97] != ' ' && s[i] != 'q') {
|
||||||
|
key[keylen] = s[i];
|
||||||
|
keylen++;
|
||||||
|
alph[s[i]-97] = ' ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// add extra chars
|
||||||
|
for (i=0; i < 27; i++) {
|
||||||
|
if (alph[i] != ' ' && alph[i] != 'q') {
|
||||||
|
key[keylen] = alph[i];
|
||||||
|
keylen++;
|
||||||
|
alph[i] = ' ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// double checks for duplicate chars in string
|
||||||
|
int
|
||||||
|
isdup(char* s, int len) {
|
||||||
|
int i, j;
|
||||||
|
|
||||||
|
for(i = 0; i < len; i++) {
|
||||||
|
for(j = i+1; j < len; j++ ) {
|
||||||
|
if (s[i] == s[j]) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// does the swapping of two characters
|
||||||
|
// assuming input is already sanitized
|
||||||
|
void
|
||||||
|
swapchar(char* key, char* plain) {
|
||||||
|
int i0, i1;
|
||||||
|
i0 = indexkey(key, plain[0]);
|
||||||
|
i1 = indexkey(key, plain[1]);
|
||||||
|
|
||||||
|
// will hit this with double null, or double x
|
||||||
|
if (i0 == i1){
|
||||||
|
// so pass
|
||||||
|
// vertical case
|
||||||
|
} else if (i0%5 == i1%5) {
|
||||||
|
plain[0] = key[(i0+5)%25];
|
||||||
|
plain[1] = key[(i1+5)%25];
|
||||||
|
// horizontal case
|
||||||
|
} else if (i0/5 == i1/5) {
|
||||||
|
plain[0] = key[(i0/5)*5 + (i0+1)%5];
|
||||||
|
plain[1] = key[(i1/5)*5 + (i1+1)%5];
|
||||||
|
// diagonal case
|
||||||
|
} else {
|
||||||
|
int b0 = i0%5;
|
||||||
|
int b1 = i1%5;
|
||||||
|
int diff;
|
||||||
|
if (b0 > b1) {
|
||||||
|
diff = b0 - b1;
|
||||||
|
plain[0] = key[i0-diff];
|
||||||
|
plain[1] = key[i1+diff];
|
||||||
|
} else {
|
||||||
|
diff = b1 - b0;
|
||||||
|
plain[0] = key[i0+diff];
|
||||||
|
plain[1] = key[i1-diff];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
printcrap(char* buf){
|
||||||
|
printf("%c%c ", buf[0]-32, buf[1]-32);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
run(char* key) {
|
||||||
|
char buf[3];
|
||||||
|
char tmp;
|
||||||
|
int existing = FALSE;
|
||||||
|
|
||||||
|
buf[2] = 0;
|
||||||
|
|
||||||
|
while (TRUE) {
|
||||||
|
// read some crap in
|
||||||
|
tmp = getchar();
|
||||||
|
if (tmp == 'q') {
|
||||||
|
tmp = 'x';
|
||||||
|
}
|
||||||
|
if (tmp == EOF) {
|
||||||
|
if(existing) {
|
||||||
|
buf[1] = 'x';
|
||||||
|
swapchar(key, buf);
|
||||||
|
printcrap(buf);
|
||||||
|
existing = FALSE;
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else if (tmp == '\n') {
|
||||||
|
if(existing) {
|
||||||
|
buf[1] = 'x';
|
||||||
|
swapchar(key, buf);
|
||||||
|
printcrap(buf);
|
||||||
|
printf("\n");
|
||||||
|
fflush(stdout);
|
||||||
|
existing = FALSE;
|
||||||
|
}
|
||||||
|
} else if (91 <= tmp && tmp <= 122) {
|
||||||
|
if (existing) {
|
||||||
|
if (tmp == buf[0]) {
|
||||||
|
buf[1] = 'x';
|
||||||
|
swapchar(key, buf);
|
||||||
|
printcrap(buf);
|
||||||
|
buf[0] = tmp;
|
||||||
|
} else {
|
||||||
|
buf[1] = tmp;
|
||||||
|
swapchar(key, buf);
|
||||||
|
printcrap(buf);
|
||||||
|
existing = FALSE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
buf[0] = tmp;
|
||||||
|
existing = TRUE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//printf("\nOnly [a-z\\n]\n");
|
||||||
|
//fflush(stdout);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
main() {
|
||||||
|
// Unusual token, since it has to satisfy some strict requirements.
|
||||||
|
char key[] = "netkutalbcdfgrisox";
|
||||||
|
int len = strlen(key);
|
||||||
|
char * ckey = make_key(key, len);
|
||||||
|
|
||||||
|
// All I know about trigraphs is that the gcc manual says I don't want
|
||||||
|
// to know about trigraphs.
|
||||||
|
printf("The key is the token. ???:????\?-???\?-????\n");
|
||||||
|
fflush(stdout);
|
||||||
|
run(ckey);
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
net:kutal-bcdfg-risox
|
Loading…
Reference in New Issue