@ai-pip/core 0.4.0 → 0.5.0
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.
- package/CHANGELOG.md +35 -1
- package/README.md +5 -2
- package/dist/isl/index.d.ts +2 -0
- package/dist/isl/index.d.ts.map +1 -1
- package/dist/isl/index.js +2 -0
- package/dist/isl/index.js.map +1 -1
- package/dist/isl/process/buildISLResult.d.ts +3 -1
- package/dist/isl/process/buildISLResult.d.ts.map +1 -1
- package/dist/isl/process/buildISLResult.js +3 -1
- package/dist/isl/process/buildISLResult.js.map +1 -1
- package/dist/isl/sanitize.d.ts.map +1 -1
- package/dist/isl/sanitize.js +13 -1
- package/dist/isl/sanitize.js.map +1 -1
- package/dist/isl/tags/index.d.ts +19 -0
- package/dist/isl/tags/index.d.ts.map +1 -0
- package/dist/isl/tags/index.js +17 -0
- package/dist/isl/tags/index.js.map +1 -0
- package/dist/isl/tags/namespace.d.ts +18 -0
- package/dist/isl/tags/namespace.d.ts.map +1 -0
- package/dist/isl/tags/namespace.js +18 -0
- package/dist/isl/tags/namespace.js.map +1 -0
- package/dist/isl/tags/serializer.d.ts +39 -0
- package/dist/isl/tags/serializer.d.ts.map +1 -0
- package/dist/isl/tags/serializer.js +45 -0
- package/dist/isl/tags/serializer.js.map +1 -0
- package/dist/isl/tags/tag-registry.d.ts +15 -0
- package/dist/isl/tags/tag-registry.d.ts.map +1 -0
- package/dist/isl/tags/tag-registry.js +17 -0
- package/dist/isl/tags/tag-registry.js.map +1 -0
- package/dist/isl/tags/threat-tag-type.d.ts +13 -0
- package/dist/isl/tags/threat-tag-type.d.ts.map +1 -0
- package/dist/isl/tags/threat-tag-type.js +9 -0
- package/dist/isl/tags/threat-tag-type.js.map +1 -0
- package/dist/isl/tags/threat-tag.d.ts +32 -0
- package/dist/isl/tags/threat-tag.d.ts.map +1 -0
- package/dist/isl/tags/threat-tag.js +43 -0
- package/dist/isl/tags/threat-tag.js.map +1 -0
- package/dist/isl/types.d.ts +13 -0
- package/dist/isl/types.d.ts.map +1 -1
- package/package.json +3 -2
- package/dist/AAL/process/applyRemovalPlan.d.ts +0 -23
- package/dist/AAL/process/applyRemovalPlan.d.ts.map +0 -1
- package/dist/AAL/process/applyRemovalPlan.js +0 -157
- package/dist/AAL/process/applyRemovalPlan.js.map +0 -1
- package/dist/AAL/process/buildRemovalPlan.d.ts +0 -50
- package/dist/AAL/process/buildRemovalPlan.d.ts.map +0 -1
- package/dist/AAL/process/buildRemovalPlan.js +0 -116
- package/dist/AAL/process/buildRemovalPlan.js.map +0 -1
- package/dist/cpe/envelope.d.ts +0 -34
- package/dist/cpe/envelope.d.ts.map +0 -1
- package/dist/cpe/envelope.js +0 -70
- package/dist/cpe/envelope.js.map +0 -1
- package/dist/cpe/exceptions/EnvelopeError.d.ts +0 -8
- package/dist/cpe/exceptions/EnvelopeError.d.ts.map +0 -1
- package/dist/cpe/exceptions/EnvelopeError.js +0 -13
- package/dist/cpe/exceptions/EnvelopeError.js.map +0 -1
- package/dist/cpe/exceptions/index.d.ts +0 -5
- package/dist/cpe/exceptions/index.d.ts.map +0 -1
- package/dist/cpe/exceptions/index.js +0 -5
- package/dist/cpe/exceptions/index.js.map +0 -1
- package/dist/cpe/index.d.ts +0 -24
- package/dist/cpe/index.d.ts.map +0 -1
- package/dist/cpe/index.js +0 -26
- package/dist/cpe/index.js.map +0 -1
- package/dist/cpe/types.d.ts +0 -58
- package/dist/cpe/types.d.ts.map +0 -1
- package/dist/cpe/types.js +0 -5
- package/dist/cpe/types.js.map +0 -1
- package/dist/cpe/utils.d.ts +0 -38
- package/dist/cpe/utils.d.ts.map +0 -1
- package/dist/cpe/utils.js +0 -47
- package/dist/cpe/utils.js.map +0 -1
- package/dist/cpe/value-objects/Metadata.d.ts +0 -32
- package/dist/cpe/value-objects/Metadata.d.ts.map +0 -1
- package/dist/cpe/value-objects/Metadata.js +0 -65
- package/dist/cpe/value-objects/Metadata.js.map +0 -1
- package/dist/cpe/value-objects/Nonce.d.ts +0 -33
- package/dist/cpe/value-objects/Nonce.d.ts.map +0 -1
- package/dist/cpe/value-objects/Nonce.js +0 -44
- package/dist/cpe/value-objects/Nonce.js.map +0 -1
- package/dist/cpe/value-objects/Signature.d.ts +0 -39
- package/dist/cpe/value-objects/Signature.d.ts.map +0 -1
- package/dist/cpe/value-objects/Signature.js +0 -60
- package/dist/cpe/value-objects/Signature.js.map +0 -1
- package/dist/cpe/value-objects/index.d.ts +0 -9
- package/dist/cpe/value-objects/index.d.ts.map +0 -1
- package/dist/cpe/value-objects/index.js +0 -7
- package/dist/cpe/value-objects/index.js.map +0 -1
package/dist/cpe/types.d.ts
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Types for CPE (Cryptographic Prompt Envelope) - Core Semántico
|
|
3
|
-
*/
|
|
4
|
-
import type { LineageEntry } from '../csl/value-objects/index.js';
|
|
5
|
-
/**
|
|
6
|
-
* ProtocolVersion - Versión del protocolo AI-PIP
|
|
7
|
-
*/
|
|
8
|
-
export type ProtocolVersion = string;
|
|
9
|
-
/**
|
|
10
|
-
* Timestamp - Timestamp Unix en milisegundos
|
|
11
|
-
*/
|
|
12
|
-
export type Timestamp = number;
|
|
13
|
-
/**
|
|
14
|
-
* NonceValue - Valor único para prevenir ataques de replay (string)
|
|
15
|
-
*/
|
|
16
|
-
export type NonceValue = string;
|
|
17
|
-
/**
|
|
18
|
-
* SignatureAlgorithm - Algoritmo de firma criptográfica
|
|
19
|
-
*/
|
|
20
|
-
export type SignatureAlgorithm = 'HMAC-SHA256';
|
|
21
|
-
/**
|
|
22
|
-
* Signature - Firma criptográfica del envelope
|
|
23
|
-
*/
|
|
24
|
-
export type Signature = string;
|
|
25
|
-
/**
|
|
26
|
-
* CPEMetadata - Metadata de seguridad del envelope
|
|
27
|
-
* Según especificación: timestamp, nonce, protocolVersion, previousSignatures opcionales
|
|
28
|
-
*/
|
|
29
|
-
export interface CPEMetadata {
|
|
30
|
-
readonly timestamp: Timestamp;
|
|
31
|
-
readonly nonce: NonceValue;
|
|
32
|
-
readonly protocolVersion: ProtocolVersion;
|
|
33
|
-
readonly previousSignatures?: {
|
|
34
|
-
readonly csl?: string | undefined;
|
|
35
|
-
readonly isl?: string | undefined;
|
|
36
|
-
} | undefined;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* CPEEvelope - Envoltorio criptográfico completo
|
|
40
|
-
* Según especificación: payload, metadata, signature (value + algorithm), lineage
|
|
41
|
-
*/
|
|
42
|
-
export interface CPEEvelope {
|
|
43
|
-
readonly payload: unknown;
|
|
44
|
-
readonly metadata: CPEMetadata;
|
|
45
|
-
readonly signature: {
|
|
46
|
-
readonly value: string;
|
|
47
|
-
readonly algorithm: string;
|
|
48
|
-
};
|
|
49
|
-
readonly lineage: readonly LineageEntry[];
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* CPEResult - Resultado de la generación del envelope
|
|
53
|
-
*/
|
|
54
|
-
export interface CPEResult {
|
|
55
|
-
readonly envelope: CPEEvelope;
|
|
56
|
-
readonly processingTimeMs?: number;
|
|
57
|
-
}
|
|
58
|
-
//# sourceMappingURL=types.d.ts.map
|
package/dist/cpe/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cpe/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAEjE;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAA;AAEpC;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAA;AAE9B;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAA;AAE/B;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,aAAa,CAAA;AAE9C;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAA;AAE9B;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;IAC7B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;IAC1B,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAA;IACzC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;QAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAClC,GAAG,SAAS,CAAA;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAA;IAC9B,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;QACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;KAC3B,CAAA;IACD,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAA;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAA;IAC7B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACnC"}
|
package/dist/cpe/types.js
DELETED
package/dist/cpe/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cpe/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
package/dist/cpe/utils.d.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Utilidades puras para CPE
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* Serializa el contenido sanitizado de ISL para firma
|
|
6
|
-
*
|
|
7
|
-
* @param segments - Segmentos sanitizados
|
|
8
|
-
* @returns Contenido serializado
|
|
9
|
-
*/
|
|
10
|
-
export declare function serializeContent(segments: readonly {
|
|
11
|
-
readonly sanitizedContent: string;
|
|
12
|
-
}[]): string;
|
|
13
|
-
/**
|
|
14
|
-
* Serializa metadata para firma
|
|
15
|
-
*
|
|
16
|
-
* @param metadata - Metadata a serializar
|
|
17
|
-
* @returns Metadata serializada
|
|
18
|
-
*/
|
|
19
|
-
export declare function serializeMetadata(metadata: {
|
|
20
|
-
readonly timestamp: number;
|
|
21
|
-
readonly nonce: string;
|
|
22
|
-
readonly protocolVersion: string;
|
|
23
|
-
readonly previousSignatures?: {
|
|
24
|
-
readonly csl?: string | undefined;
|
|
25
|
-
readonly isl?: string | undefined;
|
|
26
|
-
} | undefined;
|
|
27
|
-
}): string;
|
|
28
|
-
/**
|
|
29
|
-
* Genera el contenido completo para firma
|
|
30
|
-
* Según spec: contenido procesado + metadata + identificador del algoritmo
|
|
31
|
-
*
|
|
32
|
-
* @param content - Contenido serializado (payload semántico)
|
|
33
|
-
* @param metadata - Metadata serializada
|
|
34
|
-
* @param algorithm - Identificador del algoritmo de firma
|
|
35
|
-
* @returns Contenido completo para firma
|
|
36
|
-
*/
|
|
37
|
-
export declare function generateSignableContent(content: string, metadata: string, algorithm: string): string;
|
|
38
|
-
//# sourceMappingURL=utils.d.ts.map
|
package/dist/cpe/utils.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/cpe/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,SAAS;IAAE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,MAAM,CAInG;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;QAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAClC,GAAG,SAAS,CAAA;CACd,GAAG,MAAM,CAgBT;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,MAAM,CAER"}
|
package/dist/cpe/utils.js
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Utilidades puras para CPE
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* Serializa el contenido sanitizado de ISL para firma
|
|
6
|
-
*
|
|
7
|
-
* @param segments - Segmentos sanitizados
|
|
8
|
-
* @returns Contenido serializado
|
|
9
|
-
*/
|
|
10
|
-
export function serializeContent(segments) {
|
|
11
|
-
return segments
|
|
12
|
-
.map((segment, index) => `[${index}]:${segment.sanitizedContent}`)
|
|
13
|
-
.join('\n');
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Serializa metadata para firma
|
|
17
|
-
*
|
|
18
|
-
* @param metadata - Metadata a serializar
|
|
19
|
-
* @returns Metadata serializada
|
|
20
|
-
*/
|
|
21
|
-
export function serializeMetadata(metadata) {
|
|
22
|
-
const parts = [
|
|
23
|
-
`timestamp:${metadata.timestamp}`,
|
|
24
|
-
`nonce:${metadata.nonce}`,
|
|
25
|
-
`version:${metadata.protocolVersion}`,
|
|
26
|
-
];
|
|
27
|
-
if (metadata.previousSignatures?.csl) {
|
|
28
|
-
parts.push(`csl:${metadata.previousSignatures.csl}`);
|
|
29
|
-
}
|
|
30
|
-
if (metadata.previousSignatures?.isl) {
|
|
31
|
-
parts.push(`isl:${metadata.previousSignatures.isl}`);
|
|
32
|
-
}
|
|
33
|
-
return parts.join('|');
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Genera el contenido completo para firma
|
|
37
|
-
* Según spec: contenido procesado + metadata + identificador del algoritmo
|
|
38
|
-
*
|
|
39
|
-
* @param content - Contenido serializado (payload semántico)
|
|
40
|
-
* @param metadata - Metadata serializada
|
|
41
|
-
* @param algorithm - Identificador del algoritmo de firma
|
|
42
|
-
* @returns Contenido completo para firma
|
|
43
|
-
*/
|
|
44
|
-
export function generateSignableContent(content, metadata, algorithm) {
|
|
45
|
-
return `${metadata}\n---\n${content}\n---\nalgorithm:${algorithm}`;
|
|
46
|
-
}
|
|
47
|
-
//# sourceMappingURL=utils.js.map
|
package/dist/cpe/utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/cpe/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAA0D;IACzF,OAAO,QAAQ;SACZ,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,KAAK,OAAO,CAAC,gBAAgB,EAAE,CAAC;SACjE,IAAI,CAAC,IAAI,CAAC,CAAA;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAQjC;IACC,MAAM,KAAK,GAAG;QACZ,aAAa,QAAQ,CAAC,SAAS,EAAE;QACjC,SAAS,QAAQ,CAAC,KAAK,EAAE;QACzB,WAAW,QAAQ,CAAC,eAAe,EAAE;KACtC,CAAA;IAED,IAAI,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAA;IACtD,CAAC;IAED,IAAI,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAA;IACtD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACxB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAe,EACf,QAAgB,EAChB,SAAiB;IAEjB,OAAO,GAAG,QAAQ,UAAU,OAAO,oBAAoB,SAAS,EAAE,CAAA;AACpE,CAAC"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CPEMetadata - Metadata de seguridad del envelope
|
|
3
|
-
* Value Object puro e inmutable
|
|
4
|
-
*/
|
|
5
|
-
import type { CPEMetadata, ProtocolVersion, Timestamp } from '../types.js';
|
|
6
|
-
import type { Nonce as NonceVO } from './Nonce.js';
|
|
7
|
-
/**
|
|
8
|
-
* Versión actual del protocolo
|
|
9
|
-
*/
|
|
10
|
-
export declare const CURRENT_PROTOCOL_VERSION: ProtocolVersion;
|
|
11
|
-
/**
|
|
12
|
-
* Crea metadata de seguridad para el envelope
|
|
13
|
-
* Según especificación: timestamp, nonce, protocolVersion, previousSignatures opcionales
|
|
14
|
-
*
|
|
15
|
-
* @param timestamp - Timestamp Unix en milisegundos
|
|
16
|
-
* @param nonce - Nonce único
|
|
17
|
-
* @param protocolVersion - Versión del protocolo (default: CURRENT_PROTOCOL_VERSION)
|
|
18
|
-
* @param previousSignatures - Firmas opcionales de capas anteriores (csl, isl)
|
|
19
|
-
* @returns CPEMetadata inmutable
|
|
20
|
-
*/
|
|
21
|
-
export declare function createMetadata(timestamp: Timestamp, nonce: NonceVO, protocolVersion?: ProtocolVersion, previousSignatures?: {
|
|
22
|
-
csl?: string;
|
|
23
|
-
isl?: string;
|
|
24
|
-
}): CPEMetadata;
|
|
25
|
-
/**
|
|
26
|
-
* Valida que la metadata sea válida
|
|
27
|
-
*
|
|
28
|
-
* @param metadata - Metadata a validar
|
|
29
|
-
* @returns true si es válida
|
|
30
|
-
*/
|
|
31
|
-
export declare function isValidMetadata(metadata: CPEMetadata): boolean;
|
|
32
|
-
//# sourceMappingURL=Metadata.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Metadata.d.ts","sourceRoot":"","sources":["../../../src/cpe/value-objects/Metadata.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC1E,OAAO,KAAK,EAAE,KAAK,IAAI,OAAO,EAAE,MAAM,YAAY,CAAA;AAElD;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,eAAyB,CAAA;AAEhE;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,OAAO,EACd,eAAe,GAAE,eAA0C,EAC3D,kBAAkB,CAAC,EAAE;IACnB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,GACA,WAAW,CA4Bb;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAS9D"}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CPEMetadata - Metadata de seguridad del envelope
|
|
3
|
-
* Value Object puro e inmutable
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Versión actual del protocolo
|
|
7
|
-
*/
|
|
8
|
-
export const CURRENT_PROTOCOL_VERSION = '0.1.4';
|
|
9
|
-
/**
|
|
10
|
-
* Crea metadata de seguridad para el envelope
|
|
11
|
-
* Según especificación: timestamp, nonce, protocolVersion, previousSignatures opcionales
|
|
12
|
-
*
|
|
13
|
-
* @param timestamp - Timestamp Unix en milisegundos
|
|
14
|
-
* @param nonce - Nonce único
|
|
15
|
-
* @param protocolVersion - Versión del protocolo (default: CURRENT_PROTOCOL_VERSION)
|
|
16
|
-
* @param previousSignatures - Firmas opcionales de capas anteriores (csl, isl)
|
|
17
|
-
* @returns CPEMetadata inmutable
|
|
18
|
-
*/
|
|
19
|
-
export function createMetadata(timestamp, nonce, protocolVersion = CURRENT_PROTOCOL_VERSION, previousSignatures) {
|
|
20
|
-
// Validar timestamp
|
|
21
|
-
if (timestamp <= 0) {
|
|
22
|
-
throw new Error('Timestamp must be a positive number');
|
|
23
|
-
}
|
|
24
|
-
// Validar que no sea del futuro (con margen de 5 minutos para sincronización)
|
|
25
|
-
const maxFutureTimestamp = Date.now() + 5 * 60 * 1000;
|
|
26
|
-
if (timestamp > maxFutureTimestamp) {
|
|
27
|
-
throw new Error('Timestamp cannot be in the future');
|
|
28
|
-
}
|
|
29
|
-
// Validar version del protocolo
|
|
30
|
-
if (!protocolVersion || typeof protocolVersion !== 'string') {
|
|
31
|
-
throw new Error('Protocol version must be a non-empty string');
|
|
32
|
-
}
|
|
33
|
-
return Object.freeze({
|
|
34
|
-
timestamp,
|
|
35
|
-
nonce: nonce.value,
|
|
36
|
-
protocolVersion,
|
|
37
|
-
previousSignatures: previousSignatures
|
|
38
|
-
? Object.freeze({
|
|
39
|
-
csl: previousSignatures.csl ?? undefined,
|
|
40
|
-
isl: previousSignatures.isl ?? undefined,
|
|
41
|
-
})
|
|
42
|
-
: undefined,
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Valida que la metadata sea válida
|
|
47
|
-
*
|
|
48
|
-
* @param metadata - Metadata a validar
|
|
49
|
-
* @returns true si es válida
|
|
50
|
-
*/
|
|
51
|
-
export function isValidMetadata(metadata) {
|
|
52
|
-
try {
|
|
53
|
-
if (metadata.timestamp <= 0)
|
|
54
|
-
return false;
|
|
55
|
-
if (!metadata.nonce || metadata.nonce.length < 16)
|
|
56
|
-
return false;
|
|
57
|
-
if (!metadata.protocolVersion)
|
|
58
|
-
return false;
|
|
59
|
-
return true;
|
|
60
|
-
}
|
|
61
|
-
catch {
|
|
62
|
-
return false;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
//# sourceMappingURL=Metadata.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Metadata.js","sourceRoot":"","sources":["../../../src/cpe/value-objects/Metadata.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAoB,OAAO,CAAA;AAEhE;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAC5B,SAAoB,EACpB,KAAc,EACd,kBAAmC,wBAAwB,EAC3D,kBAGC;IAED,oBAAoB;IACpB,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;IACxD,CAAC;IAED,8EAA8E;IAC9E,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA;IACrD,IAAI,SAAS,GAAG,kBAAkB,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;IACtD,CAAC;IAED,gCAAgC;IAChC,IAAI,CAAC,eAAe,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;IAChE,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,SAAS;QACT,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,eAAe;QACf,kBAAkB,EAAE,kBAAkB;YACpC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;gBACZ,GAAG,EAAE,kBAAkB,CAAC,GAAG,IAAI,SAAS;gBACxC,GAAG,EAAE,kBAAkB,CAAC,GAAG,IAAI,SAAS;aACzC,CAAC;YACJ,CAAC,CAAC,SAAS;KACd,CAAC,CAAA;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,QAAqB;IACnD,IAAI,CAAC;QACH,IAAI,QAAQ,CAAC,SAAS,IAAI,CAAC;YAAE,OAAO,KAAK,CAAA;QACzC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE;YAAE,OAAO,KAAK,CAAA;QAC/D,IAAI,CAAC,QAAQ,CAAC,eAAe;YAAE,OAAO,KAAK,CAAA;QAC3C,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Nonce - Valor único para prevenir ataques de replay
|
|
3
|
-
* Value Object puro e inmutable
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Nonce - Valor único generado aleatoriamente
|
|
7
|
-
*/
|
|
8
|
-
export type Nonce = {
|
|
9
|
-
readonly value: string;
|
|
10
|
-
};
|
|
11
|
-
/**
|
|
12
|
-
* Genera un nonce único
|
|
13
|
-
*
|
|
14
|
-
* @param length - Longitud del nonce en bytes (default: 16)
|
|
15
|
-
* @returns Nonce único
|
|
16
|
-
*/
|
|
17
|
-
export declare function createNonce(length?: number): Nonce;
|
|
18
|
-
/**
|
|
19
|
-
* Valida que un string sea un nonce válido
|
|
20
|
-
*
|
|
21
|
-
* @param value - String a validar
|
|
22
|
-
* @returns true si es un nonce válido
|
|
23
|
-
*/
|
|
24
|
-
export declare function isValidNonce(value: string): boolean;
|
|
25
|
-
/**
|
|
26
|
-
* Compara dos nonces
|
|
27
|
-
*
|
|
28
|
-
* @param nonce1 - Primer nonce
|
|
29
|
-
* @param nonce2 - Segundo nonce
|
|
30
|
-
* @returns true si son iguales
|
|
31
|
-
*/
|
|
32
|
-
export declare function equalsNonce(nonce1: Nonce, nonce2: Nonce): boolean;
|
|
33
|
-
//# sourceMappingURL=Nonce.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Nonce.d.ts","sourceRoot":"","sources":["../../../src/cpe/value-objects/Nonce.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,GAAE,MAAW,GAAG,KAAK,CActD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAG,OAAO,CAEjE"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Nonce - Valor único para prevenir ataques de replay
|
|
3
|
-
* Value Object puro e inmutable
|
|
4
|
-
*/
|
|
5
|
-
import { randomBytes } from 'node:crypto';
|
|
6
|
-
/**
|
|
7
|
-
* Genera un nonce único
|
|
8
|
-
*
|
|
9
|
-
* @param length - Longitud del nonce en bytes (default: 16)
|
|
10
|
-
* @returns Nonce único
|
|
11
|
-
*/
|
|
12
|
-
export function createNonce(length = 16) {
|
|
13
|
-
if (length < 8) {
|
|
14
|
-
throw new Error('Nonce length must be at least 8 bytes');
|
|
15
|
-
}
|
|
16
|
-
if (length > 64) {
|
|
17
|
-
throw new Error('Nonce length must be at most 64 bytes');
|
|
18
|
-
}
|
|
19
|
-
const bytes = randomBytes(length);
|
|
20
|
-
const value = bytes.toString('hex');
|
|
21
|
-
return Object.freeze({
|
|
22
|
-
value,
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Valida que un string sea un nonce válido
|
|
27
|
-
*
|
|
28
|
-
* @param value - String a validar
|
|
29
|
-
* @returns true si es un nonce válido
|
|
30
|
-
*/
|
|
31
|
-
export function isValidNonce(value) {
|
|
32
|
-
return /^[a-f0-9]{16,128}$/i.test(value);
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Compara dos nonces
|
|
36
|
-
*
|
|
37
|
-
* @param nonce1 - Primer nonce
|
|
38
|
-
* @param nonce2 - Segundo nonce
|
|
39
|
-
* @returns true si son iguales
|
|
40
|
-
*/
|
|
41
|
-
export function equalsNonce(nonce1, nonce2) {
|
|
42
|
-
return nonce1.value === nonce2.value;
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=Nonce.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Nonce.js","sourceRoot":"","sources":["../../../src/cpe/value-objects/Nonce.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AASzC;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,SAAiB,EAAE;IAC7C,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;IAC1D,CAAC;IACD,IAAI,MAAM,GAAG,EAAE,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;IAC1D,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;IACjC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEnC,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,KAAK;KACN,CAAC,CAAA;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC1C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,MAAa,EAAE,MAAa;IACtD,OAAO,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAA;AACtC,CAAC"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Signature - Firma criptográfica HMAC-SHA256
|
|
3
|
-
* Value Object puro e inmutable
|
|
4
|
-
*/
|
|
5
|
-
import type { SignatureAlgorithm } from '../types.js';
|
|
6
|
-
/**
|
|
7
|
-
* Signature - Firma criptográfica
|
|
8
|
-
*/
|
|
9
|
-
export type SignatureVO = {
|
|
10
|
-
readonly value: string;
|
|
11
|
-
readonly algorithm: SignatureAlgorithm;
|
|
12
|
-
};
|
|
13
|
-
/**
|
|
14
|
-
* Genera una firma HMAC-SHA256 del contenido
|
|
15
|
-
*
|
|
16
|
-
* @param content - Contenido a firmar
|
|
17
|
-
* @param secretKey - Clave secreta para HMAC
|
|
18
|
-
* @returns Signature inmutable
|
|
19
|
-
*
|
|
20
|
-
* @throws {Error} Si la clave secreta está vacía
|
|
21
|
-
*/
|
|
22
|
-
export declare function createSignature(content: string, secretKey: string): SignatureVO;
|
|
23
|
-
/**
|
|
24
|
-
* Verifica una firma HMAC-SHA256
|
|
25
|
-
*
|
|
26
|
-
* @param content - Contenido original
|
|
27
|
-
* @param signature - Firma a verificar
|
|
28
|
-
* @param secretKey - Clave secreta para HMAC
|
|
29
|
-
* @returns true si la firma es válida
|
|
30
|
-
*/
|
|
31
|
-
export declare function verifySignature(content: string, signature: string, secretKey: string): boolean;
|
|
32
|
-
/**
|
|
33
|
-
* Valida el formato de una firma
|
|
34
|
-
*
|
|
35
|
-
* @param signature - Firma a validar
|
|
36
|
-
* @returns true si el formato es válido
|
|
37
|
-
*/
|
|
38
|
-
export declare function isValidSignatureFormat(signature: string): boolean;
|
|
39
|
-
//# sourceMappingURL=Signature.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Signature.d.ts","sourceRoot":"","sources":["../../../src/cpe/value-objects/Signature.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAA;CACvC,CAAA;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,WAAW,CAiBb;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAWT;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAGjE"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Signature - Firma criptográfica HMAC-SHA256
|
|
3
|
-
* Value Object puro e inmutable
|
|
4
|
-
*/
|
|
5
|
-
import { createHmac } from 'node:crypto';
|
|
6
|
-
/**
|
|
7
|
-
* Genera una firma HMAC-SHA256 del contenido
|
|
8
|
-
*
|
|
9
|
-
* @param content - Contenido a firmar
|
|
10
|
-
* @param secretKey - Clave secreta para HMAC
|
|
11
|
-
* @returns Signature inmutable
|
|
12
|
-
*
|
|
13
|
-
* @throws {Error} Si la clave secreta está vacía
|
|
14
|
-
*/
|
|
15
|
-
export function createSignature(content, secretKey) {
|
|
16
|
-
if (!secretKey || secretKey.length === 0) {
|
|
17
|
-
throw new Error('Secret key is required for signature generation');
|
|
18
|
-
}
|
|
19
|
-
if (typeof content !== 'string') {
|
|
20
|
-
throw new TypeError('Content must be a string');
|
|
21
|
-
}
|
|
22
|
-
const hmac = createHmac('sha256', secretKey);
|
|
23
|
-
hmac.update(content);
|
|
24
|
-
const signature = hmac.digest('hex');
|
|
25
|
-
return Object.freeze({
|
|
26
|
-
value: signature,
|
|
27
|
-
algorithm: 'HMAC-SHA256',
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Verifica una firma HMAC-SHA256
|
|
32
|
-
*
|
|
33
|
-
* @param content - Contenido original
|
|
34
|
-
* @param signature - Firma a verificar
|
|
35
|
-
* @param secretKey - Clave secreta para HMAC
|
|
36
|
-
* @returns true si la firma es válida
|
|
37
|
-
*/
|
|
38
|
-
export function verifySignature(content, signature, secretKey) {
|
|
39
|
-
if (!secretKey || secretKey.length === 0) {
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
try {
|
|
43
|
-
const expectedSignature = createSignature(content, secretKey);
|
|
44
|
-
return expectedSignature.value === signature;
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
47
|
-
return false;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Valida el formato de una firma
|
|
52
|
-
*
|
|
53
|
-
* @param signature - Firma a validar
|
|
54
|
-
* @returns true si el formato es válido
|
|
55
|
-
*/
|
|
56
|
-
export function isValidSignatureFormat(signature) {
|
|
57
|
-
// HMAC-SHA256 produce un hash hexadecimal de 64 caracteres
|
|
58
|
-
return /^[a-f0-9]{64}$/i.test(signature);
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=Signature.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Signature.js","sourceRoot":"","sources":["../../../src/cpe/value-objects/Signature.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAWxC;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAe,EACf,SAAiB;IAEjB,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;IACpE,CAAC;IAED,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,SAAS,CAAC,0BAA0B,CAAC,CAAA;IACjD,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IAC5C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACpB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAEpC,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE,aAAa;KACzB,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAe,EACf,SAAiB,EACjB,SAAiB;IAEjB,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,iBAAiB,GAAG,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QAC7D,OAAO,iBAAiB,CAAC,KAAK,KAAK,SAAS,CAAA;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAiB;IACtD,2DAA2D;IAC3D,OAAO,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;AAC1C,CAAC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CPE Value Objects - Exports
|
|
3
|
-
*/
|
|
4
|
-
export type { Nonce } from './Nonce.js';
|
|
5
|
-
export { createNonce, isValidNonce, equalsNonce } from './Nonce.js';
|
|
6
|
-
export { createMetadata, isValidMetadata } from './Metadata.js';
|
|
7
|
-
export type { SignatureVO } from './Signature.js';
|
|
8
|
-
export { createSignature, verifySignature, isValidSignatureFormat } from './Signature.js';
|
|
9
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cpe/value-objects/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/D,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CPE Value Objects - Exports
|
|
3
|
-
*/
|
|
4
|
-
export { createNonce, isValidNonce, equalsNonce } from './Nonce.js';
|
|
5
|
-
export { createMetadata, isValidMetadata } from './Metadata.js';
|
|
6
|
-
export { createSignature, verifySignature, isValidSignatureFormat } from './Signature.js';
|
|
7
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cpe/value-objects/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAE/D,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA"}
|