* (too short? error)
*
* hbytes range VALUE START SIZE => substring (or error)
+ * hbytes overwrite VAR START VALUE
+ * hbytes repeat VALUE COUNT => COUNT copies of VALUE
*
* hbytes h2ulong HEX => ulong (HEX len must be 4)
* hbytes ulong2h UL => hex
return TCL_OK;
}
+int do_hbytes_overwrite(ClientData cd, Tcl_Interp *ip,
+ HBytes_Var v, int start, HBytes_Value sub) {
+ int sub_l;
+
+ sub_l= hbytes_len(&sub);
+ if (start < 0)
+ return staticerr(ip, "hbytes overwrite start -ve");
+ if (start + sub_l > hbytes_len(v.hb))
+ return staticerr(ip, "hbytes overwrite out of range");
+ memcpy(hbytes_data(v.hb) + start, hbytes_data(&sub), sub_l);
+ return TCL_OK;
+}
+
+int do_hbytes_repeat(ClientData cd, Tcl_Interp *ip,
+ HBytes_Value sub, int count, HBytes_Value *result) {
+ int sub_l;
+ Byte *data;
+ const Byte *sub_d;
+
+ sub_l= hbytes_len(&sub);
+ if (count < 0) return staticerr(ip, "hbytes repeat count -ve");
+ if (count > INT_MAX/sub_l) return staticerr(ip, "hbytes repeat too long");
+
+ data= hbytes_arrayspace(result, sub_l*count);
+ sub_d= hbytes_data(&sub);
+ while (count) {
+ memcpy(data, sub_d, sub_l);
+ count--; data += sub_l;
+ }
+ return TCL_OK;
+}
+
int do_hbytes_zeroes(ClientData cd, Tcl_Interp *ip,
int length, HBytes_Value *result) {
Byte *space;
v hbv
length int
=> hb
+ overwrite
+ v hbv
+ start int
+ sub hb
+ zeroes
+ length int
+ => hb
+ repeat
+ v hb
+ count int
+ => hb
+ random
+ length int
+ => hb
pkcs5
meth enum(PadMethod, "hbytes pad subcommand")
v hbv
key obj
?maclen obj
=> hb
- zeroes
- length int
- => hb
- random
- length int
- => hb
Table dgram_socket DgramSocket_SubCommand
create
* (too short? error)
*
* hbytes range VALUE START SIZE => substring (or error)
+ * hbytes overwrite VAR START VALUE
+ * hbytes repeat VALUE COUNT => COUNT copies of VALUE
*
* hbytes h2ulong HEX => ulong (HEX len must be 4)
* hbytes ulong2h UL => hex
return TCL_OK;
}
+int do_hbytes_overwrite(ClientData cd, Tcl_Interp *ip,
+ HBytes_Var v, int start, HBytes_Value sub) {
+ int sub_l;
+
+ sub_l= hbytes_len(&sub);
+ if (start < 0)
+ return staticerr(ip, "hbytes overwrite start -ve");
+ if (start + sub_l > hbytes_len(v.hb))
+ return staticerr(ip, "hbytes overwrite out of range");
+ memcpy(hbytes_data(v.hb) + start, hbytes_data(&sub), sub_l);
+ return TCL_OK;
+}
+
+int do_hbytes_repeat(ClientData cd, Tcl_Interp *ip,
+ HBytes_Value sub, int count, HBytes_Value *result) {
+ int sub_l;
+ Byte *data;
+ const Byte *sub_d;
+
+ sub_l= hbytes_len(&sub);
+ if (count < 0) return staticerr(ip, "hbytes repeat count -ve");
+ if (count > INT_MAX/sub_l) return staticerr(ip, "hbytes repeat too long");
+
+ data= hbytes_arrayspace(result, sub_l*count);
+ sub_d= hbytes_data(&sub);
+ while (count) {
+ memcpy(data, sub_d, sub_l);
+ count--; data += sub_l;
+ }
+ return TCL_OK;
+}
+
int do_hbytes_zeroes(ClientData cd, Tcl_Interp *ip,
int length, HBytes_Value *result) {
Byte *space;