1 2 29 30 package com.jcraft.jsch; 31 32 public class Packet{ 33 34 private static Random random=null; 35 static void setRandom(Random foo){ random=foo;} 36 37 Buffer buffer; 38 byte[] ba4=new byte[4]; 39 public Packet(Buffer buffer){ 40 this.buffer=buffer; 41 } 42 public void reset(){ 43 buffer.index=5; 44 } 45 void padding(int bsize){ 46 int len=buffer.index; 47 int pad=(-len)&(bsize-1); 48 if(pad<bsize){ 49 pad+=bsize; 50 } 51 len=len+pad-4; 52 ba4[0]=(byte)(len>>>24); 53 ba4[1]=(byte)(len>>>16); 54 ba4[2]=(byte)(len>>>8); 55 ba4[3]=(byte)(len); 56 System.arraycopy(ba4, 0, buffer.buffer, 0, 4); 57 buffer.buffer[4]=(byte)pad; 58 synchronized(random){ 59 random.fill(buffer.buffer, buffer.index, pad); 60 } 61 buffer.skip(pad); 62 69 } 70 71 int shift(int len, int mac){ 72 int s=len+5+9; 73 int pad=(-s)&15; 74 if(pad<16)pad+=16; 75 s+=pad; 76 s+=mac; 77 78 79 if(buffer.buffer.length<s+buffer.index-5-9-len){ 80 byte[] foo=new byte[s+buffer.index-5-9-len]; 81 System.arraycopy(buffer.buffer, 0, foo, 0, buffer.buffer.length); 82 buffer.buffer=foo; 83 } 84 85 86 89 92 System.arraycopy(buffer.buffer, 93 len+5+9, 94 buffer.buffer, s, buffer.index-5-9-len); 95 96 buffer.index=10; 97 buffer.putInt(len); 98 buffer.index=len+5+9; 99 return s; 100 } 101 void unshift(byte command, int recipient, int s, int len){ 102 System.arraycopy(buffer.buffer, 103 s, 104 buffer.buffer, 5+9, len); 105 buffer.buffer[5]=command; 106 buffer.index=6; 107 buffer.putInt(recipient); 108 buffer.putInt(len); 109 buffer.index=len+5+9; 110 } 111 } 112 | Popular Tags |