123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- use connection::Connection;
- use cryptoutil::Crypto;
- use protocol;
- use util;
- use std::iter::{FromIterator,repeat};
- use protobuf::*;
- use rand::thread_rng;
- pub struct Session {
- connection: Connection,
- crypto: Crypto,
- }
- impl Session {
- pub fn new() -> Session {
- Session {
- connection: Connection::connect(),
- crypto: Crypto::new(),
- }
- }
- pub fn login(&mut self) {
- let request = protobuf_init!(protocol::keyexchange::Request::new(), {
- data0 => {
- data0: 0x05,
- data1: 0x01,
- data2: 0x10800000000,
- },
- data1: 0,
- data2.data0 => {
- data0: self.crypto.public_key(),
- data1: 1,
- },
- random: util::rand_vec(&mut thread_rng(), 0x10),
- data4: vec![0x1e],
- data5: vec![0x08, 0x01]
- });
- let init_client_packet =
- self.connection.send_packet_prefix(&[0,4], &request.write_to_bytes().unwrap());
- let init_server_packet =
- self.connection.recv_packet();
- let response : protocol::keyexchange::Response =
- parse_from_bytes(&init_server_packet).unwrap();
- protobuf_bind!(response, { data.data0.data0.data0: remote_key });
- self.crypto.setup(&remote_key, &init_client_packet, &init_server_packet);
- return;
- let appkey = vec![];
- let request = protobuf_init!(protocol::authentication::AuthRequest::new(), {
- credentials => {
- username: "USERNAME".to_string(),
- method: protocol::authentication::AuthRequest_LoginMethod::PASSWORD,
- password: b"PASSWORD".to_vec(),
- },
- data1 => {
- data0: 0,
- data1: 0,
- partner: "Partner blabla".to_string(),
- deviceid: "abc".to_string()
- },
- version: "master-v1.8.0-gad9e5b46".to_string(),
- data3 => {
- data0: 1,
- appkey1: appkey[0x1..0x81].to_vec(),
- appkey2: appkey[0x81..0x141].to_vec(),
- data3: "".to_string(),
- data4: Vec::from_iter(repeat(0).take(20))
- }
- });
- //println!("{:?}", response);
- }
- }
|