diff --git a/cipher.c b/cipher.c
index fd93299..a7aacf2 100644
--- a/cipher.c
+++ b/cipher.c
@@ -35,7 +35,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: cipher.c,v 1.44 2001/05/28 22:51:10 markus Exp $");
+RCSID("$OpenBSD: cipher.c,v 1.45 2001/06/23 15:12:18 itojun Exp $");
 
 #include "xmalloc.h"
 #include "log.h"
@@ -43,24 +43,23 @@
 
 #include <openssl/md5.h>
 
-
 /* no encryption */
-void
+static void
 none_setkey(CipherContext *cc, const u_char *key, u_int keylen)
 {
 }
-void
+static void
 none_setiv(CipherContext *cc, const u_char *iv, u_int ivlen)
 {
 }
-void
+static void
 none_crypt(CipherContext *cc, u_char *dest, const u_char *src, u_int len)
 {
 	memcpy(dest, src, len);
 }
 
 /* DES */
-void
+static void
 des_ssh1_setkey(CipherContext *cc, const u_char *key, u_int keylen)
 {
 	static int dowarn = 1;
@@ -71,18 +70,18 @@
 	}
 	des_set_key((void *)key, cc->u.des.key);
 }
-void
+static void
 des_ssh1_setiv(CipherContext *cc, const u_char *iv, u_int ivlen)
 {
 	memset(cc->u.des.iv, 0, sizeof(cc->u.des.iv));
 }
-void
+static void
 des_ssh1_encrypt(CipherContext *cc, u_char *dest, const u_char *src, u_int len)
 {
 	des_ncbc_encrypt(src, dest, len, cc->u.des.key, &cc->u.des.iv,
 	    DES_ENCRYPT);
 }
-void
+static void
 des_ssh1_decrypt(CipherContext *cc, u_char *dest, const u_char *src, u_int len)
 {
 	des_ncbc_encrypt(src, dest, len, cc->u.des.key, &cc->u.des.iv,
@@ -90,14 +89,14 @@
 }
 
 /* 3DES */
-void
+static void
 des3_setkey(CipherContext *cc, const u_char *key, u_int keylen)
 {
 	des_set_key((void *) key, cc->u.des3.key1);
 	des_set_key((void *) (key+8), cc->u.des3.key2);
 	des_set_key((void *) (key+16), cc->u.des3.key3);
 }
-void
+static void
 des3_setiv(CipherContext *cc, const u_char *iv, u_int ivlen)
 {
 	memset(cc->u.des3.iv1, 0, sizeof(cc->u.des3.iv1));
@@ -107,14 +106,14 @@
 		return;
 	memcpy(cc->u.des3.iv3, (char *)iv, 8);
 }
-void
+static void
 des3_cbc_encrypt(CipherContext *cc, u_char *dest, const u_char *src, u_int len)
 {
 	des_ede3_cbc_encrypt(src, dest, len,
 	    cc->u.des3.key1, cc->u.des3.key2, cc->u.des3.key3,
 	    &cc->u.des3.iv3, DES_ENCRYPT);
 }
-void
+static void
 des3_cbc_decrypt(CipherContext *cc, u_char *dest, const u_char *src, u_int len)
 {
 	des_ede3_cbc_encrypt(src, dest, len,
@@ -136,7 +135,7 @@
  * result of that there is no longer any known iv1 to use when
  * choosing the X block.
  */
-void
+static void
 des3_ssh1_setkey(CipherContext *cc, const u_char *key, u_int keylen)
 {
 	des_set_key((void *) key, cc->u.des3.key1);
@@ -146,7 +145,7 @@
 	else
 		des_set_key((void *) (key+16), cc->u.des3.key3);
 }
-void
+static void
 des3_ssh1_encrypt(CipherContext *cc, u_char *dest, const u_char *src,
     u_int len)
 {
@@ -157,7 +156,7 @@
 	des_ncbc_encrypt(dest, dest, len, cc->u.des3.key3, &cc->u.des3.iv3,
 	    DES_ENCRYPT);
 }
-void
+static void
 des3_ssh1_decrypt(CipherContext *cc, u_char *dest, const u_char *src,
     u_int len)
 {
@@ -170,12 +169,12 @@
 }
 
 /* Blowfish */
-void
+static void
 blowfish_setkey(CipherContext *cc, const u_char *key, u_int keylen)
 {
 	BF_set_key(&cc->u.bf.key, keylen, (u_char *)key);
 }
-void
+static void
 blowfish_setiv(CipherContext *cc, const u_char *iv, u_int ivlen)
 {
 	if (iv == NULL)
@@ -183,14 +182,14 @@
 	else
 		memcpy(cc->u.bf.iv, (char *)iv, 8);
 }
-void
+static void
 blowfish_cbc_encrypt(CipherContext *cc, u_char *dest, const u_char *src,
      u_int len)
 {
 	BF_cbc_encrypt((void *)src, dest, len, &cc->u.bf.key, cc->u.bf.iv,
 	    BF_ENCRYPT);
 }
-void
+static void
 blowfish_cbc_decrypt(CipherContext *cc, u_char *dest, const u_char *src,
      u_int len)
 {
@@ -221,7 +220,7 @@
 	}
 }
 
-void
+static void
 blowfish_ssh1_encrypt(CipherContext *cc, u_char *dest, const u_char *src,
     u_int len)
 {
@@ -230,7 +229,7 @@
 	    BF_ENCRYPT);
 	swap_bytes(dest, dest, len);
 }
-void
+static void
 blowfish_ssh1_decrypt(CipherContext *cc, u_char *dest, const u_char *src,
     u_int len)
 {
@@ -241,37 +240,37 @@
 }
 
 /* alleged rc4 */
-void
+static void
 arcfour_setkey(CipherContext *cc, const u_char *key, u_int keylen)
 {
 	RC4_set_key(&cc->u.rc4, keylen, (u_char *)key);
 }
-void
+static void
 arcfour_crypt(CipherContext *cc, u_char *dest, const u_char *src, u_int len)
 {
 	RC4(&cc->u.rc4, len, (u_char *)src, dest);
 }
 
 /* CAST */
-void
+static void
 cast_setkey(CipherContext *cc, const u_char *key, u_int keylen)
 {
 	CAST_set_key(&cc->u.cast.key, keylen, (u_char *) key);
 }
-void
+static void
 cast_setiv(CipherContext *cc, const u_char *iv, u_int ivlen)
 {
 	if (iv == NULL)
 		fatal("no IV for %s.", cc->cipher->name);
 	memcpy(cc->u.cast.iv, (char *)iv, 8);
 }
-void
+static void
 cast_cbc_encrypt(CipherContext *cc, u_char *dest, const u_char *src, u_int len)
 {
 	CAST_cbc_encrypt(src, dest, len, &cc->u.cast.key, cc->u.cast.iv,
 	    CAST_ENCRYPT);
 }
-void
+static void
 cast_cbc_decrypt(CipherContext *cc, u_char *dest, const u_char *src, u_int len)
 {
 	CAST_cbc_encrypt(src, dest, len, &cc->u.cast.key, cc->u.cast.iv,
@@ -281,20 +280,20 @@
 /* RIJNDAEL */
 
 #define RIJNDAEL_BLOCKSIZE 16
-void
+static void
 rijndael_setkey(CipherContext *cc, const u_char *key, u_int keylen)
 {
 	rijndael_set_key(&cc->u.rijndael.enc, (u4byte *)key, 8*keylen, 1);
 	rijndael_set_key(&cc->u.rijndael.dec, (u4byte *)key, 8*keylen, 0);
 }
-void
+static void
 rijndael_setiv(CipherContext *cc, const u_char *iv, u_int ivlen)
 {
 	if (iv == NULL)
 		fatal("no IV for %s.", cc->cipher->name);
 	memcpy((u_char *)cc->u.rijndael.iv, iv, RIJNDAEL_BLOCKSIZE);
 }
-void
+static void
 rijndael_cbc_encrypt(CipherContext *cc, u_char *dest, const u_char *src,
     u_int len)
 {
@@ -321,7 +320,7 @@
 	memcpy(iv, cprev, RIJNDAEL_BLOCKSIZE);
 }
 
-void
+static void
 rijndael_cbc_decrypt(CipherContext *cc, u_char *dest, const u_char *src,
     u_int len)
 {
