blob: bab48a666a44e7a113863311f729964a511afb4d [file] [log] [blame]
// Licensed to the Software Freedom Conservancy (SFC) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The SFC licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
'use strict'
const assert = require('node:assert')
const virtualAuthenticatorCredential = require('selenium-webdriver/lib/virtual_authenticator').Credential
describe('Credentials', function () {
const BASE64_ENCODED_PK = `MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDbBOu5Lhs4vpowbCnmCyLUpIE7JM9sm9QXzye2G+jr+Kr
MsinWohEce47BFPJlTaDzHSvOW2eeunBO89ZcvvVc8RLz4qyQ8rO98xS1jtgqi1NcBPETDrtzthODu/gd0sjB2Tk3TLuBGV
oPXt54a+Oo4JbBJ6h3s0+5eAfGplCbSNq6hN3Jh9YOTw5ZA6GCEy5l8zBaOgjXytd2v2OdSVoEDNiNQRkjJd2rmS2oi9AyQ
FR3B7BrPSiDlCcITZFOWgLF5C31Wp/PSHwQhlnh7/6YhnE2y9tzsUvzx0wJXrBADW13+oMxrneDK3WGbxTNYgIi1PvSqXlq
GjHtCK+R2QkXAgMBAAECggEAVc6bu7VAnP6v0gDOeX4razv4FX/adCao9ZsHZ+WPX8PQxtmWYqykH5CY4TSfsuizAgyPuQ0
+j4Vjssr9VODLqFoanspT6YXsvaKanncUYbasNgUJnfnLnw3an2XpU2XdmXTNYckCPRX9nsAAURWT3/n9ljc/XYY22ecYxM
8sDWnHu2uKZ1B7M3X60bQYL5T/lVXkKdD6xgSNLeP4AkRx0H4egaop68hoW8FIwmDPVWYVAvo8etzWCtibRXz5FcNld9MgD
/Ai7ycKy4Q1KhX5GBFI79MVVaHkSQfxPHpr7/XcmpQOEAr+BMPon4s4vnKqAGdGB3j/E3d/+4F2swykoQKBgQD8hCsp6FIQ
5umJlk9/j/nGsMl85LgLaNVYpWlPRKPc54YNumtvj5vx1BG+zMbT7qIE3nmUPTCHP7qb5ERZG4CdMCS6S64/qzZEqijLCqe
pwj6j4fV5SyPWEcpxf6ehNdmcfgzVB3Wolfwh1ydhx/96L1jHJcTKchdJJzlfTvq8wwKBgQDeCnKws1t5GapfE1rmC/h4ol
L2qZTth9oQmbrXYohVnoqNFslDa43ePZwL9Jmd9kYb0axOTNMmyrP0NTj41uCfgDS0cJnNTc63ojKjegxHIyYDKRZNVUR/d
xAYB/vPfBYZUS7M89pO6LLsHhzS3qpu3/hppo/Uc/AM/r8PSflNHQKBgDnWgBh6OQncChPUlOLv9FMZPR1ZOfqLCYrjYEqi
uzGm6iKM13zXFO4AGAxu1P/IAd5BovFcTpg79Z8tWqZaUUwvscnl+cRlj+mMXAmdqCeO8VASOmqM1ml667axeZDIR867ZG8
K5V029Wg+4qtX5uFypNAAi6GfHkxIKrD04yOHAoGACdh4wXESi0oiDdkz3KOHPwIjn6BhZC7z8mx+pnJODU3cYukxv3WTct
lUhAsyjJiQ/0bK1yX87ulqFVgO0Knmh+wNajrb9wiONAJTMICG7tiWJOm7fW5cfTJwWkBwYADmkfTRmHDvqzQSSvoC2S7aa
9QulbC3C/qgGFNrcWgcT9kCgYAZTa1P9bFCDU7hJc2mHwJwAW7/FQKEJg8SL33KINpLwcR8fqaYOdAHWWz636osVEqosRrH
zJOGpf9x2RSWzQJ+dq8+6fACgfFZOVpN644+sAHfNPAI/gnNKU5OfUv+eav8fBnzlf1A3y3GIkyMyzFN3DE7e0n/lyqxE4H
BYGpI8g==`
const data = {
_id: new Uint8Array([1, 2, 3, 4]),
rpId: 'localhost',
userHandle: new Uint8Array([1]),
privateKey: Buffer.from(BASE64_ENCODED_PK, 'base64').toString('binary'),
signCount: 0,
}
it('can testRkEnabledCredential', function () {
const { _id, rpId, userHandle, privateKey, signCount } = data
const credential = virtualAuthenticatorCredential.createResidentCredential(
_id,
rpId,
userHandle,
privateKey,
signCount,
)
let testCredentialId = new Uint8Array([1, 2, 3, 4])
/**
* Checking if credential.id() matches with testCredentialId. Both values are
* arrays so we check if the lengths of both are equal and if one array has
* all its elements in the other array and vice-versa.
*/
assert.equal(
credential.id().length == testCredentialId.length &&
credential.id().every((item) => testCredentialId.includes(item)) &&
testCredentialId.every((item) => credential.id().includes(item)),
true,
)
if (credential.isResidentCredential() == true) {
assert(true)
} else {
assert(false)
}
assert.equal(credential.rpId(), 'localhost')
let testUserHandle = new Uint8Array([1])
/**
* Checking if credential.userHandle() matches with testUserHandle. Both values are
* arrays so we check if the lengths of both are equal and if one array has
* all its elements in the other array and vice-versa.
*/
assert.equal(
credential.userHandle().length == testUserHandle.length &&
credential.userHandle().every((item) => testUserHandle.includes(item)) &&
testUserHandle.every((item) => credential.userHandle().includes(item)),
true,
)
assert.equal(credential.privateKey(), Buffer.from(BASE64_ENCODED_PK, 'base64url').toString('binary'))
assert.equal(credential.signCount(), 0)
})
it('can testRkDisabledCredential', function () {
const { _id, rpId, privateKey, signCount } = data
const credential = virtualAuthenticatorCredential.createNonResidentCredential(_id, rpId, privateKey, signCount)
let testCredentialId = new Uint8Array([1, 2, 3, 4])
/**
* Checking if credential.id() matches with testCredentialId. Both values are
* arrays so we check if the lengths of both are equal and if one array has
* all its elements in the other array and vice-versa.
*/
assert.equal(
credential.id().length == testCredentialId.length &&
credential.id().every((item) => testCredentialId.includes(item)) &&
testCredentialId.every((item) => credential.id().includes(item)),
true,
)
if (credential.isResidentCredential() == false) {
assert(true)
} else {
assert(false)
}
if (credential.userHandle() == null) {
assert(true)
} else {
assert(false)
}
})
it('can testToDict', function () {
const { _id, rpId, userHandle, privateKey, signCount } = data
const credential = virtualAuthenticatorCredential.createResidentCredential(
_id,
rpId,
userHandle,
privateKey,
signCount,
)
let credential_dict = credential.toDict()
assert.equal(credential_dict['credentialId'], Buffer.from(new Uint8Array([1, 2, 3, 4])).toString('base64url'))
if (credential_dict['isResidentCredential'] == true) {
assert(true)
} else {
assert(false)
}
assert.equal(credential_dict['rpId'], 'localhost')
assert.equal(credential_dict['userHandle'], Buffer.from(new Uint8Array([1])).toString('base64url'))
assert.equal(credential_dict['privateKey'], Buffer.from(privateKey, 'binary').toString('base64url'))
assert.equal(credential_dict['signCount'], 0)
})
it('can testFromDict', function () {
let credential_data = {
credentialId: Buffer.from(new Uint8Array([1, 2, 3, 4])).toString('base64url'),
isResidentCredential: true,
rpId: 'localhost',
userHandle: Buffer.from(new Uint8Array([1])).toString('base64url'),
privateKey: BASE64_ENCODED_PK,
signCount: 0,
}
let credential = new virtualAuthenticatorCredential().fromDict(credential_data)
let testCredentialId = new Uint8Array([1, 2, 3, 4])
assert.equal(
credential.id().length == testCredentialId.length &&
credential.id().every((item) => testCredentialId.includes(item)) &&
testCredentialId.every((item) => credential.id().includes(item)),
true,
)
if (credential.isResidentCredential() == true) {
assert(true)
} else {
assert(false)
}
assert.equal(credential.rpId(), 'localhost')
let testUserHandle = new Uint8Array([1])
/**
* Checking if credential.userHandle() matches with testUserHandle. Both values are
* arrays so we check if the lengths of both are equal and if one array has
* all its elements in the other array and vice-versa.
*/
assert.equal(
credential.userHandle().length == testUserHandle.length &&
credential.userHandle().every((item) => testUserHandle.includes(item)) &&
testUserHandle.every((item) => credential.userHandle().includes(item)),
true,
)
assert.equal(credential.privateKey(), Buffer.from(BASE64_ENCODED_PK, 'base64url').toString('binary'))
assert.equal(credential.signCount(), 0)
})
})