⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testenvelopeddataparser.java

📁 进行与数字证书相关开发必须的java源码
💻 JAVA
字号:
// Decompiled by Jad v1.5.7g. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi 
// Source File Name:   TestEnvelopedDataParser.java

package jit.testsuit;

import java.io.*;
import jit.asn1.ASN1Sequence;
import jit.asn1.pkcs.PKCSObjectIdentifiers;
import jit.asn1.pkcs.pkcs12.Pfx;
import jit.asn1.pkcs.pkcs7.*;
import jit.asn1.x509.*;
import jit.asn1parser.Parser;
import jit.asn1parser.pkcs.PKCS12Parser;
import jit.asn1parser.pkcs.pkcs7.EnvelopedDataParser;
import jit.asn1parser.x509.SPKIParser;
import jit.asn1parser.x509.X509Cert;
import jit.jcrypto.*;
import jit.jcrypto.soft.JMechanism;
import jit.math.BigInteger;
import jit.util.encoders.Base64;
import junit.framework.Assert;
import junit.framework.TestCase;

public class TestEnvelopedDataParser extends TestCase
{

    private EnvelopedDataParser envelopedDataParser;
    private Session session;
    private byte SOURCE[];

    public TestEnvelopedDataParser(String name)
    {
        super(name);
        envelopedDataParser = null;
        session = null;
        SOURCE = "吉大正元CFCA数字信封测试程序TEST".getBytes();
    }

    protected void setUp()
        throws Exception
    {
        super.setUp();
        JCrypto jcrypto = new JCrypto();
        jcrypto.initialize(0, null);
        session = jcrypto.openSession(0);
        envelopedDataParser = new EnvelopedDataParser(session);
    }

    protected void tearDown()
        throws Exception
    {
        envelopedDataParser = null;
        session = null;
        super.tearDown();
    }

    public void testGenerateEnvelopedData_3DES()
        throws Exception
    {
        PKCS12Parser p12 = new PKCS12Parser();
        p12.load("c:/testData/lijian.pfx");
        Pfx pfx = p12.getPfx();
        X509Cert cert = new X509Cert("c:/testData/lijian.cer");
        JMechanism mechanism = new JMechanism(305);
        JKey contentEncryptionKey = session.generateKey(mechanism, 0);
        byte bContentEncryptionKey[] = contentEncryptionKey.getKey();
        SubjectPublicKeyInfo spki = cert.getSubjectPublicKeyInfo();
        SPKIParser spkiParser = new SPKIParser();
        JKey recipientPubKey = spkiParser.getPublicKey(spki);
        BigInteger sn = cert.getSerialNumber();
        X509Name issuer = cert.getIssuer();
        IssuerAndSerialNumber issuerAndSerialNumber = new IssuerAndSerialNumber(issuer, sn);
        AlgorithmIdentifier keyEncryptionAlg = null;
        if(recipientPubKey.getKeyType() == 1)
            keyEncryptionAlg = new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption);
        else
        if(recipientPubKey.getKeyType() == 1001)
            keyEncryptionAlg = new AlgorithmIdentifier(PKCSObjectIdentifiers.ecEncryption);
        RecipientInfo recipientInfo = envelopedDataParser.generateRecipientInfo(issuerAndSerialNumber, keyEncryptionAlg, bContentEncryptionKey, recipientPubKey);
        EncryptedContentInfo encryptedContentInfo = envelopedDataParser.generateEncryptedContentInfo(PKCSObjectIdentifiers.data, PKCSObjectIdentifiers.des3CBCEncryption, SOURCE, contentEncryptionKey);
        EnvelopedData envelopedData = envelopedDataParser.generateEnvelopedData(recipientInfo, encryptedContentInfo);
        byte decode[] = envelopedDataParser.decodeEnvelop(envelopedData, pfx, "1".toCharArray());
        Assert.assertTrue(isEqualArray(decode, SOURCE));
        ContentInfo contentInfo = envelopedDataParser.generateEnvelopedDataContent(envelopedData);
        byte data[] = Parser.writeDERObj2Bytes(contentInfo.getDERObject());
        data = Base64.encode(data);
        data = format64(data);
        FileOutputStream fos = new FileOutputStream("c:/envelopedData_3des.txt.jef");
        fos.write(data);
        fos.close();
    }

    public void testGenerateEnvelopedData_DES()
        throws Exception
    {
        PKCS12Parser p12 = new PKCS12Parser();
        p12.load("c:/testData/lijian.pfx");
        Pfx pfx = p12.getPfx();
        X509Cert cert = new X509Cert("c:/testData/lijian.cer");
        JMechanism mechanism = new JMechanism(288);
        JKey contentEncryptionKey = session.generateKey(mechanism, 0);
        byte bContentEncryptionKey[] = contentEncryptionKey.getKey();
        SubjectPublicKeyInfo spki = cert.getSubjectPublicKeyInfo();
        SPKIParser spkiParser = new SPKIParser();
        JKey recipientPubKey = spkiParser.getPublicKey(spki);
        BigInteger sn = cert.getSerialNumber();
        X509Name issuer = cert.getIssuer();
        IssuerAndSerialNumber issuerAndSerialNumber = new IssuerAndSerialNumber(issuer, sn);
        AlgorithmIdentifier keyEncryptionAlg = null;
        if(recipientPubKey.getKeyType() == 1)
            keyEncryptionAlg = new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption);
        else
        if(recipientPubKey.getKeyType() == 1001)
            keyEncryptionAlg = new AlgorithmIdentifier(PKCSObjectIdentifiers.ecEncryption);
        RecipientInfo recipientInfo = envelopedDataParser.generateRecipientInfo(issuerAndSerialNumber, keyEncryptionAlg, bContentEncryptionKey, recipientPubKey);
        EncryptedContentInfo encryptedContentInfo = envelopedDataParser.generateEncryptedContentInfo(PKCSObjectIdentifiers.data, PKCSObjectIdentifiers.desCBCEncryption, SOURCE, contentEncryptionKey);
        EnvelopedData envelopedData = envelopedDataParser.generateEnvelopedData(recipientInfo, encryptedContentInfo);
        byte decode[] = envelopedDataParser.decodeEnvelop(envelopedData, pfx, "1".toCharArray());
        Assert.assertTrue(isEqualArray(decode, SOURCE));
        ContentInfo contentInfo = envelopedDataParser.generateEnvelopedDataContent(envelopedData);
        byte data[] = Parser.writeDERObj2Bytes(contentInfo.getDERObject());
        data = Base64.encode(data);
        data = format64(data);
        FileOutputStream fos = new FileOutputStream("c:/envelopedData_des.txt.jef");
        fos.write(data);
        fos.close();
    }

    public void testGenerateEnvelopedData_RC2()
        throws Exception
    {
        PKCS12Parser p12 = new PKCS12Parser();
        p12.load("c:/testData/lijian.pfx");
        Pfx pfx = p12.getPfx();
        X509Cert cert = new X509Cert("c:/testData/lijian.cer");
        JMechanism mechanism = new JMechanism(256);
        JKey contentEncryptionKey = session.generateKey(mechanism, 0);
        byte bContentEncryptionKey[] = contentEncryptionKey.getKey();
        SubjectPublicKeyInfo spki = cert.getSubjectPublicKeyInfo();
        SPKIParser spkiParser = new SPKIParser();
        JKey recipientPubKey = spkiParser.getPublicKey(spki);
        BigInteger sn = cert.getSerialNumber();
        X509Name issuer = cert.getIssuer();
        IssuerAndSerialNumber issuerAndSerialNumber = new IssuerAndSerialNumber(issuer, sn);
        AlgorithmIdentifier keyEncryptionAlg = null;
        if(recipientPubKey.getKeyType() == 1)
            keyEncryptionAlg = new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption);
        else
        if(recipientPubKey.getKeyType() == 1001)
            keyEncryptionAlg = new AlgorithmIdentifier(PKCSObjectIdentifiers.ecEncryption);
        RecipientInfo recipientInfo = envelopedDataParser.generateRecipientInfo(issuerAndSerialNumber, keyEncryptionAlg, bContentEncryptionKey, recipientPubKey);
        EncryptedContentInfo encryptedContentInfo = envelopedDataParser.generateEncryptedContentInfo(PKCSObjectIdentifiers.data, PKCSObjectIdentifiers.rc2CBCEncryption, SOURCE, contentEncryptionKey);
        EnvelopedData envelopedData = envelopedDataParser.generateEnvelopedData(recipientInfo, encryptedContentInfo);
        byte decode[] = envelopedDataParser.decodeEnvelop(envelopedData, pfx, "1".toCharArray());
        Assert.assertTrue(isEqualArray(decode, SOURCE));
        ContentInfo contentInfo = envelopedDataParser.generateEnvelopedDataContent(envelopedData);
        byte data[] = Parser.writeDERObj2Bytes(contentInfo.getDERObject());
        data = Base64.encode(data);
        data = format64(data);
        FileOutputStream fos = new FileOutputStream("c:/envelopedData_rc2.txt.jef");
        fos.write(data);
        fos.close();
    }

    public void testDecodeFromC_DES()
        throws Exception
    {
        FileInputStream fin = new FileInputStream("c:/envelopedData_des.txt.jef");
        byte data[] = new byte[fin.available()];
        fin.read(data);
        fin.close();
        data = Parser.convertBase64(data);
        data = Base64.decode(data);
        ASN1Sequence seq = (ASN1Sequence)Parser.writeBytes2DERObj(data);
        ContentInfo contentInfo = ContentInfo.getInstance(seq);
        EnvelopedData envelopedData = EnvelopedData.getInstance(contentInfo.getContent());
        PKCS12Parser p12 = new PKCS12Parser();
        p12.load("c:/testData/lijian.pfx");
        Pfx pfx = p12.getPfx();
        byte decode[] = envelopedDataParser.decodeEnvelop(envelopedData, pfx, "1".toCharArray());
        Assert.assertTrue(isEqualArray(decode, SOURCE));
    }

    public void testDecodeFromC_3DES()
        throws Exception
    {
        FileInputStream fin = new FileInputStream("c:/envelopedData_3des.txt.jef");
        byte data[] = new byte[fin.available()];
        fin.read(data);
        fin.close();
        data = Parser.convertBase64(data);
        data = Base64.decode(data);
        ASN1Sequence seq = (ASN1Sequence)Parser.writeBytes2DERObj(data);
        ContentInfo contentInfo = ContentInfo.getInstance(seq);
        EnvelopedData envelopedData = EnvelopedData.getInstance(contentInfo.getContent());
        PKCS12Parser p12 = new PKCS12Parser();
        p12.load("c:/testData/lijian.pfx");
        Pfx pfx = p12.getPfx();
        byte decode[] = envelopedDataParser.decodeEnvelop(envelopedData, pfx, "1".toCharArray());
        Assert.assertTrue(isEqualArray(decode, SOURCE));
    }

    public void testDecodeFromC_RC2()
        throws Exception
    {
        FileInputStream fin = new FileInputStream("c:/envelopedData_rc2.txt.jef");
        byte data[] = new byte[fin.available()];
        fin.read(data);
        fin.close();
        data = Parser.convertBase64(data);
        data = Base64.decode(data);
        ASN1Sequence seq = (ASN1Sequence)Parser.writeBytes2DERObj(data);
        ContentInfo contentInfo = ContentInfo.getInstance(seq);
        EnvelopedData envelopedData = EnvelopedData.getInstance(contentInfo.getContent());
        PKCS12Parser p12 = new PKCS12Parser();
        p12.load("c:/testData/lijian.pfx");
        Pfx pfx = p12.getPfx();
        byte decode[] = envelopedDataParser.decodeEnvelop(envelopedData, pfx, "1".toCharArray());
        Assert.assertTrue(isEqualArray(decode, SOURCE));
    }

    private byte[] format64(byte base64Data[])
        throws Exception
    {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        for(int i = 0; i < base64Data.length; i++)
        {
            if(i != 0 && i % 64 == 0)
                bos.write("\n".getBytes());
            bos.write(base64Data[i]);
        }

        return bos.toByteArray();
    }

    private boolean isEqualArray(byte a[], byte b[])
    {
        if(a.length != b.length)
            return false;
        for(int i = 0; i < a.length; i++)
            if(a[i] != b[i])
                return false;

        return true;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -