diff options
author | Matthew Miller <matthew@millerti.me> | 2022-04-11 20:59:35 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-11 20:59:35 -0700 |
commit | f46a315898dd31af268f7b36b39f1a28720c0072 (patch) | |
tree | 908c9ca31d5f61339c4a994c8448f1c6c86ad7db /packages/server/src | |
parent | 338f0543ac7b5844116d5ec081cc964232de3ae8 (diff) | |
parent | da3c7005c4f4ffd90ede382bcd329ae2aaa5d2bd (diff) |
Merge pull request #193 from TaigaMikami/feature/add-server-helpers-test
add some server helper's function test
Diffstat (limited to 'packages/server/src')
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); +}); |