🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.lenguajes.java
Article #26406

Re: PKCS

#26406
From: jmoya
Date: Mon, 04 Jan 1999 00:00
128 lines
4808 bytes
Javier Medina wrote:

> Hola,
>     Estoy buscando si alguien sabe de algunas APIs en JAVA, que
> implementen PKCS (Public Key Criptographic Standard), para codificar
> mensajes (PKCS-7), para la codificaci�n y decodificaci�n DER. Gracias

Hola Javier,

puedes encontrarlo en la propia distribucion del JDK.
Con el Winzip miras el contenido de la libreria classes.zip, y
veras que existe
   sun.security.pkcs.PKCS7.class.

Si tienes tiempo y te interesa el tema, te recomiendo que descomprimas
todas las clases del paquete sun.security y posteriormente las
decompiles con algun programa, yo uso el JAD y no me ha fallado hasta
ahora.
Tan solo te hace falta intepretar como funcionan las clases que te
interesan a traves del codigo fuente.
Te informo que este paquete no lo implementa Netscape pero si
IExplorer, eso por si lo utilizas en un Applet.

Si lo unico que deseas es poder hacer la codificacion /descodificacion
DER
te adjunto un ejemplo de utilizacion de estas clases para realizarla,
en el veras como se codifica/descodifica una firma DSA.

Si estas interesado en el tema de firma digital DSA, y su uso a partir de

sus parametros p, q, g, x, y, r, s, te podria hechar una mano.
Sun no da informacion de como obtenerlas pero te aseguro que si se puede.

Si ademas quieres disponer de la API JCE1.2,  ( Extension Cryptofracia de
Java )  saltandote las restricciones de SUN,
prueba a conectarte con un proxy de america de la manera siguiente:

http://anon.free.anonymizer.com/http://developer.java.sun.com/servlet/SessionServlet?action=showLogin&url=/developer/earlyAccess/jdk12/jce.html

necesitaras para esto darte de alta en el JDC.

Suerte,
Juan Moya

// ************************

import java.security.*;
import java.io.IOException;
import java.security.interfaces.*;
import sun.security.provider.DSAKeyPairGenerator;
import sun.security.provider.DSAPrivateKey;
import sun.security.provider.DSAPublicKey;
import sun.security.x509.AlgIdDSA;
import sun.security.util.BigInt;
import sun.security.util.DerOutputStream;
import sun.security.util.DerValue;
import sun.security.util.DerInputStream;

import java.math.BigInteger;

    /**
     *  Obtengo la firma DSA codificada DER a partir de los parametros r,
s:
     *    Firma en ASN.1 :        SEQUENCE { r Integer, s Integer }
     */
    public byte[] signCodeASN1 (BigInteger R, BigInteger S)
           throws SignatureException
    {
        final byte tag_Sequence = 48;
        BigInt r = new BigInt(R.toByteArray());
        BigInt s = new BigInt(S.toByteArray());
        try
        {
            // comienza la codificacion DER

            DerOutputStream deroutputstream = new DerOutputStream(100);
            deroutputstream.putInteger(r);
            deroutputstream.putInteger(s);

           // acaba la codificacion DER

            DerValue dervalue = new DerValue(tag_Sequence,
deroutputstream.toByteArray());

           //  reset();
            byte[] sigASN1 = dervalue.toByteArray();
            return sigASN1;
        }
        catch(IOException ex)
        {
            throw new SignatureException("Error al codificar firma");
        }
    }

    /**
     *  Obtengo los parametros r, s a partir de una firma DSA codificada
DER
     */
    public BigInteger[] signDecodeASN1 (byte[] sigASN1)
           throws SignatureException
    {
        BigInteger R,S;
        try
        {
             // comienzo a decodificar DER la firma sigASN1

            DerInputStream derinputstream = new DerInputStream(sigASN1);
            DerValue adervalue[] = derinputstream.getSequence(2);
            R = adervalue[0].getInteger().toBigInteger();
            S = adervalue[1].getInteger().toBigInteger();

            // acaba la decodificacion DER

            System.out.println ("DEBUG:DSA1.engineVerify
r="+R.toString(16));
            System.out.println ("DEBUG:DSA1.engineVerify
s="+S.toString(16));
        }
        catch(IOException ex)
        {
            throw new SignatureException("Codificacion invalida para la
firma");
        }
        return new BigInteger[]{R,S};
    }

// **************************************
Technical Details
Message-ID: <36912518.D47D19C1@mat.upc.es>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <36814F0F.9F64AAD7@mx3.redestb.es>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: 1116f3,2edf78b965966fc4
X-Google-Attributes: gid1116f3,public
From: jmoya <jmoya@mat.upc.es>
Subject: Re: PKCS
Date: 1999/01/04
Message-ID: <36912518.D47D19C1@mat.upc.es>
X-Deja-AN: 428746781
Content-Transfer-Encoding: 8bit
References: <36814F0F.9F64AAD7@mx3.redestb.es>
To: Javier Medina <javiermedina@mx3.redestb.es>
X-Accept-Language: en
Content-Type: text/plain; charset=iso-8859-1
Organization: Universitat Politecnica de Catalunya
Mime-Version: 1.0
Newsgroups: es.comp.lenguajes.java