コンテキストの受け入れ後、sign_server() は、クライアントから送信されてきたメッセージを受け取ります。GSS-API にはトークン受信用の関数は用意されていないため、このプログラムは次のように recv_token() 関数を使用しています。
if (recv_token(s, &xmit_buf) < 0) return(-1);
メッセージは暗号化されている可能性があるため、プログラムは GSS-API 関数 gss_unwrap() でメッセージをラップ解除します。
maj_stat = gss_unwrap(&min_stat, context, &xmit_buf, &msg_buf, &conf_state, (gss_qop_t *) NULL); if (maj_stat != GSS_S_COMPLETE) { display_status("unwrapping message", maj_stat, min_stat); return(-1); } else if (! conf_state) { fprintf(stderr, "Warning! Message not encrypted.\n"); } (void) gss_release_buffer(&min_stat, &xmit_buf);
gss_unwrap() は、recv_token() が xmit_buf に格納したメッセージを入力として受け取り、そのメッセージを変換し、その結果を msg_buf に格納します。gss_unwrap() への 2 つの引数に注目してください。conf_state は、このメッセージに機密性 (つまり暗号化) が適用されているかどうかを示すフラグです。最後の NULL は、メッセージ保護に使用された QOP をプログラムが知る必要がないことを示します。