singe/thirdparty/openssl/wycheproof/javascript/TestUtil.js
2023-11-16 22:15:24 -06:00

140 lines
3.4 KiB
JavaScript

/**
* @license
* Copyright 2017 Google Inc. All rights reserved.
* Licensed 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.
*/
/**
* Some utilities for all Javascript tests.
*/
goog.provide('wycheproof.TestUtil');
goog.require('goog.crypt');
goog.require('goog.crypt.base64');
goog.require('goog.json');
/**
* Reads test vectors in JSON format from a file.
* @param {!string} filename
*
* @return {!JSONObject}
*/
wycheproof.TestUtil.readJsonTestVectorsFromFile = function(filename){
var fileContent = goog.loadFileSync_(filename);
assertTrue('Invalid file format (expected JSON)', goog.json.isValid(fileContent));
return JSON.parse(fileContent);
};
/**
* Analyzes the result from a goog.testing.TestCase execution.
*
* @param {!goog.testing.TestCase.Result} result
*/
wycheproof.TestUtil.checkTestCaseResult = function(result) {
var failMsg = '';
if (result.errors.length > 0) {
for (var i = 0; i < result.errors.length; i++) {
failMsg += result.errors[i].message + '\n';
}
fail(failMsg);
}
};
/**
* Checks whether the given string is in hex format.
* @param {!string} s
*
* @return {!boolean}
*/
wycheproof.TestUtil.isHex = function(s) {
return /(^[0-9A-F]*$)|(^[0-9a-f]*$)/.test(s);
};
/**
* Converts a hex string to a ArrayBuffer.
* @param {!string} s
*
* @return {!ArrayBuffer}
*/
wycheproof.TestUtil.hexToArrayBuffer = function(s) {
var bytes = goog.crypt.hexToByteArray(s);
return new Uint8Array(bytes).buffer;
};
/**
* Converts an ArrayBuffer to hex string
* @param {!ArrayBuffer} ab
*
* @return {!string}
*/
wycheproof.TestUtil.arrayBufferToHex = function(ab) {
return goog.crypt.byteArrayToHex(new Uint8Array(ab));
};
/**
* Converts a Base64URL string to hex format
* @param {!string} s
*
* @return {!string}
*/
wycheproof.TestUtil.base64UrlToHex = function (s) {
var b64str = wycheproof.TestUtil.base64UrlToBase64(s);
return wycheproof.TestUtil.base64ToHex(b64str);
};
/**
* Converts a hex string to Base64 format.
* @param {!string} s
*
* @return {!string}
*/
wycheproof.TestUtil.hexToBase64 = function(s) {
var bytes = goog.crypt.hexToByteArray(s);
return goog.crypt.base64.encodeByteArray(bytes);
};
/**
* Converts a base64 string to hex format.
* @param {!string} s
*
* @return {!string}
*/
wycheproof.TestUtil.base64ToHex = function(s) {
var bytes = goog.crypt.base64.decodeStringToByteArray(s);
return goog.crypt.byteArrayToHex(bytes);
};
/**
* Converts a Base64 string to Base64URL
* @param {!string} s
*
* @return {!string}
*/
wycheproof.TestUtil.base64ToBase64Url = function(s) {
return s.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=/g, '');
};
/**
* Converts a Base64Url string to Base64
* @param {!string} s
*
* @return {!string}
*/
wycheproof.TestUtil.base64UrlToBase64 = function(s) {
return (s + '==='.slice((s.length + 3) % 4))
.replace(/\-/g, '+')
.replace(/_/g, '/');
};