function [ R ] = bindiv( A, G )
%funkce pro binarni deleni modulo-2, vstupni parametry jsou zprava
%a generujici polynom

L = length(G)-1; %pocet nul pridanych za delenec
M = zeros(1, length(A)+L); %delenec s delkou potrebnou pro pridani nul
M(1:length(A)) = A; %naplneni delence
B = M(1:length(G)); %pomocny vektor, do ktere bude ulozen zbytek po deleni
G0 = zeros(1, length(G)); %vektor nul 

for i = length(G):length(M) %cyklus pro "deleni"
    
    if(B(1) == 1) %podminka pro xor s gen polynomem
        
        B = xor(B,G); %xor
        if(i == length(M)) %podminka pro konec cyklu a celeho deleni
            
            R = zeros(1, length(B)-1);
            R(1:length(R)) = B(2:length(B)); %vysledny vektor se zbytkem po deleni
            break
            
        end
      for j = 1:length(B)-1 %cyklus pro vynechani jendoho bitu a "sepsani" nasledujiciho
          
          B(j) = B(j+1); %posun a vynechani jednoho bitu
          if(j == length(B)-1)    
              
              B(j+1) = M(i+1); %sepsani nasledujiciho
              
          end   
      end
        
    else
      B = xor(B,G0); %xor nulovym vektorem misto generujiciho polynomu, dale stejne jako predtim
     
        if(i == length(M))
            
            R = zeros(1, length(B)-1);
            R(1:length(R)) = B(2:length(B));
            break
            
        end
      for j = 1:length(B)-1 
          
          B(j) = B(j+1);
          if(j == length(B)-1)    
              
              B(j+1) = M(i+1);
              
          end   
      end
    
    end    
end


end

