/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package cryptolearning;

import com.sun.rave.web.ui.appbase.AbstractPageBean;
import com.sun.webui.jsf.component.Button;
import com.sun.webui.jsf.component.ImageComponent;
import com.sun.webui.jsf.component.Label;
import com.sun.webui.jsf.component.StaticText;
import core.ExMath;
import core.ExtraException;
import javax.faces.FacesException;
import javax.faces.component.html.HtmlInputText;
import javax.swing.JOptionPane;
import logarithm.PrimeGen;

/**
 * <p>Page bean that corresponds to a similarly named JSP page.  This
 * class contains component definitions (and initialization code) for
 * all components that you have defined on this page, as well as
 * lifecycle methods and event handlers where you may add behavior
 * to respond to incoming events.</p>
 *
 * @version template.java
 * @version Created on 16.2.2009, 10:32:31
 * @author jirka
 */

public class dsa extends AbstractPageBean {
    // <editor-fold defaultstate="collapsed" desc="Managed Component Definition">

    /**
     * <p>Automatically managed component initialization.  <strong>WARNING:</strong>
     * This method is automatically generated, so any user-specified code inserted
     * here is subject to being replaced.</p>
     */
    private void _init() throws Exception {
    }
    private StaticText labKrok1 = new StaticText();

    public StaticText getLabKrok1() {
        return labKrok1;
    }

    public void setLabKrok1(StaticText st) {
        this.labKrok1 = st;
    }
    private StaticText labPopis1 = new StaticText();

    public StaticText getLabPopis1() {
        return labPopis1;
    }

    public void setLabPopis1(StaticText st) {
        this.labPopis1 = st;
    }
    private Button btnSkip1 = new Button();

    public Button getBtnSkip1() {
        return btnSkip1;
    }

    public void setBtnSkip1(Button b) {
        this.btnSkip1 = b;
    }
    private Button button1 = new Button();

    public Button getButton1() {
        return button1;
    }

    public void setButton1(Button b) {
        this.button1 = b;
    }
    private Button btnBack1 = new Button();

    public Button getBtnBack1() {
        return btnBack1;
    }

    public void setBtnBack1(Button b) {
        this.btnBack1 = b;
    }
    private Button btnFwd1 = new Button();

    public Button getBtnFwd1() {
        return btnFwd1;
    }

    public void setBtnFwd1(Button b) {
        this.btnFwd1 = b;
    }
    private StaticText labR1 = new StaticText();

    public StaticText getLabR1() {
        return labR1;
    }

    public void setLabR1(StaticText st) {
        this.labR1 = st;
    }
    private StaticText labS1 = new StaticText();

    public StaticText getLabS1() {
        return labS1;
    }

    public void setLabS1(StaticText st) {
        this.labS1 = st;
    }
    private StaticText labCheck = new StaticText();

    public StaticText getLabCheck() {
        return labCheck;
    }

    public void setLabCheck(StaticText st) {
        this.labCheck = st;
    }
    private StaticText labHash = new StaticText();

    public StaticText getLabHash() {
        return labHash;
    }

    public void setLabHash(StaticText st) {
        this.labHash = st;
    }
    private StaticText labW = new StaticText();

    public StaticText getLabW() {
        return labW;
    }

    public void setLabW(StaticText st) {
        this.labW = st;
    }
    private StaticText labU1 = new StaticText();

    public StaticText getLabU1() {
        return labU1;
    }

    public void setLabU1(StaticText st) {
        this.labU1 = st;
    }
    private StaticText labU2 = new StaticText();

    public StaticText getLabU2() {
        return labU2;
    }

    public void setLabU2(StaticText st) {
        this.labU2 = st;
    }
    private StaticText labV = new StaticText();

    public StaticText getLabV() {
        return labV;
    }

    public void setLabV(StaticText st) {
        this.labV = st;
    }
    private StaticText labB4 = new StaticText();

    public StaticText getLabB4() {
        return labB4;
    }

    public void setLabB4(StaticText st) {
        this.labB4 = st;
    }
    private StaticText labX = new StaticText();

    public StaticText getLabX() {
        return labX;
    }

    public void setLabX(StaticText st) {
        this.labX = st;
    }
    private StaticText labHM = new StaticText();

    public StaticText getLabHM() {
        return labHM;
    }

    public void setLabHM(StaticText st) {
        this.labHM = st;
    }
    private StaticText labR = new StaticText();

    public StaticText getLabR() {
        return labR;
    }

    public void setLabR(StaticText st) {
        this.labR = st;
    }
    private StaticText labS = new StaticText();

    public StaticText getLabS() {
        return labS;
    }

    public void setLabS(StaticText st) {
        this.labS = st;
    }
    private StaticText labQ = new StaticText();

    public StaticText getLabQ() {
        return labQ;
    }

    public void setLabQ(StaticText st) {
        this.labQ = st;
    }
    private StaticText labN = new StaticText();

    public StaticText getLabN() {
        return labN;
    }

    public void setLabN(StaticText st) {
        this.labN = st;
    }
    private StaticText labB = new StaticText();

    public StaticText getLabB() {
        return labB;
    }

    public void setLabB(StaticText st) {
        this.labB = st;
    }
    private StaticText labK = new StaticText();

    public StaticText getLabK() {
        return labK;
    }

    public void setLabK(StaticText st) {
        this.labK = st;
    }
    private StaticText hiddenCislo1 = new StaticText();

    public StaticText getHiddenCislo1() {
        return hiddenCislo1;
    }

    public void setHiddenCislo1(StaticText st) {
        this.hiddenCislo1 = st;
    }
    private ImageComponent imgArrowSmallLeft1 = new ImageComponent();

    public ImageComponent getImgArrowSmallLeft1() {
        return imgArrowSmallLeft1;
    }

    public void setImgArrowSmallLeft1(ImageComponent ic) {
        this.imgArrowSmallLeft1 = ic;
    }
    private StaticText staticText1 = new StaticText();

    public StaticText getStaticText1() {
        return staticText1;
    }

    public void setStaticText1(StaticText st) {
        this.staticText1 = st;
    }
    private StaticText labQ1 = new StaticText();

    public StaticText getLabQ1() {
        return labQ1;
    }

    public void setLabQ1(StaticText st) {
        this.labQ1 = st;
    }
    private StaticText labQ2 = new StaticText();

    public StaticText getLabQ2() {
        return labQ2;
    }

    public void setLabQ2(StaticText st) {
        this.labQ2 = st;
    }
    private StaticText labQ3 = new StaticText();

    public StaticText getLabQ3() {
        return labQ3;
    }

    public void setLabQ3(StaticText st) {
        this.labQ3 = st;
    }
    private StaticText labQ4 = new StaticText();

    public StaticText getLabQ4() {
        return labQ4;
    }

    public void setLabQ4(StaticText st) {
        this.labQ4 = st;
    }
    private StaticText staticText2 = new StaticText();

    public StaticText getStaticText2() {
        return staticText2;
    }

    public void setStaticText2(StaticText st) {
        this.staticText2 = st;
    }
    private Label label1 = new Label();

    public Label getLabel1() {
        return label1;
    }

    public void setLabel1(Label l) {
        this.label1 = l;
    }
    private ImageComponent imgArrowSmallLeft5 = new ImageComponent();

    public ImageComponent getImgArrowSmallLeft5() {
        return imgArrowSmallLeft5;
    }

    public void setImgArrowSmallLeft5(ImageComponent ic) {
        this.imgArrowSmallLeft5 = ic;
    }
    private Label label3 = new Label();

    public Label getLabel3() {
        return label3;
    }

    public void setLabel3(Label l) {
        this.label3 = l;
    }
    private StaticText labK1 = new StaticText();

    public StaticText getLabK1() {
        return labK1;
    }

    public void setLabK1(StaticText st) {
        this.labK1 = st;
    }
    private StaticText staticText4 = new StaticText();

    public StaticText getStaticText4() {
        return staticText4;
    }

    public void setStaticText4(StaticText st) {
        this.staticText4 = st;
    }
    private StaticText labK2 = new StaticText();

    public StaticText getLabK2() {
        return labK2;
    }

    public void setLabK2(StaticText st) {
        this.labK2 = st;
    }
    private StaticText staticText5 = new StaticText();

    public StaticText getStaticText5() {
        return staticText5;
    }

    public void setStaticText5(StaticText st) {
        this.staticText5 = st;
    }
    private StaticText labK3 = new StaticText();

    public StaticText getLabK3() {
        return labK3;
    }

    public void setLabK3(StaticText st) {
        this.labK3 = st;
    }
    private ImageComponent imgArrowSmallLeft2 = new ImageComponent();

    public ImageComponent getImgArrowSmallLeft2() {
        return imgArrowSmallLeft2;
    }

    public void setImgArrowSmallLeft2(ImageComponent ic) {
        this.imgArrowSmallLeft2 = ic;
    }
    private Label label5 = new Label();

    public Label getLabel5() {
        return label5;
    }

    public void setLabel5(Label l) {
        this.label5 = l;
    }
    private StaticText staticText21 = new StaticText();

    public StaticText getStaticText21() {
        return staticText21;
    }

    public void setStaticText21(StaticText st) {
        this.staticText21 = st;
    }
    private StaticText staticText24 = new StaticText();

    public StaticText getStaticText24() {
        return staticText24;
    }

    public void setStaticText24(StaticText st) {
        this.staticText24 = st;
    }
    private StaticText staticText23 = new StaticText();

    public StaticText getStaticText23() {
        return staticText23;
    }

    public void setStaticText23(StaticText st) {
        this.staticText23 = st;
    }
    private StaticText staticText15 = new StaticText();

    public StaticText getStaticText15() {
        return staticText15;
    }

    public void setStaticText15(StaticText st) {
        this.staticText15 = st;
    }
    private StaticText staticText22 = new StaticText();

    public StaticText getStaticText22() {
        return staticText22;
    }

    public void setStaticText22(StaticText st) {
        this.staticText22 = st;
    }
    private StaticText staticText17 = new StaticText();

    public StaticText getStaticText17() {
        return staticText17;
    }

    public void setStaticText17(StaticText st) {
        this.staticText17 = st;
    }
    private StaticText labV3 = new StaticText();

    public StaticText getLabV3() {
        return labV3;
    }

    public void setLabV3(StaticText st) {
        this.labV3 = st;
    }
    private ImageComponent imgArrowSmallLeft4 = new ImageComponent();

    public ImageComponent getImgArrowSmallLeft4() {
        return imgArrowSmallLeft4;
    }

    public void setImgArrowSmallLeft4(ImageComponent ic) {
        this.imgArrowSmallLeft4 = ic;
    }
    private Label label4 = new Label();

    public Label getLabel4() {
        return label4;
    }

    public void setLabel4(Label l) {
        this.label4 = l;
    }
    private StaticText staticText16 = new StaticText();

    public StaticText getStaticText16() {
        return staticText16;
    }

    public void setStaticText16(StaticText st) {
        this.staticText16 = st;
    }
    private StaticText staticText25 = new StaticText();

    public StaticText getStaticText25() {
        return staticText25;
    }

    public void setStaticText25(StaticText st) {
        this.staticText25 = st;
    }
    private StaticText staticText26 = new StaticText();

    public StaticText getStaticText26() {
        return staticText26;
    }

    public void setStaticText26(StaticText st) {
        this.staticText26 = st;
    }
    private StaticText staticText27 = new StaticText();

    public StaticText getStaticText27() {
        return staticText27;
    }

    public void setStaticText27(StaticText st) {
        this.staticText27 = st;
    }
    private StaticText labPrenos1 = new StaticText();

    public StaticText getLabPrenos1() {
        return labPrenos1;
    }

    public void setLabPrenos1(StaticText st) {
        this.labPrenos1 = st;
    }
    private ImageComponent imgArrowSmallLeft3 = new ImageComponent();

    public ImageComponent getImgArrowSmallLeft3() {
        return imgArrowSmallLeft3;
    }

    public void setImgArrowSmallLeft3(ImageComponent ic) {
        this.imgArrowSmallLeft3 = ic;
    }
    private Label label7 = new Label();

    public Label getLabel7() {
        return label7;
    }

    public void setLabel7(Label l) {
        this.label7 = l;
    }
    private StaticText labX1 = new StaticText();

    public StaticText getLabX1() {
        return labX1;
    }

    public void setLabX1(StaticText st) {
        this.labX1 = st;
    }
    private StaticText staticText18 = new StaticText();

    public StaticText getStaticText18() {
        return staticText18;
    }

    public void setStaticText18(StaticText st) {
        this.staticText18 = st;
    }
    private StaticText labHM1 = new StaticText();

    public StaticText getLabHM1() {
        return labHM1;
    }

    public void setLabHM1(StaticText st) {
        this.labHM1 = st;
    }
    private StaticText labR2 = new StaticText();

    public StaticText getLabR2() {
        return labR2;
    }

    public void setLabR2(StaticText st) {
        this.labR2 = st;
    }
    private StaticText staticText6 = new StaticText();

    public StaticText getStaticText6() {
        return staticText6;
    }

    public void setStaticText6(StaticText st) {
        this.staticText6 = st;
    }
    private StaticText labS2 = new StaticText();

    public StaticText getLabS2() {
        return labS2;
    }

    public void setLabS2(StaticText st) {
        this.labS2 = st;
    }
    private StaticText staticText7 = new StaticText();

    public StaticText getStaticText7() {
        return staticText7;
    }

    public void setStaticText7(StaticText st) {
        this.staticText7 = st;
    }
    private StaticText labV1 = new StaticText();

    public StaticText getLabV1() {
        return labV1;
    }

    public void setLabV1(StaticText st) {
        this.labV1 = st;
    }
    private StaticText labR3 = new StaticText();

    public StaticText getLabR3() {
        return labR3;
    }

    public void setLabR3(StaticText st) {
        this.labR3 = st;
    }
    private StaticText staticText8 = new StaticText();

    public StaticText getStaticText8() {
        return staticText8;
    }

    public void setStaticText8(StaticText st) {
        this.staticText8 = st;
    }
    private StaticText labS3 = new StaticText();

    public StaticText getLabS3() {
        return labS3;
    }

    public void setLabS3(StaticText st) {
        this.labS3 = st;
    }
    private StaticText staticText9 = new StaticText();

    public StaticText getStaticText9() {
        return staticText9;
    }

    public void setStaticText9(StaticText st) {
        this.staticText9 = st;
    }
    private StaticText labV2 = new StaticText();

    public StaticText getLabV2() {
        return labV2;
    }

    public void setLabV2(StaticText st) {
        this.labV2 = st;
    }
    private HtmlInputText txtOdp1 = new HtmlInputText();

    public HtmlInputText getTxtOdp1() {
        return txtOdp1;
    }

    public void setTxtOdp1(HtmlInputText hit) {
        this.txtOdp1 = hit;
    }
    private HtmlInputText txtOdp2 = new HtmlInputText();

    public HtmlInputText getTxtOdp2() {
        return txtOdp2;
    }

    public void setTxtOdp2(HtmlInputText hit) {
        this.txtOdp2 = hit;
    }
    private HtmlInputText txtOdp3 = new HtmlInputText();

    public HtmlInputText getTxtOdp3() {
        return txtOdp3;
    }

    public void setTxtOdp3(HtmlInputText hit) {
        this.txtOdp3 = hit;
    }
    private StaticText labO1 = new StaticText();

    public StaticText getLabO1() {
        return labO1;
    }

    public void setLabO1(StaticText st) {
        this.labO1 = st;
    }
    private StaticText labO2 = new StaticText();

    public StaticText getLabO2() {
        return labO2;
    }

    public void setLabO2(StaticText st) {
        this.labO2 = st;
    }
    private StaticText labO3 = new StaticText();

    public StaticText getLabO3() {
        return labO3;
    }

    public void setLabO3(StaticText st) {
        this.labO3 = st;
    }
    private HtmlInputText txtOdp4 = new HtmlInputText();

    public HtmlInputText getTxtOdp4() {
        return txtOdp4;
    }

    public void setTxtOdp4(HtmlInputText hit) {
        this.txtOdp4 = hit;
    }
    private StaticText labO4 = new StaticText();

    public StaticText getLabO4() {
        return labO4;
    }

    public void setLabO4(StaticText st) {
        this.labO4 = st;
    }
    private StaticText staticText14 = new StaticText();

    public StaticText getStaticText14() {
        return staticText14;
    }

    public void setStaticText14(StaticText st) {
        this.staticText14 = st;
    }
    private StaticText staticText13 = new StaticText();

    public StaticText getStaticText13() {
        return staticText13;
    }

    public void setStaticText13(StaticText st) {
        this.staticText13 = st;
    }
    private StaticText staticText3 = new StaticText();

    public StaticText getStaticText3() {
        return staticText3;
    }

    public void setStaticText3(StaticText st) {
        this.staticText3 = st;
    }

    // </editor-fold>

    /**
     * <p>Construct a new Page bean instance.</p>
     */
    public dsa() {
    }

    /**
     * <p>Callback method that is called whenever a page is navigated to,
     * either directly via a URL, or indirectly via page navigation.
     * Customize this method to acquire resources that will be needed
     * for event handlers and lifecycle methods, whether or not this
     * page is performing post back processing.</p>
     * 
     * <p>Note that, if the current request is a postback, the property
     * values of the components do <strong>not</strong> represent any
     * values submitted with this request.  Instead, they represent the
     * property values that were saved for this view when it was rendered.</p>
     */
    @Override
    public void init() {
        // Perform initializations inherited from our superclass
        super.init();
        // Perform application initialization that must complete
        // *before* managed components are initialized
        // TODO - add your own initialiation code here
        staticText1.setVisible(false);
        staticText2.setVisible(false);
        staticText3.setVisible(false);
        staticText4.setVisible(false);
        staticText5.setVisible(false);
        staticText6.setVisible(false);
        staticText7.setVisible(false);
        staticText8.setVisible(false);
        staticText9.setVisible(false);
        staticText13.setVisible(false);
        staticText14.setVisible(false);
        staticText15.setVisible(false);
        staticText16.setVisible(false);
        staticText17.setVisible(false);
        staticText18.setVisible(false);
        staticText21.setVisible(false);
        staticText22.setVisible(false);
        staticText23.setVisible(false);
        staticText24.setVisible(false);
        staticText25.setVisible(false);
        staticText26.setVisible(false);
        staticText27.setVisible(false);

        labQ.setVisible(false);
        labN.setVisible(false);
        labB.setVisible(false);
        labK.setVisible(false);
        imgArrowSmallLeft1.setVisible(false);

        labQ1.setVisible(false);
        labQ2.setVisible(false);
        labQ3.setVisible(false);
        labQ4.setVisible(false);
        imgArrowSmallLeft5.setVisible(false);

        labK1.setVisible(false);
        labK2.setVisible(false);
        labK3.setVisible(false);
        imgArrowSmallLeft2.setVisible(false);

        labS1.setVisible(false);
        labR1.setVisible(false);
        labCheck.setVisible(false);
        labHash.setVisible(false);
        labW.setVisible(false);
        labU1.setVisible(false);
        labU2.setVisible(false);
        labV3.setVisible(false);
        imgArrowSmallLeft4.setVisible(false);

        labX.setVisible(false);
        labHM.setVisible(false);
        labB4.setVisible(false);
        labR.setVisible(false);
        labS.setVisible(false);
        labV.setVisible(false);
        imgArrowSmallLeft3.setVisible(false);
        labPrenos1.setVisible(false);

        labHM1.setVisible(false);
        labX1.setVisible(false);
        labR2.setVisible(false);
        labS2.setVisible(false);
        labV1.setVisible(false);
        labR3.setVisible(false);
        labS3.setVisible(false);
        labV2.setVisible(false);

        label7.setVisible(false);
        label5.setVisible(false);
        label4.setVisible(false);
        label3.setVisible(false);
        label1.setVisible(false);
        // <editor-fold defaultstate="collapsed" desc="Managed Component Initialization">
        // Initialize automatically managed components
        // *Note* - this logic should NOT be modified
        try {
            _init();
        } catch (Exception e) {
            log("template Initialization Failure", e);
            throw e instanceof FacesException ? (FacesException) e: new FacesException(e);
        }
        
        // </editor-fold>
        // Perform application initialization that must complete
        // *after* managed components are initialized
        // TODO - add your own initialization code here
    }

    /**
     * <p>Callback method that is called after the component tree has been
     * restored, but before any event processing takes place.  This method
     * will <strong>only</strong> be called on a postback request that
     * is processing a form submit.  Customize this method to allocate
     * resources that will be required in your event handlers.</p>
     */
    @Override
    public void preprocess() {
    }

    /**
     * <p>Callback method that is called just before rendering takes place.
     * This method will <strong>only</strong> be called for the page that
     * will actually be rendered (and not, for example, on a page that
     * handled a postback and then navigated to a different page).  Customize
     * this method to allocate resources that will be required for rendering
     * this page.</p>
     */
    @Override
    public void prerender() {
    }

    /**
     * <p>Callback method that is called after rendering is completed for
     * this request, if <code>init()</code> was called (regardless of whether
     * or not this was the page that was actually rendered).  Customize this
     * method to release resources acquired in the <code>init()</code>,
     * <code>preprocess()</code>, or <code>prerender()</code> methods (or
     * acquired during execution of an event handler).</p>
     */
    @Override
    public void destroy() {
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     *
     * @return reference to the scoped data bean
     */
    protected SessionBean1 getSessionBean1() {
        return (SessionBean1) getBean("SessionBean1");
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     *
     * @return reference to the scoped data bean
     */
    protected ApplicationBean1 getApplicationBean1() {
        return (ApplicationBean1) getBean("ApplicationBean1");
    }

    public String btnBack_action() {
        PerformStep(false);
        return null;
    }

    public String btnSkip_action() {
        // TODO: Process the action. Return value is a navigation
        // case name where null will return to the same page.
        return null;
    }

    public String btnFwd_action() {
        PerformStep(true);
        return null;
    }

    public String button_action() {
        // TODO: Process the action. Return value is a navigation
        // case name where null will return to the same page.
        return null;
    }
    private void PerformStep(boolean forward) {
        int krok = Integer.parseInt(hiddenCislo1.getValue().toString());

        ////////////////////////////////////////////////
        // nastavit pocet kroku
        int pocetKroku = 12;
        ////////////////////////////////////////////////

        labKrok1.setText("Krok -1:");

        if (forward) {
            krok = Math.min(pocetKroku, krok + 1);
        } else {
            krok = Math.max(0, krok - 1);
        }

        ////////////////////////////////////////////////
        // zprava se zobrazi uzivateli po provedeni kazdeho kroku
        String zprava = "";
        // hodnota slouzi pro predani zvolene hodnoty do prislusneho pole
        String hodnota;
        ////////////////////////////////////////////////

        switch (krok - 1) {
            case -1:
                if (!forward) {
                    btnBack1.setDisabled(true);

                    labKrok1.setVisible(false);
                    zprava ="Podepisování zpráv slouží k jednoznačné autorizaci přenášených zpráv. Využívá se pro ověření majitele veřejných klíčů, ověření původce zpráv a pod. Ke svojí činnosti vyžaduje síť tzv. Cetrifikačních středisek. Postup, jak probíhá podepisování zprávy a klíčů popisuje tento průvodce. Jde o podepisování algoritmem DSA, který není vzhledem k obtížné volbě parametrů vhodný pro ruční výpočty, nejsou proto ani umožněny.";
                    labQ.setVisible(false);
                    labN.setVisible(false);
                    labB.setVisible(false);
                    labK.setVisible(false);
                    
                    staticText14.setVisible(false);
                    staticText13.setVisible(false);
                    staticText3.setVisible(false);
                }
                break;
            case 0:
                btnBack1.setDisabled(false);
                zprava = "Před začátkem komunikace si musí uživatel vytvořit dvojici soukromý-veřejný klíč. Při metodě DSA k tomu potřebuje zobrazené parametry splňující podmínky vypsané v přidružené dokumentaci pod tlačítkem nápověda.";
                labKrok1.setVisible(true);

                labQ.setVisible(true);
                labN.setVisible(true);
                labB.setVisible(true);
                labK.setVisible(true);
                
                staticText14.setVisible(true);
                staticText13.setVisible(true);
                staticText3.setVisible(true);

                if (!forward) {
                    imgArrowSmallLeft1.setVisible(false);
                    labQ1.setVisible(false);
                    labQ2.setVisible(false);
                    labQ3.setVisible(false);
                    staticText1.setVisible(false);
                    label1.setVisible(false);
                }
                break;
                case 1:
                zprava = "Ve chvíli, kdy má uživatel vytvořenu dvojici klíče, vydá se, zpravidla osobně, na některou z certifikačních autorit. Zde musí předložit údaje o svojí osobě, např. platný doklad totožnosti. Dále předloží svůj vytvořený veřejný klíč.";
                imgArrowSmallLeft1.setVisible(true);
                labQ1.setVisible(true);
                labQ2.setVisible(true);
                labQ3.setVisible(true);
                label1.setVisible(true);
                staticText1.setVisible(true);
                
                if (!forward) {
                    labQ4.setVisible(false);
                    staticText2.setVisible(false);
                }
                break;
                case 2:
                zprava = "Certifikační autorita vytvoří zkušební text, který dá uživateli k podepsání.";
                
                staticText2.setVisible(true);
                labQ4.setVisible(true);
                if (!forward) {
                    imgArrowSmallLeft5.setVisible(false);
                    labK1.setVisible(false);
                    labK2.setVisible(false);
                    labK3.setVisible(false);
                    label3.setVisible(false);
                    staticText5.setVisible(false);
                    staticText4.setVisible(false);
                }
                break;
                case 3:
                zprava = "Uživatel svým soukromým klíčem podepíše (zašifruje) předložený zkušební text a vrátí jej certifikační autoritě.";
                imgArrowSmallLeft5.setVisible(true);
                labK1.setVisible(true);
                labK2.setVisible(true);
                labK3.setVisible(true);
                label3.setVisible(true);
                staticText5.setVisible(true);
                staticText4.setVisible(true);

                if (!forward) {
                    imgArrowSmallLeft2.setVisible(false);
                    labS1.setVisible(false);
                    labR1.setVisible(false);
                    labCheck.setVisible(false);
                    label5.setVisible(false);
                    staticText21.setVisible(false);
                    staticText24.setVisible(false);
                }
                break;
                case 4:
                zprava = "Certifikační středisko použije dříve poskytnutý veřejný klíč uživatele a dešifruje doručenou podepsanou zprávu. Pokud se získaná zpráva shoduje s původně vygenerovanou zprávou, pak to značí, že uživatel zná soukromý klíč odpovídající k veřejnému klíči, který poskytl.";
                imgArrowSmallLeft2.setVisible(true);
                labS1.setVisible(true);
                labR1.setVisible(true);
                labCheck.setVisible(true);
                label5.setVisible(true);
                staticText21.setVisible(true);
                staticText24.setVisible(true);
                if (!forward) {
                    labHash.setVisible(false);
                    labW.setVisible(false);
                    staticText23.setVisible(false);
                    staticText15.setVisible(false);
                    
               }
                break;
                case 5:
                zprava = "Certifikační autorita tedy vezme osobní údaje uživatele a jeho veřejný klíč a vypočte jejich jednosměrný otisk, hash. K tomu v současnosti použije hashovací algoritmus SHA-2, který je považován za vysoce bezpečný z hlediska odolnosti vůči kolizím.";
                
                labHash.setVisible(true);
                labW.setVisible(true);
                
                staticText23.setVisible(true);
                staticText15.setVisible(true);

                if (!forward) {
                    
                    labU1.setVisible(false);
                    labU2.setVisible(false);
                    labV3.setVisible(false);
                    staticText22.setVisible(false);
                    staticText17.setVisible(false);
               }
                break;
                case 6:
                zprava = "Nakonec svým soukromým klíčem podepíše (zašifruje) hash údajů o uživateli a sestaví certifikát. V něm jsou obsaženy údaje o uživateli, jeho veřejný klíč a Certifikačním střediskem podepsaný hash těchto údajů. Certifikační středisko používá klíče výrazně větších délek, než jsou délky klíčů uživatelských, protože na jejím klíči je závislá bezpoečnost všech vydaných certifikátů.";
                labU1.setVisible(true);
                labU2.setVisible(true);
                labV3.setVisible(true);
                staticText22.setVisible(true);
                staticText17.setVisible(true);

                if (!forward) {
                    imgArrowSmallLeft4.setVisible(false);
                    label4.setVisible(false);
                    labX.setVisible(false);
               }
                break;
                case 7:
                zprava = "Uživatel nyní vlastní platný certifikát se svými osobními údaji a svým veřejným klíčem, může jej tedy využívat při podepisování svých zpráv.";
                imgArrowSmallLeft4.setVisible(true);
                label4.setVisible(true);
                labX.setVisible(true);
                                
                if (!forward) {
                    labHM.setVisible(false);
                    staticText16.setVisible(false);
               }
                break;
                case 8:
                zprava = "Přenášené zprávy mohou mít libovolnou délku, pro účely vytvoření podpisu však stačí pouze jejich malá část. Používá se hashe, který zprávu libovolné dékly upraví na konstantní délku 160 bitů pro SHA-1. Podepisuje se pak pouze tato malá část zprávy, čímž se ušetří i velké množství přenášených dat";
                labHM.setVisible(true);
                staticText16.setVisible(true);

                if (!forward) {
                    labB4.setVisible(false);
                    labR.setVisible(false);
                    labS.setVisible(false);
                    labV.setVisible(false);

                    staticText25.setVisible(false);
                    staticText26.setVisible(false);
                    staticText27.setVisible(false);
               }
                break;
                case 9:
                zprava = "Pro účely podepisování systémem DSA je třeb apro každou podepisovanou zprávu zvolit náhodný, jedinečný parametr x. Tento parametr je třeba po vytvoření podpisu bezpečně zničit. Podpis se pak vypočte z hashe a uživatelova soukromého klíče.";
                labB4.setVisible(true);
                labR.setVisible(true);
                labS.setVisible(true);
                labV.setVisible(true);
                
                staticText25.setVisible(true);
                staticText26.setVisible(true);
                staticText27.setVisible(true);

                if (!forward) {
                    imgArrowSmallLeft3.setVisible(false);
                    labPrenos1.setVisible(false);
                    label7.setVisible(false);
                    labHM1.setVisible(false);
                    labX1.setVisible(false);
                    labR2.setVisible(false);
                    labS2.setVisible(false);
                    labV1.setVisible(false);
                    staticText18.setVisible(false);
                    staticText6.setVisible(false);
                    staticText7.setVisible(false);
               }
                break;
                case 10:
                zprava = "Vzdálenému uživateli se spolu se zprávou přenese její podpis a uživatelův certifikát, který obsahuje veřejný klíč pro ověření podpisu. Vzálený uživatel si nejdříve z přijaté zprávy vypočte její hash. Poté ověří platnost certifikátu tak, že z uvedených údajů určí jejich hash a pomocí známého klíče certifikační autority dešifruje hash podepsaný ve zprávě. pokud se shodují, certifikát je pravý a uživatel přijme v něm obsažený klíč.";
                imgArrowSmallLeft3.setVisible(true);
                labPrenos1.setVisible(true);
                label7.setVisible(true);
                labHM1.setVisible(true);
                labX1.setVisible(true);
                labR2.setVisible(true);
                labS2.setVisible(true);
                labV1.setVisible(true);
                staticText18.setVisible(true);
                staticText6.setVisible(true);
                staticText7.setVisible(true);
                if (!forward) {
                    labR3.setVisible(false);
                    labS3.setVisible(false);
                    labV2.setVisible(false);
                    staticText8.setVisible(false);
                    staticText9.setVisible(false);
                    btnFwd1.setDisabled(false);
               }
                break;
                case 11:
                zprava = "Posledním krokem k ověření podpisu je ověření (dešifrování) obdrženého podpisu. Přijatý hash se dešifruje přijatým veřejným klíčem z certifikátu a výsledek se porovná s hashem, který si uživatel vypočetl sám z přijaté zprávy. Pokud se shodují, zpráva je utorizována.";
                labR3.setVisible(true);
                labS3.setVisible(true);
                labV2.setVisible(true);
                staticText8.setVisible(true);
                staticText9.setVisible(true);
                btnFwd1.setDisabled(true);
                if (!forward) {
               }
                break;


        }

        hiddenCislo1.setValue(krok);
        labKrok1.setText("Krok " + (krok - 1) + ":");
        labPopis1.setText(zprava);
    }

    public String btnVyh_action() {
        try
        {
        String odp = txtOdp1.getValue().toString();
        if (odp.equals("C")||odp.equals("c"))
            labO3.setText("OK");
        else
            labO3.setText("KO");

        odp = txtOdp2.getValue().toString();
        if (odp.equals("A")||odp.equals("a"))
            labO2.setText("OK");
        else
            labO2.setText("KO");

        odp = txtOdp3.getValue().toString();
        if (odp.equals("B")||odp.equals("b"))
            labO1.setText("OK");
        else
            labO1.setText("KO");

        odp = txtOdp4.getValue().toString();
        if (odp.equals("B")||odp.equals("b"))
            labO4.setText("OK");
        else
            labO4.setText("KO");

        }
        catch (Exception e)
        {
            JOptionPane.showMessageDialog(null, "Chybná vstupní data, DL.");
        }
        return null;
    }

    public String btnVysl_action() {
        txtOdp1.setValue("C");
        txtOdp2.setValue("A");
        txtOdp3.setValue("B");
        txtOdp4.setValue("B");
        return null;
    }

    public String hyperlink1_action() {
        // TODO: Process the action. Return value is a navigation
        // case name where null will return to the same page.
        return null;
    }
    
}

