summaryrefslogtreecommitdiff
path: root/appl/cmd/ssh/cipherrc4.b
diff options
context:
space:
mode:
authorCharles.Forsyth <devnull@localhost>2009-03-30 08:58:09 +0000
committerCharles.Forsyth <devnull@localhost>2009-03-30 08:58:09 +0000
commit9e85ae9b75acdbe245243784d8d5b1b4de1b24f9 (patch)
tree5dfaf8c8881bbf352dab7338cc9fba000c24eb03 /appl/cmd/ssh/cipherrc4.b
parent77bf0d6355c02a5d5199dd37033066727cad375b (diff)
x20090330-0957
Diffstat (limited to 'appl/cmd/ssh/cipherrc4.b')
-rw-r--r--appl/cmd/ssh/cipherrc4.b41
1 files changed, 41 insertions, 0 deletions
diff --git a/appl/cmd/ssh/cipherrc4.b b/appl/cmd/ssh/cipherrc4.b
new file mode 100644
index 00000000..fc6378ef
--- /dev/null
+++ b/appl/cmd/ssh/cipherrc4.b
@@ -0,0 +1,41 @@
+implement Cipher;
+
+include "sys.m";
+
+include "keyring.m";
+ kr: Keyring;
+ RC4state: import kr;
+
+include "sshio.m";
+
+Cipherstate: adt
+{
+ enc: ref RC4state;
+ dec: ref RC4state;
+};
+
+cs: ref Cipherstate;
+
+id(): int
+{
+ return SSH_CIPHER_RC4;
+}
+
+init(key: array of byte, isserver: int)
+{
+ kr = load Keyring Keyring->PATH;
+ if(isserver)
+ cs = ref Cipherstate(kr->rc4setup(key[0:16]), kr->rc4setup(key[16:32]));
+ else
+ cs = ref Cipherstate(kr->rc4setup(key[16:32]), kr->rc4setup(key[0:16]));
+}
+
+encrypt(buf: array of byte, nbuf: int)
+{
+ kr->rc4(cs.enc, buf, nbuf);
+}
+
+decrypt(buf: array of byte, nbuf: int)
+{
+ kr->rc4(cs.dec, buf, nbuf);
+}