UNPKG

node-apk

Version:

A library to parse Android application manifest and signature

99 lines (91 loc) 5.77 kB
import Certificate from "../lib/certificate"; // openssl req -x509 -newkey rsa:2048 -keyout ca.key -out ca.pem -days 365 const CA = `MIIDbDCCAlQCCQDUd4jhuZxkrDANBgkqhkiG9w0BAQsFADB4MQswCQYDVQQGEwJV SzEPMA0GA1UECAwGTG9uZG9uMQ8wDQYDVQQHDAZMb25kb24xFTATBgNVBAoMDFRl c3QgY29tcGFueTESMBAGA1UECwwJVGVzdCB1bml0MRwwGgYDVQQDDBNUZXN0IENB IGNlcnRpZmljYXRlMB4XDTIxMDcwMTEzMjgwMFoXDTIyMDcwMTEzMjgwMFoweDEL MAkGA1UEBhMCVUsxDzANBgNVBAgMBkxvbmRvbjEPMA0GA1UEBwwGTG9uZG9uMRUw EwYDVQQKDAxUZXN0IGNvbXBhbnkxEjAQBgNVBAsMCVRlc3QgdW5pdDEcMBoGA1UE AwwTVGVzdCBDQSBjZXJ0aWZpY2F0ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC AQoCggEBANI6FjBUaV+v/VloHfA1MsWU9t0PFHoUFlVnpU2XcvIBgDae6J612veh pHb7uN4Bs5/cku7dJt5L1f8i+0HgCm3ZkitqvGEwDqDLv33ELCWDpMd246V2s4VC pPxd46Xnope8SZXvyP8HU10/Hr3vEKzQs9/5M8lGiyj84k/Hye0CE0RTFHbqcHt+ KwGu6y+C65es2KYAhYw2DWa49k+xJrnXN/qqqsaz0XrSowdq5NrpMt/zdfA6TTUk dd3K05P51xziZwixZGRyf92iFvZQjH1kpadqiyj3QNX4jQP8jCGoCl4hkZ6A1L47 CqCc9C5QXkrSeDTd6c4ZE98/uOukmgcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEA qajdHnXm7jgkRkEtLoCugoLAG/QZE86oRKlLGBmgUMyubjPLRKlVuxBcegzocCg4 sbsJQXcEW9euUOtYrl0UZRREACorkiePfKXz30BWMO+2xfqg0LHgUCZZxo5s2kQY xKUGBn0Kn9Subi1Or4Jix26sbew7AubIwjV7gJC7LHwdIwSBkjLnjc8V962JNsgl KC20TkPJ3RpvodJhhlK3ecPtRPz1S2UJWxvUljXnEN4nWF4KsNgVL0eFiqPM69up 4/MKGzIGYBgMlCTx1YaQjwly2ehNuBhfoBcL59C8rZf5jCy7B9djBq2qoamsnKr2 cgHYPgZWg5krtduKkMzHYw==`; // openssl req -newkey rsa:2048 -nodes -keyout intermediate.key -out intermediate.csr // openssl x509 -req -days 360 -in intermediate.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out intermediate.pem const INTERMEDIATE = `MIIDljCCAn4CCQCQK77i55JljDANBgkqhkiG9w0BAQUFADB4MQswCQYDVQQGEwJV SzEPMA0GA1UECAwGTG9uZG9uMQ8wDQYDVQQHDAZMb25kb24xFTATBgNVBAoMDFRl c3QgY29tcGFueTESMBAGA1UECwwJVGVzdCB1bml0MRwwGgYDVQQDDBNUZXN0IENB IGNlcnRpZmljYXRlMB4XDTIxMDcwMTE0MzkzNFoXDTIyMDYyNjE0MzkzNFowgaEx CzAJBgNVBAYTAlVLMQ8wDQYDVQQIDAZMb25kb24xDzANBgNVBAcMBkxvbmRvbjEn MCUGA1UECgweVGVzdCBpbnRlcm1lZGlhdGUgb3JnYW5pemF0aW9uMR8wHQYDVQQL DBZUZXN0IGludGVybWVkaWF0ZSB1bml0MSYwJAYDVQQDDB1UZXN0IGludGVybWVk aWF0ZSBjZXJ0aWZpY2F0ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB ANDcYW27vGgKy3eU2+I/cxk4W4VCYiOeMung3CV1lfE/Ac5xErn6e3pU3V//u30f YmmXE2bEbM319kp/d6XWTx7BGhVdJDULcpV0PL7r+cAey2Lwvjruu6bdZjiJKaBr I+xf2quxU3zV/KpMRdlVxhLk7B5KadLl2TaQy4JQ+Y7Y+EKfbrOLfJL3VwZNvvFj L91tLDdbAu91As8O4LBzuF/dFk9+dVu5ukPIn0dsyTqYfj1ddLF8yDbMg85sPBRf Uxbdf6Zlf+GZLEr2XcRNT1sI5vjwk7GVsGs8ZCRt183F7Fm7JREgUSNXgMwOM5HW MrmCN1wHhKXr3tWOKy1tTf0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAY4bdeWna E878WjuDZeTgrUkndUoAnBbjLWznro0C8WA021WGPwkoVUCRDQpa8RXI3jKsf5gA +L1XPB3vRPOqx/wPRc0dQH6evBct4ffrieoPs/WpBImsStSi5r81/jysard+/zNw 8V1hWT+uFMSNduUvduxpBqYb7WjEGBXqzzEzvC9fXE1USJOsbdNMKYdkH2kfkQmL uSxVmjURJSL8w0HfNWZDruJu7PHr6FLVT75uVkYJD8rZUXcg5ECEg4iTARY+conW N71fNZu6Ofypk/7D22l4IlOq+Pitl3QjLzT+V1q6NjhvYjA86WodeUz5AO9U3LdY GvttFAkkMCEXUg==`; // openssl req -newkey rsa:2048 -nodes -keyout client.key -out client.csr // openssl x509 -req -days 360 -in client.csr -CA intermediate.pem -CAkey intermediate.key -CAcreateserial -out client.pem const LEAF = `MIIDqDCCApACCQDj5loJiy1YPzANBgkqhkiG9w0BAQUFADCBoTELMAkGA1UEBhMC VUsxDzANBgNVBAgMBkxvbmRvbjEPMA0GA1UEBwwGTG9uZG9uMScwJQYDVQQKDB5U ZXN0IGludGVybWVkaWF0ZSBvcmdhbml6YXRpb24xHzAdBgNVBAsMFlRlc3QgaW50 ZXJtZWRpYXRlIHVuaXQxJjAkBgNVBAMMHVRlc3QgaW50ZXJtZWRpYXRlIGNlcnRp ZmljYXRlMB4XDTIxMDcwMTE0NDIzOVoXDTIyMDYyNjE0NDIzOVowgYkxCzAJBgNV BAYTAlVLMQ8wDQYDVQQIDAZMb25kb24xDzANBgNVBAcMBkxvbmRvbjEfMB0GA1UE CgwWVGVzdCBsZWFmIG9yZ2FuaXNhdGlvbjEXMBUGA1UECwwOVGVzdCBsZWFmIHVu aXQxHjAcBgNVBAMMFVRlc3QgbGVhZiBjZXJ0aWZpY2F0ZTCCASIwDQYJKoZIhvcN AQEBBQADggEPADCCAQoCggEBAJLa3eSt87VaibxUDD5vHFORasQBOMwNjIGNh9DI D0LjI4Hf6fC3YKpaG6X1YRPDSAuYucEdhQnlGmsOzot6+Gp/zFjQgxZyQClS927l VZ3bTZl1TNrjoGm9F9FNQqRa4ZVNkgm9FVGQgj8l1z7yphfwye0ggkiufishRVvG QvQz0a3lna+j4HMKKTjvYB83bPejru4B0khYAJgQVSteZmDZdOR8Ds6F1bZcllOc tt+eyDEGSg+RHBhAX+MQpHbKR4371sfvtaWR1zaXlIuYfPM3+rNgNos6gGnw0HqZ o3oS+/VloB4h+arLJBv1zevowlpLokuxFLV43FaL3++QJksCAwEAATANBgkqhkiG 9w0BAQUFAAOCAQEAHUHB18VA6lXs1Tllq6GhgDQn7Zdwz7+MDWb2B4LtOMfLHBiR pozjYfeL2a9CnputjPKwkQWqqNosUixUw2m00kr7FozuvvCr/pNdNLbvFBkvIVuJ 7HDBEupjhqpQRxxbFiHLJxmZPVpyE4CtgdRWPw0iOBy5HoM+plze85gv4pI1X7Jf VwsR2nM4UtX7bYIWG1pctnZwmXbpTzka32x01kBCN4OKdSOs1CSzt+xebd8pZO3I f9PQePrOkae5vOPXAvJegAJC0GMzsH4gBFgeQe/NQ8cmpmktWcf+xh69zVeHidZI X0BU5Yv+AhnoByC65hb2T1PwkYMNnQ06enax7A==`; test("Self-signed certificate", () => { const certs = Certificate.fromDer(Buffer.from(CA, "base64")); expect(certs.length).toBe(1); const cert = certs[0]; expect(cert.parent).toBeUndefined(); expect(cert.subject.get("CN")).toBe("Test CA certificate"); }); test("Simple chain", () => { const certs = Certificate.fromDer(Buffer.from(INTERMEDIATE, "base64"), Buffer.from(CA, "base64")); expect(certs.length).toBe(1); const cert = certs[0]; expect(cert.subject.get("CN")).toBe("Test intermediate certificate"); expect(cert.parent!.subject.get("CN")).toBe("Test CA certificate"); }); test("Complex chain", () => { const certs = Certificate.fromDer(Buffer.from(CA, "base64"), Buffer.from(LEAF, "base64"), Buffer.from(INTERMEDIATE, "base64")); expect(certs.length).toBe(1); const cert = certs[0]; expect(cert.subject.get("CN")).toBe("Test leaf certificate"); expect(cert.parent!.subject.get("CN")).toBe("Test intermediate certificate"); expect(cert.parent!.parent!.subject.get("CN")).toBe("Test CA certificate"); }); test("Multiple certificates", () => { const certs = Certificate.fromDer(Buffer.from(CA, "base64"), Buffer.from(LEAF, "base64")); expect(certs.length).toBe(2); });