Test vectors version 0.4.12.
Tests using the new test vectors will be added in another CL. Changes: AES-GCM has test vectors for modified tags, which were previously missing. ECDSA has more test vectors for potential arithmetic errors. There are no more random test vectors. Webcrypto has a few test vectors with the bitcoin curve (since some libraries want to add this). DSA and ECDSA have more invalid test vectors with r,s = ((q-1)/2 or q-1). This is motivated by some weak ElGamal implementation in beecrypt. ECDH test vectors have some new files where the public key is just a point using SEC 1 / X9.62 format. All tests for ASN modifications are removed from ecdh_test.json, so that this file has a more resonable size. These test vectors are included in the files ecdh_curve_test.json. EDDSA has a few more invalid test vectors for malformed signatures. (I.e. the python implementation in the RFC has a small bug). Adding test vectors for AES-CCM. (tested against BouncyCastle, which sort of abuses the JCE interface) There are some test vectors for RSA-PSS (so far tested with BouncyCastle and boringSSL) More tests will be added when we have an idea what is actually being used. PiperOrigin-RevId: 205802874 GitOrigin-RevId: 250ab89370a0dcfc56e887fb185a494f45f9a3f5
This commit is contained in:
committed by
quannguyentm
parent
f1b3b3429b
commit
8f2cba4d3f
@@ -55,19 +55,18 @@ Ecdh.generateKey = function(curveName) {
|
||||
|
||||
/**
|
||||
* Imports a ECDH key from the given key data.
|
||||
* @param {!string} curveName The curve name
|
||||
* @param {!JSONObject} keyData The key data in JWK format
|
||||
* @param {!Array<string>} usages The usages of the key
|
||||
*
|
||||
* @return {!Promise}
|
||||
*/
|
||||
Ecdh.importKey = function(curveName, keyData, usages) {
|
||||
Ecdh.importKey = function(keyData, usages) {
|
||||
return window.crypto.subtle.importKey(
|
||||
"jwk",
|
||||
keyData,
|
||||
{
|
||||
name: 'ECDH',
|
||||
namedCurve: curveName,
|
||||
namedCurve: keyData['crv'],
|
||||
},
|
||||
true,
|
||||
usages
|
||||
@@ -116,9 +115,9 @@ Ecdh.testKeyDerivation = function() {
|
||||
tc = this;
|
||||
var sk, pk;
|
||||
var promise = new Promise(function(resolve, reject){
|
||||
Ecdh.importKey(tc.curveName, tc.privKeyData, ['deriveBits']).then(function(key){
|
||||
Ecdh.importKey(tc.privKeyData, ['deriveBits']).then(function(key){
|
||||
sk = key;
|
||||
Ecdh.importKey(tc.curveName, tc.pubKeyData, []).then(function(key){
|
||||
Ecdh.importKey(tc.pubKeyData, []).then(function(key){
|
||||
pk = key;
|
||||
Ecdh.deriveBits(pk, sk, tc.sharedKeyLen).then(function(sharedKey){
|
||||
if (tc.result == 'invalid') {
|
||||
@@ -151,15 +150,13 @@ Ecdh.testKeyDerivation = function() {
|
||||
/**
|
||||
* Parameters of a ECDH key derivation test.
|
||||
* @param {!number} id Test case's id
|
||||
* @param {!string} curveName The name of the elliptic curve
|
||||
* @param {!JSONObject} privKeyData The private key's data in JWK format
|
||||
* @param {!JSONObject} pubKeyData The public key's data in JWK format
|
||||
* @param {!string} sharedKey The expected shared key
|
||||
* @param {!string} result The expected result of the test case
|
||||
*/
|
||||
var EcdhTestCase = function(id, curveName, privKeyData, pubKeyData, sharedKey, result) {
|
||||
var EcdhTestCase = function(id, privKeyData, pubKeyData, sharedKey, result) {
|
||||
this.id = id;
|
||||
this.curveName = curveName;
|
||||
this.privKeyData = privKeyData;
|
||||
this.pubKeyData = pubKeyData;
|
||||
this.sharedKey = sharedKey;
|
||||
@@ -179,7 +176,7 @@ function testEcdhVectors() {
|
||||
tg = tv['testGroups'][i];
|
||||
for (var j = 0; j < tg['tests'].length; j++) {
|
||||
tc = tg['tests'][j];
|
||||
var test = new EcdhTestCase(tc['tcId'], tc['curve'], tc['private'], tc['public'],
|
||||
var test = new EcdhTestCase(tc['tcId'], tc['private'], tc['public'],
|
||||
tc['shared'], tc['result']);
|
||||
testCase.addNewTest(tc['tcId'], Ecdh.testKeyDerivation, test);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user