In the cases that the available tags are not enough, the necessary can be programmed directly in java as the following example shows:

1 Programming in java

Copy
<xsql-script name='security_java_sample'>

   <body>

    <!-- security.sign.make_keys -->

    <java.shell>
        <args>
            <arg name='algorithm'>RSA</arg>
            <arg name='private_key_file'><file name='c:\tmp\private_key' type='absolute' /></arg>
            <arg name='public_key_file'><file name='c:\tmp\public_key' type='absolute' /></arg>
        </args>
        <body>
            java.security.KeyPairGenerator kg = java.security.KeyPairGenerator.getInstance(algorithm);
            kg.initialize(1024);

            java.security.KeyPair pair      = kg.generateKeyPair();
            java.security.PrivateKey priKey = pair.getPrivate();
            java.security.PublicKey pubKey  = pair.getPublic();

            java.io.FileOutputStream out = new java.io.FileOutputStream(private_key_file);
            byte[] ky = priKey.getEncoded();
            out.write(ky);
            out.close();

            out = new FileOutputStream(public_key_file);
            ky = pubKey.getEncoded();
            out.write(ky);
            out.close();
        </body>
    </java.shell>

    <!-- security.sign.hash -->

    <java.shell>
        <body>
            class InvalidHashException
            {
                public InvalidHashException() {
                }
            }
        </body>
    </java.shell>

    <set name='hash'>
    <java.shell>
        <args>
            <!-- protected static final int         EXPECTED_HASH_FOR_512_KEY_LENGTH = 88; -->
            <!-- protected static final int         EXPECTED_HASH_FOR_1024_KEY_LENGTH = 172; -->
            <arg name='hash_size'>172</arg>
            <arg name='algorithm'>SHA1withRSA</arg>
            <arg name='private_key_file'><file name='c:\tmp\private_key' type='absolute' /></arg>
            <arg name='public_key_file'><file name='c:\tmp\public_key' type='absolute' /></arg>
            <arg name='message'><string>2010-03-11;2010-03-11T11:27:08;FAC 001/9;1200.00;mYJEv4iGwLcnQbRD7dPs2uD1mX08XjXIKcGg3GEHmwMhmmGYusffIJjTdSITLX+uujTwzqmL/U5nvt6S9s8ijN3LwkJXsiEpt099e1MET/8y3+Y1bN+K+YPJQiVmlQS0fXETsOPo8SwUZdBALt0vTo1VhUZKejACcjEYJG6nI=</string></arg>
        </args>
        <body>

            deister.webstudio.core.xsql.script.functions.f_security.CertificationManager cm = new deister.webstudio.core.xsql.script.functions.f_security.CertificationManager(algorithm, hash_size);

            cm.setAutoVerifyHash(true);

            if (private_file != null)
                cm.readFromFilePrivateKey(private_key_file);
            else
                cm.setPrivateKey(CertificationManager.DEISTER_PRIVATE_KEY);

            if (public_file != null)
                cm.readFromFilePublicKey(public_key_file);
            else
                cm.setPublicKey(CertificationManager.DEISTER_PUBLIC_KEY);

            String hash = cm.getHashBase64(message);
            System.err.println(hash);
            System.err.println(cm.verifyHashBase64(message, hash));

            return hash;
        </body>
    </java.shell>
    </set>

    <println/>
    <println>HASH:</println>
    <!-- XtzsT4ck44kvTx010rLblBXhANA1vX7HcD9XVjIxnl2+FLTOZAGbVOugc+BV0Ct8zKL6FpIKsc/SWEr/J4sB0PjIJCRzeWpWP9VLlo1U43YgOALHcxkdZanzNrAuWb4mLdd0FJqxevdoBYKyQTvNFlDNm7fieIZqp2P6YF6YGyM= -->
    <println><hash/></println>
    <println/>


    <!-- security.sign.verify -->
    <set name='verify'>
    <java.shell>
        <args>
            <!-- protected static final int         EXPECTED_HASH_FOR_512_KEY_LENGTH = 88; -->
            <!-- protected static final int         EXPECTED_HASH_FOR_1024_KEY_LENGTH = 172; -->
            <arg name='hash_size'>172</arg>
            <arg name='algorithm'>SHA1withRSA</arg>
            <arg name='private_key_file'><file name='c:\tmp\private_key' type='absolute' /></arg>
            <arg name='public_key_file'><file name='c:\tmp\public_key' type='absolute' /></arg>
            <arg name='message'><string>2010-03-11;2010-03-11T11:27:08;FAC 001/9;1200.00;mYJEv4iGwLcnQbRD7dPs2uD1mX08XjXIKcGg3GEHmwMhmmGYusffIJjTdSITLX+uujTwzqmL/U5nvt6S9s8ijN3LwkJXsiEpt099e1MET/8y3+Y1bN+K+YPJQiVmlQS0fXETsOPo8SwUZdBALt0vTo1VhUZKejACcjEYJG6nI=</string></arg>
            <arg name='hash'>XtzsT4ck44kvTx010rLblBXhANA1vX7HcD9XVjIxnl2+FLTOZAGbVOugc+BV0Ct8zKL6FpIKsc/SWEr/J4sB0PjIJCRzeWpWP9VLlo1U43YgOALHcxkdZanzNrAuWb4mLdd0FJqxevdoBYKyQTvNFlDNm7fieIZqp2P6YF6YGyM=</arg>
        </args>
        <body>
            deister.webstudio.core.xsql.script.functions.f_security.CertificationManager cm = new deister.webstudio.core.xsql.script.functions.f_security.CertificationManager(algorithm, hash_size);
            cm.setAutoVerifyHash(true);

            if (private_file != null)
                cm.readFromFilePrivateKey(private_key_file);
            else
                cm.setPrivateKey(CertificationManager.DEISTER_PRIVATE_KEY);

            if (public_file != null)
                cm.readFromFilePublicKey(public_key_file);
            else
                cm.setPublicKey(CertificationManager.DEISTER_PUBLIC_KEY);

            return new Boolean(cm.verifyHashBase64(message, hash));
        </body>
    </java.shell>
    </set>

    <println/>
    <println>VERIFY hash:</println>
    <println><verify/></println>
    <println/>

    </body>
</xsql-script>