/* packet. */
void __sign_packet(struct ncp_server *server, const char *packet, size_t size, __u32 totalsize, void *sign_buff) {
	unsigned char data[64];

	memcpy(data, server->sign_root, 8);
	*(__u32*)(data + 8) = totalsize;
	if (size < 52) {
		memcpy(data + 12, packet, size);
		memset(data + 12 + size, 0, 52 - size);
	} else {
		memcpy(data + 12, packet, 52);
	}
	nwsign(server->sign_last, data, server->sign_last);
	memcpy(sign_buff, server->sign_last, 8);
}
/* packet. */
void sign_packet(struct ncp_server *server, int *size) {
 char data[64];

 memset(data,0,64);
 memcpy(data,server->sign_root,8);
 PUT_LE32(data+8,(*size));
 memcpy(data+12,server->packet+sizeof(struct ncp_request_header)-1,
  min((*size)-sizeof(struct ncp_request_header)+1,52));

 nwsign(server->sign_last,data,server->sign_last);

 memcpy(server->packet+(*size),server->sign_last,8);
 (*size)+=8;
}
int sign_verify_reply(struct ncp_server *server, const char *packet, size_t size, __u32 totalsize, const void *sign_buff) {
	unsigned char data[64];
	unsigned char hash[16];

	memcpy(data, server->sign_root, 8);
	*(__u32*)(data + 8) = totalsize;
	if (size < 52) {
		memcpy(data + 12, packet, size);
		memset(data + 12 + size, 0, 52 - size);
	} else {
		memcpy(data + 12, packet, 52);
	}
	nwsign(server->sign_last, data, hash);
	return memcmp(sign_buff, hash, 8);
}