From 9e6910dc0c747c8f30b87f6482f4eadb48ad6654 Mon Sep 17 00:00:00 2001 From: forsyth Date: Mon, 17 Jan 2011 10:45:22 +0000 Subject: emu/Nt/ipif.c --- appl/cmd/ssh/cipher3des.b | 51 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 appl/cmd/ssh/cipher3des.b (limited to 'appl/cmd/ssh/cipher3des.b') diff --git a/appl/cmd/ssh/cipher3des.b b/appl/cmd/ssh/cipher3des.b new file mode 100644 index 00000000..e6f347f1 --- /dev/null +++ b/appl/cmd/ssh/cipher3des.b @@ -0,0 +1,51 @@ +implement Cipher; + +include "sys.m"; + +include "ipints.m"; + ipints: IPints; + IPint: import ipints; + +include "crypt.m"; + crypt: Crypt; + DESstate: import crypt; + +include "sshio.m"; + +Cipherstate: adt +{ + enc: array of ref DESstate; + dec: array of ref DESstate; +}; + +cs: ref Cipherstate; + +id(): int +{ + return SSH_CIPHER_3DES; +} + +init(key: array of byte, nil: int) +{ + ipints = load IPints IPints->PATH; + crypt = load Crypt Crypt->PATH; + cs = ref Cipherstate(array[3] of ref DESstate, array[3] of ref DESstate); + for(i := 0; i < 3; i++){ + cs.enc[i] = crypt->dessetup(key[i*8:], nil); + cs.dec[i] = crypt->dessetup(key[i*8:], nil); + } +} + +encrypt(buf: array of byte, nbuf: int) +{ + crypt->descbc(cs.enc[0], buf, nbuf, Crypt->Encrypt); + crypt->descbc(cs.enc[1], buf, nbuf, Crypt->Decrypt); + crypt->descbc(cs.enc[2], buf, nbuf, Crypt->Encrypt); +} + +decrypt(buf: array of byte, nbuf: int) +{ + crypt->descbc(cs.dec[2], buf, nbuf, Crypt->Decrypt); + crypt->descbc(cs.dec[1], buf, nbuf, Crypt->Encrypt); + crypt->descbc(cs.dec[0], buf, nbuf, Crypt->Decrypt); +} -- cgit v1.2.3