taconnection.js
Summary
Connector implementing a web service interface to a CVCA/DVCA for the
distribution of card verifiable certificates used for terminal authentication as defined in TR-03129
Class Summary
|
TAConnection |
Class implementing a CVCA/DVCA web service connector
|
function TAConnection(url, isCVCA) {
this.url = url;
this.soapcon = new SOAPConnection(SOAPConnection.SOAP11);
this.verbose = true;
this.lastReturnCode = null;
this.version = "1.1";
this.isCVCA = isCVCA;
}
TAConnection.prototype.setVersion = function(version) {
this.version = version;
}
TAConnection.prototype.getLastError = function() {
return this.lastReturnCode;
}
TAConnection.prototype.getLastReturnCode = function() {
return this.lastReturnCode;
}
TAConnection.prototype.getLastRequest = function() {
return this.request;
}
TAConnection.prototype.getLastResponse = function() {
return this.response;
}
TAConnection.prototype.close = function() {
this.soapcon.close();
}
TAConnection.prototype.getCACertificates = function(messageID, responseURL) {
this.lastReturnCode = null;
if (this.isCVCA) {
var ns = new Namespace("uri:EAC-PKI-CVCA-Protocol/" + this.version);
} else {
var ns = new Namespace("uri:EAC-PKI-DV-Protocol/" + this.version);
}
var ns1 = new Namespace("uri:eacBT/" + this.version);
var request =
<ns:GetCACertificates xmlns:ns={ns} xmlns:ns1={ns1}>
<callbackIndicator>callback_not_possible</callbackIndicator>
<messageID>
</messageID>
<responseURL>
</responseURL>
</ns:GetCACertificates>;
if (typeof(messageID) != "undefined") {
request.callbackIndicator = "callback_possible";
request.messageID.ns1::messageID = messageID;
request.responseURL.ns1::string = responseURL;
}
if (this.verbose) {
GPSystem.trace(request.toXMLString());
}
this.request = request;
try {
var response = this.soapcon.call(this.url, request);
if (this.verbose) {
GPSystem.trace(response.toXMLString());
}
}
catch(e) {
GPSystem.trace("SOAP call to " + this.url + " failed : " + e);
throw new GPError("TAConnection", GPError.DEVICE_ERROR, 0, "getCACertificates failed with : " + e);
}
this.response = response;
var certlist = [];
this.lastReturnCode = response.Result.ns1::returnCode.toString();
if (this.lastReturnCode == "ok_cert_available") {
for each (var c in response.Result.ns1::certificateSeq.ns1::certificate) {
var cvc = new ByteString(c, BASE64);
certlist.push(cvc);
GPSystem.trace(cvc);
}
} else {
return null;
}
return certlist;
}
TAConnection.prototype.requestCertificate = function(certreq, messageID, responseURL) {
this.lastReturnCode = null;
var soapConnection = new SOAPConnection();
if (this.isCVCA) {
var ns = new Namespace("uri:EAC-PKI-CVCA-Protocol/" + this.version);
} else {
var ns = new Namespace("uri:EAC-PKI-DV-Protocol/" + this.version);
}
var ns1 = new Namespace("uri:eacBT/" + this.version);
var request =
<ns:RequestCertificate xmlns:ns={ns} xmlns:ns1={ns1}>
<callbackIndicator>callback_not_possible</callbackIndicator>
<messageID>
</messageID>
<responseURL>
</responseURL>
<certReq>{certreq.toString(BASE64)}</certReq>
</ns:RequestCertificate>
if (typeof(messageID) != "undefined") {
request.callbackIndicator = "callback_possible";
request.messageID.ns1::messageID = messageID;
request.responseURL.ns1::string = responseURL;
}
if (this.verbose) {
GPSystem.trace(request.toXMLString());
}
this.request = request;
try {
var response = this.soapcon.call(this.url, request);
if (this.verbose) {
GPSystem.trace(response.toXMLString());
}
}
catch(e) {
GPSystem.trace("SOAP call to " + this.url + " failed : " + e);
throw new GPError("TAConnection", GPError.DEVICE_ERROR, 0, "RequestCertificate failed with : " + e);
}
this.response = response;
var certlist = [];
this.lastReturnCode = response.Result.ns1::returnCode.toString();
if (this.lastReturnCode.substr(0, 3) == "ok_") {
GPSystem.trace("Received certificates from DVCA:");
for each (var c in response.Result.ns1::certificateSeq.ns1::certificate) {
var cvc = new ByteString(c, BASE64);
certlist.push(cvc);
GPSystem.trace(cvc);
}
} else {
return null;
}
return certlist;
}
TAConnection.prototype.requestForeignCertificate = function(certreq, foreignCAR, messageID, responseURL) {
this.lastReturnCode = null;
var soapConnection = new SOAPConnection();
if (this.isCVCA) {
var ns = new Namespace("uri:EAC-PKI-CVCA-Protocol/" + this.version);
} else {
var ns = new Namespace("uri:EAC-PKI-DV-Protocol/" + this.version);
}
var ns1 = new Namespace("uri:eacBT/" + this.version);
var request =
<ns:RequestForeignCertificate xmlns:ns={ns} xmlns:ns1={ns1}>
<callbackIndicator>callback_not_possible</callbackIndicator>
<messageID/>
<responseURL/>
<foreignCAR>{foreignCAR}</foreignCAR>
<certReq>{certreq.toString(BASE64)}</certReq>
</ns:RequestForeignCertificate>
if (typeof(messageID) != "undefined") {
request.callbackIndicator = "callback_possible";
request.messageID.ns1::messageID = messageID;
request.responseURL.ns1::string = responseURL;
}
if (this.verbose) {
GPSystem.trace(request.toXMLString());
}
this.request = request;
try {
var response = this.soapcon.call(this.url, request);
if (this.verbose) {
GPSystem.trace(response.toXMLString());
}
}
catch(e) {
GPSystem.trace("SOAP call to " + this.url + " failed : " + e);
throw new GPError("TAConnection", GPError.DEVICE_ERROR, 0, "RequestForeignCertificate failed with : " + e);
}
this.response = response;
var certlist = [];
this.lastReturnCode = response.Result.ns1::returnCode.toString();
if (this.lastReturnCode.substr(0, 3) == "ok_") {
GPSystem.trace("Received certificates from DVCA:");
for each (var c in response.Result.ns1::certificateSeq.ns1::certificate) {
var cvc = new ByteString(c, BASE64);
certlist.push(cvc);
GPSystem.trace(cvc);
}
} else {
return null;
}
return certlist;
}
TAConnection.prototype.sendCertificates = function(certificates, messageID, statusInfo) {
var soapConnection = new SOAPConnection();
if (this.isCVCA) {
var ns = new Namespace("uri:EAC-PKI-DV-Protocol/" + this.version);
} else {
var ns = new Namespace("uri:EAC-PKI-TermContr-Protocol/" + this.version);
}
var ns1 = new Namespace("uri:eacBT/" + this.version);
if (this.version == "1.0") {
var request =
<ns:SendCertificates xmlns:ns={ns} xmlns:ns1={ns1}>
<messageID>{messageID}</messageID>
<statusInfo>{statusInfo}</statusInfo>
<certificateSeq>
</certificateSeq>
</ns:SendCertificates>;
} else {
var request =
<ns:SendCertificates xmlns:ns={ns} xmlns:ns1={ns1}>
<messageID>
<ns1:messageID>{messageID}</ns1:messageID>
</messageID>
<statusInfo>{statusInfo}</statusInfo>
<certificateSeq>
</certificateSeq>
</ns:SendCertificates>;
}
var list = request.certificateSeq;
if (certificates) {
for (var i = 0; i < certificates.length; i++) {
var cvc = certificates[i];
list.certificate += <ns1:certificate xmlns:ns1={ns1}>{cvc.toString(BASE64)}</ns1:certificate>
}
}
if (this.verbose) {
GPSystem.trace(request.toXMLString());
}
this.request = request;
try {
var response = this.soapcon.call(this.url, request);
if (this.verbose) {
GPSystem.trace(response.toXMLString());
}
}
catch(e) {
GPSystem.trace("SOAP call to " + this.url + " failed : " + e);
throw new GPError("TAConnection", GPError.DEVICE_ERROR, 0, "SendCertificates failed with : " + e);
}
this.response = response;
this.lastReturnCode = response.Result.ns1::returnCode.toString();
return this.lastReturnCode;
}
TAConnection.toCVCList = function(certlist) {
var certs = [];
for each (var cvcbin in certlist) {
certs.push(new CVC(cvcbin));
}
return certs;
}
TAConnection.fromCVCList = function(certlist) {
var certs = [];
for each (var cvc in certlist) {
certs.push(cvc.getBytes());
}
return certs;
}
TAConnection.test = function() {
var c = new TAConnection("http://localhost:8080/se/dvca");
c.verbose = true;
var certlist = c.getCACertificates();
}
Documentation generated by
JSDoc on Tue Sep 3 22:29:38 2013