--- original/Gss.c	2009-07-19 01:44:35.459985511 +0200
+++ Gss.c	2009-07-18 23:11:02.554693241 +0200
@@ -312,6 +312,67 @@
 								     						 
 	return stv;
  }
+
+ static VALUE
+ context_unwrap(VALUE self, VALUE istepv, VALUE ostepv)
+ {
+	gss_status *st = status_new();
+	gss_step *istep,*ostep;
+	gss_context *context;
+	void *tname,*cbindings,*cred;
+	gss_qop_t unused2;
+	VALUE stv = Data_Wrap_Struct(cStatus,0,free,st);
+	
+	Data_Get_Struct(self,gss_context,context);
+	Data_Get_Struct(istepv,gss_step,istep);
+	Data_Get_Struct(ostepv,gss_step,ostep);
+	
+		
+	st->major = gss_unwrap(
+			&st->minor,
+			context->ctx,
+			(const gss_buffer_t)&istep->token,
+			(const gss_buffer_t)&ostep->token,
+			&ostep->flags,
+			&unused2);
+								     						 
+	return stv;
+ }
+
+ static VALUE
+ context_wrap(VALUE self,
+		 VALUE req_flagv,
+		 VALUE qop_reqv,
+		 VALUE istepv,
+		 VALUE ostepv)
+ {
+	gss_status *st = status_new();
+	gss_step *istep,*ostep;
+	gss_context *context;
+	void *tname,*cbindings,*cred;
+	int conf_req_flag = NUM2INT(req_flagv);
+	gss_qop_t qop_req = NUM2INT(qop_reqv);
+	VALUE stv = Data_Wrap_Struct(cStatus,0,free,st);
+
+	Data_Get_Struct(self,gss_context,context);
+	Data_Get_Struct(istepv,gss_step,istep);
+	Data_Get_Struct(ostepv,gss_step,ostep);
+	
+		
+	st->major = gss_wrap(
+			&st->minor,
+			context->ctx,
+			conf_req_flag,
+			qop_req,
+			(const gss_buffer_t)&istep->token,
+			&ostep->flags,
+			(const gss_buffer_t)&ostep->token);
+			
+								     						 
+	return stv;
+ }
+ 
+
  
  static VALUE
  step_get_flags(VALUE self)
@@ -458,6 +519,8 @@
  	rb_define_const(mGss,"ANON_FLAG",INT2NUM(64));
  	rb_define_const(mGss,"PROT_READY_FLAG",INT2NUM(128));
  	rb_define_const(mGss,"TRANS_FLAG",INT2NUM(256));
+
+ 	rb_define_const(mGss,"QOP_DEFAULT",INT2NUM(0));
  	
  	rb_define_const(mGss,"BOTH",INT2NUM(0));
  	rb_define_const(mGss,"INITIATE",INT2NUM(1));
@@ -507,6 +570,8 @@
  	cContext = rb_define_class_under(mGss,"Context",rb_cObject);
  	rb_define_singleton_method(cContext,"new",context_new,0);
  	rb_define_method(cContext,"init",context_init,5);
+ 	rb_define_method(cContext,"unwrap",context_unwrap,2);
+ 	rb_define_method(cContext,"wrap",context_wrap,4);
  	
  	/* Name class */
  	cName = rb_define_class_under(mGss,"Name",rb_cObject);
@@ -532,7 +597,7 @@
     rb_define_const(cOid,"NT_HOSTBASED_SERVICE",Data_Wrap_Struct(cOid,0,0,GSS_C_NT_HOSTBASED_SERVICE));    
     rb_define_const(cOid,"NT_ANONYMOUS",Data_Wrap_Struct(cOid,0,0,GSS_C_NT_ANONYMOUS));
     rb_define_const(cOid,"NT_EXPORT_NAME",Data_Wrap_Struct(cOid,0,0,GSS_C_NT_EXPORT_NAME));  
-    rb_define_const(cOid,"KRB5_MECHANISM",Data_Wrap_Struct(cOid,0,0,GSS_KRB5_MECHANISM));
+//rb_define_const(cOid,"KRB5_MECHANISM",Data_Wrap_Struct(cOid,0,0,GSS_KRB5_MECHANISM));
     rb_define_const(cOid,"NO_OID",Data_Wrap_Struct(cOid,0,0,GSS_C_NO_OID));
     
     /* Exceptions */
