summaryrefslogtreecommitdiffhomepage
path: root/packages/server/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/server/src')
-rw-r--r--packages/server/src/helpers/convertCertBufferToPEM.test.ts38
-rw-r--r--packages/server/src/helpers/convertPublicKeyToPEM.test.ts81
-rw-r--r--packages/server/src/helpers/isBase64URLString.test.ts16
-rw-r--r--packages/server/src/helpers/toHash.test.ts11
4 files changed, 146 insertions, 0 deletions
diff --git a/packages/server/src/helpers/convertCertBufferToPEM.test.ts b/packages/server/src/helpers/convertCertBufferToPEM.test.ts
new file mode 100644
index 0000000..91c5d6b
--- /dev/null
+++ b/packages/server/src/helpers/convertCertBufferToPEM.test.ts
@@ -0,0 +1,38 @@
+import convertCertBufferToPEM from "./convertCertBufferToPEM";
+
+test('should return pem when input is base64URLString', () => {
+ const input = "Y2VydEJ1ZmZlclN0cmluZyBjZXJ0QnVmZmVyU3RyaW5nIGNlcnRCdWZmZXJTdHJpbmcgY2VydEJ1ZmZlclN0cmluZyBjZXJ0QnVmZmVyU3RyaW5nIGNlcnRCdWZmZXJTdHJpbmcgY2VydEJ1ZmZlclN0cmluZw";
+ const actual = convertCertBufferToPEM(input);
+ const actualPemArr = actual.split("\n");
+
+ expect(actual).toEqual(`-----BEGIN CERTIFICATE-----
+Y2VydEJ1ZmZlclN0cmluZyBjZXJ0QnVmZmVyU3RyaW5nIGNlcnRCdWZmZXJTdHJp
+bmcgY2VydEJ1ZmZlclN0cmluZyBjZXJ0QnVmZmVyU3RyaW5nIGNlcnRCdWZmZXJT
+dHJpbmcgY2VydEJ1ZmZlclN0cmluZw==
+-----END CERTIFICATE-----
+`);
+
+ expect(actualPemArr[0]).toEqual("-----BEGIN CERTIFICATE-----");
+ expect(actualPemArr[1].length).toBeLessThanOrEqual(64);
+ expect(actualPemArr[2].length).toBeLessThanOrEqual(64);
+ expect(actualPemArr[3].length).toBeLessThanOrEqual(64);
+ expect(actualPemArr[4]).toEqual("-----END CERTIFICATE-----");
+});
+
+test('should return pem when input is buffer', () => {
+ const input = new Buffer(128);
+ const actual = convertCertBufferToPEM(input);
+ const actualPemArr = actual.split("\n");
+ expect(actual).toEqual(`-----BEGIN CERTIFICATE-----
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
+-----END CERTIFICATE-----
+`);
+
+ expect(actualPemArr[0]).toEqual("-----BEGIN CERTIFICATE-----");
+ expect(actualPemArr[1].length).toBeLessThanOrEqual(64);
+ expect(actualPemArr[2].length).toBeLessThanOrEqual(64);
+ expect(actualPemArr[3].length).toBeLessThanOrEqual(64);
+ expect(actualPemArr[4]).toEqual("-----END CERTIFICATE-----");
+});
diff --git a/packages/server/src/helpers/convertPublicKeyToPEM.test.ts b/packages/server/src/helpers/convertPublicKeyToPEM.test.ts
new file mode 100644
index 0000000..b67299b
--- /dev/null
+++ b/packages/server/src/helpers/convertPublicKeyToPEM.test.ts
@@ -0,0 +1,81 @@
+import base64url from "base64url";
+import cbor from "cbor";
+import { COSEKEYS } from "./convertCOSEtoPKCS";
+import convertPublicKeyToPEM from "./convertPublicKeyToPEM";
+
+test('should return pem when input is base64URLString', () => {
+ const mockCOSEKey = new Map<number, number | Buffer>();
+
+ const x = Buffer.from("gh9MmXjtmcHFesofqWZ6iuxSdAYgoPVvfJqpv1818lo", "base64")
+ const y = Buffer.from("3BDZHsNvKUb5VbyGPqcAFf4FGuPhJ2Xy215oWDw_1jc", "base64")
+ mockCOSEKey.set(COSEKEYS.kty, 2);
+ mockCOSEKey.set(COSEKEYS.alg, -7);
+ mockCOSEKey.set(COSEKEYS.crv, 1);
+ mockCOSEKey.set(COSEKEYS.x, x);
+ mockCOSEKey.set(COSEKEYS.y, y);
+
+ jest.spyOn(cbor, "decodeAllSync").mockReturnValueOnce([mockCOSEKey]);
+ const input = base64url.toBuffer('test');
+ const actual = convertPublicKeyToPEM(input);
+ expect(actual).toEqual(`-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEgh9MmXjtmcHFesofqWZ6iuxSdAYg\noPVvfJqpv1818lrcENkew28pRvlVvIY+pwAV/gUa4+EnZfLbXmhYPD/WNw==
+-----END PUBLIC KEY-----
+`);
+});
+
+
+test('should return pem when input is base64URLString', () => {
+ const mockCOSEKey = new Map<number, number | Buffer>();
+
+ const n = Buffer.from("0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMstn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw", "base64")
+ const e = Buffer.from("AQAB", "base64")
+ mockCOSEKey.set(COSEKEYS.kty, 3);
+ mockCOSEKey.set(COSEKEYS.alg, -7);
+ mockCOSEKey.set(COSEKEYS.crv, 1);
+ mockCOSEKey.set(COSEKEYS.n, n);
+ mockCOSEKey.set(COSEKEYS.e, e);
+
+ jest.spyOn(cbor, "decodeAllSync").mockReturnValueOnce([mockCOSEKey]);
+ const input = base64url.toBuffer('test');
+ const actual = convertPublicKeyToPEM(input);
+ expect(actual).toEqual(`-----BEGIN PUBLIC KEY-----
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0vx7agoebGcQSuuPiLJX
+ZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tS
+oc/BJECPebWKRXjBZCiFV4n3oknjhMstn64tZ/2W+5JsGY4Hc5n9yBXArwl93lqt
+7/RN5w6Cf0h4QyQ5v+65YGjQR0/FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0
+zgdAZHzu6qMQvRL5hajrn1n91CbOpbISD08qNLyrdkt+bFTWhAI4vMQFh6WeZu0f
+M4lFd2NcRwr3XPksINHaQ+G/xBniIqbw0Ls1jF44+csFCur+kEgU8awapJzKnqDK
+gwIDAQAB
+-----END PUBLIC KEY-----
+`);
+});
+
+test('should return pem when input is base64URLString', () => {
+ const mockCOSEKey = new Map<number, number | Buffer>();
+
+ mockCOSEKey.set(COSEKEYS.kty, 0);
+ mockCOSEKey.set(COSEKEYS.alg, -7);
+
+ jest.spyOn(cbor, "decodeAllSync").mockReturnValueOnce([mockCOSEKey]);
+ const input = base64url.toBuffer('test');
+ try {
+ convertPublicKeyToPEM(input);
+ } catch(err) {
+ expect(err.message).toEqual("Public key was missing kty");
+ }
+});
+
+test('should return pem when input is base64URLString', () => {
+ const mockCOSEKey = new Map<number, number | Buffer>();
+
+ mockCOSEKey.set(COSEKEYS.kty, 1);
+ mockCOSEKey.set(COSEKEYS.alg, -7);
+
+ jest.spyOn(cbor, "decodeAllSync").mockReturnValueOnce([mockCOSEKey]);
+ const input = base64url.toBuffer('test');
+ try {
+ convertPublicKeyToPEM(input);
+ } catch(err) {
+ expect(err.message).toEqual("Could not convert public key type 1 to PEM");
+ }
+});
diff --git a/packages/server/src/helpers/isBase64URLString.test.ts b/packages/server/src/helpers/isBase64URLString.test.ts
new file mode 100644
index 0000000..f91aeb1
--- /dev/null
+++ b/packages/server/src/helpers/isBase64URLString.test.ts
@@ -0,0 +1,16 @@
+import isBase64URLString from './isBase64URLString';
+
+test('should return true when input is base64URLString', () => {
+ const actual = isBase64URLString("U2ltcGxlV2ViQXV0aG4")
+ expect(actual).toEqual(true);
+});
+
+test('should return false when input is not base64URLString', () => {
+ const actual = isBase64URLString("U2ltcGxlV2ViQXV0aG4+")
+ expect(actual).toEqual(false);
+});
+
+test('should return false when input is blank', () => {
+ const actual = isBase64URLString("")
+ expect(actual).toEqual(false);
+});
diff --git a/packages/server/src/helpers/toHash.test.ts b/packages/server/src/helpers/toHash.test.ts
new file mode 100644
index 0000000..de37390
--- /dev/null
+++ b/packages/server/src/helpers/toHash.test.ts
@@ -0,0 +1,11 @@
+import toHash from './toHash';
+
+test('should return a buffer of at 32 bytes for input string', () => {
+ const hash = toHash("string");
+ expect(hash.byteLength).toEqual(32);
+});
+
+test('should return a buffer of at 32 bytes for input Buffer', () => {
+ const hash = toHash(new Buffer(10));
+ expect(hash.byteLength).toEqual(32);
+});