+/* Attribute signature callback */
+
+static void
+silc_client_attributes_process_signed(SilcBool success,
+ const unsigned char *signature,
+ SilcUInt32 signature_len,
+ void *context)
+{
+ SilcAttrSign s = context;
+ SilcAttributeObjPk pk;
+
+ if (success) {
+ pk.type = NULL;
+ pk.data = (unsigned char *)signature;
+ pk.data_len = signature_len;
+ s->buffer =
+ silc_attribute_payload_encode(s->buffer,
+ SILC_ATTRIBUTE_USER_DIGITAL_SIGNATURE,
+ SILC_ATTRIBUTE_FLAG_VALID,
+ &pk, sizeof(pk));
+ }
+
+ s->sign_cb(TRUE, silc_buffer_data(s->buffer), silc_buffer_len(s->buffer),
+ s->context);
+
+ silc_buffer_free(s->buffer);
+ silc_free(s);
+}
+