[BACK]Return to monitor_wrap.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Diff for /src/usr.bin/ssh/monitor_wrap.c between version 1.77 and 1.78

version 1.77, 2013/11/06 16:52:11 version 1.78, 2014/01/29 06:18:35
Line 62 
Line 62 
 #include "atomicio.h"  #include "atomicio.h"
 #include "monitor_fdpass.h"  #include "monitor_fdpass.h"
 #include "misc.h"  #include "misc.h"
 #include "schnorr.h"  
 #include "jpake.h"  
 #include "uuencode.h"  #include "uuencode.h"
   
 #include "channels.h"  #include "channels.h"
Line 1057 
Line 1055 
 }  }
 #endif /* GSSAPI */  #endif /* GSSAPI */
   
 #ifdef JPAKE  
 void  
 mm_auth2_jpake_get_pwdata(Authctxt *authctxt, BIGNUM **s,  
     char **hash_scheme, char **salt)  
 {  
         Buffer m;  
   
         debug3("%s entering", __func__);  
   
         buffer_init(&m);  
         mm_request_send(pmonitor->m_recvfd,  
             MONITOR_REQ_JPAKE_GET_PWDATA, &m);  
   
         debug3("%s: waiting for MONITOR_ANS_JPAKE_GET_PWDATA", __func__);  
         mm_request_receive_expect(pmonitor->m_recvfd,  
             MONITOR_ANS_JPAKE_GET_PWDATA, &m);  
   
         *hash_scheme = buffer_get_string(&m, NULL);  
         *salt = buffer_get_string(&m, NULL);  
   
         buffer_free(&m);  
 }  
   
 void  
 mm_jpake_step1(struct modp_group *grp,  
     u_char **id, u_int *id_len,  
     BIGNUM **priv1, BIGNUM **priv2, BIGNUM **g_priv1, BIGNUM **g_priv2,  
     u_char **priv1_proof, u_int *priv1_proof_len,  
     u_char **priv2_proof, u_int *priv2_proof_len)  
 {  
         Buffer m;  
   
         debug3("%s entering", __func__);  
   
         buffer_init(&m);  
         mm_request_send(pmonitor->m_recvfd,  
             MONITOR_REQ_JPAKE_STEP1, &m);  
   
         debug3("%s: waiting for MONITOR_ANS_JPAKE_STEP1", __func__);  
         mm_request_receive_expect(pmonitor->m_recvfd,  
             MONITOR_ANS_JPAKE_STEP1, &m);  
   
         if ((*priv1 = BN_new()) == NULL ||  
             (*priv2 = BN_new()) == NULL ||  
             (*g_priv1 = BN_new()) == NULL ||  
             (*g_priv2 = BN_new()) == NULL)  
                 fatal("%s: BN_new", __func__);  
   
         *id = buffer_get_string(&m, id_len);  
         /* priv1 and priv2 are, well, private */  
         buffer_get_bignum2(&m, *g_priv1);  
         buffer_get_bignum2(&m, *g_priv2);  
         *priv1_proof = buffer_get_string(&m, priv1_proof_len);  
         *priv2_proof = buffer_get_string(&m, priv2_proof_len);  
   
         buffer_free(&m);  
 }  
   
 void  
 mm_jpake_step2(struct modp_group *grp, BIGNUM *s,  
     BIGNUM *mypub1, BIGNUM *theirpub1, BIGNUM *theirpub2, BIGNUM *mypriv2,  
     const u_char *theirid, u_int theirid_len,  
     const u_char *myid, u_int myid_len,  
     const u_char *theirpub1_proof, u_int theirpub1_proof_len,  
     const u_char *theirpub2_proof, u_int theirpub2_proof_len,  
     BIGNUM **newpub,  
     u_char **newpub_exponent_proof, u_int *newpub_exponent_proof_len)  
 {  
         Buffer m;  
   
         debug3("%s entering", __func__);  
   
         buffer_init(&m);  
         /* monitor already has all bignums except theirpub1, theirpub2 */  
         buffer_put_bignum2(&m, theirpub1);  
         buffer_put_bignum2(&m, theirpub2);  
         /* monitor already knows our id */  
         buffer_put_string(&m, theirid, theirid_len);  
         buffer_put_string(&m, theirpub1_proof, theirpub1_proof_len);  
         buffer_put_string(&m, theirpub2_proof, theirpub2_proof_len);  
   
         mm_request_send(pmonitor->m_recvfd,  
             MONITOR_REQ_JPAKE_STEP2, &m);  
   
         debug3("%s: waiting for MONITOR_ANS_JPAKE_STEP2", __func__);  
         mm_request_receive_expect(pmonitor->m_recvfd,  
             MONITOR_ANS_JPAKE_STEP2, &m);  
   
         if ((*newpub = BN_new()) == NULL)  
                 fatal("%s: BN_new", __func__);  
   
         buffer_get_bignum2(&m, *newpub);  
         *newpub_exponent_proof = buffer_get_string(&m,  
             newpub_exponent_proof_len);  
   
         buffer_free(&m);  
 }  
   
 void  
 mm_jpake_key_confirm(struct modp_group *grp, BIGNUM *s, BIGNUM *step2_val,  
     BIGNUM *mypriv2, BIGNUM *mypub1, BIGNUM *mypub2,  
     BIGNUM *theirpub1, BIGNUM *theirpub2,  
     const u_char *my_id, u_int my_id_len,  
     const u_char *their_id, u_int their_id_len,  
     const u_char *sess_id, u_int sess_id_len,  
     const u_char *theirpriv2_s_proof, u_int theirpriv2_s_proof_len,  
     BIGNUM **k,  
     u_char **confirm_hash, u_int *confirm_hash_len)  
 {  
         Buffer m;  
   
         debug3("%s entering", __func__);  
   
         buffer_init(&m);  
         /* monitor already has all bignums except step2_val */  
         buffer_put_bignum2(&m, step2_val);  
         /* monitor already knows all the ids */  
         buffer_put_string(&m, theirpriv2_s_proof, theirpriv2_s_proof_len);  
   
         mm_request_send(pmonitor->m_recvfd,  
             MONITOR_REQ_JPAKE_KEY_CONFIRM, &m);  
   
         debug3("%s: waiting for MONITOR_ANS_JPAKE_KEY_CONFIRM", __func__);  
         mm_request_receive_expect(pmonitor->m_recvfd,  
             MONITOR_ANS_JPAKE_KEY_CONFIRM, &m);  
   
         /* 'k' is sensitive and stays in the monitor */  
         *confirm_hash = buffer_get_string(&m, confirm_hash_len);  
   
         buffer_free(&m);  
 }  
   
 int  
 mm_jpake_check_confirm(const BIGNUM *k,  
     const u_char *peer_id, u_int peer_id_len,  
     const u_char *sess_id, u_int sess_id_len,  
     const u_char *peer_confirm_hash, u_int peer_confirm_hash_len)  
 {  
         Buffer m;  
         int success = 0;  
   
         debug3("%s entering", __func__);  
   
         buffer_init(&m);  
         /* k is dummy in slave, ignored */  
         /* monitor knows all the ids */  
         buffer_put_string(&m, peer_confirm_hash, peer_confirm_hash_len);  
         mm_request_send(pmonitor->m_recvfd,  
             MONITOR_REQ_JPAKE_CHECK_CONFIRM, &m);  
   
         debug3("%s: waiting for MONITOR_ANS_JPAKE_CHECK_CONFIRM", __func__);  
         mm_request_receive_expect(pmonitor->m_recvfd,  
             MONITOR_ANS_JPAKE_CHECK_CONFIRM, &m);  
   
         success = buffer_get_int(&m);  
         buffer_free(&m);  
   
         debug3("%s: success = %d", __func__, success);  
         return success;  
 }  
 #endif /* JPAKE */  

Legend:
Removed from v.1.77  
changed lines
  Added in v.1.78