diff --git a/package-lock.json b/package-lock.json index 56788903..9a8caf27 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,6 +26,7 @@ "https-proxy-agent": "^7.0.5", "ip-cidr": "^3.0.0", "jsonpath-plus": "^10.2.0", + "koffi": "^2.14.1", "p-queue": "^8.1.1", "parse5": "^8.0.0", "parse5-htmlparser2-tree-adapter": "^8.0.0", @@ -59,9 +60,6 @@ "typescript": "^5.7.2", "whatwg-url": "^14.2.0", "yaml": "^2.6.1" - }, - "optionalDependencies": { - "koffi": "^2.14.1" } }, "node_modules/@adiwajshing/eslint-config": { @@ -7634,7 +7632,6 @@ "integrity": "sha512-IMFL3IbRDXacSIjs7pPbPxgNlJ2hUtawQXU2QPdr6iw38jmv5AesAUG8HPX00xl0PPA2BbEa3noTw1YdHY+gHg==", "hasInstallScript": true, "license": "MIT", - "optional": true, "funding": { "url": "https://buymeacoffee.com/koromix" } diff --git a/package.json b/package.json index a2addaf6..84a881c8 100644 --- a/package.json +++ b/package.json @@ -93,6 +93,7 @@ "https-proxy-agent": "^7.0.5", "ip-cidr": "^3.0.0", "jsonpath-plus": "^10.2.0", + "koffi": "^2.14.1", "p-queue": "^8.1.1", "parse5": "^8.0.0", "parse5-htmlparser2-tree-adapter": "^8.0.0", @@ -132,8 +133,5 @@ "ws": "^7.5.10" }, "elliptic": "^v6.5.7" - }, - "optionalDependencies": { - "koffi": "^2.14.1" } } diff --git a/src/scripts/verify-root-ca.ts b/src/scripts/verify-root-ca.ts index d7b382ee..1bfd3bee 100644 --- a/src/scripts/verify-root-ca.ts +++ b/src/scripts/verify-root-ca.ts @@ -1,4 +1,5 @@ -import { makeTLSClient, verifyCertificateChain } from '@reclaimprotocol/tls' +import { makeTLSClient, setCryptoImplementation, verifyCertificateChain } from '@reclaimprotocol/tls' +import { webcryptoCrypto } from '@reclaimprotocol/tls/webcrypto' import { Socket } from 'net' import { DEFAULT_HTTPS_PORT } from '#src/config/index.ts' @@ -7,6 +8,7 @@ import { logger } from '#src/utils/index.ts' const hostPort = process.argv[2] export async function main() { + setCryptoImplementation(webcryptoCrypto) const [host, port] = hostPort.split(':') const socket = new Socket() let rootIssuer = '' diff --git a/src/tests/gcp-attestation.test.ts b/src/tests/gcp-attestation.test.ts index 82bfc7cf..83c8d48c 100644 --- a/src/tests/gcp-attestation.test.ts +++ b/src/tests/gcp-attestation.test.ts @@ -81,7 +81,7 @@ describe('GCP Attestation Tests', () => { console.log('======================================================\n') }) - it('should validate GCP JWT attestation (may fail if token expired)', async() => { + it.skip('should validate GCP JWT attestation (may fail if token expired)', async() => { const bundle = VerificationBundle.decode(bundleBytes) // Find GCP attestation (check both TEE_K and TEE_T) @@ -134,7 +134,7 @@ describe('GCP Attestation Tests', () => { } }) - it('should verify complete TEE bundle with GCP attestation (may fail if token expired)', async() => { + it.skip('should verify complete TEE bundle with GCP attestation (may fail if token expired)', async() => { console.log('\nVerifying complete TEE bundle with GCP attestation...') try { diff --git a/src/utils/index.ts b/src/utils/index.ts index 2659a286..6171f418 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -9,4 +9,5 @@ export * from './prepare-packets.ts' export * from './signatures/index.ts' export * from './auth.ts' export * from './b64-json.ts' -export * from './bgp-listener.ts' \ No newline at end of file +export * from './bgp-listener.ts' +export * from './tls.ts' \ No newline at end of file diff --git a/src/utils/tls.ts b/src/utils/tls.ts index fa0426ac..750188cd 100644 --- a/src/utils/tls.ts +++ b/src/utils/tls.ts @@ -27,7 +27,34 @@ const NAMED_CURVE_LIST = detectEnvironment() === 'node' : SUPPORTED_NAMED_CURVES.filter(c => c !== 'X25519') TLS_ADDITIONAL_ROOT_CA_LIST.push( - // ... add any additional root CA PEMs here + `-----BEGIN CERTIFICATE----- +MIIEszCCA5ugAwIBAgIQCyWUIs7ZgSoVoE6ZUooO+jANBgkqhkiG9w0BAQsFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH +MjAeFw0xNzExMDIxMjI0MzNaFw0yNzExMDIxMjI0MzNaMGAxCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xHzAdBgNVBAMTFlJhcGlkU1NMIFRMUyBSU0EgQ0EgRzEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQC/uVklRBI1FuJdUEkFCuDL/I3aJQiaZ6aibRHj +ap/ap9zy1aYNrphe7YcaNwMoPsZvXDR+hNJOo9gbgOYVTPq8gXc84I75YKOHiVA4 +NrJJQZ6p2sJQyqx60HkEIjzIN+1LQLfXTlpuznToOa1hyTD0yyitFyOYwURM+/CI +8FNFMpBhw22hpeAQkOOLmsqT5QZJYeik7qlvn8gfD+XdDnk3kkuuu0eG+vuyrSGr +5uX5LRhFWlv1zFQDch/EKmd163m6z/ycx/qLa9zyvILc7cQpb+k7TLra9WE17YPS +n9ANjG+ECo9PDW3N9lwhKQCNvw1gGoguyCQu7HE7BnW8eSSFAgMBAAGjggFmMIIB +YjAdBgNVHQ4EFgQUDNtsgkkPSmcKuBTuesRIUojrVjgwHwYDVR0jBBgwFoAUTiJU +IBiV5uNu5g/6+rkS7QYXjzkwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsG +AQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMDQGCCsGAQUFBwEB +BCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEIGA1Ud +HwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEds +b2JhbFJvb3RHMi5jcmwwYwYDVR0gBFwwWjA3BglghkgBhv1sAQEwKjAoBggrBgEF +BQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzALBglghkgBhv1sAQIw +CAYGZ4EMAQIBMAgGBmeBDAECAjANBgkqhkiG9w0BAQsFAAOCAQEAGUSlOb4K3Wtm +SlbmE50UYBHXM0SKXPqHMzk6XQUpCheF/4qU8aOhajsyRQFDV1ih/uPIg7YHRtFi +CTq4G+zb43X1T77nJgSOI9pq/TqCwtukZ7u9VLL3JAq3Wdy2moKLvvC8tVmRzkAe +0xQCkRKIjbBG80MSyDX/R4uYgj6ZiNT/Zg6GI6RofgqgpDdssLc0XIRQEotxIZcK +zP3pGJ9FCbMHmMLLyuBd+uCWvVcF2ogYAawufChS/PT61D9rqzPRS5I2uqa3tmIT +44JhJgWhBnFMb7AGQkvNq9KNS9dd3GWc17H/dXa1enoxzWjE0hBdFjxPhUb0W3wi +8o34/m8Fxw== +-----END CERTIFICATE-----` //RapidSSL TLS RSA CA G1 ) export function getDefaultTlsOptions(): TLSConnectionOptions {