rsa p7 info 通过
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
const crypto = require('../src/crypto');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
// 测试用例
|
||||
console.log('=== 开始测试 crypto 模块 ===');
|
||||
|
||||
// 测试 1: getInfoFromPKCS7 接口(RSA)
|
||||
try {
|
||||
console.log('\n1. 测试 getInfoFromPKCS7 接口(RSA)');
|
||||
// 使用真实的 PKCS7 签名数据进行测试
|
||||
const mockP7Sign = `-----BEGIN PKCS7-----
|
||||
MIIDNwYJKoZIhvcNAQcCoIIDKDCCAyQCAQExDzANBglghkgBZQMEAgEFADA8Bgkq
|
||||
hkiG9w0BBwGgLwQtVGhpcyBpcyB0aGUgdGVzdCBjb250ZW50IGZvciBQS0NTNyBz
|
||||
aWduYXR1cmUuoIIB5jCCAeIwggFLoAMCAQICAQEwDQYJKoZIhvcNAQELBQAwNzEZ
|
||||
MBcGA1UEAxMQdGVzdC5leGFtcGxlLmNvbTEaMBgGA1UEChMRVGVzdCBPcmdhbml6
|
||||
YXRpb24wHhcNMjYwNDA0MDAxMDIyWhcNMjcwNDA0MDAxMDIyWjA3MRkwFwYDVQQD
|
||||
ExB0ZXN0LmV4YW1wbGUuY29tMRowGAYDVQQKExFUZXN0IE9yZ2FuaXphdGlvbjCB
|
||||
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1e+05xb8T3Lo2v9MZQen5HYffpnc
|
||||
yY9mnT/ygvfxZNM9TeYkq4fACiuS99FONnlHFQdlXEPJluIk1NBFUoLpehAbzOSY
|
||||
Fu0WEjBOVJIg9FIWm7TUojU8yvPsfPGFYTEGEOGAse8AfHw4pl+w5SvxQUF8f2jB
|
||||
XsRY0MrDyb07xC8CAwEAATANBgkqhkiG9w0BAQsFAAOBgQAOEttx/p3xosIm/8sM
|
||||
kIaxR2c/fbYoMbBsX+geaiRu+xNOItbtQpGOhW6Ql981c3EwIjyd34KavplofZIr
|
||||
Slj4jHQFySZaJkegHY+LCAQz9GEg2TMke3MsPJ7nSZS7MUqB2AQt1tLuiXUuRh3V
|
||||
jF4yiqi6lGVmvPJf+y1GXk47KjGB5TCB4gIBATA8MDcxGTAXBgNVBAMTEHRlc3Qu
|
||||
ZXhhbXBsZS5jb20xGjAYBgNVBAoTEVRlc3QgT3JnYW5pemF0aW9uAgEBMA0GCWCG
|
||||
SAFlAwQCAQUAMA0GCSqGSIb3DQEBAQUABIGAMxSC81vzjSiZcJTcSicgCG9879mu
|
||||
p/bikqdHZPyF8UgABjikXXoVJ9IClFRd5/3wRf8ez+hwnxKR8j1vAsDI7U6dXJtr
|
||||
wp0aO7Ua6ecKhI5V0F8nUg5CjEK9FR8vNg0Il8U5AXDuan0iYKvguhWkiuJlvQlV
|
||||
X9ncPP4VRERPw8U=
|
||||
-----END PKCS7-----`;
|
||||
|
||||
const result = crypto.getInfoFromPKCS7(mockP7Sign);
|
||||
|
||||
// 将 subject 和 issuer 转换为 DN 格式
|
||||
function toDN(attrs) {
|
||||
if (!attrs) return '';
|
||||
return attrs.map(attr => `${attr.name}=${attr.value}`).join(', ');
|
||||
}
|
||||
|
||||
console.log('测试结果:');
|
||||
console.log(' cert:');
|
||||
console.log(' subject:', toDN(result.cert?.subject));
|
||||
console.log(' issuer:', toDN(result.cert?.issuer));
|
||||
console.log(' serialNumber:', result.cert?.serialNumber);
|
||||
console.log(' notBefore:', result.cert?.notBefore);
|
||||
console.log(' notAfter:', result.cert?.notAfter);
|
||||
console.log(' pem:');
|
||||
console.log(result.cert?.pem);
|
||||
console.log(' publicKey:');
|
||||
console.log(result.publicKey);
|
||||
console.log(' signature (hex):');
|
||||
console.log(result.signatureHex);
|
||||
console.log('✓ getInfoFromPKCS7 接口(RSA)测试通过');
|
||||
} catch (error) {
|
||||
console.error('✗ getInfoFromPKCS7 接口(RSA)测试失败:', error.message);
|
||||
console.error(error.stack);
|
||||
}
|
||||
|
||||
// 测试 2: getInfoFromPKCS7 接口(SM2)
|
||||
try {
|
||||
console.log('\n2. 测试 getInfoFromPKCS7 接口(SM2)');
|
||||
// 这里应该使用实际的 PKCS7 签名数据进行测试
|
||||
// 由于没有实际数据,这里使用模拟数据
|
||||
const mockP7Sign = 'MIIBpAYJKoZIhvcNAQcCoIIBmzCCAZ8CAQExADALBgkqhkiG9w0BBwGgggLuMIIC3wIBADCCAbkGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQM9Q7c7X7X7X7X7X7X7X7X7AgEQgIID+DCCA+SgAwIBAgIUY1234567890abcdefghijklmnopqrstuvwxyzMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFI1234567890abcdefghijklmnopqrstuvwxyzMB8GA1UdIwQYMBaAFJ1234567890abcdefghijklmnopqrstuvwxyzMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAj1234567890abcdefghijklmnopqrstuvwxyz';
|
||||
const result = crypto.getInfoFromPKCS7(mockP7Sign);
|
||||
console.log('测试结果:', result);
|
||||
console.log('✓ getInfoFromPKCS7 接口(SM2)测试通过');
|
||||
} catch (error) {
|
||||
console.error('✗ getInfoFromPKCS7 接口(SM2)测试失败:', error.message);
|
||||
}
|
||||
|
||||
// 测试 3: verifyPKCS7 接口(RSA)
|
||||
try {
|
||||
console.log('\n3. 测试 verifyPKCS7 接口(RSA)');
|
||||
// 这里应该使用实际的 PKCS7 签名数据和原始数据进行测试
|
||||
// 由于没有实际数据,这里使用模拟数据
|
||||
const mockP7Sign = 'MIICdwYJKoZIhvcNAQcCoIICZzCCAm8CAQExADALBgkqhkiG9w0BBwGgggLsMIIC3wIBADCCAbkGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQM9Q7c7X7X7X7X7X7X7X7X7AgEQgIID+DCCA+SgAwIBAgIUY1234567890abcdefghijklmnopqrstuvwxyzMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFI1234567890abcdefghijklmnopqrstuvwxyzMB8GA1UdIwQYMBaAFJ1234567890abcdefghijklmnopqrstuvwxyzMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAj1234567890abcdefghijklmnopqrstuvwxyz';
|
||||
const mockOriginalData = 'test data';
|
||||
const result = crypto.verifyPKCS7(mockP7Sign, mockOriginalData);
|
||||
console.log('测试结果:', result);
|
||||
console.log('✓ verifyPKCS7 接口(RSA)测试通过');
|
||||
} catch (error) {
|
||||
console.error('✗ verifyPKCS7 接口(RSA)测试失败:', error.message);
|
||||
}
|
||||
|
||||
// 测试 4: verifyPKCS7 接口(SM2)
|
||||
try {
|
||||
console.log('\n4. 测试 verifyPKCS7 接口(SM2)');
|
||||
// 这里应该使用实际的 PKCS7 签名数据和原始数据进行测试
|
||||
// 由于没有实际数据,这里使用模拟数据
|
||||
const mockP7Sign = 'MIIDKgYKKoEcz1UGAQQCAqCCAxowggMWAgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoqgRzPVQYBBAIBoIICNzCCAjMwggHWoAMCAQICBgD1tfRoKTAMBggqgRzPVQGDdQUAMEAxCzAJBgNVBAYTAkNOMQ8wDQYDVQQKDAZQQkNDUkMxIDAeBgNVBAMMF1BCQ0NSQyBTTTIgT3BlcmF0aW9uIENBMB4XDTI2MDQwMjA4MDEzOVoXDTM2MDMzMDA4MDEzOVowTTELMAkGA1UEBhMCQ04xDzANBgNVBAoMBlBCQ0NSQzEtMCsGA1UEAwwkOTRmMWY5MzgtZjBiZC00NzYyLTkyOGUtZjY4YTdjY2UxNDFkMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEu3dU5Vn20VjVL9xGCCRPB/EpATY6HW24+zIZv46Cfv0R2PGM+ZJs/dYarw7qJCnpIbe5T0PKmyyJITNVrVnnMaOBrDCBqTAfBgNVHSMEGDAWgBRUqfVQHMpD+o+YdrPK1JlRJL757zAJBgNVHRMEAjAAME8GA1UdHwRIMEYwRKBCoECkPjA8MQ4wDAYDVQQDDAVjcmw3MTEMMAoGA1UECwwDY3JsMQ8wDQYDVQQKDAZQQkNDUkMxCzAJBgNVBAYTAkNOMAsGA1UdDwQEAwIHgDAdBgNVHQ4EFgQU5bG6U0lYzWtkPJE74M/3HdafKKcwDAYIKoEcz1UBg3UFAANJADBGAiEAuLTE36/Eobcui23bFiPvOU4MOT0O0r9SyyHZ1JuvLwMCIQCejuSk03jyUAkbh1SaPx5n7WlDjI6tx9v9RJ7iw5rlojGBtzCBtAIBATBKMEAxCzAJBgNVBAYTAkNOMQ8wDQYDVQQKDAZQQkNDUkMxIDAeBgNVBAMMF1BCQ0NSQyBTTTIgT3BlcmF0aW9uIENBAgYA9bX0aCkwDAYIKoEcz1UBgxEFADANBgkqgRzPVQGCLQEFAARGMEQCIALTgWMD7io1JHfzInBwzDQpe9bonchuLFSED//JLDtnAiBmEUtr+ssAQIzFG4wY0CAj9QZxhENyCU2UYL1fhaysUA==';
|
||||
const mockOriginalData = 'QDJNHHVB_FWQ';
|
||||
const result = crypto.verifyPKCS7(mockP7Sign, mockOriginalData);
|
||||
console.log('测试结果:', result);
|
||||
console.log('✓ verifyPKCS7 接口(SM2)测试通过');
|
||||
} catch (error) {
|
||||
console.error('✗ verifyPKCS7 接口(SM2)测试失败:', error.message);
|
||||
}
|
||||
|
||||
// 测试 5: pkcs7Sign 接口(RSA)
|
||||
try {
|
||||
console.log('\n5. 测试 pkcs7Sign 接口(RSA)');
|
||||
// 这里应该使用实际的私钥进行测试
|
||||
// 由于没有实际数据,这里使用模拟数据
|
||||
const mockData = 'test data';
|
||||
const mockPrivateKey = '-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEA1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz-----END RSA PRIVATE KEY-----';
|
||||
const result = crypto.pkcs7Sign(mockData, mockPrivateKey);
|
||||
console.log('测试结果:', result.toString('base64'));
|
||||
console.log('✓ pkcs7Sign 接口(RSA)测试通过');
|
||||
} catch (error) {
|
||||
console.error('✗ pkcs7Sign 接口(RSA)测试失败:', error.message);
|
||||
}
|
||||
|
||||
// 测试 6: pkcs7Sign 接口(SM2)
|
||||
try {
|
||||
console.log('\n6. 测试 pkcs7Sign 接口(SM2)');
|
||||
// 这里应该使用实际的私钥进行测试
|
||||
// 由于没有实际数据,这里使用模拟数据
|
||||
const mockData = 'test data';
|
||||
const mockPrivateKey = '1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdef';
|
||||
const result = crypto.pkcs7Sign(mockData, mockPrivateKey);
|
||||
console.log('测试结果:', result.toString('base64'));
|
||||
console.log('✓ pkcs7Sign 接口(SM2)测试通过');
|
||||
} catch (error) {
|
||||
console.error('✗ pkcs7Sign 接口(SM2)测试失败:', error.message);
|
||||
}
|
||||
|
||||
console.log('\n=== 测试完成 ===');
|
||||
@@ -0,0 +1,60 @@
|
||||
const forge = require('node-forge');
|
||||
|
||||
const mockP7Sign = `-----BEGIN PKCS7-----
|
||||
MIIDNwYJKoZIhvcNAQcCoIIDKDCCAyQCAQExDzANBglghkgBZQMEAgEFADA8Bgkq
|
||||
hkiG9w0BBwGgLwQtVGhpcyBpcyB0aGUgdGVzdCBjb250ZW50IGZvciBQS0NTNyBz
|
||||
aWduYXR1cmUuoIIB5jCCAeIwggFLoAMCAQICAQEwDQYJKoZIhvcNAQELBQAwNzEZ
|
||||
MBcGA1UEAxMQdGVzdC5leGFtcGxlLmNvbTEaMBgGA1UEChMRVGVzdCBPcmdhbml6
|
||||
YXRpb24wHhcNMjYwNDA0MDAxMDIyWhcNMjcwNDA0MDAxMDIyWjA3MRkwFwYDVQQD
|
||||
ExB0ZXN0LmV4YW1wbGUuY29tMRowGAYDVQQKExFUZXN0IE9yZ2FuaXphdGlvbjCB
|
||||
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1e+05xb8T3Lo2v9MZQen5HYffpnc
|
||||
yY9mnT/ygvfxZNM9TeYkq4fACiuS99FONnlHFQdlXEPJluIk1NBFUoLpehAbzOSY
|
||||
Fu0WEjBOVJIg9FIWm7TUojU8yvPsfPGFYTEGEOGAse8AfHw4pl+w5SvxQUF8f2jB
|
||||
XsRY0MrDyb07xC8CAwEAATANBgkqhkiG9w0BAQsFAAOBgQAOEttx/p3xosIm/8sM
|
||||
kIaxR2c/fbYoMbBsX+geaiRu+xNOItbtQpGOhW6Ql981c3EwIjyd34KavplofZIr
|
||||
Slj4jHQFySZaJkegHY+LCAQz9GEg2TMke3MsPJ7nSZS7MUqB2AQt1tLuiXUuRh3V
|
||||
jF4yiqi6lGVmvPJf+y1GXk47KjGB5TCB4gIBATA8MDcxGTAXBgNVBAMTEHRlc3Qu
|
||||
ZXhhbXBsZS5jb20xGjAYBgNVBAoTEVRlc3QgT3JnYW5pemF0aW9uAgEBMA0GCWCG
|
||||
SAFlAwQCAQUAMA0GCSqGSIb3DQEBAQUABIGAMxSC81vzjSiZcJTcSicgCG9879mu
|
||||
p/bikqdHZPyF8UgABjikXXoVJ9IClFRd5/3wRf8ez+hwnxKR8j1vAsDI7U6dXJtr
|
||||
wp0aO7Ua6ecKhI5V0F8nUg5CjEK9FR8vNg0Il8U5AXDuan0iYKvguhWkiuJlvQlV
|
||||
X9ncPP4VRERPw8U=
|
||||
-----END PKCS7-----`;
|
||||
|
||||
const p7 = forge.pkcs7.messageFromPem(mockP7Sign);
|
||||
|
||||
console.log('=== p7.rawCapture ===');
|
||||
console.log('rawCapture keys:', Object.keys(p7.rawCapture || {}));
|
||||
|
||||
if (p7.rawCapture) {
|
||||
for (const key of Object.keys(p7.rawCapture)) {
|
||||
const value = p7.rawCapture[key];
|
||||
if (Buffer.isBuffer(value) || value instanceof Uint8Array) {
|
||||
console.log(`${key}: Buffer/Uint8Array, length=${value.length}`);
|
||||
console.log(`${key} hex:`, Buffer.from(value).toString('hex').substring(0, 100) + '...');
|
||||
} else if (typeof value === 'string') {
|
||||
console.log(`${key}: string, length=${value.length}`);
|
||||
console.log(`${key} content:`, value.substring(0, 100) + '...');
|
||||
} else if (value && typeof value === 'object') {
|
||||
console.log(`${key}: object, keys=${Object.keys(value).join(',')}`);
|
||||
} else {
|
||||
console.log(`${key}:`, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
console.log('\n=== p7.signerInfos ===');
|
||||
console.log('signerInfos:', p7.signerInfos);
|
||||
|
||||
console.log('\n=== p7.signers ===');
|
||||
console.log('signers:', p7.signers);
|
||||
|
||||
console.log('\n=== p7.certificates ===');
|
||||
if (p7.certificates && p7.certificates.length > 0) {
|
||||
const cert = p7.certificates[0];
|
||||
console.log('cert publicKey:', cert.publicKey ? 'exists' : 'null');
|
||||
if (cert.publicKey) {
|
||||
console.log('publicKey type:', typeof cert.publicKey);
|
||||
console.log('publicKey keys:', Object.keys(cert.publicKey));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
const forge = require('node-forge');
|
||||
|
||||
console.log('=== 生成测试用的 PKCS7 签名 ===');
|
||||
|
||||
try {
|
||||
// 1. 生成 RSA 密钥对
|
||||
console.log('生成 RSA 密钥对...');
|
||||
const keys = forge.pki.rsa.generateKeyPair(1024);
|
||||
const privateKey = keys.privateKey;
|
||||
const publicKey = keys.publicKey;
|
||||
|
||||
// 2. 创建自签名证书
|
||||
console.log('创建自签名证书...');
|
||||
const cert = forge.pki.createCertificate();
|
||||
cert.publicKey = publicKey;
|
||||
cert.serialNumber = '01';
|
||||
cert.validity.notBefore = new Date();
|
||||
cert.validity.notAfter = new Date();
|
||||
cert.validity.notAfter.setFullYear(cert.validity.notBefore.getFullYear() + 1);
|
||||
|
||||
const attrs = [
|
||||
{ name: 'commonName', value: 'test.example.com' },
|
||||
{ name: 'organizationName', value: 'Test Organization' }
|
||||
];
|
||||
cert.setSubject(attrs);
|
||||
cert.setIssuer(attrs);
|
||||
cert.sign(privateKey, forge.md.sha256.create());
|
||||
|
||||
// 3. 创建 PKCS7 签名
|
||||
console.log('创建 PKCS7 签名...');
|
||||
const p7 = forge.pkcs7.createSignedData();
|
||||
p7.content = forge.util.createBuffer('This is the test content for PKCS7 signature.');
|
||||
p7.addCertificate(cert);
|
||||
p7.addSigner({
|
||||
key: privateKey,
|
||||
certificate: cert,
|
||||
digestAlgorithm: forge.pki.oids.sha256
|
||||
});
|
||||
p7.sign();
|
||||
|
||||
// 4. 转换为 PEM 格式
|
||||
const pem = forge.pkcs7.messageToPem(p7);
|
||||
|
||||
console.log('\n=== 生成的 PKCS7 签名 PEM 格式 ===');
|
||||
console.log(pem);
|
||||
|
||||
console.log('\n=== 提取 base64 部分 ===');
|
||||
const base64 = pem.replace(/-----BEGIN PKCS7-----\n?/, '')
|
||||
.replace(/-----END PKCS7-----\n?/, '')
|
||||
.replace(/\n/g, '');
|
||||
console.log(base64);
|
||||
|
||||
console.log('\n=== 完成 ===');
|
||||
} catch (error) {
|
||||
console.error('生成失败:', error);
|
||||
console.error(error.stack);
|
||||
}
|
||||
Reference in New Issue
Block a user