test ecdsa support, spaces for whitespace
This commit is contained in:
parent
cda26c98b5
commit
c66f92d506
|
@ -14,6 +14,32 @@
|
||||||
var PromiseA = window.Promise;
|
var PromiseA = window.Promise;
|
||||||
var crypto = window.crypto;
|
var crypto = window.crypto;
|
||||||
|
|
||||||
|
function testEcdsaSupport() {
|
||||||
|
var opts = {
|
||||||
|
type: 'ECDSA'
|
||||||
|
, bitlength: '256'
|
||||||
|
};
|
||||||
|
return BACME.accounts.generateKeypair(opts).then(function (jwk) {
|
||||||
|
return crypto.subtle.importKey(
|
||||||
|
"jwk"
|
||||||
|
, jwk
|
||||||
|
, { name: "ECDSA", namedCurve: "P-256" }
|
||||||
|
, true
|
||||||
|
, ["sign"]
|
||||||
|
).then(function (privateKey) {
|
||||||
|
return window.crypto.subtle.exportKey("pkcs8", privateKey);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
testEcdsaSupport().then(function () {
|
||||||
|
console.log("supports ECDSA");
|
||||||
|
BROWSER_SUPPORTS_ECDSA = true;
|
||||||
|
}).catch(function () {
|
||||||
|
console.log("DOES NOT supports ECDSA");
|
||||||
|
BROWSER_SUPPORTS_ECDSA = false;
|
||||||
|
});
|
||||||
|
// TODO test RSA support
|
||||||
|
|
||||||
var apiUrl = 'https://acme-{{env}}.api.letsencrypt.org/directory';
|
var apiUrl = 'https://acme-{{env}}.api.letsencrypt.org/directory';
|
||||||
function updateApiType() {
|
function updateApiType() {
|
||||||
console.log("type updated");
|
console.log("type updated");
|
||||||
|
@ -497,36 +523,36 @@
|
||||||
"data:text/octet-stream;base64," + window.btoa(certs);
|
"data:text/octet-stream;base64," + window.btoa(certs);
|
||||||
|
|
||||||
// https://stackoverflow.com/questions/40314257/export-webcrypto-key-to-pem-format
|
// https://stackoverflow.com/questions/40314257/export-webcrypto-key-to-pem-format
|
||||||
function spkiToPEM(keydata){
|
function spkiToPEM(keydata){
|
||||||
var keydataS = arrayBufferToString(keydata);
|
var keydataS = arrayBufferToString(keydata);
|
||||||
var keydataB64 = window.btoa(keydataS);
|
var keydataB64 = window.btoa(keydataS);
|
||||||
var keydataB64Pem = formatAsPem(keydataB64);
|
var keydataB64Pem = formatAsPem(keydataB64);
|
||||||
return keydataB64Pem;
|
return keydataB64Pem;
|
||||||
}
|
}
|
||||||
|
|
||||||
function arrayBufferToString( buffer ) {
|
function arrayBufferToString( buffer ) {
|
||||||
var binary = '';
|
var binary = '';
|
||||||
var bytes = new Uint8Array( buffer );
|
var bytes = new Uint8Array( buffer );
|
||||||
var len = bytes.byteLength;
|
var len = bytes.byteLength;
|
||||||
for (var i = 0; i < len; i++) {
|
for (var i = 0; i < len; i++) {
|
||||||
binary += String.fromCharCode( bytes[ i ] );
|
binary += String.fromCharCode( bytes[ i ] );
|
||||||
}
|
}
|
||||||
return binary;
|
return binary;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function formatAsPem(str) {
|
function formatAsPem(str) {
|
||||||
var finalString = '-----BEGIN ' + pemName + ' PRIVATE KEY-----\n';
|
var finalString = '-----BEGIN ' + pemName + ' PRIVATE KEY-----\n';
|
||||||
|
|
||||||
while(str.length > 0) {
|
while(str.length > 0) {
|
||||||
finalString += str.substring(0, 64) + '\n';
|
finalString += str.substring(0, 64) + '\n';
|
||||||
str = str.substring(64);
|
str = str.substring(64);
|
||||||
}
|
}
|
||||||
|
|
||||||
finalString = finalString + '-----END ' + pemName + ' PRIVATE KEY-----';
|
finalString = finalString + '-----END ' + pemName + ' PRIVATE KEY-----';
|
||||||
|
|
||||||
return finalString;
|
return finalString;
|
||||||
}
|
}
|
||||||
|
|
||||||
var wcOpts;
|
var wcOpts;
|
||||||
var pemName;
|
var pemName;
|
||||||
|
@ -543,23 +569,23 @@
|
||||||
, namedCurve: "P-256"
|
, namedCurve: "P-256"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
return crypto.subtle.importKey(
|
return crypto.subtle.importKey(
|
||||||
"jwk"
|
"jwk"
|
||||||
, info.serverJwk
|
, info.serverJwk
|
||||||
, wcOpts
|
, wcOpts
|
||||||
, true
|
, true
|
||||||
, ["sign"]
|
, ["sign"]
|
||||||
).then(function (privateKey) {
|
).then(function (privateKey) {
|
||||||
return window.crypto.subtle.exportKey("pkcs8", privateKey);
|
return window.crypto.subtle.exportKey("pkcs8", privateKey);
|
||||||
}).then (function (keydata) {
|
}).then (function (keydata) {
|
||||||
var pem = spkiToPEM(keydata);
|
var pem = spkiToPEM(keydata);
|
||||||
$qs('#js-privkey').innerHTML = pem;
|
$qs('#js-privkey').innerHTML = pem;
|
||||||
$qs("#js-download-privkey-link").href =
|
$qs("#js-download-privkey-link").href =
|
||||||
"data:text/octet-stream;base64," + window.btoa(pem);
|
"data:text/octet-stream;base64," + window.btoa(pem);
|
||||||
steps[i]();
|
steps[i]();
|
||||||
}).catch(function(err){
|
}).catch(function(err){
|
||||||
console.error(err.toString());
|
console.error(err.toString());
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue