+ case KENC_STRING: {
+ char *p;
+ size_t sz = strlen(k->u.p);
+
+ DENSURE(d, (sz + 7) & ~3);
+ p = d->buf + d->len;
+ STORE16(p, k->e);
+ STORE16(p + 2, sz);
+ memcpy(p + 4, k->u.p, sz);
+ d->len += sz + 4;
+ rc = 1;
+ } break;
+
+ case KENC_EC: {
+ char *p;
+ size_t xsz, ysz;
+ size_t sz;
+
+ if (EC_ATINF(&k->u.e))
+ sz = 0;
+ else {
+ xsz = mp_octets(k->u.e.x);
+ ysz = mp_octets(k->u.e.y);
+ sz = xsz + ysz + 4;
+ }
+ DENSURE(d, (sz + 7) & ~3);
+ p = d->buf + d->len;
+ STORE16(p, k->e);
+ STORE16(p + 2, sz);
+ if (!EC_ATINF(&k->u.e)) {
+ STORE16(p + 4, xsz);
+ mp_storeb(k->u.e.x, p + 6, xsz);
+ STORE16(p + 6 + xsz, ysz);
+ mp_storeb(k->u.e.y, p + 8 + xsz, ysz);
+ }
+ d->len += sz + 4;
+ rc = 1;
+ } break;
+