@pokash/n8n-nodes-ksef 0.2.7 → 0.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -17,14 +17,15 @@ export declare function parsePfxCertificate(pfxBase64: string, password?: string
|
|
|
17
17
|
*/
|
|
18
18
|
export declare function parsePemCertificate(certificatePem: string, privateKeyPem: string, keyPassword?: string): IParsedCertificate;
|
|
19
19
|
/**
|
|
20
|
-
* Build
|
|
20
|
+
* Build AuthTokenRequest XML document for XAdES signing (API v2)
|
|
21
|
+
* Schema: http://ksef.mf.gov.pl/auth/token/2.0
|
|
21
22
|
*/
|
|
22
|
-
export declare function
|
|
23
|
+
export declare function buildAuthTokenRequestXml(nip: string, challenge: string, subjectIdentifierType?: 'certificateSubject' | 'certificateFingerprint'): string;
|
|
23
24
|
/**
|
|
24
25
|
* Sign XML document with XAdES-BES signature (supports RSA and EC keys)
|
|
25
26
|
*/
|
|
26
27
|
export declare function signXmlWithXades(xmlContent: string, privateKey: string, certificate: string): string;
|
|
27
28
|
/**
|
|
28
|
-
* Generate XAdES-BES signed document for KSeF authentication
|
|
29
|
+
* Generate XAdES-BES signed document for KSeF authentication (API v2)
|
|
29
30
|
*/
|
|
30
31
|
export declare function generateXadesSignedAuth(nip: string, challenge: string, _timestamp: string, _subjectType: string, privateKey: string, certificate: string): string;
|
|
@@ -35,7 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.parsePfxCertificate = parsePfxCertificate;
|
|
37
37
|
exports.parsePemCertificate = parsePemCertificate;
|
|
38
|
-
exports.
|
|
38
|
+
exports.buildAuthTokenRequestXml = buildAuthTokenRequestXml;
|
|
39
39
|
exports.signXmlWithXades = signXmlWithXades;
|
|
40
40
|
exports.generateXadesSignedAuth = generateXadesSignedAuth;
|
|
41
41
|
const xmlbuilder2_1 = require("xmlbuilder2");
|
|
@@ -143,43 +143,24 @@ function parsePemCertificate(certificatePem, privateKeyPem, keyPassword) {
|
|
|
143
143
|
}
|
|
144
144
|
}
|
|
145
145
|
/**
|
|
146
|
-
* Build
|
|
146
|
+
* Build AuthTokenRequest XML document for XAdES signing (API v2)
|
|
147
|
+
* Schema: http://ksef.mf.gov.pl/auth/token/2.0
|
|
147
148
|
*/
|
|
148
|
-
function
|
|
149
|
+
function buildAuthTokenRequestXml(nip, challenge, subjectIdentifierType = 'certificateSubject') {
|
|
149
150
|
const doc = (0, xmlbuilder2_1.create)({ version: '1.0', encoding: 'UTF-8' })
|
|
150
|
-
.ele('
|
|
151
|
-
'xmlns
|
|
152
|
-
'xmlns:ns3': 'http://ksef.mf.gov.pl/schema/gtw/svc/online/auth/request/2021/10/01/0001',
|
|
153
|
-
'xmlns:ns4': 'http://ksef.mf.gov.pl/schema/gtw/svc/types/2021/10/01/0001',
|
|
151
|
+
.ele('AuthTokenRequest', {
|
|
152
|
+
'xmlns': 'http://ksef.mf.gov.pl/auth/token/2.0',
|
|
154
153
|
})
|
|
155
|
-
.ele('
|
|
156
|
-
.ele('ns4:Challenge')
|
|
154
|
+
.ele('Challenge')
|
|
157
155
|
.txt(challenge)
|
|
158
156
|
.up()
|
|
159
|
-
.ele('
|
|
160
|
-
.ele('
|
|
157
|
+
.ele('ContextIdentifier')
|
|
158
|
+
.ele('Nip')
|
|
161
159
|
.txt(nip)
|
|
162
160
|
.up()
|
|
163
|
-
.ele('ns4:Type')
|
|
164
|
-
.txt('onip')
|
|
165
|
-
.up()
|
|
166
|
-
.up()
|
|
167
|
-
.ele('ns4:DocumentType')
|
|
168
|
-
.ele('ns4:Service')
|
|
169
|
-
.txt('KSeF')
|
|
170
|
-
.up()
|
|
171
|
-
.ele('ns4:FormCode')
|
|
172
|
-
.ele('ns4:SystemCode')
|
|
173
|
-
.txt('FA (2)')
|
|
174
|
-
.up()
|
|
175
|
-
.ele('ns4:SchemaVersion')
|
|
176
|
-
.txt('1-0E')
|
|
177
|
-
.up()
|
|
178
|
-
.ele('ns4:TargetNamespace')
|
|
179
|
-
.txt('http://crd.gov.pl/wzor/2023/06/29/12648/')
|
|
180
|
-
.up()
|
|
181
|
-
.up()
|
|
182
161
|
.up()
|
|
162
|
+
.ele('SubjectIdentifierType')
|
|
163
|
+
.txt(subjectIdentifierType)
|
|
183
164
|
.up()
|
|
184
165
|
.up();
|
|
185
166
|
return doc.end({ prettyPrint: false });
|
|
@@ -209,45 +190,163 @@ function detectKeyType(privateKey) {
|
|
|
209
190
|
const keyObject = crypto.createPrivateKey(privateKey);
|
|
210
191
|
return keyObject.asymmetricKeyType === 'ec' ? 'ec' : 'rsa';
|
|
211
192
|
}
|
|
193
|
+
/**
|
|
194
|
+
* Convert DER-encoded ECDSA signature to XML Signature format (IEEE P1363)
|
|
195
|
+
* ECDSA signatures from Node.js crypto are in DER format (ASN.1)
|
|
196
|
+
* XML Signature expects concatenated r||s format
|
|
197
|
+
*/
|
|
198
|
+
function derToP1363(derSignature, keySize) {
|
|
199
|
+
// Parse DER structure: SEQUENCE { INTEGER r, INTEGER s }
|
|
200
|
+
let offset = 0;
|
|
201
|
+
// Check SEQUENCE tag (0x30)
|
|
202
|
+
if (derSignature[offset++] !== 0x30) {
|
|
203
|
+
throw new Error('Invalid DER signature: expected SEQUENCE');
|
|
204
|
+
}
|
|
205
|
+
// Skip length byte(s)
|
|
206
|
+
let seqLen = derSignature[offset++];
|
|
207
|
+
if (seqLen & 0x80) {
|
|
208
|
+
const lenBytes = seqLen & 0x7f;
|
|
209
|
+
offset += lenBytes;
|
|
210
|
+
}
|
|
211
|
+
// Parse r INTEGER
|
|
212
|
+
if (derSignature[offset++] !== 0x02) {
|
|
213
|
+
throw new Error('Invalid DER signature: expected INTEGER for r');
|
|
214
|
+
}
|
|
215
|
+
let rLen = derSignature[offset++];
|
|
216
|
+
let r = derSignature.subarray(offset, offset + rLen);
|
|
217
|
+
offset += rLen;
|
|
218
|
+
// Parse s INTEGER
|
|
219
|
+
if (derSignature[offset++] !== 0x02) {
|
|
220
|
+
throw new Error('Invalid DER signature: expected INTEGER for s');
|
|
221
|
+
}
|
|
222
|
+
let sLen = derSignature[offset++];
|
|
223
|
+
let s = derSignature.subarray(offset, offset + sLen);
|
|
224
|
+
// Remove leading zeros (ASN.1 integers are signed, so may have leading 0x00)
|
|
225
|
+
while (r.length > keySize && r[0] === 0) {
|
|
226
|
+
r = r.subarray(1);
|
|
227
|
+
}
|
|
228
|
+
while (s.length > keySize && s[0] === 0) {
|
|
229
|
+
s = s.subarray(1);
|
|
230
|
+
}
|
|
231
|
+
// Pad to keySize bytes
|
|
232
|
+
const result = Buffer.alloc(keySize * 2);
|
|
233
|
+
r.copy(result, keySize - r.length);
|
|
234
|
+
s.copy(result, keySize * 2 - s.length);
|
|
235
|
+
return result;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Sign data with ECDSA-SHA256 and return base64 signature in XML Signature format
|
|
239
|
+
*/
|
|
240
|
+
function signEcdsa(data, privateKey) {
|
|
241
|
+
const sign = crypto.createSign('SHA256');
|
|
242
|
+
sign.update(data);
|
|
243
|
+
const derSignature = sign.sign(privateKey);
|
|
244
|
+
// Convert DER to P1363 format (32 bytes for P-256)
|
|
245
|
+
const p1363Signature = derToP1363(derSignature, 32);
|
|
246
|
+
return p1363Signature.toString('base64');
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Simple XML canonicalization (Exclusive C14N approximation)
|
|
250
|
+
* For our use case, we normalize whitespace and attribute order
|
|
251
|
+
*/
|
|
252
|
+
function canonicalizeXml(xmlContent) {
|
|
253
|
+
// Remove XML declaration
|
|
254
|
+
let xml = xmlContent.replace(/<\?xml[^?]*\?>\s*/g, '');
|
|
255
|
+
// Normalize whitespace between tags (but preserve content)
|
|
256
|
+
xml = xml.replace(/>\s+</g, '><');
|
|
257
|
+
// Remove leading/trailing whitespace
|
|
258
|
+
xml = xml.trim();
|
|
259
|
+
return xml;
|
|
260
|
+
}
|
|
212
261
|
/**
|
|
213
262
|
* Sign XML document with XAdES-BES signature (supports RSA and EC keys)
|
|
214
263
|
*/
|
|
215
264
|
function signXmlWithXades(xmlContent, privateKey, certificate) {
|
|
216
|
-
// Detect key type and select appropriate signature algorithm
|
|
217
265
|
const keyType = detectKeyType(privateKey);
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
return
|
|
266
|
+
if (keyType === 'rsa') {
|
|
267
|
+
// Use xml-crypto for RSA (native support)
|
|
268
|
+
const sig = new xml_crypto_1.SignedXml({
|
|
269
|
+
privateKey,
|
|
270
|
+
canonicalizationAlgorithm: 'http://www.w3.org/2001/10/xml-exc-c14n#',
|
|
271
|
+
signatureAlgorithm: 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256',
|
|
272
|
+
getKeyInfoContent: createKeyInfoProvider(certificate).getKeyInfo,
|
|
273
|
+
});
|
|
274
|
+
sig.addReference({
|
|
275
|
+
xpath: '/*',
|
|
276
|
+
digestAlgorithm: 'http://www.w3.org/2001/04/xmlenc#sha256',
|
|
277
|
+
transforms: [
|
|
278
|
+
'http://www.w3.org/2000/09/xmldsig#enveloped-signature',
|
|
279
|
+
'http://www.w3.org/2001/10/xml-exc-c14n#',
|
|
280
|
+
],
|
|
281
|
+
});
|
|
282
|
+
sig.computeSignature(xmlContent, {
|
|
283
|
+
location: {
|
|
284
|
+
reference: '/*',
|
|
285
|
+
action: 'append',
|
|
286
|
+
},
|
|
287
|
+
});
|
|
288
|
+
return sig.getSignedXml();
|
|
289
|
+
}
|
|
290
|
+
// Manual ECDSA signing for EC keys
|
|
291
|
+
return signXmlWithEcdsa(xmlContent, privateKey, certificate);
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Sign XML document with ECDSA-SHA256 (manual implementation)
|
|
295
|
+
*/
|
|
296
|
+
function signXmlWithEcdsa(xmlContent, privateKey, certificate) {
|
|
297
|
+
// Extract certificate content for KeyInfo
|
|
298
|
+
const certContent = certificate
|
|
299
|
+
.replace(/-----BEGIN CERTIFICATE-----/g, '')
|
|
300
|
+
.replace(/-----END CERTIFICATE-----/g, '')
|
|
301
|
+
.replace(/\s/g, '');
|
|
302
|
+
// Calculate digest of the document (after applying transforms)
|
|
303
|
+
// First, canonicalize the document
|
|
304
|
+
const canonicalDoc = canonicalizeXml(xmlContent);
|
|
305
|
+
const digestHash = crypto.createHash('sha256').update(canonicalDoc).digest('base64');
|
|
306
|
+
// Build SignedInfo element
|
|
307
|
+
const signedInfoXml = `<ds:SignedInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">` +
|
|
308
|
+
`<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>` +
|
|
309
|
+
`<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256"/>` +
|
|
310
|
+
`<ds:Reference URI="">` +
|
|
311
|
+
`<ds:Transforms>` +
|
|
312
|
+
`<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>` +
|
|
313
|
+
`<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>` +
|
|
314
|
+
`</ds:Transforms>` +
|
|
315
|
+
`<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>` +
|
|
316
|
+
`<ds:DigestValue>${digestHash}</ds:DigestValue>` +
|
|
317
|
+
`</ds:Reference>` +
|
|
318
|
+
`</ds:SignedInfo>`;
|
|
319
|
+
// Canonicalize SignedInfo and sign it
|
|
320
|
+
const canonicalSignedInfo = canonicalizeXml(signedInfoXml);
|
|
321
|
+
const signatureValue = signEcdsa(canonicalSignedInfo, privateKey);
|
|
322
|
+
// Build complete Signature element
|
|
323
|
+
const signatureXml = `<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">` +
|
|
324
|
+
signedInfoXml +
|
|
325
|
+
`<ds:SignatureValue>${signatureValue}</ds:SignatureValue>` +
|
|
326
|
+
`<ds:KeyInfo>` +
|
|
327
|
+
`<ds:X509Data>` +
|
|
328
|
+
`<ds:X509Certificate>${certContent}</ds:X509Certificate>` +
|
|
329
|
+
`</ds:X509Data>` +
|
|
330
|
+
`</ds:KeyInfo>` +
|
|
331
|
+
`</ds:Signature>`;
|
|
332
|
+
// Insert signature into document (enveloped signature)
|
|
333
|
+
// Find the closing tag of the root element and insert before it
|
|
334
|
+
const lastTagMatch = xmlContent.match(/<\/[^>]+>\s*$/);
|
|
335
|
+
if (!lastTagMatch) {
|
|
336
|
+
throw new Error('Could not find closing tag in XML document');
|
|
337
|
+
}
|
|
338
|
+
const insertPosition = xmlContent.lastIndexOf(lastTagMatch[0]);
|
|
339
|
+
const signedXml = xmlContent.substring(0, insertPosition) +
|
|
340
|
+
signatureXml +
|
|
341
|
+
xmlContent.substring(insertPosition);
|
|
342
|
+
return signedXml;
|
|
244
343
|
}
|
|
245
344
|
/**
|
|
246
|
-
* Generate XAdES-BES signed document for KSeF authentication
|
|
345
|
+
* Generate XAdES-BES signed document for KSeF authentication (API v2)
|
|
247
346
|
*/
|
|
248
347
|
function generateXadesSignedAuth(nip, challenge, _timestamp, _subjectType, privateKey, certificate) {
|
|
249
|
-
// Build XML document
|
|
250
|
-
const xmlDoc =
|
|
348
|
+
// Build AuthTokenRequest XML document (API v2 format)
|
|
349
|
+
const xmlDoc = buildAuthTokenRequestXml(nip, challenge, 'certificateSubject');
|
|
251
350
|
// Sign with XAdES
|
|
252
351
|
const signedXml = signXmlWithXades(xmlDoc, privateKey, certificate);
|
|
253
352
|
// Encode to Base64 for API submission
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XadesHelper.js","sourceRoot":"","sources":["../../../nodes/Ksef/XadesHelper.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,kDAyCC;AA+BD,kDA0CC;
|
|
1
|
+
{"version":3,"file":"XadesHelper.js","sourceRoot":"","sources":["../../../nodes/Ksef/XadesHelper.ts"],"names":[],"mappings":"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"}
|