Pages:
Author

Topic: The Legend of Satoshi Nakamato, FINAL STEP PUBLISHED.... 4.87 BTC GRAND PRIZE! - page 25. (Read 108519 times)

jr. member
Activity: 51
Merit: 1
@kn0w0n3 If you disable the newbie PM protection I'd like to chat more in PM.

Disabled it and sent you a PM.

member
Activity: 196
Merit: 23
Large scale, green crypto mining ICO

This is the original:




I don't know how it is in US but here in Europe you would keep neither oil nor acrylic painting behind glass. You keep paper paintings behind glass (like watercolours etc.) but you don't paint oil on paper.

The fact that on your photo the painting IS kept behind glass, I think it indicates one of two things, the second one being really interesting:
1. either this is not the original
2. or the original was first painted with oil or acrylic and the photoed or scanned and then messed with some more in Photoshop or whatever and then printed on regular paper. And then put behind the glass for savekeeping
newbie
Activity: 21
Merit: 0
Just as an opinion, what I've learned from Cicada Liber Primus solving is that you need to catalog EVERYTHING you do. It gets really crazy with what people are trying versus what hasn't been tried yet.

Doing something like unit tests or just uploading the code is really useful.

I think that when someone hits a clear path, every followed step will be cataloged, at least for himself. At this point, and I am following the thread from almost the start (and the other chats that appeared), only thoughts and theories are being tested. This puzzle is using a different logic than previous ones.
newbie
Activity: 22
Merit: 0
@kn0w0n3 If you disable the newbie PM protection I'd like to chat more in PM.
newbie
Activity: 22
Merit: 0
@Itod, so in your opinion the "The_____iskeyfile" message is the intended message?

Well, I have a theory didn't want to mention before while trying to find the proof. The message "THEfm_aurISKEYFILE" can hardly be a collision, and the bold scrambled part is intentionally left there to be de-scrambled in the same way other bit-streams should be de-scrambled to get a key. If you come across the stream of bytes from private key you may not notice something is scrambled, but if you find something like plaintext quoted above it's pretty obvious something is wrong. So to answer you: yes I think it's intentionally left there scrambled/corrupted to show the way.

Anything can be the way to de-scramble it in a coherent message. The current path I'm working are the chessboard fields affected by Phoenix fire. It looks to me that those chessboard fields that should be dark are somehow lighter with this bright blue Phoenix color then the white ones, so some bits associated with those chessboard fields should be inverted in raw bit-streams. I believe if we invert some bits from the "THEfm_aurISKEYFILE" bit-stream, in this way I've described, we will get coherent message from this bit-stream, and then we should apply this same transformation to colors bit-streams to get the private key.

Why "keyfile" though?

Perhaps the odd word choice was needed to create/preserve the 0x1x1x0x1x1x0 pattern.

This is the one thing that's tough to reconcile. The message overlaps with the pattern bits which would indicate it's not really there. The original dataset was only 2GB large. Presuming mostly random data the chance of finding just the "iskeyfile" text in that small of a search space is 0.098%. Both eventualities are equally unlikely.
newbie
Activity: 41
Merit: 0
Just as an opinion, what I've learned from Cicada Liber Primus solving is that you need to catalog EVERYTHING you do. It gets really crazy with what people are trying versus what hasn't been tried yet.

Doing something like unit tests or just uploading the code is really useful.
newbie
Activity: 14
Merit: 0
@Itod, so in your opinion the "The_____iskeyfile" message is the intended message?

Well, I have a theory didn't want to mention before while trying to find the proof. The message "THEfm_aurISKEYFILE" can hardly be a collision, and the bold scrambled part is intentionally left there to be de-scrambled in the same way other bit-streams should be de-scrambled to get a key. If you come across the stream of bytes from private key you may not notice something is scrambled, but if you find something like plaintext quoted above it's pretty obvious something is wrong. So to answer you: yes I think it's intentionally left there scrambled/corrupted to show the way.

Anything can be the way to de-scramble it in a coherent message. The current path I'm working are the chessboard fields affected by Phoenix fire. It looks to me that those chessboard fields that should be dark are somehow lighter with this bright blue Phoenix color then the white ones, so some bits associated with those chessboard fields should be inverted in raw bit-streams. I believe if we invert some bits from the "THEfm_aurISKEYFILE" bit-stream, in this way I've described, we will get coherent message from this bit-stream, and then we should apply this same transformation to colors bit-streams to get the private key.

AUR makes me think of Arch User Repository. Maybe there is a package in there that has some information?

Was there more than just this string in the output?
jr. member
Activity: 51
Merit: 1
@Itod, so in your opinion the "The_____iskeyfile" message is the intended message?

Well, I have a theory didn't want to mention before while trying to find the proof. The message "THEfm_aurISKEYFILE" can hardly be a collision, and the bold scrambled part is intentionally left there to be de-scrambled in the same way other bit-streams should be de-scrambled to get a key. If you come across the stream of bytes from private key you may not notice something is scrambled, but if you find something like plaintext quoted above it's pretty obvious something is wrong. So to answer you: yes I think it's intentionally left there scrambled/corrupted to show the way.

Anything can be the way to de-scramble it in a coherent message. The current path I'm working are the chessboard fields affected by Phoenix fire. It looks to me that those chessboard fields that should be dark are somehow lighter with this bright blue Phoenix color then the white ones, so some bits associated with those chessboard fields should be inverted in raw bit-streams. I believe if we invert some bits from the "THEfm_aurISKEYFILE" bit-stream, in this way I've described, we will get coherent message from this bit-stream, and then we should apply this same transformation to colors bit-streams to get the private key.

Why "keyfile" though?

Perhaps the odd word choice was needed to create/preserve the 0x1x1x0x1x1x0 pattern.
full member
Activity: 462
Merit: 115
Just found this.  I hope someone solves it soon.  Tagging to follow!
newbie
Activity: 8
Merit: 0
Quote
Maybe you are right. Maybe you know all of the secrets to this image and for some reason decided not to move the BTC to another address. I doubt it, though. I get the impression that you are nay-saying anything that is outside of the path you think might be correct out of hubris. Either that or you want to demoralize others, throw red herrings, troll, or some combination.

Welcome to the puzzle. You have very interesting ideas, don't let feedo blow the wind out of your sails, he's just bitter he hasn't solved the puzzle yet.
newbie
Activity: 14
Merit: 0
@Itod, so in your opinion the "The_____iskeyfile" message is the intended message?

Well, I have a theory didn't want to mention before while trying to find the proof. The message "THEfm_aurISKEYFILE" can hardly be a collision, and the bold scrambled part is intentionally left there to be de-scrambled in the same way other bit-streams should be de-scrambled to get a key. If you come across the stream of bytes from private key you may not notice something is scrambled, but if you find something like plaintext quoted above it's pretty obvious something is wrong. So to answer you: yes I think it's intentionally left there scrambled/corrupted to show the way.

Anything can be the way to de-scramble it in a coherent message. The current path I'm working are the chessboard fields affected by Phoenix fire. It looks to me that those chessboard fields that should be dark are somehow lighter with this bright blue Phoenix color then the white ones, so some bits associated with those chessboard fields should be inverted in raw bit-streams. I believe if we invert some bits from the "THEfm_aurISKEYFILE" bit-stream, in this way I've described, we will get coherent message from this bit-stream, and then we should apply this same transformation to colors bit-streams to get the private key.

Why "keyfile" though?
newbie
Activity: 14
Merit: 0
Quote
welcome Smiley but don't be too much excited as you'll see that sooner than later you'll be disappointed and stuck, and it could takes another 300 years before we solve it Grin

I am not excited. I am just interested and curious. I will think about it until it isn't fun anymore.

Quote
No comment! what a great start! Grin Grin Grin

Making a comment to say no comment... Condescending and passive-aggressive at the same time. Great way to set the tone.

Quote
if you look at the ribbons height (long+short) then it makes no sense to exclude the length.

I have not disregarded the ribbon lengths, nor do I assume to have ruled anything out. I am exploring other avenues.

Quote
and why do you think that the red flames are the message? you didn't mention any reason for that!

I mentioned that they stick out to me. It is intrinsic with no logic, I give you that. I think the artist wanted attention drawn to them. To elaborate, if the color was only a stylistic choice, I think a less chaotic pattern would be apparent and there would be more balance in the color scheme. There wouldn't be so many groups of consecutive flames of that color.

Quote
and the big question is: So What? what's the next step? how you'll use them?!

I think prime numbers are significant. And while I do not know how to interpret them as a clue (or if they even are clues), any observations are worth exploration. Maybe it can inspire others to follow different paths to interpreting the image.

Quote
Here i completely disagree with you as you can't divide the board to 4 equal quadrants as you did (its 9*7 board not 8*8 )

In all probability, you are right. However, allowing for overlap it could be divided into quadrants, as I attempted to illustrate in the images I uploaded. I also think it might be the direction to read the bit-streams in the flames.... E.g. the outer rim reads one direction, the inner reads another. I don't know, it was just an idea. I never claimed it was a good one.

Quote
i don't think she used only brushes in this painting, there is also a digital work or modification, the painting has two layers, there is another layer (mostly in black colour) under the flames and the board.

I see multiple layers as well, but looking at the high-quality *tif, it looks like the layers are physical medium (paint over paint).

Quote
Thank you for your post, but i don't see any of your ideas of much help, no one of your ideas could be a start point to something useful.

Thank you for your reply, but I don't see any of your comments of much help, no one of your condescending remarks ruled out any idea I presented.

Maybe you are right. Maybe you know all of the secrets to this image and for some reason decided not to move the BTC to another address. I doubt it, though. I get the impression that you are nay-saying anything that is outside of the path you think might be correct out of hubris. Either that or you want to demoralize others, throw red herrings, troll, or some combination.
hero member
Activity: 694
Merit: 500
@Itod, so in your opinion the "The_____iskeyfile" message is the intended message?

Well, I have a theory didn't want to mention before while trying to find the proof. The message "THEfm_aurISKEYFILE" can hardly be a collision, and the bold scrambled part is intentionally left there to be de-scrambled in the same way other bit-streams should be de-scrambled to get a key. If you come across the stream of bytes from private key you may not notice something is scrambled, but if you find something like plaintext quoted above it's pretty obvious something is wrong. So to answer you: yes I think it's intentionally left there scrambled/corrupted to show the way.

Anything can be the way to de-scramble it in a coherent message.

you don't have to search in the board tiles to de-scramble that message.
it's only 5 letters so it would be so easy to get all meaningful words from it.

FMAUR

1) ARUM (Lily)
http://weedaction.org.nz/arum-lily/

2) FARM

3) MURA (Mural)

4) RAM

and if we replace the _ with L

FMAURL

1) FULMAR

https://en.wikipedia.org/wiki/Fulmar

2) ARMFUL

3) MURAL

4) LARUM

https://www.collinsdictionary.com/dictionary/english/larum
hero member
Activity: 694
Merit: 500
Quote
I only recently found this puzzle and thought I might spend a little time thinking about it

welcome Smiley but don't be too much excited as you'll see that sooner than later you'll be disappointed and stuck, and it could takes another 300 years before we solve it Grin

Quote
I do not see a rabbit.

No comment! what a great start! Grin Grin Grin

Quote
Rather than the height or width of each flame, it makes more sense to me that the color would indicate each bit

if you look at the ribbons height (long+short) then it makes no sense to exclude the length.

Quote
Following my original thought that the red flames are the message

and why do you think that the red flames are the message? you didn't mention any reason for that!

Quote
The glyphs in each of the corners look like Ulam spirals to me
and the big question is: So What? what's the next step? how you'll use them?!

Quote
Whether or not the glyphs are Ulam spirals, I agree that they might also indicate a direction to read the information in the image

i completely disagree with you as you can't divide the board to 4 equal quadrants as you did (its 9*7 board not 8*8 )

Quote
I have seen a number of posts where people "zoom and enhance" sections to find characters or hidden imagery. It is obvious that this was done with paint, perhaps acrylic. There may have been other mediums incorporated as well, or other tools besides paint brushes.

i don't think she used only brushes in this painting, there is also a digital work or modification, the painting has two layers, there is another layer (mostly in black colour) under the flames and the board.

Quote
Anyway, I just wanted to list out my own thoughts and see if this might light a fuse of inspiration for anyone.

Thank you for your post, but i don't see any of your ideas of much help, no one of your ideas could be a start point to something useful.
legendary
Activity: 1974
Merit: 1077
^ Will code for Bitcoins
@Itod, so in your opinion the "The_____iskeyfile" message is the intended message?

Well, I have a theory didn't want to mention before while trying to find the proof. The message "THEfm_aurISKEYFILE" can hardly be a collision, and the bold scrambled part is intentionally left there to be de-scrambled in the same way other bit-streams should be de-scrambled to get a key. If you come across the stream of bytes from private key you may not notice something is scrambled, but if you find something like plaintext quoted above it's pretty obvious something is wrong. So to answer you: yes I think it's intentionally left there scrambled/corrupted to show the way.

Anything can be the way to de-scramble it in a coherent message. The current path I'm working are the chessboard fields affected by Phoenix fire. It looks to me that those chessboard fields that should be dark are somehow lighter with this bright blue Phoenix color then the white ones, so some bits associated with those chessboard fields should be inverted in raw bit-streams. I believe if we invert some bits from the "THEfm_aurISKEYFILE" bit-stream, in this way I've described, we will get coherent message from this bit-stream, and then we should apply this same transformation to colors bit-streams to get the private key.
jr. member
Activity: 51
Merit: 1
I only recently found this puzzle and thought I might spend a little time thinking about it. I went through every page of this (painful) thread to see if my own thoughts on the puzzle had been stated by anyone else, and it seems I might have some original ideas. As much as I would like to have the "Eureka!" moment and sweep the private key for myself, I thought it would be better to share.

My thoughts/findings are not listed in any particular order of priority:

  • I do not see a rabbit. There may be hidden imagery, but I do not believe that the rabbit so many people are talking about is of any substance.
  • I have read a lot of people looking at the "flame" border as a potential binary message. Rather than the height or width of each flame, it makes more sense to me that the color would indicate each bit. What sticks out to me the most is the red-bordered flames. Each of these red bordered flames is filled with either green or purple(blue/violet depending on the color depth of your screen). My thought was that maybe it could be that green=1 and purple=0 or vice-versa.
  • Following my original thought that the red flames are the message, I have also considered that the inner and outer rows of flames in the border might each represent 0 an 1, respectively (or vice-versa). I have also seen a reference to http://yewknee.com/blog/peter-saville-colour-code/ which seemed like it might be something worth exploring.
  • The glyphs in each of the corners look like Ulam spirals to me. Ulam spirals are used to represent prime numbers. If these are Ulam spirals, then they would each have a value of 17. This caught my attention as it matches the 17 leaves in the painting.
  • Whether or not the glyphs are Ulam spirals, I agree that they might also indicate a direction to read the information in the image. Not just the border, however. I think they might indicate how to read the symbols/objects in the middle of the painting as well. One way that I approached this was to examine the chess board in 5x5 "quadrants"
     at each corner, then trace the path of the glyphs through squares contained within each quadrant. If these are all drawn on the board at the same time there is overlap, but I am not sure if that matters. Hell, I am not sure of anything. Example here: https://imgur.com/a/v1EoS
  • I looked at the *.tif in a hex editor and I found the string "bitcoin mystery 076".
  • I have seen a number of posts where people "zoom and enhance" sections to find characters or hidden imagery. It is obvious that this was done with paint, perhaps acrylic. There may have been other mediums incorporated as well, or other tools besides paint brushes. There are portions that do look like she used the back of her brush handle or another hard instrument. In my experience with paint, especially when applied as liberal this appears to have been, intentionally adding in the tiny details would be more obvious. I think a lot of the details and hidden images people are seeing can be chalked up to artifacts created by brush strokes and color blending/bleeding.
  • Do we know how large the painting is in physical dimensions? Knowing the physical dimensions might give us a better idea of the level of detail to look for. The *.tif is 24"x18".
  • Maybe this whole thing is much more simple than we expect. I am entertaining the possibility that each of the objects might represent a character or series of characters. For example, the black knight/horse could be BK, bk, Bk, bK, k, K, or any of those with "h" instead of "k". Following that logic, maybe the number of flames of certain color might be something worth examining (example, if there are 16 red flames with purple fill, it might be 16rp or something like that).
  • Maybe rather than looking for a private key in its entirety, we should be looking for the variables required to calculate the private private key (base point, prime modulo,
     etc.). I am not as well-versed in the math as I would like to be, so perhaps someone who is could chime in.

Anyway, I just wanted to list out my own thoughts and see if this might light a fuse of inspiration for anyone.

I have not seen anyone mention Ulam spirals, and I do find that to be an interesting idea. Up until you said that I had been thinking that they were probably greek keys.

Colors representing bits has been suggested by a few people, and I do think there is probably some data in the colors. I had actually posted some code a while back that interpreted the colors of flames as 0s or 1s (User specifies how they should be interpreted) and then can convert the bits to ascii, do a bacon cypher, or dna stop codons.

Here is a fully dynamic version (Feed it as many lines as you want) of that code for anyone who wants it.

debacon.c
Code:
#include "cyphers.h"

int main(int argc, char* argv[]){
FILE* scram;
int opt;
int fcheck = 0;
int nflag = 0;
int btype = 0;
int bitflip = 0;
char** line = malloc(sizeof(char *) * 16);
int i = 0;
int j = 0;
int k = 0;
size_t len = 0;
ssize_t* nread = malloc(sizeof(ssize_t) * 16);
int ntot = 0;
char* buffer;
char* temp;
int runBacon = 0;
int runHex = 0;
int runDNA = 0;
int runRNA = 0;
int verbose = 0;

while((opt = getopt(argc, argv, "hvf:a:n:i:HBDR")) != -1){
switch(opt){
case 'h':
printf("\nUSAGE: ./decode -f path_to_input_file type_of_decode options\n");
printf("OPTIONS: -f [FILENAME] to specify input file\n");
printf("OPTIONS: -v for verbose mode\n");
printf("OPTIONS: -a [a or b] to specify which type of bacon alphebet (Bacon Cypher Only)\n");
printf("OPTIONS: -n [0 or 1 or 2 or 3] to specify how the bitstring should be read\n");
printf("OPTIONS: -i [t or f] to specify how 0's and 1's are read from the bitstring\n");
printf("OPTIONS: -B for Bacon Cypher\n");
printf("OPTIONS: -H for HEX conversion\n");
printf("OPTIONS: -D for DNA RNA Stop Codon Cypher Version 1 (Provide Bases or Flame Colors)\n");
printf("OPTIONS: -R for DNA RNA Stop Codon Cypher Version 2 (Flame Pairs Only)\n");
printf("OPTIONS: -h displays this menu\n");
printf("\nEXAMPLE: ./decode -f file -B -a b -n 2 -i f -v\n");
exit(EXIT_SUCCESS);
case 'f':
scram = fopen(optarg, "r");
fcheck = 1;
break;
case 'v':
printf("\nTurning on Verbose Mode...\n");
verbose = 1;
break;
case 'a':
if(optarg[0] == 'a' || optarg[0] == 'A'){
btype = 0;
} else if(optarg[0] == 'b' || optarg[0] == 'B'){
btype = 1;
} else{
printf("\nERROR: Invalid argument for for -a option, must be a or b\n");
exit(EXIT_FAILURE);
}
break;
case 'n':
if(atoi(optarg) < 4){
nflag = atoi(optarg);
} else{
printf("\nERROR: Invalid argument for -n option, must be 0, 1, 2, or 3\n");
}
break;
case 'i':
if(optarg[0] == 't' || optarg[0] == 'T'){
bitflip = 1;
}
break;
case 'B':
if(runHex == 1){
printf("\nERROR: Cannot run Bacon Cypher and Hex conversion together\n");
exit(EXIT_FAILURE);
} else if(runDNA == 1 || runRNA == 1){
printf("\nERROR: Cannot run Bacon Cypher and DNA RNA conversion together\n");
exit(EXIT_FAILURE);
} else{
runBacon = 1;
}
break;
case 'H':
if(runBacon == 1){
printf("\nERROR: Cannot run Bacon Cypher and Hex conversion together\n");
exit(EXIT_FAILURE);
} else if(runDNA== 1 || runRNA == 1){
printf("\nERROR: Cannot run DNA RNA Cypher and Hex conversion together\n");
exit(EXIT_FAILURE);
} else{
runHex = 1;
}
break;
case 'D':
if(runHex == 1){
printf("\nERROR: Cannot run Hex conversion and DNA RNA Cypher together\n");
exit(EXIT_FAILURE);
} else if(runBacon == 1){
printf("\nERROR: Cannot run Bacon Cypher and DNA RNA Cypher together\n");
exit(EXIT_FAILURE);
} else if(runRNA == 1){
printf("\nERROR: Cannot run both versions of DNA RNA Cypher together\n");
exit(EXIT_FAILURE);
} else{
runDNA = 1;
}
break;
case 'R':
if(runHex == 1){
printf("\nERROR: Cannot run Hex conversion and DNA RNA Cypher together\n");
exit(EXIT_FAILURE);
} else if(runBacon == 1){
printf("\nERROR: Cannot run Bacon Cypher and DNA RNA Cypher together\n");
exit(EXIT_FAILURE);
} else if(runDNA == 1){
printf("\nERROR: Cannot run both versions of DNA RNA Cypher together\n");
exit(EXIT_FAILURE);
} else{
runRNA = 1;
}
break;
default:
printf("ERROR: Unrecognized option, try -h\n");
exit(EXIT_FAILURE);
}
}

if(fcheck == 0){
printf("ERROR: Must specify input file, try -h\n");
exit(EXIT_FAILURE);
} else if(argc <= 3){
printf("ERROR: Must specify -H, -B, -D or -R.., try -h for help\n");
}

i = getlines(scram, &line, &ntot, len);

if(verbose == 1){
for(j = 0; j < i; j++){
printf("line %i is: %s\n", j, line[j]);
}
printf("Total Characters Read: %i\n\n", ntot);
j = 0;
}

buffer = malloc(sizeof(char) * ntot * 5);
temp = malloc(sizeof(char) * ntot * 5);

if(runDNA == 1){
for(j = 0; j < i; j++){
line[j] = normalize(line[j], 8);
}
j = 1;
strcpy(buffer, line[0]);
for(j = 1; j < i; j++){
strcat(buffer, line[j]);
}

if(verbose == 1){
printf("\nCombined String: %s\n", buffer);
}

for(k = 0; k <= strlen(buffer); k++){
divideString(buffer, 3);
if(verbose == 1){
printf("\nString split into 3's for decoding:\n");
printf("%s\n", buffer);
printf("\nDNA RNA Cypher Decode\n");
}
deRNA(buffer);
shift(buffer, verbose);
}
for(j = 0; j <= i; j++){
free(line[j]);
}
free(line);
free(buffer);
free(temp);
free(nread);
fclose(scram);
return 0;
} else if(runRNA == 1){
for(j = 0; j < i; j++){
line[j] = normalize(line[j], 8);
}
j = 1;
strcpy(buffer, line[0]);
for(j = 1; j < i; j++){
strcat(buffer, line[j]);
}
for(j = 0; j <= i; j++){
free(line[j]);
}
free(line);
free(buffer);
free(temp);
free(nread);
fclose(scram);
return 0;
}

for(j = 0; j < i; j++){
         if(verbose == 1){
                 printf("Normalizeing line %i\n", j);
                }
                if(bitflip == 1){
                 flip(line[j]);
                }
                line[j] = normalize(line[j], nflag);
                if(verbose == 1){
                 printf("Line %i is now: %s\n", j, line[j]);
                }
}

        j = 1;
        strcpy(buffer, line[0]);
        for(j = 1; j < i; j++){
         strcat(buffer, line[j]);
        }

        if(verbose == 1){
         printf("\nCombined String: %s\n", buffer);
        }


if(runBacon == 1){
for(k = 0; k <= strlen(buffer); k++){
divideString(buffer, 5);
if(verbose == 1){
printf("\nString split into 5's for decoding:\n");
printf("%s\n", buffer);

printf("\nDebaconing:\n");
}
debacon(buffer, btype);

shift(buffer, verbose);
}
}

if(runHex == 1){
for(k = 0; k <= strlen(buffer); k++){
if(strlen(buffer)%4 != 0){
switch(strlen(buffer)%4){
case 1:
temp[0] = '0';
temp[1] = '0';
temp[2] = '0';
temp[3] = '\0';
strcat(temp, buffer);
break;
case 2:
temp[0] = '0';
temp[1] = '0';
temp[2] = '\0';
strcat(temp, buffer);
break;
case 3:
temp[0] = '0';
temp[1] = '\0';
strcat(temp, buffer);
break;
default:
printf("Something bad happened...\n");
break;
}
} else{
strcpy(temp, buffer);
}
divideString(temp, 4);
if(verbose == 1){
printf("\nString split into 4's\n");
printf("%s\n", temp);
printf("\nConverting to Hex:\n");
}
deHex(temp);
clean(temp, verbose);
shift(buffer, verbose);

}
}
j = 0;
for(j = 0; j <= i; j++){
free(line[j]);
}
free(line);
free(nread);
fclose(scram);
free(buffer);
free(temp);
return 0;
}
cyphers.c
Code:
#include
#include
#include
#include

void flip(char *string){
        char *i;
        for(i=string; *i; i++){
                if(*i == '1'){
                        *i = '0';
                } else if(*i == '0'){
                        *i = '1';
                }
        }
}

void deHex(char *string){
        char buffer[5];
        int i = 0;

        while(string[i] != '\0'){
                buffer[0] = string[i];
                i++;
                buffer[1] = string[i];
                i++;
                buffer[2] = string[i];
                i++;
                buffer[3] = string[i];
                buffer[4] = '\0';
                i+=2;

                if(strcmp(buffer, "0000") == 0){
                        printf("0");
                } else if(strcmp(buffer, "0001") == 0){
                        printf("1");
                } else if(strcmp(buffer, "0010") == 0){
                        printf("2");
                } else if(strcmp(buffer, "0011") == 0){
                        printf("3");
                } else if(strcmp(buffer, "0100") == 0){
                        printf("4");
                } else if(strcmp(buffer, "0101") == 0){
                        printf("5");
                } else if(strcmp(buffer, "0110") == 0){
                        printf("6");
                } else if(strcmp(buffer, "0111") == 0){
                        printf("7");
                } else if(strcmp(buffer, "1000") == 0){
                        printf("8");
                } else if(strcmp(buffer, "1001") == 0){
                        printf("9");
                } else if(strcmp(buffer, "1010") == 0){
                        printf("A");
                } else if(strcmp(buffer, "1011") == 0){
                        printf("B");
                } else if(strcmp(buffer, "1100") == 0){
                        printf("C");
                } else if(strcmp(buffer, "1101") == 0){
                        ;printf("D");
                } else if(strcmp(buffer, "1110") == 0){
                        printf("E");
                } else if(strcmp(buffer, "1111") == 0){
                        printf("F");
                } else{
                        printf(" ");
                }
        }
        printf("\n");
}

void divideString(char *string, int n){
        int size = strlen(string);
        int i = 1;
        int j = 1;
        char* buffer = malloc(sizeof(char* ) * strlen(string) * 2);

        strcpy(buffer,string);
        string[0] = buffer[0];

        for(i = 1; j < size; i++){
                if(j%n == 0){
                        string[i] = ' ';
                        i++;
                }
                        string[i] = buffer[j];
                        j++;
        }
        string[i] = '\0';
        free(buffer);
}

int getlines(FILE* stream, char*** line, int* ntot, size_t len){
        int i = 0;
int max = 16;
ssize_t nread;

while((nread = getline(&(*line)[i], &len, stream)) != -1){
if(i == (max-1)){
max = max*2;
*line = realloc(*line, sizeof(char*) * max);
if(*line == NULL){
printf("ERROR: Memmory Allocation Failed\n");
exit(EXIT_FAILURE);
}
}
*ntot += (nread - 1);
i++;
}
 
        return i;
}

void shift(char* string, int verbose){
        char *nospace = string;
        char *temp = string;
char* buffer = malloc(sizeof(char* ) * strlen(string) * 2);

        char t;
        int i = 0;
        int size;

        if(verbose == 1){
                printf("\nRemoving Spaces\n");
        }
        while(*temp != 0){
                *nospace = *temp++;
                if(*nospace != ' '){
                        nospace++;
                }
        }
        *nospace = 0;
        if(verbose == 1){
                printf("\n%s\n", string);
                printf("\nShifting String\n");
        }
        strcpy(buffer, string);
        if(verbose == 1){
                printf("Buffer: \n%s\n\n", buffer);
        }
        t = string[0];
        size = strlen(string);
        for(i = 0; i < (size-1); i++){
                string[i] = buffer[i+1];
        }
        string[i] = t;
        string[i+1] = '\0';
        if(verbose == 1){
                printf("%s\n", string);
        }
free(buffer);
}

void clean(char* string, int verbose){
        char *nospace = string;
        char *temp = string;

        if(verbose == 1){
                printf("\nRemoving Spaces\n");
        }
        while(*temp != 0){
                *nospace = *temp++;
                if(*nospace != ' '){
                        nospace++;
                }
        }
        *nospace = 0;
}

char* normalize(char* string, int nflag){
        char *i;
        switch(nflag){
                case 0:
                        for(i=string; *i; i++){  
                                if(*i == 'y' || *i == 'Y'){
                                        *i = '1';
                                } else if(*i == 'o' || *i == 'O'){
                                        *i = '0';
                                } else if(*i == 'g' || *i == 'G'){
                                        *i = '1';
                                } else if(*i == 'p' || *i == 'P' || *i == 'b' || *i == 'B'){
                                        *i = '0';
                                } else if(*i == '\n'){
                                        *i = '\0';
                                }
                        }
                        return string;
                case 1:
                        for(i=string; *i; i++){  
                                if(*i == 'y' || *i == 'Y'){
                                        *i = '0';
                                } else if(*i == 'o' || *i == 'O'){
                                        *i == '1';
                                } else if(*i == 'g' || *i == 'G'){
                                        *i = '1';
                                } else if(*i == 'p' || *i == 'P' || *i == 'b' || *i == 'B'){
                                        *i = '0';
                                } else if(*i == '\n'){
                                        *i == '\0';
                                }
                        }
                        return string;
                case 2:
                        for(i=string; *i; i++){  
                                if(*i == 'y' || *i == 'Y'){
                                        *i = '1';
                                } else if(*i == 'o' || *i == 'O'){
                                        *i = '0';
                                } else if(*i == 'g' || *i == 'G'){
                                        *i == '0';
                                } else if(*i == 'p' || *i == 'P' || *i == 'b' || *i == 'B'){
                                        *i == '1';
                                } else if(*i == '\n'){
                                        *i = '\0';
                                }
                        }
                        return string;
                case 3:  
                        for(i=string; *i; i++){
                                if(*i == 'y' || *i == 'Y'){
                                        *i = '0';
                                } else if(*i == 'o' || *i == 'O'){
                                        *i = '1';
                                } else if(*i == 'g' || *i == 'G'){
                                        *i = '0';
                                } else if(*i == 'p' || *i == 'P' || *i == 'b' || *i == 'B'){
                                        *i = '1';
                                } else if(*i == '\n'){
                                        *i = '\0';
                                }
                        }
                        return string;
                case 8:  
                        for(i=string; *i; i++){
                                if(*i == '\n'){
                                        *i = '\0';
                                }
                        }
                        return string;
                default:
                        printf("\nERROR: Could not normalize stirng\n");
                        return string;
        }
}

void deRNA(char *string){
char buffer[4];
int i = 0;

while(string[i] != '\0'){
buffer[0] = string[i];
i++;
buffer[1] = string[i];
i++;
buffer[2] = string[i];
buffer[3] = '\0';
i+=2;

if(strcmp(buffer, "yyy") == 0 || strcmp(buffer, "YYY") == 0 || strcmp(buffer, "ttt") == 0 || strcmp(buffer, "TTT") == 0 || strcmp(buffer, "uuu") == 0 || strcmp(buffer, "UUU") == 0){
printf("F");
} if(strcmp(buffer, "yyp") == 0 || strcmp(buffer, "YYP") == 0 || strcmp(buffer, "yyb") == 0 || strcmp(buffer, "YYB") == 0 || strcmp(buffer, "ttc") == 0 || strcmp(buffer, "TTC") == 0 || strcmp(buffer, "uuc") == 0 || strcmp(buffer, "UUC") == 0){
printf("F");
} if(strcmp(buffer, "yyo") == 0 || strcmp(buffer, "YYO") == 0 || strcmp(buffer, "yyr") == 0 || strcmp(buffer, "YYR") == 0 || strcmp(buffer, "tta") == 0 || strcmp(buffer, "TTA") == 0 || strcmp(buffer, "uua") == 0 || strcmp(buffer, "UUA") == 0){
printf("L");
} if(strcmp(buffer, "yyg") == 0 || strcmp(buffer, "YYG") == 0 || strcmp(buffer, "ttg") == 0 || strcmp(buffer, "TTG") == 0 || strcmp(buffer, "uug") == 0 || strcmp(buffer, "UUG") == 0){
printf("L");
} if(strcmp(buffer, "pyy") == 0 || strcmp(buffer, "PYY") == 0 || strcmp(buffer, "byy") == 0 || strcmp(buffer, "BYY") == 0 || strcmp(buffer, "ctt") == 0 || strcmp(buffer, "CTT") == 0 || strcmp(buffer, "cuu") == 0 || strcmp(buffer, "CUU") == 0){
printf("L");
} if(strcmp(buffer, "pyp") == 0 || strcmp(buffer, "PYP") == 0 || strcmp(buffer, "byb") == 0 || strcmp(buffer, "BYB") == 0 || strcmp(buffer, "ctc") == 0 || strcmp(buffer, "CTC") == 0 || strcmp(buffer, "cuc") == 0 || strcmp(buffer, "CUC") == 0){
printf("L");
} if(strcmp(buffer, "pyo") == 0 || strcmp(buffer, "PYO") == 0 || strcmp(buffer, "byo") == 0 || strcmp(buffer, "BYO") == 0 || strcmp(buffer, "pyr") == 0 || strcmp(buffer, "PYR") == 0 || strcmp(buffer, "byr") == 0 || strcmp(buffer, "BYR") == 0 || strcmp(buffer, "cta") == 0 || strcmp(buffer, "CTA") == 0 || strcmp(buffer, "cua") == 0 || strcmp(buffer, "CUA") == 0){
printf("L");
} if(strcmp(buffer, "pyg") == 0 || strcmp(buffer, "PYG") == 0 || strcmp(buffer, "byg") == 0 || strcmp(buffer, "bYG") == 0 || strcmp(buffer, "cug") == 0 || strcmp(buffer, "CUG") == 0 || strcmp(buffer, "ctg") == 0 || strcmp(buffer, "CTG") == 0){
printf("L");
} if(strcmp(buffer, "oyy") == 0 || strcmp(buffer, "OYY") == 0 || strcmp(buffer, "ryy") == 0 || strcmp(buffer, "RYY") == 0 || strcmp(buffer, "auu") == 0 || strcmp(buffer, "AUU") == 0 || strcmp(buffer, "att") == 0 || strcmp(buffer, "ATT") == 0){
printf("I");
} if(strcmp(buffer, "oyp") == 0 || strcmp(buffer, "OYP") == 0 || strcmp(buffer, "oyb") == 0 || strcmp(buffer, "OYB") == 0 || strcmp(buffer, "ryp") == 0 || strcmp(buffer, "RYP") == 0 || strcmp(buffer, "ryb") == 0 || strcmp(buffer, "RYB") == 0 || strcmp(buffer, "atc") == 0 || strcmp(buffer, "ATC") == 0 || strcmp(buffer, "auc") == 0 || strcmp(buffer, "AUC") == 0){
printf("I");
} if(strcmp(buffer, "oyo") == 0 || strcmp(buffer, "OYO") == 0 || strcmp(buffer, "ryr") == 0 || strcmp(buffer, "RYR") == 0 || strcmp(buffer, "aua") == 0 || strcmp(buffer, "AUA") == 0 || strcmp(buffer, "ata") == 0 || strcmp(buffer, "ATA") == 0){
printf("I");
} if(strcmp(buffer, "oyg") == 0 || strcmp(buffer, "OYG") == 0 || strcmp(buffer, "ryg") == 0 || strcmp(buffer, "RYG") == 0 || strcmp(buffer, "aug") == 0 || strcmp(buffer, "AUG") == 0 || strcmp(buffer, "atg") == 0 || strcmp(buffer, "ATG") == 0){
printf(" - M - ");
} if(strcmp(buffer, "gyy") == 0 || strcmp(buffer, "GYY") == 0 || strcmp(buffer, "guu") == 0 || strcmp(buffer, "GUU") == 0 || strcmp(buffer, "gtt") == 0 || strcmp(buffer, "GTT") == 0){
printf("V");
} if(strcmp(buffer, "gyp") == 0 || strcmp(buffer, "GYP") == 0 || strcmp(buffer, "gyb") == 0 || strcmp(buffer, "GYB") == 0 || strcmp(buffer, "guc") == 0 || strcmp(buffer, "GUC") == 0 || strcmp(buffer, "gtc") == 0 || strcmp(buffer, "GTC") == 0){
printf("V");
} if(strcmp(buffer, "gyo") == 0 || strcmp(buffer, "GYO") == 0 || strcmp(buffer, "gyr") == 0 || strcmp(buffer, "GYR") == 0 || strcmp(buffer, "gua") == 0 || strcmp(buffer, "GUA") == 0 || strcmp(buffer, "gta") == 0 || strcmp(buffer, "GTA") == 0){
printf("V");
} if(strcmp(buffer, "gyg") == 0 || strcmp(buffer, "GYG") == 0 || strcmp(buffer, "gug") == 0 || strcmp(buffer, "GUG") == 0 || strcmp(buffer, "gtg") == 0 || strcmp(buffer, "GTG") == 0){
printf("V");
} if(strcmp(buffer, "ypy") == 0 || strcmp(buffer, "YPY") == 0 || strcmp(buffer, "yby") == 0 || strcmp(buffer, "YBY") == 0 || strcmp(buffer, "ucu") == 0 || strcmp(buffer, "UCU") == 0 || strcmp(buffer, "tct") == 0 || strcmp(buffer, "TCT") == 0){
printf("S");
} if(strcmp(buffer, "ypp") == 0 || strcmp(buffer, "YPP") == 0 || strcmp(buffer, "ybb") == 0 || strcmp(buffer, "YBB") == 0 || strcmp(buffer, "ucc") == 0 || strcmp(buffer, "UCC") == 0 || strcmp(buffer, "tcc") == 0 || strcmp(buffer, "TCC") == 0){
printf("S");
} if(strcmp(buffer, "ypo") == 0 || strcmp(buffer, "YPO") == 0 || strcmp(buffer, "ybo") == 0 || strcmp(buffer, "YBO") == 0 || strcmp(buffer, "ypr") == 0 || strcmp(buffer, "YPR") == 0 || strcmp(buffer, "ybr") == 0 || strcmp(buffer, "YBR") == 0 || strcmp(buffer, "uca") == 0 || strcmp(buffer, "UCA") == 0 || strcmp(buffer, "tca") == 0 || strcmp(buffer, "TCA") == 0){
printf("S");
} if(strcmp(buffer, "ypg") == 0 || strcmp(buffer, "YPG") == 0 || strcmp(buffer, "ybg") == 0 || strcmp(buffer, "YBG") == 0 || strcmp(buffer, "ucg") == 0 || strcmp(buffer, "UCG") == 0 || strcmp(buffer, "tcg") == 0 || strcmp(buffer, "TCG") == 0){
printf("S");
} if(strcmp(buffer, "ppy") == 0 || strcmp(buffer, "PPY") == 0 || strcmp(buffer, "bby") == 0 || strcmp(buffer, "BBY") == 0 || strcmp(buffer, "ccu") == 0 || strcmp(buffer, "CCU") == 0 || strcmp(buffer, "cct") == 0 || strcmp(buffer, "CCT") == 0){
printf("P");
} if(strcmp(buffer, "ppp") == 0 || strcmp(buffer, "PPP") == 0 || strcmp(buffer, "bbb") == 0 || strcmp(buffer, "BBB") == 0 || strcmp(buffer, "ccc") == 0 || strcmp(buffer, "CCC") == 0){
printf("P");
} if(strcmp(buffer, "ppo") == 0 || strcmp(buffer, "PPO") == 0 || strcmp(buffer, "bbo") == 0 || strcmp(buffer, "BBO") == 0 || strcmp(buffer, "ppr") == 0 || strcmp(buffer, "PPR") == 0 || strcmp(buffer, "bbr") == 0 || strcmp(buffer, "BBR") == 0 || strcmp(buffer, "cca") == 0 || strcmp(buffer, "CCA") == 0){
printf("P");
} if(strcmp(buffer, "ppg") == 0 || strcmp(buffer, "PPG") == 0 || strcmp(buffer, "bbg") == 0 || strcmp(buffer, "BBG") == 0 || strcmp(buffer, "ccg") == 0 || strcmp(buffer, "CCG") == 0){
printf("P");
} if(strcmp(buffer, "opy") == 0 || strcmp(buffer, "OPY") == 0 || strcmp(buffer, "oby") == 0 || strcmp(buffer, "OBY") == 0 || strcmp(buffer, "rpy") == 0 || strcmp(buffer, "RPY") == 0 || strcmp(buffer, "rby") == 0 || strcmp(buffer, "RBY") == 0 || strcmp(buffer, "acu") == 0 || strcmp(buffer, "ACU") == 0 || strcmp(buffer, "act") == 0 || strcmp(buffer, "ACT") == 0){
printf("T");
} if(strcmp(buffer, "opp") == 0 || strcmp(buffer, "OPP") == 0 || strcmp(buffer, "obb") == 0 || strcmp(buffer, "OBB") == 0 || strcmp(buffer, "rpp") == 0 || strcmp(buffer, "RPP") == 0 || strcmp(buffer, "rbb") == 0 || strcmp(buffer, "RBB") == 0 || strcmp(buffer, "acc") == 0 || strcmp(buffer, "ACC") == 0){
printf("T");
} if(strcmp(buffer, "opo") == 0 || strcmp(buffer, "OPO") == 0 || strcmp(buffer, "obo") == 0 || strcmp(buffer, "OBO") == 0 || strcmp(buffer, "rpr") == 0 || strcmp(buffer, "RPR") == 0 || strcmp(buffer, "rbr") == 0 || strcmp(buffer, "RBR") == 0 || strcmp(buffer, "aca") == 0 || strcmp(buffer, "ACA") == 0){
printf("T");
} if(strcmp(buffer, "opg") == 0 || strcmp(buffer, "OPG") == 0 || strcmp(buffer, "obg") == 0 || strcmp(buffer, "OBG") == 0 || strcmp(buffer, "rpg") == 0 || strcmp(buffer, "RPG") == 0 || strcmp(buffer, "rbg") == 0 || strcmp(buffer, "RBG") == 0 || strcmp(buffer, "acg") == 0 || strcmp(buffer, "ACG") == 0){
printf("T");
} if(strcmp(buffer, "gpy") == 0 || strcmp(buffer, "GPY") == 0 || strcmp(buffer, "gby") == 0 || strcmp(buffer, "GBY") == 0 || strcmp(buffer, "gcu") == 0 || strcmp(buffer, "GCU") == 0 || strcmp(buffer, "gct") == 0 || strcmp(buffer, "GCT") == 0){
printf("A");
} if(strcmp(buffer, "gpp") == 0 || strcmp(buffer, "GPP") == 0 || strcmp(buffer, "gbb") == 0 || strcmp(buffer, "GBB") == 0 || strcmp(buffer, "gcc") == 0 || strcmp(buffer, "GCC") == 0){
printf("A");
} if(strcmp(buffer, "gpo") == 0 || strcmp(buffer, "GPO") == 0 || strcmp(buffer, "gbo") == 0 || strcmp(buffer, "GBO") == 0 || strcmp(buffer, "gpr") == 0 || strcmp(buffer, "GPR") == 0 || strcmp(buffer, "gbr") == 0 || strcmp(buffer, "GBR") == 0 || strcmp(buffer, "gca") == 0 || strcmp(buffer, "GCA") == 0){
printf("A");
} if(strcmp(buffer, "gpg") == 0 || strcmp(buffer, "GPG") == 0 || strcmp(buffer, "gbg") == 0 || strcmp(buffer, "GBG") == 0 || strcmp(buffer, "gcg") == 0 || strcmp(buffer, "GCG") == 0){
printf("A");
} if(strcmp(buffer, "yoy") == 0 || strcmp(buffer, "YOY") == 0 || strcmp(buffer, "yry") == 0 || strcmp(buffer, "YRY") == 0 || strcmp(buffer, "uau") == 0 || strcmp(buffer, "UAU") == 0 || strcmp(buffer, "tat") == 0 || strcmp(buffer, "TAT") == 0){
printf("Y");
} if(strcmp(buffer, "yop") == 0 || strcmp(buffer, "YOP") == 0 || strcmp(buffer, "yob") == 0 || strcmp(buffer, "YOB") == 0 || strcmp(buffer, "yrp") == 0 || strcmp(buffer, "YRP") == 0 || strcmp(buffer, "yrb") == 0 || strcmp(buffer, "YRB") == 0 || strcmp(buffer, "uac") == 0 || strcmp(buffer, "UAC") == 0 || strcmp(buffer, "tac") == 0 || strcmp(buffer, "TAC") == 0){
printf("Y");
} if(strcmp(buffer, "yoo") == 0 || strcmp(buffer, "YOO") == 0 || strcmp(buffer, "yrr") == 0 || strcmp(buffer, "YRR") == 0 || strcmp(buffer, "uaa") == 0 || strcmp(buffer, "UAA") == 0 || strcmp(buffer, "taa") == 0 || strcmp(buffer, "TAA") == 0){
printf(" STOP ");
} if(strcmp(buffer, "yog") == 0 || strcmp(buffer, "YOG") == 0 || strcmp(buffer, "yrg") == 0 || strcmp(buffer, "YRG") == 0 || strcmp(buffer, "uag") == 0 || strcmp(buffer, "UAG") == 0 || strcmp(buffer, "tag") == 0 || strcmp(buffer, "TAG") == 0){
printf(" STOP ");
} if(strcmp(buffer, "poy") == 0 || strcmp(buffer, "POY") == 0 || strcmp(buffer, "boy") == 0 || strcmp(buffer, "BOY") == 0 || strcmp(buffer, "pry") == 0 || strcmp(buffer, "PRY") == 0 || strcmp(buffer, "bry") == 0 || strcmp(buffer, "BRY") == 0 || strcmp(buffer, "cau") == 0 || strcmp(buffer, "CAU") == 0 || strcmp(buffer, "cat") == 0 || strcmp(buffer, "CAT") == 0){
printf("H");
} if(strcmp(buffer, "pop") == 0 || strcmp(buffer, "POP") == 0 || strcmp(buffer, "bob") == 0 || strcmp(buffer, "BOB") == 0 || strcmp(buffer, "prp") == 0 || strcmp(buffer, "PRP") == 0 || strcmp(buffer, "brb") == 0 || strcmp(buffer, "BRB") == 0 || strcmp(buffer, "cac") == 0 || strcmp(buffer, "CAC") == 0){
printf("H");
} if(strcmp(buffer, "poo") == 0 || strcmp(buffer, "POO") == 0 || strcmp(buffer, "boo") == 0 || strcmp(buffer, "BOO") == 0 || strcmp(buffer, "prr") == 0 || strcmp(buffer, "PRR") == 0 || strcmp(buffer, "brr") == 0 || strcmp(buffer, "BRR") == 0 || strcmp(buffer, "caa") == 0 || strcmp(buffer, "CAA") == 0){
printf("Q");
} if(strcmp(buffer, "pog") == 0 || strcmp(buffer, "POG") == 0 || strcmp(buffer, "bog") == 0 || strcmp(buffer, "BOG") == 0 || strcmp(buffer, "prg") == 0 || strcmp(buffer, "PRG") == 0 || strcmp(buffer, "brg") == 0 || strcmp(buffer, "BRG") == 0 || strcmp(buffer, "cag") == 0 || strcmp(buffer, "CAG") == 0){
printf("Q");
} if(strcmp(buffer, "ooy") == 0 || strcmp(buffer, "OOY") == 0 || strcmp(buffer, "rry") == 0 || strcmp(buffer, "RRY") == 0 || strcmp(buffer, "aau") == 0 || strcmp(buffer, "AAU") == 0 || strcmp(buffer, "aat") == 0 || strcmp(buffer, "AAT") == 0){
printf("N");
} if(strcmp(buffer, "oop") == 0 || strcmp(buffer, "OOP") == 0 || strcmp(buffer, "oob") == 0 || strcmp(buffer, "OOB") == 0 || strcmp(buffer, "rrp") == 0 || strcmp(buffer, "RRP") == 0 || strcmp(buffer, "rrb") == 0 || strcmp(buffer, "RRB") == 0 || strcmp(buffer, "aac") == 0 || strcmp(buffer, "AAC") == 0){
printf("N");
} if(strcmp(buffer, "ooo") == 0 || strcmp(buffer, "OOO") == 0 || strcmp(buffer, "rrr") == 0 || strcmp(buffer, "RRR") == 0 || strcmp(buffer, "aaa") == 0 || strcmp(buffer, "AAA") == 0){
printf("K");
} if(strcmp(buffer, "oog") == 0 || strcmp(buffer, "OOG") == 0 || strcmp(buffer, "rrg") == 0 || strcmp(buffer, "RRG") == 0 || strcmp(buffer, "aag") == 0 || strcmp(buffer, "AAG") == 0){
printf("K");
} if(strcmp(buffer, "goy") == 0 || strcmp(buffer, "GOY") == 0 || strcmp(buffer, "gry") == 0 || strcmp(buffer, "GRY") == 0 || strcmp(buffer, "gau") == 0 || strcmp(buffer, "GAU") == 0 || strcmp(buffer, "gat") == 0 || strcmp(buffer, "GAT") == 0){
printf("D");
} if(strcmp(buffer, "gop") == 0 || strcmp(buffer, "GOP") == 0 || strcmp(buffer, "gob") == 0 || strcmp(buffer, "GOB") == 0 || strcmp(buffer, "grp") == 0 || strcmp(buffer, "GRP") == 0 || strcmp(buffer, "grb") == 0 || strcmp(buffer, "GRB") == 0 || strcmp(buffer, "gac") == 0 || strcmp(buffer, "GAC") == 0){
printf("D");
} if(strcmp(buffer, "goo") == 0 || strcmp(buffer, "GOO") == 0 || strcmp(buffer, "grr") == 0 || strcmp(buffer, "GRR") == 0 || strcmp(buffer, "gaa") == 0 || strcmp(buffer, "GAA") == 0){
printf("E");
} if(strcmp(buffer, "gog") == 0 || strcmp(buffer, "GOG") == 0 || strcmp(buffer, "grg") == 0 || strcmp(buffer, "GRG") == 0 || strcmp(buffer, "gag") == 0 || strcmp(buffer, "GAG") == 0){
printf("E");
} if(strcmp(buffer, "ygy") == 0 || strcmp(buffer, "YGY") == 0 || strcmp(buffer, "ugu") == 0 || strcmp(buffer, "UGU") == 0 || strcmp(buffer, "tgt") == 0 || strcmp(buffer, "TGT") == 0){
printf("C");
} if(strcmp(buffer, "ygp") == 0 || strcmp(buffer, "YGP") == 0 || strcmp(buffer, "ygb") == 0 || strcmp(buffer, "YGB") == 0 || strcmp(buffer, "ugc") == 0 || strcmp(buffer, "UGC") == 0 || strcmp(buffer, "tgc") == 0 || strcmp(buffer, "TGC") == 0){
printf("C");
} if(strcmp(buffer, "ygo") == 0 || strcmp(buffer, "YGO") == 0 || strcmp(buffer, "ygr") == 0 || strcmp(buffer, "YGR") == 0 || strcmp(buffer, "uga") == 0 || strcmp(buffer, "UGA") == 0 || strcmp(buffer, "tga") == 0 || strcmp(buffer, "TGA") == 0){
printf(" STOP ");
} if(strcmp(buffer, "ygg") == 0 || strcmp(buffer, "YGG") == 0 || strcmp(buffer, "ugg") == 0 || strcmp(buffer, "UGG") == 0 || strcmp(buffer, "tgg") == 0 || strcmp(buffer, "TGG") == 0){
printf("W");
} if(strcmp(buffer, "pgy") == 0 || strcmp(buffer, "PGY") == 0 || strcmp(buffer, "bgy") == 0 || strcmp(buffer, "BGY") == 0 || strcmp(buffer, "cgu") == 0 || strcmp(buffer, "CGU") == 0 || strcmp(buffer, "cgt") == 0 || strcmp(buffer, "CGT") == 0){
printf("R");
} if(strcmp(buffer, "pgp") == 0 || strcmp(buffer, "PGP") == 0 || strcmp(buffer, "bgb") == 0 || strcmp(buffer, "BGB") == 0 || strcmp(buffer, "cgc") == 0 || strcmp(buffer, "CGC") == 0){
printf("R");
} if(strcmp(buffer, "pgo") == 0 || strcmp(buffer, "PGO") == 0 || strcmp(buffer, "bgo") == 0 || strcmp(buffer, "BGO") == 0 || strcmp(buffer, "pgr") == 0 || strcmp(buffer, "PGR") == 0 || strcmp(buffer, "bgr") == 0 || strcmp(buffer, "BGR") == 0 || strcmp(buffer, "cga") == 0 || strcmp(buffer, "CGA") == 0){
printf("R");
} if(strcmp(buffer, "pgg") == 0 || strcmp(buffer, "PGG") == 0 || strcmp(buffer, "bgg") == 0 || strcmp(buffer, "BGG") == 0 || strcmp(buffer, "cgg") == 0 || strcmp(buffer, "CGG") == 0){
printf("R");
} if(strcmp(buffer, "ogy") == 0 || strcmp(buffer, "OGY") == 0 || strcmp(buffer, "rgy") == 0 || strcmp(buffer, "RGY") == 0 || strcmp(buffer, "agu") == 0 || strcmp(buffer, "AGU") == 0 || strcmp(buffer, "agt") == 0 || strcmp(buffer, "AGT") == 0){
printf("S");
} if(strcmp(buffer, "ogp") == 0 || strcmp(buffer, "OGP") == 0 || strcmp(buffer, "ogb") == 0 || strcmp(buffer, "OGB") == 0 || strcmp(buffer, "rgp") == 0 || strcmp(buffer, "RGP") == 0 || strcmp(buffer, "rgb") == 0 || strcmp(buffer, "RGB") == 0 || strcmp(buffer, "agc") == 0 || strcmp(buffer, "AGC") == 0){
printf("S");
} if(strcmp(buffer, "ogo") == 0 || strcmp(buffer, "OGO") == 0 || strcmp(buffer, "rgr") == 0 || strcmp(buffer, "RGR") == 0 || strcmp(buffer, "aga") == 0 || strcmp(buffer, "AGA") == 0){
printf("R");
} if(strcmp(buffer, "ogg") == 0 || strcmp(buffer, "OGG") == 0 || strcmp(buffer, "rgg") == 0 || strcmp(buffer, "RGG") == 0 || strcmp(buffer, "agg") == 0 || strcmp(buffer, "AGG") == 0){
printf("R");
} if(strcmp(buffer, "ggy") == 0 || strcmp(buffer, "GGY") == 0 || strcmp(buffer, "ggu") == 0 || strcmp(buffer, "GGU") == 0 || strcmp(buffer, "ggt") == 0 || strcmp(buffer, "GGT") == 0){
printf("G");
} if(strcmp(buffer, "ggp") == 0 || strcmp(buffer, "GGP") == 0 || strcmp(buffer, "ggb") == 0 || strcmp(buffer, "GGB") == 0 || strcmp(buffer, "ggc") == 0 || strcmp(buffer, "GGC") == 0){
printf("G");
} if(strcmp(buffer, "ggo") == 0 || strcmp(buffer, "GGO") == 0 || strcmp(buffer, "ggr") == 0 || strcmp(buffer, "GGR") == 0 || strcmp(buffer, "gga") == 0 || strcmp(buffer, "GGA") == 0){
printf("G");
} if(strcmp(buffer, "ggg") == 0 || strcmp(buffer, "GGG") == 0){
printf("G");
} else{
printf(" ");
}
}
printf("\n");
}


void debacon(char *string, int btype){
char buffer[6];
int i = 0;

while(string[i] != '\0'){

buffer[0] = string[i];
i++;
buffer[1] = string[i];
i++;
buffer[2] = string[i];
i++;
buffer[3] = string[i];
i++;
buffer[4] = string[i];
buffer[5] = '\0';
i+=2;

if(btype == 0){
if(strcmp(buffer, "00000") == 0){
printf("A");
} else if(strcmp(buffer, "00001") == 0){
printf("B");
} else if(strcmp(buffer, "00010") == 0){
printf("C");
} else if(strcmp(buffer, "00011") == 0){
printf("D");
} else if(strcmp(buffer, "00100") == 0){
printf("E");
} else if(strcmp(buffer, "00101") == 0){
printf("F");
} else if(strcmp(buffer, "00110") == 0){
printf("G");
} else if(strcmp(buffer, "00111") == 0){
printf("H");
} else if(strcmp(buffer, "01000") == 0){
printf("J");
} else if(strcmp(buffer, "01001") == 0){
printf("K");
} else if(strcmp(buffer, "01010") == 0){
printf("L");
} else if(strcmp(buffer, "01011") == 0){
printf("M");
} else if(strcmp(buffer, "01100") == 0){
printf("N");
} else if(strcmp(buffer, "01101") == 0){
printf("O");
} else if(strcmp(buffer, "01110") == 0){
printf("P");
} else if(strcmp(buffer, "01111") == 0){
printf("Q");
} else if(strcmp(buffer, "10000") == 0){
printf("R");
} else if(strcmp(buffer, "10001") == 0){
printf("S");
} else if(strcmp(buffer, "10010") == 0){
printf("T");
} else if(strcmp(buffer, "10011") == 0){
printf("V");
} else if(strcmp(buffer, "10100") == 0){
printf("W");
} else if(strcmp(buffer, "10101") == 0){
printf("X");
} else if(strcmp(buffer, "10110") == 0){
printf("Y");
} else if(strcmp(buffer, "10111") == 0){
printf("Z");
} else{
printf(" ");
}
}
if(btype == 1){
if(strcmp(buffer, "00000") == 0){
printf("A");
} else if(strcmp(buffer, "00001") == 0){
printf("B");
} else if(strcmp(buffer, "00010") == 0){
printf("C");
} else if(strcmp(buffer, "00011") == 0){
printf("D");
} else if(strcmp(buffer, "00100") == 0){
printf("E");
} else if(strcmp(buffer, "00101") == 0){
printf("F");
} else if(strcmp(buffer, "00110") == 0){
printf("G");
} else if(strcmp(buffer, "00111") == 0){
printf("H");
} else if(strcmp(buffer, "01000") == 0){
printf("I");
} else if(strcmp(buffer, "01001") == 0){
printf("J");
} else if(strcmp(buffer, "01010") == 0){
printf("K");
} else if(strcmp(buffer, "01011") == 0){
printf("L");
} else if(strcmp(buffer, "01100") == 0){
printf("M");
} else if(strcmp(buffer, "01101") == 0){
printf("N");
} else if(strcmp(buffer, "01110") == 0){
printf("O");
} else if(strcmp(buffer, "01111") == 0){
printf("P");
} else if(strcmp(buffer, "10000") == 0){
printf("Q");
} else if(strcmp(buffer, "10001") == 0){
printf("R");
} else if(strcmp(buffer, "10010") == 0){
printf("S");
} else if(strcmp(buffer, "10011") == 0){
printf("T");
} else if(strcmp(buffer, "10100") == 0){
printf("U");
} else if(strcmp(buffer, "10101") == 0){
printf("V");
} else if(strcmp(buffer, "10110") == 0){
printf("W");
} else if(strcmp(buffer, "10111") == 0){
printf("X");
} else if(strcmp(buffer, "11000") == 0){
printf("Y");
} else if(strcmp(buffer, "11001") == 0){
printf("Z");
} else{
printf(" ");
}
}
}
printf("\n");
}
cyphers.h
Code:
#include
#include
#include
#include

void shift(char* string, int verbose);
int getlines(FILE* stream, char*** line, int* ntot, size_t len);
char* normalize(char* string, int nflag);
void clean(char* string, int verbose);
void divideString(char* string, int n);
void debacon(char* string, int btype);
void flip(char* string);
void deHex(char* string);
void deRNA(char* string);


@Itod, so in your opinion the "The_____iskeyfile" message is the intended message?
legendary
Activity: 1974
Merit: 1077
^ Will code for Bitcoins
... I thought it would be better to share.

Great stuff.

Quote
Do we know how large the painting is in physical dimensions? Knowing the physical dimensions might give us a better idea of the level of detail to look for. The *.tif is 24"x18".

This is the original:



The size of the prints people are making that may (or may not) correspond to the original:



It's hard to guess. You may ask the author on twitter, maybe she responds?

Quote
... Rather than the height or width of each flame, it makes more sense to me that the color would indicate each bit. What sticks out to me the most is the red-bordered flames. Each of these red bordered flames is filled with either green or purple(blue/violet depending on the color depth of your screen). My thought was that maybe it could be that green=1 and purple=0 or vice-versa.

May easily be true, specially that flame size bit-stream has been already decoded to text message.
newbie
Activity: 14
Merit: 0
I only recently found this puzzle and thought I might spend a little time thinking about it. I went through every page of this (painful) thread to see if my own thoughts on the puzzle had been stated by anyone else, and it seems I might have some original ideas. As much as I would like to have the "Eureka!" moment and sweep the private key for myself, I thought it would be better to share.

My thoughts/findings are not listed in any particular order of priority:

  • I do not see a rabbit. There may be hidden imagery, but I do not believe that the rabbit so many people are talking about is of any substance.
  • I have read a lot of people looking at the "flame" border as a potential binary message. Rather than the height or width of each flame, it makes more sense to me that the color would indicate each bit. What sticks out to me the most is the red-bordered flames. Each of these red bordered flames is filled with either green or purple(blue/violet depending on the color depth of your screen). My thought was that maybe it could be that green=1 and purple=0 or vice-versa.
  • Following my original thought that the red flames are the message, I have also considered that the inner and outer rows of flames in the border might each represent 0 an 1, respectively (or vice-versa). I have also seen a reference to http://yewknee.com/blog/peter-saville-colour-code/ which seemed like it might be something worth exploring.
  • The glyphs in each of the corners look like Ulam spirals to me. Ulam spirals are used to represent prime numbers. If these are Ulam spirals, then they would each have a value of 17. This caught my attention as it matches the 17 leaves in the painting.
  • Whether or not the glyphs are Ulam spirals, I agree that they might also indicate a direction to read the information in the image. Not just the border, however. I think they might indicate how to read the symbols/objects in the middle of the painting as well. One way that I approached this was to examine the chess board in 5x5 "quadrants"
     at each corner, then trace the path of the glyphs through squares contained within each quadrant. If these are all drawn on the board at the same time there is overlap, but I am not sure if that matters. Hell, I am not sure of anything. Example here: https://imgur.com/a/v1EoS
  • I looked at the *.tif in a hex editor and I found the string "bitcoin mystery 076".
  • I have seen a number of posts where people "zoom and enhance" sections to find characters or hidden imagery. It is obvious that this was done with paint, perhaps acrylic. There may have been other mediums incorporated as well, or other tools besides paint brushes. There are portions that do look like she used the back of her brush handle or another hard instrument. In my experience with paint, especially when applied as liberal this appears to have been, intentionally adding in the tiny details would be more obvious. I think a lot of the details and hidden images people are seeing can be chalked up to artifacts created by brush strokes and color blending/bleeding.
  • Do we know how large the painting is in physical dimensions? Knowing the physical dimensions might give us a better idea of the level of detail to look for. The *.tif is 24"x18".
  • Maybe this whole thing is much more simple than we expect. I am entertaining the possibility that each of the objects might represent a character or series of characters. For example, the black knight/horse could be BK, bk, Bk, bK, k, K, or any of those with "h" instead of "k". Following that logic, maybe the number of flames of certain color might be something worth examining (example, if there are 16 red flames with purple fill, it might be 16rp or something like that).
  • Maybe rather than looking for a private key in its entirety, we should be looking for the variables required to calculate the private private key (base point, prime modulo,
     etc.). I am not as well-versed in the math as I would like to be, so perhaps someone who is could chime in.

Anyway, I just wanted to list out my own thoughts and see if this might light a fuse of inspiration for anyone.
hero member
Activity: 694
Merit: 500
@feedo I am sorry but I am not following this path nor buying the new hint. As it was said on this thread earlier you could see a face in anything if you stare at it long enough, and those shapes don't look like letters to me, neither. Even if there is a face in that key hole. So what? What is your next step?

i can easily see a face in the key hole and it could be alice following the rabbit hole (the face is white same colour as the queen) which maybe refers to the first step or first chapter in the story.
and it could be a reflection of the knight as i can see a Y letter inside the hole ( same as the Y vine)

the rabbit is right this image is like a mirror, look here for example:
https://imgur.com/a/tSGPo

and even the phoenix (blue,white,red colours) looks like a reflection to the fold (same colours)
and if you look inside this black tile you can see another reflection (see inside the red circle):
https://imgur.com/a/Q1dR2

in the end its a puzzle and it may consists of 100 small pieces of information and we have to collect them, if you think that this puzzle is only one big step or that the key is simply hidden in the flames then i can't help you.

what to do next? i have no idea, like that pdf file i am still thinking what to do with it!
but you have to think out of the box and see what the others can't see to solve it.
there is no logic in this puzzle, you must have a crazy imagination.
1+1=2 thats what you've learned in the school, but in this puzzle it could be 45362661019279$ytar
forget about the logic!

BTW some bug ladies have amazing big complicated eyes and great vision, try to use them Wink
https://imgur.com/a/vRvmx
Pages:
Jump to: