X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=chiark-tcl.git;a=blobdiff_plain;f=base%2Fchiark-tcl.h;h=f8f59fdd6ed89ab4dea8454f72e73d31a8f10c98;hp=ac19c8f9cd941f2ac1aa95fcd2a7daee442e601a;hb=eddc638bb3b8e716879edf149b2a6e37c8bc9e8d;hpb=ac8c0b3b18075ae4273779544eda01c09cfb5145 diff --git a/base/chiark-tcl.h b/base/chiark-tcl.h index ac19c8f..f8f59fd 100644 --- a/base/chiark-tcl.h +++ b/base/chiark-tcl.h @@ -15,16 +15,41 @@ * * hbytes range VALUE START SIZE => substring (or error) * hbytes overwrite VAR START VALUE - * hbytes trimleft VALUE removes any leading 0 octets + * hbytes trimleft VAR removes any leading 0 octets * hbytes repeat VALUE COUNT => COUNT copies of VALUE * - * hbytes clockincrement VAR INTEGER adds INTEGER to VAR mod 256^|VAR| - * INTEGER must be -255 .. 255 - * => carry (-255 to 255, - * and -1,0,1 if VAR not empty) + * hbytes ushort2h LONG => LONG must be <2^16, returns as hex + * hbytes h2ushort HEX => |HEX| must be 2 bytes, returns as ulong * - * hbytes h2ulong HEX => ulong (HEX len must be 4) - * hbytes ulong2h UL => hex + * hbytes compare A B + * => -2 A is lexically earlier than B and not a prefix of B (A worked? (always 1 for p) + * hbytes pad pn|un VAR BS METH [METHARGS] => worked? (always 1 for p) + * hbytes pad pa|pn VAR ALG|BS pkcs5 => 1 + * hbytes pad ua|un VAR ALG|BS pkcs5 => worked? + * hbytes pad pa|pn VAR ALG|BS rfc2406 NXTHDR => 1 + * hbytes pad ua|un VAR ALG|BS rfc2406 NXTHDRVAR => worked? + * + * hbytes blockcipher d|e VAR ALG KEY MODE [IV] => IV + * hbytes blockcipher mac MSG ALG KEY MODE IV => final block + * hbytes blockcipher prop PROPERTY ALG => property value + * + * hbytes hash ALG MESSAGE => hash + * hbytes hmac ALG MESSAGE KEY [MACLENGTH] => mac + * hbytes hash-prop PROPERTY ALG => property value + * + * ulong ul2int ULONG => INT can fail if >INT_MAX + * ulong int2ul INT => ULONG can fail if <0 + * ulong mask A B => A & B + * ulong add A B => A + B (mod 2^32) + * ulong subtract A B => A - B (mod 2^32) + * ulong compare A B => 0 -1 (AB) + * ulong shift l|r ULONG BITS fails if BITS >32 * * ulong ul2bitfields VALUE [SIZE TYPE [TYPE-ARG...] ...] => 0/1 * ulong bitfields2ul BASE [SIZE TYPE [TYPE-ARG...] ...] => ULONG @@ -37,26 +62,27 @@ * uint VARNAME/VALUE (VARNAME if ul2bitfields; * ulong VARNAME/VALUE VALUE if bitfields2ul) * - * ulong ul2int ULONG => INT can fail if >INT_MAX - * ulong int2ul INT => ULONG can fail if <0 - * - * hbytes shift l|r ULONG BITS fails if BITS >32 - * hbytes mask A B => A & B + * Error codes * - * hbytes compare A B - * => -2 A is lexically earlier than B and not a prefix of B (A worked? (always 1 for p) - * hbytes pkcs5 pn|un VAR BLOCKSIZE => worked? (always 1 for p) - * hbytes blockcipher d|e VAR ALG KEY MODE [IV] => IV - * hbytes blockcipher mac MSG ALG KEY MODE IV => final block - * - * hbytes hash ALG MESSAGE => hash - * hbytes hmac ALG MESSAGE KEY [MACLENGTH] => mac + * HBYTES BLOCKCIPHER CRYPTFAIL CRYPT block cipher mode failed somehow (!) + * HBYTES BLOCKCIPHER CRYPTFAIL MAC HMAC failed somehow (!) + * HBYTES BLOCKCIPHER LENGTH block cipher input has unsuitable length + * HBYTES BLOCKCIPHER PARAMS key or iv not suitable + * HBYTES HMAC PARAMS key, input or output size not suitable + * HBYTES LENGTH OVERRUN block too long + * HBYTES LENGTH RANGE input length or offset is -ve or silly + * HBYTES LENGTH UNDERRUN block too short (or offset too big) + * HBYTES LENGTH MISMATCH when blocks must be exactly same length + * HBYTES SYNTAX supposed hex block had wrong syntax + * HBYTES VALUE OVERFLOW value to be conv'd to hex too big/long + * SOCKADDR AFUNIX LENGTH path for AF_UNIX socket too long + * SOCKADDR SYNTAX IPV4 bad IPv4 socket address &/or port + * SOCKADDR SYNTAX OTHER bad socket addr, couldn't tell what kind + * ULONG BITCOUNT NEGATIVE -ve bitcount specified where not allowed + * ULONG BITCOUNT OVERRUN attempt to use more than 32 bits + * ULONG BITCOUNT UNDERRUN bitfields add up to less than 32 + * ULONG VALUE NEGATIVE attempt convert -ve integers to ulong + * ULONG VALUE OVERFLOW converted value does not fit in result * * Refs: HMAC: RFC2104 */ @@ -156,7 +182,7 @@ typedef struct DgramSocket *DgramSockID; /* from hook.c */ -int staticerr(Tcl_Interp *ip, const char *m); +int staticerr(Tcl_Interp *ip, const char *m, const char *ec); int posixerr(Tcl_Interp *ip, int errnoval, const char *m); void objfreeir(Tcl_Obj *o); int get_urandom(Tcl_Interp *ip, Byte *buffer, int l); @@ -175,6 +201,7 @@ void obj_updatestr_string(Tcl_Obj *o, const char *str); typedef struct { HBytes_Value *hb; Tcl_Obj *obj, *var; + int copied; } HBytes_Var; void fini_hbv(Tcl_Interp *ip, int rc, HBytes_Var *agg); @@ -216,12 +243,17 @@ void memxor(Byte *dest, const Byte *src, int l); typedef struct { const char *name; int pad, use_algname; -} PadMethod; +} PadOp; extern Tcl_ObjType blockcipherkey_type; /* from algtables.c */ +typedef struct { + const char *name; + int int_offset; +} BlockCipherPropInfo, HashAlgPropInfo; + typedef struct { const char *name; int hashsize, blocksize, statesize; @@ -243,7 +275,6 @@ typedef struct { typedef struct { const char *name; int blocksize, schedule_size, key_min, key_max; - void (*byteswap)(void *block); BlockCipherPerDirectionInfo encrypt, decrypt; } BlockCipherAlgInfo;