OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 'use strict'; | |
6 | |
7 var assertEq = chrome.test.assertEq; | |
8 var assertTrue = chrome.test.assertTrue; | |
9 var callbackPass = chrome.test.callbackPass; | |
10 var succeed = chrome.test.succeed; | |
11 | |
12 // X.509 certificate in DER encoding issued by 'root.pem' which is set to be | |
13 // trusted by the test setup. | |
14 // Read from 'l1_leaf.der', generated by create_test_certs.sh . | |
15 var l1_leaf_cert = null; | |
16 | |
17 // Reads the binary file at |path| and passes it as a Uint8Array to |callback|. | |
18 function readFile(path, callback) { | |
19 var oReq = new XMLHttpRequest(); | |
20 oReq.responseType = "arraybuffer"; | |
21 oReq.open("GET", path, true /* asynchronous */); | |
22 oReq.onload = function() { | |
23 var arrayBuffer = oReq.response; | |
24 if (arrayBuffer) { | |
25 callback(new Uint8Array(arrayBuffer)); | |
26 } else { | |
27 callback(null); | |
28 } | |
29 }; | |
30 oReq.send(null); | |
31 } | |
32 | |
33 function compareBuffers(a, b) { | |
34 if (a.length != b.length) | |
35 return false; | |
36 for (var i = 0; i < a.length; i++) { | |
37 if (a[i] != b[i]) | |
38 return false; | |
39 } | |
40 return true; | |
41 } | |
42 | |
43 var signDigestRequest; | |
44 var signCallback; | |
45 | |
46 function register() { | |
47 assertTrue(!!chrome.certificateProvider); | |
48 assertTrue(!!chrome.certificateProvider.onCertificatesRequested); | |
49 assertTrue(!!chrome.certificateProvider.onSignDigestRequested); | |
50 | |
51 var validCertInfo = { | |
52 certificate: l1_leaf_cert.buffer, | |
53 supportedHashes: ['SHA1'] | |
54 }; | |
55 var invalidCert = new Uint8Array([1, 2, 3, 4, 5]); | |
56 var invalidCertInfo = { | |
57 certificate: invalidCert.buffer, | |
58 supportedHashes: ['SHA256'] | |
59 }; | |
60 | |
61 function checkResult(rejectedCerts) { | |
62 assertEq(1, rejectedCerts.length); | |
63 assertTrue(compareBuffers(invalidCert, new Uint8Array(rejectedCerts[0]))); | |
64 } | |
65 | |
66 function reportCertificates(reportCallback) { | |
67 reportCallback([validCertInfo, invalidCertInfo], callbackPass(checkResult)); | |
68 } | |
69 | |
70 chrome.certificateProvider.onCertificatesRequested.addListener( | |
71 callbackPass(reportCertificates)); | |
72 | |
73 chrome.certificateProvider.onSignDigestRequested.addListener(function( | |
74 request, callback) { | |
75 assertTrue( | |
76 compareBuffers(l1_leaf_cert, new Uint8Array(request.certificate))); | |
77 // The sign request must refer to the only hash that was declared to be | |
78 // supported. | |
79 assertEq(validCertInfo.supportedHashes[0], request.hash); | |
bartfab (slow)
2015/09/08 14:55:17
Nit: Assert first that |supportedHashes| has lengt
pneubeck (no reviews)
2015/09/08 15:30:51
Done.
| |
80 signCallback = callback; | |
81 signDigestRequest = request; | |
82 succeed(); | |
83 }); | |
84 | |
85 succeed(); | |
86 } | |
87 | |
88 function replyWithSignature(signature) { | |
89 signCallback(signature.buffer); | |
90 } | |
91 | |
92 function replyWithSignatureSecondTime() { | |
93 var signature = new Uint8Array([1,2,3]); | |
94 try { | |
95 signCallback(signature.buffer); | |
96 } catch (e) { | |
97 return true; | |
98 } | |
99 return false; | |
100 } | |
101 | |
102 function runTest() { | |
103 chrome.test.runTests([register]); | |
104 } | |
105 | |
106 readFile('l1_leaf.der', function(cert) { | |
107 l1_leaf_cert = cert; | |
108 runTest(); | |
109 }); | |
OLD | NEW |