📄 digesteddataparser.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 + -