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

📄 digesteddataparser.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:   DigestedDataParser.java

package jit.asn1parser.pkcs.pkcs7;

import jit.asn1.*;
import jit.asn1.pkcs.PKCSObjectIdentifiers;
import jit.asn1.pkcs.pkcs7.*;
import jit.asn1.x509.AlgorithmIdentifier;
import jit.asn1parser.Parser;
import jit.jcrypto.Session;
import jit.jcrypto.soft.JMechanism;
import jit.math.BigInteger;

public class DigestedDataParser
{

    private Session session;

    public DigestedDataParser(Session session)
    {
        this.session = null;
        this.session = session;
    }

    public DigestedData generateDigestedData(boolean withContent, byte data[], DERObjectIdentifier digestAlg)
        throws Exception
    {
        return generateDigestedData(withContent, PKCSObjectIdentifiers.data, data, digestAlg);
    }

    public DigestedData generateDigestedData(boolean withContent, DERObjectIdentifier contentType, byte data[], DERObjectIdentifier digestAlg)
        throws Exception
    {
        DERInteger version = new DERInteger(0);
        AlgorithmIdentifier alg = new AlgorithmIdentifier(digestAlg, null);
        DEROctetString oct = new DEROctetString(data);
        ContentInfo contentInfo = null;
        if(withContent)
            contentInfo = new ContentInfo(contentType, oct);
        else
            contentInfo = new ContentInfo(contentType);
        JMechanism mechanism = null;
        if(digestAlg.equals(PKCSObjectIdentifiers.md2))
            mechanism = new JMechanism(512);
        else
        if(digestAlg.equals(PKCSObjectIdentifiers.md5))
            mechanism = new JMechanism(528);
        else
        if(digestAlg.equals(PKCSObjectIdentifiers.sha1))
            mechanism = new JMechanism(544);
        else
            throw new Exception("not support digest algorithm:".concat(String.valueOf(String.valueOf(digestAlg.getId()))));
        byte digest[] = session.digest(mechanism, data);
        DEROctetString digestOct = new DEROctetString(digest);
        return new DigestedData(version, alg, contentInfo, digestOct);
    }

    public DigestedData generateDigestedData(boolean withContent, DEREncodable contentObj, DERObjectIdentifier digestAlg)
        throws Exception
    {
        DERObjectIdentifier contentType = null;
        if(contentObj instanceof SignedData)
            contentType = PKCSObjectIdentifiers.signedData;
        else
        if(contentObj instanceof EnvelopedData)
            contentType = PKCSObjectIdentifiers.envelopedData;
        else
        if(contentObj instanceof SignedAndEnvelopedData)
            contentType = PKCSObjectIdentifiers.signedAndEnvelopedData;
        else
        if(contentObj instanceof DigestedData)
            contentType = PKCSObjectIdentifiers.digestedData;
        else
        if(contentObj instanceof EncryptedData)
            contentType = PKCSObjectIdentifiers.encryptedData;
        else
            contentType = PKCSObjectIdentifiers.data;
        byte data[] = null;
        if(contentType.equals(PKCSObjectIdentifiers.data))
            data = ((ASN1OctetString)contentObj).getOctets();
        else
            data = Parser.writeDERObj2Bytes(contentObj.getDERObject());
        DERInteger version = new DERInteger(0);
        AlgorithmIdentifier alg = new AlgorithmIdentifier(digestAlg, null);
        ContentInfo contentInfo = null;
        if(withContent)
            contentInfo = new ContentInfo(contentType, contentObj);
        else
            contentInfo = new ContentInfo(contentType);
        JMechanism mechanism = null;
        if(digestAlg.equals(PKCSObjectIdentifiers.md2))
            mechanism = new JMechanism(512);
        else
        if(digestAlg.equals(PKCSObjectIdentifiers.md5))
            mechanism = new JMechanism(528);
        else
        if(digestAlg.equals(PKCSObjectIdentifiers.sha1))
            mechanism = new JMechanism(544);
        else
            throw new Exception("not support digest algorithm:".concat(String.valueOf(String.valueOf(digestAlg.getId()))));
        byte digest[] = session.digest(mechanism, data);
        DEROctetString digestOct = new DEROctetString(digest);
        return new DigestedData(version, alg, contentInfo, digestOct);
    }

    public boolean verifyDigestedData(DigestedData digestedData)
        throws Exception
    {
        int version = digestedData.getVersion().getValue().intValue();
        DERObjectIdentifier digestAlg = digestedData.getDigestAlgorithm().getObjectId();
        JMechanism mechanism = null;
        if(digestAlg.equals(PKCSObjectIdentifiers.md2))
            mechanism = new JMechanism(512);
        else
        if(digestAlg.equals(PKCSObjectIdentifiers.md5))
            mechanism = new JMechanism(528);
        else
        if(digestAlg.equals(PKCSObjectIdentifiers.sha1))
            mechanism = new JMechanism(544);
        else
            throw new Exception("not support digest algorithm:".concat(String.valueOf(String.valueOf(digestAlg.getId()))));
        byte digest[] = digestedData.getDigest().getOctets();
        ContentInfo contentInfo = digestedData.getContentInfo();
        byte data[] = null;
        if(contentInfo.getContentType().equals(PKCSObjectIdentifiers.data))
            data = ((ASN1OctetString)contentInfo.getContent()).getOctets();
        else
            data = Parser.writeDERObj2Bytes(contentInfo.getContent().getDERObject());
        byte myDigest[] = session.digest(mechanism, data);
        if(digest.length != myDigest.length)
            return false;
        for(int i = 0; i < digest.length; i++)
            if(digest[i] != myDigest[i])
                return false;

        return true;
    }

    public boolean verifyDigestedData(DigestedData digestedData, byte content[])
        throws Exception
    {
        int version = digestedData.getVersion().getValue().intValue();
        DERObjectIdentifier digestAlg = digestedData.getDigestAlgorithm().getObjectId();
        JMechanism mechanism = null;
        if(digestAlg.equals(PKCSObjectIdentifiers.md2))
            mechanism = new JMechanism(512);
        else
        if(digestAlg.equals(PKCSObjectIdentifiers.md5))
            mechanism = new JMechanism(528);
        else
        if(digestAlg.equals(PKCSObjectIdentifiers.sha1))
            mechanism = new JMechanism(544);
        else
            throw new Exception("not support digest algorithm:".concat(String.valueOf(String.valueOf(digestAlg.getId()))));
        byte digest[] = digestedData.getDigest().getOctets();
        byte myDigest[] = session.digest(mechanism, content);
        if(digest.length != myDigest.length)
            return false;
        for(int i = 0; i < digest.length; i++)
            if(digest[i] != myDigest[i])
                return false;

        return true;
    }

    public ContentInfo generateDigestedDataContent(DigestedData digestedData)
    {
        return new ContentInfo(PKCSObjectIdentifiers.digestedData, digestedData);
    }

    public DigestedData getDigestedDataFromContent(ContentInfo contentInfo)
        throws Exception
    {
        if(!contentInfo.getContentType().equals(PKCSObjectIdentifiers.digestedData))
            throw new Exception("the content type is not DigestedData.");
        else
            return DigestedData.getInstance(contentInfo.getContent());
    }
}

⌨️ 快捷键说明

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