+int enum1_lookup_cached_func(Tcl_Interp *ip, Tcl_Obj *o,
+ const char *opts, const char *what);
+ /* -1 => error */
+
+/* from crypto.c */
+
+void memxor(Byte *dest, const Byte *src, int l);
+
+/* from hash.c */
+
+typedef struct {
+ int blocksize, hashsize;
+} HashAlgInfo;
+
+/* from blockciph.c */
+
+typedef struct {
+ void (*make_schedule)(void *schedule, const Byte *key, int keylen);
+ void (*crypt)(const void *schedule, const void *in, void *out);
+ /* in and out may be the same, but if they aren't they may not overlap */
+ /* in and out for crypt will have been through block_byteswap */
+} BlockCipherDirectionInfo;
+
+typedef struct {
+ const char *name;
+ int blocksize, schedule_size, key_min, key_max;
+ void (*byteswap)(Byte *block);
+ BlockCipherDirectionInfo encrypt, decrypt;
+} BlockCipherAlgInfo;
+
+extern const BlockCipherAlgInfo blockcipheralginfos[];
+
+/* from bcmode.c */
+
+typedef struct {
+ const char *name;
+ int iv_blocks, buf_blocks;
+ const char *(*encrypt)(Byte *data, int blocks,
+ const Byte *iv, Byte *buf,
+ const BlockCipherAlgInfo *alg, int encr,
+ int blocksize, const void *sch);
+ const char *(*decrypt)(Byte *data, int blocks,
+ const Byte *iv, Byte *buf,
+ const BlockCipherAlgInfo *alg, int encr,
+ int blocksize, const void *sch);
+ /* in each case, *iv is provided, but may be modified */
+} BlockCipherModeInfo;
+
+extern const BlockCipherModeInfo blockciphermodeinfos[];
+