b9b3b2119c
This CL only adds test vectors. Changes using the new test vectors are in CL 199130745. There are the following changes to version 0.4: ECDSA test vectors with a valid signature but non-DER encoding have "result":"invalid" and have the flag "BER". Version 0.4.4 has some additional test vectors: - Tests for invalid encoding of the INTEGER 0 (i.e. "0200" instead of "020100") - Truncation after the ASN tag. - ECDH test vectors now include shared secrets in invalid test vectors. This allows to check if an implementation is just sloppy at comparing public keys (i.e. ignoring parameters) or vulnerable (i.e. using modified parameters for ECDH computation) - More tests vectors like the unexplained test vector in b/74209208 - ECDH now has tests vectors where public and private keys are on different, but isomorphic curves. The result is invalid, since the encoding of the shared secret is undefined. - ECDH has test vectors with modified ASN. Again the shared secret computed with the original public key is included so that it is a bit easier to distinguish between serious and non-serious cases. - Some third party test cases were added to all files. They are removed. Version 0.4.5: - adds more test vectors for ECDSA. - adds more test vectors for RSA signatures and splits the signatures into more files, sorted by key size and hash. Version 0.4.6: - adds an uncompressed encoding to EC keys. - rsa_signature_test.json now contains more keys for size 1024 to 4096. Most keys only contain a small number of tests. More extensive tests are done with a 2048 bit key only. New bugs: BouncyCastle and ConsCrypt both accepts some invalid keys (with additional garbage) as valid. These bugs are currently silenced by marking the test vectors as acceptable. I.e. the first goal is to verify that invalid ECDH keys cannot be used to find the private key. PiperOrigin-RevId: 199611433 GitOrigin-RevId: f1f99cc52617e18224ec98f84dcaa55c42df9b46
73 lines
2.5 KiB
JavaScript
73 lines
2.5 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.
|
|
*/
|
|
|
|
/**
|
|
* Tests for RSASSA-PKCS1-v1_5 signature implementations of Web Crypto APIs.
|
|
*/
|
|
goog.provide('wycheproof.webcryptoapi.RSASSA-PKCS1-V1_5');
|
|
goog.require('goog.testing.TestCase');
|
|
goog.require('goog.testing.asserts');
|
|
goog.require('goog.testing.jsunit');
|
|
goog.require('wycheproof.BigInteger');
|
|
goog.require('wycheproof.TestUtil');
|
|
goog.require('wycheproof.webcryptoapi.HashUtil');
|
|
goog.require('wycheproof.webcryptoapi.RsaUtil');
|
|
|
|
var TestUtil = wycheproof.TestUtil;
|
|
var RsaUtil = wycheproof.webcryptoapi.RsaUtil;
|
|
var HashUtil = wycheproof.webcryptoapi.HashUtil;
|
|
var BigInteger = wycheproof.BigInteger;
|
|
// Test vector file
|
|
var RSASSA_PKCS1_SIGNATURE_VECTOR_FILE
|
|
= '../../testvectors/rsa_signature_test.json';
|
|
|
|
|
|
/**
|
|
* Tests RSASSA-PKCS1-v1_5 signature implementation with a number of vectors.
|
|
*
|
|
* @return {!Promise}
|
|
*/
|
|
function testRsaSsaPkcs1Vectors() {
|
|
var tv = TestUtil.readJsonTestVectorsFromFile(
|
|
RSASSA_PKCS1_SIGNATURE_VECTOR_FILE);
|
|
var testCase = new goog.testing.TestCase();
|
|
|
|
for (var i = 0; i < tv['testGroups'].length; i++) {
|
|
var tg = tv['testGroups'][i];
|
|
var e = BigInteger.fromHex(tg['e']).toBase64Url();
|
|
var n = BigInteger.fromHex(tg['n']).toBase64Url();
|
|
var hashAlg = tg['sha'];
|
|
if (SUPPORTED['hash'].indexOf(hashAlg) == -1) {
|
|
continue;
|
|
}
|
|
for (var j = 0; j < tg['tests'].length; j++) {
|
|
var tc = tg['tests'][j];
|
|
var msg = TestUtil.hexToArrayBuffer(tc['msg']);
|
|
var sig = TestUtil.hexToArrayBuffer(tc['sig']);
|
|
var result = tc['result'];
|
|
var tcId = tc['tcId'];
|
|
|
|
// Creates new Test Case object
|
|
var test = new RsaUtil.RsaSignatureTestCase(tcId, e, n, hashAlg,
|
|
RsaUtil.RSASSA_PKCS1, msg, sig, result);
|
|
testCase.addNewTest('Test case ' + tcId, RsaUtil.testVerification, test);
|
|
}
|
|
}
|
|
|
|
return testCase.runTestsReturningPromise().then(TestUtil.checkTestCaseResult);
|
|
}
|
|
|