📄 testsigandenvelopparser.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: TestSigAndEnvelopParser.java
package jit.testsuit;
import java.io.*;
import jit.asn1.ASN1OctetString;
import jit.asn1.DERObjectIdentifier;
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.SigAndEnvelopParser;
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 TestSigAndEnvelopParser extends TestCase
{
private SigAndEnvelopParser sigAndEnvelopParser;
private Session session;
static final byte SOURCE[] = "吉大正元签名数字信封测试程序test2".getBytes();
public TestSigAndEnvelopParser(String name)
{
super(name);
sigAndEnvelopParser = null;
session = null;
}
protected void setUp()
throws Exception
{
super.setUp();
JCrypto jcrypto = new JCrypto();
jcrypto.initialize(0, null);
session = jcrypto.openSession(0);
sigAndEnvelopParser = new SigAndEnvelopParser(session);
}
protected void tearDown()
throws Exception
{
sigAndEnvelopParser = null;
session = null;
super.tearDown();
}
public void testGenerateSigAndEnvelop_extendC_simple()
throws Exception
{
PKCS12Parser p12 = new PKCS12Parser();
p12.load("c:/testData/lijian.pfx");
Pfx pfx = p12.getPfx();
X509Cert cert = new X509Cert("c:/testData/lijian.cer");
SignedAndEnvelopedData sigAndEnvelop = sigAndEnvelopParser.generateSigAndEnvelop_extendC(PKCSObjectIdentifiers.data, SOURCE, cert, pfx, "1".toCharArray());
byte decode[] = sigAndEnvelopParser.decodeSigAndEnvelop_extendC(sigAndEnvelop, pfx, "1".toCharArray(), cert);
Assert.assertTrue(isEqualArray(decode, SOURCE));
ContentInfo contentInfo = sigAndEnvelopParser.generateSigAndEnvelopContent(sigAndEnvelop);
byte data[] = Parser.writeDERObj2Bytes(contentInfo.getDERObject());
data = Base64.encode(data);
data = format64(data);
FileOutputStream fos = new FileOutputStream("c:/sigAndEnvelop_simple.txt.jwf");
fos.write(data);
fos.close();
}
public void testGenerateSigAndEnvelop_extendC_RSA_MD2()
throws Exception
{
PKCS12Parser p12 = new PKCS12Parser();
p12.load("c:/testData/lijian.pfx");
Pfx pfx = p12.getPfx();
X509Cert cert = new X509Cert("c:/testData/lijian.cer");
SignedAndEnvelopedData signedAndEnvelopedData = genSigAndEnv(PKCSObjectIdentifiers.md2WithRSAEncryption);
byte decode[] = sigAndEnvelopParser.decodeSigAndEnvelop_extendC(signedAndEnvelopedData, pfx, "1".toCharArray(), cert);
Assert.assertTrue(isEqualArray(decode, SOURCE));
ContentInfo contentInfo = sigAndEnvelopParser.generateSigAndEnvelopContent(signedAndEnvelopedData);
byte data[] = Parser.writeDERObj2Bytes(contentInfo.getDERObject());
data = Base64.encode(data);
data = format64(data);
FileOutputStream fos = new FileOutputStream("c:/sigAndEnvelop_RSA_MD2.txt.jwf");
fos.write(data);
fos.close();
}
public void testGenerateSigAndEnvelop_extendC_RSA_MD5()
throws Exception
{
PKCS12Parser p12 = new PKCS12Parser();
p12.load("c:/testData/lijian.pfx");
Pfx pfx = p12.getPfx();
X509Cert cert = new X509Cert("c:/testData/lijian.cer");
SignedAndEnvelopedData signedAndEnvelopedData = genSigAndEnv(PKCSObjectIdentifiers.md5WithRSAEncryption);
byte decode[] = sigAndEnvelopParser.decodeSigAndEnvelop_extendC(signedAndEnvelopedData, pfx, "1".toCharArray(), cert);
Assert.assertTrue(isEqualArray(decode, SOURCE));
ContentInfo contentInfo = sigAndEnvelopParser.generateSigAndEnvelopContent(signedAndEnvelopedData);
byte data[] = Parser.writeDERObj2Bytes(contentInfo.getDERObject());
data = Base64.encode(data);
data = format64(data);
FileOutputStream fos = new FileOutputStream("c:/sigAndEnvelop_RSA_MD5.txt.jwf");
fos.write(data);
fos.close();
}
public void testGenerateSigAndEnvelop_extendC_RSA_SHA1()
throws Exception
{
PKCS12Parser p12 = new PKCS12Parser();
p12.load("c:/testData/lijian.pfx");
Pfx pfx = p12.getPfx();
X509Cert cert = new X509Cert("c:/testData/lijian.cer");
SignedAndEnvelopedData signedAndEnvelopedData = genSigAndEnv(PKCSObjectIdentifiers.sha1WithRSAEncryption);
byte decode[] = sigAndEnvelopParser.decodeSigAndEnvelop_extendC(signedAndEnvelopedData, pfx, "1".toCharArray(), cert);
Assert.assertTrue(isEqualArray(decode, SOURCE));
ContentInfo contentInfo = sigAndEnvelopParser.generateSigAndEnvelopContent(signedAndEnvelopedData);
byte data[] = Parser.writeDERObj2Bytes(contentInfo.getDERObject());
data = Base64.encode(data);
data = format64(data);
FileOutputStream fos = new FileOutputStream("c:/sigAndEnvelop_RSA_SHA1.txt.jwf");
fos.write(data);
fos.close();
}
private SignedAndEnvelopedData genSigAndEnv(DERObjectIdentifier signatureAlgOID)
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();
EncryptedContentInfo encryptedContentInfo = sigAndEnvelopParser.generateEncryptedContentInfo(PKCSObjectIdentifiers.data, PKCSObjectIdentifiers.des3CBCEncryption, SOURCE, contentEncryptionKey);
SubjectPublicKeyInfo spki = cert.getSubjectPublicKeyInfo();
SPKIParser spkiParser = new SPKIParser();
JKey recipientPubKey = spkiParser.getPublicKey(spki);
BigInteger sn = cert.getSerialNumber();
X509Name issuer = cert.getIssuer();
IssuerAndSerialNumber recipientIssuerAndSN = new IssuerAndSerialNumber(issuer, sn);
PKCS12Parser p12Parser = new PKCS12Parser();
p12Parser.load(pfx);
p12Parser.decrypt("1".toCharArray());
JKey singnatureKey = p12Parser.getPrivateKey();
X509Cert sCert[] = p12Parser.getCertificates();
sn = sCert[0].getSerialNumber();
issuer = sCert[0].getIssuer();
IssuerAndSerialNumber signerIssuerAndSN = 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 = sigAndEnvelopParser.generateRecipientInfo(recipientIssuerAndSN, keyEncryptionAlg, bContentEncryptionKey, recipientPubKey);
SignerInfo signerInfo = sigAndEnvelopParser.generateSignerInfo_extendC(encryptedContentInfo.getEncryptedContent().getOctets(), signerIssuerAndSN, signatureAlgOID, singnatureKey);
AlgorithmIdentifier digestAlg = null;
if(signatureAlgOID.equals(PKCSObjectIdentifiers.md2WithRSAEncryption))
{
System.out.println("sigAndEnv: RSA_MD2");
digestAlg = new AlgorithmIdentifier(PKCSObjectIdentifiers.md2);
} else
if(signatureAlgOID.equals(PKCSObjectIdentifiers.md5WithRSAEncryption))
{
System.out.println("sigAndEnv: RSA_MD5");
digestAlg = new AlgorithmIdentifier(PKCSObjectIdentifiers.md5);
} else
if(signatureAlgOID.equals(PKCSObjectIdentifiers.sha1WithRSAEncryption) || signatureAlgOID.equals(PKCSObjectIdentifiers.sha1WithECEncryption))
{
System.out.println("sigAndEnv: RSA_SHA1/ECC_SHA1");
digestAlg = new AlgorithmIdentifier(PKCSObjectIdentifiers.sha1);
}
return sigAndEnvelopParser.generateSigAndEnvelop(recipientInfo, digestAlg, encryptedContentInfo, null, null, signerInfo);
}
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 + -