With that said, I'm not convinced that your pseudocode actually works. Specifically, the following doesn't make sense to me:
pos_a = key[0];
pos_b = key[1];
pos_c = key[2];
...
pos_a = key[pos_b] % key_size;
It would be really cool if you posted functioning encrypt() and decrypt() methods to github. Something that people can actually compile/run/analyze. In fact, if you do that get in touch with me and I'll try to crack it.